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

十七、异常和中断响应过程的时序图

目录
  • 时序图步骤详解:
    • 阶段 1: 事件发生与检测
    • 阶段 2: 硬件自动响应(纯硬件操作)
    • 阶段 3: 软件处理(操作系统内核)
    • 阶段 4: 硬件返回(纯硬件操作)


这是一个描述异常和中断响应过程的时序图。它清晰地展示了硬件(CPU)和软件(操作系统)之间如何协同完成整个响应和处理流程。

sequenceDiagramparticipant H as CPU Hardwareparticipant OS as OS Software (Kernel)participant P as User ProcessNote over H, P: 1. 事件发生与检测H->>H: 每个指令周期末检查中断引脚<br>或执行单元检测异常alt 中断发生H->>H: 从设备获取中断向量号else 异常发生H->>H: 根据错误类型生成异常向量号endNote over H, P: 2. 硬件自动响应(瞬间完成)H->>H: 保存现场: EFLAGS, CS, EIP, ErrorCode(可选)H->>H: 关中断(若为异常)H->>H: 切换至内核态(Ring 0)<br>切换内核栈H->>H: 查IDT表,获取处理程序地址H->>OS: 跳转至中断/异常处理程序Note over OS, P: 3. 软件处理(操作系统)OS->>OS: 保存所有通用寄存器OS->>OS: 开中断(若为中断)alt 处理中断OS->>OS: 读取设备数据,发送应答等else 处理异常alt 故障 (Fault)OS->>OS: 修复错误(如加载缺失页)else 陷阱 (Trap)OS->>OS: 提供服务(如系统调用)else 中止 (Abort)OS->>OS: 终止程序/系统endendOS->>OS: 可能进行进程调度决策OS->>OS: 恢复所有通用寄存器OS->>H: 执行IRET指令Note over H, P: 4. 硬件返回H->>H: 从内核栈弹出EIP, CS, EFLAGSH->>H: 切换回用户态(原特权级)<br>切换回用户栈H->>H: 开中断(若之前关闭)H->>P: 跳回原EIP地址继续执行<br>(用户进程无感知)

时序图步骤详解:

阶段 1: 事件发生与检测

  • CPU硬件在每个指令执行周期的末尾,都会自动检查中断请求引脚。如果外部设备(如键盘、硬盘)发来中断信号,CPU会从中断控制器读取一个中断向量号
  • 同时,CPU的执行单元在运行指令时,会实时检测是否有异常(如除零、非法地址访问)。一旦发现,立即产生一个异常向量号

阶段 2: 硬件自动响应(纯硬件操作)

这是最关键且完全由硬件自动完成的瞬间步骤,保证了响应的及时性:

  1. 保存最小现场:CPU将当前进程的EFLAGS(状态寄存器)、CS(代码段寄存器)、EIP(下一条指令地址)自动压入内核栈。对于某些异常,还会压入错误码
  2. 关中断:如果是异常,CPU可能会自动清除EFLAGS中的IF位,关闭中断,以避免在处理一个严重错误时被新的中断打断。
  3. 切换模式:CPU从用户态切换到内核态,并将栈指针从用户栈切换到当前进程的内核栈。
  4. 查找处理程序:CPU使用向量号作为索引,查询中断描述符表,找到对应的中断/异常处理程序的入口地址。
  5. 跳转:CPU跳转到操作系统内核的相应处理程序开始执行。

阶段 3: 软件处理(操作系统内核)

现在开始执行操作系统的代码:
6. 保存完整现场:操作系统代码首先手动将所有的通用寄存器(EAX, EBX, ECX...)的值压入内核栈。这是为了确保在处理过程中不会破坏用户进程的状态。
7. 开中断:如果是处理中断,操作系统此时可能会重新打开中断,允许更高优先级的中断嵌套。
8. 执行具体处理
* 处理中断:例如,读取键盘缓存区的数据、向硬盘控制器发送下一个读写命令等。
* 处理异常
* 故障:尝试修复问题(如为缺页异常分配物理页),修复成功后,返回重试原指令。
* 陷阱:执行系统调用服务,完成后返回执行下一条指令。
* 中止:终止出错的进程。
9. 调度决策:在处理过程中(尤其是时钟中断),操作系统可能会判断是否需要执行进程调度
10. 恢复现场:处理完毕后,操作系统代码手动将之前保存的通用寄存器值从栈中弹出,恢复到CPU中。
11. 返回指令:操作系统执行IRET指令。这条指令是告诉CPU:“软件处理完毕,你可以恢复硬件现场了”。

阶段 4: 硬件返回(纯硬件操作)

  1. 恢复最小现场:CPU执行IRET指令,自动从内核栈中弹出之前保存的EIPCSEFLAGS的值。
  2. 切换回用户态:根据恢复的CS寄存器,CPU特权级从内核态切换回原来的用户态,栈指针也切换回用户栈。
  3. 恢复执行:CPU根据恢复的EIP地址,继续执行被中断的用户进程。整个过程中,用户进程对此毫无感知,就像什么都没发生过一样。
http://www.wxhsa.cn/company.asp?id=2727

相关文章:

  • 十六、异常和中断的响应过程
  • 直播平台搭建,浏览器中的事件循环与Node中的事件循环 - 云豹科技
  • Redisson 分布式锁的实现原理 - 教程
  • 关于前端的一些疑问整理(标签属性值和符号)
  • 深入解析:免费的SSL和付费SSL 证书差异
  • 领嵌iLeadE-588网关AI边缘计算盒子智能安防监控
  • 十五、异常和中断事件的初始检测、识别和处理
  • 十四、异常和中断的分类
  • 思考 | 躺平者的本质和区别
  • 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框架元推理,就是普罗米修斯主义,穷神知化