第八章 异常控制流ECF

8.1 异常 Exception

graph LR
E[异常Exception]-->E2[中断:异步异常]
E-->E3[同步异常]
E3-->陷阱
E3-->故障
E3-->中止

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

在任何情况下,当处理器检测到有事情发生时,他就会通过一张叫做异常表(exception table)的跳转表,进行一个简介过程调用(异常),到一个专门用来处理这类事件操作系统子程序(异常处理程序 exception handler)。当异常处理程序完成以后,根据引起异常的事件的类型,会发生以下3种情况的一种:

  1. 处理程序将控制返回给当前指令Icurr,既当事情发生时正在执行的指令。
  2. 处理程序将控制返给Inext,如果没有发生异常将会执行的下一条指令。
  3. 处理器中止被中断的程序。

异常的类别:

类别 原因 异步/同步 返回行为
中断 来自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的更多相关文章

  1. CSAPP:第八章 异常控制流1

    CSAPP:第八章 异常控制流1 关键点:异常 8.1 异常8.2 进程   现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Cont ...

  2. CSAPP:第八章 异常控制流2

    CSAPP:第八章 异常控制流2 关键点:进程控制.信号 8.4 进程控制8.5 信号 8.4 进程控制   Unix提供了大量从C程序中操作进程的系统调用.8.4.1 获取进程ID  每个进程都有一 ...

  3. [CSAPP笔记][第八章异常控制流][呕心沥血千行笔记]

    异常控制流 控制转移 控制流 系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关. 现代系统通过使控制流 发生突变对这些情况做出反应.我们称这种突变为异常 ...

  4. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  5. 深入理解计算机系统 第八章 异常控制流 part1

    本章主旨 第八章的目的是阐述清楚应用程序是如何与操作系统交互的(之前章节的学习是阐述应用程序是如何与硬件交互的) 异常控制流 异常控制流,即 ECF(exceptional contril flow) ...

  6. CSAPP学习笔记(异常控制流1)

    1:诸如子进程结束之后父进程需要被告知,有时候应用程序需要系统调用,内核通过上下文切换将控制从一个进程切换到另一个进程,还有一个进程发送信号到另一个进程时接收者转而到它的信号处理函数去执行等等,我们的 ...

  7. 深入理解计算机系统 第八章 异常控制流 Part1 第二遍

    第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 500~507 页,共 8 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/101651 ...

  8. 深入理解计算机系统 第八章 异常控制流 Part2 第二遍

    第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 508~530 页,共 23 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/10206 ...

  9. 深入理解计算机系统 第八章 异常控制流 part2

    关于进程,需要关注其提供给应用程序的两个关键抽象: 1.一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器 2.一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统 ...

随机推荐

  1. Spring的数据库编程浅入浅出——不吹牛逼不装逼

    Spring的数据库编程浅入浅出——不吹牛逼不装逼 前言 上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这 ...

  2. SpringBoot入门及YML文件详解

    SpringBoot 简介 微框架,与 Spring4 一起诞生,基于约定.生来为了简化 spring 的配置 优点 可以快速的上手,整合了一些子项目(开源框架或者第三方开源库) 可以依赖很少的配置快 ...

  3. The introduction of the book American daily English notes (enlarged edition)

    After reading the book of American daily English notes written by Linkun Yang[1], I think I should a ...

  4. WebService1

    一.什么是WebService(来源百度百科) Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述. ...

  5. 解读 PHP 的 P++提案

    解读 PHP 的 P++提案 周末看到一篇文章说 PHP 创始人提议将 PHP 拉出新分支,创建 P++ 语言.随后阅读了一下 Zeev Suraski 发起的这个邮件列表,大致了解了一下,这里做个解 ...

  6. 科普向 + 折腾向 ——你了解磁盘、分区、文件系统、GPT、UEFI吗?在笔记本上安装五个系统是怎样的体验?

    [Windows 7 + Windows 8 (PE) + Windows 10 + deepin-Linux + MacOS X] 前言:随着软硬件技术的发展UEFI引导逐渐取代传统BIOS引导,最 ...

  7. golang常用的http请求操作

    之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的 ...

  8. Appium+python自动化(三十一)- 元芳,你怎么看? - 日志收集-logging(超详解)

    简介 生活中的日志是记录你生活的点点滴滴,让它把你内心的世界表露出来,更好的诠释自己的内心世界,而电脑里的日志是有价值的信息宝库. 日志文件是专门用于记录系统操作事件的记录文件或文件集合,操作系统有操 ...

  9. abap简单实现form递归

    需求:根据物料号查询下层物料清单 DATA LV_MATNR LIKE ZMARA_TEST-MATNR VALUE '000000000000000001'. DATA: LT_MAT LIKE T ...

  10. Scrapy爬虫框架学习

    一.Scrapy框架简介 1. 下载页面 2. 解析 3. 并发 4. 深度 二.安装 linux下安装 pip3 install scrapy windows下安装 a.pip3 install w ...