第八章-异常控制流(1)

异常控制流

如果程序计数器一直按照内存相邻的地址来执行指令,那么执行过的指令序列是平滑的。但是这种平滑的过程通常不会长久,因为会有程序调用,返回,跳转等指令,使得平滑流突变。

还有一些突变是由于其他原因引起的,如硬件定时器定期产生信号,事件必须得到处理。或网络适配器收到了一个包,必须存放在内存中等。这种突变称为异常控制流(Exceptional Controal Flow,ECF)。

异常

异常就是控制流中的突变,用来相应处理器状态中的某些变化。

image.png

在任何情况下,处理器检测到有事件发生时,就会通过一张叫异常表的跳转表,进行一个间接过程调用,运行专门处理此类事件的操作系统子程序(异常处理程序)。处理完成后根据引起异常的事件类型,回到事件发生时的指令,或发生时的下一条指令,或终止被中断的程序。

异常处理

异常表的结构:

image.png

在系统启动时,由操作系统分配和初始化。表的起始地址放在异常表基址寄存器中。

通过异常号与基址,获取异常程序处理地址:

image.png

异常的类别

1. 中断

中断是异步发生的,即是来自处理器外部I/O设备的信号的结果。而不是处理器内部指令产生的,所以说是异步的。

外部通过向处理器芯片上的一个引脚发信号,并将异常号放到系统总线上,来出发中断,这个异常好号标识了引起中断的设备。

CPU执行完当前指令会去执行中断程序,然后回到下一条指令继续执行。

2. 陷阱

陷阱是有意的异常,主要用途是在用户程序和内核之间提供一个像过程调用一样的接口,叫系统调用。

比如读文件,创建新进程,加载新程序,终止当前程序,都需要向内核请求服务。处理器提供了一条特殊的 syscall n 指令,来调用服务n。

普通的函数运行在用户模式中,限制了函数可以执行的指令类型,且只能访问与调用函数相同的栈。系统调用运行在内核模式中,内核模式运行系统调用执行特权指令,并访问定义在内核汇中的栈。

3. 故障

故障由错误情况引起,可以被故障处理程序修正。

如果被修复了,会返回时重新执行当前指令。否则,返回到内核的abort例程,会终止引起故障的应用程序。

缺页是一个经典的异常。

4. 终止

终止时不可恢复的致命错误造成的结果,通常是硬件错误。

进程

现代的操作系统会提供给程序一个假象,即程序似乎是独占处理器和内存的。

系统中的每个程序都运行在某个进程上下文中,上下文是由程序正确运行所需的状态组成的,状态包括存放在内存中的程序的代码和数据,栈、通用寄存器内容、程序计数器、变量环境以及打开问阿金描述符集合。

1. 逻辑控制流

一个程序对应的程序计数器的值构成的序列,交逻辑控制流,简称逻辑流。

2. 并发流

一个逻辑流的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发地执行。

多个流并发地执行一般现象称为并发(concurrency)。一个进程和其他进程轮流运行的概念称为多任务。一个程序执行它的控制流的一部分的每一时间段叫时间片。因此多任务也叫时间分片。

如果两个流并发运行在不同的处理器核或计算机上,则称为并行流(parallel flow),并发地运行,且并行地执行。

3. 用户模式和内核模式

处理器通常用某个控制寄存器中的一个模式位来提欧共这种功能,寄存器描述了进程当前享有的特权。在内核模式的进程可以执行任何指令,且能访问系统中的任何内存位置。

4. 上下文切换

上下文切换是由内核完成的。

在进程执行的某些时刻,内核可以决定抢占当前进程,并重新开始一个先前被抢占了的进程。这种决策叫调度,由内核中的调度器的代码处理的。

上下文切换:

  • 保存当前进程上下文

  • 恢复先前某个被抢占的进程被保存的上下文

  • 将控制传递给这个新恢复的进程

进程控制

获取PID的方法:

image.png

进程的创建:

image.png

子进程是父进程的一分拷贝,除了PID不同,其他基本相同。(即在不同的地址空间中,有相同的拷贝)

fork之后,子进程会沿着fork之后的那条语句继续执行下去。

僵死进程(僵尸进程)

子进程已经执行完毕,但是内核并不会清除掉子进程,直到被父进程回收。父进程回收子进程时,内核会将子进程的退出状态传递给父进程,然后再抛弃已终止的进程。一个终止了还未被回收的进程称为僵死进程。

image.png

pid>0表示进程ID等于PID的子进程。-1表示所有子进程组成的集合。其中一个终止就会返回PID。

信号

一个信号就是一条小消息,通知进程系统中发生了一个某种类型的事件。

通常异常都是由内核异常处理程序进行处理的,正常情况下,对用户进程是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。

传送一个信号到目的进程的步骤:

image.png
image.png

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容