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.一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统 ...
随机推荐
- Java - 自动配置log4j的日志文件路径
目录 1 日志路径带来的痛点 2 log4j.properties文件的配置 3 彻底解决痛点 3.1 单独的Java程序包 (非Java Web项目) 3.2 Web项目 4 附录 - 获取当前项目 ...
- kubernetes离线包分析
k8s离线包解析 产品地址 鸣谢 大家好,首先感谢大家对我们产品的支持,特别是一些老客户的持续支持,让我可以有动力把这个事情持续进行下去. 感谢大家对付费产品的认可,尊重付费 产品介绍 我们专注于k8 ...
- javascript 异步请求封装成同步请求
此方法是异步请求封装成同步请求,加上token验证,环境试用微信小程序,可以修改文件中的ajax,进行封装自己的,比如用axios等 成功码采用标准的 200 到 300 和304 ,需要可以自行修改 ...
- .netcore持续集成测试篇之Xunit数据驱动测试一
系列目录 Nunit里提供了丰富的数据测试功能,虽然Xunit里提供的比较少,但是也能满足很多场景下使用了,如果数据场景非常复杂,Nunit和Xunit都是无法胜任的,有不少测试者选择自己编写一个数据 ...
- LeetCode——372. Super Pow
题目链接:https://leetcode.com/problems/super-pow/description/ Your task is to calculate ab mod 1337 wher ...
- android ——Toolbar
Toolbar是我看material design内容的第一个 官方文档:https://developer.android.com/reference/android/support/v7/widg ...
- Mybatis的工作流程
MyBatis工作流程 1:加载配置文件(mybatis-config.xml . *...Mapper.xml)并初始化, 将SQL的配置信息加载成为一个个MappedStatement对象(包括了 ...
- map的实现和柯里化(Currying)
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/11329874.html 作者:窗户 ...
- RabbitMQ的基本介绍及与Spring整合
一,场景回顾 最近做电商购物项目,在分布式中搜索服务,商品详情服务都是独立的模块.那么有一个问题就是: 商品的原始数据保存在数据库中,增删改查都在数据库中完成. 搜索服务数据来源是索引库,如果数据 ...
- python案例:实现一个函数版的名片管理系统
本案例使用了自定义函数以及对字符串的常见操作.判断语句和循环语句等知识. 要求 必须使用自定义函数,完成对程序的模块化. 名片信息至少包括:姓名.电话.住址. 必须完成的功能:增.删.改.查.退出. ...