首页 > 代码库 > 计算机系统:第8章 异常控制流

计算机系统:第8章 异常控制流

参考材料:深入理解计算机系统,第8章

1控制流的种类

——》对由“程序内部”变量表示的内部状态的变化作出反应的。简单来说,就是我在运行这段程序,在“程序”中明确指明了下条运行的指令,如顺序下一条,while,跳转等

——》对一些系统状态的变化作出反应,这些系统状态“不是由这段程序内的变量”捕获的。简单来说,就是我在运行这段程序,运行着运行着,突然从本段程序外部来了一个刺激要我作出反应。

——》对于第二种控制流,系统通过ECF(Exceptional Control Flow异常控制流)作出反应。


8.1异常

——》异常的基本过程:processor检测到有时间发生——》根据提前写定好的异常表进行跳转——》到对应异常处理程序——》根据不同类别的异常,作出不同的”返回“


8.1.1异常处理:处理异常需要硬件和软件紧密合作,很容易搞混哪个部分执行哪个任务:SO,分清哪个部分做哪个任务

1——》”硬件“基础:每个异常的异常号exception number

2——》”软件“:操作系统在启动时,初始化一个”异常表“

3——》”硬件“:processor检测到了异常——》根据异常表进行跳转

4——》”软件“:执行对应异常处理程序


8.1.2异常的类别

1——》中断(异步发生的:不是当前指令引起的结果)

2——》陷阱trap

  ——》系统调用

  ——》故障faults

  ——》终止aborts (这4种异常是”同步发生“的,因为是当前指令引起的结果,如缺页


*——》以上的几个概念

”当前指令指明的“指第一种控制流,因为在程序运行到goto时就会发生跳转,这是程序显示指明的;

”当前指令引起的“指程序中没有显式的指明要怎么控制下一条执行哪个(到这就可以判断是”ECF“),但是因为执行当前一条指令,引起了异常(如缺页)这就是同步发生的”异常“;

不是当前指令引起的结果“指程序当前指令不会引起任何异常,但是外部有个设备发来一个信号,这就是异步发生的”异常“;


8.1.3Linux/IA32系统中的异常

1——》IA32系统,查百度应该是指IA32架构,是一个英特尔的指令集架构

2——》这个系统关于异常处理的特异性

——》异常类型数:256.各自都定义好了

——》各个异常的处理方法(举例了几个特殊的)

——》系统调用是通过int 0x80提供的

——》所有到”linux“的系统调用是通过寄存器(如%eax等)而不是栈传递的