操作系统——缓冲区(buffer)与缓存(cache)

一、什么是缓冲区

缓冲区(buffer),它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的。

缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

二、为什么要引入缓冲区

我们为什么要引入缓冲区呢?

高速设备与低速设备的不匹配,势必会让高速设备花时间等待低速设备,我们可以在这两者之间设立一个缓冲区。

缓冲区的作用:

1.可以解除两者的制约关系,数据可以直接送往缓冲区,高速设备不用再等待低速设备,提高了计算机的效率。例如:我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。

2.可以减少数据的读写次数,如果每次数据只传输一点数据,就需要传送很多次,这样会浪费很多时间,因为开始读写与终止读写所需要的时间很长,如果将数据送往缓冲区,待缓冲区满后再进行传送会大大减少读写次数,这样就可以节省很多时间。例如:我们想将数据写入到磁盘中,不是立马将数据写到磁盘中,而是先输入缓冲区中,当缓冲区满了以后,再将数据写入到磁盘中,这样就可以减少磁盘的读写次数,不然磁盘很容易坏掉。

简单来说,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来存储数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

三、缓冲区的类型

缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。

1、全缓冲

在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。

2、行缓冲

在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。

3、不带缓冲

也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。

四、缓冲区的刷新

下列情况会引发缓冲区的刷新:

  • 缓冲区满时;
  • 关闭文件。

可见,缓冲区满或关闭文件时都会刷新缓冲区,进行真正的I/O操作。

大家要仔细理解缓冲区刷新的意思,刷新字面上的意思是用刷子刷,把原来旧的东西变新了,这里就是改变的意思,例如像缓冲区溢出的时候,多余出来的数据会直接将之前的数据覆盖,这样缓冲区里的数据就发生了改变。

 比如在Linux下,操作命令行就属于常见的行缓冲模式 输入一行命令例如ls,命令ls就会进入到缓冲区内,不输入回车的话,什么也不会发生,当输入回车就会执行真正的IO操作

 

缓存(cache)

cache是一个非常大的概念。

一、

CPU的Cache,它中文名称是高速缓冲存储器,读写速度很快,几乎与CPU一样。由于CPU的运算速度太快,内存的数据存取速度无法跟上CPU的速度,所以在cpu与内存间设置了cache为cpu的数据快取区。当计算机执行程序时,数据与地址管理部件会预测可能要用到的数据和指令,并将这些数据和指令预先从内存中读出送到Cache。一旦需要时,先检查Cache,若有就从Cache中读取,若无再访问内存,现在的CPU还有一级cache,二级cache。简单来说,Cache就是用来解决CPU与内存之间速度不匹配的问题,避免内存与辅助内存频繁存取数据,这样就提高了系统的执行效率。

二、
磁盘也有cache,硬盘的cache作用就类似于CPU的cache,它解决了总线接口的高速需求和读写硬盘的矛盾以及对某些扇区的反复读取。

三、

浏览器缓存(Browser Caching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览,并且可以减少服务器的压力。这个过程与下载非常类似,不过下载是用户的主动过程,并且下载的数据一般是长时间保存,游览器的缓存的数据只是短时间保存,可以人为的清空

四、

同样cache也有大小,例如现在市面上购买的CPU的cache越大,级数越多,CPU的访问速度越快。cache在很多方面都有应用,就不一一列举了。

 

缓存(cache)与缓冲(buffer)的主要区别

Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。

Cache的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。

简单来说就是buffer偏重于写,而cache偏重于读。

 

ps:有时候大家要好好理解这些专有名词字面上的意思,对理解这些概念有好处,缓冲:缓解冲击,缓存:临时存储

  • 17
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux中的buffer cache内存是指用于缓存磁盘数据的一块内存区域。当应用程序需要读取磁盘上的数据时,操作系统会将数据读入buffer cache中,以便下次读取时可以直接从内存中获取,避免频繁的磁盘访问,提高系统性能。同时,当应用程序需要写入数据时,操作系统也会将数据写入buffer cache中,然后再异步地将数据写入磁盘,以提高写入效率。buffer cache内存的大小可以通过系统参数进行配置,一般情况下会根据系统的内存大小和磁盘访问情况进行调整。 ### 回答2: 在Linux操作系统中,buffer cache缓冲区高速缓存)是用来提高文件系统性能的一种机制,是内核将经常访问的数据缓存内存中的一部分。它的主要作用是降低磁盘I/O操作的延迟,提高文件系统的读取和写入速度。 Buffer cache是由内核维护的一块内存区域,它存储了最近被读取或写入的文件块数据。当应用程序需要读取文件时,内核会首先查找buffer cache,如果要读取的文件块在cache中,则直接从cache中读取数据,避免了磁盘I/O操作。如果要写入数据到文件,内核会将数据写入buffer cache,并在适当的时机将数据同步到磁盘上。 buffer cache的大小是动态调整的,根据系统的负载和需求进行自动调整。内核会根据当前系统内存的可用情况和其它进程的需求来判断是否需要释放部分buffer cache内存。如果系统内存紧张,内核会减少buffer cache的大小,以释放内存供其它进程使用;如果系统内存较为充足,内核会增加buffer cache的大小,以提高文件系统的性能。 使用buffer cache可以大幅提高文件系统的性能,尤其是对于频繁的读取和写入操作。通过将经常访问的数据缓存内存中,可以减少对磁盘的访问次数,大大降低了I/O延迟带来的性能损耗。同时,缓存内存中的数据可以更快地供应给应用程序,提高了文件系统的响应速度。 总之,buffer cache是Linux操作系统中的一种内存机制,用来提高文件系统的性能。它通过将经常访问的数据缓存内存中,减少磁盘I/O操作,提高文件系统的读取和写入速度。同时,buffer cache的大小会根据系统的负载和需求进行动态调整,以确保系统的内存使用和性能的平衡。 ### 回答3: 在Linux操作系统中,buffer cache是一种磁盘I/O缓存机制,用于提高文件系统的访问性能。 当应用程序读取文件时,操作系统将文件的内容从磁盘读取到内存中的buffer cache中。如果下次再次读取同样的文件内容,操作系统可以直接从buffer cache中读取,而不需要再次去磁盘中访问。这样可以显著减少磁盘I/O操作,提高读取文件的速度。 类似地,当应用程序对文件进行写入时,数据首先被写入到buffer cache中,然后操作系统可以根据需要决定何时将数据刷新到磁盘中。这样可以将多个小的写入操作合并为一个大的写入操作,减少了磁盘I/O的负担,并提高了写入文件的效率。 Buffer cache内存的大小是动态分配的,它根据系统的需要自动增加或减少。当文件系统需要更多的内存时,它会从系统中获取一部分内存作为buffer cache,用于缓存更多的文件内容。当内存不足时,buffer cache会释放一部分内存,以便为其他系统组件提供更多的内存。 使用buffer cache机制可以显著提高文件系统的性能,比如读取和写入文件的速度。然而,buffer cache的使用也存在一些风险,比如在系统发生意外关机的情况下,尚未被写入磁盘的数据将会丢失。因此,在使用buffer cache时需要注意数据的持久性与一致性的问题,确保数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值