知识点:操作系统异常的分类
异常可以分为四类:中断(interrupt)、陷阱(trap)、故障(fault)、终止(abort)
。
异步异常时由处理器外部的I/O设备中的事件产生的。同步异常是执行一条指令的直接产物。
中断
中断时异步发生的,来自处理器外部的I/O设备的信号结果。剩下的异常类型是同步发生的,是执行当前指令的结果,我们把这类指令叫做故障指令。
陷阱
陷阱
最重要的用途是用在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用
从程序员的角度看,系统调用和普通的函数调用是一样的。然而,它们的实现非常不同。普通函数运行在用户模式
中,用户模式限制了函数可以执行的指令的类型,而且它们只能访问与调用函数相同的栈。系统调用在内核模式
中,内核模式允许系统调用执行特权指令,并访问定义在内核中的栈。
故障
故障由错误引起,它可能能够被故障处理程序修正。根据故障是否能够被修复,故障处理程序要么重新执行引起故障的指令,要么终止。
一个经典的故障示例是缺页异常
,当指令引用一个虚拟地址,而与该地址相对应的物理页面不在内存中,因此必须从磁盘中读取时,就会发生故障。一个页面就是虚拟内存中的一个连续的块(典型的是4KB),缺页处理程序从磁盘加载适当的页面,然后将控制返回给引起故障的指令。当指令再次执行是,相应的物理页面已经驻留在内存中了,指令就可以没有故障的运行完成了。
终止
终止是不可恢复的致命错误造成的结果,通常是一些硬件错误,比如DRAM或者SRAM位被损坏时发生的奇偶错误。终止处理程序从不将控制返回给应用程序,处理程序将控制返回给一个abort例程,该例程会终止这个应用程序。
参考资料:《深入理解计算机系统》第三版P504
版权声明: 本文为 InfoQ 作者【王坤祥】的原创文章。
原文链接:【http://xie.infoq.cn/article/5570344a75754688ed53885e8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论