中断与异常机制

我们在说到中断通常将它与异常相提并论,实际上它们都是程序执行过程中强制性转移,转移到相应的处理程序。

中断通常在程序执行时因为硬件而随机产生,他们通常用来处理处理器外部的事件。

异常则通常在处理器执行指令过程中检测到错误时发生,比如遇到零除的情况。处理器检测的错误条件有很多,比如保护违例、页错误等。

假设处理器可以处理A、B、C三种中断(异常),分别进行a,b,c三种处理,我们得有一种方法把A、B、C与a、b、c对用起来,实际上解决这个问题的方法就是我们前面提到的中断向量。

每一种中断和异常都会对应一个中断向量号,而这个向量号通过IDT就与相应的中断处理程序对应起来。

Fault,Trap和Abort是异常的三种类型。

Faults是一种可以被更正的异常,而且一旦被更正,程序可以不失连续性地继续执行。当一个Fault发生时,处理器会把产生Fault指令之前的状态保存起来。异常处理程序的返回地址将会是产生fault的指令,而不是其后的那条指令。

Traps是一种发生trap的指令执行之后立即被报告的异常,它也允许程序或任务不失连续性地继续执行。异常处理程序的返回地址将会是产生trap指令之后的那条指令。

Aborts是一种不总是报告精确异常发生位置的异常,它不允许程序或任务继续执行,而是用来报告严重错误的。

Faults 称为错误,Traps称为陷阱,Aborts称为终止。

刚才我们着重讨论了异常,现在再来看一下中断。

中断产生的原因有两种:一种是外部中断,也就是由硬件产生的中断。

                                 另一种是由int n指令产生的中断

外部中断的情况则复杂一些,因为需要建立硬件中断与向量号之间的对应关系。

外部中断分为不可屏蔽中断(NMI)和可屏蔽中断两种,分别由CPU的两根引脚NMI和INTR来接受。

可屏蔽中断与CPU的关系是通过对可编程中断控制器8259A建立起来的。你可以认为它是中断机制所有外围设备的一个代理。

这个代理不仅可以根据优先级在同时发生中断的设备中选择应该处理的请求,而且可以通过对寄存器的设置来屏蔽或打开相应的中断。

posted on 2011-05-10 08:57  wanghj_dz  阅读(584)  评论(0编辑  收藏  举报

导航