I/O缓冲
缓冲区可以用于缓和CPU与I/O设备之间速度不匹配的矛盾。可用于讨论缓冲方法的I/O设备有两种,一种是面向块的 (block-oriented)设备,另一种是面向流的 (stream-oriented)设备。
面向块的设备将数据保存在大小固定的块中。每次传输只传一块。比如磁盘等。
面向流的设备以字节流的方式输入输出数据。比如终端、打印机等。
常见的缓冲方法有:单缓冲、双缓冲、循环缓冲
单缓冲
在I/O设备和处理机之间设置一个缓冲区。当设备与处理机 (用户进程)交换数据时,先把数据写入操作系统的缓冲区。当缓冲区数据传输完毕时,再将数据转移到用户进程中。
在生活中,家里的垃圾桶就是一个常见的例子。我们不断的往垃圾桶里丢垃圾,直到垃圾桶满了,再去给它转移到小区的大垃圾箱。
将从I/O设备写入数据到缓冲区的时间计作T (Transmission),转移到用户进程计作M (Move),计算处理数据计作C (Computation)。初试状态为用户进程(工作区)为满的(绿色正方形代表数据),缓冲区为空的。如下图所示:
如果存在一个单缓冲区,那么执行时间为 max [ C , T ] + M \max [C,T] + M max[C,T]+M .
如果不存在缓冲区,那么执行时间为 T + C T+C T+C.
双缓冲
操作系统给内存中的系统部分分配两个缓冲区。I/O设备先输入数据到一号缓冲区,一号缓冲区被装满了,才可以传输给二号缓冲区。
循环缓冲
如果进程需要爆发式地执行大量I/O操作,双缓冲也可能无法满足需要。在这种情况下,使用多于两个缓冲区来缓解不足。
参考
- [1] [《操作系统 精髓与设计原理》]
- [2] [《王道 操作系统考研复习指导》]