异常和中断
基本概念:
异常(也叫内中断):由CPU内部产生的意外时间称为异常。
中断(也叫外中断):由来自CPU外部的设备向CPU发出的中断请求称为中断。
关键区分:异常是CPU执行一条指令时,由CPU在其内部检测到的、与正在执行的指令相关的同步事件,
中断是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件。
异常的分类:
第一种分类:
1.硬故障中断:由硬连线出现异常引起的,如存储器检验错、总线错误。
2.程序性异常(软件中断):CPU内部因执行指令而引起的异常事件,如整除0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页。
第二种分类:
分类方式:按异常返回原因和返回方式。
1.故障(Fault):在引起故障的指令启动后、执行结束前被检测到的事件。
例:“缺页”、“缺段”这两个在处理异常后,会返回断点执行。
“非法操作码”、“除数为0” 这两个因为无法通过异常处理程序恢复故障,因此无法返回,必须终止进程。
2.自陷(Trap):事先在程序中用一条特殊指令或某种方式设定特殊控制标志来人为设置一个“陷阱”。
例:程序调试中的“断点设置”、单步跟踪功能。
3.终止(Abort):在执行指令的过程中发生了使计算机无法继续执行的硬件故障。
例:控制器出错、存储器检验错、总线错误。
总结:故障和自陷属于程序性异常,终止和外中断属于硬件中断
中断的分类:
1.可屏蔽中断:通过可屏蔽中断请求线INTR向CPU发出的中断请求。可在中断控制器中设置屏蔽
2.不可屏蔽中断:通过专门的不可屏蔽中断请求线NMI向CPU发出的中断。
例:电源掉电此类非常紧急的硬件故障。
异常和中断的区别:
1)“缺页”或“溢出”等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。
2)异常的检测由CPU自身完成,不必通过外部的某个信号通知CPU。对于中断,CPU必须通过中断请求线获取中断源的信息。
异常和中断的响应过程:
1)关中断
在保存断点和程序状态期间(也就是第二部步),不能被新的中断打断,设置“中断允许”(IF)触发器来实现,置1,为开中断
2)保存断点和程序状态
为了在中断处理后能正确返回被中断的程序继续执行,要PSW参与
3)识别异常和中断并转到相应的处理程序
分为:软件识别和硬件识别,异常大多采用软件识别方式, 中断两个都可以。