中 斷(讀書筆記)

2021-05-21 16:39:26 字數 1016 閱讀 1907

裝置的中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必要求中斷服務程式盡可能地短小精悍。但是這個良好的願望往往與現實並不吻合。在大多數的系統中,當中斷到來時,要完成的工作往往並不是短小的,它可能要求進行較大量的耗時處理。

為了在中斷執行時間盡可能短和中斷處理需要完成大量工作之前找乙個平衡點,這樣將中斷處理程式分解為:tophalf和bottomhalf。

top完成盡可能少的比較緊急的功能:它往往只是簡單的讀取register的中斷狀態並clear中斷標誌後進行「登記中斷」的工作。

「登記中斷」意味著將底部處理程式掛到該裝置的bottom執行佇列中去。

這樣,tophalf的速度就會很快,可以服務更多的中斷請求。

現在,中斷出倆工作的重型就落在了bottom上,它來完成中斷時間的絕大多數任務。bottom基本上做了中斷處理程式所有的事情,而且可以被新的中斷打斷。

問題:儘管top和bottom的結合能夠改善系統的響應能力。但是,僵化地認為linux裝置驅動中的中斷處理一定要分兩個部分這是不對的。如果中斷要處理的工作本身很少,則完全可以直接在頂半部全部完成。

bottom的實現機制

1:tasklet

第一步:定義乙個tasklet

struct tasklet_struct ;

//struct tasklet_struct my_tasklet;

第二步:定義乙個處理函式 void my_tasklet_func(unsigned long);

第三步:定義my_tasklet,與處理函式**

declare_tasklet(my_tasklet,my_tasklet_func,data);

#define declare_tasklet(name, func, data) /

struct tasklet_struct name =

第四步:在需要排程tasklet的時候引用乙個tasklet_schedule()函式就能使系統在適當的時候進行排程執行。

tasklet_schedule(&my_tasklet);

mysql運維 讀書筆記 Mysql 讀書筆記

mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...

struts in action讀書筆記

struts in action 學習筆記 一 struts的控制流 因為web 應用是動態的,所以很難表現 乙個真正固定的控制流 取決於環境,不同的方式下有很多不同的事情發生 特別是在web 應用中。但是事情仍然有乙個通用的秩序。如果你是個struts,應用框架,甚至web 應用的新手,這些流程剛...

讀書筆記 1

從我第一次看到windows就對它那花花綠綠的外表所吸引,大學兩年過來,時間又讓我從另乙個角度重新認識的了這些美麗的。本學期開始圖形程式設計的學習,探索windows圖形系統,並對gdi api,directdraw api進行學習。之所以寫部落格,第 一 是想勉勵自己不斷學習,讓大家監督 第 二 ...