什么是中断?
假设你在玩游戏时,突然有电话打过来,手机没有网了,这时就发生了中断。
计算机的世界里处处都有中断,任何工作都离不开中断,可以说整个计算机系统就是由中断来驱动的。中断就是CPU停下当前的工作任务,去处理其他的其他的事情,处理完成后回来继续执行刚才的任务。
中断分类
INTR——中断请求信号,高电平有效
8255A输出的信号,可用于向CPU提出中断请求,要求CPU读取外设数据
INTE ——中断允许信号,高电平有效
用于控制中断允许或中断屏蔽。
NMI通常用于通知操作系统发生了无法恢复的硬件错误。指不可屏蔽的中断。
NMI的来源有两个,NMI通常用于通知操作系统发生了无法恢复的硬件错误,也可以用于系统调试与采样,大多数服务器还提供了人工触发NMI的接口,比如NMI按钮或者iLO命令等。无法恢复的硬件错误通常包括:芯片错误、内存ECC校验错、总线数据损坏等等。当系统挂起,失去响应的时候,可以人工触发NMI。
外部中断
可屏蔽中断:通过INTR线向CPU请求的中断,只要来自外部设备如硬盘,打印机,网卡等。
此类中断不会影响系统运行,可随时处理,甚至不处理。
不可屏蔽中断:通过NMI线向CPU请求的中断,如电源掉电,硬件线路故障等。这里不可屏蔽的意思不是不可以屏蔽,不建议屏蔽,而是问题太大,屏蔽不了,不能屏蔽的意思。
注:INTR和NMI都是CPU的引脚
内部中断(软中断,异常)
内部中断分为三类:陷阱、故障、终止
1. 陷阱:是一种有意的,预先安排的异常事件,一般都是写程序时故意编写的陷阱指令,而后执行到陷阱指令后,CPU将会调用特定程序进行相应的处理,处理结束后返回到陷阱指令的下一个指令。如系统调用,程序调试功能等。调用Scanner时,程序中断,输入内容后,程序向下执行
在平时写程序时是并没有设下陷阱,但是那是因为我们所写的语言对底层的指令进行了多次封装,我们看不到了底层的实现,但是它实际是存在的,例如printf函数,最底层的实现中会有一条int 0x80指令,这就是一条陷阱指令,使用0x80号中断进行系统调用。
2. 故障:故障是引起故障的指令被执行,但还没有执行结束时,CPU检测到的一类的意外事件。出错时交由故障处理程序处理,如果能修正这个错误,就将控制返回到引起故障的指令即CPU重新执行这条指令。如果不能处理就报错。
常见故障:
缺页:当CPU引用虚拟内存地址对应的物理地址不存在时,会发生故障,报异常。
缺页异常是能够修正的,有着专门的缺页处理程序,他会将缺失的物理页从磁盘中重新调进主存。而后再次执行引起故障的指令时便能够顺利执行了。
3. 终止:执行指令的过程中发生了一些不可修复的错误,程序无法继续执行,只能终止,通常会是一些硬件的错误。