📜  I / O缓冲及其各种技术

📅  最后修改于: 2021-08-29 11:59:06             🧑  作者: Mango

缓冲区是一个存储区,用于存储在两个设备之间或一个设备与应用程序之间传输的数据。

I / O缓冲的用途:

  • 进行缓冲以有效处理数据流的生产者和使用者之间的速度不匹配。
  • 在主内存中会产生一个缓冲区,以堆积从调制解调器接收的字节。
  • 接收到缓冲区中的数据后,只需一次操作即可将数据从缓冲区传输到磁盘。
  • 数据传输的过程不是瞬时的,因此调制解调器需要另一个缓冲区来存储其他传入的数据。
  • 当第一个缓冲区已满时,然后请求将数据传输到磁盘。
  • 然后,调制解调器开始将其他传入数据填充到第二个缓冲区中,同时将第一个缓冲区中的数据传输到磁盘上。
  • 当两个缓冲区均完成其任务后,调制解调器将切换回第一个缓冲区,同时将第二个缓冲区中的数据传输到磁盘。
  • 使用两个缓冲区会使数据的生产者和使用者分解,从而最大程度地缩短了它们之间的时间要求。
  • 缓冲还为具有不同数据传输大小的设备提供了变化。

各种I / O缓冲技术的类型:

1.单缓冲区:
缓冲区由操作系统提供给主内存的系统部分。

面向块的设备–

  • 系统缓冲区接受输入。
  • 接受输入后,该块将被进程转移到用户空间,然后该进程请求另一个块。
  • 两个块可同时工作,当用户进程处理一个数据块时,下一个块将被读入。
  • 操作系统可以交换进程。
  • 操作系统可以将系统缓冲区的数据记录到用户进程中。

面向流的设备–

  • 一次行操作用于滚动终端。用户一次输入一行,每行末尾有回车信号。
  • 每次模式有效时,在窗体模式下使用字节一次操作。

2.双缓冲区:

面向块–

  • 系统中有两个缓冲区。
  • 驱动程序或控制器使用一个缓冲区来存储数据,同时等待更高级别的层次结构使用它。
  • 其他缓冲区用于存储来自较低级别模块的数据。
  • 双缓冲也称为缓冲区交换。
  • 双缓冲的主要缺点是过程的复杂性增加了。
  • 如果该进程执行快速的I / O突发操作,则使用双缓冲可能会不足。

面向流–

  • 在一次I / O时,除非进程在double缓冲区之前运行,否则无需暂停用户进程的输入或输出。
  • 一次进行字节操作时,双缓冲区比两倍长度的单个缓冲区没有优势。

3.循环缓冲区:

  • 当使用两个以上的缓冲区时,缓冲区的集合本身称为循环缓冲区。
  • 在这种情况下,数据不会直接从生产者传递到消费者,因为在缓冲区被消耗之前,由于缓冲区的覆盖,数据将发生变化。
  • 生产者只能在缓冲区i中的数据等待使用时填充缓冲区i-1。