。异常控制流
异常控制流是系统为了对系统状态变化作出反应,把处理器的指令执行流转到一个特殊方向的突变。
。异常
异常是异常控制流的一种形式,它介于处理器与操作系统之间,由它们共同完成异常控制流的任务。当处理器的状态发生变化时,处理器判断这个变化是否该引起异常,如果是的话,处理器会确定一个编号——异常号。异常号是一张叫做异常表(操作系统启动时候负责生成一张异常表)的表目索引。这张表的地址存在处理器的异常表基址寄存器中,它的表目记录了对应的异常处理程序的地址,处理器可以根据异常表基址和异常号确定异常处理程序的地址,然后把控制转到异常处理程序。异常表的异常号一部分由处理器定义,一部分由操作系统定义。
。异常种类
。中断
io设备通过向处理器芯片上的一个管脚发信号并把异常号放到系统总线上来触发异常,根据上面讲的的方法处理器把控制转到合适的中断处理程序。中断处理程序执行过之后把控制转移到原先应用程序该执行的下一条指令。
。陷阱
陷阱是有意的异常。应用程序无法直接访问机器的硬件资源,它必须向操作系统请求所需要的服务。应用程序通过一个特殊的指令来产生一个陷阱,处理器检查到状态变化,会调用相应的处理程序,处理程序对参数(书上讲的有些模糊,我不确定这里这个参数指的异常号还是指需要的服务种类,根据上下文会我认为指的应该是后者,那么处理器定位处理函数的异常号呢,既然异常号既然是操作系统定义的,那么处理器此刻要怎么得知呢?是不是需要另外的一个参数?)译码然后调用适当的内核程序。这个内核程序在内核模式下运行。最后控制返回到应用程序应该执行的下一条指令(这里没有说是内核程序返回给 处理程序再由处理程序返回给应用程序还是直接由内核程序返回到应用程序, 我想应该是处理程序返回的,这些问题暂时不深究)。
。故障
故障是由指令执行所产生的错误情况引起的,如果异常处理程序能够解决这个特定的故障,那么执行完后返回给应用程序引发故障时正在处理的指令,并重新执行,如果不能解决,处理程序把控制转到内核的abort,它会终止这个程序。
。终止
终止是由不可回复的致命错误引起的,典型是一些硬件错误,它从不会把控制返回给应用程序,它会把控制转到abort从而终止应用程序。