8.4 输入输出信息传送控制方式 (I/O Control Methods)
本章重中之重:这部分内容逻辑性强,考点密集,特别是中断和DMA的区别,是历年必考内容。
老师强调:虽然教材可能侧重前三种,但在体系结构中,共有四种方式:程序查询、程序中断、DMA、通道。
1. 程序查询方式 (Program Query / Polling)
基本思想
- CPU"亲力亲为"。CPU执行一段程序,不断去查询外设的状态(如"忙/闲"标志)
- 比喻:你每隔几分钟去厨房看水烧开了没有,期间什么都干不了
工作流程
- 预置参数(地址、计数值)
- 启动外设
- 踏步等待 (Busy Waiting):CPU不断循环读取状态寄存器,直到外设"就绪"
- 传送数据(一次传一个字/字节)
- 修改参数,判断是否传完,未完继续循环
特点
- 优点:控制简单,硬件成本低(只需简单的状态位)
- 缺点:效率极低。CPU与外设串行工作,CPU资源被大量浪费在查询等待上
2. 程序中断方式 (Program Interrupt) —— 重点
基本思想
- CPU"主动启动,被动响应"
- CPU启动外设后,不等待,继续执行原程序
- 外设准备好后,主动向CPU发中断请求
- CPU暂停当前程序,转去执行中断服务程序进行数据传输
- 比喻:你把水壶坐上就去看书,水壶响了(中断请求),你去关火倒水(服务程序),回来继续看书
中断工作流程
2.1 中断请求
- 外设准备好数据或需要数据时,通过接口向CPU发送中断请求信号
- 中断请求信号保存在接口的中断请求触发器中
2.2 中断响应
- 响应条件(三个条件缺一不可):
- 有中断请求信号
- CPU处于开中断状态(允许中断触发器EINT=1)
- 一条指令执行完毕(这是程序中断与DMA的重要区别)
- CPU响应中断后,由硬件自动完成(中断隐指令):
- 关中断:防止新的中断打断当前处理
- 保存断点:将PC(程序计数器)内容压入堆栈
- 引出中断服务程序:获取中断服务程序的入口地址,送入PC
2.3 中断服务程序(软件完成)
中断服务程序通常包括以下步骤:
保护现场:
- 使用
PUSH指令,将通用寄存器(ACC、R0等)和状态寄存器(PSW)的内容压栈 - 注意:PC已由硬件(隐指令)保存,这里只需保存寄存器
- 使用
中断服务:
- 执行具体的数据传输操作
- 例如:从外设接口的数据端口读取数据,存入主存;或从主存读取数据,写入外设接口
恢复现场:
- 使用
POP指令,恢复通用寄存器和PSW - 开中断:允许响应新的中断
- 中断返回:执行中断返回指令(IRET),将PC从堆栈弹出,回到原程序继续执行
- 使用
特点
- 并行性:实现了CPU与外设的部分并行(在外设准备数据期间,CPU可以干别的)
- 本质:数据传输依然是**依靠软件(指令)**完成的(CPU需要在寄存器和内存间搬运数据)
- 数据路径:外设 → CPU寄存器 → 主存(或反向),数据必须经过CPU
响应时机
- 一条指令执行结束后
- 注意:这是程序中断与DMA的重要区别,DMA可以在机器周期结束时响应
中断与子程序调用的区别 —— ⭐⭐⭐⭐⭐ 408选择题高频考点
老师强调:这是408考研选择题的高频考点,必须掌握。
表面上看起来,中断处理过程有点类似于调用子程序的过程(现行程序相当于主程序,中断服务程序相当于子程序),但它们之间却有着本质上的区别:
- 触发源:
- 子程序的执行是由程序员事先安排好的(由一条调用子程序指令CALL转入),是确定的
- 中断服务程序的执行则是由随机的中断事件引起的(外设触发),是不确定的
- 关系:
- 子程序的执行受到主程序或上层子程序的控制,服务于主程序
- 中断服务程序一般与被中断的现行程序毫无关系(除了抢占CPU)
- 并发性:
- 不存在同时调用多个子程序的情况(只能嵌套或顺序执行)
- 而有可能发生多个外设同时请求CPU为自己服务的情况(需要中断判优)
- 返回方式:
- 子程序返回:RET指令
- 中断返回:IRET指令(需要恢复PSW)
中断的基本类型(了解即可)
老师说明:这部分概念要求自学,不是课堂推导的重点,但选择题可能会考名词解释。
2.4.1 程序中断 vs 简单中断(DMA)
- 程序中断:
- 就是我们前面提到的中断方式
- 主机在响应中断请求后,通过执行一段中断服务程序来处理任务
- 需要切换程序(保护现场、恢复现场),会破坏现行程序的状态
- 简单中断(DMA方式):
- 外设与主存间直接进行信息交换的方法
- 这种"中断"不去执行中断服务程序,故不破坏现行程序的状态
- 主机发现有简单中断请求(也就是DMA请求)时,将让出一个或几个存取周期供外设与主存交换信息,然后继续执行程序
- 考点:程序中断要切换程序(慢);简单中断(DMA)不切换程序(快)
2.4.2 内中断 vs 外中断
- 内中断(异常/Exception):
- 由于CPU内部硬件或软件原因引起的中断
- 例如:除以0、运算溢出、非法操作码、地址越界等
- 记忆:内中断 = 异常
- 外中断(Interrupt):
- CPU以外的部件引起的中断
- 例如:键盘输入、定时器到期、外设I/O请求等
- 记忆:外中断 = 狭义的中断
2.4.3 向量中断 vs 非向量中断
- 向量中断:
- 中断服务程序的入口地址是由中断事件自己提供(硬件直接给入口地址)
- 响应速度快,硬件实现
- 注意:这是8.5节"中断隐指令"中"向量地址"概念的基础
- 非向量中断:
- 中断事件不能直接提供入口地址,需要CPU查询之后才能得到
- 响应速度较慢,但实现简单
2.4.4 单重中断 vs 多重中断 —— ⭐⭐⭐⭐⭐ 大题基础
老师强调:虽然概念定义略讲,但多重中断(中断嵌套)的逻辑是后面画图大题的基础,必须理解。
- 单重中断:
- 在CPU执行中断服务程序的过程中不能被再打断("一根筋")
- 处理简单,但效率较低
- 多重中断(中断嵌套):
- 在执行某个中断服务程序的过程中,CPU可去响应级别更高的中断请求("可插队")
- 需要中断屏蔽技术支持,实现复杂但效率高
- 关键:这是后面做**"中断屏蔽"大题**的前提,不懂什么是多重中断,就画不出中断嵌套的图
3. DMA方式 (Direct Memory Access) —— 重点、难点
基本思想
- 外设与主存之间建立"直通车"
- 脱离CPU:数据传送过程由硬件(DMA控制器)直接控制,不需要CPU执行指令来搬运数据
- CPU仅在开始前(初始化)和结束后(后处理)参与,中间完全不管
DMA工作原理
3.1 DMA控制器的基本功能
DMA控制器(DMAC)是一个专门的硬件接口,具有以下功能:
- 接收外设请求:当外设准备好数据或需要数据时,向DMAC发送DMA请求(DREQ)
- 向CPU申请总线:DMAC向CPU发送总线请求(HRQ),请求使用总线
- 接管总线控制权:CPU响应后,让出总线控制权,DMAC接管总线
- 直接控制数据传送:DMAC发出地址信号、读写控制信号,数据在外设与主存之间直接传送
- 传送结束处理:传送完成后,DMAC向CPU发送中断请求,通知CPU进行后处理
3.2 DMA数据传送过程
关键点:数据传送不经过CPU,直接在外设接口和主存之间通过数据总线传送。
工作流程:
预处理阶段(CPU控制):
- CPU执行I/O指令,向DMAC写入:
- 主存起始地址
- 传送字数(或字节数)
- 传送方向(读/写)
- 启动外设
- CPU执行I/O指令,向DMAC写入:
数据传送阶段(DMAC控制):
- 外设准备好一个数据后,向DMAC发DREQ
- DMAC向CPU发HRQ(总线请求)
- CPU在当前机器周期结束后,发HLDA(总线响应),让出总线
- DMAC接管总线,发出:
- 主存地址(从地址计数器)
- 读写控制信号(MEMR/MEMW和IOR/IOW)
- 数据在外设与主存之间直接传送
- 每传送一个数据,地址计数器+1,字数计数器-1
- 重复上述过程,直到传送完所有数据
后处理阶段(CPU控制):
- 字数计数器减为0时,DMAC向CPU发中断请求
- CPU执行中断服务程序,检查传送结果,决定是否继续或报错
3.3 DMA与中断方式的本质区别
- 中断方式:数据传送需要CPU执行指令,数据路径是:外设 → CPU寄存器 → 主存(或反向)
- DMA方式:数据传送由硬件直接控制,数据路径是:外设 ↔ 主存(不经过CPU)
适用场景
- 高速、批量的数据传输(如磁盘读写、网络数据传输)
响应时机
- 每个**机器周期(存取周期)**结束时
- 注意:比中断响应更快,因为不需要保护PC等现场,只是借用总线,不破坏CPU的现场信息
4. 通道控制方式 (Channel Control)
定义
- 通道是一个具有特殊功能的处理器(小CPU)
特点
- 有自己的指令(通道指令/通道程序)
- 可以统一管理多台外设
- 层级:CPU → 通道 → 控制器 → 设备
与DMA区别
- DMA只能实现固定的数据传送
- 通道可以执行复杂的通道程序,具有更强的独立处理能力
⚖️ 核心考点:中断 vs DMA 的区别 (必背表格)
| 比较维度 | 程序中断方式 | DMA方式 |
|---|---|---|
| 数据传送控制者 | 软件 (CPU执行中断服务程序) | 硬件 (DMA控制器) |
| CPU响应时机 | 指令执行结束时 | 机器周期 (存取周期) 结束时 |
| CPU干扰程度 | 高 (需要保护现场、恢复现场) | 低 (仅需让出总线,不破坏CPU现场) |
| 并行程度 | 较好 (准备阶段并行,传送阶段串行) | 极高 (全程并行) |
| 适用场景 | 中低速外设、处理异常/紧急事件 | 高速外设、成组数据传输 |
| 优先级 | 优先级低 (因为可以等待) | 优先级高 (高速设备不能等,否则数据丢失) |
💡 学习要点
老师特别提示(录音补充)
- 中断的演变:现代计算机中,中断主要用于处理异常(如掉电、运算溢出)和事件通知,单纯用于大量数据传输(如传1GB文件)已经很少用中断了,都是用DMA
- 信号流向:
- 外设
DMA控制器 CPU - (考试陷阱:外设不能直接向CPU发总线请求)
- 外设
四种方式的对比记忆
效率:程序查询 < 程序中断 < DMA < 通道
复杂度:程序查询 < 程序中断 < DMA < 通道
适用场景:
- 程序查询:简单设备,对效率要求不高
- 程序中断:中低速设备,异常处理
- DMA:高速设备,批量数据传输
- 通道:多台高速设备,复杂I/O操作考试重点
- 必背:中断 vs DMA的对比表格
- 理解:四种方式的适用场景和优缺点
- 应用:能够根据题目描述判断应该使用哪种I/O控制方式