首页 > 代码库 > 计算机系统:第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等)而不是栈传递的