中断和异常
中断和异常
概述
中断会使CPU由用户态变为内核态,使操作系统重新夺回CPU使用权(操作系统重新夺回CPU使用权的唯一途径)。
中断分类
内外中断
- 内中断:与当前执行的指令无关,中断信号来自于CPU内部。
- 陷阱、陷入(Trap):由陷入指令引发,是程序故意引发的。
- 故障(fault):由错误条件引起的,可能被内核操程序修复。修复后会将CPU使用权会给应用程序,让其继续执行下去(缺页中断)
- 终止(abort):由致命错误引起,内核程序无法修复该错误,因此一般不将CPU使用权还给引发终止的应用程序,而是直接终止应用程序。(整数除0,非法使用特权指令)
- 外中断:与当前执行的指令无关,中断信号来源于CPU外部。
- 时钟中断
- I/O中断
硬件中断和软件中断
- 硬件中断:由CPU外部的硬件,引入的中断,是随机的
- 软件中断:软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序,是预先设计的。
可屏蔽中断和非屏蔽中断
可屏蔽中断:通过
INTR(Interrupt Require)
线向CPU请求的中断,此类中断并不会影响系统运行,可随时处理,或不处理。此外,除受本身的屏蔽位控制外,还受一个总的中断允许标志位IF(Interrupt Flag)
的控制非屏蔽中断(不可屏蔽中断):非屏蔽中断是出现在NMI
(Non Maskable Interrupt)
线上的请求 ,不受中断标志位IF的影响,内部中断是不可屏蔽的中断
内中断
例子:比如CPU在用户态执行指令时发现某一指令为特权指令。
例子:比如在CPU执行除法指令的时候发现除数为0。
此时CPU会拒绝执行该指令,并产生内中断,由用户态变为内核态,转而执行中断服务程序。中断服务程序执行完毕再转为用户态,继续执行指令。
外中断
在每个指令周期结束(每一个指令执行结束后),CPU都会例行检查是否有外部中断信号。
例子:时钟中断——由时钟部件发出来的中断信号。时钟部件会每隔一段时间向CPU发送一个时钟中断信号。
CPU收到信号后,并产生外中断,由用户态变为内核态,转而执行中断服务程序。中断服务程序决定由哪一个进程运行在下一个时间片。(时间片进程调度算法)
例子:I/O中断——由输入输出设备发出来的中断信号。
CPU收到信号后,并产生外中断,由用户态变为内核态,转而执行中断服务程序。中断服务程序将设备(网卡,键盘,麦克风)的数据采集上来。
中断机制的基本原理
不同的中断信号,需要不同的中断处理程序进行处理。当CPU检测到中断信号后,会根据中断信号的类型去查询中断向量表,找到对应的中断处理程序在内存中的存放位置。
中断向量表本质就是一个函数指针数组,CPU根据中断号,在数组中找到对应回调函数。
中断工作过程
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MyAKDreamのBlog!