缓冲区是一个存储区,用于存储在两个设备之间或一个设备与应用程序之间传输的数据。
I / O缓冲的用途:
- 进行缓冲以有效处理数据流的生产者和使用者之间的速度不匹配。
- 在主内存中会产生一个缓冲区,以堆积从调制解调器接收的字节。
- 接收到缓冲区中的数据后,只需一次操作即可将数据从缓冲区传输到磁盘。
- 数据传输的过程不是瞬时的,因此调制解调器需要另一个缓冲区来存储其他传入的数据。
- 当第一个缓冲区已满时,然后请求将数据传输到磁盘。
- 然后,调制解调器开始将其他传入数据填充到第二个缓冲区中,同时将第一个缓冲区中的数据传输到磁盘上。
- 当两个缓冲区均完成其任务后,调制解调器将切换回第一个缓冲区,同时将第二个缓冲区中的数据传输到磁盘。
- 使用两个缓冲区会使数据的生产者和使用者分解,从而最大程度地缩短了它们之间的时间要求。
- 缓冲还为具有不同数据传输大小的设备提供了变化。
各种I / O缓冲技术的类型:
1.单缓冲区:
缓冲区由操作系统提供给主内存的系统部分。
面向块的设备–
- 系统缓冲区接受输入。
- 接受输入后,该块将被进程转移到用户空间,然后该进程请求另一个块。
- 两个块可同时工作,当用户进程处理一个数据块时,下一个块将被读入。
- 操作系统可以交换进程。
- 操作系统可以将系统缓冲区的数据记录到用户进程中。
面向流的设备–
- 一次行操作用于滚动终端。用户一次输入一行,每行末尾有回车信号。
- 每次模式有效时,在窗体模式下使用字节一次操作。
2.双缓冲区:
面向块–
- 系统中有两个缓冲区。
- 驱动程序或控制器使用一个缓冲区来存储数据,同时等待更高级别的层次结构使用它。
- 其他缓冲区用于存储来自较低级别模块的数据。
- 双缓冲也称为缓冲区交换。
- 双缓冲的主要缺点是过程的复杂性增加了。
- 如果该进程执行快速的I / O突发操作,则使用双缓冲可能会不足。
面向流–
- 在一次I / O时,除非进程在double缓冲区之前运行,否则无需暂停用户进程的输入或输出。
- 一次进行字节操作时,双缓冲区比两倍长度的单个缓冲区没有优势。
3.循环缓冲区:
- 当使用两个以上的缓冲区时,缓冲区的集合本身称为循环缓冲区。
- 在这种情况下,数据不会直接从生产者传递到消费者,因为在缓冲区被消耗之前,由于缓冲区的覆盖,数据将发生变化。
- 生产者只能在缓冲区i中的数据等待使用时填充缓冲区i-1。