Appearance
408
操作系统
OS-05-02 I/O控制方式(轮询/中断/DMA)
一、定位信息
- 所属圈层:核心层
- 前置知识回顾:理解I/O设备的分类(块设备/字符设备),了解设备控制器的概念。知道CPU与设备控制器通过寄存器通信。
- 知识网络位置:本单元是I/O管理的核心机制,描述CPU如何控制I/O操作。三种控制方式代表了I/O技术的演进,从CPU全程参与到CPU几乎不参与。向上连接I/O软件层次(OS-05-03),向下连接缓冲区管理(OS-05-04)。
- 考点热度等级:H级(高频重点)——三种I/O控制方式的原理和比较是几乎每年必考的核心知识点。
二、知识点讲解
2.1 轮询方式(Programmed I/O)
轮询方式也称程序直接控制方式,CPU通过不断查询设备状态寄存器来控制I/O操作。
工作流程:
- CPU向设备控制器发出I/O命令
- CPU读取设备状态寄存器
- 若设备忙,回到步骤2继续查询(忙等待)
- 若设备就绪,CPU从数据寄存器读取/写入数据
- 若还有数据要传输,回到步骤2
特点:
- CPU全程参与,忙等待(busy waiting)
- CPU利用率极低(大量时间花在查询状态上)
- 实现简单,不需要额外硬件支持
- 适用于极简单的嵌入式系统
2.2 中断驱动方式(Interrupt-Driven I/O)
中断驱动方式让CPU在设备准备数据时去执行其他任务,设备就绪后通过中断通知CPU。
工作流程:
- CPU向设备控制器发出I/O命令
- CPU切换到其他进程执行(不再忙等待)
- 设备控制器完成数据准备,向CPU发送中断请求
- CPU响应中断,执行中断处理程序
- CPU从数据寄存器读取/写入数据
- 若还有数据要传输,回到步骤1
特点:
- CPU不需要忙等待,利用率提高
- 每次数据传输都需要CPU参与(每次中断传输一个字/字节)
- 中断处理有开销(保存/恢复现场、中断响应时间)
- 适用于字符设备(如键盘、鼠标)
2.3 DMA方式(Direct Memory Access)
DMA方式让设备控制器直接与内存交换数据,不需要CPU干预。CPU只需在传输开始和结束时参与。
工作流程:
- CPU向DMA控制器设置传输参数:
- 内存起始地址
- 传输数据量
- 传输方向(设备→内存 或 内存→设备)
- CPU切换到其他进程执行
- DMA控制器控制数据在设备和内存之间直接传输
- 传输完成后,DMA控制器向CPU发送一次中断
- CPU处理中断,检查传输结果
特点:
- CPU只在传输开始和结束时参与,传输过程中不干预
- 数据直接在设备和内存之间传输,不经过CPU
- 以块为单位传输,每块传输完才中断一次
- 适用于高速块设备(如硬盘、SSD)
DMA控制器的寄存器:
- 命令/状态寄存器(CR):接收CPU命令,报告状态
- 内存地址寄存器(MAR):数据传输的内存地址
- 数据计数器(DC):剩余传输数据量
三、记忆与理解辅助
1. 类比记忆:
- 轮询 = 你一直盯着快递员等他送到(CPU全程等待)
- 中断 = 快递员到了给你打电话(CPU去做别的事,设备准备好了通知)
- DMA = 快递员直接放快递柜(CPU只管下单和取件,中间不管)
2. 口诀:"轮询忙等待CPU累死,中断每字节CPU跑一次;DMA整块传CPU不管,三种方式效率依次提。"
3. 三种I/O控制方式对比表(★高频考点):
| 对比项 | 轮询方式 | 中断驱动方式 | DMA方式 |
|---|---|---|---|
| CPU参与程度 | 全程参与 | 每次数据传输参与 | 仅开始和结束参与 |
| 数据传输单位 | 字/字节 | 字/字节 | 块 |
| CPU是否忙等待 | 是 | 否 | 否 |
| 中断次数 | 0 | 每字/字节一次 | 每块一次 |
| 数据流向 | 设备→CPU→内存 | 设备→CPU→内存 | 设备→内存(直接) |
| CPU利用率 | 极低 | 中 | 高 |
| 适用设备 | 极简单设备 | 低速字符设备 | 高速块设备 |
| 硬件需求 | 最少 | 中等 | DMA控制器 |
4. CPU介入频率对比:
- 轮询:每个时钟周期都介入(查状态)
- 中断:每传输1个字/字节介入1次
- DMA:每传输1个块(如4KB)介入1次
四、例题与精解
例题1(基础巩固)
题目:某系统需要从硬盘读取一个 的数据块。硬盘数据传输速率为 ,CPU时钟频率为 。每次中断处理需要 个时钟周期。分别计算使用中断驱动方式和DMA方式时,CPU用于I/O处理的时间。
命题意图:考查中断方式和DMA方式的CPU开销对比。
精解:
1. 审题分析:4KB数据块,传输速率100MB/s,每次中断1000周期。需要计算两种方式的CPU开销。
2. 解题思路:中断方式每字节中断一次,DMA方式每块中断一次。
3. 完整步骤:
中断驱动方式:
- 每次中断传输1字节,4KB = 4096字节 → 需要4096次中断
- 每次中断处理需要1000个时钟周期
- CPU用于I/O的时间 = 个时钟周期
- 换算为时间 =
DMA方式:
整个块传输完成中断1次
CPU用于I/O的时间 = 个时钟周期
换算为时间 =
CPU开销比 = ,DMA方式的CPU开销仅为中断方式的
4. 方法反思:这个例题清楚地展示了DMA的巨大优势——中断次数从4096次减少到1次。对于高速设备大量数据传输,DMA几乎是必须的。
例题2(中等提升)
题目:某系统采用中断驱动方式从键盘读取数据。键盘输入速率为 字符/秒,每次中断处理需要 。 (1)CPU用于键盘I/O的时间占比是多少? (2)如果改用轮询方式,每 查询一次键盘状态,CPU用于键盘I/O的时间占比是多少?
命题意图:考查中断方式和轮询方式在低速设备上的CPU开销对比。
精解:
1. 审题分析:键盘10字符/秒,中断处理2ms,轮询100ms一次。
2. 解题思路:计算每秒内CPU用于I/O的时间。
3. 完整步骤:
(1)中断驱动方式:
- 每秒中断次数 = 10次
- 每秒CPU用于I/O的时间 =
- CPU时间占比 =
(2)轮询方式:
- 每秒查询次数 = 次
- 每次查询假设需要 (极短)
- 每秒CPU用于I/O的时间 =
- CPU时间占比 =
4. 方法反思:对于低速设备(如键盘),轮询方式的CPU开销反而可能比中断方式低!因为中断方式每来一个字符就要处理一次中断(2ms),而轮询方式只需定期查询。但轮询方式的缺点是响应延迟——最坏情况下要等100ms才能检测到输入。
五、考情分析
- 考查频次:I/O控制方式在近5年真题中出现频率高,约4-5次。
- 常见题型:选择题(三种方式的比较判断)、综合题(CPU开销计算、方式选择)。
- 分值占比:选择题2分,综合题5-8分。
- 命题趋势:近年来倾向于给出具体场景,要求计算CPU开销并选择合适的控制方式。DMA的工作原理是高频考点。基于大纲与命题规律推测。
六、易错点提醒
错误表现:认为中断驱动方式CPU完全不参与数据传输。 错误原因:忽略了每次中断CPU仍需要执行中断处理程序。 正确理解/做法:中断驱动方式中,CPU不需要忙等待,但每次数据传输(字/字节级别)都需要CPU参与执行中断处理程序。只有DMA方式才能做到CPU几乎不参与数据传输。
错误表现:认为DMA方式完全不需要CPU参与。 错误原因:忽略了DMA的启动和完成处理。 正确理解/做法:DMA方式中,CPU需要:①设置DMA控制器参数(启动传输);②处理传输完成中断。传输过程中CPU不参与,但开始和结束需要CPU。
错误表现:轮询方式和中断方式混淆,认为轮询也用中断。 错误原因:对两种方式的机制理解不清。 正确理解/做法:轮询是CPU主动查询设备状态,不使用中断;中断是设备主动通知CPU。两者的核心区别在于"谁发起通知"。
错误表现:认为对于所有设备,DMA方式都是最优的。 错误原因:忽略了DMA的硬件成本和适用场景。 正确理解/做法:DMA需要专用的DMA控制器硬件,成本较高。对于低速字符设备(如键盘),中断方式已经足够好,使用DMA反而浪费硬件资源。
七、来源标注
- 依据2026考研统考408大纲
- 依据《操作系统概念》(Operating System Concepts, Silberschatz)第12章
- 依据汤小丹《计算机操作系统》第4版第5章