通用互联网文件系统

 

通用互联网文件系统(CIFS)作为服务器消息块(SMB)协议的增强形式,是Windows 2000用于互联网文件共享的协议。因为应用程序通过标准的Win32文件I/O函数访问远程文件,所以应用程序不直接使用CIFS协议,但是CIFS负责处理这种远程I/O调用请求。CIFS定义了打印机共享规范,因此Windows 2000自身也使用CIFS进行打印机共享。尽管CIFS自身不是一个API,我们在这里提到它是因为文件和打印机共享建立在CIFS基础之上,同时它通过Win32API向应用程序展现。CIFS作为一个公开的微软标准(在P1atform SDK中有相关文档)允许第三方与Windows2000文件服务器以及Windows 2000文件共享客户之间进行互操作。比如Samba共享软件套件使UNIX操作系统可以向Windows 2000客户提供文件服务,同时使UNIX环境的应用程序可以访问Windows 2000上的文件。其他支持CIFS的平台还有DECVMS和AppleMacintosh。Windows 2000上的文件共享基于重定向器FSD。重定向器FSD运行在客户机上,它与运行在服务器上的服务器FSD进行通信。重定向器FSD截获指向服务器上文件的Win32文件I/0调用请求,向服务器的文件系统发送相应的CIFS消息去执行客户端的请求。

重定向器FSD和服务器FSD与Windows 2000的I/O系统是整合在一起的,这样的实现比起在用户空间的文件服务器实现有很多优点:

它们可以直接与TDI传输口和本地FSD交互。

它们可以和缓存管理器整合在一起,在客户端无缝地缓存服务器上的文件。

应用程序可以使用标准的Win32文件I/0函数访问远程文件,比如CreateFile,WriteFile。

Windows 2000的重定向器FSD和服务器FSD遵从标准网络资源命名规范,所有核心态的文件服务器和客户端均遵从这一规范。如果一个远程文件共享用一个驱动器号来连接,网络文件的命名就和本地文件相同。此外,重定向器FSD还支持UNC命名。网络资源的名字解析将在本章的“网络资源的名字解析”部分介绍。

(1)CIFS的实现

和许多其他设备驱动类型一样,Windows 2000的重定向器FSD采用端口/小端口模型。微软提供了名为\Winnt\Sysytem32\Drivers\Rdbss.sys的重定向器FSD端口库。开发者可以针对该库编写自己的小端口驱动程序。重定向器FSD端口库隐藏了实现一个重定向器FSD的许多细节,比如重定向器FSD和缓存管理器、内存管理器、TDI传输口的整合。CIFS小端口驱动程序的文件名为\Winnt\Sysytem32\Drivers\Mrxsmb.sys。

Mrxsmb.sys使用了前面几章讲述的缓存管理器来缓存文件数据并进行智能预读。CIFS的小端口驱动程序通过TDIAPl向远程服务器发送CIFS命令。它可以使用任何支持TDIAPI的传输方式,比如NetBEUI、NetBT(基于TCP/IP的NetBIOS)和TCP/IP。

在充当文件服务器角色的系统上,服务器FSD(\Winnt\System32\Drivers\Srv.sys)监听发自客户机的CIFS命令,同时作为代理接口访问服务器本地FSD。通过本地Windows 2000FSD实现的文件系统接口,服务器FSD实现了零拷贝发送的能力。文件系统接口允许服务器FSD获得描述一个内存描述子列表(MDL)。这个列表描述了暂存在文件系统缓存的文件数据。服务器FSD可以把MDL传给TDI传输口,TDI传输口使用网络适配器驱动程序进行网络传输。如果没有本地FSD和缓存管理器的支持,服务器FSD就把文件数据拷贝到自己的缓存中,随后把它传给TDI传输口。

服务器FSD和重定向器FSD有相应的Win32服务:服务器服务和工作站服务。这些服务运行在服务控制管理器(SCM)进程中,它们提供了对相应驱动程序的管理接口。

(2)分布式文件缓存

如果只有一个客户访问服务器的某一文件,显然在客户端缓存文件数据是安全的。当两个客户同时访问一个文件时,必须采取一定的措施保证客户和服务器数据文件的一致。Windows2000采用机会锁(oplock)的机制来解决分布式缓存的一致性(distributedcache coherency)问题。当一个客户访问服务器文件时,它必须首先请求机会锁。服务器授予客户的机会锁的类型决定了客户能采用的缓存方式。有三种主要的机会锁类型:

I级机会锁 用于一个客户独占一个文件。拥有这种类型机会锁的客户能在客户端对相应文件进行读写缓存。

Ⅱ级机会锁表示文件共享锁。拥有Ⅱ级机会锁的客户可以对相应文件进行缓存读,但是任何对文件的写操作会使Ⅱ级机会锁失效。

批处理机会锁 是有最大许可权的机会锁。拥有这种类型机会锁的客户不仅能在客户端对相应文件进行读写缓存,同时打开关闭文件不需要额外请求机会锁。批处理机会锁通常用来支持批处理文件的执行,在执行时通常需要反复打开关闭一个文件。如果—个客户没有机会锁,那么它就不能在本地进行缓存读或缓存写,而是直接从服务器接收数据或者把所做的所有修改直接发往服务器。
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值