# 6.5 缓冲区管理 ## 一、缓冲的引入 ### 1.1 为什么需要缓冲 **缓解速度不匹配**: - CPU与I/O设备速度差异大 - 缓冲区作为速度匹配的桥梁 **减少CPU中断**: - 批量传输数据 - 减少中断次数 **提高并行性**: - CPU和I/O设备可以并行工作 - 提高系统效率 ### 1.2 缓冲的作用 - **数据缓存**:暂存数据 - **数据转换**:数据格式转换 - **差错控制**:校验数据 --- ## 二、单缓冲 ### 2.1 工作原理 **结构**: - 一个缓冲区 - 输入:设备 → 缓冲区 → 进程 - 输出:进程 → 缓冲区 → 设备 ### 2.2 处理时间计算 **假设**: - T:设备传输数据到缓冲区的时间 - M:数据从缓冲区到进程的时间 - C:CPU处理数据的时间 **情况1:T > C** - 处理每块数据的时间:T + M **情况2:T < C** - 处理每块数据的时间:C + M **结论**: - 处理每块数据的时间:max(T, C) + M ### 2.3 特点 **优点**: - 实现简单 - 设备和CPU可以部分并行 **缺点**: - 设备和CPU不能同时访问缓冲区 - 存在等待时间 --- ## 三、双缓冲 ### 3.1 工作原理 **结构**: - 两个缓冲区:缓冲区1、缓冲区2 - 设备向一个缓冲区传输数据 - CPU从另一个缓冲区读取数据 ### 3.2 处理时间计算 **假设**: - T:设备传输数据到缓冲区的时间 - M:数据从缓冲区到进程的时间 - C:CPU处理数据的时间 **情况1:T > C + M** - 处理每块数据的时间:T **情况2:T ≤ C + M** - 处理每块数据的时间:C + M **结论**: - 处理每块数据的时间:max(T, C + M) ### 3.3 特点 **优点**: - 设备和CPU可以并行 - 提高吞吐量 **缺点**: - 需要两个缓冲区 - 占用更多内存 --- ## 四、循环缓冲 ### 4.1 工作原理 **结构**: - 多个缓冲区组成循环队列 - 输入指针(in):设备写入的位置 - 输出指针(out):进程读取的位置 ### 4.2 缓冲区类型 **空缓冲区(E)**: - 可以接收数据 **满缓冲区(F)**: - 包含数据,可以读取 **正在使用缓冲区(G)**: - 正在写入或读取 ### 4.3 工作过程 **输入**: 1. 设备从空队列取一个缓冲区 2. 向缓冲区写入数据 3. 将缓冲区放入满队列 **输出**: 1. 进程从满队列取一个缓冲区 2. 从缓冲区读取数据 3. 将缓冲区放入空队列 ### 4.4 特点 **优点**: - 适合生产者和消费者速度不同 - 可以平滑速度波动 **缺点**: - 需要多个缓冲区 - 管理复杂 --- ## 五、缓冲池 ### 5.1 工作原理 **结构**: - 多个缓冲区组成缓冲池 - 分为三个队列: - 空闲队列(emq) - 输入队列(inq) - 输出队列(outq) ### 5.2 工作过程 **输入**: 1. 从空闲队列取一个缓冲区 2. 设备向缓冲区写入数据 3. 将缓冲区放入输入队列 4. 进程从输入队列取缓冲区读取 5. 读取完后放入空闲队列 **输出**: 1. 从空闲队列取一个缓冲区 2. 进程向缓冲区写入数据 3. 将缓冲区放入输出队列 4. 设备从输出队列取缓冲区输出 5. 输出完后放入空闲队列 ### 5.3 特点 **优点**: - 缓冲区共享使用 - 提高缓冲区利用率 - 减少缓冲区数量 **缺点**: - 管理复杂 - 需要同步机制 --- ## 六、缓冲的置换策略 ### 6.1 最近最少使用(LRU) **思想**: - 置换最近最少使用的缓冲区 ### 6.2 先进先出(FIFO) **思想**: - 置换最先进入的缓冲区 ### 6.3 时钟算法(Clock) **思想**: - 使用访问位 - 循环查找,置换未访问的缓冲区 --- ## 七、考研重点 1. **缓冲的引入**:目的、作用 2. **单缓冲**:工作原理、处理时间计算 3. **双缓冲**:工作原理、处理时间计算 4. **循环缓冲**:结构、缓冲区类型、工作过程 5. **缓冲池**:结构、三个队列、工作过程 6. **各种缓冲的比较**:优缺点 --- *下一节:6.6 磁盘存储器管理*