简介

CPU中断时操作系统中的两个重要概念,都作用于改变CPU执行的正常流程。

当出现某些特殊情况(如外部设备请求服务、定时器时间到等)时,CPU 暂停当前正在执行的程序,转去执行处理这些特殊情况的程序,处理完毕后再返回原来被暂停的程序继续执行的过程。

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

中断与异常模型图

内中断

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

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

  1. 陷阱,陷入

    是指在指令执行过程中故意引发的,通常用于实现系统调用、调试等功能。

    比如:

    • 要执行系统调用
    • C#/JAVA中主动抛出异常
    • int 3 这种故意设置的陷阱
  2. 故障

    是指由错误条件引发,它可能会被修复,CPU 在处理故障后会返回到引起故障的指令重新执行

    比如:

    • 缺页故障
  3. 终止

    是指无法恢复的严重错误,如硬件故障、系统崩溃等。终止发生时,CPU将控制权交由终止程序处理,不会再返回程序,而是返回到内核中的abort例程,它会终止进程。

    比如:

    • 除0异常
    • 硬件损坏
    • 非法使用特权指令

外中断

也称为硬件中断,外中断是由 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标志位不会被清除。

中断的流程

中断描述表(Interrupt Descriptor Table)

操作系统为每一种中断都分配了处理流程,这个流程的唯一标识叫做中断向量,它是一个非负整数。

一部分中断向量由CPU设计者分配,另一部分由操作系统内核设计者分配。两者组成了一个完整的中断处理流程。它就是中断描述表

操作系统启动时,内核会分配和初始化一张中断描述表(Interrupt Descriptor Table)的跳转表,将中断向量一一映射。

Linux浅谈(四)----中断&异常的更多相关文章

  1. 我眼中的Linux设备树(四 中断)

    四 中断中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设 ...

  2. Linux设备树(四 中断)

    四 中断 中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生 ...

  3. Linux 浅谈Linux 操作系统的安全设置

    如今linux系统安全变的越来越重要了,这里我想把我平时比较常使用的一些linux下的基本的安全措施写出来和大家探讨一下,让我们的linux系统变得可靠. 1.BIOS的安全设置 这是最基本的了,也是 ...

  4. 朱晔的互联网架构实践心得S2E5:浅谈四种API设计风格(RPC、REST、GraphQL、服务端驱动)

    Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API设计,项目开发后都会有一份API文档供测试和联调.本文尝试根据自 ...

  5. Linux浅谈磁盘管理及案例

    磁盘管理 MBR原理图 从该图可理解到为什么主分区只能是四个. 可以不分区,但为了统一管理,提高访问效率 设备不同,生成设备名称不同 管理分区命令: lsblk查看块设备 fdisk创建MBR分区 f ...

  6. 浅谈java中异常抛出后代码是否会继续执行

    问题 今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element) ...

  7. 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招

    朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...

  8. linux安全加固浅谈

    难易程度:★★★阅读点:linux;python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言linux被越来越多的企业使用,因此掌握一些基本的linux安全加固是有必 ...

  9. Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理

    Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博 ...

  10. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

随机推荐

  1. 如何快速的开发一个完整的iOS直播app(点赞功能)

    客户端代码 点击小红心,发送socket给服务器,并且要传递房间Key给服务器,通知给哪个主播点赞,就能传入到对应的分组socket中 怎么传递房间key,房间Key在主播界面,一般一个客户端,只会产 ...

  2. 消息中间件之-Kafka相关知识

    前言 本篇文章是我基于拉勾kafka课程所作的笔记,包括Kafka基本架构.核心概念.生产者解析.消费者解析.存储.事务.一致性保证等等,希望对大家有所帮助. 一.kafka架构 Kafka基础知识 ...

  3. React、Angular、Vue.js三者比较指南

    Vue-React-Angular三者区别   1. 基本概念Angular 是一个应用设计框架与开发平台,用于创建高效.复杂.精致的单页面应用. React 是一个用于构建用户界面的 JavaScr ...

  4. springBoot(2)--初步理解

    一.定时任务 1.步骤: 1:在启动类上写@EnableScheduling注解 2:在要定时任务的类上写@component 3:在要定时执行的方法上写@Scheduled(fixedRate=毫秒 ...

  5. 问题-ifconfig

    在运行centos7 运行ifconfig命令时出现: [root@kvm1 ~]# ifconfig -bash: ifconfig: command not found 原来是这样: 1.ifco ...

  6. DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?

    2025年伊始,Meta创始人扎克伯格的一则声明引发全球程序员热议:"AI将在今年达到中级工程师水平,逐步接管编程工作."与此同时,国产AI大模型DeepSeek的爆火,让一名8岁 ...

  7. 功率MOS管的参数说明

    图解功率MOS管的每一个参数!   最大额定参数 最大额定参数,所有数值取得条件(Ta=25℃) VDSS 最大漏-源电压 在栅源短接,漏-源额定电压(VDSS)是指漏-源未发生雪崩击穿前所能施加的最 ...

  8. Zookeeper - 本地模式部署

    本地模式部署 zoo.cfg 参数解析 本地模式部署 1.上传zookeeper的安装包并解压 tar -zxvf zookeeper-x.x.x.tar.gz -c /xxx/xxx/ 2.将 zo ...

  9. C#(面向对象的托管语言)类库(区别于应用程序)的异常处理思路

    1.不要做出任何应用程序才需要考虑抉择策略,不能想当然的决定一些错误情形.具体的一个体现形式是什么异常都捕获.这不是类库的职责,因为无法掌握所有的调用者的使用情形,这些不确定性是委托.虚方法.接口等特 ...

  10. 开源一款DDS信号发生扩展板-FreakStudio多米诺系列

    原文链接: FreakStudio的博客 摘要 信号发生扩展板通过SPI接口生成可调频率和幅度的正弦波.方波和三角波,频率小于1MHz.支持幅度调节,提供原始和6倍放大输出接口.配备5阶低通滤波器.噪 ...