文章目录
- 第一章 计算机系统概述
- 中断和异常
- (一)中断的作用
- (二)中断的类型
- (三)中断机制的基本原理
- 小结
第一章 计算机系统概述
中断和异常
- 中断的作用
- 中断的类型
- 内中断(也称“异常”)
- 外中断
- 中断机制的基本原理
(一)中断的作用
CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序。
内核是整个系统的管理者,在计算机刚启动的时候,运行的是内核程序。在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序。(具体见第二章进程管理相关内容)
“中断”是让操作系统内核夺回CPU使用权的唯一途径。“中断”会使CPU由用户态变为内核态,使操作系统重新夺回对CPU的控制权。
而一个应用程序如果运行,则它会一直运行下去,除非发生了中断。可想而知,如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。而如果CPU一直都只是在运行1个应用程序的话,又何来“并发”?
所以,没有中断技术,就没有多道程序并发。甚至可以说,没有中断技术就没有操作系统。
总之,操作系统内核是一个管理者,当它想要把CPU使用权让给应用程序的时候,它会自愿地用一个特权指令来完成这件事情。但是,当它想要把CPU的使用权重新夺回来的时候,它就要通过“中断”的方式来实现。
内核态→用户态:执行一条特权指令——修改PSW的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权。
用户态→内核态:由**“中断”**引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权。
(二)中断的类型
内中断(也称异常、例外)
与当前执行的指令有关,中断信号来源于CPU内部
陷阱、陷入(trap)
由陷入指令引发,是应用程序故意引发的。
故障(fault)
由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU使用权还给应用程序,让它继续执行下去。如:缺页故障。
终止(abort)
由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。如:整数除0、非法使用特权指令。
外中断(也称“中断”)
与当前执行的指令无关,中断信号来源于CPU外部
- 时钟中断
- I/O中断请求
注:在很多地方,“内中断”一般称为异常,“外中断”一般直接称作中断。所以如果说一个狭义的中断往往就是指的外中断,而如果对“中断”进行细分,再谈内外中断。
内中断
若当前执行的指令是非法的(指令本身是非法的/指令的参数是非法的),则会引发一个中断信号。
例子1:应用程序试图在用户态下执行特权指令,指令本身是非法的,CPU在执行其程序指令的过程中,会拒绝执行并发出中断信号,转变为内核态进而执行一段处理中断信号的内核程序。
例子2:执行非特权指令时也会有问题,比如执行除法指令时发现除数为0,也会引发一个内中断,指令的参数是非法的。
例子3:有时候应用程序想要请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。(陷入指令是特殊的非特权指令,不是特权指令,毕竟它是在用户态下由应用程序发出的)
执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。“系统调用”就是通过陷入指令完成的。
外中断
例子1:时钟中断——由时钟部件发来的中断信号。
计算机会有一个时钟部件,时钟部件每隔一个时间片(如50ms)会给CPU发送一个时钟中断信号。
如应用程序1正在CPU上执行一条条指令时,当执行时间到达50ms,就会暂停运行(只是先暂停一下,如果一会儿它又上CPU了,那么会接着刚才的继续运行),由用户态转为内核态并执行一个内核程序来处理时钟中断信号,并由内核决定接下来该让哪一个应用程序接着上CPU运行。
例子2:I/O中断——由输入/输出设备发来的中断信号。
如某程序向打印机请求打印服务,则打印机在打印完成后会向CPU发送中断信号,用来通知CPU,输入输出任务已经完成了,接下来CPU会转而执行内核程序来处理I/O中断信号。
总之,这两种中断信号,都来自CPU的外部,和当前CPU上运行的指令内容是没有关系的。CPU在每一条指令执行结束的时候,都会例行检查是否有外中断信号。
(三)中断机制的基本原理
刚才我们举的例子当中,有非法指令的中断、I/O中断、除数为0中断等等,每一个中断都对应内核当中不同的中断处理程序。那么CPU是怎么知道自己该执行哪种中断程序的呢?
**不同的中断信号,需要用不同的中断处理程序来处理。**当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。
显然,中断处理程序一定是内核程序,需要运行在“内核态”。
小结
没有中断机制,就不可能实现操作系统,不可能实现程序并发。