国产成人v爽在线免播放观看,日韩欧美色,久久99国产精品久久99软件,亚洲综合色网站,国产欧美日韩中文久久,色99在线,亚洲伦理一区二区

學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > 關(guān)于Linux內(nèi)核驅(qū)動(dòng)fsync機(jī)制實(shí)現(xiàn)的詳細(xì)方法

關(guān)于Linux內(nèi)核驅(qū)動(dòng)fsync機(jī)制實(shí)現(xiàn)的詳細(xì)方法

時(shí)間: 曉斌668 分享

關(guān)于Linux內(nèi)核驅(qū)動(dòng)fsync機(jī)制實(shí)現(xiàn)的詳細(xì)方法

  今天,學(xué)習(xí)啦小編就給大家說(shuō)說(shuō)Linux內(nèi)核驅(qū)動(dòng)fsync機(jī)制的實(shí)現(xiàn),如果對(duì)本文有興趣的可以跟著小編一起往下看,具體內(nèi)容如下:

  在Linux內(nèi)核中的IO模型基本分為4類:

  1、同步阻塞I/O

  2、同步非阻塞I/O

  3、異步阻塞I/O

  4、異步非阻塞I/O

  同步
應(yīng)用顯式地通過(guò)函數(shù)訪問(wèn)數(shù)據(jù),在此函數(shù)返回時(shí)就會(huì)得到結(jié)果(成功或失敗)。

  異步
應(yīng)用會(huì)顯示地通過(guò)函數(shù)提出訪問(wèn)或關(guān)注申請(qǐng)。數(shù)據(jù)到達(dá)時(shí),硬件和驅(qū)動(dòng)會(huì)通知應(yīng)用,此時(shí)代碼一般不在讀寫訪問(wèn)函數(shù)中,而是得到通知了再去有目的的訪問(wèn)數(shù)據(jù)。

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

  對(duì)于這4種機(jī)制,在《深入Linux設(shè)備驅(qū)動(dòng)程序內(nèi)核機(jī)制》中有講解,對(duì)于異步非阻塞I/O其實(shí)內(nèi)核提供了兩種實(shí)現(xiàn)一個(gè)是aio,另一個(gè)就是fasync。aio應(yīng)該算是一個(gè)比較新的框架,較為復(fù)雜,學(xué)習(xí)啦小編也沒(méi)有深入的研究過(guò),以后研究過(guò)后在寫總結(jié)。對(duì)于fasync,《深入Linux設(shè)備驅(qū)動(dòng)程序內(nèi)核機(jī)制》中有詳細(xì)的講解以及實(shí)驗(yàn),在看完了這知識(shí)以后,學(xué)習(xí)啦小編像往常一樣,畫了一個(gè)框圖來(lái)梳理所有的代碼關(guān)聯(lián)。

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

  要理解內(nèi)核的fasync機(jī)制,可以結(jié)合這個(gè)圖和《深入Linux設(shè)備驅(qū)動(dòng)程序內(nèi)核機(jī)制》中的講解。學(xué)習(xí)啦小編根據(jù)這個(gè)流程圖,總結(jié)下我自己的認(rèn)識(shí):

  首先,fasync機(jī)制是通過(guò)內(nèi)核發(fā)送出的SIGIO信號(hào)來(lái)實(shí)現(xiàn)通知機(jī)制的,并不是通過(guò)休眠喚醒。

  從這個(gè)角度來(lái)說(shuō),應(yīng)用就必須做以下工作:

  1、安裝SIGIO信號(hào)(信號(hào)例程處理內(nèi)核數(shù)據(jù)可訪問(wèn)的情況)

  2、告訴內(nèi)核所需要通知的進(jìn)程ID

  3、設(shè)置FASYNC標(biāo)志,內(nèi)核會(huì)通過(guò)驅(qū)動(dòng)調(diào)用fasync方法為以后的信號(hào)通知做準(zhǔn)備。

  在應(yīng)用程序完成了相關(guān)設(shè)定后,就可以做別的事了,如果有任何問(wèn)題,內(nèi)核會(huì)通過(guò)SIGIO信號(hào)通知,應(yīng)用安裝的信號(hào)例程就會(huì)被調(diào)用。

  而在內(nèi)核空間這端,相關(guān)的驅(qū)動(dòng)程序需要實(shí)現(xiàn)以下工作:

  1、定義一個(gè)全局的struct fasync_struct指針;

  2、實(shí)現(xiàn)file_operations中的fasync方法,基本就是調(diào)用內(nèi)核的輔助函數(shù)fasync_helper。

  3、在驅(qū)動(dòng)某個(gè)可以獲知數(shù)據(jù)可訪問(wèn)信息的例程中調(diào)用kill_fasync函數(shù)。

  通過(guò)以上內(nèi)核與應(yīng)用的配合,就可以方便的使用內(nèi)核異步通知機(jī)制。這種機(jī)制用起來(lái)簡(jiǎn)單,觀其機(jī)制,一開(kāi)始覺(jué)得挺復(fù)雜的,一旦深入將所有相關(guān)的結(jié)構(gòu)體和例程整理一下就會(huì)發(fā)現(xiàn),其實(shí)這個(gè)機(jī)制的實(shí)現(xiàn)也很清楚明了。學(xué)習(xí)啦小編一直認(rèn)為對(duì)于內(nèi)核的學(xué)習(xí),首先要理清構(gòu)架及數(shù)據(jù)結(jié)構(gòu)間的關(guān)系。而看別人的代碼分析能讓你適當(dāng)?shù)睦斫庀聵?gòu)架,最后關(guān)鍵在于自己RTFSC。所以學(xué)習(xí)啦小編現(xiàn)在一般不再博文中分析代碼,而只說(shuō)構(gòu)架和圖解,代碼需要有興趣的朋友自己分析。最后如果覺(jué)得本文不錯(cuò)的話,就在文章下方給小編點(diǎn)個(gè)贊吧。

熱門文章

359010