中断,异常,陷阱

原创 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正是用这种方法完成中断索引的。

 

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

 

 

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

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

中断详解(二)——中断描述符、任务门、中断门、陷阱门

什么是中断描述符表     中断描述符IDT表示一个系统表,它与中断或异常向量相联系。每一个中断或异常向量在这个系统表中有对应的中断或异常处理程序入口地址。中断描述符的每一项对应一个中断或异常向量,...
  • Windeal
  • Windeal
  • 2015-03-24 13:53:26
  • 5221

中断、异常、trap 的区别

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

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

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

中断和异常

同步中断和异步中断: 同步中断(异常)是当前指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。异步中断(中断)是由其他硬件设备依照CPU时钟...
  • cnxxrj
  • cnxxrj
  • 2015-05-11 08:43:50
  • 734

一起来谈谈,面试中的那些“陷阱问题”

1. 前言众所周知,我们在面试的时候,HR 会通过各种各样的问题来“刁难”你。但是面对这些问题,每个人的反应会各不相同,HR 也就能以此来推断出你平时大概是个什么样子的人,并考虑你是否合适这个职位。可...
  • MR_LP
  • MR_LP
  • 2016-12-21 11:46:28
  • 3408

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

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

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

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

中断分类

中断可分为同步(synchronous)中断和异步(asynchronous)中断: 1. 同步中断是当指令执行时由 CPU 控制单元产生,之所以称为同步,是因为只有在一条指令执行完毕后 CPU 才...
  • meegomeego
  • meegomeego
  • 2013-08-16 15:24:50
  • 847

C语言:陷阱和缺陷

原著:Andrew Koenig - AT&T Bell Laboratories Murray Hill, New Jersey 07094翻译:lover_P0 简介    C语言及其典型实现被设...
  • freexploit
  • freexploit
  • 2005-05-01 13:55:00
  • 1300
收藏助手
不良信息举报
您举报文章:中断,异常,陷阱
举报原因:
原因补充:

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