文章结构为 1:什么是异常
2:怎么处理异常
什么是异常:
先说下什么是异常控制流,https://www.jianshu.com/p/1148ec06680e
异常就是控制流中的突变,用来响应处理器状态的某些变化。处理器状态的变化可能与当前指令相关。
异常的分类:https://www.jianshu.com/p/6462ac85e45f
比如发生虚拟内存缺页中断(DRAM缓存不中),算术溢出,或者一条指令试图除0,当然也可能与当前执行指令没关系,比如一个系统定时器产生一个信号或者一个I/O完成了请求等等
怎么处理异常:
当处理器检测到这些状态变化,他就会通过一张异常表的跳转表,进行一个间接过程调用,到一个专门设立用来处理这类事件的操作系统子程序,也就是异常处理程序
好好看一下下面这张图,更容易理解
系统中可能的每种类型的异常都分配了一个唯一的非负整数异常号。
这些异常包括零除,缺页,内存访问违例,断点即算术运算一组,系统调用和来自外部i/o设备的信号。
操作系统分配和初始化一张称为异常表的跳转表,使得表目k包含异常k的处理程序地址

通过异常表的表目k,转到相应的处理程序
异常号是异常表的索引,异常表的起始地址放在一个叫做异常表基址寄存器的特殊CPU寄存器里。

网友评论