异常的分类

  • 错误(fault) 错误是一种能被修复的异常。只要错误被修正,处理器可将程序或任务的运行环境还原至异常发生前,并重新执行产生异常的指令,也就是说异常的返回地址指向产生错误的指令,而不是其后的位置。
  • 陷阱(trap) 陷阱异常同样运行处理器集训执行程序或任务,只不过处理器会跳过产生异常的指令,即陷阱异常的返回地址指向诱发陷阱指令之后的地址。
  • 终止(abort) 终止异常用于报告非常严重的错误,它往往无法准确提供产生遗产的位置,同时也不允许程序或任务继续执行,典型的终止异常有硬件错误或系统表存在不合逻辑、非法值。

综上,当终止异常产生或,程序现场不可恢复,也无法继续执行。当错误异常和陷阱异常产生后,程序线程可以恢复并继续执行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tefvcZpE-1634731765191)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20211015105849254.png)]

处理器采用类似汇编指令CALL的调用方法来执行异常/中断处理程序。当处理器捕获到异常/中断时,便会根据异常/中断向量号(Interrupt Vector)从中断描述符表IDT索引出对应的门描述符,再由门描述符定位到处理程序的位置。如果向量号索引到一个中断门或者陷阱门,处理器将会像执行CALL指令访问调用门一般,去执行异常/中断处理程序。如果向量号索引到一个任务门。处理器将会发生切换,转而执行异常任务或中断任务,这个过程就像执行CALL指令访问 调用任务门一样。

  • 异常/中断的处理步骤。

    • 处理器会根据中断/异常向量号从中断描述符表IDT检索出对应的门描述符(中断门或陷阱门,Interrupt or Gate),并读取门描述符保存的段选择子。
    • 从GDT或者LDT描述符表中检索出处理程序所在的代码段,再根据门描述符记录的段内偏移量,来确定中断/异常处理程序的入口地址。

    处理器在执行中断/异常处理程序时,会检测中断/异常处理程序所在的代码段的特权级,并与代码段寄存器的特权级进行比较。

    • 如果中断/异常处理程序的特权等级更高,则会在中断/异常处理程序执行前切换栈空间,以下是栈空间的切换过程。

      • 处理器会从任务段TSS中取出对应的特权级的栈段选择子和栈指针,并将他们作为中断/异常处理程序的栈空间进行切换。在栈空间切换的过程中,处理器将自动把切换前的SS和ESP值压入到中断/异常处理程序栈。
      • 在栈空间切换的过程中,处理器还会保存呗中断程序的EFLAGS、CS和EIP寄存器值到中断/异常处理程序栈。
      • 如果异常会产生错误码,则将其保存在异常栈内,位于EIP寄存器之后。
    • 如果特权等级相等
      • 处理器将会保存中断程序的EFLAGS、CS和EIP寄存器值到栈中
      • 如果异常会产生错误码,则将其保存在异常栈内,位于EIP寄存器之后。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fi6anYL5-1634731765193)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20211015112636415.png)]

关于Start_Kernel如何调用到color_printk

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wvz9ZIFC-1634731765194)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20211017214358548.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7P0LVUXu-1634731765195)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20211017214411388.png)]

将函数的地址保存到rcx寄存器中,使用call调用远程函数。其中esi,edi,eax是函数调用是传递的参数。其中EDI中的0xffff00是黄色,ESI寄存器中的0x00000000是黑色。Hello word保存在0xffff800000106108地址起始处。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7JJFkDzH-1634731765197)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20211017214801844.png)]

由于.rodata是数据段,所以反汇编的语法是错误的,只用观察16进制即可。

#TS异常和#PF异常的错误码位图

如果异常产生的原因(外部中断或int n指令均不会产生错误码)关系到一个特殊的段选择子或者IDT向量,那么处理器会在异常处理程序栈中存入错误码。值得注意的是,执行IRET指令并不会在异常返回过程中弹出错误码,因此在异常返回前必须手动将错误码从栈中弹出。

​ 根据中断门、陷阱门或任务门的操作数位宽,错误码可以是一个字或双字,为了保证双字错误码入栈时的对齐 ,错误码的高半部分被保留。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9P0kSHE-1634731765198)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20211018172914040.png)]

  • EXT 如果该位置被置位,说明异常实在 向程序投递外部事件的过程中触发,例如一个中断或一个更早期的异常。
  • IDT 如果该位被置位,说明错误码的段选择子部分记录的是中断描述符 表IDT内的门描述符,而复位则说明其记录的是描述符表GDT/LDT内的描述符。
  • TI 只有当IDT 标志位复位时此位才有效。如果该位被置位,说明错误码的段选择子部分记录的是局部描述符表LDT内的段描述符或门描述符,而复位则说明它记录的是全局描述符表GDT的描述符

错误码的段选择子部分可以索引IDT、GDT、或LDT等描述符表内的段描述符或门描述符。在某些条件下,错误码是NULL(除EXT位外所有位均被清0),这表明错误并非由引用 特殊段或访问NULL段描述符而产生的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwNzz6Rz-1634731765199)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20211019124614856.png)]

可变参数函数

https://blog.csdn.net/weixin_44692935/article/details/103001787

操作系统如何建立异常处理?相关推荐

  1. linux操作系统下建用户,如何用Linux操作系统批量建立用户的shell

    如何用Linux操作系统批量建立用户的shell 最近,笔者在校园网应用平台建设中采用了Linux操作系统,为校园网用户提供DNS.Apache.POP3.SMTP.FTP等服务.由于我校学生用户数在 ...

  2. 操作系统原理:中断,异常,系统调用

    系统调用(system call):为应用程序请求操作提供服务.可异步和同步,对于返回值,同步会等待值返回再执行下一步,异步发出系统调用请求后,紧接着就会执行下一步操作. 异常 (Exception) ...

  3. 清华大学操作系统公开课笔记(向勇、陈渝)

    转载:https://zhuanlan.zhihu.com/p/150510828 第一章:概述 内核功能:物理内存管理 | 虚拟内存管理 | 文件系统管理 | 中断处理和IO设备驱动 (底层硬件) ...

  4. C++编译器如何实现异常处理

    C++编译器如何实现异常处理 原著:Vishal Kochhar 翻译:局部变量 原文出处:How a C++ compiler implements exception handling 译者注:本 ...

  5. 操作系统知识点总结和题集大杂烩

    第一轮:从当前位置开始扫描到第一个(A =0, M = 0)的帧用于替换.表示该页面最近既未被访问,又未被修改,是最佳淘汰页 第二轮:若第一轮扫描失败,则重新扫描,查找第一个(A =0, M = 1) ...

  6. 操作系统-AOSOA

    一.个人感受 1.1 权衡 在我写这份报告的时候,已经是 6 月 30 号了,经历了一个学期的"折磨",我面对终点,已经没啥感觉了,就想着赶快呼噜完了就完事了.其实做这个项目最大的 ...

  7. 异常处理与MiniDump详解(3) SEH(Structured Exception Handling)

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 一.   综述 SEH--Structured Exception Handlin ...

  8. 发布AI操作系统、应用市场,开源机器学习数据库和AI操作系统内核,第四范式这波操作有点秀!

    "AI的发展经历了'高期望--能否落地--落地是否有用"等多次潮起潮落.今天,AI的价值再次引发一些讨论和怀疑." 第四范式创始人兼首席执行官戴文渊在近日举行的新品发布会 ...

  9. 临时内核页表的建立过程

    Motivation:当内核被解压到线性地址0x100000后,为了继续启动内核,即启动内核的第一个swapper进程,内核需要建立一张临时页表供其使用. 当内核从16位的实模式进入保护模式(通过在汇 ...

最新文章

  1. 扒皮下京东首页楼层图标的动画效果实现方式
  2. 如何解压tar.xz文件
  3. 携程试点每周两天居家办公反响热烈,76%的员工主动报名
  4. eclipse中导入SVN项目步骤
  5. 分布式系统架构的基本原则和实践
  6. Kafka系列之-Kafka监控工具KafkaOffsetMonitor配置及使用
  7. 如何抓取Camera systrace
  8. 【clickhouse】clickhouse NO DELAY, INTO OUTFILE, SETTINGS, ON, FORMAT, Dot, SYNC, token
  9. zabbix内网安装部署_搭建环境tomcat+nginx+keepalived+zabbix
  10. java统计汉字个数_java统计汉字字数的方法示例
  11. 车道线定位及拟合:直方图确定车道线位置
  12. Win10自动更新永久关闭Windows update medic service拒绝访问
  13. 从IP138上获取数据,查询多个IP的归宿地
  14. (20201209已解决)从window访问wsl地址
  15. 转行数据分析师后悔了?转行需要做哪些准备?
  16. 这样写的邮件,客户回复率几乎高达100%
  17. 华科大计算机系李瑞轩.,李瑞轩-智能与分布计算实验室
  18. 【购房必备知识】成都公积金贷款/商业贷款的一些知识记录
  19. 智能ABC输入法超酷技巧
  20. Spring Cloud Nacos整合 Seata 实现分布式事务

热门文章

  1. 单片机串口通讯RXD与TXD如何对接详解(独家!)
  2. TypeScript报错Object is possibly ‘undefined‘
  3. [脑科学]-这才是心理学
  4. OLED_I2C_3D_Cube
  5. python中的subprocess.Popen()使用详解---以及注意的问题(死锁)
  6. 【第 13 章 基于霍夫曼图像压缩重建--Matlab深度学习实战图像处理应用】
  7. 用3句话像老太太讲清楚什么是数据库
  8. eMMC格式化及烧录
  9. 微信打通腾讯地图 提供地图API接口
  10. Linux网络虚拟化基石 network namespace