中斷的 3個重要資料結構

2021-06-20 13:25:34 字數 1134 閱讀 1677

(1)中斷描述符 irq_desc——針對具體的irq線,乙個控制器可能對應多條irq線

資料結構 irq_desc 用於描述 irq 線的屬性與狀態,又被稱為中斷描述符(區別於之前所述的門描述符)。每個 irq 都有它自己的 irq_desc 物件,所有的 irq_desc 物件組織在一起形成 irq_desc 陣列,即中斷描述符陣列。irq_desc 結構在 include/linux/irq.h 檔案中定義。

(2)中斷控制器描述符 irq_chip——針對不同的控制器

資料結構 irq_chip 用於描述不同型別的中斷控制器。linux 可以支援多種中斷控制器,所以核心分別建立了多個 irq_chip 結構物件,與之相對應,比如,i8259a 對應 i8259a_chip,apic 對應 ioapic_chip、lapic_chip 等。irq_chip 在 include/linux/irq.h 檔案中的定義。

(4)中斷服務程式描述符 irqaction——針對具體的裝置(對應具體的服務程式)

如前所述,多個裝置可以共享同乙個 irq 線,但是這些裝置都有各自不同的中斷處理方式。這就要求我們在進行中斷處理時,能夠區分共享同乙個 irq 線的多個裝置,基於這個目的,核心引入了資料結構irqaction 來描述針對特定裝置所產生中斷的操作。irqaction 在 include/linux/interrupt.h 檔案中定義。

因為乙個中斷控制器控制多個irq線,因此,irq_chip裡應該有irq相關的定義,可以看到如下**:

struct irq_chip ;

主要的 irqaction 標誌

irqf_disabled                     執行中斷處理程式時,禁止對應的 irq 線

irqf_shared                        裝置同意

與其他裝置共享 irq 線

irqf_sample_random    可以被核心用作隨機數產生器

為了使中斷得到真正的處理,需要在裝置驅動程式中使用 request_irq 函式註冊乙個 irq。request_irq函式會為裝置建立 irqaction 結構物件,並將其新增到該 irq 的中斷請求佇列中,之後,裝置產生中斷時,就會通過該 irq 的中斷請求佇列找到已經新增的中斷服務程式進行處理。

三個重要的資料結構

struct file operations 儲存字元裝置驅動程式的方法,我的理解是使用該結構可以讓字元裝置認識誰在為自己服務。就像假如每個字元裝置都會有很多助手,有負責穿衣,有負責吃飯等等,那麼這個結構的作用就是具體化誰負責穿衣,誰負責吃飯。struct file 表示乙個開啟的檔案。struct...

重要的資料結構 堆疊

先declare下,此堆疊 stack 不是記憶體中的stack,而是一種十分重要的資料結構,後進先出 lifo 的資料結構。堆疊區別於樹和圖,是一種順序結構,它只能在一端進行增加元素,或者刪除元素的操作。這個所謂的 端 就是棧頂。乙個stack當且僅當乙個元素沒有時,是空棧。1 create乙個堆...

資料結構的重要性

資料結構的重要性大家都很明白。在大學也是電腦科學與技術的核心課程。但是資料結構地位很高,但是我們很多人都並沒有學好這門課程。在大學的時候,我自己是沒有電腦一族,雖然是由於經濟問題買不起電腦的原因,但還是很羨慕有電腦的同學。總感覺他們動手能力比我強。他們可以去編寫各種各樣程式。其實工作了很多年後回頭一...