linux_kernel_fuse_源碼剖析

linux_kernel_fuse_源碼剖析

ID:42595805

大小:244.43 KB

頁(yè)數(shù):15頁(yè)

時(shí)間:2019-09-18

linux_kernel_fuse_源碼剖析_第1頁(yè)
linux_kernel_fuse_源碼剖析_第2頁(yè)
linux_kernel_fuse_源碼剖析_第3頁(yè)
linux_kernel_fuse_源碼剖析_第4頁(yè)
linux_kernel_fuse_源碼剖析_第5頁(yè)
資源描述:

《linux_kernel_fuse_源碼剖析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、FUSE源碼剖析?1.?前言????本文是對(duì)FUSE-2.9.2源碼的學(xué)習(xí)總結(jié)。FUSE代碼在用戶空間和內(nèi)核空間都有運(yùn)行,為了突出重點(diǎn),先簡(jiǎn)要描述了在基于FUSE的用戶空間文件系統(tǒng)中執(zhí)行write操作的一般流程,接下來介紹了重要的數(shù)據(jù)結(jié)構(gòu),最后以FUSE的運(yùn)行過程為線索,剖析FUSE程序運(yùn)行過程的3個(gè)關(guān)鍵步驟:???????1.FUSE模塊加載?????????2.mount和open過程????????3.對(duì)文件write。???????對(duì)于虛擬文件系統(tǒng)和設(shè)備驅(qū)動(dòng)的相關(guān)概念本文僅作簡(jiǎn)要說明。需要說明的是,由于內(nèi)核的復(fù)雜性及個(gè)人能力的有限,本文省略了包括內(nèi)核同步,異

2、常檢查在內(nèi)的諸多內(nèi)容,希望可以突出重點(diǎn)。?2.?FUSE下write的一般流程???????????????????????????????????????????????????????????????????????????????????圖1???????在基于FUSE的用戶空間文件系統(tǒng)中執(zhí)行write操作的流程如圖1所示(由于版面關(guān)系,圖中部分函數(shù)是縮寫,請(qǐng)參考源碼):???????1.客戶端在mount目錄下面,對(duì)一個(gè)regular?file調(diào)用write,?這一步是在用戶空間執(zhí)行???????2.write內(nèi)部會(huì)調(diào)用虛擬文件系統(tǒng)提供的一致性接口vfs_w

3、rite???????3.根據(jù)FUSE模塊注冊(cè)的file_operations信息,vfs_write會(huì)調(diào)用fuse_file_aio_write,將寫請(qǐng)求放入fuse?connection的request?pending?queue,?隨后進(jìn)入睡眠等待應(yīng)用程序reply???????4.用戶空間的libfuse有一個(gè)守護(hù)進(jìn)程通過函數(shù)fuse_session_loop輪詢雜項(xiàng)設(shè)備/dev/fuse,?一旦request?queue有請(qǐng)求即通過fuse_kern_chan_receive接收???????5.fuse_kern_chan_receive通過read讀取

4、request?queue中的內(nèi)容,read系統(tǒng)調(diào)用實(shí)際上是調(diào)用的設(shè)備驅(qū)動(dòng)接口fuse_dev_read???????6.在用戶空間讀取并分析數(shù)據(jù),執(zhí)行用戶定義的write操作,將狀態(tài)通過fuse_reply_write返回給kernel???????7.fuse_reply_write調(diào)用VFS提供的一致性接口vfs_write???????8.vfs_write最終調(diào)用fuse_dev_write將執(zhí)行結(jié)果返回給第3步中等待在waitq的進(jìn)程,此進(jìn)程得到reply?后,write返回?3.?數(shù)據(jù)結(jié)構(gòu)???????本節(jié)主要介紹了FUSE中比較重要的數(shù)據(jù)結(jié)構(gòu),需要說

5、明的是圖示中只列出了與敘述相關(guān)的數(shù)據(jù)成員,完整的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)請(qǐng)參考源碼。3.1.?內(nèi)核部分?????????????????????????????????????????圖2???????struct?fuse_conn:每一次mount會(huì)實(shí)例化一個(gè)struct?fuse_conn即fuse?connection,?它代表了用戶空間和內(nèi)核的通信連接。fuse?connection維護(hù)了包括pending?list,?processing?list和io?list在內(nèi)的request?queue,fuse?connection通過這些隊(duì)列管理用戶空間和內(nèi)核空間通信過

6、程。???????struct?fuse_req:每次執(zhí)行系統(tǒng)調(diào)用時(shí)會(huì)生成一個(gè)struct?fuse_req,?這些fuse_req依據(jù)state被組織在不同的隊(duì)列中,struct?fuse_conn維護(hù)了這些隊(duì)列.??????struct?file:?存放打開文件與進(jìn)程之間進(jìn)行交互的有關(guān)信息,描述了進(jìn)程怎樣與一個(gè)打開的文件進(jìn)行交互,這類信息僅當(dāng)進(jìn)程訪問文件期間存在于內(nèi)核內(nèi)存中。???????struct?inode:文件系統(tǒng)處理文件所需要得所有信息都放在一個(gè)名為inode(索引節(jié)點(diǎn))的數(shù)據(jù)結(jié)構(gòu)中。文件名可以隨時(shí)更改,但是索引節(jié)點(diǎn)對(duì)文件是唯一的,并且隨著文件的存在而

7、存在。???????struct?file_operation:定義了可以對(duì)文件執(zhí)行的操作。?3.2.?用戶空間部分????????????????????????????????????圖3???????struct?fuse_req:這個(gè)結(jié)構(gòu)和上文中內(nèi)核的fuse_req同名,有著類似的作用,但是數(shù)據(jù)成員不同。???????struct?fuse_session:定義了客戶端管理會(huì)話的結(jié)構(gòu)體,包含了一組對(duì)session可以執(zhí)行的操作。???????struct?fuse_chan:定義了客戶端與FUSE內(nèi)核連接通道的結(jié)構(gòu)體,包含了一組對(duì)channel可以執(zhí)行

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。