中断和异常
廖家龙 用心听,不照做

中断的作用

“中断”是让操作系统内核夺回CPU使用权的唯一途径,中断会让CPU由用户态变为内核态

如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,既如此,何来并发。

中断的类型

内中断(也称“异常”)

  1. 陷阱、陷入(trap):由陷入指令引发,是应用程序故意引发的
  2. 故障(fault):由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU使用权还给应用程序,让它继续执行下去(缺页故障)
  3. 终止(abort):由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序(整数除0,非法使用特权指令)

与当前执行的指令有关,中断信号来源于CPU内部

若当前执行的指令是非法的,则会引发一个中断信号

  • 试图在用户态下执行特权指令
  • 执行除法指令时发现除数为0
  • 有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令:陷入指令,该指令会引发一个内部中断信号,执行陷入指令,意味着应用程序主动的将CPU控制权还给操作系统内核,“系统调用”就是通过陷入指令完成的(注意陷入指令并不是特权指令)(陷入指令 = trap指令 = 访管指令)

外中断(也称“中断”)

与当前执行的指令无关,中断信号来源于CPU外部

  • 时钟中断:由时钟部件发来的中断信号,时钟部件每隔一个时间片会给CPU发送一个时钟中断信号(多个应用程序的并发运行)
  • I/O中断:由输入/输出设备发来的中断信号(打印机)

中断机制的基本原理

检查中断信号:

内中断:CPU在执行指令时会检查是否有异常发生

外中断:每一条指令执行结束时,CPU都会例行检查是否有外中断信号需要处理

不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置