中断.ppt

上传人:本田雅阁 文档编号:2834240 上传时间:2019-05-25 格式:PPT 页数:40 大小:321.54KB
返回 下载 相关 举报
中断.ppt_第1页
第1页 / 共40页
中断.ppt_第2页
第2页 / 共40页
中断.ppt_第3页
第3页 / 共40页
中断.ppt_第4页
第4页 / 共40页
中断.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《中断.ppt》由会员分享,可在线阅读,更多相关《中断.ppt(40页珍藏版)》请在三一文库上搜索。

1、1,第7章 微计算机的中断系统,2,7.1 中断控制方式的特点 如前所述,当CPU 与外设用查询方式传送数据时,外设完全处于被动状态,只有被CPU查询到并且具备传送数据的条件时才有可能工作,因此在查询方式下,CPU 将大量时间花在等待上,降低了工作效率。因此在计算机技术中引入了中断的概念。 中断是指计算机的CPU 在正常运行程序时,由于内部或外部某个紧急事件的发生,使CPU暂停正在运行的程序,而转去执行请求中断的那个外设或事件的中断服务(处理)程序,待处理完后再返回被中断的程序,继续执行。这个过程就是中断。,3,1. 中断系统所具有的功能 为了满足上述要求,中断系统应具有如下功能: 多中断源请

2、求,软件可禁止和允许每个中断源的中断请求。通常在系统中会有多个中断源,如果在某段时间内,CPU 不想为某个或某几个中断源服务,这就要求系统能够通过软件暂时屏蔽对应的中断源,而对其他中断源仍保持开放状态。当在另外的时间段,系统还可通过软件开放前面被屏蔽的中断源。 (2) 中断优先级判别功能,响应优先级别最高的请求。当系统中的多个中断源同时申请中断时,就必须要求用户事先根据各中断源的轻重缓急规定一个中断级别,即优先级。CPU可根据优先级找到中断级别最高的中断源,并响应它的中断请求。当中断处理完后,再响应级别较低的中断源。,4,(3) 中断嵌套功能,即级别高的中断可中断级别较低的中断。当CPU 正在

3、执行某个中断源中断服务程序时,若有级别更高的中断源向CPU 申请中断,则CPU 应能暂停正在执行的中断服务程序而响应级别高的中断,在处理完级别高的中断后,再继续执行被暂停的中断服务程序。 (4) 中断实现。当某一中断源向CPU 申请中断后,CPU 能决定是否给予响应,当响应中断后,能自动转向中断处理程序去执行,中断处理结束后能自动返回主程序继续执行。,5,2. 中断系统的组成 为实现上述功能,完整的中断系统应包括以下3 方面: (1) 微处理器应有处理中断请求的机制与相关硬件电路。即接收请求、响应请求、保护现场、转向中断服务程序以及中断处理完返回。 (2) 外围应有一个与处理器匹配的中断控制器

4、,能管理多个中断源,进行优先级裁决及中断源屏蔽等功能。 (3) 根据处理器的结构编写中断处理程序,安排相关的系统初始化。,6,3. 中断控制方式的优点 1) 分时处理 CPU 在启动外设工作后,继续执行主程序。当外设向CPU 发出数据传递的中断请求时,CPU 暂停主程序,而执行I/O(中断处理)操作,中断处理结束后,CPU 恢复执行主程序的同时,外设也继续原来的工作。具备了中断功能,CPU 可允许多个外设同时工作,这样就大大提高了CPU 的利用率,也提高了I/O 的速度。,7,2) 实时控制 计算机用于控制时,外设可在任何时间发出中断请求,要求CPU 进行处理,CPU 一旦接收到中断请求,只要

5、中断未被屏蔽,就可以立即响应并进行处理。这样快速及时的处理,在查询的工作方式下是做不到的。 3) 故障处理 计算机在运行中会出现各种故障,如硬件错误、电源断电、存储出错、运算溢出等异常情况,CPU 可利用中断系统进行处理。,8,7.2 8086 微处理器的中断方式 8086/8088 中断属矢量中断也叫类型中断。8086/8088 系统可处理256 种不同类型的中断,每个中断对应一个中断类型号,所以256 种中断对应的中断类型号为0255,这256种不同类型的中断可以来自外部,即由硬件产生,也可以来自内部,即由软件(中断指令)产生,或者满足某些特定条件后引发CPU 中断。,9,7.2.1 外部

6、中断 外部中断是由CPU 的外部中断请求引脚NMI 和INTR 引起的中断过程,可分为非屏蔽中断和可屏蔽中断两种。 1. 非屏蔽中断 若CPU的NMI引脚接收到一个有效高电平持续两个时钟周期以上的正跳变号(上升沿)时,则可能会产生一次中断,由于这种中断的响应不受中断允许标志IF 的控制所以称为非屏蔽中断。 非屏蔽中断主要用于处理系统的意外或故障,如电源断电、存储器读写错误或受到严重的信干扰。在IBM PC/XT 中的非屏蔽中断源有3 种:浮点运算协处理器8087 的中断请求、系统板,10,上RAM 的奇偶校验错和扩展槽中的I/O 通道错。以上3 者中的任何一个都可以单独提出中断请求,但是否真正

7、形成NMI 信号,还要受NMI 屏蔽寄存器的控制。当这个屏蔽寄存器的D7=1 时才允许向CPU 发送NMI 请求,否则即使有中断请求,也不能发出NMI 信号。NMI 屏蔽寄存器的端口地址为A0H,可以用OUT 指令对这一位写入1 或0,达到允许或禁止NMI 的效果。 Intel 公司在设计8086/8088 芯片时,已将非屏蔽中断NMI 的中断类型号预先定义为类型2。因此,当NMI 请求被响应时,不要求外部向CPU 提供中断类型号,CPU 在总线上也不发送INTA中断应答信号,而是CPU 自动转入相应的中断服务程序。,11,2. 可屏蔽中断 可屏蔽中断是由用户定义的外部硬件中断。当外部中断源向

8、8086/8088CPU 的INTR引脚发送一个高电平中断请求信号时,该信号必须保持到当前指令的结束。这是因为CPU只在每条指令的最后一个时钟周期才对INTR 引脚的状态进行采样,如果CPU 采样到有可屏蔽中断请求产生,它是否响应还要取决于中断允许标志IF 的状态。当中断允许标志IF=0时,INTR 的中断请求被屏蔽,当IF1时,则产生一次可屏蔽中断,并通过INTA引脚向产生中断请求的中断源发送两个中断应答信号的负脉冲。在接收到第二个负脉冲时,外部中断源接口电路自动将中断类型号送至数据总线,而CPU 将自动从数据总线上读取被响应中断源的中断类型号,由中断类型号就可找到中断服务程序的入口地址。,

9、12,7.2.2 内部中断 8086/8088 有相当丰富的内部中断功能。它们可以是由CPU 内部硬件产生的,也可由软件的中断指令INT n 引起的,其中n称为中断类型号。一部分已定义的中断类型号用于CPU的特殊功能处理。 1. 内部中断的种类 1) 除法出错中断 类型号为00H 在执行除法指令DIV 或IDIV时,若除数为0或商超出了寄存器所能表达的数值范围,则立即产生一个类型号为0 的内部中断,称为除法出错中断。除法出错中断既不由外部硬件产生,也不由软件指令产生,而是CPU 自身产生的,因此0 型中断没有对应的中断指令,即指令系统中没有INT 0这条指令。,13,2) 单步中断(陷阱中断)

10、 类型号为01H 若CPU 内的标志寄存器FLAGS中的跟踪标志TF=1 且中断允许标志IF1,则每执行完一条指令,CPU 都将引起一次类型号为1的内部中断,称为单步中断。和除法出错中断类似,单步中断也不是由外部硬件或软件指令产生,而是由CPU 对标志位TF的测试产生。单步中断是一种很有用的调试方法,每执行一条指令后停下来,显示所有寄存器的内容和标志位的值以及下一条要执行的指令,以便用户检查该条指令进行了什么操作,是否得到了预期结果。,14,对单步中断要注意三点: 所有类型的中断在其处理过程中,CPU 会自动地把标志寄存器FLAGS 压入堆栈,然后清除TF 和IF。因此当CPU 进入单步中断处

11、理程序时,就不再处于单步工作方式,而以正常方式工作。只有在单步处理结束时,从堆栈中弹出原来的标志,才能使CPU 又回到单步方式; 通常程序编制好后,在使用DEBUG调试程序时,可用单步中断检查程序,通过跟踪命令T 来实现单步运行; 8086/8088 指令系统中没有设置或清除TF 标志的指令,但指令系统中的PUSHF和POPF 为程序员提供了置位或复位TF的手段。,15,3) 断点中断 类型号为03H 提供给用户一个调试手段,它的中断类型号为3。通常在DEBUG 调试程序时,可通过运行命令G 在程序中任意指定断点地址,当CPU 执行到断点时便产生中断,同时显示当前各寄存器的内容和标志位的值以及

12、下一条要执行的指令,供用户检查在断点以前的程序运行是否正常。设置断点实际上是把一条断点指令INT 3 插入程序中,CPU 每执行到断点处的INT 3指令便产生一个中断。,16,4) 溢出中断 类型号为04H 在执行溢出中断指令INTO 时,若标志寄存器FLAGS中的溢出标志OF=1,则产生一个类型号为4的内部中断,称为溢出中断。对带符号数来说,溢出就意味着出错(加、减运算),一旦产生应立即发现,而CPU 并不知道当前处理的数据是无符号数还是带符号数,只有程序员才明确这一点。因此通常在带符号数的加、减法运算后面总是跟着INTO指令,当标志寄存器的OF=0 时,则INTO指令不产生中断,CPU 继

13、续运行原程序;当OF=1 时,进入溢出中断处理程序,打印出一个错误信息,在处理程序结束时,不返回原程序继续运行,而是把控制交给操作系统。,17,5) 指令中断 在8086/8088 的指令系统中,当CPU 执行中断指令INT n 时,也能形成内部中断,其中n在理论上可取值0255。当n0、1、3、4 时,就是上述的4种内部中断。实际上执行INT n 软中断指令所引起的中断更像由CALL 指令所引起的子程序调用,因此,用户在调试外部中断服务程序时可以用INT n指令来调用,即使类型号n与该外设的类型号相同,从而控制程序转入该外设的中断服务程序。,18,另外INT n 中已有不少被微机系统的ROM

14、-BIOS 和DOS 功能调用所定义,它们的操作大多涉及外设的I/O 操作。ROM-BIOS 是固化在只读存储器中的一组独立于PC-DOS 的I/O 服务例行中断子程序,称为基本I/O系统(BIOS)。它在系统硬件的上一个层次,直接对系统中的I/O 设备进行设备级控制,并以软中断形式向上一级软件(如DOS 内核的设备驱动程序)或用户程序提供I/O 服务,供上层软件和用户调用。DOS 系统功能调用提供了大量的中断服务程序。其中INT 21H 是一个及其重要而且庞大的中断服务程序,它是PC-DOS的内核。INT 21H 指令包含了00H6CH 功能子程序,可供系统软件和应用程序调用,故 称为系统功

15、能调用。,19,2. 内部中断的特点 (1) 除单步中断以外,所有内部中断都不能被屏蔽。 (2) 所有内部中断都不能从外部接口中读取中断类型号。它既不发送中断响应信号,也不执行中断响应的总线周期。 (3) 指令中断没有随机性,外中断是随机性的。指令中断是由程序中指令引起的,指令位置事先已知。外中断是随机性的,由I/O 设备引起,何时引起事先未知。,(4) 除单步中断外,所有内部中断的优先权都比外部中断的优先权高。8086/8088 的中断优先级由高到低的顺序排列如下: 除法出错中断、INT n、INTO。 非屏蔽中断NMI。 可屏蔽中断INTR。 单步中断。,20,8.2.3 中断向量表 在程

16、序执行过程中无法知道什么时候会出现中断请求,也就不能通过现行程序对中断事件进行处理。通常对于每个中断源都会有一个中断服务程序存放在内存中,而每个中断服务程序都有一个入口地址,即首地址。CPU 只需取得中断服务程序的入口地址便可转到相应的处理程序去执行。因此关键问题是如何组织服务程序的入口地址。8086/8088 CPU 是采用向量中断的方式来处理对可屏蔽中断的响应,向量中断是指连接外部中断源的接口电路向CPU 提供中断类型号,CPU根据类型号确定中断服务程序入口地址信息的中断方式,也称为矢量中断。,21,1. 中断向量 通常称中断服务程序入口地址为中断向量,每个中断类型对应一个中断向量。每个中

17、断向量为4B(32 位),用逻辑地址表示一个中断服务程序的入口地址,占用4 个连续的存储单元,其中低16 位(前2 个单元)存入中断服务程序入口的偏移地址(IP),低位在前高位在后,高16 位(后2 个单元)存入中断服务程序入口的段基地址(CS),同样也是低位在前高位在后。按照中断类型的序号对应的中断向量在内存的0段0单元开始有规则的进行排列。,22,2. 中断向量表 256 种中断类型所对应的中断向量,共需占用1KB 存储空间。在8086/8088 微机系统中这256 个中断向量就在内存最低端00000H003FFH(即0 段的03FFH 区域的1KB)范围内存放,称为中断向量表。对应每个中

18、断向量在该表中的地址称为中断向量指针。中断向量可由下式计算得到: 中断向量指针中断类型号 4 比如,类型号为30H 的中断所对应的中断向量存放在0000H:00C0H(30H4=C0H)开始的4个单元中,如果00C0H、00C1H、00C2H、00C3H 这4 个单元中的值分别为10H、20H、30H、40H,那么在这个系统中,类型号为30H 的中断所对应的中断向量为4030H:2010H,也即该中断服务程序的入口地址。,23,图中的中断向量表表示了中断类型号、中断向量及中断向量指针之间的对应关系。共分3 个部分。,专用中断。 Intel 公司规定类型号04 是专用中断,中断向量已由系统定义,

19、不允许用户做任何修改。,24,(2) 保留中断。 Intel公司为软硬件开发而保留的中断类型,类型号为531(05H1FH)。其中许多中断已被应用到Intel 的各种不同的微处理器家族中。即使有些保留中断在现有系统中可能没有用到,但是为了保持系统之间的兼容性及与未来Intel 其他系统之间的兼容,一般不允许用户改做它用。 (3) 用户中断。 可供用户使用,类型号为32255(20H0FFH)。这些中断可由用户定义为软中断,由INT n 指令引入,也可以是通过INTR 引脚直接引入的或通过中断控制器8259A 引入的可屏蔽硬件中断。但在具体的微机系统中,对用户可使用的中断也有规定,如中断类型号为

20、21H 的中断是操作系统MS-DOS 的系统功能调用。,25,7.3 中 断 管 理 由于微机系统自身中断结构的复杂性,内部和外部的各种中断具有不同的轻重缓急,响应中断时,CPU 进行处理的具体过程也不完全一样,因此中断系统必须对此进行管理。 7.3.1 CPU响应中断的条件 8086/8088 微处理器有两个引脚接收中断请求信号,一个是非屏蔽中断(NMI)引脚,另一个是可屏蔽中断(INTR)引脚。对于从NMI 引脚上引入的中断请求,由于不受中断允许标志IF的影响,CPU 将立即给予响应。而从INTR引脚接收到的请求,CPU必须满足如下条件,CPU 才能响应,26,1. 无总线请求和非屏蔽中断

21、请求 8086/8088 中断系统规定,如果同时出现INTR 中断请求和HOLD 总线保持请求时,则CPU 先对总线保持请求服务,而不是先进入中断响应周期,也就是说INTR 优先级别低于HOLD。另外NMI 的优先级比INTR 高,当两者同时产生时,CPU 会响应NMI 而不响应INTR。 2. CPU 必须允许中断,即IF=1 由于可屏蔽中断请求受到标志寄存器的IF 标志位的控制,因此当IF=1 时,CPU 允许中断;当IF=0 时,CPU 禁止中断。,27,3. CPU 执行完当前指令 如果CPU 接收到中断请求时,CPU 的执行部件正在执行一条指令,则必须等到该指令执行完后,并且总线接口

22、部件没有执行总线周期(比如正在取指令),CPU 才能响应。因此,8086/8088要求中断请求信号INTR是一个电平信号,必须维持两个时钟周期以上的高电平,使得CPU 响应中断后才能结束。 4. 当前中断级别最高 当同时有几个可屏蔽中断请求到来时,CPU 会首先响应和处理优先级别最高的一个中断;当CPU 正在处理某个中断时,如果外部又有优先级别比本中断级别更高的中断请求,那么,就可以实现中断的嵌套。,28,7.3.2 中断优先权 如前所述,由于引脚的限制,CPU 上的中断线不可能做得很多,往往可屏蔽中断就只有一根INTR 引脚。而在实际的应用系统中,经常会有多个中断源,当有多个中断源同时提出中

23、断申请时,究竟应该先响应哪个中断源的申请;当CPU 正在执行中断服务程序时,又接收到新的中断申请,是否应该响应这个中断请求,这些问题都应当通过设置与判断中断的优先级来得以解决。在计算机系统中,实现中断优先级的判断可通过软件或硬件的方 法来实现。,29,1. 软件查询法判断中断的优先级 当有外设申请中断时,在条件允许的情况下CPU 响应中断,然后在中断服务程序中查询以确定是哪些外设申请中断,并根据预先的定义判断其优先权。使用软件查询方式还需要一个接口电路配合来进行工作,如图所示。,30,将 8 个中断源接到数据缓冲器的数据端,数据缓冲器的选通信号是通过将地址与外设读IOR控 制信号经译码器而得到

24、的,同时把 各个中断源的中断请求信号相“或” 后作为INTR信号,故任何一个中 断源都有中断请求,都可向CPU 送中断请求信号。当CPU 响应中断 后,首先进入中断排序程序,即通 过数据缓冲器读入8 个中断状态数据,然后通过对每个中断状态的逐位检测来决定为哪一个中断源服务。,31,软件查询方法的优点是: (1) 询问的次序,即是优先权的次序。显然最先询问的,其优先权的级别最高。 (2) 节省硬件。不需要判断和确定优先权的硬件排队电路。 但随之而来的缺点是,响应中断慢,服务效率低,因为优先级最低的中断源申请的服务,必须先将优先级高的设备查询一遍,若设备较多,有可能优先级低的中断源很难得到服务。,

25、32,2. 菊花链法 菊花链法是一种获得中断优先级管理的简单硬件方法,其做法是在每个外设对应的接口上接一个逻辑电路,这些逻辑电路构成一个链以控制中断回答信号的通路,称为菊花链。 3. 专用芯片管理方式 当前,在微机系统中解决中断优先级管理的最常用办法是采用可编程中断控制器。可编程中断控制器中的中断类型寄存器、中断屏蔽寄存器都是可编程的,当前中断服务寄存器也可以用软件进行控制,而且优先级排列方式也是通过指令来设置的,所以可编程中断控制器使用起来灵活方便。在80X86系统中,绝大多数场合都利用中断控制器来实现中断优先级管理。,33,8.4 高档微处理器中断系统 和8086/8088 一样,在Int

26、el 高性能微处理器(80286 以上)系统中也可以容纳多达256个中断,每一个中断或异常都有唯一的中断类型号0255,只是高档微处理器对内部中断(也称为异常中断)的功能及相应的处理方法作了进一步的扩充。在80286 以上的系统中(80X86),中断将特指由NMI 和INTR 引起的外部中断,或称硬件中断,其中断处理过程与8086 系统相同。,34,8.4.1 异常中断 在Intel 高性能微处理器(80286 以上)中,把因内部意外条件而改变程序执行流程,用以报告出错情况和非正常状态的过程称为异常中断或异常。归纳起来可分为以下3 类: 1. 故障(Fault) 是由引起异常的指令执行之前被检

27、测和处理的,有时称为失效。即执行完故障对应的服务程序后,会返回到该故障指令处。例如,在读虚拟存储器时,若产生的存储器页或段存储器不在物理存储器中,就会产生一个失效异常,其中断服务程序立即按被访问的页或段将虚拟存储器的内容从磁盘上转移到内存中,然后再重新返回并正常执行相应存储器读操作。因此失效异常可以正常执行下去。,35,2. 陷阱(Trap) 是由引起异常的指令执行之后被报告的,且在中断服务程序完成后,返回到主程序中引起异常的下一条指令处继续执行。例如,用户定义的软中断指令INT n 就是属于这种类型的异常。 3. 中止(Abort) 是一种不能确定引起异常指令确切位置的异常,有时称为夭折或失

28、败。引起这种异常的情况是比较严重的,通常是由硬件故障或在系统表中的非法或不一致的值所引起的。在这种情况下,原来的程序无法再执行下去,因此服务程序往往重新启动操作系统并重建系统表格。例如协处理器段溢出等。,36,8.4.2 80X86 新增的保留中断 从8086 到Pentium 的整个Intel 微处理器家族成员中,前5 种中断类型是完全相同的,其他存在于保留中断的中断类型从80286 到80386、80486 以及Pentium 微处理器被不断改进功能和扩充类型,并且保持向上的兼容性。Intel 微处理器保留了前32 个中断类型,并应用到各种不同的微处理器中,最后的224 个中断类型可供用户

29、使用。80X86 新增的518 保留的异常中断列举如下: (1) 类型 5,边界检查故障。若传递给BOUND 指令的操作数表明给定的索引指针要落到可能的数组边界以外时,便发生边界检查错误。 (2) 类型 6,无效代码故障。当一个未定义的代码在程序中出现就会发生。,37,(3) 类型 7,协处理器不存在故障。如果在执行ESC 或WAIT 指令期间,协处理器在系统中没有被找到(在CR0 中EM1)就会发生该故障。 (4) 类型8,双重故障。在系统出现两种相同情况的严重问题时激活。如正通知给系统一个段或页故障时,又检测到一个段故障等等。 (5) 类型9,协处理器段溢出异常。发生在浮点指令数超出段界限

30、时。 (6) 类型10,无效的任务状态TSS 段异常。如果新任务的TSS 是一个非法的任务状态段(即发生除不存在异常以外的段异常时),便会产生无效TSS 故障。,38,(7) 类型11,段不存在异常。当CPU 访问除SS 以外的段时,若段不存在或无效则会产生。 (8) 类型12,堆栈段溢出故障。如果堆栈段没有装入物理存储空间或堆栈段超出界限将会发生。 (9) 类型13,一般性保护错。它是一种没有预先分类的段异常,包含除已定义异常之外的所有异常。例如,切换到正忙的任务,试图对只读代码段进行写操作,超出处理器指令长度限制等等。 (10) 类型14,页故障。在80386/80486 和Pentium

31、 微处理器中若从线性地址到物理地址的转换过程中检测到错误,便产生页故障。,39,(11) 类型16,协处理器出错。当CR0 中EM0 时,并且协处理器发生了上溢出或下溢出的数字错误,此时若执行ESC协处理器指令或WAIT指令将会产生协处理器出错异常。 (12) 类型17,对准检查中断。这个中断在80486 和Pentium 微处理器中起作用,用于检查字和双字数据在内存中是否对准存放。 (13) 类型18,机器检测异常。在Pentium 微处理器中用于激活一个系统内存管理方式中断。,40,第8章 串行通信, 单工方式:只允许数据以一个固定方向传送,通信双方中一方接收,另一方发送,不可更改。 半双工 全双工方式:通信双方可以同时发送或接收数据,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1