考研党修行——操作系统的中断与异常
1.知识总览
2.中断的作用
我们知道在CPU上会运行两种程序,一种是操作系统的内核程序,一种是应用程序。内核程序是整个系统的管理者,在计算机启动时,CPU处于内核态,只是在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序。一个应用程序在上CPU运行之后,它就会一直运行下去,除非发送中断。
”中断”是让操作系统内核夺回CPU使用权的唯一途径,使CPU由用户态变为内核态。
那么问题来了,如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。那么如果CPU一直运行同一个应用程序,将如何实现多道程序并发这个事情呢?
3.中断的类型
中断分为内中断与外中断
内中断:与当前执行的指令有关,中断信号来源于 CPU内部
外中断:与当前执行的指令无关,中断信号来源于 CPU外部
我们来看内中断的例子:
例1.试图在用户态下执行特权指令
例2.执行除法指令时发现除数为0
总之,若当前执行的指令是非法的,或执行指令的参数是非法的,那么就会引发一个中断信号。
例3.有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。
执行陷入指令,意味着应用程序主动地将CPU控制权还给操作系统内核,系统调用就是通过陷入指令完成的
注意:陷入指令是一种特殊的指令不是特权指令
再来看外中断的例子:
例1.时钟中断——由时钟部件发来的中断信号
如图:系统中想要并发的运行两个应用程序,首先应用程序1运行在用户态,CPU执行其指令,假如当CPU执行两条指令后,时钟部件检测已经执行过了50ms,于是时钟部件会给CPU发送一个中断信号,此时CPU会暂停执行应用程序1,转而去执行处理时钟中断的内核程序,去处理这个中断信号。
此时CPU由用户态转为内核态,在处理中断信号的内核程序中,操作系统内核发现应用程序1已经用了50ms,为了公平起见,操作系统内核决定接下来让另一个应用程序2上CPU运行。
CPU又从内核态转为用户态,CPU执行应用程序2的指令,同样的,时钟部件检测已经过了50ms,于是时钟部件再次会给CPU发送一个中断信号,此时CPU又会暂停执行应用程序2,转而去执行处理时钟中断的内核程序。
在处理中断信号的内核程序中,操作系统内核发现应用程序2已经用了50ms,为了公平起见,操作系统内核决定接下来又让应用程序1上CPU运行,于是将CPU的使用权让给应用程序1,然后应用程序1就会执行它之后的未执行的指令,依次往复…
例2:I/O中断——由输入/输出设备发来的中断信号
除了时钟部件,当输入输出任务完成时,输入/输出设备会向CPU发送中断信号…
每一条指令执行结束时,CPU都会例行检查是否有外部中断信号
(需要明确的一点是,“中断“特指狭义的中断,即外中断。而内中断一般称为“异常”)
4.中断机制的基本原理
不同的中断信号,需要用不同的中断处理程序来处理。
当CPU检测到中断信号后,会根据中断信号的类型去查询”中断向量表“,以此来找到相应的中断处理程序在内存中的存放位置。
5.小节概述