当你看完这篇文章若是不能理解什么是带缓冲的I/O与无缓冲的I/O的区别,随意喷!!!
当你学习Unix高级编程时会遇到不带缓冲的I/O函数,比如open、read、write、lseek、close等等,那这与带缓冲的I/O有什么区别????
我们得先说说什么是高速缓冲存储器,先别急慢慢看,看不懂算我输!!!这个东东对整个计算机性能的提升有很大的帮助,具体就涉及到两个器件的运行速度了,也就是cpu与内存的运行速度,想想也知道两个不同器件的运行速度肯定不一样,最基本的硬件架构都不一样。那这就有一个问题产生了,cpu的速度大于内存的,那要是cpu不挺的往内存的某一个地址写数据,由于内存的速度跟不上,那数据就会被覆盖了,所以解决方案就是在cpu与内存之间加一个高速缓冲存储器,高速缓冲存储器的速度介于cpu与内存之间,那就好办事了,cpu先把数据放在这个存储器上,然后内存向存储器取数据,然后发送到其他地方,在这段时间里,内存向存储器取的数据不会因为cpu速度过快直接被覆盖,而是放在了高速缓冲存储器上,带内存再次取数据时间就够了!!!
同样的道理用在磁盘上,比如你写了一个进程,这个进程不挺的向磁盘写数据,若是进程发送的数据过快,磁盘在写的过程中就极有可能会被新的数据所覆盖,所以就出现了所谓的磁盘高速缓存来做缓冲,它其实是内存的一部分,也就是我们所说的内存条的一部分,当做缓冲,这就是它的实际的物理意义:就是内存的一部分。那这有什么好处???想想也知道好处大得很,说说原理,有个概念叫局部性原理。局部性原理包含很多的局部性,比如时间的局部性,就是说进程A在t0时刻访问磁盘的某一地址,在t0+t1时刻又来访问,就叫时间的局部性。若是访问的次数特别多,访问的时间的间隔特别短,那么进程A就要不挺的访问磁盘,就好比出家门玩的时候,你忘记带某一东西,你回去拿,忽然发现又忘记带了,这个时候你肯定想要是有人帮我拿了,在送的路上就好了不必在回家,同样的道理在进程A与磁盘之间,若是频繁访问某一地址,通过磁盘高速缓存来把数据存起来后方便以后在访问,更何况现在是变成了进程A直接与磁盘高速缓存(或者说内存)之间的访问了,这不更快了吗!!!所以一般出现一个某一个特定扇区的I/O请求时,这个请求会先查看所要访问的数据在不在缓存里面,在就访问,不在就把这个扇区的数据先拷贝到缓存里面,然后在访问缓存里面的数据。
是不是感觉又理解了一点操作系统的小知识,我们继续说!!!那上面这些与I/0有无缓冲有什么联系???
对于带缓冲的I/O通过一个叫缓冲区高速缓存最为缓存,其实它就是磁盘高速缓存。若是用户进程要访问某一个设备,注意不一定是磁盘,任何一个设备,由于每个I/O设备都与一个特殊文件相关联,而文件由文件系统所管理,所以对文件的I/O操作,就相当于对设备的操作了;而文件放在磁盘上,而且磁盘高速缓存(内存的一部分)又是被用来作为磁盘的缓存,所以某一设备(文件)的缓存可以是磁盘高速缓存(内存的一部分)其中的一部分!!!如下图所示:
这里可以是任意的设备
在托管方面,许多企业只熟悉共享主机和云服务器。虽然这些解决方案适用于小到中...
1.世上最痛苦的事,不是永恒的孤寂,而是明明看见温暖与生机,我却无能为力。世...
2018年10月16日,曙光对外发布了全球首款闭式循环一体液冷八路服务器I980-G30。...
工信部印发了《工业互联网专项工作组2020年工作计划》。计划提出了提升基础设施...
SAN(存储区域网络)和NAS(网络附加存储)都是存储系统的基本结构,虽然它们看起来...
前言 日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis...
图片来自 Pexels 这么多年过去了,这句话或深或浅地影响了我的技术选择,以至于...
作为一名资深(fu xiu)的程序猿来说,一直不想向IDEA低头可能是我对MyEclipse最大...
云计算技术髙速转型至今,被视为将要更改网站开发、全渠道工作代管的局势。将云...
2018年年底,微软云宣布其云连接服务产品ExpressRoute在中国东部 2 及中国北部 2...