具体实施方式
介绍
下面的讨论涉及在客户机和服务器设备之间提供有效和可靠的文件更新的系统和方法。远程协议,一般被配置得使客户机容易控制远程服务器上各种文件系统的任务(例如,文件的读取,创建,和更新),包括使客户机能够更新服务器上的文件而不必将整个文件从客户机传送到服务器的扩展。远程协议的扩展是一个新文件系统控制(fsctl)命令,该命令指导服务器从存在的源文件收集数据块并且在新目标文件中合适的偏移量复制该数据块。副本收集fsctl命令允许客户机在目标文件中留下(或制造)“空隙”,然后可以将新数据写入该空隙中,并且通过不将源文件的一部分复制到目标文件中来删除源文件的一部分。
所描述的系统和方法的优点包括,文件更新消耗的带宽与文件改变的大小成比例,消耗的带宽不与整个文件的大小成比例。这减少了文件更新期间的延迟和响应时间,同时也降低在更新期间的网络故障导致文件损坏的风险。
典型实施例
图1说明了适于通过远程协议实施远程文件更新的典型操作环境100。该环境100仅仅是适于操作环境的一个例子并且不试图暗示对发明的使用范围或功能的任何限制。其他可能适合的公知的计算系统,环境,和/或结构包括,但不限制为,个人计算机,手持或膝上型设备,多处理器系统,基于微处理器的系统,可编程消费者电子仪器,网络PC,小型计算机,主计算机,包括任意上述系统或设备的分布式计算环境,等等。
典型的操作环境100包括通过网络106操作地耦合到服务器设备104(此后一般称为“服务器”或“服务器设备”)的客户设备102(此后一般称为“客户机”或“客户设备”)。网络106可以表示任何种类的传统网络拓扑和类型(包括光学,有线和/或无线网络),应用任何类型的传统网络协议(包括公共和/或专有协议)。网络106可以包括,例如,本地网络,企业网络,或因特网,也可能是一个或多个局域网(LAN)和/或广域网(WAN)的至少一部分。
客户机102和服务器104使用客户机/服务器模式通信,在该模式中客户机(客户程序)向服务器(服务器程序)产生服务请求并且服务器响应该请求。 客户机/服务器模式基于通信协议,该协议通常使客户应用程序能够访问和操作远程服务器上的文件(例如,读取,编辑,更新,以及创建文件)。该远程协议也典型地提供客户机访问其他服务器资源诸如打印机,邮筒,以及命名管道。该协议的例子可以包括服务器消息块(SMB)协议,网络文件系统(NFS)协议,WebNFS协议,公共因特网文件系统(CIFS)协议,Samba,等等。能够通过各种网络使用该协议,诸如内部网或因特网,并且可以在其他协议上运行或者与其他协议相结合,诸如TCP/IP协议,网络分组交换协议,和NetBEUI协议。如下面讨论的有关典型实施例,该协议的扩展能够有效和可靠地更新远程文件。虽然下面的典型实施例结合SMB协议描述协议扩展,值得注意的是,SMB协议仅仅是能够受益于所述的扩展的适当协议的一个例子。因此,典型实施例中SMB协议的使用并不试图暗示对扩展可以应用的其他适当协议的任何限制。
客户机102典型地能够执行公共计算功能,诸如电子邮件,日历,任务组织,字处理,网页浏览,等等。客户机102可以运行开放平台操作系统,诸如Microsoft
的Windows
操作系统。客户机102可以作为任何类型的传统计算设备被实施,包括,例如,台式PC,笔记本或便携式计算机,工作站,主计算机,因特网设备,游戏控制台,手持式PC,蜂窝电话或其他无线通信设备,个人数字助理(PDA),机顶盒,它们的组合,等等。下面参照图9更加详细地描述用于实施客户机102的典型计算环境。
服务器104通常被配置为文件服务器,用于数据文件和其他资源的存储和管理。服务器104通过网络106为授权客户机提供访问该数据和资源。服务器104可以作为任何类型的传统计算设备被实施,诸如台式PC,工作站,主计算机,因特网设备,等等。下面将参照图9更加详细地描述用于实施服务器104的典型计算环境。
典型实施例
图2说明了被配置得通过远程协议实施远程文件更新的客户设备102和服务器设备104的典型实施例。客户机102包括被配置得执行存储在存储器202中的应用程序204的一个或多个处理器200。存储器202也存储图2中称为客户端协议206的远程协议。在本实施例中,客户协议206作为SMB协议的客户端部分被实施。然而,如上所述,客户协议206不被限制为SMB协议,并且可以作为各种其他合适的协议被实施,该其他的协议包括,例如,NFS协议,WebNFS 协议,CIFS协议,Samba,等等。客户协议206的扩展在图2中图示为副本收集扩展(启动程序)208,下面结合它的相应服务器,副本收集设备更加详细地讨论该扩展。
服务器104包括配置得执行存储在存储器212中的服务器协议214的一个或多个处理器210。服务器协议214作为SMB协议的服务器端部分被实施。如上所述,客户协议206的收集复制启动程序208的相应部分为副本收集扩展设备216,它是服务器协议214的扩展。存储器212也存储文件存储器218中的数据文件。
客户协议206使各种客户应用程序204能够调用服务器104上的某些文件系统控制操作,该服务器为文件存储器218中的文件提供某种类型的访问。所访问的文件可以包括,例如,读取文件,更新文件,以及创建新文件。服务器协议214通过执行请求任务来响应来自客户机102的文件系统控制。
远程协议(206,214)的副本收集协议扩展(例如,副本收集启动程序208,副本收集扩展设备216)为服务器104提供客户应用程序204可以利用的新的文件系统控制(fsctl)命令,以便作用于客户机102的远程文件更新。一般,新的副本收集fsctl命令指导服务器104如何从服务器104上的源文件复制源数据到服务器104上的目标文件。在一个实施例中,副本收集fsctl命令用源文件标识符(恢复键),以及文件区域阵列处理目标文件,并且将从源文件复制的数据的错误状态和字节总数返回给目标文件。文件区域阵列中的每个区域包括源文件偏移量,目标文件偏移量,以及复制/传送的数据字节的长度或数量。因此,定义大块或块数据的每个区域从源文件复制传送到服务器104上的目标文件。源文件偏移量标识源文件中的开始位置,大量的源数据字节(例如,源文件中的数据块)将从该位置被复制。目标文件偏移量标识目标文件中的开始位置,一些源数据字节将复制到该位置。长度定义了从源文件被复制到目标文件的字节数量。
客户应用程序204可以利用新的副本收集fsctl来有效地仅仅实施服务器端的数据复制功能。例如,客户应用程序204可以利用这个fsctl来更新下面典型序列中的远程文件:
1)应用程序打开至少具有READ_DATA访问的源文件。
2)应用程序通过存在的fsctl (FSCTL_SRV_REQUEST_RESUME_KEY)向服务器请求源文件标识符(恢复键)。
3)应用程序创建/打开至少具有WRITE_DATA访问的目标文件。
4)应用程序创建从源文件复制到目标文件的数据块的区域列表。
5)应用程序发布副本收集fsctl命令(FSCTL_SRV_COPYCHUNK)并且检查被复制字节的返回状态和数量。
图3和4说明了远程服务器104上的源文件300和目标文件302的例子,以及客户机102上源文件的客户复制304的例子。源文件300,目标文件302,以及源文件复制304的例子在使用副本收集协议扩展208,216(副本收集fsctl命令)说明更新远程文件的典型过程中是有用的。值得注意的是,图3和4中的说明试图提供远程文件更新的概念上的例子,并且不用于任何限定,通过实际机制该远程文件更新可以发生。在图3的例子中,客户应用程序204通过将打开请求传送到服务器104而打开了服务器104上的源文件300。客户应用程序204至少具有需要从源文件300读取数据的访问,并且已经将源文件副本304传送到了客户机102。客户应用程序204也向服务器102请求源文件标识符(恢复键),并且已经通过将另一个打开请求传送到服务器104而创建/打开了目标文件302。客户应用程序204至少具有需要将数据写到目标文件302的访问。
服务器104上源文件300和目标文件302之间的箭头用于指示副本收集fsctl命令已经从客户机102发送并且在服务器104上被执行。副本收集处理是文件更新处理的典型部分,在这里客户机102上的应用程序204的用户已经从服务器104下载了源文件300,使用应用程序204编辑作为客户副本304的源文件300,然后用被编辑的副本更新服务器104。
基于客户机102上的源文件副本304的改变,客户机102上的收集复制扩展启动程序208通过传送到服务器104的收集复制fsctl命令的生成启动收集复制处理。副本收集fsctl命令指示服务器104将源文件300的部分以与用户/应用程序204已经改变的客户机102上的源文件副本304一致的方式复制到目标文件302。服务器104上的副本收集扩展设备216解释并且实施服务器104上的副本收集fsctl命令。在这个例子中,源文件300和目标文件302之间的箭头指示收集复制fsctl命令已经提供了源文件偏移量1,确定源文件300中的开始位置,大量的源数据字节将从那里被复制。副本收集fsctl命令也提供了长度10,其用 于确定将被复制的数据字节的数量。定义数据块的源文件的偏移量和长度一起从源文件300被复制到目标文件302。在该例子中,由偏移量1开始并且由偏移量10结束的源数据块306已经通过副本收集fsctl命令被定义为从源文件300复制到目标文件302的数据块。
图示的目标文件302表示副本收集fsctl命令也提供了目标文件偏移量10,确定目标文件302中的开始位置,所识别的字节数量将被复制到该位置。因此,源数据块306根据参数长度10被复制到由偏移量10开始并且由偏移量20结束的目标文件302。如上所述,副本收集fsctl命令可以包括或定义已经从源文件300复制到目标文件302的文件区域(数据块)阵列。因此,采用与上述类似的方式,结合图3描述的副本收集fsctl命令也指导服务器104(例如,副本收集扩展设备216)从源文件300将源数据块310(源文件偏移量20,长度20)复制到目标文件302(目标文件偏移量30,长度20)。
在服务器104上执行了副本收集fsctl命令后,对于目标文件302显而易见的是,目标文件302中的两部分是左边空白,或者是空白数据。目标文件302中的空白部分312,314已经通过副本收集fsctl命令被特意地创建,以待新数据根据客户机102上源文件副本304的改变被写入到这些部分312,314。102上源文件副本304示出了2个新数据块316,318,用户已经将该数据块加入到源文件副本304中的2个不同的位置。注意到,第一新数据块316已经有效地将源数据块306重新安置到源文件副本304中的新偏移位置,而第二新数据块318已经代替(例如,删除或改写)了源文件300中的原始的源数据块308。因此,副本收集扩展启动程序208已经生成了副本收集fsctl命令用于指导服务器104将源数据块306复制到目标文件302中合适的偏移位置,并且根本不复制源数据块308。因此,源数据块308通过不被复制到目标文件302而有效地被删除。作为替代,副本收集fsctl命令留下空白部分314,新数据将被写入到其中。
图4说明了被写入到目标文件302中适当位置的客户机102上源文件副本304的新数据块316,318。从客户机102到服务器104的数据写入与上述的收集复制fsctl命令的实施同时发生。然而,值得注意的是,从客户机102的数据写入可以在收集复制fsctl命令被传送到服务器104之前或之后发生。也就是说,一旦根据客户机102的适当请求创建/打开了目标文件302,响应客户机102的副本收集fsctl命令,数据可以通过服务器104被复制到目标文件302,或者数 据可以根据客户机102的数据写入请求被写入到目标文件302。两种情况下,副本收集fsctl命令指导服务器104将源文件300的哪些数据块复制到目标文件302以及将数据块复制到目标文件302的什么位置。如果客户机102的新数据在服务器104执行收集复制fsctl命令之前或之后被写入到目标文件302,这是没关系的。
副本收集协议扩展208的副本收集fsctl命令可以在任何开放的WRITE_DATA访问处理上被发布,并且与一个实施例相关的行为可以用下面的方法定义。
输入缓冲器
该输入缓冲器是SRV_COPYCHUNK_COPY类型,如下定义:
typedef struct_SRV_COPYCHUNK
{
LARGE_INTEGER SourceOffset;
LARGE_INTEGER DestinationOffset;
ULONG Length;
}SRV_COPYCHUNK,*PSRV_COPYCHUNK;
typedef struct_SRV_COPYCHUNK_COPY
{
SRV_RESUME_KEY SourceFile;
ULONG ChunkCount;
ULONG Reserved;
SRV_COPYCHUNK Chunk[0];//阵列
}SRV_COPYCHUNK_COPY,*PSRV_COPYCHUNK_COPY;
在输入缓冲器中,SourceFile是使用文件的FSCTL_QUERY_RESUME_KFY获得的恢复键(源文件标识符),用至少READ_DATA访问打开。ChunkCount是Chunk阵列中SRV_COPYCHUNK结构(源文件区域)的数量。对于每个SRV_COPYCHUNK结构,SourceOffset被设置为从SourceFile的复制位置而DestinationOffset被设置为复制到目标的偏移量。具有字节数量的长度将从源偏移量传送到目标偏移量。
输出缓冲器
该输出缓冲器是SRV_COPYCHUNK_RESPONSE类型,如下定义:
typedef struct_SRV_COPYCHUNK_RESPONSE
{
ULONG ChunksWritten;
ULONG ChunkBytesWritten;
ULONG TotalBytesWritten;
}SRV_COPYCHUNK_RESPONSE,
*PSRV_COPYCHUNK_RESPONSE;
返回值
如果服务器将所有的指定块(数据块)从源文件复制到目标文件,副本收集fsctl返回STATUS_SUCCESS。在这种情况下,输出缓冲器中的ChunksWritten将与输入缓冲器中的ChunkCount匹配。
如果服务器104没能复制块(数据块),它将返回一个指示为什么块不能被复制的状态代码。在这种情况下,输出缓冲器中的ChunksWritten将指示被成功复制的块的数量。注意到,服务器104按照输入缓冲器中Chunk阵列指定的顺序处理块,并且将在第一个故障处停止。
如果客户机102的请求超出了所有服务器104的极限值,服务器104将返回STATUS_INVALID_PARAMETER。另外,在这种情况下,服务器104将使用下面的翻译在SRV_COPYCHUNK_RESPONSE中返回它被配置的最大极限值:
ChunksWritten=单一操作中允许的最大块SRV。
ChunkBytesWritten=任意单独块的最大尺寸。
TotalBytesWritten=所有总和块的最大总长。
如果在指定的总时间(例如,25秒的默认值)没有完成复制,服务器104返回STATUS_IO_TIMEOUT。其他配置参数的默认值可以在注册表中设置,所述参数包括:
ChunkMax=在单一的副本收集fsctl命令中将被复制的块的最大数量。例子的默认值为256。
ChunkWriteLimit=在单一的块中将被复制的数据的最大总数,用字节指定。例子的默认值为1MB。
ChunkTotalWriteLimit=在单一的副本收集fsctl命令中将被复制的数据的最大总数,用字节指定。例子的默认值为16MB。
ChunkTimout=当处理一个单一的副本收集fsctl命令时,可以消耗的时间的最大总数,用秒指定。例子的默认值为25秒。
典型方法
现在将主要参照流程图5-8描述通过远程协议实施远程文件更新的方法的例子。该方法一般应用于以上结合附图1-4讨论的典型实施例。当根据流程图以及与流程图的块相关的文本公开一个或多个方法时,将被理解的是,所述方法的元素不必按照它们被表示的顺序执行,选择性的顺序可能产生类似的优点。此外,该方法并不是唯一的并且可以独立地或者相互结合地执行。可以通过任何适当的装置执行所述方法的元素,例如,包括通过ASIC上的硬件逻辑块或通过在处理器可读介质上定义的处理器可读指令的执行。
这里所使用的“处理器可读介质”可以是任何装置,其可以包含,存储,通信,传播,或者传输指令用于由处理器使用或执行。处理器可读介质可以是,但并不限制为,电子,磁性,光学,电磁,红外线,或半导体系统,装置,设备,或传播介质。处理器可读介质更具体的例子包括,其中,具有一个或多个电线的电连接(电子的),便携式计算机软盘(磁性的),随机存取存储器(RAM)(磁性的),只读存储器(ROM)(磁性的),可擦除可编程只读存储器(EPROM或闪存),光纤(光学的),可重写光盘(CD-RW)(光学的),以及便携式光盘只读存储器(CDROM)(光学的)。
在方法500的块502,远程服务器104上的源文件被打开。用至少数据读取状态打开源文件。由客户应用程序204打开的源文件在客户机102上执行并且利用远程通信协议诸如服务器消息块(SMB)协议,网络文件系统(NFS)协议,WebNFS协议,公共因特网文件系统(CIFS)协议,Samba,等等。在块504,在远程服务器104上打开目标文件。在块506,检索源文件的副本或从服务器104下载到客户机102。在块508,客户机102要求识别源文件的标识符(例如,恢复键)。
在块510,副本收集文件系统控制(fsctl)命令被传送到服务器104用于指导服务器从源文件收集源数据并且从源文件将源数据复制到目标文件。远程协议的副本收集扩展208根据从服务器104检索的源文件副本的改变生成副本收 集(fsctl)命令。根据源文件副本的改变,文件区域的阵列被创建,该阵列定义如何从源文件将源数据复制到目标文件。文件区域的阵列,源文件标识符,以及目标文件操作按照副本收集fsctl命令被传送。创建阵列包括,用于阵列中的每个文件区域,确定表示源文件中的开始位置的源偏移量,服务器104将从该位置开始复制。目标偏移量表示目标文件中的开始位置,服务器104将源文件数据开始复制到该位置。也包括用于复制的字节的长度或数量,其用于确定从源文件复制到目标文件的每个源文件数据块的长度。
在块512,客户机102从服务器104接收状态指示符,该指示符表示从源文件复制到目标文件的具体源数据的字节的总数。该方法在图6的块514继续。在块514,如果服务器将所有指定的源数据从源文件复制到目标文件,客户机102从服务器104接收成功指示符。在块516,如果服务器104没有将所有指定的源数据从源文件复制到目标文件,客户机102接收状态失败指示符。与状态失败指示符一起,客户机102接收表示为什么没有将所有指定的源数据从源文件复制到目标文件的状态代码。
在块518,如果传送到服务器104的副本收集fsctl命令超出了所有服务器的极限值,客户机102从服务器104接收非法参数指示符。如果已经超出了服务器的极限值,客户机102也从服务器104接收配置的最大的极限值,该极限值表示为服务器参数设置的最大极限值。所接收的配置的最大极限值包括可以用单一的副本收集fsctl复制的数据块数量被配置的最大极限值(例如,256),可以用单一的数据块复制的数据总数被配置的最大极限值(例如,1MB),可以用单一的副本收集fsctl复制的数据总数被配置的最大极限值(例如,16MB),以及当处理单一的副本收集fsctl命令时,可以消耗的时间总数被配置的最大极限值(例如,25秒)。
在块520,客户机102将新数据(例如,与源文件数据相对)写入到目标文件中左边的空白位置。客户机102将写请求传送到包括被写入的新数据的服务器,与目标文件中的偏移量一起表示数据被写入的位置。值得注意的是,新数据可以在服务器执行副本收集fsctl命令之前或之后被写入到目标文件。
图7说明了通过远程协议实施远程文件更新的另一种方法700。在该方法700的块702,服务器104响应客户机102的第一打开请求用至少读数据状态打开源文件。在块704,服务器104响应客户机102的第二打开请求用至少写数据 状态打开目标文件。在块706,服务器104响应从客户机102接收的副本收集fsctl命令将源数据从源文件复制到目标文件。副本收集fsctl命令包括文件区域阵列,该阵列定义如何将源数据从源文件复制到目标文件。根据位于客户机102上源文件副本的改变在客户机102上创建文件区域阵列。阵列中的每个文件区域包括表示源文件中服务器104将要从中开始复制的开始位置的源偏移量,表示目标文件中服务器104将源文件数据开始复制到其中的开始位置的目标偏移量,以及复制的字节的长度或数量,该长度或数量确定从源文件复制到目标文件的每个源文件数据块的长度。副本收集fsctl命令也包括源文件标识符和目标文件操作。
在块708,服务器104将状态指示符传送到客户机102,表示从源文件复制到目标文件的被指定的源数据的字节的总数。在块710,如果服务器已经将所有被指定的源数据从源文件复制到目标文件,服务器104将成功指示符传送到客户机102。在块712,如果服务器104没有将所有被指定的源数据从源文件复制到目标文件,服务器104传送状态失败指示符。与状态失败指示符一起,服务器104传送表示为什么没有将所有被指定的源数据从源文件复制到目标文件的状态代码。
方法700在图8的块714继续。在块714,如果副本收集fsctl命令超出了所有服务器的极限值,服务器104将非法参数指示符传送到客户机102。如果已经超出了服务器的极限值,服务器104传送服务器104被配置的最大极限值,该极限值表示为服务器参数设置的最大极限值。所传送的被配置的最大极限值包括可以用单一的副本收集fsctl复制的数据块被配置的最大极限值(例如,256),可以用单一的数据块复制的数据总量被配置的最大极限值(例如,1MB),可以用单一的副本收集fsctl复制的数据总量被配置的最大极限值(例如,16MB),以及当处理单一的副本收集fsctl命令时,可以消耗的时间总量被配置的最大极限值(例如,25秒)。
在块716,服务器104从客户机102接收数据写入请求,该客户机包括被写入到目标文件左边空白位置的新数据(例如,与源文件数据相对)。在块718,服务器102根据该写入请求将新数据写入到目标文件的空白位置。值得注意的是,新数据可以在服务器执行副本收集fsctl命令之前或之后被写入到目标文件。
典型的计算环境
图9说明了适合实施计算机设备的典型计算环境,诸如参照图1-8在上面讨论的客户设备102和服务器设备104。虽然图9中示出了一个具体的结构,该计算设备可以在其他计算结构中被实施。
计算环境900包括计算机902形式的通用计算系统。计算机902的部件可以包括,但不限制为,一个或多个处理器或者处理单元904,系统存储器906,以及将包括处理器904的各种系统部件耦合到系统存储器906的系统总线908。
系统总线908表示一个或多个任意不同类型的总线结构,包括存储器总线或存储器控制器,外围总线,加速图形端口,以及处理器或使用任何不同总线结构的局部总线。系统总线908的一个例子可以是外围部件互连(PCI)总线,也称作附加板总线。
计算机902包括各种计算机可读介质。该介质可以是计算机902可访问的任何可获得的介质并且包括易失和非易失性介质,可移动和不可移动介质。系统存储器906包括易失性存储器,诸如随机存取存储器(RAM)910,和/或非易失性存储器形式的计算机可读介质,诸如只读存储器(ROM)912。基本输入/输出系统(BIOS)914,包含有助于在计算机902中的元件之间传送信息的基本程序,诸如在启动期间,存储在ROM912中。RAM910包含立即可访问的和/或目前由处理单元904操作的数据和/或程序模块。
计算机902也可以包括其他可移动/不可移动,易失性/非易失性计算机存储介质。举例来说,图9说明了用于从不可移动,非易失性磁介质(未示出)读取数据以及向上述介质写入数据的硬盘驱动器916,用于从可移动,非易失性磁盘920(例如,“软盘”)读取数据并且向上述介质写入数据的磁盘驱动器918,以及用于从诸如CD-ROM,DVD-ROM,或其他光学介质的可移动,非易失性光盘924读取数据和/或向上述介质写入数据的光盘驱动器922。硬盘驱动器916,磁盘驱动器918,以及光盘驱动器922通过一个或多个数据介质接口925各自连接到系统总线908。或者,硬盘驱动器916,磁盘驱动器918,以及光盘驱动器922可以通过SCSI接口(未示出)连接到系统总线908。
盘驱动器和其他相关的计算机可读介质提供计算机可读指令的非易失性存储,数据结构,程序模块,以及用于计算机902的其他数据。虽然用硬盘916,可移动磁盘920,以及可移动光盘924说明了该例子,能够理解的是,可以存储计算机可访问的数据的其他类型的计算机可读介质,诸如磁带或其他磁存储设 备,闪存卡,CD-ROM,数字通用盘(DVD)或其他光学存储器,随机存取存储器(RAM),只读存储器(ROM),电可擦除可编程只读存储器(EEPROM),等等,也可以用于实施该典型的计算系统和环境。
任意数量的程序模块可以存储在硬盘916,磁盘920,光盘924,ROM912,和/或RAM910上,举例来说,包括操作系统926,一个或多个应用程序928,其他程序模块930,以及程序数据932。每个这样的操作系统926,一个或多个应用程序928,其他程序模块930,以及程序数据932(或它们的一些组合)可以包括用于用户网络接入信息的高速缓存模式的实施例。
计算机902可以包括各种确定为通信介质的计算机/处理器可读介质。通信介质包含计算机可读指令,数据结构,程序模块,或被调制数据信号中的其他数据诸如载波或其他传送机制并且包括任何信息传送介质。术语“被调制的数据信号”意思是具有一个或多个它的特征集合或者采用信号中编码信息的方式改变的信号。举例来说,而不是限定,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声波,射频,红外线的无线介质,以及其他无线介质。上述的任意组合也包括在计算机可读介质的范围中。
用户可以通过诸如键盘934和定点设备936(例如,“鼠标”)的输入设备将命令和信息输入到计算机系统902。其他的输入设备938(没有具体示出)可以包括麦克风,操作杆,游戏垫,卫星盘,串行端口,扫描仪,等等。这些以及其他的输入设备通过耦合到系统总线908的输入/输出接口940连接到处理单元904,但是也可以通过其他的接口和总线结构连接,诸如并行端口,游戏端口,或通用串行总线(USB)。
监视器942或其他类型的显示设备也可以通过诸如视频适配器944的接口连接到系统总线908。除了监视器942以外,其他的输出外围设备可以包括能够通过输入/输出接口940连接到计算机902的部件,诸如喇叭(未示出)和打印机946。
计算机902可以使用到一个或多个远程计算机的逻辑连接而在网络环境中操作,诸如远程计算设备948。举例来说,远程计算设备948可以是个人计算机,便携式计算机,服务器,路由器,网络计算机,对等设备或其他公共网络节点,等等。远程计算设备948作为便携式计算机被说明,该计算机可以包括许多或所有这里描述的与计算机系统902相关的元素和特征。
计算机902和远程计算机948之间的逻辑连接被描述为局域网(LAN)950和通用广域网(WAN)952。该网络环境一般在办公室,企业范围计算机网络,内部网,以及因特网中。当在LAN网络环境中实施时,计算机902通过网络接口或适配器954连接到局域网950。当在WAN网络环境中实施时,计算机902包括通过广域网952建立通信的调制解调器956或其他装置。调制解调器956对于计算机902来说可以是内部的或外部的,可以通过输入/输出接口940或其他合适的机制连接到系统总线908。可以理解的是,所说明的网络连接是示范性的并且可以使用在计算机902和948之间建立通信连接的其他装置。
在网络环境中,诸如结合计算环境900所说明的,所描述的与计算机902相关的程序模块,或它的一部分,可以存储在远程存储器存储设备中。举例来说,远程应用程序958存储在远程计算机948的存储设备中。为了说明的目的,应用程序和其他的可执行程序部分,诸如操作系统,在这里作为离散块被说明,虽然认为该程序和部件在不同时间存储在计算机系统902的不同存储部件中,并且由计算机的数据处理器执行。
结论
虽然用具体到结构特征和/或方法行为的语言描述了本发明,将被理解的是,所附权利要求中定义的发明不必限定到所述的具体的特征或行为。相反,被公开的具体特征和行为作为实施发明权利要求的典型形式。