Exceptional Control Flow

当我们打开计算机,他只是执行一个接一个的指令,直到我们关闭计算机,如果计算机有多个CPU核心,那么每个核心会一次交替执行命令,指令序列称为【控制流】,硬件正在执行的实际指令序列称为【物理控制流】。

Altering the Control Flow

实际上我们可以改变指令的顺序,比如【分支和跳转】以及【过程调用和返回】

我们需要的是称之为【异常控制流】的机制,因为它超出了我们在程序中看到的正常控制进程。

Exceptional Control Flow【异常控制流】

系统中所有的级别都存在【异常控制流】

低级别的系统中有Exception。

高级别的系统中,比如在一个进程中,【上下文切换】就是一个异常控制流的典型实例,

你在一个进程执行语句指令,然后你突然在另一个进程中执行语句指令。

更高的层次上是在软件层次,我们有一个【信号】的定义,这是通过操作系统软件实现的。

Exceptions

异常是将控制权转移到操作系统内核,【内核】是操作系统的内存驻留部分,操作系统提供各种程序,如列出文件,更改目录,列出当前进程,所有的这些东西构成了操作系统,内核是操作系统中始终驻留在内存中的一部分。异常实际上是将低级别的控制权转移到操作系统,你正在执行用户代码,然后某些情况发生在某些【事件】上,我们称之为是事件引起了系统状态的一些变化。为此,异常将控制权从用户代码转移到内核态中的代码。

Exception table【异常表】

每种类型的事件都有一个唯一的【异常编号】,它用作跳转表的索引,称为【异常表】,当异常k发生的时候,硬件使用k作为此表的索引,得到处理该异常的处理程序的地址,每次事件k发生的时候,都会调用处理程序(handler)k。

Asynchronous Exceptions (Interrupts)

异步异常是由于处理器外部发生的状态变化造成的,它通过设置处理器的中断引脚,发生中断后,处理程序返回到下一条指令。当中断程序运行时,比如一个小暂停,然后程序可以继续运行正常,通常在后台完成,不影响程序的执行。

举个例子,所有的系统都有一个内置的计数器,每个几毫秒就会关闭一次,当定时器熄灭的时候,他会将中断引脚设置为高电平,并且会有一个特殊的异常编号用于定时器中断,我们需要它来允许再次获得对系统的控制, 我们需要它来允许内核再次获得对系统的控制,否则用户程序可能会陷入无限循环中永远运行,无法让操作系统获得控制权

来自I/O设备的中断也是一个常见的例子。这里要注意有很多面试喜欢问为什么ctrl-c可以中断linux运行的程序,本质上就是这里的解释。

我的理解就是:由于ctrl-c是一个event,操作系统会对event作出回应抛出异常,将控制权转移到操作系统进行处理,发送信号设置处理器的中断引脚。(当然不知道总结的对不对,其实还是有点懵的lol)

Synchronous Exceptions

trap是指程序通过【系统调用System call】接口,从内核中请求各种功能,内核为请求提供了对应的响应,然后将控制权返回给调用程序那里的函数。

abort不是有意的并且是不可恢复的

System Calls

通过以上可以看到异常、或者非常低层的控制转移是由硬件和操作系统软件实现的。

Process(进程)

Multiprocessing:The illusion

表面上看起来好像一个进程有独特的访问权限,有各自独立的内存,但是实际上。。。

Multiprocessing: The (Traditional) Reality

在具有多个核心的现代系统上,操作系统将在这些多核上安排进程,如果没有足够的核心来处理这些过程,那么它将进行【上下文切换】。

Concurrent Processes

上图中,A和C A和B是并发的,而B和C之间不是并发,是sequential的(因为A从开始到结束的时候一直都在运行)

User View of Concurrent Processes

Context Switching【上下文切换】

进程是由一个叫kernel的共享的存储驻留的操作系统代码所管理的。

Process Control 【进程控制】

System Call Error Handling

linux系统函数如果出现错误,通常返回-1,然后他们将设置一个名为errno的全局变量来指示原因。

当我们调用系统函数的时候有硬性的条件规定:必须检查使用的函数的返回值,如果不检查,可能碰到很大的麻烦。唯一的例外是方法没有返回值,如exit或者free函数

Obtaining Process IDs

Creating and Terminating Processes

Terminating Processes

Creating Processes

我们无法保证是子进程先进行还是父进程先进行。fork函数返回的时候,可能会决定先安排子进程,或者也能决定先安排父进程。

Reaping Child Processes

Zombie Example

wait: Synchronizing with Children

execve: Loading and Running Programs

使用fork和execve组合来打开进程,最后面几分钟听的有点发懵,美国时间凌晨也快2点了,睡觉了,要猝死了。

CMU 15-213 Introduction to Computer Systems学习笔记(13) Exceptional Control Flow: Exceptions and Process相关推荐

  1. Introduction to Computer Networking学习笔记(十五):Queue Model 包交换中的缓冲模型

    本章知识点比较零散,因此一篇文章进行总结,并且不具有连贯性,仅记录自己认为有价值的内容. 将较大的包拆分为小包进行传输,可以减小端对端延迟,原因如下图: 数据传输时,突发大量的数据包会增加延迟,简单周 ...

  2. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  3. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  4. CMU15-213学习笔记(六)Exceptional Control Flow

    CMU15-213学习笔记(六)Exceptional Control Flow 程序的正常执行顺序有两种: 按顺序取下一条指令执行 通过CALL/RET/Jcc/JMP等指令跳转到转移目标地址处执行 ...

  5. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

  6. Excel VBA 学习笔记13:单元格的格式

    Excel VBA 学习笔记13:单元格的格式 NumberFormat 属性 (Excel) vba excel 单元格格式设置 Excel VBA 单元格格式 python解决SNIMissing ...

  7. Linux学习笔记13

    Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...

  8. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...

  9. 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...

  10. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略

    <量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...

最新文章

  1. OpenCV实现0到9数字识别OCR
  2. javaScript实现字符串首字母大写
  3. 【错误记录】Error creating bean with name: Unsatisfied dependency expressed through field
  4. easyui datagrid 浏览器像素及改变表、列宽问题
  5. cmd输入pip报错_使用Pip管理Python的包
  6. mysql双主数据一致性_MySQL双主一致性架构优化 | 架构师之路-阿里云开发者社区...
  7. .net与.net core学习目录
  8. 一文搞定Redis五大数据类型及使用场景
  9. JAX-RPC 与 JAX-WS 的比较
  10. 13. 查看网络端口、配置网络
  11. linux 显卡驱动
  12. pgAdmin 3 电脑管家清除后服务消失
  13. cad怎么画立体图形教学_立体图形怎么画步骤 找CAD图形中心点的方法步骤图
  14. 在心中刻上你的名字,让思念如烟
  15. 笔试2022招商银行.分蛋糕
  16. 现实与理想(中国台湾大学彭明辉)
  17. 解决MacBook外置鼠标不灵敏,移动速度慢
  18. frameSet和iframe的基本理解
  19. 痞子衡职场经验与感悟分享 - 索引
  20. Line高关注度的背后暗藏什么玄机?

热门文章

  1. 远程执行命令不成功的问题
  2. IOS学习笔记-UINavgationController
  3. C# 线程同步 信号量 Semaphore
  4. 计算机科学与技术专业要选修的课程,计算机科学与技术专业课程探讨
  5. String:字符串常量池详解
  6. synchronized工作原理剖析(一)
  7. 面试题之序列化与反序列化
  8. border-radius的8个属性值_画半圆、叶子等
  9. 前端安全系列之二:如何防止CSRF攻击?
  10. ES6学习笔记 -- 尾调用优化