首页 > 基础设施 > 正文

原理讲解有缓冲I/O与无缓冲I/O的区别

2018-11-05 13:28:08  来源:今日头条

摘要:当你学习Unix高级编程时会遇到不带缓冲的I O函数,比如open、read、write、lseek、close等等,那这与带缓冲的I O有什么区别?
关键词: 缓冲I O
  当你看完这篇文章若是不能理解什么是带缓冲的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操作,就相当于对设备的操作了;而文件放在磁盘上,而且磁盘高速缓存(内存的一部分)又是被用来作为磁盘的缓存,所以某一设备(文件)的缓存可以是磁盘高速缓存(内存的一部分)其中的一部分!!!如下图所示:
 
  \
  这里可以是任意的设备
 
  这个缓冲区就是磁盘高速缓存(内存的一部分)其中的一部分的缓存。某一进程通过文件系统接口向设备对应的文件写数据,文件系统把数据先存在缓存器中,然后发送到设备驱动程序控制设备。设备由所对应的控制器(可以简单的理解为寄存器)所管理,学过单片机的都知道,简单往寄存器写数据就能控制设备了,比如串口,只要会了串口,蓝牙不在话下!若是把控制器里面的寄存器映射到内存(也就是所谓I/O映射),再加上磁盘高速缓存是内存的一部分,那不就是数据在内存之间变化了,速度就更快了。
 
  而对于无缓冲的I/O就没有其中的缓冲了,也就是进程通过DMA直接与I/O设备交换数据了,但是执行无缓冲的I/0被锁定在内存,不能被换出,那么这部分内存不能用了,信息交流的就少了不少,导致整个系统的性能有所下降,但是这是进程执行I/O最快的方法了

第三十四届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:pingxiaoli

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。