# IO缓冲区

#### 目的

解决CPU与设备之间速度不匹配的矛盾，协调逻辑记录大小和物理记录大小不一致的问题，提高CPU和设备的并行性，减少I/O操作对CPU的中断次数，防空对CPU中断响应时间的要求。

#### 缓冲区

在内存中开辟的存储区，专门用于临时存放I/O操作的数据。

#### 操作

**写操作**

将数据送至缓冲区，直到装满，进程继续计算，同时系统将缓冲区的内容写到设备上。

**读操作**

系统将设备上的物理记录读至缓冲区，根据要求将当前所需要的数据从缓冲区中读出并传送给进程。

#### 单缓冲

操作系统在主存的系统区中开设一个缓冲区

* 输入
  * 将数据读至缓冲区，系统将缓冲区数据送至用户区，应用程序对数据进行处理，同时系统读入接下来的数据。
* 输出
  * 把数据从用户区复制到缓冲区，系统将数据输出后，应用程序继续请求输出。

#### 双缓冲

* 输入
  * 设备先将数据输入缓冲区1，系统从缓冲区1把数据传到用户区，供应用程序处理，同时设备将数据传送到缓冲区2。
* 输出
  * 应用程序将数据从用户区传送到缓冲区1，系统将数据传送到设备，同时应用程序将数据传送到缓冲区2.

#### 循环缓冲

操作系统分配一组缓冲区，每个缓冲区都有指向下一个缓冲区的链接指针，构成循环缓冲。

* 解决设别和进程速度不匹配的问题
* 为系统公共资源，供进程共享并由系统统一分配和管理
