天天看點

linux核心--中斷和中斷處理(一)

    讓硬體在需要的時候再向核心發出信号。這就是中斷機制,先讨論中斷,進而讨論核心如何使用所謂的中斷處理函數處理對應的中斷。

一、中斷

  1)中斷

    中斷使得硬體得以發出通知給處理器。例如,在前幾鍵盤的時候,鍵盤控制器會發出一個中斷,通知作業系統有鍵按下。中斷本質上時一種特殊的電信号,由硬體裝置發向處理器。處理器收到中斷後,會馬上向作業系統反應此信号的到來,然後就由作業系統負責這些新到來的資料。硬體裝置生産中斷的時候并不考慮與處理器的時鐘同步也就是說中斷随時可以産生。是以,核心随時可能因為新到來的中斷而被打斷。

    當接收到一個中斷後,中斷控制器會給處理器發送一個電信号。處理器一經檢測到此信号,便中斷自己的目前工作轉而進行中斷。此後,處理器會通知作業系統一經産生中斷,這樣,作業系統就可以對這個中斷進行适當的處理了。

    不同的裝置對用不同的中斷,每個中斷通過一個唯一的數字辨別。這些中斷值通常稱為中斷請求(IRQ)。每個IRQ線都會被關聯一個數值量。例如:IRQ 0是時鐘中斷,而IRQ 1是鍵盤中斷。但并非所有的中斷号都是這樣嚴格定義的。對于連結在PCI總線上的裝置而言,中斷是動态配置設定的。而且其他費PC的體系結構也具有動态配置設定可用中斷的特性。實際上,硬體發出中斷就是為了引起核心的關注。

  2)異常

    異常與中斷不同,它在産生時必須考慮與處理器時鐘同步。實際上,異常頁常常成為同步中斷。比如在除數為0時,處理器就會産生一個異常。因為許多處理器體系結構處理異常與進行中斷的方式類似。

二、中斷處理程式

    相應一個中斷的時候,核心會執行一個函數,該函數叫做中斷處理程式或中斷服務例程。産生中斷的每個裝置都有一個相應的中斷處理程式。例如,由一個函數專門處理來自系統時鐘的中斷,而另外一個函數專門處理由鍵盤産生的中斷。一個裝置的中斷處理程式是它裝置驅動程式的一部分--裝置驅動程式時用于對裝置進行管理的核心代碼。

    中斷處理程式與其他核心函數的真正差別在于,中斷處理程式是被核心調用來響應中斷的,而它們運作于我們稱之為中斷上下文的特殊上下文中。中斷可能随時發生,是以中斷處理程式也就随時可能執行。是以必須保證中斷處理程式能夠快速執行,這樣才能保證盡可能快地恢複中斷代碼的執行。是以,盡管對硬體而言,作業系統能迅速對其中斷程序服務非常重要;當然對系統的其他部分而言,讓中斷處理程式在盡可能短的時間内完成運作也同樣重要。

三、上半部與下半部的對比

四、注冊中斷處理程式

五、編寫中斷處理程式

六、中斷上下文

七、中斷處理機制的實作

八、/proc/interruts

九、中斷控制

繼續閱讀