异常(exception)为异常控制流的一种,一部分为硬件实现一部分为操作系统实现。
异常就是控制流中的突变,用来响应处理器状态中的某些变化。
处理器检测到有事件发生时,通过异常表进行跳转,进行简介过程调用到一个专门设计用来处理这类事件的操作系统子程序-异常处理程序中。 处理完成后根据事件类型,发生以下三种情况之一: 1.控制返回当前指令 2.控制返回当前指令下一条指令 3.终止当前程序
异常处理
每种一场都有唯一非负整数的异常号。系统启动时,操作系统分配和初始化异常表,根据异常号保存需要跳转到的异常处理程序地址。 异常处理程序是运行在内核态的,异常表首地址存储在异常表基寄存器这样一个特殊的cpu寄存器中。
- 异常处理时可能不会返回源地址,也可能abort进程。
- 异常处理时可能需要一些额外的处理器状态入栈,寄存器等
- 控制从一个用户程序转移到内核,所有项目被压入内核栈
- 运行在内核态,具有全局访问权限
异常类别
中断、陷阱、故障、终止
见表:
陷阱:
陷阱用于在用户程序和内核之间提供一个像过程一样的接口,也叫系统调用
用户程序需要访问内核服务时就需要使用系统调用这样的异常陷入内核态。
故障: 故障发生时进入故障处理程序,可能abort也可能返回 终止: abort