专利名称::用于改进文件管理的方法和装置的制作方法领域本公开内容涉及计算机和通信系统。更具体而言,它涉及到用于在计算机和通信系统中改进文件管理的方法和装置。背景计算机和通信系统在体系结构上常常是相似的。每种系统可以包括大量的独立部件,它们每个都被设计成执行确定的功能。这些部件可以通过互连系统将信息传送到其他部件。互连系统操作来管理通过通信介质,诸如金属引线、双绞线、同轴电缆、光纤、射频等等对信息的传送。在部件之间的通信典型地有助于协调单个部件的操作,从而使得它们可以作为内聚的系统来活动。这种类型的分布式系统的体系结构在性能、冗余、可伸缩性和效率上可以提供某些优点。不过,也存在与这种类型的系统设计相关联的缺点。一个缺点是部件在等待着来自另一个部件的信息时,它可能不得不保持空闲。空闲时间可代表系统资源的低效率使用。另一个缺点是功能性可能采用增加部件之间传送的信息量的方式被分配给部件。这种通信中的增加会增加对该互连系统的有限资源的需求。附图简述关于本发明的实施例的主题在本说明书的结论部分被特别指出和被不同地要求权利。不过,通过参考如下的详细说明并结合附图阅读时,就会对本发明的实施例,对于组织和操作方法这二者,以及本发明的目的、特征、和优点有最好的理解,在这些附图中图1是一种适用于实践本发明的一个实施例的系统。图2是根据本发明的一个实施例的客户系统的框图。图3是根据本发明的一个实施例的服务器系统的框图。图4由根据本发明的一个实施例的客户系统所执行的操作的方框流程图。图5由根据本发明的一个实施例的服务器系统所执行的操作的方框流程图。图6说明一种根据本发明的一个实施例的软件体系结构。详述在以下的详细描述中,对大量的具体细节进行了阐述以便提供对本发明的实施例的彻底理解。不过,对于本领域普通技术人员而言,应该理解的是,在没有这些具体细节的情况下,本发明的实施例也是可以被实践的。在其他例子中,并没有在细节上对公知的方法、过程、部件和电路进行描述,以便不使本发明的实施例不清楚。本发明的实施例可以通过减小分布式部件的空闲时间以及对于互连系统的带宽需求来改进分布式系统的性能。更具体而言,本发明的一个实施例可以改进用来管理文件的分布式系统的性能。因此,这样就可以减小与文件操作相关联的时延。相应地,用户就可以在更多的响应式应用和服务方面受益。文件管理系统典型地包括客户和服务器。在本上下文中的客户可以指服务的请求者。在本上下文中的服务器可以指服务的提供者。该客户典型地通过互连系统将文件请求发送到服务器。该文件请求可以采用消息的形式,并且可以包括功能请求和文件名。在本上下文中的消息可以包括一个或者多个字母数字字符、符号或者逻辑表达式,当它们被组合时,表示例如控制字、命令、指令、信息或者数据。该消息在构成上可以变化,例如从一个位到完整的短语。该服务器将一惟一的标识符与该文件名关联起来,标识该文件的位置信息,并且将它与该惟一的标识符存储在一起。该服务器然后将该惟一标识符送回到该客户。该客户接收该惟一标识符,并且对于后续的文件请求就用它来代替该文件名。惟一标识符被指配给文件名,以便减小对该互连系统的带宽需求。文件名例如可以包括许多字母数字字符或者符号(″字符串″)。每个字符或者符号被转换成一个或者多个位,典型地是每个字符8位(例如,1字节)。因为文件名可以包括许多字符,所以该互连系统可能不得不传输数目相对大的位。为了减少这一问题,该服务器可以将惟一标识符指配给每个文件名,并且将该惟一标识符发送给该客户。该惟一标识符典型地在长度上要小于该文件名。例如,一个惟一标识符可能的长度为32或者64位。于是,该客户对于后续的文件请求就可以使用该惟一标识符。不过,让该服务器将惟一标识符指配给文件名也存在缺点。一个缺点是在处理后续的文件请求之前,当该客户等待着该惟一标识符时,它可能不得不保持空闲。另一个缺点是该客户和服务器可能需要传送比所需的更多的信息,由此就增加了对该互连系统的需求。相对于第一缺点,该客户在等待着来自该服务器的惟一标识符时,它可能不得不保持空闲。为了启动该指配过程,该客户将一条消息发送到该服务器,请求将惟一标识符指配给文件名。该服务器将一个惟一标识符与该文件名关联起来,标识该文件的位置信息,并且将它与该惟一标识符存储在一起。该服务器然后就将一条消息与该惟一标识符一起送回到该客户。在等待着接收来自该服务器的惟一标识符的同时,该客户可以接收具有该相同文件名的后续的文件请求。该客户也许直到该整个指配过程完成时才能开始处理这些文件请求。因此,在这一时间段期间,该客户也许被迫要保持空闲。相对于第二缺点,为了执行指配功能,该客户和服务器可能需要传送不必要的信息,由此就增加了对该互连系统的需求。上述的文件管理系统要求至少两条消息。该客户将第一条消息发送到该服务器,请求将惟一标识符指配给文件名。该服务器将第二条消息与该惟一标识符一起发送给该客户。每条消息要求使用该互连系统的一定量的带宽。在本上下文中的带宽可以指信息在互连系统上能够被传送的速度,并且典型地采用每秒千位(kbps)来加以测量。通过对比,本发明的一个实施例可以仅仅使用一条消息来执行该指配过程,由此潜在地就将对该互连系统的带宽需求降低达50%之多。本发明的实施例可以通过降低客户的空闲时间以及对该互连系统的带宽需求来改进分布式系统的性能。本发明的一个实施例在客户端将一惟一标识符指配给文件名,并将该惟一标识符发送到该服务器。这样就可以减小客户的空闲时间,因为该客户在不必等待来自该服务器的消息的情况下就可以开始处理后续的文件请求。这样也可以减小带宽需求,因为该服务器不必为完成该指配过程而将消息送回到该服务器,或者可选地,可以发送比以前的文件管理系统所需要的消息更短的消息。值得指出的是在本说明书对″一个实施例″或者″实施例″的任何参考在本上下文中意思是结合该实施例所描述的特定的特征、结构、或者特性可能被包括在本发明的至少一个实施例中。在本说明书的各个地方所出现的短语″在一个实施例中″未必都要指向相同的实施例。现在详细地参考这些附图,其中相同的部件自始至终由相同的附图标记来指定,图1说明一种适用于实践本发明的一个实施例的系统100。如图1所示,系统100包括由互连系统104所连接的客户102和服务器106。在此所使用的术语″客户″可以指信息的任何请求者。在此所使用的术语″服务器″可以指信息的任何提供者。图2是根据本发明的一个实施例的客户系统的框图。图2说明可以代表客户102的客户200。如图2所示,客户200包括处理器202、存储器204和接口208,它们都由连接210所连接。存储器204可以存储程序指令和数据。术语″程序指令″包括计算机代码段,该计算机代码段包括预定的计算机语言的字、值和符号,当它们以按照预定的方式或者语法的组合被放置时,使处理器执行确定的功能。计算机语言的例子包括C、C++和汇编语言。处理器202执行该程序指令,并且处理在存储器204中所存储的数据。接口208协调数据从客户200到另一个设备的传输。连接210传送处理器202、存储器204、和接口208之间的数据。处理器202可以是能够提供本发明的各实施例所需要的速度和功能性的任何类型的处理器。例如,处理器202可以是由英特尔公司(Intel)、摩托罗拉(Motorola)、康柏(Compaq)或者太阳微系统(Sun)制造的处理器系列中的处理器。在本发明的一个实施例中,处理器202可以是用于管理输入/输出(I/O)设备,诸如硬盘驱动器、键盘、打印机、网络接口卡等等的专用处理器。这种处理器典型地被称为I/O处理器(IOP)。在本发明的一个实施例中,存储器204包括机器可读介质,并且可以包括能够存储适用于由处理器加以执行的指令的任何介质。这种介质的一些例子包括但不限于,只读存储器(ROM)、随机存取存储器(RAM)、可编程ROM、可擦除可编程ROM、电可擦除可编程ROM、动态RAM、磁盘(例如,软盘和硬盘驱动器)、光盘(例如,CD-ROM)和可以存储数字信息的任何其他介质。在本发明的一个实施例中,该指令采用压缩和/或加密的格式存储在该介质上。如此处所使用的,短语″适用于由处理器加以执行″意思是包括采用压缩和/或加密格式所存储的指令,以及必须被编译或者在由该处理器执行之前由安装程序安装的指令。此外,客户200通过各种I/O控制器可以包含机器可读存储设备的各种组合,它们可由处理器202加以访问并且能够存储计算机程序指令和数据的组合。存储器204可以存储和允许由处理器202执行的程序指令和数据,以便实现客户(诸如客户106和客户200)的功能。在本发明的一个实施例中,存储器204包括一组程序指令,该组程序指令在此共同地被称为文件系统接口206。文件系统接口206可以是这样的一个接口,它操作来提供对系统100的一个或者多个文件的访问。在本上下文中的接口可以指一种定义的协议,通过该协议,一个软件模块可以访问另一个软件模块的功能性。在本上下文中的文件是指在存储器诸如存储器204或者硬盘驱动器中所存储的数据的离散集。文件系统接口206可以接收请求以便对文件执行某些操作,诸如建立、打开、查找、读、写、重命名、删除、复制、移动等等。该请求例如可以源自主机OS或者应用程序。主机OS可以包括用于系统的OS。例如,如果本发明的实施例是作为个人计算机的一部分加以实现的,则该主机OS可以包括微软公司所出售的OS,例如像MicrosoftWindows95、98、2000和NT。在本发明的一个实施例中,文件系统接口206作为由智能I/O规范(I2O)所定义的操作系统服务模块(OSM)进行操作,智能I/O规范(I2O)由I2O特殊兴趣组(SIG)(I2OSIG)开发,版本为1.5,于1997年4月采用,并且可从″www.i20sig.org″(″I2O规范″)中获得,不过本发明在范围上并不限制于这一方面。作为背景,该I2O规范定义了用于独立于受控的专用设备和主机操作系统(OS)这二者的智能I/O的标准体系结构。在本上下文中的智能I/O是指将处理低级中断的功能从中央处理单元(CPU)或者其他处理器移到特别设计成对I/O功能提供处理的I/O处理器(IOP)。这样就可以改进I/O性能以及允许该CPU或者其他处理器给其他任务提供处理功能性。在本上下文中的中断是指对访问I/O设备,诸如硬盘驱动器、软盘驱动器、打印机、监视器、键盘、网络接口卡(NIC)等等的请求。该I2O规范描述OSM、中间服务模块(ISM)和硬件设备模块(HDM)。该OSM可以是一个驱动器,该驱动器作为主机OS和ISM之间的接口进行操作。在本上下文中的驱动器是指一组程序指令,该组程序指令管理特定部件、设备或者软件模块的操作。该ISM可以作为在该OSM和硬件设备模块(HDM)之间的接口进行操作。该ISM可以执行用于I/O管理功能的特定功能性、网络协议或例如像后台归档这样的对等功能性。该HDM可以是用于操作来控制特定I/O设备的驱动器。该I2O规范定义一种通信模型,该通信模型包括消息传递系统。该OSM、ISM和HDM通过采用消息的形式经消息层传递信息来通信和协调操作。在本上下文中的消息层可以管理和调度请求,提供用于交付消息的一组应用编程接口(API),以及提供用于处理消息的一组支持例程。在本发明的一个实施例中,文件系统接口206作为根据I2O规范的OSM进行操作。在本发明的一个实施例中,文件系统接口206通过主机OS接收来自应用程序的文件请求,根据该I2O规范将该请求翻译成消息,并且将它发送到文件系统管理器(在以下描述)以便处理。在本上下文中的应用程序是指这样的程序,该程序为专门任务提供预定的一组函数,典型地具有用户界面以便有利于处理用户和该计算机系统之间的命令和指令。应用程序的例子可以包括字处理程序、扩展页、数据库或者因特网浏览器。接口208可以包括任何适合于使用例如希望的一组通信协议、服务和操作过程来控制在计算机或者网络设备之间的通信信号的技术。在本发明的一个实施例中,接口208可以例如根据PCI规范和I2O规范进行操作。在本发明的另一个实施例中,接口208可以根据如下协议进行操作,该协议分别是由因特网工程任务组(IETF)标准7的、于1981年9月采用的请求评注(RFC)793所定义的传输控制协议(TCP),和IETF标准5的、1981年9月采用的请求评注(RFC)791所定义的网际协议(IP),这二者都可从″www.ietf.org″中获得。尽管接口208可以根据上述协议进行操作,但是应该理解的是,接口208可以使用任何适合于使用例如希望的一组通信协议、服务和操作过程来控制计算机或者网络设备之间的通信信号的技术进行操作,并且仍然落在本发明的范围之内。接口208还包括用于将接口208连接到适合的通信介质的连接器。接口208可以通过任何合适的介质诸如铜线、双绞线、同轴电缆、光纤、射频等等接收通信信号。在本发明的一个实施例中,该连接器适合与总线一起使用,以便承载遵从PCI规范的信号。图3是根据本发明的一个实施例的服务器系统的框图。图3说明根据本发明的一个实施例、代表服务器106的服务器300。如图3所示,服务器300包括处理器302、存储器304和接口308,它们都由连接310加以连接。图3的元件302、304、308和310在结构和操作上与参考图2所描述的对应元件202、204、208和210是相似的。尽管所展示的服务器300带有处理器302,但是应该理解的是,服务器300在没有处理器302的情况下可以通过使用可用于服务器300的另一个处理器(例如,处理器202)来进行操作,并且仍然落在本发明的范围之中。例如,如果本发明的该实施例被并入到个人计算机中,其中该客户和服务器由PCI总线加以连接并且都共享单一的处理器,则这种配置可以出现。在本发明的一个实施例中,存储器304包含文件系统管理器306的程序指令。文件系统管理器306执行文件管理,并提供对包含多个文件的存储介质(未示出)的访问。文件系统306对从文件系统接口206所接收的文件请求作出响应而执行文件操作,诸如建立、打开、查找、读、写、重命名、删除、复制、移动等等。文件系统接口206的一个例子包括根据I2O规范操作的ISM,不过本发明的范围并不限制于这一方面。将参考图4和5,更详细地对系统100、200和300的操作进行描述。尽管在此所展示的图4和5包括特定的操作顺序,但是应该理解的是,操作的顺序仅仅提供在此所描述的通用功能是如何实现的例子。此外,操作的顺序不一定必须要按照所展示的次序加以执行,除非另有指示。图4是由根据本发明的一个实施例的客户执行的操作的方框流程图。在本发明的该实施例中,文件系统接口206作为客户106的一部分进行操作。不过,应该理解的是,文件系统接口206,可以由位于计算机或者网络系统中的任何地方的任何设备,或者设备的组合加以实现,并仍然落在本发明的范围之内。如图4所示,在块402,客户接收访问具有文件名的文件的请求。在块404,该客户将该文件名与标识符关联起来。在块406,该客户将该关联的标识符和文件名发送到服务器。在块408,该客户将该关联的标识符和文件名存储到存储器中。在块410,该客户接收来自该服务器的确认消息。一旦该客户将标识符指配给文件,则该标识符就被用于对该文件的以后的请求。该客户在该客户端接收访问该文件的第二个请求。该客户从存储器中检索与该文件名相关联的标识符。该客户使用该关联的标识符将第二个请求发送到该服务器。图5是由根据本发明的一个实施例的服务器加以执行的操作的方框流程图。在本发明的该实施例中,文件系统管理器306作为客户106的一部分进行操作。不过,应该理解的是,这一功能性可以由位于计算机或者网络系统中任何地方的任何设备,或者设备的组合加以实现,并仍然落在本发明的范围之内。如5图所示,在块502,服务器接收文件的文件名和关联的标识符。在块504,该服务器将确认消息发送给该客户。在块506,该服务器搜索该文件的位置信息。在块508,该服务器将该位置信息和该标识符关联起来。该服务器将该关联的位置信息和标识符存储到存储器中。一旦该服务器使用该标识符索引到了文件的位置信息,该服务器就能够对后续的文件请求使用该标识符来访问该位置信息。该服务器接收具有该标识符的访问文件的第二个请求。该服务器使用该标识符从存储器检索该位置信息。通过例子,对系统100、200和300的操作,以及在图4和5中所展示的流程图可以有更好的理解。应用程序发送请求以便将信息从文件名为″测试文件一″的文件中读到系统100的主机OS。在本上下文中的惟一标识符是指一系列字母数字字符,当它们被组合时,相对于该客户、服务器和/或系统所使用的其他字、值或者二进制串,它们代表对该客户、服务器和/或系统惟一的字、值或者二进制串。主机OS将该文件请求传递给文件系统接口206。文件系统接口206生成惟一标识符″A123″,并将它指配给文件名″测试文件一″。在本发明的该实施例中,该惟一标识符″A123″例如可以是十六进制的32位数。文件系统接口206建立一条消息″标识(测试文件一,A123)″,并且将它放置到出站消息队列,以便通过连接104传输到文件系统管理器306。在本上下文中的该出站消息队列是指诸如先进先出(FIFO)这样的队列,该队列用于保持消息直到该互连系统能够传输该消息为止。文件系统接口206将″测试文件一″与″A123″一起存储在存储器204中的查找表中。文件系统管理器306通过连接104接收该消息。文件系统管理器306解析该消息,并且调用函数″identify(测试文件一,A123)″。在本上下文中的术语“解析”是指将单个的字符或者字符的子集从表示例如命令、控制字、文件名、数据、函数调用、子例程名、标志等等的消息中分离开。在本上下文中术语″调用″是指被发送到该处理器的命令开始执行与给定的函数或者子例程相关联的程序指令。这一函数接受作为输入的″测试文件一″和″A123″,并且通知文件系统管理器306该文件名″测试文件一″将在后续的文件请求中作为″A123″被加以引用。这可以通过以下方式来实现将该文件名和惟一标识符一起作为对应的或者链接的项存储来更新存储器中的查找表,即,通过搜索一个可以找到另一个。文件系统管理器306搜索文件″A123″的位置信息,它典型地位于诸如硬盘驱动器这样的存储设备上。位置信息的例子可以包括寻址信息、设备、柱面号和磁道号,不过,本发明在范围上并不限制于这一方面。文件系统管理器306将该位置信息与标识符″A123″关联起来,并且将该位置信息与标识符″A123″存储在存储器304中的查找表中。文件系统管理器306向文件系统接口206发送确认消息该文件名标识符和位置信息已经被接收。在本上下文中的确认消息是指一条短消息,指示前一条消息已被接收。该确认消息可以包括单个位、字符、字或者短语,如特定系统所希望的。当请求对文件名″测试文件一″进行操作时,由文件系统管理器306所接收的后续的文件请求然后将使用标识符″A123″。例如,文件系统接口206接收第二个请求来执行对″测试文件一″的″delete(删除)″操作。文件系统接口206从存储器中检索″测试文件一″的先前关联的标识符″A123″。文件系统接口206将消息″delete(′A123′)″发送到文件系统管理器306。文件系统管理器306接收该消息″delete(′A123′)″,并且使用该标识符″A123″检索文件名″测试文件一″的位置信息。文件系统管理器306然后使用所检索的位置信息执行所请求的文件操作。在本发明的一个实施例中,文件系统接口206可以作为根据I2O规范的OSM以及作为诸如可从″www.kernel.org″(″Linuxkernel″)中获得的LinuxOS版本2.3.99pre-3内核这样的特定主机OS加以实现。在本发明的这一实施例中,该OSM还可以包括流森林(streamforest)OSM、流树(streamtree)OSM、以及类的说明。在本上下文中的类可以指特定的接口定义。在本上下文中的树可以指被称为圆锥(cone)的存储对象的集合。在本上下文中的对象可以指类的实例。在本上下文中的圆锥可以指例如支持读、写和加锁能力的存储对象。在本上下文中的森林可以指树的集合。在本发明的这一实施例中,流森林OSM可以被用于建立文件系统集合的模型。流森林OSM可以例如提供文件命名操作,诸如建立名字、删除名字、或者重命名特定的森林。此外,打开和关闭操作也可以被支持。树OSM可以被用于建立特定文件系统的模型。文件可以被建立成圆锥的模型。流森林OSM例如还可以用来支持文件操作,诸如命名文件、重命名它、删除它、给它加锁以防改变、读取它或者写入它。该OSM可以被设计成与ISM进行通信。该ISM还可以包括流森林ISM和流树ISM。流森林ISM可以支持该OSM的文件系统命名能力。在本发明的一个实施例中,流树ISM可以支持长度为28个字符的流圆锥标识符。流树ISM还可以支持216个打开的流圆锥,以及232个可能的流圆锥。流树ISM对于所有包含的流圆锥可以支持264个字节。应该理解的是,这些值并未将本发明的范围限制在这一方面。在操作中,流树OSM、流森林OSM、流树ISM和流森林ISM都可以使用根据以上所述的类规范的消息传送方案进行通信。这种消息传送方案将被称为流式消息传送方案,并且以下还要详细地加以论述。主机OS可以使用由流森林OSM和流树OSM所提供的功能性。该主机OS例如可以使用该流森林OSM来建立文件系统的编组的模型,并且使用该流树OSM来建立特定文件系统的模型。该流森林OSM可以使用该流森林ISM来管理IRTOS环境之中的文件系统的编组。该流树OSM可以使用该流树ISM来管理在I2O实时操作系统(IRTOS)环境之中的文件系统。该流森林OSM和流树OSM可以使用该流消息传送方案分别与该流森林OSM和流树ISM进行通信。还将参考图7对本发明的该实施例进行描述。图6说明一种根据本发明的一个实施例的软件体系结构。如图6所示,系统600可以包括具有流森林OSM602、LinuxOS604、Linux虚拟文件系统(VFS)606、流树OSM608、和一个或者多个LinuxI2O驱动器610的文件系统接口。LinuxI2O驱动器610可以根据Linux内核和I2O规范进行操作。LinuxI2O驱动器610可以包括PCII2O驱动器612。PCII2O驱动器612可以根据PCI规范和I2O规范进行操作。该文件系统接口通过用于根据PCI规范传送信号的总线614与文件系统管理器进行通信。该文件系统管理器可以包括流森林ISM616、流树ISM618、廉价磁盘冗余阵列(RAID)ISM620、小型计算机系统接口(SCSI)HDM622和IRTOS624。在本发明的这一实施例中,在系统600中所展示的模块可以使用C编程语言加以实现,不过本发明的范围并不限制于这一方面。此外,在本发明的这一实施例中,在系统600中展示的模块支持长度为255个字符的标识符。流树OSM608可以被配置成提供对典型文件系统的访问。流树OSM608可以被配置成支持一个或者多个LinuxVFS所要求的函数,如由Linux规范所定义的。流树OSM608可以被配置成支持流树类消息,如在以下将更加详细地加以论述的。流树OSM608可以被配置成使用例如Linux内核与LinuxOS604一起操作。流树OSM608可以支持流树ISM,诸如流树ISM618。流森林OSM602可以提供函数loct1()kernelinterface(内核接口)。流森林OSM602可以用于使用函数名诸如″IOCTL_SF_TREECREATE″在流森林中建立流树。这一函数可以接收例如用C语言按如下定义的输入缓冲器作为输入structik_sf_treecreate{U32SizeInBlocks;charname[256];}。流森林OSM602还可以用于使用函数名诸如″IOCTL_SF_TREERENAME″来重命名已有的流树。这一函数可以接收例如用C语言按如下定义的输入缓冲器作为输入structik_sf_treerename{charIdentifierBeforeRename[256];charIdentifierAfterRename[256];}。流森林OSM602还可以用于使用函数名诸如″IOCTL_SF_TREEERASE″来删除已有的流树。这一函数可以接收例如用C语言按如下定义的输入缓冲器作为输入structik_sf_treeerase{charIdentifierToErase[256];}。流森林OSM602可以使用一个或者多个如下的数据结构。此处被称为″超级块(superblock)″的数据结构可以被用于代表文件系统的初始″i节点(inode)″。在本上下文中的″i节点″可以指该文件系统的文件节点。超级块操作列表可以是函数的编组,该函数被用于操纵该超级块。i节点记录数据结构可以被用于代表该文件系统的每个文件节点。i节点操作列表可以是函数的编组,该函数被用于操纵i节点。文件记录数据结构可以被用于代表文件系统中的抽象文件。文件操作列表可以被用于支持文件操作。与操作列表操作组合在一起的所有这些数据结构可以被用于代表文件系统。流树类消息可以向几个该数据结构发出。流树类消息可以例如对于i节点操作建立、查找、建立目录(″mkdir″)、删除目录(″rmdir″)、和重命名目录而被发出。流树类消息可以对于各种文件操作,诸如打开、读、写、查找、和关闭而被发出。流森林OSM602可以使用标识符″i2Ofs″将所包含的文件系统注册到例如Linux内核中。例如,对于根树圆锥容器,流森林OSM602可以使用NULL标识符。例如,对于当前的树圆锥容器,流森林OSM602可以使用标识符′.′。例如,对于父树圆锥容器,流森林OSM602可以使用标识符′..′。系统600可以包含对于一个或者多个如下模块的系统描述1.内核的MODULE_AUTHOR描述;2.″I2OFilesystemOffloadDriver(I2O文件系统卸载驱动器)″的MODULE_DESCRIPTION;3.module_init(),它可以注册该文件系统;4.module_exit(),它可以除去该文件系统的注册;5.DECLARE_FSTYPE模块,它可以具有参数i2ofs_typei2ofs、读超级操作以及0;6.OSM句柄管理器模块,它可以具有第一句柄零,它按照每使用的句柄增加1;a.内部软件接口AcquireHandle(),它可以检索未用过的句柄;和b.内部软件接口ReleaseHandle(int),它可以将当前使用的句柄释放到空闲池中。系统600还可以提供函数VFSi2ofs_read_super(structsuper_block*sb,void*options,intsilent)。这一函数可以接收如表1中所定义的输入。表1这一函数将该超级块结构中的值设置为0。以下变量可以按如下被设置sb->s_blocksize=512。sb->s_blocksize_bits=10。sb->S_s_magic=I2OFS_SUPER_MAGICsb->s_op=在该OSM中所定义的super_operations结构。该函数可以使用被称为get_empty_inode()的模块建立新的i节点。该i节点可以被设置为零,各种关联的变量具有如下的设置inodei_uid=20。inodei_gid=20。i节点操作可以被设置成描述该i节点操作列表的指针。inodei_fop可以被设置成描述该文件操作列表的点。inodeI_mode可以被设置成S_IFDIR|S_IRUGO|S_IXUGO。i节点可以被插入到i节点哈希表中。Sb->s_root可以被设置成该根i节点的d_alloc_root()。VFS606中的每个文件系统可以具有至少一个超级块,该超级块包含有关该文件系统的足够信息以启动该文件系统的活动的。该超级块可以用C结构structsuper_block如下地加以实现<prelisting-type="program-listing"><![CDATA[ structsuper_block{ structlist_heads_list; kdev_ts_dev; unsignedlongs_blocksize; unsignedlongs_blocksize_bits; unsignedchars_lock; unsignedchars_dirt; structfile_system_type*s_type; structsuper_operations*s_op; structdquot_operations*dq_op; unsignedlongs_flags; unsignedlongs_magic; structdentry*s_root; wait_queue_head_ts_wait; structinode*s_ibasket; shortints_ibasket_count; shortints_ibasket_max; structlist_heads_dirty; structlist_heads_files; structblock_device*s_bdev; }。]]></pre>变量super_block->s_op可以包含如下C函数,并且提供对该超级块的访问。<prelisting-type="program-listing"><![CDATA[ structsuper_operations{ void(*read_inode)(structinode*); void(*write_inode)(structinode*)void(*put_inode)(structinode*); void(*delete_inode)(structinode*); void(*put_super)(structsuper_block*); void(*write_super)(structsuper_block*); void(*statfs)(structsuper_block*,s6tructstatfs*); int(*remount_fs)(structsuper_block*,int*,char*); void(*clear_inode)(structinode); void(*umount_begin)(structsuper_block*); }。]]></pre>i节点接口的例子可以如下<prelisting-type="program-listing"><![CDATA[ structinode{ structlist_headi_hash; structlist_headi_list; structlist_headi_dentry; unsignedlongi_ino; unsignedinti_count; kdev_ti_dev; umode_ti_mode; nlink_ti_nlink; uid_ti_uid; gid_ti_gid; kdev_ti_rdev; loff_tI_size; time_tI_atime; time_tI_mtime; time_tI_ctime; unsignedlongI_blksize; unsignedlongI_blocks; unsignedlongI_version; structsemaphoreI_sem; structsemaphoreI_zombie; structinode_operations*I_op; structfile_operations*I_fop; structsuper_block*I_sb; wait_queue_head_tI_wait; structfile_lock*I_flock; structaddress_space*I_mapping; structaddress_spaceI_data;structdquot*l_dquot[MAXQUOTAS]; structpipe_inode_info*I_pipe; Structblock_deviceI_bdev; UnsignedlongI_state; UnsignedintI_flags; UnsignedcharI_sock; Atomic_tI_writecount; UnsignedintI_attr_flags; __u32I_generation; }。]]></pre>变量inode->i_op可以包含如下C函数,并提供对该超级块的方法访问,如下<prelisting-type="program-listing"><![CDATA[ structinode_operations{ structfile_operations*default_file_ops; int(*create)(structinode*,constchar*,int,int,structinode**); structdentry*(*lookup)(structinode*,structdentry*) int(*link)(structdentry*,structinode*,structdentry*); int(*unlink)(structinode*,structdentry*); int(*symlink)(structinode*,structdentry*,constchar*); int(*mkdir)(structinode*,structdentry*,int); int(*rmdr)(structinode*,structdentry*); int(*mknod)(structinode*,structdentry*,int,int); int(*rename)(structinode*,structdentry*,structinode*,struct dentry*); int(*readlink)(structdentry*,char*,int); structdentry*(*follow_link)(structdentry*,structdentry*, unsignedint); void(*truncate)(structinode*); int(*permission)(structinode*,int); int(*revalidate)(structdentry*); int(*setattr)(structdentry*,structiattr*); int(*getattr)(structdentry*,structiattr*); }。]]></pre>系统600还提供函数create(structinode*,constchar*,int,int,structinode**)。这一函数可以接受在表2中所阐述的输入。表2这一函数可以使用get_empty_inode()来建立新的i节点。该函数可以通过经由dentry关系将constchar*变量附加到该新的i节点上而初始化该新的i节点。该函数可以使用所指定的大小来初始化新的i节点结构。该函数可以使用所指定的模式初始化该新的i节点结构。该函数可以将StreamConeCreate消息发送到该流树ISM。该消息可以按照如下加以配置1.HANDLE可以被从该OSM句柄管理器中加以检索;2.TYPE可以被设置为1,指示一个文件;和3.SGL可以被设置成NewName。NewInode的参考解除可以使用该新的i节点结构加以设置。系统600还可以提供函数structdentry*lookup(structinode*,structdentry*)。这一函数可以接受在表3中所阐述的输入。表3这一函数可以将StreamConeIdentify消息发送到流树ISM618。该消息可以按如下配置1.PARENTHANDLE可以被设置成ParentDirectoryinode局部数据之内所标识的句柄;2.CHILDHANDLE可以被设置成从该OSM句柄管理器中所检索的句柄;3.ATTRIBUTES可以被设置成STREAMCONECREATE_QUERY;和4.SGL可以被设置成Name。该函数可以使用get_empty_inode()建立新的i节点。该函数可以通过经由dentry关系将constchar*变量附加到该新的i节点来初始化它。该函数可以将StreamConeGetInformation消息发送到该流树ISM。该消息可以按如下配置1.HANDLE可以按如上被设置成CHILDHANDLE;和2.SGL可以被设置成局部数据结构类型的信息结果块。该函数可以根据该信息结果块设置该i节点的值。该函数可以将该NewINODE变量的参考解除设置到已经被建立的i节点。系统600可以提供函数mkdir(structinode*,structdentry*,int)。这一函数可以接受在表4中所阐述的输入。表4该函数可以发送StreamConeCreate消息以便建立目录。该消息可以按如下配置1.HANDLE可以被设置成在i节点结构输入ParentDirectory中所标识的句柄;2.TYPE可以被设置成2;和3.SGL可以被设置成包含该实际名字的输入Name。系统600可以提供函数rmdir(structinode*,structdentry*)。这一函数可以接受表5所阐述的输入。表5这一函数可以发送StreamConeErase消息以便删除目录。该消息可以按如下配置1.HANDLE可以被设置成在该i节点结构输入ParentDirectory中所标识的句柄;和2.SGL可以被设置成该输入Name。系统600还可以提供函数rename(structinode*,structdentry*,structinode*,structdentry*)。这一函数可以接受表6所阐述的输入。表6这一函数可以将StreamConeIdentify消息发送到该ISM。该消息可以按如下配置1.PARENTHANDLE可以根据OldDiri节点内部存储被设置用于OSM句柄;2.CHILDHANDLE可以被设置成从该OSM句柄管理器中检索的新的句柄;3.ATTRIBUTES可以被设置成STREAMCONECREATE_QUERY;和4.SGL可以被设置成OldName。该函数可以将StreamConeRename消息发送到该ISM。该消息可以按如下配置1.HANDLE可以被设置成StreamConeIdentify的CHILDHANDLE;2.NEWPARENT可以为OSM句柄被设置到NewDiri节点内部存储;和3.SGL可以被设置成NewName。该函数可以将StreamConeClose消息发送到该ISM。该消息可以按如下配置HANDLE可以根据StreamConeRename消息被设置成以前的HANDLE。系统600还可以提供函数truncate(structinode*)。这一函数可以接受表7所阐述的输入。表7该函数可以将StreamConeResize消息发送到该ISM。该消息可以按如下配置1.HANDLE可以被从该i节点内部OSM句柄存储中检索到;和2.SIZE可以被从该i节点变量i_size中检索到。VFS606中的每个文件可以具有至少一个超级块,该超级块可以包含关于该文件系统的足够信息以启动该文件系统的活动。这一超级块的细节用C结构structsuper_block给出,诸如前面所描述的超级块。方法变量,f_op,可以提供对文件操作的访问。structsuper_operate*s_op函数可以提供对根i节点的访问,它对于该OSM可能是需要的。<prelisting-type="program-listing"><![CDATA[ structfile{ structlist_headf_lst; strtuctdentry*f_dentry; structfile_operations*f_op; atomic_tf_count; unsignedintf_flags; mode_tf_mode; loff_tf_pos; unsignedlongf_reada; unsignedlongf_ramax; unsignedlongf_raend; unsignedlongf_ralen; unsignedlongf_rawin; structfown_structf_owner; unsignedintf_uid; unsignedintf_gid; intf_error; unsignedlongf_version; }。]]></pre>系统600可以提供以下描述的一个或者多个文件操作。变量f->s_op可以包含以下的C函数,并且可以提供对该超级块的访问。<prelisting-type="program-listing"><![CDATA[ structfile_operations{ loff_t(*11seek)(structfile*,off_t,int) ssize_t(*read)(structfile*,char*,size_t,lofft*); ssize_t(*write)(structfile*,constchar*,size_t,loff_t*); int(*readdir)(structfile*,void*,filldir_t); u_int(*poll)(structfile*,structpoll_table_struct*); int(*ioct1)(structinode*,structfile*,unsignedint, unsignedlong); int(*mmap)(structfile*,structvm_area_struct*);int(*open)(structinode*,structfile*); int(*release)(structinode*,structfile*); int(*fsync)(structinode*,structdentry*); int(*fasynch)(int,structfile*,int); int(*lock)(structfile*,int,structfile_lock*); ssize_t(*readv)(structfile*,conststructiovec*,unsignedlong,loff_t*); ssize_t(*writev)(structfile*,conststructiovec*,unsignedlong,loff_t*); }。]]></pre>系统600可以提供函数11seek(structfile*,off_t,int)。这一函数可以接受表8中所阐述的输入。表8这一函数可以将StreamConeSeek消息发送到该ISM。该消息可以按如下配置1.HANDLE可以为OSM句柄根据节点内部存储而加以设置;和2.NEWPOSITION可以被设置成根据Offset和Origin的计算而获得的位置。系统600可以提供函数read(structfile*,char*,size_t,loff_t)。这一函数可以接受表9所阐述的输入。表9这一函数可以将StreamConeRead消息发送到该ISM。该消息可以按如下配置1.HANDLE可以为OSM句柄根据节点内部存储而加以设置;和2.SGL可以被设置成Buffer和Size。系统600可以提供函数write(structfile*,constchar*,size_t,loff_t*)。这一函数可以接受表10所阐述的输入。表10这一函数可以将StreamConeWrite消息发送到该ISM。该消息可以按如下配置1.HANDLE可以为OSM句柄根据节点内部存储而加以设置;和2.SGL可以被设置成Buffer和Size。系统600可以提供函数readdir(structfile*,void*,filldir_t)。这一函数可以接受表11所阐述的输入。表11这一函数可以将StreamConeEnumerate消息发送到该ISM。该消息可以按如下配置1.HANDLE可以为OSM句柄根据节点内部存储而加以设置;2.ENUMERATOR被设置为Count;3.SGL可以被设置成Entry的文件名缓冲器;4.SGL的大小可以被设置成255。系统600还可以提供如下的dentry接口<prelisting-type="program-listing"><![CDATA[ structdentry{ intd_count; unsignedintd_flags; structinode*d_inode; structdentry*d_parent; structdentry*d_mounts; structdentry*d_covers; structlist_headd_ash; structlist_headd_lru; structlist_headd_child; structlist_headd_subdirs; structlist_headd_alias; structqstrd_name; unsignedlongd_time; structdentry_operations*d_op; structsuper_block*d_sb; unsignedlongd_reftime; void*d_fsdata; unsignedchard_iname[DNAME_INLINE_LEN]; }。]]></pre>流树ISM618可以支持一个或者多个流树类消息,如此处所定义的。流树618可以运行并支持来自流树OSM,诸如流树OSM608的消息。流森林ISM616可以支持流森林类消息,如此处所定义的。流森林ISM616可以运行并支持来自流森林OSM,诸如流森林OSM602的消息。流森林ISM616可以包括用户界面。该用户界面可以包括用户屏幕,该用户屏幕可以在初始化时显示一个或者多个流树。用户可能能够建立新的流树。当建立新的流树时,可以向该用户展示一个屏幕,来询问大小和标识。如果流树被建立了,则流树类对象就可以被建立。用户还可能能够删除流树。该用户界面可以提供用于对删除流树进行确认。流森林消息可以被处理,并且树对象被适当地建立。系统600可以提供消息StreamConeCreate。这一消息可以被用于建立新的流圆锥,该新的流圆锥将存储信息,并且可以接受表12中所阐述的输入。表12系统600还可以提供消息StreamConeEnumerate。这一消息可以被用于列出在流圆锥容器中的一个或者多个流圆锥,并且可以接受表13中所阐述的输入。表13系统600可以从该句柄管理器中检索涉及到HANDLE的i节点。当枚举型量(enumberator)被设置为0时,″ext2fs″库调用dir_iterate()可以与涉及到作为父的句柄的i节点一起使用以便在该″ext2″文件系统上生成流圆锥标识符的列表。对应于ENUMERATOR索引的列表条目可以被拷贝到SGL中。系统600可以提供消息StreamConeErase。这一消息被用于删除流圆锥标识符,并且可以接受在表14中所阐述的输入。表14系统600可以提供消息StreamConeGetInformation。这一消息可以被用于检索关于该流圆锥的信息,并且可以接受表15中所阐述的输入。表15系统600可以提供消息StreamConeIdentify。这一消息可以被用于将句柄标识符映射成字符串标识符,并且可以接受表16所阐述的输入。表16系统600可以提供消息streamConeLock。这一消息可以被用于加锁文件的字节范围,并且可以接受表17中所阐述的输入。表17系统600可以提供消息StreamConeRead。这一消息可以被用于从流圆锥中读取块,并且可以接受表18中所阐述的输入。表18系统600还可以提供消息StreamConeRelease。这一消息可以被用于关闭所指定的句柄的标识,并且可以接受表19中所阐述的输入。表19这一函数可以不链接来自该i节点标识符的HANDLE。系统600可以提供消息StreamConeRename。这一消息可以被用于重命名流圆锥,并且可以接受在表20中所阐述的输入。表20系统600还可以提供消息StreamConeResize。这一消息被用于调整流圆锥的大小,并且可以接受表21中所阐述的输入。表21系统600可以提供消息StreamConeSeek。这一消息被用于改变流圆锥的位置,并且可以接受表22中所阐述的输入。表22系统600可以提供消息StreamConeGetInformation。这一消息可以被用于设置关于该流圆锥的信息,并且可以接受表23中所阐述的输入。表23系统600可以提供消息StreamConeUnlock。这一消息可以被用于解锁以前设置的字节加锁范围,并且可以接受表24中所阐述的输入。表24系统600可以提供消息StreamConeWrite。这一消息可以被用于将块写入到流圆锥,并且可以接受表25中所阐述的输入。表25尽管如在此所描述的那样对本发明的实施例的某些特征进行了说明,但是现在,许多修改、替换、改变以及等价内容对于本领域普通技术人员而言是会想到的。因此,应该理解的是,所附的权利要求书旨在涵盖落在本发明的实施例的实际精神之中的所有这种修改和改变。权利要求1.一种用于管理文件的方法,包括在客户端接收访问具有文件名的文件的第一请求;在所述客户端将一标识符与所述文件名关联起来;和将所述第一请求与所述标识符和所述文件名一起发送到一个服务器。2.权利要求1的方法,还包括将所述标识符和文件名存储到存储器中。3.权利要求1的方法,还包括接收来自所述服务器的确认消息。4.权利要求1的方法,还包括在所述客户端接收访问所述文件的第二请求;从所述存储器中检索与所述文件名相关联的所述标识符;和使用所述关联的标识符将所述第二请求发送到所述服务器。5.权利要求4的方法,其中所述第一和第二请求指定一个文件操作。6.一种用于管理文件的方法,包括在服务器端接收访问具有文件名和标识符的文件的第一请求;和将一确认消息发送到所述客户。7.权利要求6的方法,还包括搜索所述文件的位置信息;将所述位置信息与所述标识符关联起来;和将所述位置信息和所述标识符存储到存储器中。8.权利要求7的方法,还包括在所述服务器端接收使用所述标识符访问所述文件的第二请求;和使用所述标识符从所述存储器中检索所述位置信息。9.一种用于管理文件的方法,包括在客户端接收具有文件名的文件请求;将一标识符与所述文件名关联起来;将所述标识符和所述文件名发送到一服务器;使用所述文件名来搜索位置信息;和存储所述位置信息与所述标识符。10.权利要求9的方法,还包括将一确认消息发送到所述客户。11.一种用于管理文件操作的方法,包括通过一文件系统接口接收带有文件名的文件请求;通过所述文件系统接口将一个惟一标识符指配给所述文件名;和将所述惟一标识符和文件名发送到一文件系统管理器。12.权利要求11的方法,还包括在所述文件系统管理器接收所述惟一标识符和所述文件名;使用所述文件名搜索文件信息;和使用所述惟一标识符存储所述文件信息。13.一种产品,包括存储介质;所述存储介质包括存储的指令,当该指令被处理器执行时,导致在客户端接收访问具有文件名的文件的第一请求,在所述客户端将一标识符与所述文件名关联起来,以及将所述第一请求与所述标识符和所述文件名一起与发送到一服务器。14.权利要求13的产品,其中当该存储的指令被处理器执行时,还导致将所述标识符和文件名存储到存储器中。15.权利要求13的产品,其中当该存储的指令被处理器执行时,还导致接收来自所述服务器的一个确认消息。16.权利要求13的产品,其中当该存储指令被处理器执行时,还导致在所述客户端接收访问所述文件的第二请求,从所述存储器中检索与所述文件名相关联的所述标识符,以及使用所述关联的标识符将所述第二请求发送到所述服务器。17.一种产品,包括存储介质;所述存储介质包括存储的指令,当该指令被处理器执行时,导致在客户端接收具有文件名的文件请求,将一标识符与所述文件名关联起来,将所述标识符和所述文件名发送到一服务器,使用所述文件名搜索位置信息,以及存储所述位置信息与所述标识符。18.权利要求的产品17,其中当该存储的指令被处理器执行时,还导致将一确认消息发送到所述客户。19.一种用于执行文件管理的装置,包括接收对具有文件名的文件的请求的客户,所述客户将一个惟一标识符指配给所述文件名,并且将所述惟一标识符和所述文件名发送到一服务器;和与所述客户相连接的互连系统,该互连系统将所述惟一标识符和所述文件名传送到所述服务器。20.权利要求19的装置,还包括接收所述惟一标识符和文件名的服务器,所述服务器用于定位所述文件的信息,并且使用所述惟一标识符来存储所述信息。21.一种用于执行文件管理的装置,包括将一个标识符指配给一个文件名的客户;用于使用所述文件名来定位文件信息以及使用所述标识符存储所述文件信息的服务器;和用于在所述客户和所述服务器之间传输所述文件名和所述标识符的互连系统。22.权利要求21的装置,其中所述客户包括一个操作系统服务模块。23.权利要求21的装置,其中所述服务器包括一个中间服务模块。24.权利要求21的装置,其中所述互连系统根据外围部件互连系统和I2O系统进行操作。25.一种用于执行文件管理的装置,包括接收对具有文件名的文件的请求并且将一个惟一标识符指配给所述文件名的文件系统接口;使用所述文件名定位文件信息和使用所述惟一标识符存储所述文件信息的文件系统管理器;和在所述文件系统接口和所述文件系统管理器之间传送所述惟一标识符和所述文件名的通信系统。26.权利要求25的装置,其中所述通信系统包括通信介质,该通信介质包括如下组中的至少一种,该组包括双绞线、同轴电缆、光纤和射频;以及根据一组通信协议操作的通信接口。全文摘要描述一种用于在计算机和通信网络中管理文件的方法和装置。文档编号G06F12/00GK1549981SQ01822945公开日2004年11月24日申请日期2001年11月20日优先权日2000年12月30日发明者S·达克,S达克申请人:英特尔公司