11.7.4 NFS工作原理
本節將介紹客戶工作站訪問遠程檔案時經曆的準確步驟。假定所有上述討論的NFS組件都已經載入到客戶工作站和伺服器上,且已經完成匯出/加掛操作。然後將發生下面的動作順序。
運行在客戶機器上的應用程式發出對某些資料的系統調用。
客戶機器上的VFS擷取該系統調用,並確定該調用是針對本機資料還是遠端資料的,即它是針對LFS(本地檔案系統)還是針對NFS(網路檔案系統)的。
如果調用的是本機資料,VFS將其發送給11-7所示的本地檔案系統。現在可以根據運行在客戶機器上的LFS演算法進行資料訪問和檢索。這些功能在前面有關資訊管理的那一章討論過。
如果客戶機上的VFS發現它是對遠端資料的調用,就將該調用轉換成一個或多個NFS調用。表11-2給出了部分針對RPC的NFS調用函數,這些函數用於完成轉換工作。然後,客戶機上的VFS按照順序逐個發送NFS調用。伺服器單獨處理每個NFS調用並將控制權轉移給客戶機。然後客戶機發送下一個NFS調用。這樣在伺服器出現故障的時候還可以使用恢複機制。客戶機知道重新開始啟動並執行準確位置。因此,這種情況下的恢複工作就是客戶機的職責。
表11-2 針對RPC的NFS調用
NFS 調用 |
含 義 |
getattr() |
擷取檔案屬性 |
lookup() |
返迴文件控制代碼 |
read() |
讀取遠程檔案的資料 |
write() |
向遠程檔案寫入資料 |
create() |
在遠程主機上建立檔案 |
remove() |
刪除遠程主機上的檔案 |
rename() |
對遠程主機上的檔案重新命名 |
mkdir() |
在遠程主機上建立目錄 |
rmdir() |
刪除遠程主機上的目錄 |
readdir() |
讀取遠程主機上的目錄內容 |
每個NFS RPC調用都包含參數,它們被傳送給運行在客戶機上的RPC/XDR模組。誠如所知,資料以及資料類型要一併發送,XDR根據需要轉換格式。
客戶機器上的RPC/XDR使用運行在自己機器上的傳輸層協議軟體TCP/IP將訊息發送給伺服器。TCP/IP收集訊息並將其發送給運行在伺服器上的RPC/XDR模組。該訊息現在是NFS可以理解的格式。
伺服器上的XDR再次轉換格式,如果需要,將控制權移交給伺服器上的RPC (本書已經介紹過RPC基於連接埠號碼的工作原理,該連接埠號碼指明了在伺服器上執行哪一個NFS調用) 。
伺服器上的RPC/XDR啟動伺服器上合適的連接埠管理程式,這取決於期望的NFS調用。
連接埠管理程式和伺服器上的VFS通訊,發送合適的請求。接下來它成為對運行在伺服器上的本地作業系統的LFS的請求或調用。
伺服器上的LFS訪問並檢索資料,然後將其傳送給伺服器上的VFS。
VFS將資料傳送給伺服器上適當的連接埠管理程式。
連接埠管理程式使用伺服器上結合了如TCP/IP這樣的通訊協定模組的RPC/XDR模組,將資料發送給客戶。資料最終到達客戶機上的RPC/XDR模組。
現在將資料傳送給客戶節點上的NFS檔案系統。
NFS檔案系統將資料傳送給客戶節點上的虛擬檔案系統,而後者又會將資料傳送給客戶機上啟動並執行應用程式。
本書作者希望這個順序能夠為讀者解釋清楚NFS的工作原理。