7.2.3 直接存储器存取(DMA)传送方式
DMA方式适合于在外设和存储器之间进行大批量的高速数据交换,数据的传送不依赖CPU执行I/O指令,而是直接由专用的接口芯片DMA控制器(DMAC)来控制。
传送过程中,CPU暂停指令的执行并让出总线控制权,由DMA控制器接管总线的控制权。传送过程全部由硬件实现,所以传送速率非常高。
7.3 中断技术
7.3.1 中断的基本概念
1. 中断的定义
计算机在执行正常程序过程中,当出现某种异常事件或某种外部请求时,处理器就暂停执行当前的程序,而转去执行对异常事件或某种外部请求的处理操作。当处理完毕后,CPU再返回到被暂停执行的程序,继续执行,这个过程称为程序中断。
中断系统为实现中断功能而设置的硬件电路和与之相应的软件,称为中断系统。
2. 中断源
引起中断的原因或发出中断请求的来源称为中断源。中断源可分为硬件中断源和软件中断源两类。
3. 中断处理过程
对于单个中断源的中断处理过程应包括中断请求、中断响应、保护断点、中断处理和中断返回等五个过程。
① 中断请求:是中断源向CPU发出的请求中断的要求。
软件中断源是在CPU内部由中断指令或程序出错直接发中断;
硬件中断源必须通过专门的电路将中断请求信号送给CPU,CPU也有专门的引脚接收中断请求信号。
② 中断响应:是指当计算机系统接收到中断请求后应作出的反应。对于可屏蔽中断的响应要具备两个条件:一是中断允许触发器的状态为1(即开中断),二是CPU在执行完现行指令之后。
③ 保护断点:所谓断点是指处理完中断后返回主程序时执行的第一条指令的地址。保护断点是为了在中断处理结束后能正确返回。
④ 中断处理:是指执行中断服务子程序,完成中断服务功能。主要包括保护现场、中断服务和恢复现场等过程。
⑤ 中断返回:是指执行完中断服务程序后返回到被中断的主程序的断点处,继续向下执行,即恢复断点。
7.3.2中断优先级和中断的嵌套
1.中断优先级
中断请求是随机发生的,当系统具有多个中断源时,有时会同时出现多个中断请求,CPU只能按一定的次序予以响应和处理,这个响应的次序称为中断优先级。
对于不同级别的中断请求,一般的处理原则是:不同按高低 低级让高级 高级封低级 同级等处理
不同按高低 不同优先级的多个中断源同时发出中断请求,按优先级由高到低依次处理。
低级让高级 低优先级中断正在处理,出现高优先级请求,应转去处理高优先级请求,服务结束后再返回原优先级较低的中断服务程序继续执行。(即中断嵌套)
高级封低级 高优先级中断正在处理,出现低优先级请求,可暂不响应。
同级等处理 中断处理时,出现同级别请求,应在当前中断处理结束以后再处理新的请求。
2.中断优先级的确定
微机系统中通常用三种方法来确定中断源的优先级别,即:
- 软件查询法
- 硬件排队电路法
- 专用中断控制芯片法
1)软件查询法
软件查询法需要简单的硬件电路支持。以8个中断源为例,其硬件电路如图7.13所示,将8个外设的中断请求组合起来作为一个端口(中断寄存器),并将各个外设的中断请求信号相或,产生一个总的INT信号。
采用软件查询方式,各中断源的优先级是由查询顺序决定的。
优点:节省硬件
缺点:CPU每次响应中断时都要对各中断源进行逐一查询,所以其响应速度较慢。对于优先级较低的中断源来说,该缺点更为明显。
2)硬件排队电路法
各个外设的优先级与其接口在排队电路中的位置有关。响应信号沿链式电路进行传递时,最靠近CPU并发出中断请求的接口将首先拦截住响应信号。
3)专用中断控制芯片法
软件查询和硬件排队法虽然可以解决中断优先级控制问题,但实现起来在硬件和软件上都要做大量的工作,十分麻烦。较为方便的办法就是利用可编程中断控制器,例如广泛应用于80x86微机系统中的专用可编程中断控制芯片Intel 8259A,可以实现单片管理8级中断,通过级联最多可以用9片8259A管理64级中断。
7.4 8086/8088中断系统
7.4.1 8086/8088的中断源类型
8086/8088 CPU可以处理256种不同类型的中断,每一种中断都给定一个编号(0255),称为中断类型号,CPU根据中断类型号来识别不同的中断源。
8086/8088的中断源如图7.17所示。
8086/8088中断源的优先级顺序由高到低依次为:
软件中断(除单步中断外)
非屏蔽中断
可屏蔽中断
单步中断
7.4.2 中断向量表
中断向量 是中断服务子程序的入口地址。
中断向量表是存放中断向量的一个特定的内存区域。
8086/8088共有256个中断类型号,对应256个中断服务程序的入口地址。所有中断服务子程序的入口地址都存放在中断向量表中。每个入口地址的段地址和段内偏移地址占4个存储单元,所以其中断向量表长度为1K(256×4)个单元。8086/8088系统的中断向量表位于内存的前1K字节,地址范围为00000H~003FFH。
CPU响应中断时,把中断类型号N乘以4,得到对应地址4N,然后把由此地址开始的两个低字节单元(4N,4N+1)的内容装入IP寄存器,再把两个高字节单元(4N+2,4N+3)的内容装入CS寄存器,于是CPU转入中断类型号为N的中断服务子程序。
7.4.3 8086/8088的中断处理过程
7.4.4中断服务程序的设计
中断服务程序的一般结构如图所示。如前所述,在进入中断处理前,硬件已自动关中断,若想让该中断处理能被更高级别的中断源中断,则需事先加入开中断指令。中断服务程序的最后一定要有中断返回指令IRET,以保证断点的恢复。
用户在设计中断服务程序时要预先确定一个中断类型号,确定了中断类型号,还要把中断服务入口地址置入中断向量表,以保证在中断响应时CPU能自动转入与该类型号相对应的中断服务程序。
将中断服务程序入口地址置入中断向量表的方法有两种:DOS系统功能调用法和直接装入法。