一种用于管理存储器的方法和装置
技术领域
本申请涉及计算***中的数据管理,更具体地说,涉及存储器去重。
背景技术
存储器去重允许多个虚拟存储器页(这些虚拟存储器页跨在同一***管理程序下运行的不同虚拟机(VM)具有相同的内容)共享单个物理存储器页。由于备援相同数量的虚拟页所需的物理页更少,因此支持相同应用负载所需的实际存储器也变少。相关技术经常在单个操作***实例内使用,以便共享备援各个进程的虚拟页的物理页。
所需总存储器的潜在节省刺激某些操作***设计实施去重。现有的实现依赖于在后台扫描页,或者在引导下扫描***中的剩余页以查找相同页。这些操作***设计支持有关哪些页可能是去重的良好候选的暗示,以便立即对照***中的剩余页比较这些页,或者基于优先级来比较这些页。无论有无此提示,均对照被考虑进行去重的集合中的所有其它页,通过搜索找到匹配。即使在不支持去重的操作***中,通常也会设置此机制以便尝试跨多个VM共享页。
扫描所有页的成本不可谓不大,现有的实现反映出此成本。例如,某些操作***延迟扫描页,直到这些页在一段时间(例如,数分钟)内“稳定下来”(即,达到稳态),而另一些操作***选择根本不实现去重。对于某些计算平台而言,特别是对于其中基于CPU周期对客户收费的平台而言,成本也可以是一个重要的问题。
尽管现有实现中的提示可在扫描方面给与某些页优先级,但是它们不会降低整体成本,因为仍对照被考虑进行去重的集合中的剩余页扫描这些页。现有扫描全部页以查找重复的方法随着页大小的增加也变得缺乏效率,因为在每页上找到匹配的几率变低。此问题的后果是:一些支持去重的***管理程序延迟大量页的处理,直到***已在存储器压力下为止。在这些情况下,无法评估对页执行去重时获得的益处,从而更难计算和供应所需的存储器量。
这样,现有的去重实现包括—但不限于—以下一个或多个缺点:(i)没有提示,无法立即找到重复,因为允许页先趋于稳定,然后再考虑执行去重;(ii)在找到重复之前,需要有段延迟才能开始扫描,因为必须比较许多页才能找到匹配页;(iii)比较不匹配的页会消耗CPU周期;(iv)去重可被延迟,直到***受到存储器压力,从而更难及时恢复以避免性能降级;以及(v)如果没有存储器压力,页可能不会被去重,从而更难计算和供应所需的存储器量。
发明内容
本发明的各实施例提供用于存储器去重的技术。
例如,在一个实施例中,一种方法包括以下步骤。一种用于在计算***中管理存储器的方法,所述计算***包括在虚拟化控制层之上执行的应用,其中所述虚拟化控制层将虚拟存储器的各部分映射到物理存储器的各部分,所述方法包括以下步骤:由所述应用标识虚拟存储器范围,所述虚拟存储器范围在所述虚拟存储器中重复的概率超过给定阈值;由所述应用获得与所述虚拟存储器范围对应的至少一个存储器地址;以及将所述虚拟存储器范围的标识符和与所述虚拟存储器范围对应的所述存储器地址从所述应用传递到所述虚拟化控制层,其中所述虚拟化控制层可使用所述标识符来标识所述虚拟存储器中的类似范围。
在另一实施例中,一种方法包括以下步骤。一种用于在计算***中管理存储器的方法,所述计算***包括在虚拟化控制层之上执行的应用,其中所述虚拟化控制层将虚拟存储器的各部分映射到物理存储器的各部分,所述方法包括以下步骤:在所述虚拟化控制层处从所述应用接收虚拟存储器范围的标识符以及与所述虚拟存储器范围对应的至少一个存储器地址,所述虚拟存储器范围在所述虚拟存储器中重复的概率超过给定阈值;以及由所述虚拟化控制层使用所述标识符来标识所述虚拟存储器内的类似范围。
在又一实施例中,一种用于在计算***中管理存储器的装置,所述计算***包括在虚拟化控制层之上执行的应用,其中所述虚拟化控制层将虚拟存储器的各部分映射到物理存储器的各部分,所述装置包括:被配置为由所述应用标识虚拟存储器范围的模块,所述虚拟存储器范围在所述虚拟存储器中重复的概率超过给定阈值;被配置为由所述应用获得与所述虚拟存储器范围对应的至少一个存储器地址的模块;以及被配置为将所述虚拟存储器范围的标识符和与所述虚拟存储器范围对应的所述存储器地址从所述应用传递到所述虚拟化控制层的模块,其中所述虚拟化控制层可使用所述标识符来标识所述虚拟存储器中的类似范围。
在又一实施例中,一种用于在计算***中管理存储器的装置,所述计算***包括在虚拟化控制层之上执行的应用,其中所述虚拟化控制层将虚拟存储器的各部分映射到物理存储器的各部分,所述装置包括:被配置为在所述虚拟化控制层处从所述应用接收虚拟存储器范围的标识符以及与所述虚拟存储器范围对应的至少一个存储器地址的模块,所述虚拟存储器范围在所述虚拟存储器中重复的概率超过给定阈值;以及被配置为由所述虚拟化控制层使用所述标识符来标识所述虚拟存储器内的类似范围的模块。
当结合附图阅读下面对示例性实施例的详细描述时,本发明的这些及其它目标、特征和优点将变得显而易见。
附图说明
图1示出根据本发明的一个实施例的具有存储器去重的虚拟化主机计算***的框图;
图2示出根据本发明一个实施例的存储器去重模块的框图;
图3A示出根据本发明一个实施例的存储器去重方法的流程图;
图3B示出根据本发明的另一实施例的存储器去重方法的流程图;
图4是根据本发明的一个实施例的计算***的框图,根据该计算***,实现存储器去重模块/方法的一个或多个组件/步骤。
具体实施方式
下面将在示例性虚拟化主机计算***环境的上下文中描述涉及存储器去重的本发明的各实施例。但是应该理解,此处描述的存储器去重技术不限于此特定类型的示例性虚拟化主机计算***环境,而且更一般地可应用于任何从这种改进的存储器去重技术中受益的虚拟化计算***。例如,尽管某些实施例在此通过直接在主机计算***的硬件上执行的***管理程序(被称为“类型1”***管理程序)进行描述,但是本发明的某些实施例也包括其中***管理程序(被称为“类型2”***管理程序)在主机计算***的操作***(在主机硬件上执行)上执行的配置。进一步地,本发明的某些实施例包括类型1和类型2***管理程序配置的混合。更进一步地,本发明的某些实施例向没有***管理程序的计算***中的操作***提供改进的存储器去重。
因此,如此处所用,***管理程序、操作***或它们的某一组合可更一般地被称为“虚拟化控制层”。
如此处所用,短语“虚拟化主机计算***”指托管诸如一个或多个虚拟机(VM)之类的一个或多个逻辑处理组件的物理计算***。
如此处所用,术语“存储器去重”指避免和/或撤销存储器部分重复的过程,即,避免或撤销两个或更多存储相同数据的存储器部分。例如,在包括虚拟存储器和物理存储器的虚拟化主机计算***的情况下,存储器去重旨在避免或撤销针对相同的虚拟存储器部分分配的两个或更多物理存储器部分,下面将对此进行描述。
图1示出根据本发明的一个实施例的具有存储器去重功能的虚拟化主机计算***。虚拟化主机计算***100在图1中按照功能层示出,在所述功能层中,直接位于另一层之上的层被视为在该另一层上执行(运行)(它们直接交互)。这样,如图所示,***100包括主机硬件102、在主机硬件102上执行的***管理程序104,以及在***管理程序104上执行的多个VM106-1至106-M。如上所述,在备选配置中,主机操作***可在功能上驻留于主机硬件102与***管理程序104之间。另外,***管理程序104和主机操作***可以在其它备选实施例中形成混合层。进一步地,在备选实施例中,计算***可以根本不包括***管理程序层,从而由主机操作***处理存储器去重功能。
如图所示,VM106-1至106-M均包括来宾操作***(即,来宾操作***108-1至108-M)。如图所示,***管理程序104提供多个来宾操作***同时在单个主机计算***上执行并彼此共享硬件资源(主机硬件102)的能力。在每个来宾操作***中执行的有应用(即,分别为应用110-1至110-M)、一个或多个应用编程接口(即,分别为API112-1至112-M),以及虚拟存储器(即,分别为虚拟存储器114-1至114-M)。应用可以包括一个或多个被设计为执行一项或多项功能(具体取决于该应用在设计上指定的特殊目的)的软件程序。虚拟存储器通常被分为多个虚拟存储器页。虚拟存储器页是虚拟存储器的由一组(或一系列)虚拟存储器地址所标识的一部分。在一个实施例中,由起始地址和虚拟页大小定义虚拟页。
主机硬件102包括物理处理组件,例如一个或多个CPU(中央处理单元)116和物理存储器118。物理存储器118指主机计算***100的一个或多个物理存储设备的存储器。与虚拟存储器相同,物理存储器一般也分为多个存储器页,但是在此情况下指多个物理存储器页。在此,物理存储器页是物理存储器的由一组(或一系列)物理存储器地址所标识的一部分。在一个实施例中,由起始地址和物理页大小定义物理页。众所周知,物理存储器页用于“备援”虚拟存储器页,即,数据并非实际存储在虚拟存储器中,而是虚拟存储器位置指向实际存储数据的物理存储器位置。
例如,存储器去重的主要目的是分配将被多个虚拟存储器页共享的单个物理存储器页,这些虚拟存储器页跨在同一***管理程序下运行的不同虚拟机(VM)具有相同的内容。如下面将进一步详细描述的,在图1的***管理程序104中,使用页表(多个)122的去重处理机120管理虚拟存储器页与物理存储器页之间的对应并提供存储器去重功能。此外将理解,本发明的存储器去重实施例扩展到“增量编码”概念,在此概念中,存储器中的页稍有不同,因此,每个存储器页可被存储为基页和偏移,其中偏移表示两个存储器页之间的差异。这样,通过对基页执行去重而实现存储器节省。
将理解,尽管图1的实例中仅示出单个***管理程序104,但是本发明的一个给定实施例可以包括多个***管理程序,每个***管理程序在其自己的主机硬件102部分上运行。而且,在备选实施例中,虚拟化主机计算***100可实现为一个以上的计算***,其中包括主机计算***100的多个计算***彼此相对地进行分布。
相应地,如下面更详细描述的,本发明的各实施例提供改进的存储器去重。仅作为实例,各存储器去重实施例:通过仅比较具有极高匹配可能性(优选地为100%的可能性)的存储器页来减少对存储器执行去重的成本;在创建重复的存储器页之后立即执行扫描;以及无需有关可能被共享的工件(例如JavaTM工件(Oracle Corporation,雷德伍德城,加州))的先验知识。
现有的存储器去重方法不能实现这些优点,因为除了其它因素之外,它们不具备执行此操作的信息。本发明的各实施例认识到所需的信息仅对***管理程序104之上的层已知(即,为来宾操作***108和/或应用110所知),并且所需的信息多于现有方法中支持的提示所传递的信息。
本发明的各实施例允许***管理程序之上的一个或多个层提供有关哪些虚拟页与其它页重复的具体信息。在一个实施例中,至少一个此类更高的层被配置为向***管理程序提供包括一个或多个页的范围以及标识该范围的标识符(例如,称为match_token)。***管理程序仅将所提供的页范围与其它具备相同match_token的范围进行比较。较高层(多个)选择其标志(token),以便相同和/或不同来宾操作***中的多个进程可针对将重复的页提供同一match_token。这允许***管理程序(或诸如主机操作***之类的其它层)中的有效去重成为可共享的一组存储页。
相应地,如此处进一步描述的,示例性存储器去重实施例除了其它项之外,还包括:(i)将match_token和页范围传递到***管理程序以引导去重,以使***仅比较彼此重复的页(***仍执行比较以验证页相同);(ii)一个或多个API,其允许将match_token和页范围从应用向下传递到来宾操作***,然后在运行时从来宾操作***传递到***管理程序;(iii)一个或多个API,其允许在JavaTM环境中运行的应用轻松引导JavaTM工件的去重;以及(iv)用于选择可跨来宾操作***使用的match_token的技术。
图2示出根据本发明一个实施例的存储器去重模块。将理解,去重处理机(模块)200对应于图1中的去重处理机120。虽然上面已提到,在各示例性实施例中,去重处理机由***管理程序实现,但是该模块也可以备选地在虚拟化主机计算***的其它层中实现。
下面的示例性描述假设去重处理机200在***管理程序中实现。图3A示出根据本发明一个实施例的与图2的去重处理机200相结合的存储器去重方法300。方法300被称为“应用引导的”存储器去重,因为在该实施例中,应用为***管理程序(即,去重处理机200)提供用于实现此处描述的改进型存储器去重的信息。
在该实施例中,***管理程序(图1中的104)为每个来宾操作***(图1中的108-1至108-M)提供API(图1中的112-1至112-M),此API用于针对虚拟存储器202(来自图1中的虚拟存储器114-1至114-M之一)的至少一个页传递该虚拟页的起始地址208、该虚拟页的大小210,以及标识该虚拟页的match_token212。在图3的步骤302,针对由给定来宾操作***中运行的给定应用所标识的每个虚拟页,将此信息传递到去重处理机。一个或多个虚拟存储器页表示给定虚拟存储器的一个区域或范围。
例如,假设JavaTM环境—JavaTM虚拟机(JVM)—将只读工件置于共享存储器区域中以便跨进程分摊JVM占用。也可跨虚拟来宾操作***共享该存储器区域。因此,根据此处描述的存储器去重方法,JVM被配置为提供match_token(例如,JVM_shared_data_<jvm_version>)以加速页去重。
在一个备选实施例中,起始地址208、大小201和match_token212可从来宾操作***被传递到去重处理机200(而非直接从应用传递),尽管由应用确定要传递的信息仍然是优选的。
在步骤304,***管理程序104(或操作***)经由映射结构将虚拟地址和范围映射成备援该虚拟存储器范围的一组物理存储器页。
在步骤306,去重处理机200针对在步骤302传递到该处的match_token,在页表(多个)214中搜索匹配。页表(多个)214也可被视为映射结构。如果未找到匹配的match_token,则在步骤308,去重处理机200在页表(多个)214中创建新记录,并使用在步骤302传递的标识物理页204-1至204-N(它们备援指定范围中的虚拟页)的match_token以及页总数标记该记录。备选地,***管理程序可存储其以后查找指定范围的物理页所需的信息(例如,起始地址和总长度)。
如果针对被传递到去重处理机的match_token找到匹配,则去重处理机200在步骤310验证指定范围中的存储器的内容与现有已找到的记录的内容相同。如果存储器内容匹配,则方法300继续,否则返回错误消息。
在步骤312,配置***管理程序存储器映射(映射结构),使得用于备援现有记录的虚拟存储器的物理页被用于备援新的虚拟存储器范围。在一个实施例中,可使用存储器管理单元(MMU)页保护和写时复制处理分页来实现此目的。
在步骤314,针对在步骤302被传递到去重处理机200的给定虚拟存储器范围释放物理页(204-1至204-N)。
需要注意,在一个备选实施例中,步骤312可进一步被增强为扩展现有重新映射,以修改用于备援虚拟存储器的页大小以便更好地实现共享。此重新映射可在***管理程序或操作***级别执行,以便最终用户应用中无需更改。
例如,如果页表(多个)214中的现有记录涵盖由大型2M(MB)页备援的为512k(千)字节的范围,则存储器映射可被重新配置为更改用于2MB范围的页大小,以便实际使用64k页,从而允许作为八个64k页对512k字节记录进行去重。
如上所述,在来宾操作***中提供一个或多个API(图1中的112-1至112-M)。此类API可用于将应用(图1中的110-1至110-M)看到的地址映射到***管理程序(104)看到的地址。但是,如上所述,可以备选地在***管理程序或主机操作***中提供此类API。
此类API允许应用指定虚拟存储器的给定部分的起始地址(208)、大小(210)和match_token(212)。所指定的地址是应用进程所看到的地址。来宾操作***(或在备选实施例中位于其它位置)中的API(112)以***管理程序可识别的方式,将此地址映射到向***管理程序标识所述页所需的信息。扩展执行转换所需的功能以便能够转换大量页,并且即使当***管理程序看到的页信息不连续时,也可传递此页信息。也就是说,应用提供虚拟页的地址和长度,但是需要将其映射到物理页地址(所述物理页中的一个或多个物理页可能不连续,并且无法表示为起始地址和长度)。因此,API提供生成该映射的能力。
本发明的各实施例还包括一个或多个可用于标识可被去重的JavaTM工件(只读程序件(program artifact)的一个实例)的API(112-1至112-M)。其实例包括—但不限于—(i)直接字节缓冲区;(ii)存储器映射文件;以及(iii)预编译代码。在这些API中,match_token可由应用指定(如果希望指定唯一标识符),也可使用下面进一步描述的技术(例如,void com.ibm.jvm.Deduplicate.byteBuffer(DirectByffer b、Stringmatch_token))之一针对调用方自动生成match_token。
应该理解,应用被配置为选择match_token。例如,当JVM发送预填充共享类高速缓存时,可在该高速缓存每次被加载到存储器时,为该高速缓存分配唯一标识符,该唯一标识符可用作match_token。如果使用共享文件***加载相同的文件,则文件名可被提供为match_token。
利用应用特定的域知识提供最低的开销,因为无需运行时成本来生成match_token。在没有明显match_token的情况下,仍可获知存储器的内容对于给定工件将是相同的。由于应用参与引导去重,因此当创建工件的主副本时,应用可从存储器内容生成match_token,并将该match_token连同工件本身一起存储(例如,将match_token存储为以后共享的文件中的标头)。每个来宾操作***中应用的实例然后可以读取match_token连同工件的存储器,并将其提供给***管理程序。由于针对工件仅执行一次生成,因此可使用强散列算法来从存储器内容生成match_token。在一个实施例中,可使用MD5散列算法,其中冲突的可能性接近于零。但是,也可采用其它散列算法。
本发明的各实施例也可与增量编码结合使用。在此情景下,match_token用于标识类似但不一定相同的页。增量编码用于使用基页和与基页的偏差编码具有相同match_token的类似但不一定相同的页。对于类似的页,这导致与存储每个页的单个完全副本相比,极大地减小了空间开销。
本发明的各实施例还可用于实现多个进程或VM之间的共享。在此情景下,由希望共享同一对象副本的每个进程或VM使用相同的match_token。在这种情况下,并非所有进程或VM均需要实例化对象副本。只需实例化对应于match_token的对象的一个副本。其它进程和VM然后可共享该对象的副本。
相应地,本发明的各实施例提供至少两种方法来处理对共享页的更新。在一种方法中,针对正在执行更新的进程或VM,对共享页的更新产生页的单独副本。在另一方法中,直接使更新在共享页中就位。所有进程或VM均看到页的更新后的版本。这适合于跨多个进程或VM共享数据对象的情况。
现在参考图3B,其中示出根据本发明另一实施例的存储器去重方法。在方法320,假设计算机***包括在操作***或***管理程序上运行的应用,其中操作***或***管理程序将虚拟存储器页映射到物理存储器页。如上所述,为应用提供API,该API将应用级处的数据结构映射到存储该数据结构的至少一个虚拟存储器地址。在一个实施例中,所述数据结构是虚拟存储器中的虚拟存储器页或某一存储器范围。所述数据结构可以备选地为对象(例如,读入存储器的文件)或JavaTM工件。
在步骤322,应用标识这样的数据结构:其在存储器中重复的概率超过给定阈值。给定阈值的一个实例可以是约90%,但是本发明的各实施例并非旨在限于任何特定的阈值。应用使用API获得与所述数据结构对应的至少一个虚拟存储器地址。
在步骤324,应用将所述数据结构的标识符(即,match_token)和与所述数据结构对应的至少一个虚拟存储器地址传递到***管理程序(或主机操作***)。在步骤326,***管理程序(或主机操作***)使用应用提供的信息来标识虚拟存储器中的类似页。在步骤328,基于所标识的存储器区域而减少***物理存储器中存储的数据。步骤328包括使用去重或增量编码来减少物理存储器页中的冗余信息。
所属技术领域的技术人员知道,本发明的各实施例可以实现为***、装置、方法或计算机程序产品。因此,本发明各实施例可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“***”。此外,本发明的各实施例还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是—但不限于—电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括例如在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括—但不限于—电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括—但不限于—无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明实施例的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
在此将参照方法、装置(***)和计算机程序产品的流程图和/或框图描述本发明的各实施例。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其它设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article ofmanufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
再次参考图1至3B,附图中的流程图和框图显示了根据本发明的多个实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
相应地,例如如上所述,图1-3B所示的本发明的各实施例还可包括提供一种***,其中所述***包括独立模块(例如,包括软件、硬件或软件及硬件的模块)。仅作为实例,这些模块可以包括—但不限于—语言模型转换模块。这些以及其它模块例如可被配置为执行图1-3B的上下文中描述和示出的步骤。
一个或多个实施例可使用在通用计算机或工作站上运行的软件。现在参考图4,此类实现400例如采用处理器402、存储器404、显示器406(输出设备的一个实例)和键盘408(输入设备的一个实例)。如在此使用的,术语“处理器”旨在包括(但不限于)任何处理设备,例如包括CPU(中央处理单元)和/或其它形式的处理电路的处理设备。此外,术语“处理器”可指一个以上的单独处理器。术语“存储器”旨在包括(但不限于)与处理器或CPU关联的存储器,例如,RAM(随机存取存储器)、ROM(只读存储器)、固定存储器件(例如,硬盘)、可移动存储器件(例如,软盘)、闪存等。此外,如在此使用的,短语“输入/输出设备”旨在包括(但不限于)一个或多个用于将数据输入处理单元的装置,以及一个或多个用于提供与处理单元关联的结果的装置。
处理器402、存储器404和输入/输出设备406/408例如可通过作为数据处理单元412一部分的总线410互连。例如通过总线410,可将适合的互连提供给网络接口414(例如,网卡,可提供此接口以便与计算机网络对接)和介质接口416(例如软盘驱动器或CD-ROM驱动器,可通过此接口以便与介质418对接)。
适合于存储和/或执行程序代码的数据处理***将包括至少一个通过***总线410直接或间接连接到存储器元件404的处理器402。所述存储器元件可以包括在程序代码的实际执行期间采用的本地存储器、大容量存储装置以及提供至少某些程序代码的临时存储以减少必须在执行期间从大容量存储装置检索代码的次数的高速缓冲存储器。
输入/输出(I/O)设备406/408可以直接(例如,通过总线410)或通过中间I/O控制器(为清晰起见已省略)与***相连。
诸如网络接口414之类的网络适配器也可以被连接到***以使所述数据处理***能够通过中间专用或公共网络变得与其它数据处理***或远程打印机或存储器件相连。调制解调器、电缆调制解调器和以太网卡只是当前可用的网络适配器类型中的少数几种。
相应地将理解,图4所示的计算机体系结构400可以代表图1所示的虚拟化主机计算***100的一个示例性物理实现。
如此处使用的那样,服务器包括运行服务器程序的物理数据处理***(例如,图4所示的***412)。另外,计算机体系结构400可以表示诸如膝上型计算机、平板计算机、智能手机或个人计算机之类的客户机的一种示例性实现。
将认识到并且应该理解,上面描述的本发明的示例性实施例可通过多种不同的方式实现。给予了此处提供的本发明的教导后,所属领域的普通技术人员将能够构想本发明的其它实现。实际上,尽管参考附图在此描述了本发明的示例性实施例,但是应当理解,本发明并不限于这些精确的实施例,并且在不偏离本发明的精神和范围的情况下,本领域的技术人员可以做出各种其它更改和修改。