中断、异常与并发

0. 前言

记得在学习《计算机系统组成原理》和阅读CSAPP时,对异常控制流(异常)、并发等内容似懂非懂、雾里看花。

在学习了汇编语言课程后,才总算有所领会,于是打算进行相应的归纳。

1. 中断

1.1. 解释

何为中断?书本上的一种解释如下:

中断(interrupt)是一种使CPU挂起正在执行的程序而转去处理特殊事件的操作。

不严谨地说,中断就是“函数”,这种“函数”可以由当前程序调用,也可以由操作系统调用,或者由硬件调用,相当于“库函数”。

但,中断比库函数级别更高,库函数需要引入库才能调用,而中断可以不引入任何库直接调用。

而且,当没有操作系统时,中断也可以调用

在汇编语言中,程序可以通过int n调用中断,n是中断号。

1.2. 中断向量表(Interrupt Vector Table,IVT)

实模式下,当程序通过int n调用中断时,系统是如何找到对应的中断程序并跳转的呢?

在内存最低端的1KB空间中,存放着一个中断向量表。其中,每个中断向量占4个字节,顺序存放在中断向量表中,比如,0号中断向量在地址0*4处,1号中断向量在地址1*4处。

1.3. 中断向量

那什么是中断向量呢?

其实,中断向量就是中断处理程序的入口地址。4字节中,高两字节是入口地址的段值,低两字节是入口地址的偏移。

1.4. 中断处理程序

IA-32系列CPU能支持256种类型的中断(1KB即有256个中断向量),分别编号为0255,即中断类型号,简称中断号。其中,前32个中断(031)保留给处理使用,剩余的可由用户(比如操作系统)自定义。

每个中断都有各自的作用,并且对应一个中断处理程序。比如,属于内部中断的0号中断,是出现除0时,执行相关操作;10号中断是显示I/O中断,提供给用户调用。

1.5. 中断响应过程

实模式下的IA-32系统CPU为例,中断响应和返回过程,由硬件完成,步骤如下:

  1. 根据int n指令取得中断号
  2. 将标志寄存器值flags压栈
  3. 关闭外部中断和单步中断(IFTF标志位清0)
  4. 中断返回地址的段值cs和偏移ip压栈
  5. 根据中断号,从中断向量表中取得中断处理程序的入口地址
  6. 跳转至中断处理程序
  7. 执行中断处理程序......
  8. 中断返回时,从栈中恢复ip,cs,flags

可以看出,中断响应和函数调用过程十分相似。而存取寄存器(cs,ip,flags)的操作,也就是上下文切换

1.6. 中断类型

  • 内部中断:发生在CPU内部,也称软件中断。比如,0号除法出错中断,1号单步中断,用户调用int n指令引起的中断。

  • 外部中断:发生在CPU外部,由硬件引起,也称硬件中断。

    • 可屏蔽中断:由INTR传给CPU,如果标志位IF为0,则CPU不响应。

    • 不可屏蔽中断:由NMI传入,要求CPU及时处理,比如电源掉电、存储器出错等。

2. 异常

2.1. 异常的由来

在早期的Intel 8086/8088微处理器中,并不区分异常和中断,统称为中断。所以,上述中断内容都是在 Intel 8086 实模式基础上的,而下述异常内容将在操作系统保护模式基础上。

80286开始,Intel统一把内中断称为异常/内部异常,而把外中断称为中断/外部中断

在CSAPP中,把外中断也纳入了异常的范畴。

当异常或中断发生时,正在执行的逻辑控制流被打断,CPU转而执行异常处理程序,从而引起异常控制流

2.2. 异常的分类

  • 故障:指令执行产生的意外事件,如页故障、除法出错等。返回原程序的当前指令。
  • 陷阱:“预先安排”的异常,比如,系统调用(提供用户与操作系统内核交互的接口)、断点设置等。返回原程序的下一条指令。
  • 终止:执行指令时发生的严重错误,比如CPU出现问题等。不返回原程序。

2.3. 中断描述符表(Interrupt Descriptor Table,IDT)

不同于实模式,IA-32保护模式,借助中断描述符表来存储异常处理程序或中断处理程序的入口地址,并且由IDTR寄存器来指定IDT表的位置。

中断描述表与中断向量表类似,共有256个表项,每个表项是一个8字节的中断门描述符陷阱门描述符任务门描述符

(为什么总要取一些奇奇怪怪的名字呢?故意让人看不懂吗?不懂不懂)

Linux内核在系统初始化时,会设置好IDT中的每个表项。

3. 并发

中断与异常有着千丝万缕的关系,但并发又跟这两者有何关系呢?

3.1. 并发的本质

首先,我们必须意识到,平时遇见的并发(多个进程同时运行),本质上是快速交替运行的进程(不考虑多CPU)。

而在某一个时刻,只能有一个程序在CPU运行,但由于各进程快速(毫秒级)交替运行,所以我们看起来像是同时运行的

究其本质,并发,是由操作系统根据一个定时器中断,每过一会儿(xx毫秒)就帮我们切换运行程序,从而营造出来的假象

3.2. 定时器中断

在实模式中,硬件定时器每隔55ms会发出一次中断请求,CPU接收到定时请求后,会转入8号定时器中断处理程序。

8号中断处理程序中,含有一条中断指令int 1CH,而1CH号中断处理程序并没有做任何工作,可以认为它只有一条中断返回指令。

如果我们将1CH中断处理程序设置为自定义的程序(将自定义程序的入口地址,填入中断向量表1CH*4地址处),那么每过一段时间自定义程序便会被调用。

假如有主程序A和自定义的1CH中断处理程序B,那么A、B程序会相互切换执行,每过55ms执行B程序,然后中断返回执行A程序。

由于55ms肉眼无法察觉,所以我们会看到A、B程序同时运行的假象。

3.3. 浅析多进程并发

现在,我们将主程序A看作操作系统,程序B看作进程切换程序

那么,我们可以很明朗地发现,只要在程序B中,不断保存、恢复进程的上下文(进程的寄存器等),就可以实现进程的切换。

每过55ms(或者更久)执行程序B,切换运行进程,并跳转到切换后的进程执行。从而实现多进程并发运行。

到这,是不是觉得并发竟然如此简单呢?

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

推荐阅读更多精彩内容