客户/服务器I/O-I/O重定向
2013-11-16 21:23:44 来源:技王数据恢复

在讨论了卷管理器为一个I/O请求产生多个路径后,再探索通过网络实现客户/服务器I/O就很顺理成章了。正像卷管理器可以沿着分开的路径产生多个交替的I/O一样,客户/服务器I/O也使用一个交替的路径,将I/O请求传输到存储设备,即网络。常用来描述客户如何访问服务器上数据的术语称为重定向I/O。 I/O重定向 为了将有关I/O操作的必要信息传输到存储设备,应用通常需要依靠文件系统、卷管理器以及设备驱动程序。从应用的角度看,只要它的I/O操作未变,它并不关心存储是发生在网络上,还是发生在本地I/O路径上。在这个方面,存在几种潜在的软件设计方案,这些方案都能实现设备虚拟化,使远程的网络服务器和文件系统如同本地的一样。提供这种功能的几个产品几年前就已经面世,特别是文件服务器操作系统产品,如NovellNetWare、BanyanVines、WindowsNTServer和SunNFS。这些产品都依赖于客户端的软件,由此提供设备虚拟化和通信服务,使它们的服务器文件系统资源就像本地的一样。另一种方法是客户端的软件提供对远程资源的透明访问。因此,设备虚拟化并不是实现透明访问惟一的技术,客户端软件也可以使远程文件系统资源像本地的目录或文件夹一样。 实现网络透明访问的客户软件称为I/O重定向器。它在I/O路径上紧靠文件系统之前的位置,实现于文件系统的上层,将远程服务器的文件系统资源与客户系统的本地文件系统资源视图合而为一。 I/O重定向器不必保存任何存储数据的元数据,但它必须提供对远程服务器上的数据及元数据的访问。从用户或应用的观点看,I/O重定向给它们的客户系统添加了另外的存储资源。然而,远程存储资源的表现可能并不完全像本地资源一样。例如,远程服务器可能使用区分大小写字母的命令,而客户则不是这样。在UNIX系统中,由I/O重定向器表示的远程虚拟存储资源特别称为远程安装点,而在PC机上,则称为映射驱动器。Office2000中引入的Web文件夹实现了另一种I/O重定向。 当一个用户或应用试图访问由I/O重定向器表示的文件时,重定向器解释文件I/O请求,并将它从文件系统的本地I/O路径重定向到另一路径,该路径使用的是网络资源。因为工作站无法知道服务器使用的设备类型,因此,由客户I/O重定向器起动的所有I/O操作和交换都在文件级或字节范围级,即I/O重定向器的I/O操作通常不在数据块级。 重定向信息最终由通常的网络进行传输,如以太网或FDDI,即重定向的I/O必须从重定向器传输到网络接口卡(NIC)协议驱动程序,它由网络文件协议完成。网络文件协议指定操作和交 换的类型,使它们能够通过底层的网络协议进行传输。按照所使用的不同网络环境,可以分为多个协议层加以实现,通常可以看成是一系列有序的设备驱动程序。 远程网络I/O操作的重定向I/O路径,这个I/O重定向器为应用和/或用户提供一个或多个虚拟设备。沿着I/O路径往下看,重定向I/O操作首先通过网络文件协议驱动器,然后通过系统的底层协议,最后通过网络接口卡到达网络。 一般来说,网络文件协议位于现有的低层的通信协议之上,如TCP和IP等。当网络文件系统(NFS)作为网络文件协议时,用户数据报协议(UDP)提供了IP之上的传输功能。 I/O重定向可以借助协议栈的方式加以分析,它与网络通信的分析方式一样。建立在TCP/IP协议之上的网络文件协议可以位于几个不同的位置,一些文件协议可以直接位于TCP/IP之上,也可以使用UDP/IP协议栈,如NFS。用于传输网络文件I/O的常见协议包括: 通用Internet文件系统(CIFS),用于微软的Windows产品。 网络文件系统(NFS),差不多用于所有的系统,特别是UNIX系统。 文件传输协议(FTP),差不多用于所有的系统,提供通过Internet进行的文件访问。 CIFS使用TCP/IP协议栈,但需要另外一层NetBIOS的支持。希望Windows2000以后的版本逐渐摆脱对NetBIOS的依赖。NFS最初使用无态的UDP,但现在的大部分实现中,它也使用TCP协议。尽管TCP是一个有态的协议,但NFS却仍然是无态的。FTP已经成为Internet传输的主要协议,它运行在广域环境中的TCP协议之上。目前,最常用的MAC层遵从标准的802.3规范,即碰撞监听网络访问。这些常见的网络协议栈。 本地和重定向的两种I/O路径。应用发出了两个I/O请求:一个是本地存储,另一个是网络存储。本地I/O请求沿着本章曾经介绍的路径进行,从卷管理器,经过I/O控制器设备驱动程序、主机I/O总线、主机I/O控制器、存储总线,最后到达设备。 重定向网络I/O请求采取另一种途径,从I/O重定向器开始,经过网络文件协议驱动程序,进入TCP/IP协议栈,再由I/O总线到达网络接口卡。从这里开始,请求开始通过网络传送到网络服务器。