1、从给处理器加电开始,直到断电位置,程序计数器假设一个值的序列:a0,a1,...,an-1,其中,每个ak是某个相应地指令Ik的地址。每次从ak到ak+1的过渡称为控制转移。这样的控制转移序列叫做处理器的控制流。最简单的一种控制流是一个“平滑的”序列,其中每个Ik和Ik+1在存储器中都是相邻的。
2、系统通过使控制流发生突变来对系统状态的变化做出反应,这些突变称为异常控制流。
3、应用程序通过使用一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务。
4、操作系统为应用程序提供了强大的ECF机制,用来创建新进程、等待进程终止、同志其他进程系统中的异常事件,以及检测和相应这些事件。
5、ECF是计算机系统中实现并发的基本机制。终端应用程序、进程和线程执行的异常处理程序和终端应用程序执行的信号处理程序都是在运行中的并发的例子。
6、C++和Java是通过try、catch和throw语句来提供软件异常机制。软件异常允许程序进行非本地跳转(违反通常的调用/返回栈规则的跳转)来相应错误情况。非本地跳转是一种应用层ECF,在C中是通过setjmp和longjmp函数提供的。
异常就是控制流中的突变,用来相应处理器状态中的某些变化。 当处理器状态中发生一个重要的变化时,处理器正在执行某个当前指令Icurr。 在处理器中,状态被编码为不同的位和信号。 状态变化称为事件,事件可能和当前指令的执行直接相关。 在任何情况下,当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用(异常),到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序)。 当异常处理程序完成处理后,根据引起异常的事件的类型,会发生以下三种情况中的一种: ①处理程序将控制返回给当前指令Icurr,即当事件发生时正在执行的指令。 ②处理程序将控制返回给Inext,即如果没有发生异常将会执行的下一条指令。 ③处理程序终止被中断的程序。
8.1.1异常处理
系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号。其中一些号码是由处理器的设计者分配的,其他号码是由操作系统内核(操作系统常驻存储器的部分)的设计者分配的。前者的示例包括被零除、缺页、存储器访问违例、断点以及算术溢出。后者的示例包括系统调用和来自外部I/O设备的信号。
原文:http://www.cnblogs.com/paperfish/p/4978458.html