详细谈谈中断

中断由于各种国内很多书籍对其各有各的定义,因此经常会出现理解上的歧义。同时对中断过程中涉及到的具体部件和程序也是如此,因此想要弄清中断具体的含义和过程,需要查阅一些具体实现的代码。
以下了参阅《深入理解Linux内核》《Linux内核涉及与实现》,从汤小丹的《计算机操作系统》中涉及到的中断过程进行详细的探索。

1.什么是中断,什么是异常

中断和异常是国内经常弄混的概念,有些将中断和异常分开,有些则认为异常是中断的一种,不同的不统一的说法加上以概念解释概念的方式,让人很混乱。
《深入理解Linux内核》第四章从中断的原始定义出发,给出的名词解释相对好理解些:
image.png
另外,书中也给出了lntel文档中异常和中断的分类,也可一看
image.png

image.png
image.png
总结:
中断一定是外部发生的送往CPU处理,异常则CPU内部发生。
国内的外中断指中断,内中断指异常。

2,.中断处理过程

对于中断的处理过程,几本国外教材并没有深入解释,汤小丹的《计算机操作系统》中相对详细的解释了整个过程
CB17671672B352F1B6526EB3658A11F9.png
E9A30280C5C6B349B31AF5D5C27D823C.png
9E385ABCB5D50B474420B43257F30C73.png
F87D5C624B079F125ED08EC38B900526.png
可以看到,中断过程并非完全由中断处理程序全部处理,而是有一个硬件——软件——中断处理程序这样一个逻辑链。

两个更深入的图

《深入理解Linux内核》《Linux内核设计与实现》两书中分别给出了中断的整个过程图:
《深入理解Linux内核》:
F87D5C624B079F125ED08EC38B900526.png
《Linux内核设计与实现》:

F87D5C624B079F125ED08EC38B900526.png
可以见到,不同书中,对中断处理程序的定义不同。
1.纯硬件的部分,只有中断控制器和处理器
2.软件部分有两类,处理具体中断的有些书叫做中断服务例程(图1),有些则叫做中断处理程序(图二)
而为具体服务程序保存一些必要参数的,保护CPU现场的,则有另一类代码。如图中的do_IRQ()前面的IDT[32]等;
而do_IRQ()则负责寻找和中断相关的中断服务例程。

关于是谁保存寄存器内容

另外,汤小丹的《计算机操作系统》中提到“硬件自动保存程序计数器(PC)和PSW(处理机状态字)”和“将所有寄存器压入中断栈”并不冲突,前者确实由硬件保存,后者则被另外的一些汇编代码完成,汤小丹这里没有说明白

《深入理解Linux内核》介绍了中断处理程序需要执行的相同代码(注意,《深入理解Linux内核》将do_IRQ()和其之前的步骤也算做中断处理程序的一部分,真正处理具体中断的则被称作中断服务例程)
image.png
![C4K6F~WY{RLD_MNU%X6O2N.png
从这一段话,可以知道,真正保存CPU寄存器的,一部分由硬件的控制单位自动保存(比如ss寄存器,在x86体系结构中其可以存储地址),另一部分则在do_IRQ()之前调用的一部分相同代码中的SAVE_ALL汇编宏指令存储到中断栈中。
(这里的控制单元就是Control Unit,在CPU内部,是其组成的一部分)

中断处理过程软件部分总结

因此,总结起来,整个软件过程如下:
1.运行一些共用的,为具体中断服务例程保存一些必要参数的汇编代码,保护CPU现场的,如图中的do_IRQ()前面的IDT[32]等;
2.do_IRQ()负责寻找和中断相关的中断服务例程。
3.运行中断服务例程,开始处理真正处理中断。
需要注意到的是,整个软件过程都算操作系统范畴。

中断处理过程硬件部分总结

介绍完软件,下面介绍硬件的处理过程,《深入理解Linux内核》中介绍了IRQ:
image.png
也就是说,硬件设备发出的信号从设备控制器用中断请求线(IRQ)向外发出信号到可编程中断控制器(PIC),此时已经脱离外设,进入计算机内部。可编程中断控制器接受处理该信号之后发向CPU处理器,即可产生CPU中断信号。
这之后,可以理解为,CPU保存上面谈到的两个寄存器内容,然后开始进入软件
详细过程:
(这里的控制单元就是Control Unit,在CPU内部,是其组成的一部分)
image.png
image.png

一些额外资料:

关于中断栈,可以查看下面这个博客理解
Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值