可移动存储设备上的外部文件系统元数据的维护
背景
暂时存储设备(TSD)近年来普遍用于便携式计算机数据存储。TSD可以采用通用串行总线(USB)或电气和电子工程师协会(“IEEE”)1394标准(火线)、可移动硬盘驱动器、闪存驱动器和用于移动电话、数字照相机、个人数字助理、数字音乐播放器(例如MP3播放器)和其它便携式设备的存储卡和“棒”。
只要TSD连接到主机设备上,维护关于包含在TSD上的文件的外部文件系统通常需要完全列举整个文件目录树。这确保可靠地检测到可能在从当前主机断开TSD时发生的对在TSD上维护的数据文件的所有改变。例如,当TSD连接到运行Windows Shell Autoplay(“Autoplay”)的主机设备上时,Autoplay走查TSD上的整个文件系统树分层结构以确定TSD上存在哪些内容类型。Autoplay使用该信息来为所发现的内容类型构造适当的处理程序的列表。
问题可以被概括到包括需要TSD的文件系统自身不能以高效的形式提供的聚集的存储卷元数据的应用程序。这种应用程序必须在每次连接TSD时,枚举该设备的整体内容并且冗余地重新生成元数据索引。这种冗余不仅是对时间的浪费,就功耗而言它也是低效的。不幸的是,随着TSD的存储容量的增加,需要不断增加的输入/输出(I/O)数据传输和时间量来创建索引,而导致对用户体验的负面影响。为了精确地跟踪整个TSD的元数据要支付过高的代价,尤其是在存储卷改变地很少或完全没有改变的情况下。
概述
此处公开的过程以在主机计算设备和暂时存储设备(TSD)之间的接口的形式提供了消除对TSD上的存储卷进行完全目录爬行以维护元数据数据库的需求的附加功能。元数据数据库是增量式地更新的,而非在TSD和高性能主机之间的每次连接时完全地重新生成元数据数据库。该功能帮助主机设备更高效地跟踪和维护外部文件(exo-file)系统元数据。精确地执行对外部文件系统元数据的该维护而同时考虑TSD可能与之连接的主机系统的多样性需要在TSD和能够使用该新接口功能的主机之间的协调。主机设备被分配到发现并使用该新的TSD功能以及使用该功能来高效地更新元数据数据库的任务。主机设备还可以向TSD提供管控TSD的操作的参数。TSD协作地将与对存储卷上的数据做出的改变的存储位置相对应的地址记入日志,并且在发现主机设备更新元数据数据库的能力时,TSD将与元数据数据库的可用性以及地址的日志有关的发现提供给主机设备。
提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。从以下更具体撰写的各实施例的详细描述以及在附图中进一步示出并且在所附权利要求中限定的实现,所要求保护的主题的其他特征、细节、实用程序和优点将变得显而易见。
附图简述
图1是共同维护存储在暂时存储设备上的数据文件的外部文件系统元数据数据库的高性能主机设备以及作为替换的较低性能的主机设备的每一个和暂时存储设备之间的接口的示意图。
图2是当与主机设备连接以管理外部文件系统元数据数据库时暂时存储设备执行的示例性过程的流程图。
图3是当与暂时存储设备连接以管理外部文件系统元数据数据库时高性能主机设备执行的示例性过程的流程图。
图4是当与暂时存储设备连接以管理外部文件系统元数据数据库时较低新性能的主机设备执行的示例性过程的流程图。
图5是可以用作连接到暂时存储设备的主机设备的通用计算机系统的示意图。
详细描述
暂时存储设备(TSD)一般以标准目录树的形式维护存储在主存储卷内的所有数据文件的文件系统。这些数据文件可以是任何类型的,例如一般保存在存储设备上的文字处理或电子表格文档、音乐文件、视频文件、图像或图片文件或任何其他类型的数据。外部文件系统元数据可以在TSD上以与存储卷上主文件系统中的文件有关的信息的数据库的形式来实现。外部文件系统元数据可以单独地维护并且远离主文件系统。外部文件系统元数据数据库帮助任何连接主机设备更快速地将关于存储在TSD上的数据的信息提供给该主机设备的用户,而无需扫描或解析存储在该TSD的存储卷中的所有实际数据文件。该功能的一个示例可以在数字音乐播放器(例如MP3播放器)的上下文中理解,它通过使用元数据数据库可以更快速地将关于存储在该设备上的歌曲的信息提供给用户。
外部文件系统元数据数据库的高效管理的基础是例如作为固件的一部分由TSD维护的写入数据块地址的日志。在连接的主机设备请求时,TSD可以激活或停用该日志,或过滤特定的地址范围以防止它们出现在日志中。例如,数字相框可能只对于对存储在TSD上的图像数据文件的改变感兴趣。日志中的主机维护的元数据数据库没有解决的每个块条目表示主机设备必须以从文件系统的对应于该块的文件中提取相关元数据并接着使用该提取的元数据更新元数据数据库的形式执行的工作。一旦主机设备完成了对元数据数据库的更新,该主机设备就可以发出使TSD部分地或全部地从日志清除条目的请求。
有多种方式可以使TSD长久地保存日志,每种方式具有其自身的一组折衷。两种示例性方式中的第一种是对日志的地址范围进行行程编码(RLE)。RLE方式的优点是块是可变长度的并且可以用诸如频率等附加数据进行扩展。RLE也利用文件系统喜欢邻接的块地址的事实。第二种示例性方式是使用位图编码来写日志。位图编码的优点是块是固定长度的并且该格式每块仅消耗1位。位图编码的缺点是不可扩展。为了进一步促进日志中的大小效率,主机设备可以建议TSD写最小的分配单元和/或排除特定的地址区。
出于以下讨论的目的,可以将主机分成两种类型:高性能(HC)和较低性能(LC)。HC主机(例如台式计算机、膝上型计算机和服务器计算机)资源相对丰富,具有大且快速的处理器能力并且能够容易地解析大量文件系统数据并生成外部文件系统元数据数据库。相反,LC主机(例如视频游戏系统、汽车立体声、便携式媒体播放器、数字相框等)具有有限的资源,具有较慢、较小容量的处理器并且不能够在可容忍的时间段内从TSD的文件系统生成这样的元数据数据库。由此,生成和更新数据库的责任和数据库读取能力一起落到HC主机的身上。LC主机主要关心对元数据数据库的读取,如果还会的话。当然对于该分类可能存在例外,但是它一般适用。
对于HC主机遇到的每个TSD,生成和更新外部文件系统元数据的数据库。表示TSD的整体内容的该元数据数据库被长久地保留在TSD上并且与TSD自身一起传播,该元数据数据库在文件系统内作为文件或在文件系统外作为从存储卷传递主要数据文件的数据流之外的独立字节流来访问。如果当TSD从主机(例如定期地创建和存储数据文件(例如联系人信息)并且也用作MP3播放器的个人数字助理或智能电话)断开连接时,可以独立地操作TSD,则元数据数据库可以由当前连接的主机设备、其他将来连接的主机设备或甚至由TSD自身来消费。
在示例性实现中,当HC主机设备第一次与TSD连接时,HC主机设备上的更新器应用程序可以首先确定该TSD是否被配置成维护元数据数据库。如果TSD确实具有元数据数据库,则主机设备接着确定该TSD是否支持块地址日志记录。如果是,则主机设备检查日志以获取自上一次更新元数据数据库以来被写入到TSD中的块。如果主机设备指示TSD在更新元数据数据库时主动地清除日志条目,则可以确保日志仅包含自上次更新以来的条目。对于TSD上的日志中每个改变的数据块,主机设备定位文件系统中与改变的块相对应的数据文件的地址并且处理该数据文件以添加、移除或更新外部文件系统元数据数据库中的元数据。一旦更新了元数据数据库,主机设备指示TSD从日志中清除对应的一个或多个块条目。可以用事务性的方式执行这些操作以保持元数据数据库和块地址日志的完整性。
当TSD保持连接到当前的主机设备上时,可以随着各种应用程序和系统组建修改TSD的内容而找机会更新元数据数据库。块地址记录还有助于在元数据数据库更新期间从主机设备“意外地移除”TSD(即在没有确保对TSD的读取/写入操作已完成且它是出于非活动状态的情况下移除)的情况下保护其免于丢失完整性。只要适当地处理块地址日志条目移除和元数据数据库更新(以及交互元数据(inter-metadata)数据库更新),则在元数据数据库更新期间对TSD的任何意外移除在最坏的情况下只会导致尚待添加某些元数据数据库记录的暂时状态。然而,将TSD重新连接到同一或另一HC主机会从它被意外移除而打断的同一位置继续元数据数据库的更新任务。
HC主机可以被配置成在其自己内部的固定存储中维护元数据数据库的附加备份副本。元数据数据库的该副本可以被用作离线参考,或它可以用作TSD同步机制的整合组件。用于TSD的唯一序列号(要求符合许多存储设备规范)有助于维护备份元数据数据库副本和由该元数据数据库索引的TSD之间的一一对应关系。作为对元数据数据库的无意或恶意破坏的预防,它也可以由更新元数据数据库的HC主机设备签署,这样使得元数据数据库内的数据的任何消费者在使用该数据之前可以首先经由互相信任的根来验证由元数据数据库更新器执行的更新的真实性。
作为对理解该技术的帮助,在图1中结合HC主机114和LC主机112描述了暂时存储设备102,即TSD。TSD 102还包括在嵌入固件106的控制下运作的执行数据传递、主机-设备互相认证以及TSD 102的其他功能的处理器104。每个TSD 102可以具有至少一个且可能更多的存储卷110。TSD在固件106内维护块地址日志108以确保日志的持续性并且在它是标准文件系统中的文件的情况下防止可能的盖写。块地址日志108记录对存储卷110上的标准文件系统中的数据文件的所有改变的位置,而不管TSD 102连接到哪个主机设备或者甚至在TSD 102自身能够对存储卷做出改变的情况下。TSD还与存储卷110分开地维护存储卷110上的数据文件的元数据数据库112。
如图1中所示,可以是个人计算机的HC主机114具有相对高速且高性能的中央处理器116以及能够询问TSD 102上的存储卷110以生成元数据数据库112的足够量的工作存储器。然而,如果HC主机116上的中央处理器无需在每次TSD 102连接到HC主机114上时解析整个存储卷110以更新元数据数据库112,则用户体验可能更快。当与TSD 102连接时,HC主机114还实例化元数据更新器程序118,元数据更新器程序118可以被理解为结合TSD 102运作以维护TSD 102上的元数据数据库112的应用程序协议接口。HC主机设备114还可以主存元数据更新器118写入到HC主机114上的元数据数据库镜像120。元数据数据库镜像120是元数据数据库112的副本,并且可以由HC主机设备114用于向HC主机设备114的用户提供对TSD 102的元数据的更快速的访问或者在HC主机设备114从TSD 102断开时向该用户提供对TSD 102的元数据的访问。
当HC主机设备114与TSD 102连接时,元数据更新器118实例化并询问TSD 102以确定TSD 102是否维护块地址日志108,并且如果是,则标识自上一次更新元数据数据库112以来对存储卷110的任何改变。由此,可以可以由带有元数据更新器118的任何高性能主机在连接到TSD 102时执行对元数据数据库112的更新。这确保正在进行的更新仅是增量的并且无需在每次TSD 102连接到主机设备上时解析整个存储卷。
元数据更新器118指示TSD解析存储卷110上与记录在日志108中的块改变相关联的数据文件并且返回与所添加的、修改的或删除的文件有关的元数据136和块地址。例如,存储卷110可以包含各种数据文件,包括文档128、音乐文件130、视频文件132和图片文件134。此外,假定日志108指示在特定的块地址处更新了音乐文件130。元数据更新器118指示TSD 102提取并合成与该特定音乐文件相关联的任何相关元数据136,例如歌曲标题、艺术家、专辑名称和歌曲的长度。该元数据136接着可以被直接复制到元数据数据库112或HC主机设备114上以用于其他处理,并接着写回到TSD 102上的元数据数据库112中。
如果HC主机设备114如图1所示地维护元数据数据库镜像120,则元数据更新器118将需要从TSD 102将整个元数据数据库112复制到HC主机设备114上,以确保将另一主机设备做出的改变反应在元数据数据库镜像120中。或者,元数据更新器118的协议可以维护所有主机设备可以咨询以确定需要在任何镜像数据库上更新什么元数据的对元数据数据库112的所有改变的记录。
相反,当LC主机设备122与TSD 102连接时,LC主机122的处理器124不够强大而不能及时管理生成元数据数据库112的元数据136所必需的数据解析和传递功能。由此,LC主机设备122不运行元数据更新器程序。然而,LC主机设备122可以利用由较高性能的主机准备的元数据数据库112来提供有关LC主机设备122与TSD 102交换的数据文件的信息。例如,如图1中所示,LC主机设备122可以是具有有限的处理能力数码相框设备。相框的固件可能在功能上限于从TSD 102上的存储卷110传递图片文件130的副本以及删除先前存储在LC主机设备122上的图片文件。也可以与LC主机设备122共享元数据数据库112的子集126。在图1的示例中,仅在数码相框上维护与图片文件相关的元数据。相框可能具有或可能没有对存储卷110上的数据文件造成改变的能力。在LC主机设备122能够修改TSD 102的存储卷110上的任何数据文件的情况下,TSD 102的固件106将以把存储块改变条目记录到块地址日志108中的形式捕捉这种改变。
图2中描述了TSD在与装备元数据更新器模块的HC主机设备连接时执行的示例性过程200。最初,当TSD在物理上与主机设备连接时,在建立操作202中建立通信连接。TSD接着在发现操作204中执行发现功能,以确定主机设备是高性能设备还是较低性能的设备。这种类型的发现通知TSD关于将需要将什么类型的信息提供给主机设备,例如主机设备是否期望块地址日志改变或没有元数据更新能力。此外,TSD执行认证例程以确定主机设备是否被授权访问存储卷上的数据文件和/或元数据数据库,如在认证操作206中所示。认证可以使用证书、口令或者从主机设备接收的其他形式的认证来执行,以便与TSD持有的证书作比较。
一旦向TSD认证了主机设备并且假定确定主机设备是高性能设备,则TSD在输出操作208中将在日志中发现的任何块地址改变提供给主机设备中的元数据更新器应用程序。或者,在元数据更新器的指示下,TSD可以过滤或限制它提供给主机设备上的元数据更新器程序的来自日志的改变信息。例如,如果主机设备是仅想要与TSD上的音乐文件相关的更新信息的有限功能的设备(例如数字音乐播放器)时,可以做出对有限的日志信息的请求。
在第一提供操作210中,在将日志传递给主机设备之后并且在元数据更新器的指示下,TSD访问在日志中标识的块地址处的数据文件并且主机设备从经修改的数据文件提取相关的元数据信息以用于创建和更新元数据数据库。TSD接着在第二提供操作212中通过执行由元数据更新器指示的任何读取/修改/写入命令来向主机设备提供对元数据数据库的访问。元数据更新器由此能够仅用对存储卷上的数据文件的改变来更新存储在TSD上的元数据数据库,并由此极大地减少先前构建元数据数据库所需的时间和处理能力。
一旦更新了元数据数据库,则元数据更新器应用程序可以指示TSD更新日志,TSD在更新操作214中执行该更新。如果日志中指示的所有改变都反应在对元数据数据库的更新中,则TSD会清除在日志中反应的所有块地址改变。然而,如果仅有某些块地址改变反应在元数据数据库中,例如在以上示例中仅与音乐文件相关的那些改变,则TSD会只从日志中移除在元数据数据库中反应的那些地址块。在更新了日志之后,可以将TSD从主机设备断开,如在断开操作216中所示。
图3中描绘了装备元数据更新器模块的HC主机设备在与TSD连接时执行的示例性过程300。最初,当HC主机设备在物理上与TSD连接时,在建立操作302中建立通信连接。接着在发现操作304中执行发现功能,其中HC主机设备通知TSD它是高性能的。作为该操作的互补部分,HC主机可以获悉TSD是否提供元数据数据库以及进一步地TSD是否支持块地址记录。这种类型的发现向主机设备通知主机设备是否能够更新元数据数据库、是否必须通过解析TSD上的整个存储卷来执行更新或者TSD是否支持允许对元数据数据库做出基于改变的更新的块地址日志。此外,HC主机设备对TSD执行认证例程以确定主机设备是否被授权访问存储卷上的数据文件和/或元数据数据库,如在认证操作306中所示。认证可以使用证书、口令或者主机设备提供的其他形式的认证来执行,以便与TSD持有的证书或其他挑战信息作比较。
在读取/检查操作308中,一旦TSD确认了主机设备的认证,则HC主机设备可以访问TSD上的日志以便向主机设备中的元数据更新器应用程序标识在日志中发现的任何块地址改变。一旦接收到日志数据,元数据更新器应用程序仅读取存储卷上新的或经修改的数据文件以便为每个新的或经改变的文件提取并合成元数据,如在提取和合成操作310中指示的。在写入操作312中,在创建元数据时,元数据更新器将新的元数据写入到元数据数据库中,并且在适当时修改其中的现有元数据。一旦更新了元数据数据库,则元数据更新器可指示TSD上的固件转储清除日志,以使得只有对存储卷上的数据文件的新的改变才会受到将来的更新。
在更新了元数据数据库之后,作为正常操作的一部分,HC主机设备可以访问元数据数据库中的信息,以便将元数据提供给主机设备的用户,如查询操作316中所示。由于仅执行自上一次更新以来发生的HC主机设备对元数据的改变,因此向用户提供完全最新元数据信息的响应时间非常地快;取决于改变的数量,在大多数情况下,更新操作所需的时间对用户而言可能会是不明显的。当主机设备与TSD连接时,HC主机设备还可以将数据写入存储区域或从其中读出数据,如在读取/写入操作318中所示。为了维护当前的元数据数据库,过程300可以循环回到操作308中的读取和检查日志文件,以便记录在元数据数据库的当前会话期间由HC主机设备做出的改变。一旦在元数据数据库中反应了对数据文件的所有改变,HC设备会在断开操作320中从TSD断开。
图4中示出了LC主机设备在与TSD连接时执行的替换的示例性过程400。最初,当LC主机设备在物理上与TSD连接时,在建立操作402中建立通信连接。接着在发现操作404中执行发现功能,其中LC主机设备通知TSD它是较低性能的设备。作为该操作的互补部分,LC主机可以获悉TSD是否提供元数据数据库以及进一步地TSD是否支持块地址记录。此外,LC主机设备可以对TSD执行认证例程以确定主机设备是否被授权访问存储卷上的数据文件和/或元数据数据库,如在认证操作406中所示。认证可以使用证书、口令或者主机设备提供的其他形式的认证来执行,以便与TSD持有的证书或其他挑战信息作比较。可选地,如果LC主机设备还未成功地执行对TSD的认证例程,则TSD可允许对数据文件和/或元数据数据库的只读访问。
一旦向TSD认证了主机设备,则作为正常操作的一部分,LC主机设备可以访问元数据数据库中的信息以便向主机设备的用户提供元数据,如在查询操作408中所示。当主机设备与TSD连接时,LC主机设备还可以将数据写入存储区域或从其中读出数据,如在读取/写入操作410中所示。由于LC主机设备没有解析日志或者写入或修改元数据数据库的能力,因此由LC主机设备对TSD的存储卷上的数据文件做出的改变的位置将被记录在块地址日志中。这样,下次TSD与HC主机设备连接时,由LC主机设备做出的对数据文件的所有先前的改变会被捕捉并且被包括在HC主机设备对元数据数据库的将来的修改中。一旦LC主机设备做出了对数据文件的所有期望的改变,LC主机设备可以在断开操作412中从TSD断开。
图5中示出了对于TSD可以作为主计算机设备运作的通用计算设备500的示意图。用于主机计算设备的示例性硬件和操作环境可以包括处理单元502、系统存储器504和操作上将包括系统存储器504的各种系统组件耦合到处理单元502的系统总线518。可以有一个或多个处理单元502,这样使得计算机500的处理器包括单个中央处理器(CPU)或多个处理单元,通常称为并行处理环境。计算机500可以是常规的计算机、分布式计算机或任何其他类型的计算机。
系统总线518可以是若干种总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线、交换光纤、点对点连接和使用各种总线体系结构中的任何一种的局部总线。系统存储器504可以被简称为存储器,并且包括只读存储器(ROM)506和随机存取存储器(RAM)505。基本输入/输出系统(BIOS)508可以被存储在ROM 506中,它包含有助于例如在启动期间在计算机500内的各个元件之间传送信息的基本例程。计算机500还可包括用于对硬盘536(未示出)进行读写的硬盘驱动器530,用于对可移动磁盘536进行读写的磁盘驱动器532,以及用于对诸如CD ROM或其它光介质等可移动光盘538进行读写的光盘驱动器534。
硬盘驱动器530、磁盘驱动器532和光盘驱动器534分别通过硬盘驱动器接口520、磁盘驱动器接口522和光驱接口524连接到系统总线518。驱动器及其相关联的计算机可读介质为计算机500提供计算机可执行指令、数据结构、程序模块和其他数据的非易失性存储。本领域的技术人员应该理解可以存储可由计算机访问的数据的任何类型的计算机可读介质,例如磁带盒、闪存卡、数字视频盘、RAM和ROM,都可以用于该示例性操作环境中。
多个程序模块可以被存储在硬盘530、磁盘532、光盘534、ROM 506或RAM 505上,包括操作系统510、一个或多个应用程序512、其他程序模块514和程序数据516。在示例性实现中,可以包含包括元数据更新器应用程序在内的用于与TSD进行通信和数据传递的程序来作为操作系统510的一部分(例如作为应用协议接口(API)的一部分)、分立的应用程序512或其他程序模块514。
用户可以通过诸如键盘540、定点设备542(例如鼠标)的输入设备将命令和信息输入到个人计算机500中。其他输入设备(未示出)可以包括例如话筒、操纵杆、游戏垫、平板、触摸屏设备、圆盘式卫星天线、扫描仪、传真机和摄像机。这些和其他输入设备通常可以通过耦合到系统总线518的串行端口接口526连接到处理单元502,但是可以用诸如并行端口、游戏端口或通用串行总线(USB)的其他接口连接。
监视器544或其他类型的显示设备也经由诸如视频适配器546等接口连接到系统总线518。除了监视器544之外,计算机通常包括其他外围输出设备,诸如打印机558和扬声器(未示出)。这些和其他输出设备通常通过耦合到系统总线518的串行端口接口526连接到处理单元502,但是也可以由诸如并行端口、游戏端口或通用串行总线(USB)等其他接口连接。媒体调谐器模块506也可以连接到系统总线518以调谐音频和视频节目(例如TV节目)以供通过视频适配器546或其他呈现输出模块输出。
计算机500可使用到一个或多个远程计算机,诸如远程计算机554的逻辑连接在网络化环境中操作。这些逻辑连接可以用与计算机500耦合或集成的通信设备实现;本发明不限于特定类型的通信设备。远程计算机554可以是另一计算机、服务器、路由器、网络个人计算机、客户机、对等设备或其它常见的网络节点,并且通常包括以上相对于计算机500描述的许多或所有元件,但在图5中仅示出了存储器存储设备556。图5中所描绘的逻辑连接包括到局域网(LAN)550和广域网(WAN)552。这种联网环境常见于办公室网络和公司范围的计算机网络、内联网和因特网等所有类型的网络。
当在LAN 550网络环境中使用时,计算机500通过网络接口或适配器528,例如以太网或其他通信接口连接到局域网550。当在WAN 552网络环境中使用时,计算机500通常包括调制解调器548、网络适配器、或用于通过广域网552建立通信的任何其他类型的通信设备。或为内置或为外置的调制解调器548经由串行端口接口526连接到系统总线518。在网络化环境中,相对于个人计算机500所描述的程序模块或其部分可以存储在远程存储器存储设备中。应该理解,所示网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其它手段和通信设备。
本文中描述的技术可以被实现为一个或多个系统中的逻辑操作和/或模块。逻辑操作可以被实现为在一个或多个计算机系统中执行的一系列处理器实现的步骤,并且被实现为一个或多个计算机系统内的互连的机器或电路模块。同样地,可以按照由模块执行或实现的操作来提供对各种组件模块的描述。所得的实现是取决于实现所描述的技术的基础系统的性能要求来选择的。因此,组成本文所描述的技术的实施例的逻辑操作被不同地称为操作、步骤、对象或模块。此外,应该理解,除非以其他方式明确地要求保护或权利要求语言固有地需要一特定的次序,否则任何操作可以按任何次序来执行。
在一些实现中,制品是作为计算机程序产品来提供的。在一个实现中,计算机程序产品是作为存储计算机系统可执行的经编码的计算机程序指令的计算机可读介质提供的。计算机程序产品的另一实现在由计算机系统包含在载波中并且编码计算机程序的计算机数据信号中提供。本文也描述和叙述了其他实现。
以上说明、示例和数据提供了对本发明的示例性实施例的结构和使用的完整的描述。虽然以上带有一定程度的特殊性或参考一个或多个个别的实施例描述了本发明的各实施例,但是本领域的技术人员可以对所公开的实施例做出许多改变,而不背离本发明的精神或范围。具体地,应该理解可以独立于个人计算机采用所描述的技术。因此构想了其他实施例。包含在以上描述中和在附图中示出的所有问题都旨在被解释为仅仅是对特定实施例的说明而非限制。可以做出对细节或结构的改变而不背离在所附权利要求中定义的本发明的基本元素。