CSAPP:第八章 异常控制流1

关键点:异常

8.1 异常8.2 进程

  现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Control Flow,ECF)。异常控制流发生在计算机系统的各个层次。

8.1 异常

  异常是异常控制流的一种形式,它的一部分由硬件实现,一部分由操作系统实现。异常就是控制流中的突变,用来响应处理器中的一些变化.如图所示,当处理器状态发生一个重要的变化时,处理器正在执行某个当前指令Icurr。在处理器中,状态被编码为不同的位和信号。状态变化称为事件。


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

  • 处理程序将控制返还给当前指令Icurr,即当事件发生时正在执行的指令;
  • 处理程序将控制返还给Inext,如果没有发生异常将会执行下一条指令;
  • 处理程序终止被中断的程序

8.1.1 异常处理
  在系统启动时,操作系统分配和初始化一张称为异常表的跳转表,使得表目k包含异常k的处理程序的地址,如图8-2.


  在运行时,处理器检测到一个事件发生,并且确定了相应的异常号k。随后处理器触发异常,方法是执行间接过程调用,通过异常表的表目k,转到相应的处理程序。
8.1.2 异常的类别
  异常可以分为四类:中断(interrupt)、陷阱(trap)、故障(fault)和终止(abort),下表对这些类别属性做了点总结。

1.中断
  中断是异步发生的,是来自处理器外部的I/O设备的信号的结果。硬件中断不是由任何一条专门的指令造成的,从这个意义上说它是异步的。硬件中断的异常处理程序常常称为中断处理程序。图8-5描述了一个中断处理程序的过程。

2.陷阱和系统调用
  陷阱是有意的异常,是执行一条指令的结果。就像中断处理程序一样,陷阱处理程序将控制返回到下一条指令。陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
  用户程序经常要向内核请求服务,比如读一个文件(read)、创建一个新的进程(fork)、加载一个新的程序(execve)、或者终止当前进程(exit)。为了允许对这些内核服务的受控的访问,处理器提供了一条特殊的"syscall n"指令,当应用程序想要请求服务n时,可以执行这条指令。执行syscall指令会导致一个到异常处理程序的陷阱,这个处理程序解析参数,并调用适当的内核参数。图8-6描述了一个系统的调用过程。

3.故障
  故障由错误引起的,它可能能够被故障处理程序修正。当故障发生,处理器将控制转移给故障处理程序。如果处理程序能够修正这个错误,它就将控制返回到引起故障的指令,从而重新执行它。否则,处理程序返回到内核的abort例程,abort会终止当前应用程序。

4.终止
  终止是不可恢复的致命错误造成的结果,通常是一些硬件错误,终止处理程序从不将控制返还给应用程序。

8.2 进程

  进程的经典定义就是一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文中。上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器内容、程序计数器、环境变量以及打开文件描述符的集合。
  进程提供给应用程序两个关键抽象。

  • 一个独立的逻辑流,它提供一个假象,好像我们的程序独占地使用处理器。
  • 一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统。

8.2.1 逻辑控制流
  考虑一个运行着三个进程的系统,如图所示。处理器的一个物理控制流被分成了三个逻辑流,每个进程一个。每个竖线表示一个进程逻辑流的一部分。在这个例子中,三个逻辑流的执行是交错的。进程A运行一会儿,然后是进程B开始运行到完成。然后是进程C运行了一会儿,进程A接着运行直到完成。最后是进程C可以运行到结束了。

  图8-12的关键点在于进程是轮流使用处理器的。每个进程执行它的流的一部分,然后被抢占(暂时挂起),然后轮到其他进程。
8.2.2 并发流
  一个逻辑流的执行在时间上与另一个流重叠,称为并发流。这两个流并称为并发的运行。更准确的说,流X和流Y互相并发,当且仅当X在Y开始之后和Y结束之前开始,或者Y在X开始之后和X结束之前开始。图8-12,A和B,A与C都是并发的运行。
  多个流并发地执行的一般现象被称为并发。一个进程和其他进程轮流的运行的概念称为多任务。一个进程执行它控制流的一部分的每一时间段叫做时间片。因此,多任务也叫做时间分片。
  注意,并发流的思想与流运行的处理器核数或者计算机数无关。如果两个流在时间上重叠,那么它们就是并发的,即使它们运行在同一个处理器上。如果两个流并发的运行在不同的处理器核或者计算机上,那么我们称它们为并行流,它们并行的运行并且并行的执行。并行流是并发流的一个真子集
8.2.3 私有地址空间
  进程也为每个程序提供一个假象,好像它独占地使用系统地址空间。

8.2.4 用户模式和内核模式

  • 内核模式(又叫超级用户模式),可以执行任何指令,访问任何内存位置。
  • 用户模式,不允许执行特定权限的指令。

CSAPP:第八章 异常控制流1的更多相关文章

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

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

  2. csapp:第八章 异常控制流ECF

    第八章 异常控制流ECF 8.1 异常 Exception graph LR E[异常Exception]-->E2[中断:异步异常] E-->E3[同步异常] E3-->陷阱 E3 ...

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

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

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

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

  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. 接触Java23天

    根据老师的要求写了一段然后在评讲的时候在修该一些: 猫的: public class Cat extends Animal{ public void methodCat(){ System.out.p ...

  2. Hibernate入门(九)级联删除

    Hibernate级联删除 上一篇文章学习了级联保存和更新,这个级联删除应该很好理解的.一样的道理,删除一方,同时删除有关联的一方. https://www.cnblogs.com/deepSleep ...

  3. Swap file ".BranchModel.class.php.swp" already exists!

    在 Linux 下的 vim 编辑过程中,由于某种原因异常退出正在编辑的文件,再次编辑该文件时,会出现如下提示: 1.解决方法:直接 ll -a -a 列出目录下的所有文件,包括以 . 开头的隐含文件 ...

  4. jQuery效果之雪花飘落

    实现思路 1.在一定的频率下在页面中生成一定数目的雪花从上往下飘落: 2.在指定的时间内飘落后移除页面: 3.可设置雪花的大小,在一定范围内随机雪花大小: 4.什么时间后清除生成雪花,停止函数. js ...

  5. 2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构

    知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如T ...

  6. SAP MM 物料主数据采购视图中的字段'Var. OUn'的作用?

    SAP MM 物料主数据采购视图中的字段'Var. OUn'的作用? 物料主数据采购视图里有一个字段,叫做'Var. OUn'的, 如下图: 这个字段,笔者之前所参与的项目里,从来没有用过.所以,笔者 ...

  7. SQL分组函数

    分组函数是对表中的多行进行操作,而每组返回一个计算结果.常用的分组函数包括: 函数 语法格式 函数描述以及注意事项 AVG AVG([distinct|all] expr) 返回一个数字列或计算列的平 ...

  8. Xamarin.Forms 使用本地数据库之 SQLite

    前言 Xamarin.Forms支持使用SQLite数据库引擎.本文介绍了Xamarin.Forms应用程序如何读取和写入数据到使用SQLite.Net的本地SQLite数据库. 在Xamarin.F ...

  9. Android 自定义AlertDialog的实现

    Android默认的AlertDialog太单调,我们可以通过继承原生的Dialog来实现自定义的Dialog. 本文的自定义Dialog和原生的AlertDialog的创建方式类似,通过一个静态Bu ...

  10. codeforces 632C The Smallest String Concatenation

    The Smallest String Concatenation 题目链接:http://codeforces.com/problemset/problem/632/C ——每天在线,欢迎留言谈论. ...