异常控制流

异常

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

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

处理器发现异常时会进行一个间接过程调用,到一个操作系统子程序,即异常处理程序。

异常处理程序完成处理后会依据异常类型,产生以下三种情况:

  • 将控制返回当前指令,即正在执行的指令。
  • 返回给下一条指令。
  • 终止被中断的程序。

异常处理

异常号:系统为每种类型的异常分配的唯一的非负整数。

异常表:系统启动时操作系统就会初始化一张条转变,使得条目k包含异常k的处理程序的地址。

关系:
异常号是到异常表中的索引,异常表的起始地址放在异常表基址寄存器。

异常的类别

1.中断

  • 异步发生
  • 来自处理器外部的I/O设备的信号的结果
  • 返回下一条指令

2.陷阱

  • 陷阱是有意的异常
  • 是执行一条指令的结果
  • 最重要的用途——系统调用

3.故障

  • 由错误状况引起,可能能够被故障处理程序修正
  • 结果要么重新执行指令(就是返回当前指令地址),要么终止
  • 典型示例:缺页异常

4.终止

  • 是不可恢复的致命错误造成的结果
  • 通常是一些硬件错误

进程

异常是允许操作系统提供进程的概念所需要的基本构造块。

进程的一个经典定义就是一个执行中的程序的实例。

进程提供给应用程序的关键抽象:

  • 一个独立的逻辑控制流:独占的使用处理器
  • 一个私有的地址空间:独占的使用存储器系统

逻辑控制流

一系列的程序计数器pc的值,分别唯一的对应于包含在程序的可执行目标文件中的指令,或者是包含在运行时动态链接到程序的共享对象中的指令,这个PC值的序列就叫做逻辑控制流。

进程是轮流使用处理器的。每个进程执行它的流的一部分,然后被抢占,然后轮到其他进程。但是进程可以向每个程序提供一种假象,好像它在独占的使用处理器。

并发流

一个逻辑流的执行在时间上与另一个流重叠,称为并发流。

多个流并发地执行的一般现象称为并发。

  • 并发:多个流并发的执行
  • 多任务:一个进程和其他进程轮流运行(也叫时间分片)
  • 时间片:一个进程执行它的控制流的一部分的每一时间段

如果两个流并发地运行在不同的处理器核或者计算机上,我们称它们为并行流,它们并行的运行,且并行的执行。

进程控制

获取进程ID

getpid函数

每个进程都有一个唯一的正数进程ID(PID)。

getpid返回调用进程的PID。

getppid返回它的父进程的PID。

创建和终止进程

exit函数

进程总是处于以下三种状态:

  • 运行。
  • 停止。
  • 终止:1.收到终止进程的信号;2.从主程序返回;3.调用exit函数。

创建进程

fork函数

  • 调用一次,返回两次:父进程返回子进程的PID,子进程返回0.如果失败返回-1。
  • 并发执行。
  • 相同的但是独立的地址空间。
  • 共享文件:相同:用户栈、本地变量值、堆、全局变量值、代码            不同:私有地址空间

回收子进程

waitpid函数

进程终止后还要被父进程回收,否则处于僵死状态。

如果父进程没有来得及回收,内核会安排init进程来回收他们。init进程的PID为1。

一个进程可以通过调用waitpid函数来等待它的子进程终止或停止。

成功返回子进程PID,如果WNOHANG,返回0,其他错误返回-1。

错误条件:

  • 如果调用进程没有子进程,那么waitpid返回-1,并且设置errno为ECHILD。
  • 如果waitpid被一个信号中断,那么他返回-1,并且设置errno为EINTR。

wait函数:waitpid的简单版本。成功返回子进程的PID,出错返回-1。

让程序休眠

sleep函数

sleep函数使一个进程挂起一段指定的时间。

返回值是剩下还要休眠的秒数,如果到了返回0。

pause函数

让调用函数休眠,直到该进程收到一个信号。

加载并运行程序

execve函数

execve函数加载并运行可执行目标文件filename,且带参数列表argv和环境变量列表envp。

只有当出现错误时,例如找不到filename,execve才会返回到调用程序。

execve一次调用从不返回。

时间: 2024-10-12 21:55:15

异常控制流的相关文章

8.0 异常控制流 第8章 《深入理解计算机系统 原书第2版》

异常控制流 定义:现代操作系统对于控制流发生突变所作出的反应 全称:Exception Control Flow 缩写:ECF 各层形态: 1.硬件层:硬件检测到的事件会触发控制突然转移到异常处理程序: 2.操作系统层:在操作系统层,内核通过上下文转换,将控制从一个用户进程转移到另外一个用户进程: 3.应用层:一个进程可以发信号到另外一个进程,而接收者会将控制突然转移到它的一个信号处理程序. 描述:一个程序可以通过回避通常的栈规则,并执行到其他函数中任意位置的非本地跳转来对错误做出的反应. 工作

异常控制流 第十周11.15~11.22

第八章 异常控制流 控制流:控制转移序列. 控制转移:从一条指令到下一条指令. 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流. 作为程序员,理解ECF很重要,这有很多原因: 理解ECF将帮助你理解重要的系统概念.ECF是操作系统用来实现I/O.进程和虚拟存储器的基本机制,在能够真正理解这些重要概念之前,你必须须理解ECF. 理解ECF将帮助你理解应用程序是如何与操作系统交互的.应用程序通过一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务. 理解

第8章 异常控制流

控制转移序列叫做处理器的控制流 现代系统通过使控制流发生突变来对这些情况做出反应,这些突变被称为异常控制流(ECF).异常控制流发生在操作系统的各个层次. 8.1异常 异常是异常控制流的一种形式,一部分由硬件实现,一部分由操作系统实现. 异常就是控制流中的突变,用来响应处理器状态中的某些变化.在处理器中,状态变化称为事件. 任何情况下,当处理器检测到有事件发生时,他就会通过一张叫做异常表的跳转表,进行一个间接过程调用(异常),到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序). 8.

进程—异常控制流之中断篇

从给处理器加电开始,直到断电为止,PC(程序计数器)都在不间断的读取并执行指令. 最简单的一种控制流是一个"平滑的"序列,其中每个instk和instk+1 在存储器中都是相邻的.典型地,这种平滑流的突变,也就是instk?和instk+1? 不相邻,是由诸如跳转(jump).调用(call)和返回(ret)这样一些熟悉的程序指令造成的.这样一些指令都是必要的机制,使得程序能够对由程序变量表示的内部程序状态中的变化做出反应. 但是系统也必须能够对系统状态的变化做出反应,这些系统状态不是

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

参考材料:深入理解计算机系统,第8章 1控制流的种类 -->对由"程序内部"变量表示的内部状态的变化作出反应的.简单来说,就是我在运行这段程序,在"程序"中明确指明了下条运行的指令,如顺序下一条,while,跳转等 -->对一些系统状态的变化作出反应,这些系统状态"不是由这段程序内的变量"捕获的.简单来说,就是我在运行这段程序,运行着运行着,突然从本段程序外部来了一个刺激要我作出反应. -->对于第二种控制流,系统通过ECF(E

第八章 异常控制流

第八章 异常控制流 ECF:(异常控制流)突变集合 平滑:顺序结构的指令 突变:跳转.调用.和返回等指令,不在同一栈 基本机制:ECF是操作系统用来实现I/O.进程和虚拟存器的基本机制   ECF是计算机系统中实现并发的基本机制 异常 控制流的突变 异常号: 系统为每种类型的异常分配的唯一的非负整数 异常表: 系统启动时操作系统就会初始化一张条转变,使得条目k包含异常k的处理程序的地址 用法: 从异常号到异常表的索引 类别: 中断:来自处理器外部的I/O设备的信号的结果,返回下一条指令 陷阱:陷

CSAPP:异常控制流

在一般的情况下,处理器处理的指令序列是相邻的(顺序执行). 异常控制流提供了指令的跳转,它一部分是由硬件实现的,一部分是由操作系统实现的. 异常处理 在系统启动时,操作系统分配和初始化一张称为异常表的跳转表: 触发异常时将从跳转表中找到并执行相应的异常处理程序的代码(所谓的内核态代码?): 系统调用 每个系统调用都属于异常,当调用C库中的系统调用函数时将触发异常. IA32系统中,系统调用是通过一条称为int 0x80(异常号)的陷阱指令来提供的. 所有Linux的系统调用都是通过寄存器来传递的

进程—异常控制流之故障、终止篇

进程-异常控制流之故障.终止篇 一.Exceptions(异常) and System Call(系统调用) 1.1 故障 故障由错误情况引起,它可能能够被故障处理程序修正.当故障发生时,处理器将控制转移给故障处理程序.如果处理程序能够修正这个错误情况,它就将控制返回到引起故障的指令,从而重新执行它.否则,处理程序返回到内核中的abort例程, abort 例程会终止引起故障的应用程序. 故障处理.根据故障是否能够被修复,故障处理程序要么重新执行引起故障的指令,要么终止. 一个经典的故障示例是缺

[CSAPP笔记][第八章异常控制流]

异常控制流 控制转移 控制流 系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关. 现代系统通过使控制流 发生突变对这些情况做出反应.我们称这种突变为异常控制流( Exceptional Control Flow,ECF) 异常控制流发生在系统的各个层次. 理解ECF很重要 理解ECF将帮助你理解重要的系统概念. 理解ECF将帮助你理解应用程序如何与操作系统交互 通过陷阱(trap)或者系统调用(system call)的ECF形式,向操作系统请求服