中斷和異常

2021-10-09 10:46:53 字數 2662 閱讀 2725

這周主要學習了中斷和異常,在這裡把整章知識梳理一下,做乙個總結。(工作佇列沒有完成)

一、什麼是中段

中斷(外部中段)是對外部裝置而言,i/o需要服務時處理器去相應。

異常(內部中斷)是為了解決機器執行時所出現的某些隨機事件及程式設計方便而出現的。

中斷可分為遮蔽中斷和不可遮蔽中斷;異常分為故障、陷阱和終止三類。

二、中斷程式的基本框架

註冊中斷函式:通過request_irq函式申請一根中斷請求線。

第乙個函式:中斷號,對應中斷控制器上irq的編號。

第二個函式:irt_handler_t型別個函式指標,handler所指向的函式即為需要具體實現的中斷處理程式。

第三個函式:標誌位。irqf_shared:多個裝置可共享一條irq線。irqf_disabled:在執行該中斷服務程式時會遮蔽所有其他的中斷。irqf_sample_random:裝置看作是事件隨機發生源。

第四個函式:請求中斷的裝置名稱。

第五個函式:void型的指標型變數用於共享中斷線。當乙個中斷服務程式需要釋放時,將提供唯一的標識資訊,以便在共享中斷線的眾多中斷服務程式中刪除指定的那乙個。

free_irq函式會登出相應的中斷處理程式,並釋放中斷線。如果中斷線是共享的,只釋放與mydev對應的中斷處理程式,除非為中斷線上的最後一員,此條中斷線才會被禁用。如果不是共享的,在釋放中斷處理程式的同時也將禁用此條中斷線。

附帶引數模組:首先定義兩個引數,然後用巨集module_param來接收引數。

三、中斷下半部分-tasklet

乙個使用tasklet的中斷程式首先會通過執行中斷處理程式來快速完成上半部分的工作,接著通過呼叫taklet使得下半部分的工作得以完成。tasklet以乙個資料結構形式存在,使用前必須得被初始化。初始化能夠通過乙個特定函式或者通過某些巨集定義宣告結構:

在這個結構體中,第乙個成員代表鍊錶中的下乙個tasklet.第二個代表tasklet的狀態,tasklet_state_sched表示此tasklet被排程且正準備執行;tasklet_state_run表示正在執行。count成員是引用計數器,為0時被啟用。func是乙個函式指標,指向tasklet處理函式,data為它的唯一引數。

在核心中有兩種方法建立tasklet_struct型別的變數,通常有兩種方法:靜態建立和動態建立。如下圖巨集定義中,通過兩種靜態建立的方法建立定義了乙個名為name的tasklet_struct型別的變數,將巨集中各個引數相應的賦值給name變數的各個成員。這兩種建立差異在於name變數的第三個成員count的賦值上。

我們對第三個變數atomic_init()進行解析:若給i賦值為0,相應的counter為0,tasklet可以被啟用,相反為1則不能被執行。

接下來分析動態建立:通過事先定義的指標來動態建立乙個tasklet.第249行和第250行沒理解清楚。

不管是靜態建立還是動態建立,都要有func引數,func是乙個函式指標,指向tasklet_handler函式。相當於中斷處理程式,需要自己實現。建立好之後,通過tasklet_schedule進行排程。通過次函式的呼叫,tasklet被掛起,等待機會被執行。(我覺得裡面是分析到硬體了,emmmmm看不懂還目前,先貼上。)

四、中斷下半部分-工作佇列

中斷上下文:硬體傳遞過來的引數和核心儲存的環境,主要是被中斷的程序的的環境。

核心上下文:當前程序的程序上下文(使用者空間的一些暫存器、變數),表現出程序的一些特性,因此可以被執行。

中斷下半部分的另一種方式,主要是實現tasklet不能實現的工作,主要是工作佇列機制可以睡眠。在該機制中,核心在執行中斷的剩餘工作時就處在程序上下文,將推後的工作交給工作者執行緒的核心執行緒去完成。

work_struct結構:改變了型別(原子型別)的data為之前版本pending和wq_data的複合體,entry鏈結所有工作的鍊錶,形成工作佇列。第三個為函式指標,指向工作佇列。

中斷和異常

中斷和異常 中斷訊號的處理方式 分緊急部分和不緊急部分 中斷處理 必須能夠重入,以便能夠中斷巢狀 中斷和異常的產生 乙個irq interrupt request 代表中斷控制器上的一根中斷線,和乙個中斷向量 單cpu 可程式設計中斷控制器 pic 多cpu 改進的可程式設計中斷控制器 apic 乙...

中斷和異常

中斷通常定義為乙個事件,該事件改變處理器執行的指令順序。中斷通常分為同步中斷與非同步中斷。異常是同步的,i o中斷是非同步的。中斷可以分為 i o裝置發出的中斷請求 irq 都可以被遮蔽,乙個中斷被遮蔽以後,控制單元就忽略他。只有硬體故障等幾個危急事件才是非遮蔽中斷。異常可以分為 可以糾正的異常,例...

中斷和異常

1 中斷機制的誕生 早期計算機,各程式只能序列執行,系統資源利用率低,為了解決這個問題,從而誕生了作業系統 作為計算機的管理者 引入中斷機制,實現了多道程式併發執行。本質 發生中斷就意味著需要作業系統介入,開展管理工作。2 中斷的概念和作用 1 當中斷發生時,cpu立即進入核心態。2 當中斷發生後,...