# 程序查询方式

程序查询方式流程图

预置传送参数:CPU 执行初始化程序,并预置传送参数,设置计数器、设置数据首地址

启动外设:向 I/O 接口发送命令,启动 I/O 设备

取外设状态:CPU 从接口读取设备状态,直到外设准备就绪

外设准备就绪:CPU 不断查询 I/O 设备状态,直到外设准备就绪

  • 上两个状态合并解释:CPU 一旦启动 I/O,必须停止现行程序的运行,并在现行程序中插入一段程序。

  • 主要特点:CPU 有 "踏步" 等待现象,CPU 与 I/O 串行工作

传送一次数据:一般为一个字

修改传送参数:修改地址和计数器参数

传送完否:判断传送是否结束 (一般计数器为 0 时结束)

优点:接口设计简单、设备量少

缺点:CPU 在信息传送的过程中要花费很多时间用于查询和等待,而且在一段时间内只能和一台外设交换信息,效率大大降低

程序查询方式例题

在程序查询方式的输入 / 输出系统中,假设不考虑处理时间,每一个查询操作需要 100 个时钟周期,CPU 的时钟频率为 50MHz,现有鼠标和键盘两个设备,而且 CPU 必须每秒对鼠标进行 30 次查询,硬盘以 32 位字长为单位传输数据,即每 32 位被 CPU 查询一次,传输率为2×220B/s2\times 2^{20}B/s。求 CPU 对这两个设备查询所花费的时间比率,由此可得出什么结论?

  • 时间角度

    • 一个时钟周期为 1/50MHz=20ns
    • 一个查询操作耗时 100*20ns=2ms
    • 鼠标
      • 每秒查询鼠标耗时 30*2ms=60ms
      • 查询鼠标所花费时间比率 = 60ms/1s=0.006%
      • 对鼠标的查询基本不影响 CPU 的性能
    • 键盘
      • 每秒查询键盘需要2220/4=2192*2^{20}/4=2^{19}
      • 查询硬盘耗时2192ms=220ms2^{19}*2ms=2^{20}ms
      • 查询硬盘所花费时间比率 =220ms/1s2^{20}ms/1s=105%
      • CPU 将全部时间用于对硬盘的查询也不可能满足磁盘传输的要求
  • 频率角度

    • CPU 的时钟频率为 50MHz,即每秒钟51065*10^6 个时钟周期
    • 鼠标
      • 每秒查询鼠标所用的时钟周期数为 30*100=3000 个时钟周期
      • 查询鼠标所花费的时间比率 = 0.006%
    • 硬盘
      • 每秒需要查询键盘2220/4=2192*2^{20}/4=2^{19}
      • 查询硬盘需要占用2191002^{19}*100 时钟周期
      • 查询硬盘所花费时间比率 = 105%

独占查询:CPU 100% 的时间都用在查询 I/O 状态,完全串行

定时查询:在保证数据不丢失的情况下,每隔一段时间 CPU 就查询一次 I/O 状态。查询的间隔内 CPU 可以执行其他程序

# 中断的作用和原理

中断基本概念:程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU 暂时终止现行程序,而转去对这些异常情况或特殊情况请求进行处理,在处理完毕后 CPU 又自动返回到现行程序的断点处,继续执行原程序

工作流程:

  • 中断请求
    • 中断源向 CPU 发送中断请求信号
  • 中断响应
    • 响应中断的条件
    • 中断判优:多个中断源同时提出请求时通过判优逻辑响应一个中断源
  • 中断处理
    • 中断隐指令
    • 中断服务程序

关中断的作用:实现原子操作

  • IF=1 表示开中断 (允许中断)
  • IF=0 表示关中断 (不允许中断)

非屏蔽中断:关中断时也会被响应 (如:掉电)

可屏蔽中断:关中断时不会被响应

# 中断请求标记

中断请求标记:用于判断是哪个设备发来的中断请求

每个中断源向 CPU 发出中断请求的时间是随机的

为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器 INTR,当其状态为 1 时,表示中断源有请求。

这些触发器可组成中断请求标记寄存器,该寄存器可集中在 CPU 中,也可分散在各个中断源中

对于外中断,CPU 是在统一的时间即每条指令执行阶段结束前向接口发出中断查询信号,以获取 I/O 的中断请求,也就是说,CPU 响应中断的时间是在每条指令执行阶段的结束时刻

CPU 响应中断必须满足以下 3 个条件:

  • 中断源有中断请求
  • CPU 允许中断即开中断
  • 一条指令执行完毕,且没有更紧迫的任务

# 中断判优

中断判优:解决有多个中断信号同事到来,先处理哪个问题

中断判优既可以用硬件实现,也可用软件实现

硬件实现是通过硬件排队器实现的,它既可以设置在 CPU 中,也可以分散在各个中断源中;软件实现是通过查询程序实现的

硬件:硬件排队器

软件:查询程序

优先级设置

  • 硬件故障中断属于最高级,其次是软件中断
  • 非屏蔽中断优于可屏蔽中断
  • DMA 请求优于 I/O 设备传送的中断请求
  • 高速设备优于低速设备
  • 输入设备优于输出设备
  • 实时设备优于普通设备

# 中断处理过程

  • 当前指令执行结束后,PC 内容为 K+1

  • 中断隐指令:保存原程序的 PC 值,并让 PC 指向中断服务程序的第一条指令

    • 中断隐指令主要任务:
      • 关中断。在中断服务程序中,为了保护现场 (即 CPU 主要寄存器中的内容) 期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去
      • 保存断点。为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点 (即程序计数器 (PC) 的内容) 保存起来。可以存入堆栈。也可以存入指定单元
      • 引出中断服务程序:引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器 (PC)
    • 中断服务程序的起始地址获取方法
      • 软件查询法
      • 硬件向量法
        • 由硬件产生向量地址
        • 再由向量地址找到入口地址
        • 排队器输出 -> 中断向量地址形成部件 -> 向量地址(中断类型号)
  • 进入中断服务程序的方法是把该程序第一条指令的地址放入 PC

    • 中断服务程序的主要任务
      • 保护现场。保存通用寄存器和状态寄存器的内容 (eg:保存 ACC 寄存器的值),以便返回原始程序后可以恢复 CPU 环境,可使用堆栈,也可以使用特定存储单元
      • 中断服务 (设备服务)。主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中(eg:中断服务的过程中可能修改 ACC 寄存器的值)
      • 恢复现场。通过出栈指令或取数据指令把之前保存的信息送回寄存器中(eg:把原程序算到一般的 ACC 值恢复原样)
      • 中断返回。通过中断返回指令回到原程序断点处
  • 回到主程序的方法是把 K+1 放入 PC

以上中断过程被称为单重中断

单重中断:执行中断服务程序时不响应新的中断请求

中断处理过程

# 多重中断

多重中断:又称中断嵌套,执行中断服务程序时可响应的中断请求

单重中断多重中断
关中断关中断
保存断点 (PC)保存断点 (PC)
送中断向量送中断向量
保护现场保护现场和屏蔽字
-开中断
执行中断服务程序执行中断服务程序
-关中断
恢复现场恢复现场和屏蔽字
开中断开中断
中断返回中断返回

在两者的比较重,前 3 列为中断隐指令,后 7 列为中断服务程序

# 中断屏蔽技术

中断屏蔽技术主要用于多重中断,CPU 要具备多重中断的功能,需满足下列条件。

  • 在中断服务程序中提前设置开中断指令
  • 优先级别高的中断源有权中断优先级别低的中断源

每个中断源都有一个屏蔽触发器,1 表示屏蔽该终端源的请求,0 表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字

屏蔽字设置的规律:

  • 一般用 1 表示屏蔽,0 表示正常申请

  • 每个中断源对应一个屏蔽字 (在处理该中断源的中断服务程序时,屏蔽寄存器的内容为该中断对应的屏蔽字)

  • 屏蔽字中 1 越多,优先级越高,每个屏蔽字中至少有一个 1(至少要能屏蔽自身的中断)

例题:

中断技术屏蔽例题

中断源
ABCD
A1110
B0100
C0110
D1111

中断源 A 的屏蔽字是 1110;中断源 B 的屏蔽字是 0100;中断源 C 的屏蔽字是 0110;中断源 D 的屏蔽字是 1111;

第二问根据中断优先级可以确定每个时刻 CPU 需要执行哪一个中断源的中断处理程序

# 程序中断方式

程序中断方式

程序中断方式例题

主频为 50MHz,时钟周期为 1/50M=20ns

0.5ms 对应 0.5ms/20ns=25000 个时钟周期

传送 1 个字符需要的时钟周期数为 25000+10+15*4=25070

传送 1000 个字符所需要的时钟周期为 25070*1000=25070000 个时钟周期

CPU 用于该任务的中断时间大约为 1000*(10+20*4)=90000 个时钟周期 (第二问表达有问题)

中断隐指令:关中断、保存断点、引出中断服务程序

# DMA 方式

DMA控制器

CPU 向 DMA 控制器指明要输入还是输出;要传送多少个数据;数据在主存、外设中的地址

  • 接受外设发出的 DMA 请求 (外设传送一个字的请求),并向 CPU 发出总线请求 (传送前)

  • CPU 响应此总线请求,发出总线响应信号,接管总线控制权,进入 DMA 操作周期 (传送前)

  • 确定传送数据的主存单元地址及长度,并能启动修改主存地址计数和传送长度计数 (传送时)

  • 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作 (传送时)

  • 向 CPU 报告 DMA 操作的结束

DMA 控制器细化结构:

DMA控制器结构

DMA 传送过程:

DMA传输过程

三总线 DMA 方式:

三总线DMA方式

DMA 方式特点

主存和 DMA 接口之间有一条直接数据通路。

由于 DMA 方式传送数据不需要经过 CPU,因此不必中断现行程序,I/O 与主机并行工作,程序和传送并行工作。

DMA 方式具有以下特点:

  • 它使主存与 CPU 的固定联系脱钩,主存即可被 CPU 访问,又可被外设访问(要求主存是多端口的)
  • 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现
  • 主存中要开辟专用缓冲区,及时供给和接收外设的数据
  • DMA 传送速度快,CPU 和外设并行工作,提高了系统效率
  • DMA 在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理

主存和 DMA 控制器之间有一条数据通路,因此主存和 I/O 设备之间交换信息时,不通过 CPU。但当 I/O 设备和 CPU 同时访问主存时,可能发生冲突,为了有效地使用主存,DMA 控制器与 CPU 通常采用以下 3 种方法使用主存

  • 停止 CPU 访问主存:即 DMA 工作使用主存时,不允许 CPU 使用主存
    • 控制简单
    • CPU 处于不工作状态或保持状态,未充分发挥 CPU 对主存的利用率
  • DMA 与主存交替访存:即 DMA 和 CPU 每隔一个周期访问一段时间主存,两者交替访问主存
    • 不需要总线使用权申请,建立和归还过程
    • 硬件逻辑更为复杂
  • 周期挪用 (周期窃取):
    • DMA 访问主存分三种情况
      • CPU 此时不访存 (不冲突)
      • CPU 正在访存 (存取周期结束让出总线)
      • CPU 与 DMA 同时请求访存 (I/O 访存优先)

DMA 方式与中断方式

中断DMA
数据传送程序控制;程序切换 -> 保存和恢复现场硬件控制;CPU 只需进行预处理和后处理
中断请求传送数据后处理
响应指令执行周期结束后响应中断每个机器周期结束均可,总线空闲即可相应 DMA 请求
场景CPU 控制,低速设备DMA 控制器控制,高速设备
优先级优先级低于 DMA优先级高于中断
异常处理能处理异常事件仅传送数据