展示自己、证明自己
分类: C/C++
2013-08-25 11:58:31
本节将介绍客户工作站访问远程文件时经历的准确步骤。假定所有上述讨论的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的工作原理。