第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的变化复杂问题时就没法使用上面的方法控制: 数据从磁盘或者网络适配器到达 指令除以了零 用户按下 ctrl+c 系统的计时器到时间 现代系统通过使控制流发生突变来对系统状态的变化做出反应,这些突变称为异常控制流. 异常控制流有四种实现机制: 1)异常(低层级):2)进程上下文切换:3)信号:4)非本地…
异常控制流 控制转移 控制流 系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关. 现代系统通过使控制流 发生突变对这些情况做出反应.我们称这种突变为异常控制流( Exceptional Control Flow,ECF) 异常控制流发生在系统的各个层次. 理解ECF很重要 理解ECF将帮助你理解重要的系统概念. 理解ECF将帮助你理解应用程序如何与操作系统交互 通过陷阱(trap)或者系统调用(system call)的ECF形式,向操作系统请求服…
CSAPP:第八章 异常控制流2 关键点:进程控制.信号 8.4 进程控制8.5 信号 8.4 进程控制   Unix提供了大量从C程序中操作进程的系统调用.8.4.1 获取进程ID  每个进程都有一个唯一的正数(非零)进程ID(PID).getpid函数返回调用进程的PID,getppid函数返回它父进程的PID 1#include <sys/types.h>2#include <unistd.h>3pid_t getpid(void);4pid_t getppid(void);…
CSAPP:第八章 异常控制流1 关键点:异常 8.1 异常8.2 进程   现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Control Flow,ECF).异常控制流发生在计算机系统的各个层次. 8.1 异常   异常是异常控制流的一种形式,它的一部分由硬件实现,一部分由操作系统实现.异常就是控制流中的突变,用来响应处理器中的一些变化.如图所示,当处理器状态发生一个重要的变化时,处理器正在执行某个当前指令Icurr.在处理器…
第八章 异常控制流ECF 8.1 异常 Exception graph LR E[异常Exception]-->E2[中断:异步异常] E-->E3[同步异常] E3-->陷阱 E3-->故障 E3-->中止 异常是异常控制流的一种形式,他一部分由硬件实现,一部分由操作系统实现. 在任何情况下,当处理器检测到有事情发生时,他就会通过一张叫做异常表(exception table)的跳转表,进行一个简介过程调用(异常),到一个专门用来处理这类事件操作系统子程序(异常处理程序 e…
从给处理器加电,到断电为止,处理器做的工作其实就是不断地读取并执行一条条指令.这些指令的序列就叫做 CPU 的控制流(control flow).最简单的控制流是"平滑的",也就是相邻的指令在存储器中是相邻的.当然,控制流不总是平滑的,不总是一条接一条地执行,总会有出现改变控制流的情况.我们知道的程序内部状态改变的机制有两条: 跳转和分支 调用和返回 这些机制局限于程序本身的控制.当系统状态(system state)发生改变的时候,以上机制就不能很好地应对复杂的情况,例如: 数据从磁…
第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 500~507 页,共 8 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/10165167.html ECF(Exception Control Flow,异常控制流)是I/O.进程和虚拟内存的共用基本概念. 在能够真正理解这些重要概念之前,我们需要真正的理解 ECF. 向磁盘写数据.从网络读取数据.创建一个新进程,以及终止当前进程,都是通过应用程序调用系统调用来实现的. 应用程序是…
本章主旨 第八章的目的是阐述清楚应用程序是如何与操作系统交互的(之前章节的学习是阐述应用程序是如何与硬件交互的) 异常控制流 异常控制流,即 ECF(exceptional contril flow) ECF 的重要性 ECF 对于程序员的重要性体现在以下几点: 理解 ECF 将帮助我们理解重要的系统概念 理解 ECF 将帮助我们理解应用程序是如何与操作系统交互的 理解 ECF 将帮助我们编写有趣的新应用程序 理解 ECF 将帮助我们理解软件异常如何工作 异常处理程序 在任何情况中,当处理器检测…
第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了第 508~530 页,共 23 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/10206004.html 进程是计算机科学中最深刻.最成功的概念之一.(尽管看了书中关于进程的很多描述,我还是理解不了这句话,不是说怀疑这句话的正确性,只是自己不能理解,或许以后看得多了就能理解了) 进程和应用程序的关系 “进程的经典定义就是一个执行中的程序的示例” 那么,是否可以将它们的关系类比于 Jav…
No57 只针对异常的情况才使用异常 异常应该只用于异常的情况下,它们永远不应该用于正常的控制流. No58 对可恢复的情况使用受检异常,对编程错误使用运行时异常 Java程序设计语言提供了三种可抛出结构(throwable):受检的异常(checked exception).运行时异常(run-time exception)和错误(error). 如果期望调用者能够适当地恢复,对于这种情况就应该使用受检的异常. 用运行时异常来表明编程错误.例如:数组访问下标越界. 错误往往被JVM保留用于表示…