26考研 | 王道 | 计算机组成原理 | 七、输入输出系统
26考研 | 王道 | 计算机组成原理 | 七、输入输出系统
7.1 输入输出系统及I/O控制方式
IO指令格式与其他通用指令格式不同
I/O接口:又称I/O控制器、设备控制器、负责协调主机与外部设备之间的数据传输。(I/O控制器就是一块芯片,常被集成在主板上)
I/O控制方式简介
DMA控制方式
通道控制方式
I/O系统基本组成
在配有通道的计算机系统中,用户需要输入输出时,引起的中断是 访管中断 (因为这时调用的是系统提供的接口,要去请求操作系统服务,此时会使得访管中断)
外部设备(考纲没有,做个了解)
7.2 I/O接口
磁盘驱动器是磁头、磁盘和读写电路组成的,也就是常说的磁盘本身,不是I/O接口
功能:选址功能、传送命令功能、传送数据功能、反映I/O设备工作状态的功能
I/O接口的工作原理
IO接口和设备之间不会传送中断请求信号,中断请求信号是IO接口通过中断控制器发给CPU的
设备通过改变其在I/O接口中的状态来“表达”中断需求,而不是直接“发送”一个中断请求信号给接口。I/O接口内部有一套状态寄存器(或一组状态标志触发器),用于实时反映所连接设备的工作状况。I/O接口内部有控制逻辑,它会持续监控这些状态标志。
状态寄存器和控制寄存器可以合用一个寄存器
接口与端口
统一编址 V.S. 独立编址
I/O接口的类型
磁盘驱动器向盘片磁道记录数据时采用串行方式写入
USB就是串行接口
程序员进行系统调用访问设备使用的是逻辑地址
7.3 I/O方式
1.在各种I/O方式中,这三种方式的特点如下所示:
2.DMA优先级高于程序中断的优先级
3.程序中断方式需要保护现场,DMA方式在传输过程中不需要保护现场
4.程序中断过程是由硬件(称中断隐指令)和中断服务程序共同完成的
5.中断I/O方式下,CPU执行中断服务程序时会执行相应的I/O指令,实现CPU的通用寄存器和外设接口中的寄存器之间的直接数据交换
6.中断请求的是CPU时间,要求CPU执行程序来处理发生的相关事件
7.CPU对外部中断的响应不可能发生在一条指令的执行过程中
四种I/O方式特点总结
I/O 控制方式 | 特点(CPU vs 外设) | 特点(数据传送 vs 主程序) | 理由 |
---|---|---|---|
1. 程序查询方式 | CPU与外设串行工作 | 传送与主程序串行工作 | CPU主动地、不断地查询外设状态,在等待和传送数据时,CPU一直被占用,无法执行主程序,效率最低。 |
2. 程序中断方式 | CPU与外设并行工作 | 传送与主程序串行工作 | CPU启动外设后即可继续执行主程序,实现并行。但数据传送时需CPU执行中断服务程序,会中断主程序,故传送与主程序串行。 |
3. DMA 方式 | CPU与外设并行工作 | 传送与主程序并行工作 | 在DMA控制器控制下,外设与内存直接交换数据。整个数据块传送期间,CPU只需在开头和结尾介入,可以继续执行主程序,效率高。 |
4. 通道控制方式 | CPU与外设并行工作 | 传送与主程序并行工作 | 通道是一个专用于I/O的处理器,能执行通道程序管理多个外设。CPU发出启动命令后即可脱管,通道独立负责所有I/O操作,并行度最高。 |
“传送”特指数据在I/O设备与内存(主存)之间交换的过程。简单来说,判断传送与主程序并行还是串行,就看数据传送时CPU能不能继续干自己的活(执行主程序)。如果能,就是并行;如果不能,CPU必须停下来去处理传送,就是串行。
四种IO方式是否可以使用内存地址
/O 控制方式 | IO控制器/通道是否可使用内存地址 | 数据交换路径 | 数据交换单位 | CPU干预程度 |
---|---|---|---|---|
程序查询方式 | ❌ 否 | 设备 → CPU → 内存 | 字/字节 | 高(全程参与) |
中断方式 | ❌ 否 | 设备 → CPU → 内存 | 字/字节 | 中(每字中断) |
DMA 方式 | ✅ 是(通过MAR) | 设备 ⇨ 内存(直接) | 数据块 | 低(块首尾干预) |
通道方式 | ✅ 是(自主决定) | 设备 ⇨ 内存(直接) | 一组数据块(通道程序) | 极低(程序级干预) |
核心区别详解
表格清晰地展示了演进过程:目标是不断减少CPU的干预,让数据交换更高效。其关键就在于谁能掌握内存地址。
程序查询与中断方式:CPU 是全权管家
在这两种早期方式中,I/O端口只处理数据,不涉及内存地址的交换。CPU是唯一的“大脑”,它负责从I/O端口的数据寄存器中读取一个字节或字,然后再由它写入到指定的内存地址中。整个过程就像需要一个中间人(CPU)来回搬运数据,效率较低。
DMA 方式:有了专业的“搬运工”
DMA方式的关键改进是引入了DMA控制器。这个控制器是一个专用硬件,它内部包含一个内存地址寄存器(MAR)。CPU在启动传输前,会告诉DMA控制器数据应该放在内存的什么位置(设置MAR)。之后,DMA控制器就能直接控制总线,在设备和内存之间完成整块数据的传输,无需CPU介入。因此,是DMA控制器在使用内存地址。
通道方式:升级为“I/O项目经理”
通道可以理解为一个功能更强大的、专门处理I/O的处理器(IOP)。CPU不再告诉它具体细节,而是下达一个“任务指令”(启动通道程序)。通道会自己从内存中取出通道程序并执行,这个程序包含了各种I/O指令,通道能自主决定数据在内存中的存放位置 。因此,通道自己就可以使用内存地址,并能控制多台设备与内存交换数据,能力比DMA更强。
1. 程序查询方式
2. 中断的作用和原理
中断向量的地址是存放中断向量的,中断向量是中断服务程序的人入口地址,相当于指针的指针了
用户程序要输入输出时引起的中断是访管中断(申请系统调用直接引起的中断),而不是IO中断,I/O中断是I/O操作完成后由硬件(如通道)产生的中断,不是用户程序请求时的直接中断。
1.CPU响应中断的三个条件:中断源有中断请求、CPU允许中断以及开中断、一条指令执行完毕并且没有更紧迫的任务
(开中断时,CPU只要检测到中断请求就进行中断响应,不管多重还是单重)
2.中断服务程序一般是操作系统模块
3.中断向量方法可提高中断源的识别速度
4.中断向量地址是内存中存放中断向量的地址,也就是中断服务程序入口地址的地址,也就是说中断向量其实是中断服务程序入口地址
5.中断服务程序最后的指令是中断返回指令,不是无条件转移指令。不同的地方在于,不仅要修改PC值,还要恢复现场
6.中断响应的优先级不是由中断屏蔽字决定的,在中断响应阶段之前,CPU根据中断屏蔽字将所有未被屏蔽的中断请求送到硬件电路(或中断查询程序)进行中断响应判优
7.在中断响应周期,由中断隐指令将允许中断触发器置0,表示关中断
8.进入中断响应阶段时,CPU一定处于开中断状态(进入响应阶段,说明有请求并且CPU也响应了,那说明还可以收到请求,那说明就是开中断状态)
9.中断优先级包括响应优先级和处理优先级,响应优先级由硬件线路或者查询程序的查询顺序确定,不可动态改变,处理优先级由中断屏蔽字确定,可灵活改变
10.在关中断的条件下,内中断和非屏蔽中断仍然可以响应
中断的基本概念
中断请求的分类
中断请求标记
中断判优实现
中断判优-优先级设置
中断处理过程
其实就是排队器选择一个中断后,把结果输入到中断向量地址形成部件,然后映射成向量地址
根据向量地址,我们就可以找到入口地址了
中断请求标志寄存器和中断向量地址形成部件的区别和联系
特性 | 中断请求标记寄存器 | 中断向量地址形成部件 |
---|---|---|
主要功能 | 记录和标识哪个中断源提出了请求 | 根据被响应的中断源生成向量地址 |
工作阶段 | 中断请求和判优阶段 | 中断响应阶段(在中断隐指令中发挥作用) |
内容形式 | 一组触发器状态(如INTR1=1, INTR2=0) | 一个具体的地址码(如12H) |
最终目的 | 告知CPU“有哪些中断发生,谁优先级高” | 引导CPU“去哪里执行”对应的中断服务程序 |
实现方式 | 可集中设在CPU内,也可分散在各中断源接口中24 | 可分散在各接口电路,也可设置在CPU内2 |
简单来说,中断请求标记寄存器像是中断系统的**“前台登记处”,负责记录谁需要服务;而中断向量地址形成部件则是“导航仪”**,负责在决定服务谁之后,立刻生成一条准确的路线图(向量地址),引导CPU快速找到处理该中断的服务程序。它们一前一后,共同确保了中断响应过程的准确和高效。
向量中断和非向量中断
对比维度 | 向量中断 | 非向量中断 |
---|---|---|
响应速度 | 快。硬件直接定位,实时性高。 | 慢。需要软件查询,引入额外延迟。 |
硬件复杂度 | 高。需要中断控制器等硬件支持向量表。 | 低。硬件实现简单,成本较低。 |
优先级处理 | 方便。硬件可内置优先级仲裁电路。 | 复杂。优先级判断通常依赖软件查询顺序。 |
灵活性 | 相对固定,由硬件设计决定。 | 高。通过修改查询软件即可调整中断处理逻辑。 |

下图中硬件完成的部分就是中断隐指令,是中断响应部分。而中断程序完成的是中断处理部分
一个完整的中断处理过程通常如下:(简略版
)
- 中断请求:外部设备(如键盘、硬盘)或内部异常事件使中断请求信号有效。
- 中断检测:这是您问题的关键。CPU在每个指令周期的末尾,都会自动检查中断请求引脚上是否有信号。这个“检测”是硬件层面的、不间断的物理行为。 也就是说,无论中断是否被屏蔽,只要请求信号在物理线上存在,CPU就能“检测”或“感知”到它的存在。
- 中断判优:如果同时有多个中断请求,CPU或中断控制器(如8259A)会根据优先级进行裁决。
- 中断响应:这是最关键的分水岭。CPU在“检测”到请求后,不会立即处理,而是先要判断是否“响应”。这个判断依据就是中断是否被屏蔽以及CPU当前的状态。
- 如果中断未被屏蔽(例如,中断屏蔽字对应位为0,且CPU处于开中断状态),则CPU进入“响应”阶段。
- 如果中断被屏蔽(例如,通过中断屏蔽字禁止了该中断,或CPU处于关中断状态),则CPU不会响应这个请求。它会忽略这个请求,继续执行当前程序。但那个中断请求信号本身可能依然存在,CPU在下一个指令周期末尾依然会“检测”到它,然后再次判断是否“响应”。
- 中断处理:只有在“响应”之后,CPU才会保存现场、跳转到中断服务程序去执行。
详细版:
1.中断响应阶段(硬件自动完成)——-其实就是中断隐指令
- 中断请求
- 操作:中断源(外设/定时器/异常)通过物理引脚(如INTR)或内部逻辑发送请求信号,并保持信号直至响应
- 硬件支持:中断控制器(如APIC)管理多源请求的优先级
- 中断响应
- 操作:CPU在当前指令的最后一个时钟周期扫描中断引脚。若中断使能(IF=1)且请求有效,发送应答信号(INTA)
- 关键限制:长指令(如X86 REP MOVS)需执行完毕才响应
- 关闭中断
- 操作:硬件自动清除标志寄存器(EFLAGS)的IF位,屏蔽后续可屏蔽中断,防止现场保护时被抢占
- 例外:不可屏蔽中断(NMI)仍可触发
- 保护断点
- 操作:CPU自动将程序计数器(PC/EIP) 和程序状态字(PSW/EFLAGS) 压入内核栈
- 意义:确保中断返回后能继续执行原指令流。
- 中断源识别
- 操作:通过中断向量号(如0x80为系统调用)查询中断描述符表(IDT),定位中断服务程序入口地址
- 多源处理:共享中断(如PCI设备)需软件二次查询中断控制器状态
2. 中断处理阶段(操作系统/驱动主导)
- 保护现场
- 操作:中断服务程序(ISR)开头用PUSH指令保存通用寄存器(EAX/EBX等)内容到栈中,防止主程序状态被破坏
- 编程责任:由开发者编写保存代码,非硬件自动完成。
- 执行中断服务程序(ISP)
- 上半部(Top Half):
- 立即处理关键操作:读取外设数据寄存器、清除中断标志
- 特点:不可阻塞、不可嵌套(关中断状态下执行)。
- 下半部(Bottom Half):
- 延迟处理耗时操作:网络包处理、磁盘I/O调度
- 实现机制:
softirq
:高优先级,多CPU并行执行tasklet
:单CPU串行执行- workqueue:可睡眠的线程上下文
- 上半部(Top Half):
- 恢复现场
- 操作:ISP末尾用POP指令从栈中恢复寄存器原值,与保护现场成对出现
3. 中断返回阶段
- 恢复断点
- 操作:执行IRET指令时,硬件自动从栈中弹出PC和PSW值,装载回寄存器
- 原子性:恢复操作不可分割,防止状态不一致。
- 开中断
- 操作:IRET指令隐式恢复标志寄存器(含IF位),重新允许响应中断
- 返回原程序
- 操作:CPU从断点地址继续执行原指令流,中断处理结束
3. 多重中断
中断屏蔽技术
4. 程序中断方式
5. DMA方式
1.DMA全名是直接存储器存取
2.DMA请求不是DMA控制器发出的,是外部设备发出的
4.CPU响应DMA请求的条件是当前机器周期执行完
对比项 | DMA 请求 | 中断请求 |
---|---|---|
响应条件 | 当前机器周期执行完 | 一条指令执行完毕 |
响应时机 | 可在取指、间址、执行等任一机器周期结束时 | 必须在指令执行周期结束时 |
对CPU影响 | 极小。仅占用总线,不干扰CPU内部状态(如寄存器、程序计数器)。 | 较大。需要CPU暂停当前程序,转去执行中断服务程序,需保存和恢复现场。 |
设计目标 | 效率。为了满足高速外设实时数据传输的需求,避免数据丢失。 | 功能。处理异步事件,允许CPU与外设并行工作。 |
什么是“机器周期”? 机器周期是CPU完成一个基本操作(如从内存取指、读写数据)所需的时间。一条指令的执行通常由若干个机器周期组成
5.只有具有DMA接口的设备才能产生DMA请求。否则即使是当前设备是高速设备或者需要与主机批量交换数据,也不能产生DMA请求
6.磁盘寻道结束会通过中断通知cpu寻道结束,旋转结束也会中断,来通知cpu旋转结束
7.DMA是通过硬件实现的,不属于程序控制方式
8.每启动一次DMA传送,外设和主机之间完成一个数据块的数据传送
程序中断方式每次传输一次数据就得中断一次。
而DMA方式(并且没有DMA总线的情况下)每传输一次数据只需要占用一下系统总线(就是中间空下的那一个存取周期),若CPU此时没有访存操作,即不需要用到系统总线的操作,那么CPU可以执行其他程序,如果CPU有访存操作,即需要用到系统总线的操作,那么会等到DMA控制器用完以后,CPU再用,那就是中间的那个空下的存取周期
如果是三总线结构,即有DMA总线时,都不需要占用系统总线,只需要考虑和CPU是否会同时读写主存的问题,就是后面提到的三种策略
DMA控制器只和内存进行数据交换,就算是CPU要给外设数据,也是先放到主存,再从主存给到DMA控制器。
向CPU报告是发出一个中断信号
1.CPU此时不访存,那就给DMA用
2.CPU正在访问主存,等CPU访问完了把总线控制权交给DMA
3.IO和CPU两者同时请求访存,那先给DMA用,CPU暂时放弃总线占有权
周期挪用优点:既实现了IO传送,又较好地发挥了主存与CPU的效率
缺点:每挪用一个主存周期,DMA接口都要申请、建立和归还总线控制权
、