异常的种类
异常是什么
异常(exception)就是控制流中的突变,用来响应处理器状态中的某些变化。处理器状态被编码为不同的位和信号,状态变化则被称为事件。事件可能和当前指令Icur的执行有关,比如执行该指令时导致缺页、算术溢出或者试图除以0。事件也可能与Icur的执行无关,比如指令执行期间有一个I/O请求到达。当处理器检测到有事件发生时,它就会通过异常表(exception table)间接调用异常处理程序(exception handler)来处理该事件。当异常处理程序完成处理后,根据引起异常的事件类型来决定将控制返回到哪里,有三种情况:
1)返回到当前指令Icur;
2)返回到没有发生异常时要执行的下一条指令Inext;
3)终止被中断的程序。
异常的种类
异常可以分为四类:中断(interrupt)、陷阱(trap)、故障(fault)和终止(abort)。
1)中断
中断是异步发生的,是由I/O设备的信号引起的。I/O设备(例如网卡,硬盘等)通过向处理器芯片上的一个引脚发送信号,并将异常号放到系统总线上以触发中断,其中异常号用来标识引起中断的设备。处理器执行完当前指令Icur后,发现中断引脚电压变高,就从系统总线读取异常号,然后调用对应的中断处理程序(interrupt handler)进行处理。处理程序返回时将控制交给下一条指令Inext。
2)陷阱
陷阱是有意为之的异常,它是指令执行的结果。和中断一样,陷阱处理程序返回时将控制移交给下一条指令Inext。最常见的陷阱是系统调用(system call)。用户程序经常需要向内核请求服务,为了使内核的服务安全可控,处理器提供一条特殊指令“syscall n”,用户可以通过执行该指令请求内核服务n。执行syscall指令会陷入到异常处理程序中,该程序对参数解码并调用适当的内核程序。系统调用和过程调用不同,普通函数运行在用户模式(user mode)下,在这个模式下函数可以执行的指令类型是有限的,并且只能访问和调用函数相同的栈,而系统调用运行在内核模式(kernel mode)下,该模式下系统调用执行任何指令并可以访问内核栈。
3)故障
故障是由错误情况引起的。当故障发生时,处理器将控制转移给故障处理程序,如果程序能修正这个错误,它返回时就将控制转交给引起故障的指令,否则程序返回到内核中的abort例程,abort例程会终止引起故障的应用程序。比较常见的故障有缺页异常。
4)终止
终止是不可恢复的致命错误导致的结果,通常是硬件错误,比如内存损坏时发生奇偶错误。终止处理程序将控制返回给一个abort例程,它会终止应用程序。
posted on 2017-05-17 20:30 yifangzhuhou 阅读(618) 评论(0) 收藏 举报
浙公网安备 33010602011771号