异常

来源:互联网 发布:微商控价软件 编辑:程序博客网 时间:2024/06/05 06:45

一、异常

异常就是控制流中的突变,用来响应处理器状态中的某些变化。

图1-1

这里写图片描述

二、异常处理

系统中可能的每种类型的异常,都分配了一个唯一的非负整数的异常号。其中一部分是操作系统的设计者分配的,一部分是处理器设计者分配的。

这里写图片描述
1. 由图可见,调用异常处理程序的过程是一个间接过程。
2. 每一种类型的异常都有对应的处理程序。
3. 异常处理程序运行在内核模式下。
4. 如果控制从用户转移到内核,所有的项目都被压到内核栈中,而不是用户栈。

三、异常的类别

一、中断

中断是异步发生的,是来自处理器外部的I/O设备的信号的结果。由于硬件中断不是由任何一条专门指令造成的,从这个意义上来说它是异步的。

中断处理程序执行完后,将控制返回给下一跳指令执行。

二、陷阱和系统调用

陷阱是有意的异常,是执行一条指令的结果。陷阱处理程序将控制返回到下一条指令。陷阱最重要的作用是在用户和内核之间提供一个像过程一样的接口,叫系统调用

从程序员的角度来看,系统调用和普通函数调用是一样的。然而,其实现是非常不同的。普通函数运行在用户模式下,用户模式限制了函数可以执行指令的类型,它们只能访问与调用函数相同的栈系统调用运行在内核模式中,内核模式允许系统调用执行特权指令,并访问定义在内核中的栈

三、故障

故障由错误情况引起,它可能能被故障处理程序修正。
如果故障可以修复,则返回到引起故障的指令。否则,返回到内核的abort()例程终止程序

内存缺页是一个经典的故障示例:处理程序将适当的磁盘上的虚拟内存的一个页面映射到物理内存的一个页面,然后重新执行这条产生故障的指令。

eg:一般保护故障:引用了未定义的虚拟内存区域。在linux下为段错误(segmentation fault)。

四、终止

终止是不可恢复的致命错误造成的结果,通常是硬件错误。处理器将调用abort()例程,终止该程序。

原创粉丝点击