2023-08-21 10:23:49來源:數(shù)據(jù)存儲張
在Linux操作系統(tǒng)發(fā)行版有一個NFS服務(wù)端,該服務(wù)端由內(nèi)核態(tài)的模塊和用戶態(tài)的守護(hù)進(jìn)程構(gòu)成。其中內(nèi)核態(tài)模塊負(fù)責(zé)數(shù)據(jù)處理,而用戶態(tài)守護(hù)進(jìn)程則負(fù)責(zé)內(nèi)核態(tài)的配置管理等功能。由于核心功能在內(nèi)核態(tài)實現(xiàn),因此與Linux中的本地文件系統(tǒng)有很好的兼容性,性能也比較好。
由于網(wǎng)絡(luò)鎖和掛載等協(xié)議與NFS協(xié)議不統(tǒng)一,因此都有獨立的服務(wù)來處理相關(guān)的邏輯,這樣整個NFS服務(wù)略顯繁雜。但是到NFSv4之后,NFS協(xié)議將網(wǎng)絡(luò)鎖協(xié)議和掛載協(xié)議都融入其中,因此具體實現(xiàn)也簡潔了很多。
在前面文章中我們已經(jīng)簡要的描述了NFS協(xié)議在Linux內(nèi)核中的層次結(jié)構(gòu)。本節(jié)我們再進(jìn)一步詳細(xì)的介紹一下服務(wù)端的軟件架構(gòu)。NFSD的軟件架構(gòu)其實并不復(fù)雜,我們可以進(jìn)一步細(xì)化為如圖1所示。
【資料圖】
圖片
從該圖可以看出,當(dāng)RPC服務(wù)收到來自客戶端的請求時,它會對請求進(jìn)行分發(fā),由具體的程序(例如NFS或者NLM)來完成相關(guān)請求。其中請求的分發(fā)依據(jù)是其中的程序ID和例程ID,根據(jù)這兩個信息就可以找到具體的函數(shù)指針。
如果相關(guān)請求涉及到文件操作,那么在例程中會直接調(diào)用VFS的接口(例如讀數(shù)據(jù))進(jìn)行下一步的處理。而VFS則根據(jù)導(dǎo)出的目錄信息調(diào)用本地文件系統(tǒng)(例如Ext4和XFS等)的接口實現(xiàn)具體的操作。
在內(nèi)核中實現(xiàn)了所有的NFS協(xié)議,比如NFS v3、NFS v4、掛載和NLM等。由于從RPC服務(wù)到協(xié)議程序的流程是一樣的,限于篇幅本文并不會對每種協(xié)議都做介紹。本節(jié)我們主要以NFS v3協(xié)議為例,介紹一下從網(wǎng)絡(luò)收到消息到最終完成協(xié)議層處理的整個流程。如果大家熟悉了一個流程,再按照此流程來理解其它流程將非常容易。
1啟動流程簡析首先我們分析一下NFSD的啟動過程,該過程主要完成函數(shù)指針集向RPC服務(wù)注冊的過程。以處理NFS協(xié)議的服務(wù)端為例,關(guān)鍵是啟動了一個內(nèi)核線程池。該線程池不斷地接收網(wǎng)絡(luò)消息,然后譯碼之后調(diào)用注冊的回調(diào)函數(shù)進(jìn)行具體命令的處理。如下代碼所示是NFS服務(wù)的主函數(shù),函數(shù)指針的注冊和線程池的創(chuàng)建都在其中實現(xiàn)。
圖片
在該函數(shù)中,其中nfsd_create_serv完成函數(shù)指針的初始化,主要涉及如下函數(shù)指針。
圖片
上述函數(shù)指針中,svc_set_num_threads用于創(chuàng)建線程池,而nfsd則是線程函數(shù),負(fù)責(zé)數(shù)據(jù)的接收和處理。我們看一下該函數(shù)的主體部分,具體如下:
圖片
可以看出該函數(shù)主要調(diào)用兩個函數(shù),svc_recv用于接收消息,svc_process用于處理消息。這兩個函數(shù)其實都是RPC模塊的函數(shù)。其中svc_process會解析數(shù)據(jù)包,然后調(diào)用函數(shù)指針進(jìn)行后續(xù)的處理。以NFSv3為例,它會調(diào)用如下函數(shù)指針集中的某個函數(shù)。
圖片
2寫數(shù)據(jù)流程示例以寫數(shù)據(jù)流程為例,當(dāng)RPC服務(wù)接收到數(shù)據(jù)包后,根據(jù)協(xié)議格式解析出程序ID和例程的ID等信息,然后從注冊的函數(shù)指針集就可以找到期望的函數(shù)指針進(jìn)行處理。對于寫數(shù)據(jù)而言,就會調(diào)用nfsd中的nfsd3_proc_write函數(shù)。
nfsd3_proc_write函數(shù)的工作其實并不多,更進(jìn)一步會調(diào)到VFS的接口,具體如下圖所示。最后,VFS會調(diào)用到具體文件系統(tǒng)的接口。如果我們導(dǎo)出的是Ext4的子目錄,那么會調(diào)用Ext4的接口來處理寫數(shù)據(jù)的請求。
圖片
總體來看,NFSD的邏輯是比較清晰的,代碼也并不復(fù)雜。而且各個接口的邏輯一致,因此理解了一個接口后,再理解其它接口也就容易很多了。
關(guān)鍵詞:
在Linux操作系統(tǒng)發(fā)行版有一個NFS服務(wù)端,該服務(wù)端由內(nèi)核態(tài)的模塊和用戶
一、業(yè)務(wù)現(xiàn)狀和背景首先來介紹下艦橋平臺。艦橋是知乎內(nèi)部的一個運營分
以下是慧博云通在北京時間8月21日09:41分盤口異動快照:8月21日,慧博
同花順金融研究中心8月21日訊,有投資者向廣汽集團(tuán)提問,您好,請問公
1、內(nèi)飾用料太一般都20幾的車了還是手動空調(diào)手動座椅唯一自動的還是讓
據(jù)上證報,8月以來,價格長期處于跌勢的淡季水泥市場終于迎來回暖跡象
成宜高鐵宜賓段與大觀配電所。(資料圖)劉忠俊攝中新網(wǎng)成都8月20日電(記
一、辦理離婚需要的手續(xù)費多少錢離婚如果是通過協(xié)議離婚的方式進(jìn)行的,
8月17日晚,一段著名歌手李玟生前控訴綜藝選秀節(jié)目《中國好聲音》的錄
導(dǎo)讀1、片頭還是我的未來式啊,片尾曲:Irememberthe…2、愛情公寓4片尾
想必現(xiàn)在有很多小伙伴對于哈弗h6前引擎蓋怎么打開方面的知識都比較想要
工人日報-中工網(wǎng)記者趙黎浩8月19日,第7屆中國-南亞博覽會暨第27屆中國
筆記本電腦搜索不到無線信號怎么解決?造成這種問題可能有多個原因,這
1、這句是出自唐詩里的《別董大》,全詩是;千里黃云白日曛,北風(fēng)吹雁
1、vfloppy sys是虛擬軟盤系統(tǒng) 而vfloppy sys的引導(dǎo)程序是放在mbr中的