二、 I/O控制方式与数据通路详解
1. 程序查询方式 (Programmed I/O)
这是最原始的I/O方式。
-
过程:CPU执行I/O指令后,会反复地“轮询”I/O设备的状态寄存器,看其是否准备就绪。一旦就绪,CPU再执行
IN
(输入)或OUT
(输出)指令,以CPU内部的累加器(Accumulator)或通用寄存器为中介,一次传送一个字(Word)的数据。 -
数据通路:
-
输入:I/O设备 → I/O端口数据寄存器 → CPU累加器/GPR → 主存
-
输出:主存 → CPU累加器/GPR → I/O端口数据寄存器 → I/O设
-
2. 中断驱动方式 (Interrupt-Driven I/O)
-
过程:CPU发出I/O指令后,不再等待,而是继续执行其他程序。当I/O设备准备好数据后,会主动向CPU发送一个中断请求。CPU响应中断后,暂停当前任务,转而执行一段中断服务程序,在服务程序中完成一次数据的读写。
-
数据通路:与程序查询方式完全相同! 数据传送的动作本身,仍然需要CPU执行指令,通过累加器/GPR来完成。
-
输入:I/O设备 → I/O端口 → CPU累加器/GPR → 主存
-
输出:主存 → CPU累加器/GPR → I/O端口 → I/O设备
-
3. 直接存储器存取方式 (Direct Memory Access, DMA)
-
过程:CPU只需向**DMA控制器(DMAC)**下达指令,告诉它“你要把哪个I/O设备的数据,传送到主存的哪个地址,传送多少个字节”。设置完成后,CPU就可以“撒手不管”了。整个数据的传输过程由DMAC全权接管,在DMAC的控制下,数据直接在I/O设备和主存之间传送。传送结束后,DMAC再通过一个中断信号通知CPU“任务已完成”。
-
数据通路:
- 输入/输出:I/O设备 ↔ 主存
图示:中断方式 vs DMA方式的数据通路
+-------+ 数据 +-----+ 数据 +------+
| I/O | <--------------> | CPU | <------------> | 主存 |
+-------+ (寄存器中转) +-----+ +------+
| ^
|__中断请求/控制________|
图1:中断驱动方式的数据通路 (数据经过CPU)
+-------+ +------+
| I/O | <------------ 数据直接传送 -------------> | 主存 |
+-------+ +------+
| ^
| +---------+ |
|__ DMA请求/控制 ____| DMAC |____ 总线控制 ____|
+---------+
^
|__ CPU发出指令/接收中断 __
|
+-----+
| CPU |
+-----+
图2:DMA方式的数据通路 (数据不经过CPU)
四、 总结与边界情况
I/O控制方式 | 数据是否经过CPU寄存器 | CPU介入程度(数据传送阶段) | 硬件复杂度 | 适用场景 |
---|---|---|---|---|
程序查询 | 是 | 完全占用CPU | 简单 | 古老、极低速设备 |
中断驱动 | 是 | 每次传送一个字时介入 | 较简单 | 中低速设备 |
DMA | 否 | 完全不介入 | 复杂 (需DMAC) | 高速设备 (硬盘、网卡) |