在阐述 NFS 文件系统与传统桌面文件系统的相同点之前,我们首先简要回顾一下 Linux 操作系统上文件系统的体系结构。按照 Linux 文件系统剖析的划分,Linux 文件系统从上至下主要由虚拟文件系统层,特定文件系统层和页高速缓存层三部分组成,如下图所示。当然,这种划分并不是一定的,例如在执行直接 I/O 调用时,是不需要进行页高速缓存的,另外,对于块设备的读写,进行页高速缓存之后还会有通用块层和 I/O 调度层的处理。 用户或者应用程序通过统一的系统调用接口对文件系统进行操作,然后系统调用进入虚拟文件系统层,虚拟文件系统根据文件系统类型,调用特定文件系统的操作函数。对用户和应用程序来说,由于接口完全相同,因此用户感觉不到差异,应用程序也可以无缝地移植到 NFS 文件系统上。 Linux通过一组对象对文件系统的操作,这组对象是 superblock(超级块对象),inode(索引节点对象),dentry(目录项对象)和 file(文件对象),如下图所示。所有文件系统都支持这些对象,正是因为它们,VFS 层可以对 NFS 和其它文件系统一视同仁,只管调用这些对象的数据和函数指针,把具体的文件系统数据布局和操作都留给特定的文件系统来完成。
|