深入理解计算机系统(第3版) 第八章 异常控制流

1.控制流

从给处理器加电开始,直到你断电为止,程序计数器假设一个值的序列

a0,a1,...an-1

其中,每个ak是某个应用的指令ik的地址。每次从ak到ak+1的过渡称为控制转移(control transfer)。

这样的控制转移序列叫做处理器的控制流(flow of control或control flow)。

 

2.异常

异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现。

异常就是控制流中的突变,用来响应处理器状态中的某些变化,如下图,

深入理解计算机系统(第3版) 第八章 异常控制流_第1张图片

 

3.异常的类别

异常可以分为四类:中断(interrupt)、陷阱(trap)、故障(fault)和终止(abort)。

深入理解计算机系统(第3版) 第八章 异常控制流_第2张图片

-->中断:中断是异步发生的,是来自处理器外部的I/O设备(如网络适配器、磁盘控制器和定时器芯片)的信号的结果。

硬件中断不是由任何一条专门的指令造成的,从这个意义上来说,它是异步的。

硬件中断的处理程序常常称为中断处理程序(interrupt handler)

深入理解计算机系统(第3版) 第八章 异常控制流_第3张图片

-->陷阱:陷阱是有意的异常,是执行一条指令的结果。就像中断处理程序一样,陷阱处理程序将控制返回到下一条指令。

陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。

深入理解计算机系统(第3版) 第八章 异常控制流_第4张图片

-->故障:故障是由错误情况引起的,它可能能够被故障处理程序修正。

当故障发生时,处理器将控制转移给故障处理程序。如果处理程序能够修正这个错误情况,它就将控制返回到引起故障的指令,从而重新执行它。否则,处理程序返回到内核中的abort例程,abort例程会终止引起故障的应用程序。

深入理解计算机系统(第3版) 第八章 异常控制流_第5张图片

-->终止:终止是不可恢复的致命错误造成的结果,通常是一些硬件错误,比如DRAM或者SRAM位被损坏时发生的奇偶错误。终止处理程序从不将控制返回给应用程序。

深入理解计算机系统(第3版) 第八章 异常控制流_第6张图片

 

4.进程

异常是允许操作系统内核提供进程(process)概念的基本构造块。进程是计算机科学中最成功、最深刻的概念之一。

进程的经典定义就是一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文(context)中。上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。

 

5.逻辑控制流

即使在系统中通常有许多其他程序在运行,进程也可以向每个程序提供一个假象,好像它在独占地使用处理器。如果想要调试器单步执行程序,我们会看到一系列的程序计数器(PC)的值,这些值唯一地对应于包含在程序的可执行目标文件中的指令,或是包含在运行时动态链接到程序的共享对象中的指令。这个PC值的序列叫做逻辑控制流,或者简称逻辑流。

深入理解计算机系统(第3版) 第八章 异常控制流_第7张图片

 

6.并发流

一个逻辑流的执行在时间上与另一个流重叠,称为并发流(concurrent flow),这两个流被称为并发地运行。

多个流并发地执行的一般现象称为并发(concurrent)。一个进程和其他进程轮流运行的概念称为多任务(multitasking)。一个进程执行它的控制流的一部分的每一时间段叫做时间片(time slice)。因此,多任务也叫做时间分片(time slicing)。

注意,并发流的思想与流运行的处理器核数或计算机数无关。如果两个流在时间上重叠,那么它们就是并发的,即使它们是运行在同一个处理器上。不过,有时我们会发现,确认并行流是很有帮助的,它是并发流的一个真子集。如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称它们为并行流(parallel flow),它们并行地运行,且并行地执行。

 

7.上下文切换

操作系统内核使用一种称为上下文切换(context switch)的较高层形式的异常控制流来实现多任务。内核为每个进程维护一个上下文(context)。上下文就是内核重新启动一个被抢占的进程所需的状态,它由一些对象的值组成,这些对象包括通用目的寄存器、浮点寄存器、程序计数器、用户栈、状态寄存器、内核栈和各种内核数据结构,比如描述地址空间的页表、包含有关当前进程信息的进程表,以及包含进程已打开文件的信息的文件表。

在进程这些的某些时刻,内核可以决定抢占当前进程,并重新开始一个先前被抢占的进程。这种决策就叫做调度(scheduling),是由内核中称为调度器(scheduler)的代码处理的。当内核选择一个新的进程运行时,我们说内核调度了这个进程。在内核调度了一个新的进程运行后,它就抢占当前进程,并使用一种称为上下文切换的机制来将控制转移到新的进程,上下文切换的步骤:1)保存当前进程的上下文;2)恢复某个先前被抢占的进程被保存的上下文;3)将控制传递给这个新恢复的进程。

深入理解计算机系统(第3版) 第八章 异常控制流_第8张图片

 

第八章小结

深入理解计算机系统(第3版) 第八章 异常控制流_第9张图片

你可能感兴趣的:(system)