csapp:第八章 异常控制流ECF
第八章 异常控制流ECF
8.1 异常 Exception
E[异常Exception]-->E2[中断:异步异常]
E-->E3[同步异常]
E3-->陷阱
E3-->故障
E3-->中止
异常是异常控制流的一种形式,他一部分由硬件实现,一部分由操作系统实现。
在任何情况下,当处理器检测到有事情发生时,他就会通过一张叫做异常表(exception table)的跳转表,进行一个简介过程调用(异常),到一个专门用来处理这类事件操作系统子程序(异常处理程序 exception handler)。当异常处理程序完成以后,根据引起异常的事件的类型,会发生以下3种情况的一种:
- 处理程序将控制返回给当前指令Icurr,既当事情发生时正在执行的指令。
- 处理程序将控制返给Inext,如果没有发生异常将会执行的下一条指令。
- 处理器中止被中断的程序。
异常的类别:
| 类别 | 原因 | 异步/同步 | 返回行为 |
|---|---|---|---|
| 中断 | 来自I/O设备的信号 | 异步 | 总是返回到下一条指令 |
| 陷阱 | 有意的异常,例如系统调用(syscall) | 同步 | 总是返回到下一条指令 |
| 故障 | 无意可恢复的错误,如页缺失 | 同步 | 有可能返回到当前指令 |
| 中止 | 无意不可恢复的错误 | 同步 | 不会返回 |
在故障异常处理中,例如页缺失。系统向内存请求一块内存页,当此页不再内存中时,会触发页缺失异常,此时调用处理页缺失异常的程序,向从磁盘中把缺失的页存入到内存中。若成功,则返回到当前指令,既重新请求内存页,此时不再触发页内存;若失败,则放弃请求该内存页,不返回当前指令。
8.2 进程 Process
异常是允许操作系统提供进程概念的基本构造块,进程是计算机科学中最深刻,成功的概念之一。
进程的经典定义就是一个执行种程序的实例。系统中的每个程序都运行在某个进程的上下文(context)之中。
进程提供给应用程序的关键抽象:
- 一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。
- 一个私有的内存空间,它提供一个假象,好像我饿们的程序独占地使用内存系统。
内核利用异常来支持进程上下文切换的异常控制流形式。
8.4 进程控制
获取进程ID
#include <sys/types.h>
#include <unisted.h>
pid_t getpid(void);
pid_t getppod(void);
创建进程 fork函数,调用一次,返回两次,在父进程中返回生成的子进程的pid,在子进程中返回0;
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int x = 1;
pid = fork();
if(pid == 0){
printf("child : x = %d\n", ++x);//child process
exit(0);
}
printf("parent : x = %d\n", --x);//parent process
return 0;
}
运行结果:
$ ./fork
parent : x = 0
child : x = 2
回收子进程
#include <sys/types.h>
#include <unistd.h>
pid_t waitpid(pid_t pid, int *statusp, int options);
//如果成功,则返回子进程的pid,如果WNOHANG,则为0,如果其他错误,则为-1.
加载并运行程序
#include <unistd.h>
int execve(const *filename, const char *argv[], const char *envp[]);
//如果成功则不返回,若错误,则返回-1;
8.5 信号
一种更高层的软件形式的异常,成为Linux信号,它允许内核和进程中断其他进程。
csapp:第八章 异常控制流ECF的更多相关文章
- CSAPP:第八章 异常控制流1
CSAPP:第八章 异常控制流1 关键点:异常 8.1 异常8.2 进程 现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Cont ...
- CSAPP:第八章 异常控制流2
CSAPP:第八章 异常控制流2 关键点:进程控制.信号 8.4 进程控制8.5 信号 8.4 进程控制 Unix提供了大量从C程序中操作进程的系统调用.8.4.1 获取进程ID 每个进程都有一 ...
- [CSAPP笔记][第八章异常控制流][呕心沥血千行笔记]
异常控制流 控制转移 控制流 系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关. 现代系统通过使控制流 发生突变对这些情况做出反应.我们称这种突变为异常 ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- 深入理解计算机系统 第八章 异常控制流 part1
本章主旨 第八章的目的是阐述清楚应用程序是如何与操作系统交互的(之前章节的学习是阐述应用程序是如何与硬件交互的) 异常控制流 异常控制流,即 ECF(exceptional contril flow) ...
- CSAPP学习笔记(异常控制流1)
1:诸如子进程结束之后父进程需要被告知,有时候应用程序需要系统调用,内核通过上下文切换将控制从一个进程切换到另一个进程,还有一个进程发送信号到另一个进程时接收者转而到它的信号处理函数去执行等等,我们的 ...
- 深入理解计算机系统 第八章 异常控制流 Part1 第二遍
第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 500~507 页,共 8 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/101651 ...
- 深入理解计算机系统 第八章 异常控制流 Part2 第二遍
第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 508~530 页,共 23 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/10206 ...
- 深入理解计算机系统 第八章 异常控制流 part2
关于进程,需要关注其提供给应用程序的两个关键抽象: 1.一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器 2.一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统 ...
随机推荐
- thinkphp3.2集成极光推送
项目中用到了给客户端的推送功能,选用了极光推送,下面演示一下在thinkphp中集成极光推送 1.下载极光推送的php类,可以从笔者的git下载 地址:https://git.oschina.net/ ...
- Drawable 使用详解
极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android Drawable 是Android 中图像显示的常用方法. 概念:Drawable ...
- 同时启动多个tomcat,端口修改
所用Tomcat服务器都为zip 版,非安装版.以 tomcat8 为例: 安装第二个Tomcat完成后,打开 tomcat/conf/server.xml 文件,查找以下三处: 1. 修改http访 ...
- sharding demo 读写分离 U (分库分表 & 不分库只分表)
application-sharding.yml sharding: jdbc: datasource: names: ds0,ds1,dsx,dsy ds0: type: com.zaxxer.hi ...
- 第三章 Linux基本命令操作
第三章 Linux基本命令操作 ¨ 本节所讲内容: ¨ 3.1 Linux终端介绍 Shell提示符 Bash Shell基本语法 ¨ 3.2 基本命令的使用:ls.pwd.cd.hist ...
- C#并发实战Parallel.ForEach使用
前言:最近给客户开发一个伙食费计算系统,大概需要计算2000个人的伙食.需求是按照员工的预定报餐计划对消费记录进行检查,如有未报餐有刷卡或者有报餐没刷卡的要进行一定的金额扣减等一系列规则.一开始我的想 ...
- Android 使用 DiffUtil 处理 RecyclerView 数据更新问题
背景 RecyclerView.Adapter#notifyDataSetChanged() 会每次刷新整个布局: 每次手动调用 RecyclerView.Adapter#notifyItemXx 系 ...
- python 函数和函数名的应用
一.函数 1.函数定义 def 关键字 -- 定义 func 函数名 -- 和变量定义规则一样 ()必须要写格式 : 声明语句结束 def my_len(): 函数体 def func(a:int ...
- pythonday05数据类型(三)
---恢复内容开始--- 今日内容 1.字典 2.强制转换 3.习题讲解 1.字典 帮助用户去表示一个事物的信息(事物是有多个属性). info = {"name":'刘伟达',' ...
- 码农"混子"的思想转变
首先介绍一下自己,在高中的时候学校对于我们这种普通班级采取的都是放养状态,所以高中的学习真是不咋地,可能除了自己擅长的数学以外其他也就考个三四十分,后来磕磕绊绊的在打游戏之余也会学习,第一次参加高考跟 ...