跳至正文

I-O 管理


I-O 管理

核心定义

I-O管理 负责 CPU、内存与外设之间的数据交换与控制。常考内容包括 程序查询I-O 、中断驱动I-O 、DMA 、缓冲技术 、通道 。I/O 管理的核心矛盾是 CPU 参与程度传输效率 之间的平衡。

程序查询方式:CPU 主动轮询外设状态并直接参与数据搬运 ,CPU 占用最高。中断驱动方式:外设准备好后 通过中断请求通知 CPU ,CPU 只在中断时参与,适合 小量偶发数据 。DMA 方式:DMA 控制器 直接在内存与外设间搬运数据 ,CPU 仅负责启动和收尾,适合 大块连续数据 。通道 方式比 DMA 更独立,拥有自己的 指令程序 ,能处理更复杂的 I/O 任务。

关键细节 / 操作步骤

  1. 第一步:先判断数据量是 小块偶发 还是 大块连续 。小块偶发优先考虑 中断驱动 I/O ;大块连续优先考虑 DMA
  2. 第二步:若问 CPU 负担,三种方式的 CPU 占用排序:程序查询 > 中断驱动 > DMA,因为程序查询需要 忙等轮询 ,中断只需 响应时参与 ,DMA 在传输阶段 完全不参与数据搬运
  3. 第三步:若问 DMA 工作三阶段:预处理(CPU 设置参数)→ 数据传输(DMA 控制器接管总线)→ 后处理(DMA 完成后中断通知 CPU)
  4. 第四步:若问中断处理流程:中断请求→中断判优→中断响应→保护现场→中断服务程序→恢复现场→中断返回
  5. 第五步:若问缓冲技术,单缓冲:数据先到缓冲区再被处理,处理时间 = max(T,M)+M\max(T, M) + M (T 为外设传输时间,M 为 CPU 处理时间);双缓冲可 流水化 传输与处理。
  6. 第六步:若问通道与 DMA 的区别,通道拥有自己的 指令和程序 ,可独立执行复杂的 I/O 操作序列,DMA 只做 简单的数据搬运
  7. 第七步:若问 SPOOLing 技术,其核心是 用软件方式将独占设备虚拟为共享设备 ,如打印机假脱机。
  8. 第八步:若问 I/O 软件,分层结构从上到下:用户层 I/O 软件→设备独立性软件→设备驱动程序→中断处理程序
  9. 第九步:若问设备分配,要考虑 设备固有属性(独占/共享/虚拟)、分配算法、安全性
  10. 第十步:若问性能对比,比较维度依次是 CPU 占用率、数据传输率、硬件复杂度、响应及时性、适用场景

⚠️ 易错辨析

  • DMA 不是完全不要 CPU:CPU 仍负责 启动、设置参数和收尾处理 ,只是数据搬运阶段不参与。反例:DMA 传输结束后仍通过中断通知 CPU 做后续处理。
  • 中断不是数据传输本身,它只是外设 通知 CPU 的机制 。反例:中断驱动 I/O 中,数据仍由 CPU 在中断服务程序中搬运,并非中断本身完成了传输。
  • 程序查询 I/O 适合最简单场景但不适合高吞吐:CPU 必须反复执行 测试设备状态→就绪则搬运→未就绪则继续等待 的循环,忙等开销大。
  • 缓冲的作用是 缓和 CPU 与外设之间的速度不匹配 ,不是增加数据本身的传输带宽。反例:加缓冲区不能让慢速打印机变快,只是让 CPU 不必一直等待。
  • “CPU 不直接搬运数据”不等于”CPU 完全不参与”:DMA 中 CPU 仍参与 初始化和后处理 ,这是常见判断题陷阱。

💡 技巧与口诀 口诀:小块看中断,大块看 DMA,程序 I/O 最原始;通道更独立,缓冲消速度差;I/O 选型看三样:数据量、CPU 占用、硬件开销 。 应用场景:题目只要出现”连续大块数据""降低 CPU 占用”,通常就直接想 DMA 。若问性能对比,先从 CPU 占用 再到 传输效率 ,最后谈 硬件复杂度 。若问缓冲区为什么有用,核心是 吸收生产者和消费者之间的速度差

📝 真题闭环 题目:某系统采用中断驱动 I/O 方式从外设读入 1000B 数据到内存。外设每次中断传送 1B,CPU 处理每次中断的开销为 200 个时钟周期,时钟频率 500MHz。求 CPU 用于 I/O 的总时间占比(假设 CPU 原本持续执行用户程序)。

解题思路

  1. 总中断次数 = 1000 次 (每字节一次中断)。
  2. 每次中断 CPU 开销 = 200/500MHz=0.4μs200 / 500\text{MHz} = 0.4\,\mu\text{s}
  3. CPU 用于 I/O 的总时间 = 1000×0.4μs=400μs1000 \times 0.4\,\mu\text{s} = 400\,\mu\text{s}
  4. 若改为 DMA 方式,一次传输完成后只需 1 次 中断通知 CPU,CPU 开销降为 0.4μs0.4\,\mu\text{s} ,仅占中断方式的 1/10001/1000

答案:中断驱动方式下 CPU 用于 I/O 总时间 400μs400\,\mu\text{s} 。若改 DMA 则仅需 0.4μs0.4\,\mu\text{s} ,充分说明 DMA 适合 大块连续数据传输


cd ..