亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

在linux操作系統(tǒng)發(fā)行版有一個(gè)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)實(shí)現(xiàn),因此與Linux中的本地文件系統(tǒng)有很好的兼容性,性能也比較好。

由于網(wǎng)絡(luò)鎖和掛載等協(xié)議與NFS協(xié)議不統(tǒng)一,因此都有獨(dú)立的服務(wù)來(lái)處理相關(guān)的邏輯,這樣整個(gè)NFS服務(wù)略顯繁雜。但是到NFSv4之后,NFS協(xié)議將網(wǎng)絡(luò)鎖協(xié)議和掛載協(xié)議都融入其中,因此具體實(shí)現(xiàn)也簡(jiǎn)潔了很多。

在前面文章中我們已經(jīng)簡(jiǎn)要的描述了NFS協(xié)議在Linux內(nèi)核中的層次結(jié)構(gòu)。本節(jié)我們?cè)龠M(jìn)一步詳細(xì)的介紹一下服務(wù)端的軟件架構(gòu)。NFSD的軟件架構(gòu)其實(shí)并不復(fù)雜,我們可以進(jìn)一步細(xì)化為如圖1所示。

圖片圖片

從該圖可以看出,當(dāng)RPC服務(wù)收到來(lái)自客戶端的請(qǐng)求時(shí),它會(huì)對(duì)請(qǐng)求進(jìn)行分發(fā),由具體的程序(例如NFS或者NLM)來(lái)完成相關(guān)請(qǐng)求。其中請(qǐng)求的分發(fā)依據(jù)是其中的程序ID和例程ID,根據(jù)這兩個(gè)信息就可以找到具體的函數(shù)指針。

如果相關(guān)請(qǐng)求涉及到文件操作,那么在例程中會(huì)直接調(diào)用VFS的接口(例如讀數(shù)據(jù))進(jìn)行下一步的處理。而VFS則根據(jù)導(dǎo)出的目錄信息調(diào)用本地文件系統(tǒng)(例如Ext4和XFS等)的接口實(shí)現(xiàn)具體的操作。

在內(nèi)核中實(shí)現(xiàn)了所有的NFS協(xié)議,比如NFS v3、NFS v4、掛載和NLM等。由于從RPC服務(wù)到協(xié)議程序的流程是一樣的,限于篇幅本文并不會(huì)對(duì)每種協(xié)議都做介紹。本節(jié)我們主要以NFS v3協(xié)議為例,介紹一下從網(wǎng)絡(luò)收到消息到最終完成協(xié)議層處理的整個(gè)流程。如果大家熟悉了一個(gè)流程,再按照此流程來(lái)理解其它流程將非常容易。

1啟動(dòng)流程簡(jiǎn)析

首先我們分析一下NFSD的啟動(dòng)過(guò)程,該過(guò)程主要完成函數(shù)指針集向RPC服務(wù)注冊(cè)的過(guò)程。以處理NFS協(xié)議的服務(wù)端為例,關(guān)鍵是啟動(dòng)了一個(gè)內(nèi)核線程池。該線程池不斷地接收網(wǎng)絡(luò)消息,然后譯碼之后調(diào)用注冊(cè)的回調(diào)函數(shù)進(jìn)行具體命令的處理。如下代碼所示是NFS服務(wù)的主函數(shù),函數(shù)指針的注冊(cè)和線程池的創(chuàng)建都在其中實(shí)現(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)用兩個(gè)函數(shù),svc_recv用于接收消息,svc_process用于處理消息。這兩個(gè)函數(shù)其實(shí)都是RPC模塊的函數(shù)。其中svc_process會(huì)解析數(shù)據(jù)包,然后調(diào)用函數(shù)指針進(jìn)行后續(xù)的處理。以NFSv3為例,它會(huì)調(diào)用如下函數(shù)指針集中的某個(gè)函數(shù)。

圖片圖片

2寫數(shù)據(jù)流程示例

以寫數(shù)據(jù)流程為例,當(dāng)RPC服務(wù)接收到數(shù)據(jù)包后,根據(jù)協(xié)議格式解析出程序ID和例程的ID等信息,然后從注冊(cè)的函數(shù)指針集就可以找到期望的函數(shù)指針進(jìn)行處理。對(duì)于寫數(shù)據(jù)而言,就會(huì)調(diào)用nfsd中的nfsd3_proc_write函數(shù)。

nfsd3_proc_write函數(shù)的工作其實(shí)并不多,更進(jìn)一步會(huì)調(diào)到VFS的接口,具體如下圖所示。最后,VFS會(huì)調(diào)用到具體文件系統(tǒng)的接口。如果我們導(dǎo)出的是Ext4的子目錄,那么會(huì)調(diào)用Ext4的接口來(lái)處理寫數(shù)據(jù)的請(qǐng)求。

圖片圖片

總體來(lái)看,NFSD的邏輯是比較清晰的,代碼也并不復(fù)雜。而且各個(gè)接口的邏輯一致,因此理解了一個(gè)接口后,再理解其它接口也就容易很多了。

分享到:
標(biāo)簽:Linux NFSD
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定