IO 方式

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

程序查询方式

  • 基本概念

    • 信息交换的控制完全由 CPU 执行程序实现,CPU 主动查询外设状态。
    • 接口中至少设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)。
    • 工作流程
      1. 测试指令:CPU 执行 I/O 指令,向接口发出命令,并测试设备状态。
      2. 查询状态:CPU 读取状态寄存器的内容,检查设备是否准备就绪(例如,查询“准备好”标志位)。
      3. 循环等待:若设备未就绪,CPU 会重复执行步骤 1 和 2,形成一个循环,即“忙等”(Busy-Waiting)。
      4. 数据传送:若设备已就绪,CPU 通过数据总线从数据缓冲寄存器读取数据(输入),或将数据写入数据缓冲寄存器(输出)。
      5. 结束或继续:完成一次数据传送后,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 从“用户态”切换到“核心态”,由操作系统内核响应和处理中断。

  • 中断处理全过程

    1. 中断请求:中断源向 CPU 发出中断请求信号。
    2. 中断判优:当多个中断源同时请求时,CPU 通过硬件或软件判断哪个请求的优先级最高。
    3. 中断响应:在满足响应条件时,CPU 响应中断。响应条件通常为:
      • 中断总开关处于开放状态(如 EINT=1)。
      • 无更高级中断或不可屏蔽中断正在处理。
      • 当前指令执行完毕。
    4. 中断处理:CPU 执行中断隐指令,然后转向执行中断服务程序 (ISR)
    5. 中断返回:中断服务程序执行完毕后,通过中断返回指令(如 IRET)恢复现场和断点,返回原程序继续执行。
  • 中断隐指令:中断响应后,CPU 经由硬件自动完成的一系列操作,并非一条实际的指令。其主要工作包括:

    1. 关中断:自动将中断允许位置 0,防止在保护现场过程中被新的中断打断。
    2. 保存断点:将当前程序计数器 (PC) 的内容(即返回地址)压入堆栈。
    3. 保存程序状态字 (PSW):将程序状态字寄存器(包含条件码、中断屏蔽位等)的内容压入堆栈。
    4. 引出中断服务程序:根据中断向量(中断服务程序的入口地址)加载到 PC,从而转向执行中断服务程序。
  • 现场保护与恢复

    • 断点保护:由硬件(中断隐指令) 自动完成,主要保存 PC 和 PSW。
    • 现场保护:由软件(中断服务程序) 完成。在 ISR 的开头,通过指令将 CPU 内部的通用寄存器等内容压入堆栈;在 ISR 的结尾,通过指令将这些内容从堆栈中弹出恢复。
  • 多重中断(中断嵌套)

    • 系统允许在执行一个中断服务程序时,响应一个优先级更高的新中断请求。
    • 实现方式:在执行中断服务程序时,保护现场之后,需要重新开中断。这样,更高优先级的中断才能被响应。而保护现场和中断返回恢复现场的过程必须关中断。
  • 中断优先级

    • 用于解决多个中断同时发生时的响应顺序问题。
    • 优先级由硬件排队器或中断屏蔽字(Interrupt Mask)来决定,而不是根据请求的先后次序。
    • CPU 总是响应当前所有未被屏蔽的请求中,优先级最高的那个。

中断技术的主要功能

  • 实现 CPU 和 I/O 设备的并行工作:CPU 启动 I/O 后可执行其他任务,I/O 完成时再通过中断通知 CPU,极大提高了 CPU 利用率。
  • 处理硬件故障和软件错误:如电源掉电、存储器校验错、非法指令、除数为零等,保证系统稳定运行。
  • 实现人机交互:键盘输入、鼠标点击等用户操作通过中断系统通知 CPU。
  • 实现多道程序、分时操作:时间片用完时,通过时钟中断切换进程,是实现并发和分时的核心技术。
  • 支持实时处理:通过中断实现对外部事件的快速响应和处理。
  • 实现系统调用:应用程序通过软中断(也称陷阱异常)指令(如 INTSYSCALL)请求操作系统服务,完成从用户态到核心态的转换。
  • 多处理器系统通信:在多处理器系统中,一个处理器可以通过中断向另一个处理器发送信号或任务(处理器间中断,IPI)。

程序中断方式的主要思想

  • 工作流程

    1. CPU 执行主程序时,通过 I/O 指令启动某台外设,并设置好相关参数。
    2. CPU 继续执行原来的程序,无需等待外设。此时 CPU 与 I/O 设备并行工作。
    3. 外设完成数据准备工作后,通过控制线向 CPU 发出中断请求信号。
    4. 在当前指令执行周期末尾,如果 CPU 处于开中断状态且无更高优先级中断,则响应该中断请求。
    5. CPU 暂停当前主程序,执行中断隐指令(保存断点、关中断、获取 ISR 地址)。
    6. CPU 转去执行对应的中断服务程序,完成一次数据传送。
    7. 中断服务程序执行完毕,执行中断返回指令,恢复原程序的现场和断点,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 必须响应。通常用于处理紧急事件,如电源掉电、硬件故障、时钟中断等。

中断响应判优

  • 目的:当多个中断源同时发出请求时,决定 CPU 首先响应哪一个。
  • 实现方式:主要通过硬件排队器实现,也可以通过软件查询方式实现。
  • 通用优先级排序
    1. 硬件故障中断(最高):如掉电、奇偶校验错等,属于不可屏蔽中断或内部异常。
    2. 软件中断:由指令(如 INT nSYSCALL)引起,优先级次之。
    3. 不可屏蔽中断 (NMI):优先级高于所有可屏蔽中断。
    4. 可屏蔽中断 (INTR):优先级最低,内部又可细分。
  • 可屏蔽中断内部的优先级
    • DMA 中断请求 > 普通 I/O 设备中断请求。
    • 高速设备(如磁盘) > 低速设备(如键盘)。
    • 输入设备 > 输出设备。
    • 实时设备 > 普通设备。
  • 响应优先级 vs 处理优先级
    • 响应优先级:指 CPU 响应中断请求的先后顺序,通常由硬件排队电路决定,是固定的。
    • 处理优先级:指中断服务程序被处理的优先级。可以通过中断屏蔽技术动态调整。例如,一个低优先级的中断服务程序在执行时,可以被一个更高优先级的中断所打断(即多重中断)。

CPU 响应中断的条件

  • 中断源发出中断请求信号。
  • CPU 处于开中断状态(即中断允许标志位 IFEINT1)。异常和不可屏蔽中断无此条件。
  • 当前指令执行完毕。这是为了保证指令的原子性。异常(如缺页、非法指令)是在指令执行过程中发生的,因此不受此限制。
  • 没有更高优先级的中断请求或正在处理的中断。
  • 注意:CPU 在每条指令执行周期的最后一个时钟周期检测中断请求信号。这仅指外部 I/O 中断。内部异常则在指令执行过程中产生并立即响应。

中断响应过程

  • 中断隐指令:中断响应后,由 CPU 内部硬件自动完成的一系列微操作,它不是指令系统中的一条真正的指令。
  • 主要操作步骤
    1. 关中断:将中断允许标志位自动清零,以防止在保护现场的关键过程中被新的中断(特别是同级的或更低级的)打断,保证现场保护的原子性。
    2. 保存断点:将当前程序计数器 (PC) 的内容(即下一条指令的地址)压入处理器堆栈。
    3. 保存程序状态字 (PSW):将包含当前 CPU 状态(如条件码、中断屏蔽位等)的 PSW 寄存器压入堆栈。
    4. 引出中断服务程序:识别中断源,并将对应的中断服务程序入口地址送入 PC。

中断向量

  • 中断识别:确定是哪个中断源发出的请求,以便调用相应的处理程序。

  • 识别方法

    • 非向量中断 (软件查询法):CPU 响应中断后,执行一个公共的中断查询程序,该程序按优先级顺序逐一检查各个中断源的状态,以确定中断来源。优点是硬件简单,缺点是速度慢,识别时间不确定。
    • 向量中断 (硬件向量法):CPU 响应中断后,由中断源直接向 CPU 提供一个中断类型号(或称向量地址),CPU 利用这个号来直接找到中断服务程序的入口地址。优点是识别速度快,响应及时。
  • 相关概念

    • 中断类型号:每个中断源被赋予一个唯一的编号。
    • 中断向量:中断服务程序的入口地址
    • 中断向量表 (IVT):内存中一块专门的区域,用于存放所有中断源对应的中断向量。中断类型号通常作为索引来查找此表。
  • 硬件向量法工作流程

    1. CPU 响应中断请求,向中断源发出中断响应信号。
    2. 中断源通过数据总线将自己的中断类型号发送给 CPU。
    3. CPU 拿到类型号后,以此为索引在中断向量表中查找对应的中断向量。
    4. CPU 将查找到的中断向量(即 ISR 入口地址)加载到 PC 中,从而开始执行中断服务程序。
  • 注意

    • 中断请求和响应信号通过控制总线传输。
    • 中断类型号通过数据总线传输。

中断处理过程

多重中断和中断屏蔽技术

单重中断和多重中断

  • 单重中断:CPU 在执行一个中断服务程序 (ISR) 的过程中,不响应任何新的中断请求。这是通过在进入 ISR 时关中断,并在 ISR 返回前才开中断来实现的。
    • 优点:逻辑简单,易于实现。
    • 缺点:对于高优先级且紧急的事件,响应不及时,可能导致数据丢失或系统错误。
  • 多重中断 (中断嵌套):CPU 在执行一个 ISR 的过程中,可以响应一个更高优先级的中断请求。此时,CPU 会暂停当前正在执行的 ISR,转而去处理新的、更高优先级的中断。处理完毕后,再返回到被中断的 ISR 继续执行。注意:响应高级中断时,先保护现场和屏蔽字再开中断;执行 ISR 后,先关中断再恢复现场。防止保护、恢复现场时被打断。
    • 实现过程
      1. CPU 响应中断 I₁
      2. 硬件自动关中断,保护 I₁ 的断点和现场。
      3. 执行 I₁ 的 ISR。在 ISR 的开头,通过指令提前开中断
      4. 在 I₁ 的 ISR 执行期间,更高优先级的中断 I₂ 发生。
      5. CPU 响应 I₂,暂停 I₁ 的 ISR,保护 I₂ 的断点和现场(即 I₁ 的 ISR 的断点)。
      6. 执行 I₂ 的 ISR。
      7. I₂ 的 ISR 执行完毕后,恢复现场,返回到 I₁ 的 ISR 继续执行。
      8. I₁ 的 ISR 执行完毕后,恢复现场,返回到主程序。

中断屏蔽技术

  • 目的:中断屏蔽技术是实现多重中断的核心机制,它通过动态改变中断处理的优先级,来决定在执行一个 ISR 时,可以响应哪些中断,屏蔽哪些中断。
  • 实现条件
    1. 在中断服务程序的入口处提前设置开中断指令,允许响应更高优先级的中断。
    2. CPU 必须能判断新中断请求与正在处理的中断的优先级高低。
  • 中断屏蔽字 (Interrupt Mask)
    • 屏蔽触发器 (Mask Bit):每个中断源对应一个屏蔽位。通常 1 表示屏蔽该中断请求,0 表示允许。
    • 屏蔽字寄存器 (Interrupt Mask Register, IMR):所有屏蔽位组合在一起构成一个寄存器。CPU 通过向该寄存器写入不同的屏蔽字,来动态地控制哪些中断可以被响应。
  • 工作原理
    1. 当 CPU 响应某个中断源 i 的请求时,在保护现场后,硬件会自动设置一个新的屏蔽字到屏蔽字寄存器中。
    2. 这个新的屏蔽字会屏蔽掉所有优先级不高于 i 的中断源(包括 i 自身),但允许所有优先级高于 i 的中断。
    3. 在该中断的服务程序执行结束,恢复现场时,也会将原来的屏蔽字恢复。
  • 示例:假设有 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₁ 不会被任何中断打断。
  • 注意
    • 屏蔽字中的 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请求与DMA响应

功能

  1. 接收请求:接收外设发出的 DMA 请求 (DREQ),并向 CPU 发出总线请求 (HRQ/HOLD)。
  2. 接管总线:CPU 响应此总线请求,发出总线响应信号 (HLDA),DMAC 接管总线控制权,进入 DMA 操作周期。
  3. 传送控制:确定传送数据的主存单元地址及长度,并自动修改主存地址计数和传送长度计数
  4. 执行传送:规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
  5. 结束报告:当传送长度计数器为 0 时,表示数据块传送完毕,通过中断向 CPU 报告 DMA 操作结束。

组成

  • 主存地址寄存器 (DAR):存放要交换数据的主存地址,传送过程中地址自动增/减
  • 传送长度计数器 (WC):记录本次要传送数据的总字数。每传送一个字,计数器就减 1,直至计数器为 0,表示该批数据传送完毕。
  • 数据缓冲寄存器 (DR):暂存每次传送的数据。它在 I/O 设备和主存之间提供数据缓冲,以匹配两者不同的速度和数据宽度。
  • DMA 请求触发器:用于缓存 I/O 设备发来的 DMA 请求信号,并向控制逻辑发出请求。
  • “控制/状态”逻辑:由控制和时序电路及状态标志组成,用于指定传送方向,协调 DMA 请求信号和 CPU 响应信号,并向设备和主存发出控制信号。
  • 中断机构:当一个数据块传送完毕后(WC=0),触发中断机构,向 CPU 提出中断请求。

DMA 传送过程

  1. 预处理阶段:CPU 执行初始化程序,设置 DMA 控制器的寄存器:

    • 将数据在主存中的起始地址送入主存地址寄存器 (DAR)。
    • 将本次传送的数据长度(字数)送入传送长度计数器 (WC)。
    • 设置数据传送方向(读/写)、传送模式等信息到控制寄存器。
    • 最后,CPU 启动 DMA 控制器,然后继续执行自己的程序。
  2. 数据传送阶段:完全由 DMA 控制器控制,无需 CPU 干预。

    • I/O 设备准备好一个字的数据后,向 DMAC 发出 DMA 请求。
    • DMAC 向 CPU 请求总线控制权。
    • CPU 响应,让出总线。
    • DMAC 控制总线,将一个字的数据从设备传送到主存(或反向)。
    • 传送完成后,DMAC 修改 DAR 和 WC 的值,并释放总线
    • 重复以上步骤,直到 WC 减为 0。
  3. 后处理阶段

    • 当 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 种情况:
    1. 此时 CPU 不访存
    2. CPU 正在访存,待存取周期结束后,CPU 再将总线占有权让出
    3. I/O 和 CPU 同时请求访存,CPU 要暂时放弃总线占有权

DMA 与 CPU 交替访问

  • 总线使用权分时控制

传送过程

整个 DMA 传送过程可以分为预处理、数据传送和后处理三个阶段。

  1. 预处理阶段:CPU 执行初始化程序,为 DMAC 进行配置。

    • CPU 将数据在主存中的起始地址送入 DMA 控制器的主存地址寄存器 (DAR)。
    • CPU 将本次传送的数据块长度(字数)送入传送长度计数器 (WC)。
    • CPU 设置数据传送方向(读/写)、传送模式等信息到控制寄存器中。
    • 最后,CPU 启动 DMA 控制器,之后便可继续执行自己的程序,传送过程交由 DMAC 管理。
  2. 数据传送阶段:此阶段完全由 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,则重复上述过程,直到传送完所有数据。
  3. 后处理阶段:数据块传送完毕后进行的工作。

    • 当传送长度计数器 WC 减为 0 时,DMAC 向 CPU 发出中断请求
    • CPU 响应中断,转去执行中断服务程序,进行 DMA 结束处理。
    • 后处理工作主要包括:
      • 校验送入主存的数据是否正确。
      • 测试传送过程中是否出错(通过查看 DMAC 的状态寄存器),若出错则转入诊断程序。
      • 决定是否继续进行下一次 DMA 传送,若需要则返回预处理阶段,否则结束。

各种方式的比较