Buffer
buffer是一个临时存储区域,通常是内存中的一个块,在等待从输入设备传输到输出设备时,数据被放置在其中。它主要用于输入/输出进程。例如,如果您要打印一个长文档,您不会希望CPU等候在一旁不停的向打印机询问“是否准备好打印下一段?”。相反,CPU将文档数据填充到内存buffer,告知打印机打印buffer内容,然后返回继续处理其他事务。
如果发送方的传输速度慢于接收方,则会在接收方的主存中创建一个buffer,并积累从发送方接收到的字节。数据的所有字节到达后,它将为接收器提供操作数据。
当发送方和接收方传输数据的大小不同时,buffer帮助协调。在计算机网络中,buffer用于数据的分片和重组。在发送端,大数据被分割成小数据包并通过网络发送。在接收端,buffer被创建,用来收集所有数据包并将其再次组合成一个大数据。
buffer还支持应用程序I/O的复制语义。复制语义可以用一个示例来解释,假设应用程序需要将存在buffer里的数据写入硬盘。为此,应用程序调用 write() 系统调用。现在假设应用程序在系统调用返回之前更改buffer数据。在这种情况下,在系统调用时复制语义同时提供数据的原始版本和修改版本。
buffer有三种容量:
零容量:这里的buffer内存最大值为零。它不能包含任何数据,就是实时传递,因此接收方收到数据之前,发送方需要被阻止。
有限容量:这里的buffer内存大小是有限的。发送方最多可以发送n个数据块。如果buffer内存已满,发送方将被阻止,直到内存中有可用空间。
无限容量:这里的buffer内存可能是无限的。可以发送任意数量的数据块,发送方从不被阻止。(buffer的无限容量实际上是不可能的)
Cache
cache是计算机中一个较小且快速的内存部件,在CPU和主存之间。cache比主存快得多,采用这种方法(即分级缓存的方法)更经济。
cache可以是RAM的一部分,也可以是磁盘的一部分。当主磁盘被用作cache时,该过程称为磁盘cache,它也可被用作内存缓存,其中最近使用的数据存储在磁盘cache中。如果一个正在运行的程序想访问磁盘上的数据,它首先检查磁盘缓存,并且只有当所需数据不在磁盘缓存时才检查磁盘。这使得数据访问过程更快,因为从磁盘访问数据要慢得多。
Buffer和Cache的区别
序号 | BUFFER | CACHE |
---|---|---|
1 | 两个进程交换数据时会产生速度差异,Buffer用于弥补该差异。(用于匹配发送方和接收方之间的传输速度) | Cache可以提高重复使用数据的访问速度 |
2 | 它主要用于输入/输出进程 | 它在磁盘读写过程中使用 |
3 | 它是RAM上的一个普通存储区域,用于临时存储 | 它是计算机中一个又小又快的内存组件,是一个用于临时存储的高速存储区 |
4 | 它存储原始数据 | 它存储原始数据的副本 |
5 | 它总是在主存储器(RAM)中实现。 | 它可以在RAM和磁盘中实现 |
6 | 它由动态RAM制成 | 它由静态RAM制成 |
7 | 它可以在键盘上用来校订打字错误 | 它不具备这样的特征 |
参考文档
[1]ashvika99.Difference between Buffer and Cache[EB/OL].https://www.geeksforgeeks.org/difference-between-buffer-and-cache/,2020-08-21.
[2]Tech Differences.Difference Between Buffering and Caching in OS[EB/OL].https://techdifferences.com/difference-between-buffering-and-caching-in-os.html,2021-01-01.
[3]Zablon.Difference Between Cache and Buffer[EB/OL].http://www.differencebetween.net/technology/hardware-technology/difference-between-cache-and-buffer/,2011-07-05.