Linux(内核剖析):19---中断总体概述
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
一、为什么要引入中断?
- 任何操作系统内核的核心任务,都包含有对连接到计算机上的硬件设备进行有效管理,如硬盘、蓝光碟机、键盘、鼠标、3D 处理器,以及无线电等。而想要管理这些设备,首先要能和它们互通音信才行。众所周知,处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然差强人意。既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来对它进行处理
- 那么到底如何让处理器和这些外部设备能协同工作,且不会降低机器的整体性能呢?轮询 (polling) 可能会是一种解决办法。它可以让内核定期对设备的状态进行查询,然后做出相应的处理。不过这种方法很可能会让内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行
- 更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动)。这就是中断机制
二、中断
- 中断使得硬件得以发出通知给处理器。例如,在你敲击键盘的时候,键盘控制器(控制键盘的硬件设备)会发送一个中断,通知操作系统有键按下
- 中断本质上是一种特殊的电信号,由硬 件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑与处理器的时钟同步——换句话说就是中断随时可以产生。因此,内核随时可能因为新到来的中断而被打断
中断的物理本质——电信号
- 从物理学的角度看,中断是一种电信号,由硬件设备生成,并直接送入中断控制器的输入引脚中——中断控制器是个简单的电子芯片,其作用是将多路中断管线,采用复用技术只通过一个和处理器相连接的管线与处理器通信
- 当接收到一个中断后,中断控制器会给处理器发送一个电信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。此后,处理器会通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当地处理了
三、中断号(IRQ)
- 不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标志。因此,来自键盘的中断就有别于来自硬盘的中断,从而使得操作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样,操作系统才能给不同的中断提供对应的中断处理程序
- 这些中断值通常被称为中断请求(IRQ)线。每个IRQ线都会被关联一个数值量一一例如,在经典的PC机上,IRQ 0是时钟中断,而 IRQ 1是键盘中断
- 但并非所有的中断号都是这样严格定义的。例如,对于连接在PCI总线上的设备而言,中断是动态分配的。而且其他非PC的体系结构也具有动态分配可用中断的特性
- 重点在于特定的中断总是与特定的设备相关联,并且内核要知道这些信息
- 实际上,硬件发出中断是为了引起内核的关注,例如:嗨 ,我有新的按键等待处理呢,读取并处理这些调皮鬼吧!
四、中断与异常的关系与区别
- 在操作系统中,讨论中断就不能不提及异常
- 异常与中断不同,它在产生时必须考虑与处理器时钟同步。实际上,异常也常常称为同步中断。在处理器执行到由于编程失误而导致的错误指令(如被除0除)的时候,或者是在执行期间出现特殊情况(如缺页),必须靠内核来处理的时候,处理器就会产生一个异常。因为许多处理器体系结构处理异常与处理中断的方式类似,因此,内核对它们的处理也很类似
- 本人的这些文章对中断(由硬件产生的异步中断)的讨论,大部分也适合于异常(由处理器本身产生的同步中断)
- 你已经熟悉一种异常:在前面讲述系统调用的时候(https://blog.csdn.net/qq_41453285/article/details/103802375)已经提过,在x86体系结构上如何通过软中断实现系统调用,那就是陷入内核,然后引起一种特殊的异常——系统调用处理程序异常。你会看到,中断的工作方式与之类似,其差异只在于中断是由硬件而不是软件引起的
五、中断处理程序
六、中断上下文、中断处理机制的实现
七、中断控制
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献19条内容
所有评论(0)