7 异常控制流

从给处理器加电开始,直到你断电为止,程序计数器假设一个值的序列
ao,ai,…,an-1
其中,每个a是某个相应的指令I的地址。每次从ak到ak+1的过渡称为控制转(controltransfer)。这样的控制转移序列叫做处理器的控制流(flow of control或control flow)。
最简单的一种控制流是一个“平滑的”序列,其中每个I和I+在内存中都是相邻的。这种平滑流的突变(也就是I+与I,不相邻)通常是由诸如跳转、调用和返回这样一些熟悉的程序指令造成的。这样一些指令都是必要的机制,使得程序能够对由程序变量表示的内部程序状态中的变化做出反应。
但是系统也必须能够对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获的,而且也不一定要和程序的执行相关。比如,一个硬件定时器定期产生信号,这个事件必须得到处理。包到达网络适配器后,必须存放在内存中。程序向磁盘请求数据,然后休眠,直到被通知说数据已就绪。当子进程终止时,创造这些子进程的父进程必须得到通知。
现代系统通过使控制流发生突变来对这些情况做出反应。一般而言,我们把这些突变称为异常控制流(Exceptional Control Flow, ECF)。异常控制流发生在计算机系统的各个层次。比如,在硬件层,硬件检测到的事件会触发控制突然转移到异常处理程序。在操作系统层,内核通过上下文切换将控制从一个用户进程转移到另一个用户进程。在应用层,一个进程可以发送信号到另一个进程,而接收者会将控制突然转移到它的一个信号处理程序。一个程序可以通过回避通常的栈规则,并执行到其他函数中任意位置的非本地跳转来对错误做出反应。
 
posted @ 2023-07-24 14:16  进击的胖虎  阅读(21)  评论(0)    收藏  举报