Linux驅動基本理論之 非同步通知

2021-06-23 08:52:23 字數 1301 閱讀 5004

linux驅動基本理論之——非同步通知

在linux核心中的io模型基本分為4類:

1、同步阻塞i/o

2、同步非阻塞i/o

3、非同步阻塞i/o

4、非同步非阻塞i/o

同步:應用顯式地通過函式訪問資料,在此函式返回時就會得到結果(成功或失敗)。

非同步:應用會顯示地通過函式提出訪問或關注申請。資料到達時,硬體和驅動會通知應用,此時**一般不在讀寫訪問函式中,而是得到通知了再去有目的的訪問資料。

阻塞:在等待資料的過程中會休眠在此處,而非阻塞即函式不休眠立即返回,可執行接下來的**。

對於這4種機制,在《深入linux裝置驅動程式核心機制》中有講解,對於非同步非阻塞i/o其實核心提供了兩種實現乙個是aio,另乙個就是fasync。aio應該算是乙個比較新的框架,較為複雜,本人沒有深入的研究過,以後研究過後在寫總結。對於fasync,《深入linux裝置驅動程式核心機制》中有詳細的講解以及實驗。

要理解核心的fasync機制,可以結合這個圖和

《深入linux裝置驅動程式核心機制》中的講解。我根據這個流程圖,總結下我自己的認識:

首先,fasync機制是通過核心傳送出的sigio訊號來實現通知機制的,並不是通過休眠喚醒。

從這個角度來說,應用就必須做以下工作:

1、安裝sigio訊號(訊號例程處理核心資料可訪問的情況)

2、告訴核心所需要通知的程序id

3、設定fasync標誌,核心會通過驅動呼叫fasync方法為以後的訊號通知做準備。

在應用程式完成了相關設定後,就可以做別的事了,如果有任何問題,核心會通過sigio訊號通知,應用安裝的訊號例程就會被呼叫。

而在核心空間這端,相關的驅動程式需要實現以下工作:

1、定義乙個全域性的struct fasync_struct指標;

2、實現file_operations中的fasync方法,基本就是呼叫核心的輔助函式fasync_helper。

3、在驅動某個可以獲知資料可訪問資訊的例程中呼叫kill_fasync函式。

通過以上核心與應用的配合,就可以方便的使用核心非同步通知機制。這種機制用起來簡單,觀其機制,一開始覺得挺複雜的,一旦深入將所有相關的結構體和例程整理一下就會發現,其實這個機制的實現也很清楚明了。個人一直認為對於核心的學習,首先要理清構架及資料結構間的關係。而看別人的**分析能讓你適當的理解下構架,最後關鍵在於自己rtfsc。所以我現在一般不再博文中分析**,而只說構架和**,**需要有興趣的朋友自己分析。

電磁基本理論

微波指頻率在300mhz到300ghz 對應波長為1m到1mm之間的交流訊號。一些頻段大體分配 波段l波段 1 2ghz s波段2 4ghz c波段4 8ghz x波段8 12ghz ku波段 12 18ghz k波段18 26ghz ka波段 26 40ghz 微波特點 第一方程 不僅傳導電流可以...

Git基本理論

檔案在這四個區域之間的轉換關係如下 git的工作流程一般是這樣的 在工作目錄中新增 修改檔案 將需要進行版本管理的檔案放入暫存區域 將暫存區域的檔案提交到git倉庫。因此,git管理的檔案有三種狀態 已修改 modified 已暫存 staged 已提交 committed 上面說檔案有4種狀態,通...

vs基本理論

4月 15日下午學習 1.csproj 是乙個專案檔案,是管理 cs檔案的。專案裡包含很多檔案。2.cs 是乙個配置檔案 3.開啟時不要直接開啟 cs 要雙擊專案檔案。開啟的整個的專案。4.sln是解決方案檔案。解決方案可以包含很多的專案。輸入輸出 再main 下邊中間裡面寫程式。console.w...