重生之我是操作系统(四)----中断&异常

简介

CPU中断时操作系统中的两个重要概念,都作用于改变CPU执行的正常流程。
当出现某些特殊情况(如外部设备请求服务、定时器时间到等)时,CPU 暂停当前正在执行的程序,转去执行处理这些特殊情况的程序,处理完毕后再返回原来被暂停的程序继续执行的过程。

其作用在于让操作系统强行夺回CPU的控制权

中断与异常模型图

image

内中断

也称为软件中断,是由 CPU 内部的某些事件(如执行特定的指令、程序出错等)引发的。例如,在 x86 架构中,使用INT指令可以触发一个软件中断,用于调用操作系统的系统服务。

简单来说就是中断信号来自CPU内部,与当前指令有关

  1. 陷阱,陷入
    是指在指令执行过程中故意引发的,通常用于实现系统调用、调试等功能。
    比如:
    • 要执行系统调用
    • C#/JAVA中主动抛出异常
    • int 3 这种故意设置的陷阱
  2. 故障
    是指由错误条件引发,它可能会被修复,CPU 在处理故障后会返回到引起故障的指令重新执行
    比如:
    • 缺页故障
    • 除0异常
  3. 终止
    是指无法恢复的严重错误,如硬件故障、系统崩溃等。终止发生时,CPU将控制权交由终止程序处理,不会再返回程序,而是返回到内核中的abort例程,它会终止进程。
    比如:
    • 硬件损坏
    • 非法使用特权指令

外中断

也称为硬件中断,外中断是由 CPU 外部的设备或事件引起的中断。比如键盘,鼠标,主板定时器。这些外部设备通过向 CPU 发送中断请求信号来通知 CPU 需要处理某个事件。外中断是计算机系统与外部设备进行交互的重要方式,使得 CPU 能够及时响应外部设备的请求,提高系统的整体性能和响应能力。

简单来说就是中断信号来自CPU外部,与当前指令无关

例如,当用户按下键盘上的某个按键时,键盘控制器会向 CPU 发送一个中断请求,CPU 接收到该请求后会暂停当前程序的执行,转去执行键盘中断处理程序,读取用户按下的按键信息

  1. 不可屏蔽中断(Non-Maskable Interrupt, NMI)
    CPU 必须立即响应,无法屏蔽,通常用于处理紧急硬件故障。
    比如:
    • 电源故障中断:如突然断电、电池电量过低,通知系统保存数据或紧急关机。
    • 硬件错误中断:内存错误(如 ECC 校验失败)、CPU 过热、主板硬件故障等,需立即处理以避免系统崩溃。
  2. 可屏蔽中断(Maskable Interrupt, IRQ)
    CPU 可通过中断控制器暂时忽略(屏蔽)此类中断,待当前任务处理完毕后再响应。
    比如:
    • 定时设备中断:操作系统任务调度中断,系统定时器中断
    • I/O设备中断:鼠标/键盘/打印机/硬盘/显示器等执行操作触发的中断
    • 网络设备中断:网卡接收到新的数据包,触发中断。
    • USB设备中断:U盘插入/拔出,数据传输完成等操作触发的中断

小结

大类子类原因异步/同步返回行为
外中断中断来自硬件的信号异步总是返回到下一条指令
内中断陷阱进程主动触发的异常同步总是返回到下一条指令
内中断故障潜在可恢复的错误同步可能返回到当前指令
内中断终止不可恢复的错误同步不会返回

它们之间的区别如下:

  1. 来源不同
    内部中断来源于CPU内部事件或者程序自身行为,无需外部硬件信号
    外部中断由CPU外部的硬件设备触发,通过硬件信号(如中断请求线 IRQ)通知CPU
  2. 处理时机不同
    内部中断,CPU在执行指令时会检查是否有异常发生,属于事前检查
    外部中断,CPU在指令周期的末尾,再检查是否有外部中断信号要处理,属于事后检查
  3. 可屏蔽性不同
    内部中断通常不可屏蔽
    外部中断中,可屏蔽中断(如键盘中断):可通过 CPU 标志位(如 IF)暂时忽略,
    不可屏蔽中断(如电源故障)无论IF标志位是否开启,CPU 必须立即响应。

外部中断发生时,CPU会清除EFLAGS寄存器的IF(Interrupt Enable)标志位,避免其它中断干扰。比如你正在执行I/O操作,就不应该被CPU时钟周期所切换进程。
内部中断发生时,IF标志位不会被清除。

中断的流程

image

中断描述表(Interrupt Descriptor Table)

操作系统为每一种中断都分配了处理流程,这个流程的唯一标识叫做中断向量,它是一个非负整数。
一部分中断向量由CPU设计者分配,另一部分由操作系统内核设计者分配。两者组成了一个完整的中断处理流程。它就是中断描述表
操作系统启动时,内核会分配和初始化一张中断描述表(Interrupt Descriptor Table)的跳转表,将中断向量一一映射。
image

原创作者: lmy5215006 转载于: https://www.cnblogs.com/lmy5215006/p/18816120
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值