《Linux内核设计与实现》之中断与中断处理程序

来源:互联网 发布:mysql全国地区数据库 编辑:程序博客网 时间:2024/06/05 17:49

1.中断的概念

       中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由OS负责处理这些新到来的信号。

       从物理学的角度看,中断是一种电信号,有硬件设备产生,并直接送入中断控制器的输入引脚上。然后再由中断控制器向处理器发送相应的信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。然后处理器会通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当的处理了。

       不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标识。这样,操作系统才能给不同的中断提供不同的中断处理程序。这些中断值通常被称为中断请求线。


2.中断处理程序

       在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序。产生中断的每一个设备都有一个响应的中断处理程序。例如,由一个函数专门处理来自系统时钟的中断,而由另外一个函数专门处理键盘产生的中断。一个设备的中断处理程序是它设备驱动程序的一部分(设备驱动程序是用于对设备进行管理的内核代码)。


3.中断处理机制的实现

     下图显示类中断从硬件到内核的路由。设备产生中断,通过总线把电信号发送给中断控制器。如果中断线是激活的,那么中断控制器就会把中断发往处理器。在大多数体系结构中,这个工作就是通过电信号给处理器的特定管脚发送一个信号。除非处理器禁止该中断,否则,处理器会立即停止它正在做的事,关闭中断系统,然后调到内存中预定义的位置执行那里的代码。这个预定义的位置是由内核设置的,是中断处理程序的入口。

     在内核中,中断的旅程开始于预定义的入口点,这类似于系统调用通过预定义的异常句柄进入内核。内核调用do_IRQ()函数。do_IRQ()函数计算出中断号,然后根据中断线上是否有一个优先的处理程序来做相应的处理。



4.中断控制

     Linux内核提供了一组接口用于操作机器上的中断状态。这些接口为我们提供了能够禁止当前处理器的中断系统,或屏蔽掉整个机器的一条中断线的能力。

     用于禁止和激活当前处理器的本地中断的语句为:


     用于禁止和激活整个系统中一条特定的中断线的指令:


     中断控制方法总结:


0 2
原创粉丝点击