第八章 异常控制流

第八章 异常控制流

ECF:(异常控制流)突变集合

平滑:顺序结构的指令

突变:跳转、调用、和返回等指令,不在同一栈

基本机制:ECF是操作系统用来实现I/O、进程和虚拟存器的基本机制   ECF是计算机系统中实现并发的基本机制

异常

控制流的突变

异常号:

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

异常表:

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

用法:

从异常号到异常表的索引

类别:

中断:来自处理器外部的I/O设备的信号的结果,返回下一条指令

陷阱:陷阱是有意的异常,系统调用

故障:由错误状况引起,可能能够被故障处理程序修正

终止:通常是一些硬件错误

汇编常用调用方式:call

通过CALL后面参数的赋值实现不同类别的中断或陷阱

中断:call 21H(标准输出,引用的是IOS)

陷阱:call 函数名

进程

程序运行在进程上下文中

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

一个独立的逻辑控制流:独占的使用处理器

一个私有的地址空间:独占的使用存储器系统

进程利用CPU方式:SFCF,SRT,RR,和多及调度(常用)

多及调度特点:

以时间片轮转进行进程安排

并发流

同时运行多个流

并行:两个流并发的运行不同的处理机核或者计算机上

控制权限位:区别用户模式和内核模式

进程控制

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

pid_t getpid(void); 返回调用进程的PID

pid_t getppid(void); 返回父进程的PID(创建调用进程的进程)

fork:

格式:pid_t fork(void)

调用一次,返回两次

exit:

格式:void exit(int status);

waitpid:

格式:pid_t waitpid(pid_t pid, int *status, int options);

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

wait:

wait(&status)等价于waitpid(-1,&status,0).

pid_t wait(int *status);

sleep:

unsigned int sleep(unsigned int secs);

pause

int pause(void);

execve:

int execve(const char *filename, const char *argv[], const char *envp[]);

fork函数和execve函数的区别

fork函数是创建新的子进程,是父进程的复制体,在新的子进程中运行相同的程序,父进程和子进程有相同的文件表,但是不同的PID

execve函数在当前进程的上下文中加载并运行一个新的程序,会覆盖当前进程的地址空间,但是没有创建一个新进程,有相同的PID,继承文件描述符

总结

本章内容相对较多,许多东西还是没有真正弄懂,很多函数的用法以及包装在里面的各个参数的用途以及作用都没有很好的把握,但是大致的构架已经很清楚了,加上其他课程的相辅相成,一些内容可以实现贯通,多计算机也有了一定的了解

参考资料:

课本

阎佳歆

---恢复内容结束---

时间: 2024-12-20 10:13:48

第八章 异常控制流的相关文章

CSAPP:第八章 异常控制流1

CSAPP:第八章 异常控制流1 关键点:异常 8.1 异常8.2 进程 ??现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Control Flow,ECF).异常控制流发生在计算机系统的各个层次. 8.1 异常 ??异常是异常控制流的一种形式,它的一部分由硬件实现,一部分由操作系统实现.异常就是控制流中的突变,用来响应处理器中的一些变化.如图所示,当处理器状态发生一个重要的变化时,处理器正在执行某个当前指令Icurr.在处理器

csapp:第八章 异常控制流ECF

第八章 异常控制流ECF 8.1 异常 Exception graph LR E[异常Exception]-->E2[中断:异步异常] E-->E3[同步异常] E3-->陷阱 E3-->故障 E3-->中止 异常是异常控制流的一种形式,他一部分由硬件实现,一部分由操作系统实现. 在任何情况下,当处理器检测到有事情发生时,他就会通过一张叫做异常表(exception table)的跳转表,进行一个简介过程调用(异常),到一个专门用来处理这类事件操作系统子程序(异常处理程序 e

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

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

第八章 异常控制流 笔记

异常控制流存在于操作系统的方方面面,最底层的机制称为异常(Exception),由硬件和操作系统共同实现.另外还有: 进程切换(Process Context Switch): 硬件计时器和操作系统实现: 信号(Signal): 操作系统实现: 非本地跳转(Nonlocal Jumps):运行时实现. 异常 这里的异常指的是把控制交给系统内核来响应某些事件(例如处理器状态的变化),其中内核是操作系统常驻内存的一部分,而这类事件包括除以零.数学运算溢出.页错误.I/O 请求完成或用户按下了 ctr

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

进程总是处于下面三种状态之一: 运行.进程要么在CPU上执行,要么在等待被执行且最终会被内核调度. 停止.进程的执行被挂起(suspended),且不会被调度. 终止.进程永远的停止了.进程会因为三种原因终止:1)收到一个信号,该信号的默认行为是终止进程,2)从主程序返回,3)调用exit函数. 父进程通过调用fork函数创建一个新的运行的子进程. fork函数的特点: 调用一次,返回两次.fork函数被父进程调用一次,但是却返回两次-----一次是返回到父进程,一次是返回到新创建的子进程. 当

异常控制流 第十周11.15~11.22

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

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

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

第8章 异常控制流

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

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

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