佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Linux內核驅動fsync機制實現(xiàn)圖解

Linux內核驅動fsync機制實現(xiàn)圖解

熱門標簽:百度競價點擊價格的計算公式 外呼系統(tǒng) 服務器配置 家政服務網(wǎng)絡 解決方案 硅谷的囚徒呼叫中心 美團 電話機器人搭建
在Linux內核中的IO模型基本分為4類:

1、同步阻塞I/O
2、同步非阻塞I/O
3、異步阻塞I/O
4、異步非阻塞I/O


同步:應用顯式地通過函數(shù)訪問數(shù)據(jù),在此函數(shù)返回時就會得到結果(成功或失?。?。
異步:應用會顯示地通過函數(shù)提出訪問或關注申請。數(shù)據(jù)到達時,硬件和驅動會通知應用,此時代碼一般不在讀寫訪問函數(shù)中,而是得到通知了再去有目的的訪問數(shù)據(jù)。

阻塞:在等待數(shù)據(jù)的過程中會休眠在此處,而非阻塞即函數(shù)不休眠立即返回,可執(zhí)行接下來的代碼。

對于這4種機制,在《深入Linux設備驅動程序內核機制》中有講解,對于異步非阻塞I/O其實內核提供了兩種實現(xiàn)一個是aio,另一個就是fasync。aio應該算是一個比較新的框架,較為復雜,本人沒有深入的研究過,以后研究過后在寫總結。對于fasync,《深入Linux設備驅動程序內核機制》中有詳細的講解以及實驗,在看完了這知識以后,我像往常一樣,畫了一個框圖來梳理所有的代碼關聯(lián)。這個圖在兩個月前畫好的,由于我的寶寶及工作的關系就耽擱了發(fā)布。



(上面的圖片比較下, 建議下載到本地打開)

要理解內核的fasync機制,可以結合這個圖和《深入Linux設備驅動程序內核機制》中的講解。我根據(jù)這個流程圖,總結下我自己的認識:
首先,fasync機制是通過內核發(fā)送出的SIGIO信號來實現(xiàn)通知機制的,并不是通過休眠喚醒。
從這個角度來說,應用就必須做以下工作:
1、安裝SIGIO信號(信號例程處理內核數(shù)據(jù)可訪問的情況)
2、告訴內核所需要通知的進程ID
3、設置FASYNC標志,內核會通過驅動調用fasync方法為以后的信號通知做準備。


在應用程序完成了相關設定后,就可以做別的事了,如果有任何問題,內核會通過SIGIO信號通知,應用安裝的信號例程就會被調用。


而在內核空間這端,相關的驅動程序需要實現(xiàn)以下工作:
1、定義一個全局的struct fasync_struct指針;
2、實現(xiàn)file_operations中的fasync方法,基本就是調用內核的輔助函數(shù)fasync_helper。
3、在驅動某個可以獲知數(shù)據(jù)可訪問信息的例程中調用kill_fasync函數(shù)。


通過以上內核與應用的配合,就可以方便的使用內核異步通知機制。這種機制用起來簡單,觀其機制,一開始覺得挺復雜的,一旦深入將所有相關的結構體和例程整理一下就會發(fā)現(xiàn),其實這個機制的實現(xiàn)也很清楚明了。個人一直認為對于內核的學習,首先要理清構架及數(shù)據(jù)結構間的關系。而看別人的代碼分析能讓你適當?shù)睦斫庀聵嫾?,最后關鍵在于自己RTFSC。所以我現(xiàn)在一般不再博文中分析代碼,而只說構架和圖解,代碼需要有興趣的朋友自己分析。

標簽:南昌 防城港 臨沂 北海 韶關 撫州 邢臺 烏蘭察布

巨人網(wǎng)絡通訊聲明:本文標題《Linux內核驅動fsync機制實現(xiàn)圖解》,本文關鍵詞  ;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    武义县| 长顺县| 东乡县| 舟曲县| 临潭县| 万盛区| 佛山市| 青铜峡市| 宜都市| 新沂市| 中方县| 台州市| 台北县| 中牟县| 红河县| 台东县| 思茅市| 白城市| 龙泉市| 四会市| 宜章县| 宝坻区| 阿尔山市| 汾阳市| 关岭| 静宁县| 湟源县| 枣阳市| 屏东县| 射洪县| 开化县| 海原县| 南漳县| 卓资县| 绥宁县| 唐山市| 麻城市| 嘉禾县| 内乡县| 琼海市| 那曲县|