IO 方式
- I/O 方式:输入/输出系统实现主机与 I/O 设备之间数据传送的控制方式

程序查询方式
-
基本概念:
- 信息交换的控制完全由 CPU 执行程序实现,CPU 主动查询外设状态。
- 接口中至少设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)。
- 工作流程:
- 测试指令:CPU 执行 I/O 指令,向接口发出命令,并测试设备状态。
- 查询状态:CPU 读取状态寄存器的内容,检查设备是否准备就绪(例如,查询“准备好”标志位)。
- 循环等待:若设备未就绪,CPU 会重复执行步骤 1 和 2,形成一个循环,即“忙等”(Busy-Waiting)。
- 数据传送:若设备已就绪,CPU 通过数据总线从数据缓冲寄存器读取数据(输入),或将数据写入数据缓冲寄存器(输出)。
- 结束或继续:完成一次数据传送后,CPU 返回主程序或继续传送下一批数据。
- CPU 一旦启动 I/O,其运行的 I/O 服务程序会占据 CPU 时间,直到数据传送任务完成。

- 主要特点:
- CPU 有“踏步”等待现象:在设备未准备好时,CPU 处于忙等状态,反复进行查询,不能执行其他任务,导致 CPU 利用率极低。
- CPU 与 I/O 串行工作:在数据传送期间,CPU 的主要任务是为该 I/O 服务,无法与 I/O 设备并行工作。
- 优点:
- 接口设计简单,硬件逻辑简单,成本低,不需要复杂的时序和控制逻辑。
- 缺点:
- CPU 在信息传送过程中要花费大量时间来查询和等待,严重浪费 CPU 资源。
- CPU 的处理速度受限于 I/O 设备的速度,尤其是在与慢速设备交互时,效率极低。
- 在一段时间内,CPU 只能和一个外设进行数据交换,难以支持多设备并行操作。
- 两种查询方式:
- 独占查询(或连续查询):
- CPU 一旦启动设备,就持续不断地查询接口状态,直到 I/O 操作完成。
- 在此期间,CPU 100% 的时间都用于 I/O 查询和等待,CPU 与外设完全串行工作。
- 适用于 CPU 没有其他任务可做,且要求 I/O 响应尽可能快的情况。
- 定时查询(或定期查询):
- CPU 在执行主程序的同时,周期性地抽出时间去查询 I/O 设备的状态。
- CPU 在两次查询的时间间隔内可以执行其他任务,一定程度上提高了 CPU 利用率。
- 关键:查询间隔的设定。间隔太长,可能导致数据丢失(输入时数据被覆盖);间隔太短,则查询开销增大,接近于独占查询。查询频率必须大于等于设备的数据传输频率。
- 独占查询(或连续查询):
程序中断方式

基本概念
-
定义:在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求时,CPU 暂停现行程序,转去对这些事件进行处理,处理完毕后再返回到现行程序的断点处,继续执行原程序。
-
中断源:引起中断的事件,可以是硬件故障、I/O 请求、程序错误等。
-
中断的本质:CPU 从“用户态”切换到“核心态”,由操作系统内核响应和处理中断。
-
中断处理全过程:
- 中断请求:中断源向 CPU 发出中断请求信号。
- 中断判优:当多个中断源同时请求时,CPU 通过硬件或软件判断哪个请求的优先级最高。
- 中断响应:在满足响应条件时,CPU 响应中断。响应条件通常为:
- 中断总开关处于开放状态(如
EINT=1)。 - 无更高级中断或不可屏蔽中断正在处理。
- 当前指令执行完毕。
- 中断总开关处于开放状态(如
- 中断处理:CPU 执行中断隐指令,然后转向执行中断服务程序 (ISR)。
- 中断返回:中断服务程序执行完毕后,通过中断返回指令(如
IRET)恢复现场和断点,返回原程序继续执行。
-
中断隐指令:中断响应后,CPU 经由硬件自动完成的一系列操作,并非一条实际的指令。其主要工作包括:
- 关中断:自动将中断允许位置
0,防止在保护现场过程中被新的中断打断。 - 保存断点:将当前程序计数器 (PC) 的内容(即返回地址)压入堆栈。
- 保存程序状态字 (PSW):将程序状态字寄存器(包含条件码、中断屏蔽位等)的内容压入堆栈。
- 引出中断服务程序:根据中断向量(中断服务程序的入口地址)加载到 PC,从而转向执行中断服务程序。
- 关中断:自动将中断允许位置
-
现场保护与恢复:
- 断点保护:由硬件(中断隐指令) 自动完成,主要保存 PC 和 PSW。
- 现场保护:由软件(中断服务程序) 完成。在 ISR 的开头,通过指令将 CPU 内部的通用寄存器等内容压入堆栈;在 ISR 的结尾,通过指令将这些内容从堆栈中弹出恢复。
-
多重中断(中断嵌套):
- 系统允许在执行一个中断服务程序时,响应一个优先级更高的新中断请求。
- 实现方式:在执行中断服务程序时,保护现场之后,需要重新开中断。这样,更高优先级的中断才能被响应。而保护现场和中断返回恢复现场的过程必须关中断。
-
中断优先级:
- 用于解决多个中断同时发生时的响应顺序问题。
- 优先级由硬件排队器或中断屏蔽字(Interrupt Mask)来决定,而不是根据请求的先后次序。
- CPU 总是响应当前所有未被屏蔽的请求中,优先级最高的那个。
中断技术的主要功能
- 实现 CPU 和 I/O 设备的并行工作:CPU 启动 I/O 后可执行其他任务,I/O 完成时再通过中断通知 CPU,极大提高了 CPU 利用率。
- 处理硬件故障和软件错误:如电源掉电、存储器校验错、非法指令、除数为零等,保证系统稳定运行。
- 实现人机交互:键盘输入、鼠标点击等用户操作通过中断系统通知 CPU。
- 实现多道程序、分时操作:时间片用完时,通过时钟中断切换进程,是实现并发和分时的核心技术。
- 支持实时处理:通过中断实现对外部事件的快速响应和处理。
- 实现系统调用:应用程序通过软中断(也称陷阱或异常)指令(如
INT、SYSCALL)请求操作系统服务,完成从用户态到核心态的转换。 - 多处理器系统通信:在多处理器系统中,一个处理器可以通过中断向另一个处理器发送信号或任务(处理器间中断,IPI)。
程序中断方式的主要思想
-
工作流程:
- CPU 执行主程序时,通过 I/O 指令启动某台外设,并设置好相关参数。
- CPU 继续执行原来的程序,无需等待外设。此时 CPU 与 I/O 设备并行工作。
- 外设完成数据准备工作后,通过控制线向 CPU 发出中断请求信号。
- 在当前指令执行周期末尾,如果 CPU 处于开中断状态且无更高优先级中断,则响应该中断请求。
- CPU 暂停当前主程序,执行中断隐指令(保存断点、关中断、获取 ISR 地址)。
- CPU 转去执行对应的中断服务程序,完成一次数据传送。
- 中断服务程序执行完毕,执行中断返回指令,恢复原程序的现场和断点,CPU 回到原程序继续执行。
-
优缺点分析:
| 优点 | 缺点 |
|---|---|
| CPU 利用率高,实现了 CPU 与 I/O 的并行。 | 中断处理需要保护和恢复现场,存在一定的时间开销。 |
| 系统响应及时,能处理突发事件。 | 硬件接口设计比查询方式复杂。 |
| 可靠性高,能处理软硬件故障。 | 对于高速 I/O 设备,频繁中断会消耗大量 CPU 时间,效率受限。 |
程序中断的基本流程
中断请求
- 中断源:请求 CPU 中断的设备或事件。一台计算机允许有多个中断源。
- 中断请求触发器:每个中断源内部都有一个触发器(如
INTR标志),当满足中断条件时,该触发器置位(例如,置1),表示有中断请求。 - 中断请求信号:中断源通过专用的信号线向 CPU 发送中断请求信号。
- 中断类型:
- 可屏蔽中断 (Maskable Interrupt):通过
INTR(Interrupt Request) 信号线发出。CPU 可以通过设置中断屏蔽位来决定是否响应这类中断。这是最常见的中断类型,用于 I/O 设备。 - 不可屏蔽中断 (Non-Maskable Interrupt, NMI):通过
NMI信号线发出。这类中断具有最高优先级,不受中断屏蔽位的控制,CPU 必须响应。通常用于处理紧急事件,如电源掉电、硬件故障、时钟中断等。
- 可屏蔽中断 (Maskable Interrupt):通过
中断响应判优
- 目的:当多个中断源同时发出请求时,决定 CPU 首先响应哪一个。
- 实现方式:主要通过硬件排队器实现,也可以通过软件查询方式实现。
- 通用优先级排序:
- 硬件故障中断(最高):如掉电、奇偶校验错等,属于不可屏蔽中断或内部异常。
- 软件中断:由指令(如
INT n、SYSCALL)引起,优先级次之。 - 不可屏蔽中断 (NMI):优先级高于所有可屏蔽中断。
- 可屏蔽中断 (INTR):优先级最低,内部又可细分。
- 可屏蔽中断内部的优先级:
- DMA 中断请求 > 普通 I/O 设备中断请求。
- 高速设备(如磁盘) > 低速设备(如键盘)。
- 输入设备 > 输出设备。
- 实时设备 > 普通设备。
- 响应优先级 vs 处理优先级:
- 响应优先级:指 CPU 响应中断请求的先后顺序,通常由硬件排队电路决定,是固定的。
- 处理优先级:指中断服务程序被处理的优先级。可以通过中断屏蔽技术动态调整。例如,一个低优先级的中断服务程序在执行时,可以被一个更高优先级的中断所打断(即多重中断)。
CPU 响应中断的条件
- 中断源发出中断请求信号。
- CPU 处于开中断状态(即中断允许标志位
IF或EINT为1)。异常和不可屏蔽中断无此条件。 - 当前指令执行完毕。这是为了保证指令的原子性。异常(如缺页、非法指令)是在指令执行过程中发生的,因此不受此限制。
- 没有更高优先级的中断请求或正在处理的中断。
- 注意:CPU 在每条指令执行周期的最后一个时钟周期检测中断请求信号。这仅指外部 I/O 中断。内部异常则在指令执行过程中产生并立即响应。
中断响应过程
- 中断隐指令:中断响应后,由 CPU 内部硬件自动完成的一系列微操作,它不是指令系统中的一条真正的指令。
- 主要操作步骤:
- 关中断:将中断允许标志位自动清零,以防止在保护现场的关键过程中被新的中断(特别是同级的或更低级的)打断,保证现场保护的原子性。
- 保存断点:将当前程序计数器 (PC) 的内容(即下一条指令的地址)压入处理器堆栈。
- 保存程序状态字 (PSW):将包含当前 CPU 状态(如条件码、中断屏蔽位等)的 PSW 寄存器压入堆栈。
- 引出中断服务程序:识别中断源,并将对应的中断服务程序入口地址送入 PC。
中断向量
-
中断识别:确定是哪个中断源发出的请求,以便调用相应的处理程序。
-
识别方法:
- 非向量中断 (软件查询法):CPU 响应中断后,执行一个公共的中断查询程序,该程序按优先级顺序逐一检查各个中断源的状态,以确定中断来源。优点是硬件简单,缺点是速度慢,识别时间不确定。
- 向量中断 (硬件向量法):CPU 响应中断后,由中断源直接向 CPU 提供一个中断类型号(或称向量地址),CPU 利用这个号来直接找到中断服务程序的入口地址。优点是识别速度快,响应及时。
-
相关概念:
- 中断类型号:每个中断源被赋予一个唯一的编号。
- 中断向量:中断服务程序的入口地址。
- 中断向量表 (IVT):内存中一块专门的区域,用于存放所有中断源对应的中断向量。中断类型号通常作为索引来查找此表。
-
硬件向量法工作流程:
- CPU 响应中断请求,向中断源发出中断响应信号。
- 中断源通过数据总线将自己的中断类型号发送给 CPU。
- CPU 拿到类型号后,以此为索引在中断向量表中查找对应的中断向量。
- CPU 将查找到的中断向量(即 ISR 入口地址)加载到 PC 中,从而开始执行中断服务程序。
-
注意:
- 中断请求和响应信号通过控制总线传输。
- 中断类型号通过数据总线传输。
中断处理过程

多重中断和中断屏蔽技术
单重中断和多重中断
- 单重中断:CPU 在执行一个中断服务程序 (ISR) 的过程中,不响应任何新的中断请求。这是通过在进入 ISR 时关中断,并在 ISR 返回前才开中断来实现的。
- 优点:逻辑简单,易于实现。
- 缺点:对于高优先级且紧急的事件,响应不及时,可能导致数据丢失或系统错误。
- 多重中断 (中断嵌套):CPU 在执行一个 ISR 的过程中,可以响应一个更高优先级的中断请求。此时,CPU 会暂停当前正在执行的 ISR,转而去处理新的、更高优先级的中断。处理完毕后,再返回到被中断的 ISR 继续执行。注意:响应高级中断时,先保护现场和屏蔽字再开中断;执行 ISR 后,先关中断再恢复现场。防止保护、恢复现场时被打断。
- 实现过程:
- CPU 响应中断
I₁。 - 硬件自动关中断,保护
I₁的断点和现场。 - 执行
I₁的 ISR。在 ISR 的开头,通过指令提前开中断。 - 在
I₁的 ISR 执行期间,更高优先级的中断I₂发生。 - CPU 响应
I₂,暂停I₁的 ISR,保护I₂的断点和现场(即I₁的 ISR 的断点)。 - 执行
I₂的 ISR。 I₂的 ISR 执行完毕后,恢复现场,返回到I₁的 ISR 继续执行。I₁的 ISR 执行完毕后,恢复现场,返回到主程序。
- CPU 响应中断
- 实现过程:
中断屏蔽技术
- 目的:中断屏蔽技术是实现多重中断的核心机制,它通过动态改变中断处理的优先级,来决定在执行一个 ISR 时,可以响应哪些中断,屏蔽哪些中断。
- 实现条件:
- 在中断服务程序的入口处提前设置开中断指令,允许响应更高优先级的中断。
- CPU 必须能判断新中断请求与正在处理的中断的优先级高低。
- 中断屏蔽字 (Interrupt Mask):
- 屏蔽触发器 (Mask Bit):每个中断源对应一个屏蔽位。通常
1表示屏蔽该中断请求,0表示允许。 - 屏蔽字寄存器 (Interrupt Mask Register, IMR):所有屏蔽位组合在一起构成一个寄存器。CPU 通过向该寄存器写入不同的屏蔽字,来动态地控制哪些中断可以被响应。
- 屏蔽触发器 (Mask Bit):每个中断源对应一个屏蔽位。通常
- 工作原理:
- 当 CPU 响应某个中断源
i的请求时,在保护现场后,硬件会自动设置一个新的屏蔽字到屏蔽字寄存器中。 - 这个新的屏蔽字会屏蔽掉所有优先级不高于
i的中断源(包括i自身),但允许所有优先级高于i的中断。 - 在该中断的服务程序执行结束,恢复现场时,也会将原来的屏蔽字恢复。
- 当 CPU 响应某个中断源
- 示例:假设有 3 个中断源
I₁ > I₂ > I₃(优先级从高到低)。- CPU 空闲时:屏蔽字为
000,所有中断都可响应。 - 响应
I₃时:进入I₃的 ISR,屏蔽字设为111或011(至少屏蔽I₃及其更低优先级的中断)。假设设为011,此时只有I₁能中断I₃。 - 响应
I₂时:屏蔽字设为001或110(屏蔽I₂和I₃)。此时只有I₁能中断I₂。 - 响应
I₁时:屏蔽字设为100或111(屏蔽I₁、I₂、I₃),此时I₁不会被任何中断打断。
- CPU 空闲时:屏蔽字为
- 注意:
- 屏蔽字中的
1越多,表示屏蔽的中断源越多,CPU 能响应的中断请求就越少,因而当前程序的执行优先级越高。 - 每个中断源在被服务时,其自身的中断请求必须被屏蔽,以防止其自身反复中断。
- 屏蔽字中的

DMA 方式
基本概念
- 一种完全由硬件 (DMA 控制器, DMAC) 进行成组信息传送的控制方式。
- CPU 只需在传送开始前发出指令启动 DMA,并在传送结束后进行处理,传送过程本身无需 CPU 干预。
- 在数据传送阶段,DMAC 接管总线控制权,在外设与内存之间开辟一条“直接数据通路”,实现数据直接交换。
- 信息传送不再经过 CPU(也就不需要保护、恢复 CPU 现场等操作),极大降低了 CPU 在传送数据时的开销,实现了 CPU 与 I/O 设备操作的并行。
- 被称为直接存储器存取方式 (Direct Memory Access)。
- 适用于磁盘、显卡、声卡、网卡等高速设备大批量数据的传送,但硬件开销较大。
- DMA 方式中,中断的作用仅限于故障和正常传送结束时向 CPU 报告,而不是在每个数据传输时都发生。
DMA 方式的特点
- 主存既可以被 CPU 访问,也可被 DMA 控制器访问。当两者同时请求访问时,通常 DMA 控制器优先级更高,因为 I/O 设备无法暂停。
- 数据块传送时,主存地址的确定、传送数据量的计数等都由硬件 (DMA 控制器) 直接实现。
- 主存中要开辟专用缓冲区,用于暂存待发送或已接收的数据。
- DMA 传送速度快,CPU 和外设并行工作,提高了系统效率。
- DMA 在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
DMA 控制器
定义
- DMAC 又叫 DMA 控制器(DMA 接口),是实现 DMA 传送功能的硬件逻辑电路。
- 在 DMA 过程中,DMAC 将接管 CPU 的地址总线、数据总线和控制总线,CPU 的主存控制信号被禁用,由 DMAC 提供相应的总线信号。
功能
- 接收请求:接收外设发出的 DMA 请求 (DREQ),并向 CPU 发出总线请求 (HRQ/HOLD)。
- 接管总线:CPU 响应此总线请求,发出总线响应信号 (HLDA),DMAC 接管总线控制权,进入 DMA 操作周期。
- 传送控制:确定传送数据的主存单元地址及长度,并自动修改主存地址计数和传送长度计数。
- 执行传送:规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
- 结束报告:当传送长度计数器为 0 时,表示数据块传送完毕,通过中断向 CPU 报告 DMA 操作结束。
组成
- 主存地址寄存器 (DAR):存放要交换数据的主存地址,传送过程中地址自动增/减。
- 传送长度计数器 (WC):记录本次要传送数据的总字数。每传送一个字,计数器就减 1,直至计数器为 0,表示该批数据传送完毕。
- 数据缓冲寄存器 (DR):暂存每次传送的数据。它在 I/O 设备和主存之间提供数据缓冲,以匹配两者不同的速度和数据宽度。
- DMA 请求触发器:用于缓存 I/O 设备发来的 DMA 请求信号,并向控制逻辑发出请求。
- “控制/状态”逻辑:由控制和时序电路及状态标志组成,用于指定传送方向,协调 DMA 请求信号和 CPU 响应信号,并向设备和主存发出控制信号。
- 中断机构:当一个数据块传送完毕后(WC=0),触发中断机构,向 CPU 提出中断请求。
DMA 传送过程
-
预处理阶段:CPU 执行初始化程序,设置 DMA 控制器的寄存器:
- 将数据在主存中的起始地址送入主存地址寄存器 (DAR)。
- 将本次传送的数据长度(字数)送入传送长度计数器 (WC)。
- 设置数据传送方向(读/写)、传送模式等信息到控制寄存器。
- 最后,CPU 启动 DMA 控制器,然后继续执行自己的程序。
-
数据传送阶段:完全由 DMA 控制器控制,无需 CPU 干预。
- I/O 设备准备好一个字的数据后,向 DMAC 发出 DMA 请求。
- DMAC 向 CPU 请求总线控制权。
- CPU 响应,让出总线。
- DMAC 控制总线,将一个字的数据从设备传送到主存(或反向)。
- 传送完成后,DMAC 修改 DAR 和 WC 的值,并释放总线。
- 重复以上步骤,直到 WC 减为 0。
-
后处理阶段:
- 当 WC=0 时,DMAC 向 CPU 发送一个中断信号。
- CPU 响应中断,执行中断服务程序,进行收尾工作(如检查传送是否出错,或启动下一次 DMA 传送)。

DMA 传送方式
DMA 控制器与 CPU 共享主存,为解决总线访问冲突,有三种传送方式:
| 传送方式 | 工作原理 | 优点 | 缺点 |
|---|---|---|---|
| 停止 CPU 访问主存 (猝发模式 Burst Mode) | DMA 传送开始前,DMAC 向 CPU 申请并获得总线控制权。一旦获得,就连续传送整个数据块,期间 CPU 完全放弃总线,处于等待状态。 | 传送效率最高,适用于要求快速传送的场景。 | CPU 在较长时间内无法访问主存,响应延迟大,可能影响实时任务。 |
| 周期挪用 (周期窃取 Cycle Stealing) | DMAC 每请求传送一个字,就向 CPU 申请一个总线周期。CPU 暂时让出总线,DMAC 传送一个字后立即归还总线。 | 兼顾了 DMA 传送和 CPU 工作,CPU 仅暂停一个或几个时钟周期,对 CPU 影响较小。 | 数据传送是不连续的,传送一个数据块的总时间比猝发模式长。 |
| DMA 与 CPU 交替访问 (透明模式 Transparent Mode) | DMAC 只在 CPU 不访问主存的指令周期(如译码、执行访内指令等)进行数据传送。 | 对 CPU 的工作完全没有影响,CPU 无需暂停,感觉不到 DMAC 的存在。 | 实现复杂,需要精确同步。传送速度完全依赖于 CPU 不访问主存的时钟周期,速度最慢。 |
停止 CPU 访问主存

周期挪用
- I/O 设备有 DMA 请求时,会遇到 3 种情况:
- 此时 CPU 不访存
- CPU 正在访存,待存取周期结束后,CPU 再将总线占有权让出
- I/O 和 CPU 同时请求访存,CPU 要暂时放弃总线占有权

DMA 与 CPU 交替访问
- 总线使用权分时控制

传送过程
整个 DMA 传送过程可以分为预处理、数据传送和后处理三个阶段。
-
预处理阶段:CPU 执行初始化程序,为 DMAC 进行配置。
- CPU 将数据在主存中的起始地址送入 DMA 控制器的主存地址寄存器 (DAR)。
- CPU 将本次传送的数据块长度(字数)送入传送长度计数器 (WC)。
- CPU 设置数据传送方向(读/写)、传送模式等信息到控制寄存器中。
- 最后,CPU 启动 DMA 控制器,之后便可继续执行自己的程序,传送过程交由 DMAC 管理。
-
数据传送阶段:此阶段完全由 DMAC 控制,以数据块为基本传送单位,无需 CPU 干预。
- I/O 设备准备好一个字的数据后,向 DMAC 发出 DMA 请求 (DREQ)。
- DMAC 收到请求后,向 CPU 发出总线请求 (HOLD 或 HRQ)。
- CPU 在当前总线周期结束后,发出总线响应信号 (HLDA),让出总线控制权。
- DMAC 接管总线,执行一个字的数据传送(I/O 设备 主存)。
- 传送完成后,DMAC 自动完成:
- 主存地址寄存器 (DAR) 自动加 1。
- 传送长度计数器 (WC) 自动减 1。
- 释放总线,CPU 恢复总线控制权。
- DMAC 检查 WC 的值,若不为 0,则重复上述过程,直到传送完所有数据。
-
后处理阶段:数据块传送完毕后进行的工作。
- 当传送长度计数器 WC 减为 0 时,DMAC 向 CPU 发出中断请求。
- CPU 响应中断,转去执行中断服务程序,进行 DMA 结束处理。
- 后处理工作主要包括:
- 校验送入主存的数据是否正确。
- 测试传送过程中是否出错(通过查看 DMAC 的状态寄存器),若出错则转入诊断程序。
- 决定是否继续进行下一次 DMA 传送,若需要则返回预处理阶段,否则结束。

各种方式的比较

