第7章中断和中断处理之中断

任何操作系统内核的核心任务,都包含有对连接到计算机上的硬件设备进行有效管理,如硬盘、键盘、鼠标,以及无线电等。而想要管理这些设备,首先要能和它们互通音信才行。处理器的速度跟外围硬件设备的速度不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然差强人意。既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来对它进行处理。

到底如何让处理器和这些外部设备能协同工作,且不会降低机器的整体性能?轮询可能会是一种解决办法。它可以让内核定期对设备的状态进行查询,然后做出相应处理。不过这种方法很可能会让内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行。更好的办法是提供一种机制,让硬件在需要的时候再向内核发出信号。这就是中断机制。

7.1 中断

中断使得硬件得以发出通知给处理器。例如,在敲击键盘时,键盘控制器(控制键盘的硬件设备)会发送一个中断,通知操作系统有键按下。中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑与处理器的时钟同步——中断随时可以产生。因此,内核随时可能因为新到来的中断而被打断。

从物理学的角度看,中断是一种电信号,由硬件设备生成,并直接送入中断控制器的输入引脚中——中断控制器是个简单的电子芯片,其作用是将多路中断管线,采用复用技术只通过一个和处理器相连接的管线与处理器通信。当接收到中断后,中断控制器会给处理器发送一个电信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。此后,处理器会通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当地处理了。

不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标志。因此,来自键盘的中断就有别于来自硬盘的中断,从而使得操作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样,操作系统才能给不同的中断提供对应的中断处理程序。

这些中断值通常被称为中断请求(IRQ)线。每个IRQ线都会被关联一个数值量——例如,在PC机上,IRQ 0是时钟中断,而IRQ 1是键盘中断。但并非所有的中断号都是这样严格定义的。例如,对于连接在PCI总线上的设备而言,中断是动态分配的。而且其他非PC的体系结构也具有动态分配可用中断的特性。重点在于特定的中断总是与特定的设备相关联,并且内核要知道这些消息。

异常

在操作系统中,讨论中断就不能不提及异常。异常与中断不同,它在产生时必须考虑与处理器时钟同步。实际上,异常也常常称为同步中断。在处理器执行到由于编程失误而导致的错误指令时,或者是在执行期间出现特殊情况(如缺页),必须靠内核来处理的时候,处理器就会产生一个异常。因为许多处理器体系结构处理异常与处理中断的方式类似,因此,内核对它们的处理也很类似。

在x86体系结构上如何通过软中断实现系统调用,就是陷入内核,然后引起一种特殊的异常——系统调用处理程序异常。中断是由硬件而不是软件引起的。

 

猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/81777927
今日推荐