Chapter 8: Exceptional Control Flow
概述:
我们可以用一种“流”的概念来理解处理器的工作流程,PC(Program Counter)依次为a0,a1,a2,...,an-1,这个序列可以称作control flow。当然我们并不总是按顺序执行,有时会遇到各种各样的异常使得an-1的下一个并不是an,最常见的就是交互设备的I/O。
这一章我们就研究下exception control flow在计算机中扮演的重要角色!
Exception:
Exception可以分为4种:Interrupt, Trap, Fault, Abort,主要区别如下:

操作系统在启动过程中会分配一个exception table,如图。每个exception有其对应数字,这些对应一般是约定俗成的,比如exception 128(0x80)为system call。当exception发生时,系统就会根据这个表寻常相应处理方法,即exception handler。所以咱们遇到异常时的步骤可以归纳为:exception -> handler -> return。


Process:
Process就是program加载入内存运行。我们同时运行多个进程其实只是一种错觉,单核处理器一次是只能运行一个进程的,但由于它的速度是在太快,所以我们感觉是多个进程在同时运行。这种情况我们称为concurrent,而parallel是指多核同时运行多个进程。
每个process有自己的private address space,这样不同的process之间不至于互相干扰。

每个process都有一个context记录其信息,这个context由系统内核维护,不同进程间的切换运行称作context switch。
Process Control:
一个process有三种状态:Running, Stopped或Terminated。在linux中用pid(process id)来标示每个process,新建一个process通过fork()函数,从父进程中新建一个子进程,两个进程运行同一个程序,fork()返回两次,将子进程的pid返回给父进程,将0返回给子进程。利用这个特性我们可以如下编程:
#include "csapp.h" /*本书配套的一个头文件*/ int main()
{
pid_t pid;
int x = ; pid = Fork();
if ( pid == ) { /*Child*/
printf("child : x=%d\n", ++x);
exit();
} /*Parent*/
printf("parent: x=%d\n", --x);
exit();
}
通过if (pid == 0)这个判断来区别父进程与子进程所要执行的代码段。
另一个常见的函数是execve(),用于在当前进程中加载另一个程序。
而对于进程的结束有一点要注意,就是当子进程terminates之后,内核并不会马上将它从系统中移除,而是等待父进程将它收割。如果一个terminated的进程没有被reaped,就称作zombie!!! 好可怕啊~~
Signal:
在高级的环境下,也就是软件方面的,我们用sinal来进行进程间的通信。并入说我们要关闭一个进程,就输入命令:(其中5000为所要关闭进程的pid)
# kill -
这个-9参数就是指号码为9的信号,即正常关闭signal。常见的还有15,强制关闭signal。
signal有些特性,归纳起来就是
Signals can block and signals aren't queued。
随想:
这一章有很多示例代码,可以多上机实践一下。
Chapter 8: Exceptional Control Flow的更多相关文章
- 《CS:APP》 chapter 8 Exceptional Control Flow 注意事项
Exceptional Control Flow The program counter assumes a sequence of values ...
- CSAPP Chapter 8:Exception Control Flow
prcesssor在运行时,假设program counter的值为a0, a1, ... , an-1,每个ak表示相对应的instruction的地址.从ak到ak+1的变化被称为control ...
- Core Java Volume I — 3.8. Control Flow
3.8. Control FlowJava, like any programming language, supports both conditional statements and loops ...
- SSIS的 Data Flow 和 Control Flow
Control Flow 和 Data Flow,是SSIS Design中主要用到的两个Tab,理解这两个Tab的作用,对设计更高效的package十分重要. 一,Control Flow 在Con ...
- Control Flow 如何处理 Error
在Package的执行过程中,如果在Data Flow中出现Error,那么Data Flow component能够将错误行输出,只需要在组件的ErrorOutput中进行简单地配置,参考<D ...
- 关于Control flow
1.一个package包含一个control flow并且一个或多个data flow. (这个项目叫做 Integration services project,提供了三种不同类型的control ...
- SSIS ->> Control Flow And Data Flow
In the Control Flow, the task is the smallest unit of work, and a task requires completion (success, ...
- Control Flow in Async Programs
Control Flow in Async Programs You can write and maintain asynchronous programs more easily by using ...
- A swift Tour(2) Control Flow
Control Flow 用 if 和 switch 来做条件语句,并且用for-in,for,while,和do-while做循环,条件和循环的括号是可以不写的,但是body外面的括号是必须写的 l ...
随机推荐
- SAP 参照sto订单创建外向交货BAPI
DATA: SHIP_POINT TYPE TVST-VSTEL, "装运点/接收点 NUM_DELIVERIES TYPE VBNUM, STOCK_TRANS_ITEMS WITH HE ...
- JS获取fileupload文件全路径
来自:http://hi.baidu.com/libos88/item/c61ab8bae472afe34ec7fdfb 最近在写个小网站,用到了fileupload控件来上传文件.因为程序的某些需要 ...
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- 【NOIP模拟】的士碰撞(二分答案)
Description
- Archlinux 安装小计
前阵子Fedora太不稳定,几乎不能正常使用了,同时也对版本形式的linux每次升级后各种扫尾和清扫工作感到有点厌倦,心里也非常想体验一下linux的滚动发行版,所以下定决心要干掉fedora,主流的 ...
- JAVA基础知识总结:八
面向对象语言的三大特性;封装.继承.多态 一.面向对象语言特性之封装 1.什么是封装? 一个类中某些属性,如果不希望外界直接访问,我们可以将这个属性作为私有的,可以给外界暴露出来一个访问的方法 使用封 ...
- Python2.7 中文字符编码 & Pycharm utf-8设置、Unicode与utf-8的区别
Python2.7 中文字符编码 & Pycharm utf-8设置.Unicode与utf-8的区别 zoerywzhou@163.com http://www.cnblogs.com/sw ...
- 03-从零玩转JavaWeb-创建类与对象
创建类创建对象 一.什么是成员变量 对象的一些状态特征使用成员变量表示 二.行为什么什么表示 对象的 行为 使用 方法 表示 三.如何创建对象 class 类名{0 ~ N个成员变量0 ~ N ...
- 微信小程序左滑删除功能
效果图如下: wxml代码: <view class="container"> <view class="touch-item {{item.isTou ...
- 谈谈今年很火的区块链 CDN
2017 年初,区块链被越来越多的人知道.区块链的概念其实很早就被提出来,曾经有人说过"区块链技术被认为是继蒸汽机.电力.互联网之后,下一代颠覆性的核心技术. 如果说蒸汽机释放了人们的生产力 ...