王道操作系统笔记,视频链接:1.3.2 中断和异常

中断的作用

复习:CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序
在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序(第二章进程管理相关内容会说,本节简要略过)
“中断”是让操作系统内核夺回CPU使用权的唯一途径。
没有中断机制的存在,一旦应用程序在CPU上运行,CPU就会一直运行这个应用程序,这样就不存在并发了。
内核态->用户态:一条特权指令——修改PSW的标志位为“用户态”。
用户态->内核态:由“中断”引发,硬件自动完成变态过程。

中断的两种类型

  • 中断分为两种类型:
    1. 内中断(也称异常、例外):与当前执行的指令有关,中断信号来源于CPU内部
    2. 外中断(也称中断,这里是狭义的中断):与当前执行的指令无关,中断信号来源于CPU外部
  • 内中断例子:
    1. 前面提到过的黑客例子,CPU发现在用户态执行了特权指令,此行为非法,然后会触发“中断”,这就是内中断的例子之一。
    2. 进行除法的时候,发现除数为0,无法计算,这也会触发内中断。
    3. 有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。(执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。“系统调用”就是通过陷入指令完成的)
      注意:陷入指令是比较特殊的指令,但是并非特权指令,这个指令是用户态可执行的。
  • 外中断例子:
    1. 时钟中断——由时钟部件发来的中断信号。
      比如时钟部件每隔50ms给CPU发送一个时钟中断信号,CPU接到中断信号后,转化为内核态进行处理,后续可能交接给另一个应用程序执行,从而实现并发。
      注意,这个中断信号属于硬件层面的电信号,并非指令,也就更不用说是不是特权指令了。
    2. I/O中断——由输入/输出设备发来的中断信号。
      比如打印机打印完成后,发送中断信号告诉CPU自己打印完成了。
      这个也是电信号,并且所有的外中断都是“CPU外部硬件的电信号”引发的
      CPU会在对每个指令执行后都去检查是否有外中断需要处理。
  • 内中断分类:
    1. 陷阱、陷入(trap):执行特殊指令后主动触发,并返回下一条指令继续执行的“主动请示”类异常。
    2. 故障(fault):执行指令时因故卡壳(如缺页或除零),待修复后能返回当前指令重试的“可恢复”类异常。
      注意:整数除以0的情况在X86的CPU中,将其设定为故障类型,但是程序运行一般不会让其重跑,而是直接中断,看着就很像“中止”,但是它不是。另外,浮点数除以0不会报错,而是直接返回特殊值无穷大。
    3. 中止(abort):因系统状态严重损坏(如双重故障)而无法定位返回地址、直接导致系统崩溃的“致命性”异常。

中断机制的基本原理

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

知识回顾与重要考点

知识回顾与重要考点

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐