中斷與異常詳解(五)

2022-09-16 02:39:10 字數 1799 閱讀 6785

隨著看的東西的增多,之前不明白的地方也開始有了眉目,所以更新前幾節的東西,歡迎指正。想想馬上就中斷返回,進入程序描述了,還是挺激動的呢。

中斷向量表多達256項

雖然預設使用的只有49條,但很明顯中斷服務程式必須支援smp,這也是在第三節為什麼在handle_irq_event(irq, ®s, action);對中斷進行實際處理之前會放棄多cpu鎖,那麼這段**自然就是多cpu可重入的了。但因為action是在有多cpu鎖的狀態下獲得的,所以就只會有乙個獲取成功的cpu去響應這條中斷線。

軟中斷向量表只有32項

預設只是用了4項,並將2.4之前版本的bh機制封裝到了0號軟中斷線上。

兩者其實有很多共通的地方

中斷前半部分分為32項cpu內部異常,與224項外部硬中斷。

其中0-31號cpu內部異常直接由自身處理了,不需要對中斷線進行管理,因為中斷線是多cpu共享的公共資源。

32-225號硬中斷線則是公共資源,需要每個cpu先去獲得處理許可權,才能對中斷線上的中斷請求予以響應。

同樣的軟中斷向量表也是公共資源,其設計初衷更理想,每個cpu不用申請就可以直接去處理,但這對**設計要求太高,所以才有tasklet機制去限制。

bh_task_vec[32]跟硬中斷線很像

設計為任意時刻每個bh_task_vec最多只能跑在乙個cpu上,但多個cpu可以跑多個bh_task_vec。硬中斷線通過鎖cpu,關中斷來保證乙個cpu只能響應一條硬中斷線,多個cpu可以響應多條中斷線,中斷線不被重複申請;而tasklet機制通過對tasklet_struct結構體中的state狀態量標記是否已被排程來保證每個bh_task_vec在任意時刻只能被排程到乙個cpu的0號軟中斷服務佇列中,多個cpu有多個0號軟中斷服務佇列,兩種不同的處理方式實現了同樣的公共資源分配與共享。

硬中斷線是在獲得多cpu鎖的情況下獲取中斷服務佇列並執行,所以多個cpu競爭這把自旋鎖,誰獲得鎖誰就響應;而tasklet機制是在獲得tasklet_struct中的排程許可權之後將bh_task_vec排程到某個cpu並執行,所以多個cpu競爭的是排程許可權,誰有排程許可權誰就拿走這個bh_task_vec(不是真正的取走,只是鏈結過去而已)。

這種同步模型可以總結為n:n生產者-消費者問題

多個生產者產生多種中斷請求,單個生產者不允許重複產生,就關了單個生產者的中斷線,多個消費者競爭響應中斷,可以理解為所有消費者都接到了通知,但需要在乙個全域性鎖中去拿中斷服務佇列,拿不到的就各回各家,拿到就響應。全域性鎖在硬中斷中就是多cpu鎖,在tasklet中就是每個tasklet_struct中的排程許可權。

不理解的地方歸納如下:

1、中斷巢狀到底是個何其神奇的東西?怎麼發生的?硬中斷線上的8個狀態到底如何改變,對應什麼狀態?

2、每個cpu的狀態資料結構中斷的軟中斷快取任務有何作用?tasklet_struct中的state狀態量的task_state_run狀態有何作用,獲取這把鎖失敗時候重新排程是幾個意思?沒想明白tasklet_trylock(t)失敗之後的流程。

3、spinlock自旋鎖的彙編,因為源**中要穿插其他節的東西,而且編譯之後有變化,所以理解困難。

4、看見多處對eflags進行儲存,用意何在?

還有很多,有空再說。

中斷返回

ret_from_intr, ret_from_exception, ret_from_sys_call根據之前壓棧的eflags和cs段資訊先去判斷是否需要返回使用者態,其中ret_from_sys_call需要再關一次中斷,並重新排程程序,看是否有訊號等待處理,最終返回。

如果ret_from_sys_call,不排程,沒有訊號量,不就直接restore_all了?那在哪兒開中斷呢?

中斷和異常概念詳解

中斷 interrupt 通常被定義為乙個事件,該事件改變處理器執行的指令順序。這樣的事件與cpu晶元內外部硬體電路產生的電訊號相對應。中斷通常分為同步 synchronous 中斷和非同步 asynchronous 中斷 在intel微處理器手冊中,把同步和非同步中斷分別稱為異常 exceptio...

中斷 異常與併發

title 中斷 異常與併發 date 2019 12 29 22 19 12 2.異常 3.併發 在學習了組合語言課程後,才總算有所領會,於是打算進行相應的歸納。何為中斷?書本上的一種解釋如下 中斷 interrupt 是一種使cpu掛起正在執行的程式而轉去處理特殊事件的操作。不嚴謹地說,中斷就是...

中斷與異常的區別

一 中斷 系統停止當前正在執行的程式而轉向其他服務,可能是因為優先順序高的請求 服務了,或者是因為人為安排中斷。中斷是屬於正常現象。異常 是由於軟體錯誤而引起的 二 中斷是cpu所具備的功能 硬體 異常是軟體執行過程中的一種開發過程中沒有考慮到的程式錯誤 軟體 三 1.中斷的概念 所謂中斷是指cpu...