首页> 中国专利> 管理在异构环境中的对象集合的技术

管理在异构环境中的对象集合的技术

摘要

本申请涉及管理在异构环境中的对象集合的技术。描述了在一个环境中执行垃圾收集的技术,其中该环境中使用了超过一种的软件编程语言。一种技术可以包括以一种语言创建受管代理对象,该受管代理对象在存储器中以不同的语言创建非受管对象。生成和维护一个节点的集合,其中一个节点包括:对受管代理对象的引用以及对非受管对象的引用。维护集合中的节点的计数。当该计数超出阈值时,遍历所述集合,并且当一个节点中的受管代理对象已经被收集时,对同一节点中的任意非受管对象执行垃圾收集。对其他实施例也予以描述并要求保护。

著录项

  • 公开/公告号CN102736917A

    专利类型发明专利

  • 公开/公告日2012-10-17

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN201210079353.6

  • 发明设计人 G·普兰卡特;

    申请日2012-03-22

  • 分类号G06F9/44;

  • 代理机构上海专利商标事务所有限公司;

  • 代理人顾嘉运

  • 地址 美国华盛顿州

  • 入库时间 2023-12-18 06:52:28

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-08-15

    授权

    授权

  • 2015-08-26

    专利申请权的转移 IPC(主分类):G06F9/44 变更前: 变更后: 登记生效日:20150805 申请日:20120322

    专利申请权、专利权的转移

  • 2014-04-30

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20120322

    实质审查的生效

  • 2012-10-17

    公开

    公开

说明书

技术领域

本申请涉及垃圾收集,特别是管理在异构环境中的对象集合的技术。

背景技术

许多编程语言提供了用于将不再使用的对象或其它软件组件从存储器中自动 清除的各种存储器管理技术。这种形式的存储器管理有时被称为“垃圾收集”。有 效的垃圾收集对于为软件的操作保留存储器资源且同时又不会对软件的执行产生 不利影响来说是重要的。一些垃圾收集解决方案可能是低效的。其它解决方案不能 保持线程安全性,而还有的其它方案不是可缩放的。本发明的改进正是针对这些和 其他考虑事项而需要的。

发明内容

提供本发明内容以便以简化形式介绍将在以下具体实施方式中进一步描述的 一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也 不旨在用于帮助确定所要求保护的主题的范围。

各种实施例通常涉及管理在异构环境中的一个或多个对象的集合。一些实施例 尤其涉及以保持线程安全性的有效、可缩放的方式对一组对象执行被称为垃圾收集 的特殊形式的资源管理。在一个实施例中,例如,一种技术可以包括创建受管代理, 所述代理在存储器中创建受管对象和非受管对象。生成并维护节点集合,其中,节 点包括弱引用,该弱引用包括受管对象和非受管对象。维护集合中的节点的计数。 当该计数超出阈值时,遍历所述集合,并且当节点中的受管对象已经被收集时,对 同一节点中的任意非受管对象执行垃圾收集操作。对其他实施例也予以描述并要求 保护。

通过阅读下面的详细描述并参考相关联的附图,这些及其他特征和优点将变得 显而易见。应该理解,前面的概括说明和下面的详细描述只是说明性的,不会对所 要求保护的各方面形成限制。

附图说明

图1示出了一种在异构环境中的垃圾收集的系统的实施例。

图2示出了使用中的存储器的实施例。

图3示出垃圾收集序列的一实施例。

图4示出了垃圾收集的第一逻辑流程的一实施例。

图5示出第二逻辑流程的实施例。

图6示出了第三逻辑流程的一实施例。

图7示出计算体系结构的实施例。

图8示出通信体系结构的实施例。

具体实施方式

各种实施例涉及用于在异构环境中执行自动化的存储器管理或垃圾收集操作 的存储器管理技术,其中,可以用超出一种的编程语言和/或超出一种的运行时环 境来编写软件应用。例如,当应用使用由另一个实体编写的代码或较旧的老代码时, 可以用超出一种的编程语言来编写该应用。从在本质上来说,一些编程语言在某些 功能性或效率方面比其它语言更好,并且应用可以通过对一个应用内的不同功能使 用不同的语言来利用一种编程语言的强项。

不同的编程语言不同地处理包括垃圾收集操作的存储器管理。垃圾收集操作通 常是指当应用不再使用对象时对正用于保存应用对象的存储器进行清空、释放或解 除分配的实践。垃圾收集操作可以防止诸如存储器泄露等错误,其中由于没有销毁 对象导致增加的存储器的量变得对应用不可用;以及悬空指针,其中,所指向的对 象被销毁但指向该对象的一个或多个指针并没有被销毁并且随后被重新使用从而 得到非预期结果。

一些语言可能不具有自动垃圾收集的能力,并且因此,程序员需要适当地对不 再使用的对象解除存储器分配。一些作为手动垃圾收集语言出现的语言,例如C++, 现在却提供了垃圾收集实现。这些语言提供了破坏器操作,该操作在销毁对象时自 动释放该对象所使用的存储器资源。具有垃圾收集环境的一些语言,例如C#和Java 可以使用终结器。终结器类似于破坏器那样操作,但是当对象被销毁时并不被显性 调用。取而代之的是,当内部垃圾收集系统释放对象时可以调用终结器。程序员根 本不能对何时调用终结器或是否调用终结器进行控制。终结器还具有下述限制:仅 在一个线程中操作和对垃圾收集之后持久存储的对象不起作用。为了克服终结器的 一些缺陷,例如C#的一些语言可以使用处置模式,它提供了一种释放由对象使用 的资源的方法。处置方法通常必须在代码中由使用该对象的客户机在该客户机完成 该对象时手动地被调用。还有其它语言使用引用计数,其中每次由另一个对象引用 对象时递增计数,而当引用其的对象释放它时减少计数。当引用计数达到零时,可 以销毁对象。

当使用两种或更多的语言或运行时来编写应用时,需要解决垃圾收集技术中的 差异。一个实施例可以为在其自身线程中操作的每个应用会话生成对本地对象的弱 引用的链表。弱引用是一种对对象的引用,例如指针,其中所述引用不保护该对象 不会被垃圾收集。当已经有指定数目的引用被添加到链表中时,可以遍历链表以找 到任何对不再使用的对象的引用。这些未使用的对象可以被销毁,并且,可以从列 表中移除弱引用。可以保留对会话仍在使用的对象的引用。在一个实施例中,到达 该数目就遍历列表的引用的指定数目可以被调整以适应下述情况:当在遍历之后大 部分对象还在使用就增加数目,或当大多数对象是短命的时就减少数目。因此,该 实施例可以提高软件操作环境中的性能、可缩放性和线程安全性。

图1示出了安排为在异构环境中对对象执行垃圾收集操作的系统100的框图。 在一个实施例中,例如,系统100可包括具有诸如设备110和服务器140的多个组 件的计算机实现的系统。如此处所使用的,术语“系统”和“组件”旨在指代与计 算机相关的实体,包括硬件、硬件和软件的组合、软件、或执行中的软件。例如, 组件可被实现为在处理器上运行的进程、处理器、硬盘驱动器、多个(光和/或磁 存储介质的)存储驱动器、对象、可执行代码、执行的线程、程序、和/或计算机。 作为说明,在服务器上运行的应用和服务器两者都可以是组件。一个或多个组件可 以驻留在进程和/或执行的线程内,且组件可以视给定实现所需而位于一台计算机 上和/或分布在两台或更多的计算机之间。各实施例不限于该上下文。

在图1中示出的所述实施例中,设备110和服务器140可被实现为电子设备。 电子设备的示例可包括但不限于,移动设备、个人数字助理、移动计算设备、智能 电话、蜂窝电话、手机、单向寻呼机、双向寻呼机、消息收发设备、计算机、个人 计算机(PC)、台式计算机、膝上型计算机、笔记本计算机、手持式计算机、平板 计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、因特网服务 器、工作站、小型计算机、大型计算机、超级计算机、网络设备、web设备、分布 式计算系统、多处理器系统、基于处理器的系统、消费电子产品、可编程消费电子 产品、电视机、数字电视机、机顶盒、无线接入点、基站、用户站、移动用户中心、 无线电网络控制器、路由器、集线器、网关、网桥、交换机、机器、或其组合。虽 然图1中示出的系统100具有按照某种拓扑结构的有限数量的元素,但可以理解, 系统100可以视给定实现的需要而包括按照替代拓扑结构的更多或更少元素。

在各种实施例中,设备110可以包括应用120。应用120可以包括当被编译和 执行或解释时,使得设备110上的诸如处理器的逻辑设备(未示出)执行各种功能 的指令。应用120可以由至少两个代码部分组成。代码122和代码124。代码122 可以以一种有时在此被称为“A”的编程语言来编写,而代码124可以以有时在此 被称为“B”的不同的编程语言来编写。在一个实施例中,代码122可以被认为是 主要代码,而代码124可以被认为是次要代码。例如,代码124可以包括代码122 调用或激活但在缺少代码122的情况下不能独立操作的子例程、库文件、内核类或 功能性的更小组件。代码122可以提供应用120的通用功能性。在一个实施例中, 例如,代码122可以以X++来编写,而代码124可以以C++来编写。

应用120可以是许多类型的应用中的任何一种。在一个实施例中,例如,应用 120可以是企业资源计划(ERP)应用。在另一实施例中,应用120可以是货物管 理应用。应用120可以是具有为应用的消费者、许可证持有人、所有人或用户定制 的功能性的应用。可以通过改变代码122来定制,例如,通过直接重写某些代码, 例如代码122,或通过选择改变代码122的功能性的设置。各实施方式不限于这些 示例。

代码122可以包括包含垃圾收集器的代码。垃圾收集器可以是由编程语言提供 的功能,特别是当该编程语言是受管语言时。垃圾收集器可以在例如当代码122 被编译时被包括在代码122中。垃圾收集器可以对由代码122所创建的诸如对象之 类的资源执行垃圾收集。然而,垃圾收集器可能不能在由代码124所创建的资源上 直接执行垃圾收集。

设备110可以包括计算机可读存储器130。在应用120正在操作的同时,可以 使用存储器130。存储器130通常可以是快速存取类型的存储器,例如随机存取存 储器。在执行期间,应用120可以创建诸如对象132和对象134之类的一个或多个 对象。一个对象可以例如在面向对象的编程语言中称为类的实例。对象132、134 可以是在应用120操作期间放置在存储器中的其它类型的应用资源。

在一个实施例中,设备110可以同时执行应用120的多个实例或“会话”。每 个会话可以在单独的处理器线程中操作。在每个会话中生成的对象可以都存储在存 储器130中。然而,每个会话可以仅在其线程中的对象上执行垃圾收集。

在各实施例中,系统100可包括服务器140。服务器140可以是例如在网络上 与设备110通信的一个或多个电子设备。服务器140可以包括应用150。在一个实 施例中,应用150可以是在服务器140上操作的应用120的另一个实例。应用150 可以执行其自身的代码122和代码124的版本(未示出)。在执行期间,应用150 可以实例化对象并将它们存储在存储器160中,同时,这些对象正在使用。应用 150可以与应用120类似地执行垃圾收集。

在一个实施例中,服务器140可以为应用120提供支持服务。应用150可以例 如在包括设备110的多个客户机设备中提供数据连续性服务。

在一个实施例中,设备110可以作为客户机设备操作。在一个实施例中,应用 150可以提供应用120的一些或所有的功能性,而应用120操作作为到应用150的 “哑(dumb)”终端类型的接口。服务器140可以主存应用150的许多会话。每个 会话可以在其自身的处理器线程中操作。不同会话中生成的对象可以被存储在存储 器160中,同时与其它会话的对象逻辑上隔离。可以在每个会话中与在其它会话中 发生的垃圾收集相独立地执行实施例的垃圾收集。

图2示出了实施例所使用的存储器200的示例。存储器200可以是存储器130 和/或存储器160的代表性实施例。图2可以说明了在应用120和/或应用150的操 作时的一个时刻,以及此时刻的存储器200的使用。存储器200可以包括为处理线 程保留的存储块210,以及为分开的处理线程保留的存储块220。

块210可以包括执行中的应用120或应用150的会话212。会话212可以包括 与提供应用120的功能所需的,例如经编译的指令、变量值、计数器、指针和其它 与应用相关的资源。会话212可以包括例如来自代码122(以语言A编写)的对象 A 214。会话212还可以包括例如来自代码124(以语言B编写)的对象B 216。

在一个实施例中,对象B 216可以包括本地、受管对象,例如C++对象。应用 120可以,例如利用代码124中所编写的内核类。当需要来自代码124的对象时, 来自代码122的调用可以实例化新的对象A,该对象是受管代理对象。受管代理对 象可以进而调用代码124来实例化来自代码B的所需的对象。受管代理对象可以是 对对应的对象B的弱引用。

在一个实施例中,可以在块210中为会话212维护集合218。集合218可以包 括节点,每个节点包括受管代理对象A和非受管代码B对象,所述受管代理对象A 引用所述非受管代码B对象。在一个实施例中,集合218可以是链表,该列表是一 系列的节点,其中每个节点指向列表中的下一节点。集合218还可以用其它数据结 构来实现,其中可以从集合中的任意位置移除一个节点以作为一个集。各实施方式 不限于这些示例。

在一个实施例中,在会话212中的应用120的操作期间,可以对对象A中的受 管对象进行垃圾收集。当收集受管对象时,在集合218中的其节点中,将受管对象 改变为空(NULL)引用。然而,由受管对象所创建的非受管对象仍保留在存储器中。 当随后遍历集合218并在受管对象中找到空引用时,可以从存储器中“释放”该节 点的对应的非受管对象,并且从该集合中移除该节点。

存储器200中的块220可以包括应用120或应用150的不同的会话。块220可 以例如是为不同的处理线程保留的存储器块。不同的会话可以包括其自身的操作实 例、对象A、对象B和集合。每个会话仅可以对其对象执行垃圾收集,并且可以被 保护不受其它会话中发生的垃圾收集影响。

图3A、3B和3C示出在三个不同时间段处的集合300。集合300可以是集合218 的代表性实施例。

图3A示出了在应用120已经开始执行之后的集合300。在图3A中,已经将三 个节点加入到集合300中。每个节点包括例如来自代码A的对象的弱引用受管对象, 以及例如来自代码B的对象的非受管的对象。在图3A的时间处,应用120使用了 所有三个对象:对象1、对象2和对象3。在图3示出的实施例中,集合300被实 现为链表。然而,各实施例不限于该示例。

图3B示出在比图3A更迟的时间处的集合300。在图3B中,由于受管对象2 不再使用,因此其跳出了范围并被垃圾收集,导致其指向空。然而,即使此时受管 对象2的对应的非受管对象,对象2,并没有被应用120使用,但它还在存储器中。 另外,在图3B中,可以加入受管对象4和对象4的第四节点。出于该示例的目的, 在垃圾收集了受管对象2之后再添加第四节点。

图3C示出在根据本发明的实施例发生了垃圾收集事件之后的集合300。在所 示的实施例中,在图3B中的将第四节点加入到集合300触发了垃圾收集事件。通 常,非受管对象的垃圾收集可以在当已经将阈值数目的节点加入到集合300中时发 生。在垃圾收集事件中,可以遍历集合300。当遇到在受管对象部分具有空指针的 节点时,可以从存储器中释放对应的非受管对象,并从集合中移除该节点。因此, 在图3C中,当在遍历期间遇到对象2的节点中的空指针时,从存储器中释放对象 2,并且从集合300中移除对象2的节点。在一个实施例中,从存储器中释放对象 可以包括使得存储器中由该对象使用的位可用于被写入。在非受管对象是C++对象 的实施例中,非受管对象可以计数引用。分开的计数器可以保持对创建对非受管对 象的引用的次数以及对销毁引用的时间的跟踪。当所述引用计数器达到零时,这可 以指示已经不再需要非受管对象,并且可以在对象上调用FreeRef()方法。

上述实施例的操作可参考一个或多个逻辑流程来进一步描述。可以理解,除非 另外指明,否则代表性的逻辑流程不一定要按所呈现的次序或者按任何特定次序来 执行。此外,关于逻辑流程描述的各种活动可按串行或并行的方式执行。视给定一 组设计和性能约束所需,逻辑流程可使用所述实施例的一个或多个硬件元件和/或 软件元件或替换元件来实现。例如,逻辑流程可被实现为供逻辑设备(例如,通用 或专用计算机)执行的逻辑(例如,计算机程序指令)。

图4示出逻辑流程400的一个实施例。逻辑流程400可表示由在此所描述的一 个或多个实施例所执行的操作中的部分或全部。

在图4示出的所示实施例中,在框402,逻辑流程400可执行应用120的代码。 例如,可以从经编译的指令中执行或解释应用120或应用150。在一个实施例中, 应用120或应用150可以在处理线程中的多个会话之一中执行。在框402的执行期 间,应用120或应用150可以以语言A执行指令以实例化对象A。

逻辑流程400可以通过来自框404的语言A的新的受管代理对象从语言B实例 化对象。例如,这可以在当对以语言A实例化对象的调用是对以语言A的受管代理 类的调用时发生。对以语言A的受管代理类的调用可以以语言B实例化对象。受管 代理类可以是来自语言A的类,当被调用时,以语言A实例化受管对象。以语言A 实例化受管代理对象可以包括对以语言B实例化受管对象的调用。

在框406,逻辑流程400可以创建具有对受管对象和其对应的非受管对象的引 用的节点。例如,节点可以是具有至少两个分量的数据结构:诸如到受管代理对象 的指针的引用,以及到由受管代理对象所实例化的非受管对象的第二引用。该节点 可以附加地包括其它分量,例如到集合中其它节点的引用。

在框408,逻辑流程400可以将节点加入到集合。例如,应用120或应用150 可以将节点加入到集合218。如果集合218是链表,则将节点加入到集合可以包括 将节点加入到列表的末端,并将先前最后的节点链接到新加入的节点。当将节点加 入到集合中时,可以将集合中的节点数目的计数增加1。

在框410,逻辑流程400可以检查该计数是否大于阈值N。当计数不大于N时, 逻辑流程400返回框402。延迟垃圾收集直到已经有指定数目的节点被加入到集合 中可以防止处理资源被不必要地转用于太过频繁的垃圾收集。在一个实施例中,N 可以是可调节的以适应仅需要短时间的对象或需要更长时间的对象的实例。调整N 可以有效地改变垃圾收集之间的时间量,并且可以减少垃圾收集对应用120或应用 150的执行上的性能的影响。

当计数大于N时,在框412,逻辑流程400可以遍历集合并执行垃圾收集。垃 圾收集可以涉及通过非受管对象的受管代理对象来检测非受管对象不再使用,并从 存储器中移除不需要的非受管对象。参考图5更详细地描述了框412。如果在垃圾 收集期间移除了任何非受管对象,则可以移除集合中的对应的节点,并且,可以根 据移除的节点来减少计数。

在框402中执行代码时,先前创建的受管对象可以不再被需要,例如当在子例 程的执行期间被创建而该子程序随后结束时的受管对象。当非受管对象不再被需要 时,逻辑流程400可以在框414中销毁其对应的受管代理对象。销毁受管代理对象 可以从存储器中移除受管代理对象。然而,对应的非受管对象保留在存储器中,因 为它没有遭受自动垃圾收集。

在一个实施例中,非受管对象可以计数引用。分开的计数器可以保持对创建到 非受管对象的引用的次数以及对销毁引用的时间的跟踪。当所述引用计数器达到零 时,这可以指示已经不再需要非受管对象,并且逻辑流程400可以垃圾收集对应的 受管代理对象。

逻辑流程400随后可以在框416中定位集合中对应于被销毁的受管代理对象的 节点,并且可以将到被销毁的受管代理对象的引用设定为引用空。随后,逻辑流程 400返回以执行框402中的代码。在一个实施例中,框402可以表示应用120或应 用150的连续执行,它可以与框414-416和/或框404-412并行地操作。在一个实 施例中,框414-416和框404-412可以被包括在应用120或应用150的会话的执行 中。

图5示出逻辑流程500的实施例。逻辑流程500可以是来自图4的框412的遍 历集合和在非受管对象上执行垃圾收集的代表性实施例。

在框502中,逻辑流程500可以选择集合中的第一节点。例如,如果诸如集合 218的集合是链表或其它排序的集合,可以选择该链表中的第一节点。在未排序的 集合中,可以按随机、生存期等等来选择节点。

逻辑流程500在框504中可以调查所选的节点以确定受管代理对象引用是否为 空。当所选的节点中的受管代理对象引用不为空,非受管的对象还可以在使用,并 且逻辑流程500可以从框508处理剩余的节点(如果有的话)。

当在框504处所选的节点中的受管代理对象引用为空,逻辑流程500可以在框 506处销毁或释放该节点的对应的非受管对象,并且可以从集合中移除该节点。当 从集合中移除该节点时,集合中的节点计数可以被递减1以更新该计数。

如果在框508处集合中还保留了任何未访问的节点,逻辑流程500可以在框 510选择下一节点,并从框504开始重复逻辑流程。当不再存在未访问的节点时, 逻辑流程500在框512中结束。

图6示出逻辑流程600的一个实施例。逻辑流程600可表示由在此所描述的一 个或多个实施例所执行的操作中的部分或全部。逻辑流程600可以是对来自图4 的逻辑流程400的代表性修改,该修改根据创建的非受管对象的生存期调整了垃圾 收集事件之间的时间间隔。

在图6示出的说明的实施例中,逻辑流程600可以为N设定一个值,N是集合 中的节点的阈值,高于该值时就在框602实行垃圾收集。例如,正整数N可以最初 被设定为某个默认值M,例如150。N还可以被设定为某个整数M和当前计数除以 另一整数L中的最大值。框602可以在应用120开始操作或在稍后的时间(例如第 一次实例化集合时)发生。

逻辑流程600可以在框604将节点加入到集合并增加集合中的节点的计数。框 604可以与来自图4的框408的操作相类似。

逻辑流程600可以在框606将经更新的计数与N的值进行比较。当该计数不大 于N时,逻辑流程600可以在框618中继续执行代码,类似于框402。

当在框606中计数大于N时,逻辑流程600在框608中可以遍历集合并执行垃 圾收集,类似于框412。在框608中的垃圾收集的结束处,如果有任何节点被移除, 则集合中的节点的计数可以被更新,在此称为“新计数”。

逻辑流程600可以在框610中将新计数与N的比率与值J进行比较。J可以是, 例如,在0和1之间的浮点数或百分比。如果仅移除了一小部分或百分比的集合, 这可以指示大多数的非受管对象还在使用,并且垃圾收集可以较少频率发生。当 (新计数)/N>J,那么,可以在框612中增加N的值。例如,如果J=0.9,那么, 当在垃圾收集之后保留了超过90%的集合,则可以增加N。当(新计数)/N小于J 时,逻辑流程600可以行进到框608。

在框612,可以通过许多方法来增加N。例如,可以通过给N增加一个常数, 例如50,来增加N。可以给N增加一个其当前值的百分比,例如N=N*1.1,来将N 增加10%。在一个实施例中,N可以被选择为一个常数和(新计数)/H中的最大值, 其中H是整数。例如,N可以被设定为150和(新计数)/10中的最大值。

当(新计数/N)不大于J时,逻辑流程600可以在框608比较(新计数:N)对值K 的比率。如果在垃圾收集期间移除了大部分或百分比的集合,这可以指示许多对象 是短命的且应该被更加频繁地收集。当(新计数)/N<K,那么,可以在框616中减 少N的值。

在框616,可以通过许多方法来减少N。例如,可以通过从N中减去一个常数, 例如N=N-50,来减少N。可以给N减少一个其当前值的百分比,例如N=N*0.8,来 将N减少20%。在一个实施例中,N可以被选择为一个常数和(新计数)/H中的最 小值,其中H是整数。例如,N可以被设定为150和(新计数)/10中的最小值。

图7示出适用于实现上述各实施例的示例性计算体系结构700的实施例。计算 体系结构700包括各种常见计算元件,如一个或多个处理器、协同处理器、存储器 单元、芯片组、控制器、外围设备、接口、振荡器、定时设备、视频卡、音频卡、 多媒体输入/输出(I/O)组件,等等。然而,各实施方式不限于由计算体系结构 700来实现。

如图7所示,计算体系结构700包括逻辑设备704、系统存储器706以及系统 总线708。逻辑设备704可以是可购得的各种处理器中的任一种。双微处理器和其 它多处理器体系结构也可用作逻辑设备704。系统总线708提供了用于包括但不限 于系统存储器706的系统组件到逻辑设备704的接口。系统总线708可以是若干种 总线结构中的任一种,这些总线结构还可互连到存储器总线(带有或没有存储器控 制器)、外围总线、以及使用各类市场上可购买到的总线体系结构中的任一种的局 部总线。

系统存储器706可以包括各种类型的存储器单元,诸如只读存储器(ROM)、 随机存取存储器(RAM)、动态RAM(DRAM)、双倍数据率DRAM(DDRAM)、同步 DRAM(SDRAM)、静态RAM(SRAM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、 电可擦除可编程ROM(EEPROM)、闪存、诸如铁电聚合物存储器等聚合物存储器、 奥氏存储器、相变或铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、 磁卡或光卡、或适于存储信息的任何其他类型的介质。在图7示出的所示实施方式 中,系统存储器706可包括非易失性存储器710和/或易失性存储器712。基本输 入/输出系统(BIOS)可以存储在非易失性存储器710中。

计算机702可包括各种类型的计算机可读存储介质,包括内置硬盘驱动器 (HDD)714、用于读写可移动磁盘718的磁软盘驱动器(FDD)716、以及用于读写 可移动光盘720(例如,CD-ROM或DVD)的光盘驱动器722。HDD 714、FDD 716、 以及光盘驱动器720可分别由HDD接口724、FDD接口726和光盘驱动器接口728 连接到系统总线708。用于外置驱动器实现的HDD接口724可包括通用串行总线 (USB)和IEEE 1394接口技术中的至少一种或两者。

驱动器及相关联的计算机可读介质提供了对数据、数据结构、计算机可执行指 令等的易失性和/或非易失性存储。例如,多个程序模块可存储在驱动器和存储器 单元710、712中,包括操作系统730、一个或多个应用程序732、其他程序模块 734和程序数据736。一个或多个应用程序732、其他程序模块734、以及程序数据 736可包括例如应用120。

用户可以通过一个或多个有线/无线输入设备,例如键盘738和诸如鼠标740 等定点设备将命令和信息输入到计算机702中。其他输入设备可包括话筒、红外 (IR)遥控器、操纵杆、游戏垫、指示笔、触摸屏等等。这些和其它输入设备通常 通过耦合到系统总线708的输入设备接口742连接到逻辑设备704,但也可通过诸 如并行端口、IEEE 1394串行端口、游戏端口、USB端口、IR接口等其它接口连接。

监视器744或其他类型的显示设备也经由诸如视频适配器746等接口连接到系 统总线708。除了监视器744之外,计算机通常包括诸如扬声器、打印机等其他外 围输出设备。

计算机702可使用经由有线和/或无线通信至一个或多个远程计算机,诸如远 程计算机748的逻辑连接在网络化环境中操作。远程计算机748可以是工作站、服 务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐设备、对 等设备或其他常见的网络节点,并且通常包括相对于计算机702描述的许多或所有 元件,但为简明起见仅示出了存储器/存储设备750。所描绘的逻辑连接包括到局 域网(LAN)752和/或例如广域网(WAN)754等更大网络的有线/无线连接。这种 LAN和WAN连网环境常见于办公室和公司,并且方便了诸如内联网等企业范围计算 机网络,所有这些都可连接到例如因特网等全球通信网络。

当在LAN连网环境中使用时,计算机702通过有线和/或无线通信网络接口或 适配器756连接到LAN 752。适配器756可以方便到LAN 752的有线和/或无线通 信,并且还可包括其上设置的用于使用适配器756的无线功能进行通信的无线接入 点。

当在WAN连网环境中使用时,计算机702可包括调制解调器758,或连接到WAN 754上的通信服务器,或具有用于诸如通过因特网等通过WAN 754建立通信的其它 装置。或为内置或为外置以及有线和/或无线设备的调制解调器758经由输入设备 接口742连接到系统总线708。在联网环境中,相对于计算机702所描绘的程序模 块或其部分可以存储在远程存储器/存储设备750中。应该理解,所示网络连接是 示例性的,并且可以使用在计算机之间建立通信链路的其他手段。

计算机702可操作来使用IEEE 802标准系列来与有线和无线设备或实体进行 通信,这些实体例如是在操作上安置成与例如打印机、扫描仪、台式和/或便携式 计算机、个人数字助理(PDA)、通信卫星、任何一件与无线可检测标签相关联的 设备或位置(例如,电话亭、报亭、休息室)以及电话进行无线通信(例如,IEEE 802.7空中调制技术)的无线设备。这至少包括Wi-Fi(即无线保真)、WiMax和 蓝牙TM无线技术。由此,通信可以如对于常规网络那样是预定义结构,或者仅仅是 至少两个设备之间的自组织(ad hoc)通信。Wi-Fi网络使用称为IEEE 802.7x(a、 b、g等等)的无线电技术来提供安全、可靠、快速的无线连接。Wi-Fi网络可用于 将计算机彼此连接、连接到因特网以及连接到有线网络(使用IEEE 802.3相关的 介质和功能)。

图8示出适用于实现上述各实施例的示例性通信体系结构800的框图。通信架 构800包括各种常见通信元件,如发射机、接收机、收发机、无线电装置、网络接 口、基带处理器、天线、放大器、滤波器,等等。然而,各实施方式不限于由通信 架构800来实现。

如图8所示,通信架构800包括一个或多个客户端802和服务器804。客户端 802可实现设备110。服务器804可实现服务器140。客户机802和服务器804可 操作地连接到可被用来存储相应客户机802和服务器804本地的信息(如cookie 和/或相关联的上下文信息)的一个或多个相应客户机数据存储808和服务器数据 存储810。

客户机802和服务器804可以使用通信框架806在彼此之间传递信息。通信框 架806可以实现任何公知通信技术,如适用于与分组交换网络(例如,诸如因特网 等公共网络、诸如企业内联网等专有网络,等等)、电路交换网络(例如,公共交 换电话网)、或分组交换网络和电路交换网络的组合(使用合适的网关和转换器) 一起使用的技术。客户机802和服务器804可以包括被设计成可与通信框架806 进行互操作的各种类型的标准通信元件,如一个或多个通信接口、网络接口、网络 接口卡(NIC)、无线电装置、无线发射机/接收机(收发机)、有线和/或无线通 信介质、物理连接器等。作为示例而非限制,通信介质包括有线通信介质和无线通 信介质。有线通信介质的示例可以包括导线、电缆、金属线、印刷电路板(PCB)、 背板、交换光纤、半导体材料、双绞线、同轴电缆、光纤、所传播的信号等。无线 通信介质的示例可以包括声学、射频(RF)频谱、红外和其他无线介质。客户机 802和服务器804之间的一种可能的通信可以是以适用于在两个或更多计算机进程 之间传输的数据包的形式。例如,数据包可以包括cookie和/或相关联的上下文信 息。

各实施例可以使用硬件元件、软件元件或两者的组合来实现。硬件元件的示例 可以包括设备、组件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻 器、电容器、电感器等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、 数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器单元、逻辑门、寄 存器、半导体器件、芯片、微芯片、芯片组等。软件元件的示例可以包括软件组件、 程序、应用软件、计算机程序、应用程序、系统程序、机器程序、操作系统软件、 中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程 序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、文字、 值、符号、或其任意组合。确定一实施例是否使用硬件元件和/或软件元件来实现 可视给定实现所需根据任何数量的因素而变化,这些因素如所需计算速率、功率级、 耐热性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速 度以及其它设计或性能约束。

一些实施方式可包括制品。制品可包括用于存储逻辑的存储介质。存储介质的 示例可包括能够存储电子数据的一种或多种类型的计算机可读存储介质,包括易失 性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、 可写或可重写存储器等。逻辑的示例可包括各种软件元件,诸如软件组件、程序、 应用软件、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、 固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、 指令集、计算代码、计算机代码、代码段、计算机代码段、文字、值、符号、或其 任意组合。例如,在一个实施例中,制品可以存储可执行计算机程序指令,该指令 在由计算机执行时使得该计算机执行根据所描述的各实施方式的方法和/或操作。 可执行计算机程序指令可包括任何合适类型的代码,诸如源代码、已编译代码、已 解释代码、可执行代码、静态代码、动态代码等。可执行计算机程序指令可根据用 于指示计算机执行特定功能的预定义的计算机语言、方式或句法来实现。这些指令 可使用任何合适的高级、低级、面向对象、可视、已编译和/或已解释编程语言来 实现。

一些实施例可使用表述“一个实施例”和“一实施例”及其派生词来描述。这 些术语意味着结合该实施例描述的特定特征、结构、或特性包括在至少一个实施例 中。出现在说明书中各个地方的短语“在一个实施例”摂不必全都指的是同一实施 例。

一些实施例可使用表述“耦合的”和“连接的”及其派生词来描述。这些术语 不必旨在互为同义词。例如,一些实施例可使用术语“连接的”和/或“耦合的” 来描述以指示两个或更多元件彼此有直接的物理或电接触。然而,术语“耦合的” 还可以意味着两个或更多元件彼此不直接接触,而仍彼此合作或交互。

要强调的是,提供了本公开的摘要以符合37C.F.R.1.72(b)节要求使读者能 快速确定本技术公开的特性的摘要。提交摘要的同时要明白,将不用它来解释或限 制权利要求的范围或含义。另外,在前面的详细描述中,可以看到,出于将本公开 连成一个整体的目的而将各种特征组合在一起放在单个实施方式中。此公开方法将 不被解释为反映所要求保护的实施方式要求比每个权利要求中明确陈述的更多特 征的意图。相反,如所附权利要求书所反映,发明性的主题存在于比单个已公开实 施方式的所有特征少的特征中。从而,据此将所附权利要求结合进详细描述中,其 中每个权利要求独立地代表一个单独的实施方式。在所附权利要求书中,术语“包 括”和“其中”分别用作术语“包含”和“其特征在于”的易懂的英文等价词。而 且,术语“第一”、“第二”、“第三”等等只用作标记,而不旨在将数字要求强 加于其对象上。

尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附 权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特 征和动作是作为实现权利要求的示例形式公开的。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号