相比之前的两个版本,NFSv3 是一个较为稳定和成熟的 NFS 版本,而之后的 NFSv4 除了在安全和性能上有所提高外,还在网络连接中加入了状态属性,因此显得复杂一些。在此,本文以 NFSv3 为例来剖析 NFS 文件系统的源代码结构,所用源码来自 Linux 2.4.9 内核。 按照 NFS 文件系统的设计与实现,NFS 文件系统主要分为三个部分:The Protocol(网络协议),Client Side(NFS 客户端)和 Server Side(NFS 服务器)。 NFS客户端提供了接口,保证用户或者应用程序能像访问本地文件系统一样访问 NFS 文件系统,NFS 服务器作为数据源,为 NFS 客户端提供真实的文件系统服务,而网络协议则使得 NFS 客户端和 NFS 服务器能够高效和可靠地进行通信。 NFS网络协议使用的是RPC(Remote Procedure Call,远程过程调用)/XDR(External Data Representation,外部数据表示)机制,因此本文将剖析的重点放在 NFS 客户端和 NFS 服务器上。 Client Side 源代码 ClientSide 的头文件在 include/linux/ 下面,C 文件在 fs/nfs 下面。 •dir.c/file.c/inode.c/symlink.c/unlink.c:与文件操作相关的系统调用 •read.c/write.c/flushd.c:文件读写 •mount_clnt.c/nfs_root.c:将 NFS 文件系统作为 root 目录的相关实现 •proc.c/nfs2xdr.c/nfs3proc.c/nfs3xdr.c:网络数据交换 与文件操作相关的系统调用都在struct file_operations,structinode_operations 这两个数据结构里面定义。文件的读操作 nfs_file_read 和写操作 nfs_file_write 被单独提出来,因为文件读写性能将直接关系到文件系统的成败,本文在后续会重点阐述其实现过程。
|