现代系统经过使控制流发生突变来对这些状况作出反应。咱们把这些突变称为异常控制流ide
做为程序员,理解 ECF 很重要:函数
- 理解 ECF 将帮助你理解重要的系统概念。
- 理解 ECF将帮助你理解应用程序是如何与操做系统交互的。
- 理解 ECF 将帮助你编写有趣的新应用程序。
- 理解 ECF 将帮助你理解并开发。
- 理解 ECF 将帮助你理解软件异常如何工做。
- 异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是由操做系统实现的
- 异常( exception)就是控制流中的突变,用来响应处理器状态中的某些变化。
- 当异常处理程序完成处理后,根据引发异常的事件的类型,会发生如下三种状况中的一种:
1)处理程序将控制返回给当前指令 curr 即当事件发生时正在执行的指令。
2) 处理程序将控制返回给 酬,即若是没有发生异常将会执行的下一条指令。
3) 处理程序终止被中断的程序。
- 系统中可能的每种类型的异常都分配了一个惟一的非负整数的异常号。
- 异常表的起始地址放在一个叫作异常在基址寄存器的特殊CPU 寄存器里。
- 异常相似于过程调用,可是有一些重要的不
同之处。
- ·过程调用时,在跳转处处理程序以前,处理器将返回地址压人找中。
- 处理器也把一些额外的处理器状态压到栈里,在处理程序返回时,从新开始被中断的程序会须要这些状态。
- 若是控制从一个用户程序转移到内核,那么全部这些项目都被压到内核栈中,而不是压到用户栈中。
- 异常处理程序运行在内核模式下,这意味着它们对全部的系统资源都有彻底的访问权限。
- 异常能够分为四类:中断( interrupt)、陷阱 (trap)、故障 (fault) 和终止 (abort)。
1.中断工具
- 中断是异步发生的,是来自处理器外部的1/ 设备的信号的结果。
- 硬件中断的异常处理程序一般称为中断处理
程序。- 剩下的异常类型(陷阱、故障和终止〉是同步发生的,是执行当前指令的结果。咱们把这类指令叫作故障指令。
2.陷阱和系统调用学习
- 陷阱是有意的异常,是执行一条指令的结果。就像中断处理程序同样,陷阱处理程序将控制返回到下一条指令。陷阱最重要的用途是在用户程序和内核之间提供一个像过程同样的接口,叫作系统调用。
3.故障
- 故障由错误状况引发,它可能可以被故障处理程序修正。当故障发生时,处理器将控制转移给故障处理程序。若是处理程序可以修正这个错误状况,它就将控制返回到引发故障的指令,从而从新执行它。不然,处理程序返回到内核中的 abort 例程, abort 例程会终止引发故障的应用程序。
4.终止
- 终止是不可恢复的致命错误形成的结果,一般是一些硬件错误,好比 DRAM 或者SRAM被损坏时发生的奇偶错误。终止处理程序从不将控制返回给应用程序。
- 除法错误
- 通常保护故障
- 缺页
- 机器检查
2.linuxllA32 系统调用
- Linux 提供上百种系统调用,当应用程序想要请求内核服务时可使用,包括读文件、写文件或是建立一个新进程。
- 异常是容许操做系统提供进程 (process) 的概念所须要的基本构造块,进程是计算机科学中
最深入最成功的概念之一。- 进程提供给应用程序的关键抽象:
- 一个独立的逻辑控制流,它提供一个假象,好像咱们的程序独占地使用处理器。
- 一个私有的地址空间,它提供一个假象,好像咱们的程序独占地使用存储器系统。
- 若是想用调试器单步执行程序,咱们会看到一系列的程序计数器 (PC)值,这些值惟一地对应于包含在程序的可执行目标文件中的指令,或者是包含在运行时动态连接到程序的共享对象中的指令。这个 PC值的序列叫作这辑控制流,或者简称逻辑流。
- 每一个进程执行它的流的一部分,而后被抢占 (preempted) (暂时挂起),而后轮到其余进程。
- 一个逻辑流的执行在时间上与另外一个流重叠,称为并发流 (concurrent fiow) ,这两个流被称为并发地运行.
- 多个流并发地执行的通常现象称为并发 (concurrency)。一个进程和其余进程轮流运行的
概念称为多任务 (multitang).一个进程执行它的控制流的一部分的每一时间段叫作时间片(time slice)。所以,多任务也叫作时间分片(time.slicing).
- 进程也为每一个程序提供一种假象,好像它独占地使用系统地址空间。在一台有 位地址的机器上,地祉空间是 个可能地址的集合 0, 1,…, -l. 一个进程为每一个程序提供它本身的私有地址空间。
- 处理器一般是用某个控制寄存器中的一个模式位 (mode bω 来提供这种功能的,该寄存器描述了进程当前享有的特权。当设置了模式位时,进程就运行在内核模式中(有时叫作超级用户模式)。一个运行在内核模式的进程能够执行指令集中的任何指令,而且能够访问系统中任何存储器位置。
- 没有设置模式位时,进程就运行在用户模式中。用户模式中的进程不容许执行特权指令(privi1eged instruction),好比中止处理器、改变模式位,或者发起一个I/O操做。也不容许用户模式中的进程直接引用地址空间中内核区内的代码和数据。任何这样的尝试都会致使致命的保护故障。反之,用户程序必须经过系统调用接口间接地访问内核代码和数据。
- 操做系统内核使用一种称为上下丈切换 (context switch) 的较高层形式的异常控制流来实现多任务。
- 内核为每一个进程维持一个上下文(context)。上下文就是内核从新启动一个被抢占的进程所需的状态。
- 在进程执行的某些时刻,内核能够决定抢占当前进程,并从新开始一个先前被抢占的进程。这种决定就叫作调度,是由内核中称为调度器( scheduler)的代码处理的。
- 当内核选择一个新的进程运行时,咱们就说内核调皮了这个进程。在内核调度了一个新的进程运行后,它就抢占当前进程,并使用一种称为土下丈切换的机制来将控制转移到新的进程,上下文切换
1)保存当前进程的上下文,
2) 恢复某个先前被抢占的进程被保存的上下文,
3) 将控制传递给这个新恢复的进程。