Linux异常处理

总结Linux中的异常

概述

在Linux中,异常主要被包含为:

类别 原因 异步/同步 返回行为
中断 来自I/O设备的信号 异步 总是返回到下一条指令
陷阱 故意的异常 同步 总是返回到下一条指令
故障 潜在的可恢复的错误 同步 可能会返回到下一条指令
终止 错误指令 同步 报错

需要注意的是,在有些资料(Intel手册)中会区分异步中断和同步异常。

所以还会有另外一种分类方式

  • 异常:这个异常就包含了上面的同步异常
  • 中断:就是上面分类的中断,异步中断

中断

中断是由硬件产生的,而不是由于某条指令产生的。在这个角度上说中断是异步的,处理中断的程序称之为中断处理程序。

中断的产生过程

执行完当前指令后,处理器发现某一个引脚的电平发生变化。然后通过一个可编程中断控制器(PIC)来进行控制,PIC连接着中断请求线(IRQ Interrupt ReQuest线)。

PIC通过监视IRQ线来掌握是否有中断的产生。由于计算机的发展,现在的计算机都不止一个cpu。相应的,PIC也升级为APIC(高级可编程中断控制器)。

这是使用APIC的情况。


陷阱

陷阱是故意的异常,通常使用于系统调用、程序调试等地方。


中断描述符表(IDT)

这个表的地址存储在中断描述符表寄存器(idtr)中,这个表一共包含了三种数据结构,这三种数据结构分别称之为:

  • 任务门
  • 中断门
  • 陷阱门

这三种门分别用于处理对应的任务。

IDT的初始化

当计算机运行在实模式下时,IDT必须被初始化并由BIOS使用。但是一旦Linux接管后,这个IDT就会被Linux移动到ARM的某个区域中,并且进行第二次初始化。


Linux异常处理
https://ysc2.github.io/ysc2.github.io/2023/12/18/Linux异常处理/
作者
Ysc
发布于
2023年12月18日
许可协议