成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux NFSD軟件架構與代碼解析

系統 Linux
如果相關請求涉及到文件操作,那么在例程中會直接調用VFS的接口(例如讀數據)進行下一步的處理。而VFS則根據導出的目錄信息調用本地文件系統(例如Ext4和XFS等)的接口實現具體的操作。

在Linux操作系統發行版有一個NFS服務端,該服務端由內核態的模塊和用戶態的守護進程構成。其中內核態模塊負責數據處理,而用戶態守護進程則負責內核態的配置管理等功能。由于核心功能在內核態實現,因此與Linux中的本地文件系統有很好的兼容性,性能也比較好。

由于網絡鎖和掛載等協議與NFS協議不統一,因此都有獨立的服務來處理相關的邏輯,這樣整個NFS服務略顯繁雜。但是到NFSv4之后,NFS協議將網絡鎖協議和掛載協議都融入其中,因此具體實現也簡潔了很多。

在前面文章中我們已經簡要的描述了NFS協議在Linux內核中的層次結構。本節我們再進一步詳細的介紹一下服務端的軟件架構。NFSD的軟件架構其實并不復雜,我們可以進一步細化為如圖1所示。

圖片圖片

從該圖可以看出,當RPC服務收到來自客戶端的請求時,它會對請求進行分發,由具體的程序(例如NFS或者NLM)來完成相關請求。其中請求的分發依據是其中的程序ID和例程ID,根據這兩個信息就可以找到具體的函數指針。

如果相關請求涉及到文件操作,那么在例程中會直接調用VFS的接口(例如讀數據)進行下一步的處理。而VFS則根據導出的目錄信息調用本地文件系統(例如Ext4和XFS等)的接口實現具體的操作。

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

1啟動流程簡析

首先我們分析一下NFSD的啟動過程,該過程主要完成函數指針集向RPC服務注冊的過程。以處理NFS協議的服務端為例,關鍵是啟動了一個內核線程池。該線程池不斷地接收網絡消息,然后譯碼之后調用注冊的回調函數進行具體命令的處理。如下代碼所示是NFS服務的主函數,函數指針的注冊和線程池的創建都在其中實現。

圖片圖片

在該函數中,其中nfsd_create_serv完成函數指針的初始化,主要涉及如下函數指針。

圖片圖片

上述函數指針中,svc_set_num_threads用于創建線程池,而nfsd則是線程函數,負責數據的接收和處理。我們看一下該函數的主體部分,具體如下:

圖片圖片

可以看出該函數主要調用兩個函數,svc_recv用于接收消息,svc_process用于處理消息。這兩個函數其實都是RPC模塊的函數。其中svc_process會解析數據包,然后調用函數指針進行后續的處理。以NFSv3為例,它會調用如下函數指針集中的某個函數。

圖片圖片

2寫數據流程示例

以寫數據流程為例,當RPC服務接收到數據包后,根據協議格式解析出程序ID和例程的ID等信息,然后從注冊的函數指針集就可以找到期望的函數指針進行處理。對于寫數據而言,就會調用nfsd中的nfsd3_proc_write函數。

nfsd3_proc_write函數的工作其實并不多,更進一步會調到VFS的接口,具體如下圖所示。最后,VFS會調用到具體文件系統的接口。如果我們導出的是Ext4的子目錄,那么會調用Ext4的接口來處理寫數據的請求。

圖片圖片

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

責任編輯:武曉燕 來源: 數據存儲張
相關推薦

2023-08-08 09:52:13

系統端架構NFS

2018-11-09 10:09:38

RAC硬件軟件

2017-02-24 17:24:16

Etcd架構分布式系統

2021-04-28 00:01:43

RAID硬件軟件

2013-04-07 17:57:16

SDN網絡架構

2010-06-21 10:40:06

Linux APM

2022-01-20 10:14:33

架構軟件開發

2025-03-27 04:10:00

2024-09-29 08:00:00

動態代理RPC架構微服務架構

2013-10-11 17:24:47

Linux運維內存管理

2012-09-24 09:59:24

Linux操作系統

2013-05-16 11:16:45

Linux軟件安裝卸載

2010-03-03 13:09:08

Linux安裝

2010-06-03 10:15:35

2023-12-22 13:58:00

C++鏈表開發

2009-12-16 14:00:26

Linux軟件系統

2023-09-05 08:16:14

API架構

2010-06-29 17:59:03

UML建模

2017-01-15 09:53:49

2010-02-02 17:11:10

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清在线 | 澳门永久av免费网站 | 久久久成人一区二区免费影院 | 色接久久 | 国产精品久久久久久久久久免费看 | 精品久久久久久久久久久 | 伊人精品久久久久77777 | 欧美国产日韩一区二区三区 | 欧美一区免费 | 成人性生交大片免费看中文带字幕 | 国产在线中文字幕 | 免费久久精品 | 日韩精品在线播放 | 一级片网站视频 | 精品国产乱码久久久久久图片 | 视频一区二区中文字幕 | 国精品一区| www久久久 | 99精品网| 天堂av免费观看 | 精品九九 | 亚洲一区综合 | 国产成人精品一区二区三 | 日韩午夜在线播放 | 久热电影 | 欧美日韩一| 国产伊人久久久 | 精品一区二区三区在线视频 | 日韩国产在线观看 | 一区二区精品 | 国产激情一区二区三区 | av中文字幕在线观看 | 欧美区在线 | 999久久久| 毛片免费观看 | 成人欧美一区二区三区黑人孕妇 | 在线免费av电影 | 久久免费精品 | 亚洲国产精品视频 | 福利视频一区二区 | 欧美在线一区二区三区 |