中断和异常

中断和异常.md

中断和异常的定义

中断(interrupt)指在程序执行过程中遇到急需处理的事件时,暂时中止现行程序在 CPU 上的运行,转而执行响应的事件处理程序,待处理完成后再返回断点或调度其他程序。
cpu对事件的响应.

中断的本质是处理器对外开放的实时受控接口。

中断和异常不同人的视角不同,有的统称为中断有的统称为异常,还有分别称呼的,这个并不重要.因为它背后的思想是一致的,
只不过是看待它的视角不同进行人为划分,后续会说明异常和中断区别.

为什么需要中断/异常机制,目的是什么

一下特性是中断和异常分别提供的:

  • 支持cpu和设备之间的并行
  • 实时交互的需要(即刻响应)
  • 优先级支持(对更紧急任务的支持)
  • 故障报警与处理
  • 保护性操作需要,防止破坏
  • 并行和进程操作/交互的需要(时间片)

中断和异常的区别

从发生源角度和处理方式角度划分为了中断和异常. 但是他们处理问题的方式和思路本质是一样的.

中断指I/O设备发出,也成为外中断.外部事件,正在运行的程序所不期望的
异常是正在执行的指令引发的,cpu执行指令本身出现问题=>响应错误/异常处理程序,执行系统调用(通过trap)

中断解决cpu和设备间并行操作;异常解决cpu执行指令时出现的问题处理(算数溢出/地址越界...)

外中断,也是中断,异步中断,是指来自处理器之外的中断信号,包括时钟中断、键盘中断、它机中断和外部设备中断。外中断又分可屏蔽中断和不可屏蔽中断,各个中断具有不同的优先级,表示事件的紧急程度,在处理高一级中断时往往会部分或全部屏蔽低级中断。因最开始的中断仅针对外中断,因此外中断也直接称作中断。

内中断,又称异常,同步中断,是指来自处理器内部的中断信号,通常是由于在程序执行过程中,发现与当前指令关联的、不正常的或错误的事件。内中断不能被屏蔽,一旦出现必须立即予以响应并进行处理,只是处理程序运行过程中可以选择是否屏蔽其它中断或屏蔽哪些中断。 内中断可细分为:
* 访管中断,由系统程序执行访管指令引起,可以看做机器指令的一种扩充;
* 硬件故障中断,如:电源失效、奇偶校验错误,总线超时;
* 程序性中断,如:非法操作、地址越界、页面故障、调试指令、除数为0和浮点溢出等。

中断由外部的中断控制器进行触发和响应.
异常由cpu内部的中断处理器电路控制.

中断和异常的区别 图

屏幕快照 2021-01-06 12.01.05.png

关于它们的区别有两点是需要注意的:
平常所说的屏蔽中断是不包括异常的,即异常不会因为CPU的IF位被清(关中断,指令:cli)而受影响,比如缺页异常,即使关了中断也会触发CPU的处理,回答了我上面红色部分疑问。
通常说的int 80h这种系统调用使用的中断方式实际上硬件上是理解为异常处理的,因此也不会被屏蔽掉,这也很好理解,int 80h这种中断方式是程序里主动触发的,对于CPU来说属于同步事件,因此也就属于异常的范畴。

为什么中断处理过程中不能被阻塞,而异常处理过程却可以?

这是一个从解决问题考虑的设计思路问题,中断是外部设备发出, 你没办法决定是否可以忽略,所以只能立刻响应, 至于做不做事是可以决定的.
异常所提供的服务本就是当前进程所需要的,故而当进程需要阻塞的时候,便会在异常处理程序中设置阻塞。所以它是你自己可控的你可以决定它是否可以阻塞.

中断/异常分类

图1


Scannable Document on Jan 6, 2021 at 9_18_46 AM.png

按中断源进行分类:发出中断请求的设备称为中断源。按中断源的不同,中断可分为
内中断:即程序运行错误引起的中断
外中断:即由外部设备、接口卡引起的中断
软件中断:由写在程序中的语句引起的中断程序的执行,称为软件中断

允许/禁止(开/关)中断: CPU通过指令限制某些设备发出中断请求,称为屏蔽中断。从CPU要不要接收中断即能不能限制某些中断发生的角度 ,中断可分为
可屏蔽中断 :
可被CPU通过指令限制某些设备发出中断请求的中断, 那是不是意味着进中断时disable整个中断,其实disable的都是可屏蔽中断?
不可屏蔽中断:
不允许屏蔽的中断如电源掉电

可屏蔽中断,
I/O设备发出的所有中断请求(IRQ)都产生可屏蔽中断,一个屏蔽的中断只要还是屏蔽的,控制单元就可以忽略它。
非屏蔽中断,有一些危险的事件才能引起非屏蔽中断,例如硬件故障,非屏蔽中断总是由CPU辨认。

中断/异常工作机制

硬件软件同时支持才能完成.
由硬件捕获响应,软件识别类型然后处理.
每个中断/异常都有个号码,由硬件设计者或者操作系统设计者定义

大致流程:
硬件捕获中断(某个针脚高电压)->根据内容按规矩编码(中断码)->写入中断寄存器
cpu执行指令周期的最后时刻扫描中断寄存器->暂停当前程序->保护现场->根据中断码去中断向量表查询->找到地址及相关状态参数->执行中断程序->恢复

中断/异常的软硬件支持结构

os:
操作系统设计时,提前设置中断/异常处理程序和向量表
设计和实现中断处理程序
设计处理程序的向量表
运行时响应中断

中断码:
    中断硬件对中断内容按规则编码,送入程序状态字寄存器(PSW)的相应位

中断向量表:
    硬件查的表
    映射中断处理程序

中断向量:
    它是内存单元
    存储处理程序入口地址,程序运行所需的处理机状态字

硬件:
中断寄存器:
保存中断信号
cpu响应:
在指令执行周期最后时刻扫描中断寄存器,看是否有
判断是否允许中断

硬件的工作:(捕获/响应)
* 捕获中断源请求
* 响应
* 控制权交给特定处理程序
软件的工作:(处理)
* 识别中断/异常类型
* 完成处理(软件本身为处理程序)

实施/保护模式

在X86中,分为实模式和保护模式,实模式通常是CPU启动到BIOS再到操作系统启动前的这段时间,操作启动初始化完成进入到保护模式。

补充知识

常见异常:

  • 算数溢出
  • 除零
  • 取数奇偶校验错
  • trap指令(system call)
  • 硬件改变cpu执行流程
  • 地址越界
  • 页错误/故障
  • 保护性异常(写仅读内存)
  • 断点指令

常见中断:

  • I/O中断
  • 时钟中断
  • 硬件故障

图2

中断允许触发器:在CPU内部设置一个中断允许触发器,只有该触发器置“1”,才允许中断;置“0”,不允许中断。

指令系统中,开中断指令,使中断触发器置“1” 关中断指令,使中断触发器置“0”

中断优先级:为了管理众多的中断请求,需要按每个(类)中断处理的急迫程度,对中断进行分级管理,称其为中断优先级。在有多个中断请求时,总是响应与处理优先级高的设备的中断请求。

中断嵌套:当CPU正在处理优先级较低的一个中断,又来了优先级更高的一个中断请求,则CPU先停止低优先级的中断处理过程,去响应优先级更高的中断请求,在优先级更高的中断处理完成之后,再继续处理低优先级的中断,这种情况称为中断嵌套。

中断又可以分为可屏蔽中断和非可屏蔽中断,
中断屏蔽是指 禁止 CPU 响应或禁止中断产生。前者是指 CPU 暂时不响应中断,等中断开放了被屏蔽的中断才能被响应,防止同级或高级的中断影响。后者是中断的事件发生时直接不允许提出中断请求也不能通知 CPU。

多重中断有几种处理方法,一种是串行处理,CPU 响应中断的时候屏蔽其它部分或所有中断;第二种是即时处理,运行中断的过程中,如果出现程序性中断(异常),一般情况表明此时中断处理程序有异常,应对其进行立即响应;第三种是嵌套处理,对于有些必须处理的高优先级的中断事件,采用屏蔽的方法不妥,因此允许某些中断处理程序时依然能够响应中断。操作系统必须预先规定每类中断的优先级,中断嵌套一般不会超过 3 重,过多嵌套会增加系统不必要的开销。

系统调用

系统调用使用trap实现, 是用户态到内核态的唯一入口(调用操作系统接口使用特权指令)
特殊指令:
是trap/访管指令,调用不同系统接口的统一入口,根据号和参数区分
流程:
通过trap一发异常-> 用户态切换到内核态->传参执行

用户参数如何传入内核

三种方式:

  1. trap指令自带参数(数量有限)
  2. 通用寄存器,通用方案,寄存器个数有限
  3. 内存中专门对战区

参考

http://www.yaoyanhuo.com/blog/interrupt/

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

推荐阅读更多精彩内容