中断,异常,陷阱

原创 2011年01月17日 14:39:00

 

8086/8088把中断分为内部中断和外部中断两大类。80386把外部中断称为中断,把内部中断称为异常。与8086/8088一样,80386通常在两条指令之间响应中断或异常。80386最多处理256种中断或异常。

 

中断是由异步的外部事件引起的。外部事件及中断响应与正执行的指令没有关系80386有两根引脚INTRNMI接受外部中断请求信号。 INTR接受可屏蔽中断请求。NMI接受不可屏蔽中断请求。在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。

 

外部硬件在通过INTR发出中断请求信号的同时,还要向处理器给出一个8位的中断向量。处理器在响应可屏蔽中断请求时,读取这个由外部硬件给出的中断向量号。处理器对这个中断向量号并没有规定。但在具体的微机系统中,系统必须通过软件和硬件的配合设置,使得给出的这个中断向量号不仅与外部中断源对应,而且要避免中断向量号使用冲突情况的出现。可编程中断控制器芯片8259A可配合80386工作,能够根据设置向处理器提供上述中断向量号,还能处理中断请求的优先级。每个8259A芯片可以支持8路中断请求信号,如果使用98259A芯片(一个主片,8个从片),就可使80386在单个引脚INTR上接受多达64个中断源的中断请求信号。

处理器不屏蔽来自NMI的中断请求。处理器在响应NMI中断时,不从外部硬件接收中断向量号。与8086/8088一样,在80386中,不可屏蔽中断所对应的中断向量号固定为2。为了不可屏蔽中断的嵌套,每当接受一个NMI中断,处理器就在内部屏蔽了再次响应NMI,这一屏蔽过程直到执行中断返回指令IRET后才结束。所以,NMI处理程序应以IRET指令结束。

 

 

异常是80386在执行指令期间检测到不正常的或非法的条件所引起的。异常与正执行的指令有直接的联系当发生这些情况时,指令就不能成功完成。软中断指令“INT n”“INTO”也归类于异常而不称为中断,这是因为执行这些指令产生异常事件。

80386识别多种不同类别的异常,并赋予每一种类别以不同的中断向量号。异常发生后,处理器就象响应中断那样处理异常。即根据中断向量号,转相应的中断处理程序。把这种中断处理程序称为异常处理程序可能更合适。

根据引起异常的程序是否可被恢复和恢复点不同,把异常进一步分类为故障(Fault)、陷阱(Trap)和中止(Abort)。我们把对应的异常处理程序分别称为故障处理程序、陷阱处理程序和中止处理程序。


故障是在引起异常的指令之前,把异常情况通知给系统的一种异常。80386认为故障是可排除的。当控制转移到故障处理程序时,所保存的断点CSEIP的值指向引起故障的指令。这样,在故障处理程序把故障排除后,执行IRET返回到引起故障的程序继续执行时,刚才引起故障的指令可重新得到执行。这种重新执行,不需要操作系统软件的额外参与。故障的发现可能在指令开始执行之前,也可能在指令执行期间。如果在指令执行期间检测到故障,那么中止故障指令,并把指令的操作数恢复为指令开始执行之前的值。这可保证故障指令的重新执行得到正确的结果。例如,在一条指令的执行期间,如果发现段不存在,那么停止该指令的执行,并通知系统产生段故障,对应的段故障处理程序可通过加载该段的方法来排除故障,之后,原指令就可成功执行,至少不再发生段不存在的故障。


陷阱是在引起异常的指令之后,把异常情况通知给系统的一种异常。当控制转移到异常处理程序时,所保存的断点CSEIP的值指向引起陷阱的指令的下一条要执行的指令。下一条要执行的指令,不一定就是下一条指令。因此,陷阱处理程序并不是总能根据保存的断点,反推确定出产生异常的指令。在转入陷阱处理程序时,引起陷阱的指令应正常完成,它有可能改变了寄存器或存储单元。软中断指令、单步异常是陷阱的例子。

 

TRAPCPU的内部事件,是由于系统调用引起处理机中断的指令。

在系统调用中,TRAP负责由用户模式转换为内核模式,并将返回地址保存至堆栈中以备后用。

 

陷入是由程序造成的,并且与程序同步。如果程序一而再的被运行,陷阱将总在指令流中相同位置的精确发生。

而中断则是由外部事件和其时钟造成的,不具有重复性..


中断类型码:用于区分不同的中断源,即系统中每个中断源都应该对应一个唯一的类型码。8086系统中的中断类型码以8位无符号数(00H~0FFH)表示,一共可以区分256个不同的中断源。

 

 

 

中断向量:中断服务程序(ISR)的入口地址,也就是ISR的第一条指令在存储器中的位置。8086系统中的中断向量由两个字(4个字节)组成,低位字表示入口的偏移地址,高位字表示入口的段基址。显然,每个中断类型码对应一个中断向量,则8086系统中共应有256个中断向量。

 

 

 

中断向量表:中断向量的存放地。8086系统将最低的1KB(00000H~003FFH) RAM空间用于存放这256个中断向量。

 

 

 

三者之间的关系是:利用中断类型码n可以很容易地从中断向量表中找到该中断源所对应的中断向量,即:中断向量存放的起始地址m =n×4,从中断向量表的m地址单元开始连续取出的四个字节就是n号中断的ISR入口地址。8086CPU正是用这种方法完成中断索引的。

 

中断向量是固定不变吗?那同一种中断也有多种处理要求,怎么办?

 

 

中断、异常、trap 的区别

【1】无论是中断,还是异常和陷阱,对应的处理函数,一般都可以称其为中断服务程序ISR,            都只是一个函数 具体函数里面要做什么事情,是由你写程序的人决定的。  【2】 比如中断...
  • zat111
  • zat111
  • 2014年07月02日 15:23
  • 3323

中断和异常,陷阱的区别和联系

对于中断,异常和陷阱的各种关系,总结如下: 表 2.1. 中断,异常和陷阱的区别和联系   对CPU来说是 和当前CPU所执行的指令的关系 CPU接下来的事情 ...

进程—异常控制流之陷阱篇

一、Exceptions(异常) and System Call(系统调用)1.1 陷阱 陷阱是有意为之的异常,是处理器执行程序的一条指令的结果。陷阱最重要的用途是提供用户程序和内核之间一个...

操作系统的中断与异常(陷阱)

刚开始学习操作系统原理,转载一下关于中断(interrupt)和陷阱(trap)的内容。 1.中断的基本概念  中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂...

linux系统中关于中断、异常、系统调用、陷阱等概念的解析

中断:是为了设备与CPU之间的通信。典型的有如服务请求,任务完成提醒等。比如我们熟知的时钟中断,硬盘读写服务请求中断。        中断的发生与系统处在用户态还是在内核态无关,只决定于EFLAGS...

操作系统—陷阱、中断、异常

在操作系统中,陷阱,中断和异常是常见的术语,它们贯穿操作系统学习的始终,这篇文章主要区分它们之间的不同。 陷阱 计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作...

java 异常捕获和捕获中的一些陷阱

java异常的捕获,

【Java 陷阱】SimpleDateFormat 时间格式化多线程异常

SimpleDateFormat 陷阱

《高效编程十八式》(6/13)命名、陷阱与异常

命名、陷阱与异常 王伟冰 命名     命名其实包括两方面的内容,一个是起什么样的名字,一个是在什么地方定义。通常我们认为,一个变量、函数或类的名字应该能够清晰地表达出它的作用,但是有时候要想出...

深入解析Java异常中的陷阱

Java的异常中的陷阱
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:中断,异常,陷阱
举报原因:
原因补充:

(最多只允许输入30个字)