Linux內(nèi)核驅(qū)動fsync機制實現(xiàn)過程是怎樣的,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)專業(yè)提供川西大數(shù)據(jù)中心服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買川西大數(shù)據(jù)中心服務(wù),并享受7*24小時金牌售后服務(wù)。
在Linux內(nèi)核中的IO模型基本分為4類:
1、同步阻塞I/O
2、同步非阻塞I/O
3、異步阻塞I/O
4、異步非阻塞I/O
同步:應(yīng)用顯式地通過函數(shù)訪問數(shù)據(jù),在此函數(shù)返回時就會得到結(jié)果(成功或失敗)。
異步:應(yīng)用會顯示地通過函數(shù)提出訪問或關(guān)注申請。數(shù)據(jù)到達時,硬件和驅(qū)動會通知應(yīng)用,此時代碼一般不在讀寫訪問函數(shù)中,而是得到通知了再去有目的的訪問數(shù)據(jù)。
阻塞:在等待數(shù)據(jù)的過程中會休眠在此處,而非阻塞即函數(shù)不休眠立即返回,可執(zhí)行接下來的代碼。
對于異步非阻塞I/O其實內(nèi)核提供了兩種實現(xiàn)一個是aio,另一個就是fasync。aio應(yīng)該算是一個比較新的框架,較為復(fù)雜,本人沒有深入的研究過,以后研究過后在寫總結(jié)。對于fasync,畫了一個框圖來梳理所有的代碼關(guān)聯(lián)。這個圖在兩個月前畫好的,由于我的寶寶及工作的關(guān)系就耽擱了發(fā)布。
要理解內(nèi)核的fasync機制,可以結(jié)合這個圖和《深入Linux設(shè)備驅(qū)動程序內(nèi)核機制》中的講解。我根據(jù)這個流程圖,總結(jié)下我自己的認識:
首先,fasync機制是通過內(nèi)核發(fā)送出的SIGIO信號來實現(xiàn)通知機制的,并不是通過休眠喚醒。
從這個角度來說,應(yīng)用就必須做以下工作:
1、安裝SIGIO信號(信號例程處理內(nèi)核數(shù)據(jù)可訪問的情況)
2、告訴內(nèi)核所需要通知的進程ID
3、設(shè)置FASYNC標(biāo)志,內(nèi)核會通過驅(qū)動調(diào)用fasync方法為以后的信號通知做準(zhǔn)備。
在應(yīng)用程序完成了相關(guān)設(shè)定后,就可以做別的事了,如果有任何問題,內(nèi)核會通過SIGIO信號通知,應(yīng)用安裝的信號例程就會被調(diào)用。
而在內(nèi)核空間這端,相關(guān)的驅(qū)動程序需要實現(xiàn)以下工作:
1、定義一個全局的struct fasync_struct指針;
2、實現(xiàn)file_operations中的fasync方法,基本就是調(diào)用內(nèi)核的輔助函數(shù)fasync_helper。
3、在驅(qū)動某個可以獲知數(shù)據(jù)可訪問信息的例程中調(diào)用kill_fasync函數(shù)。
通過以上內(nèi)核與應(yīng)用的配合,就可以方便的使用內(nèi)核異步通知機制。這種機制用起來簡單,觀其機制,一開始覺得挺復(fù)雜的,一旦深入將所有相關(guān)的結(jié)構(gòu)體和例程整理一下就會發(fā)現(xiàn),其實這個機制的實現(xiàn)也很清楚明了。個人一直認為對于內(nèi)核的學(xué)習(xí),首先要理清構(gòu)架及數(shù)據(jù)結(jié)構(gòu)間的關(guān)系。而看別人的代碼分析能讓你適當(dāng)?shù)睦斫庀聵?gòu)架,最后關(guān)鍵在于自己RTFSC。所以我現(xiàn)在一般不再博文中分析代碼,而只說構(gòu)架和圖解,代碼需要有興趣的朋友自己分析。
看完上述內(nèi)容,你們掌握Linux內(nèi)核驅(qū)動fsync機制實現(xiàn)過程是怎樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享名稱:Linux內(nèi)核驅(qū)動fsync機制實現(xiàn)過程是怎樣的
文章位置:http://www.chinadenli.net/article18/gpdodp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、虛擬主機、定制開發(fā)、ChatGPT、網(wǎng)站設(shè)計公司、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)