1.异常控制流
控制流: a0,a1,a2,a3,。。。an
I1, I2, I3, I3 ,。。。In
其中a是程序计数器(PC)中的指令地址,I是对应的指令。
程序按照ak进行控制转移,这种控制转移序列叫做控制流。
如果Ik与Ik+1在存储器中是相邻的,叫平滑控制流。
如果不相邻,就叫做突变。
突变可以是1个进程程序内部的状态变化(跳转,调用,返回),也可以是系统状态的变化。
这种系统状态的变化就叫做异常控制流。
2.异常的若干种分类方法
(1)按层次来分
①硬件层:时钟,I/O
②操作系统层:系统调用
③应用层:信号(一种用于进程间通信的软中断)
注:其实系统调用和信号都是函数实现的,但是系统调用是运行在内核模式的,系统调用本身就是在用户程序和内核之间提供一个像过程一样的接口。
而信号是运行在用户模式。
(2)按同异步以及返回行为(返回到下一指令、当前指令、不返回)
①中断
②系统调用
③故障
④终止
4者的主要区别可以见本书中文版P483的图8-4
注意:①中断这里是异步的,产生异常的原因一般与当前进程无关。
后面三种都是同步的,产生异常的原因都与当前进程有关,或是产生错误,或是主动调用。
②其实中断,异常什么的,本身有那么多层含义,所以在很多地方说法都不统一,主要是把一些主要的概念与区别搞明白即可。
③其实(1)中是混合了所有的异常,可以吧(1)中的①、②合起来就是(2)所说的东西,(2)中的中断、故障、终止可以统称硬件中断。
只是按照,同异步,返回行为又把硬件中断分为了以上4种。
而(1)中的信号以及(2)中的系统调用又可以统称软件中断。
软件中断和硬件中断的根本区别就是,到底是从内核模式开始还是用户模式开始。
如果是信号或者是由用户模式陷入内核模式的系统调用都可以看做软中断。
其他的用户空间程序无法利用的异常就是硬件中断。