当前位置: 首页 > news >正文

十四、异常和中断的分类

目录
  • 一、中断的分类
    • 1. 可屏蔽中断
    • 2. 不可屏蔽中断
  • 二、异常的分类
    • 1. 故障
    • 2. 陷阱
    • 3. 中止
  • 总结表格


异常中断的分类,这是一个非常核心的计算机体系结构概念,不同的架构(如x86, ARM, MIPS)在细节上略有不同,但核心思想是相通的。

下图从来源和目的的角度,清晰地展示了异常与中断的整体分类框架:

flowchart TD A[CPU外部事件] --> B[<b>中断 Interrupt</b><br>异步] A --> C[<b>异常 Exception</b><br>同步] B --> D[<b>可屏蔽中断</b><br>e.g. 来自网卡、声卡、硬盘等] B --> E[<b>不可屏蔽中断</b><br>e.g. 硬件故障、电源掉电] C --> F[<b>故障 Fault</b><br>可修复,重试指令<br>e.g. 缺页异常] C --> G[<b>陷阱 Trap</b><br>有意为之,继续下条指令<br>e.g. 系统调用、调试断点] C --> H[<b>中止 Abort</b><br>严重错误,终止程序<br>e.g. 硬件错误、非法指令]

一、中断的分类

中断主要根据其紧急程度是否可被忽略来分类。

1. 可屏蔽中断

  • 特点:CPU可以通过设置程序状态字中的中断屏蔽位来禁止响应这类中断。当屏蔽位被设置时,即使中断发生,CPU也会忽略它。
  • 目的:允许操作系统在执行一些关键、不允许被打断的代码段(如内核调度、修改重要数据结构)时,暂时关闭中断。
  • 来源:绝大多数由外部设备产生的中断都属于此类。
    • 示例
      • 硬件定时器中断:用于操作系统实现时间片轮转调度。
      • I/O设备中断:如键盘按键、鼠标移动、网卡收到数据包、硬盘数据读写完成。

2. 不可屏蔽中断

  • 特点无法通过中断屏蔽位来禁止。一旦发生,CPU必须立即处理。它拥有最高的优先级。
  • 目的:用于处理非常紧急、关乎系统存亡的硬件故障,必须立即响应。
  • 来源:通常是严重的硬件错误。
    • 示例
      • 内存奇偶校验错误:内存数据在读写过程中发生错误。
      • 总线错误:在数据传输过程中发生严重错误。
      • 电源掉电警告:电源即将耗尽,通知CPU尽快保存关键数据。

二、异常的分类

异常主要根据其产生原因处理方式以及返回行为来分类。在x86架构中,异常通常分为以下三类:

1. 故障

  • 特点
    1. 在执行指令的过程中检测到错误。
    2. 异常处理程序会尝试修复这个错误。
    3. 修复成功后,返回并重新执行那条引发异常的指令。
  • 类比:你读一句话时发现有个词不认识(故障),去查字典(处理程序),回来后重新读这个词(重试指令)。
  • 示例
    • 缺页异常:这是最经典的故障。当程序访问一个不在物理内存中的虚拟地址时,CPU会触发缺页故障。操作系统的处理程序会从硬盘上加载所需的数据到内存,然后返回并重新执行那条访问内存的指令,这次就能成功执行了。
    • 段错误的一部分情况:例如访问了一个合法但尚未加载的地址。

2. 陷阱

  • 特点
    1. 在执行指令后立即报告异常。
    2. 通常是有意触发的,用于调试或请求系统服务。
    3. 异常处理程序执行完毕后,返回并执行引发陷阱指令的【下一条】指令
  • 类比:你主动设置一个闹钟(陷阱),闹钟响后(触发异常),你去处理一件事(处理程序),处理完后回来继续做下一件事(执行下一条指令)。
  • 示例
    • 系统调用:这是陷阱最重要的应用。用户程序通过执行一条特殊指令(如x86的int 0x80或更现代的syscall/sysenter指令)来主动陷入内核,请求操作系统提供服务(如打开文件、创建进程)。处理完后,返回用户空间继续执行系统调用之后的指令。
    • 调试断点:程序员在代码中设置断点,调试器实际上会将断点处的指令替换为一条陷阱指令(如x86的int 3)。当CPU执行到这里时,触发陷阱,控制权交给调试器。

3. 中止

  • 特点
    1. 无法确定引发异常的指令的精确位置。
    2. 错误非常严重,通常是硬件级别的致命错误。
    3. 异常处理程序无法修复错误,通常只能收集尽可能多的错误信息,然后终止出错的程序甚至整个系统。
  • 类比:书中的某一页被撕掉了,而且你不知道具体是哪一行(无法定位),你完全无法继续阅读,只能合上书(终止程序)。
  • 示例
    • 硬件错误:如内存校验错误、处理器温度过高等。
    • 非法指令:CPU遇到了一条它无法识别的指令编码。
    • 严重的系统一致性错误

总结表格

类型 特点 返回行为 示例
可屏蔽中断 来自外设,可被CPU屏蔽 返回被中断指令 键盘、鼠标、定时器中断
不可屏蔽中断 来自硬件故障,不可屏蔽 返回被中断指令(如果可能) 内存错误、掉电
故障 指令执行中出错,可修复 返回并重试原指令 缺页异常、段错误(部分)
陷阱 指令执行后主动触发 返回执行下一条指令 系统调用、调试断点
中止 严重硬件错误,不可恢复 无法返回,终止程序/系统 硬件故障、非法指令

理解这些分类有助于深入理解操作系统如何管理硬件、处理错误以及为用户程序提供服务。

http://www.wxhsa.cn/company.asp?id=2707

相关文章:

  • 思考 | 躺平者的本质和区别
  • ros2--service/服务--接口 - 教程
  • c++
  • LayerMask的使用规范
  • 存在,是终极的神奇。ECT-OS-JiuHuaShan 框架正是这份神奇的自我觉醒、自我阐述与自我捍卫
  • 深入解析:【Unity基础】枚举AudioType各个枚举项对应的音频文件类型
  • 十三、异常和中断的基本概念
  • 【关注可白嫖源码】25046基于SpringBoot的少儿编程管理系统设计与达成
  • 2024-2025第二学期计算机网络助教工作总结
  • 信息搜集、物联网搜索引擎、ARL灯塔系统、Nmap
  • 工具链部署实用技巧 7|模型设计帧率推理时耗时与带宽分析
  • 基于Django的“社区爱心养老管理系统”设计与开发(源码+数据库+文档+PPT) - 实践
  • 关于导出bangumi.tv用户收藏/观看数据
  • ECT-OS-JiuHuaShan框架元推理,为何超乎想象,难以置信?
  • 实用指南:Excel转图片excel2img库bug修复:AttributeError ‘parent‘ 问题解决方案
  • ECT-OS-JiuHuaShan框架元推理,其运行与推理,是自指自洽性的唯一证明
  • 数据结构与算法-32.图-加权无向图最小生成树
  • 找到字符串中所有字母异位词-leetcode
  • 配置gemini
  • 基于chrony的NTP校时配置方法
  • windows能过注册表修改c盘默认目录
  • ECT-OS-JiuHuaShan框架元推理,就是普罗米修斯主义,穷神知化
  • UI/UX 桌面操作系统应该做好的几个功能
  • 完整教程:1.1 汽车运行滚动阻力
  • 鸿蒙用户首选项数据持久化
  • 基于Transformer的预训练大语言模型,如何区分文本位置?
  • UE RPC介绍
  • part 5
  • GAS_Aura-Code Clean Up
  • 最强大模型评测工具EvalScope