用于预链接软件以改善虚拟系统中的存储器去重的技术的制作方法

文档序号:6485244阅读:224来源:国知局
用于预链接软件以改善虚拟系统中的存储器去重的技术的制作方法
【专利摘要】本文描述了用于对软件进行预链接以改善虚拟系统中的存储器去重的技术。一种装置可以包括处理器电路、存储器单元和动态链接器应用,其中,所述存储器单元耦合到所述处理器电路,用于存储用于多个虚拟机的专用存储器页,所述动态链接器应用在所述处理器电路上运行,用于当软件程序的二进制版本在虚拟机上运行时,对该二进制版本和相关的程序模块进行链接。所述动态链接器应用可以包括在所述处理器电路上运行的主预链接部件,其用于使用被分配给第一虚拟机的第一专用存储器页中的第一组虚拟存储器地址,针对该第一虚拟机对用于该软件程序的第一二进制版本的第一组程序模块进行重定位,并且在全局预链接布局映射中存储该第一组程序模块的重定位信息,以供第二虚拟机使用。还描述并要求保护其它实施例。
【专利说明】用于预链接软件以改善虚拟系统中的存储器去重的技术
【背景技术】
[0001]虚拟机(VM)是机器(例如,计算机)的软件实现,其像物理机一样执行程序。基于虚拟机的使用和其相当于任何真机的程度,虚拟机主要被分成两类。系统虚拟机提供完整的系统平台,其支持执行完整的操作系统(OS)。与之相比,进程虚拟机被设计来运行单一程序,这意味着它支持单一进程。虚拟机的一个基本特征是其内运行的软件受到该虚拟机提供的资源和抽象化的限制。
[0002]在给定的时间,物理机仅有一小比例部分在使用中,虚拟化允许物理机被共享以提高该物理机的总利用率。虚拟化的一个设计因素是高效共享由物理机提供的诸如处理器、存储器和网络带宽这样的硬件资源。处理器和网络资源即使在虚拟环境下也典型地未被充分利用。然而,存储器资源经常处于高需求中。因此,针对在虚拟环境下的高效存储器共享的存储器管理技术可以使得虚拟机能够更加动态、更加高功效和更加有成本效益。针对这些和其它考虑,需要本改进。
【专利附图】

【附图说明】
[0003]图1说明了虚拟机的第一存储器管理装置的实施例。
[0004]图2说明了用于虚拟机的存储器管理装置的第一操作环境的实施例。
[0005]图3说明了用于虚拟机的存储器管理装置的第二操作环境的实施例。
[0006]图4说明了用于虚拟机的存储器管理装置的第三操作环境的实施例。
[0007]图5说明了用于虚拟机的存储器管理装置的第四操作环境的实施例。
[0008]图6说明了用于虚拟机的存储器管理装置的第五操作环境的实施例。
[0009]图7说明了用于虚拟机的存储器管理装置的第一逻辑流的实施例。
[0010]图8说明了用于虚拟机的存储器管理装置的第二逻辑流的实施例。
[0011]图9说明了用于虚拟机的存储器管理装置的第三逻辑流的实施例。
[0012]图10说明了用于虚拟机的存储器管理装置的第四逻辑流的实施例。
[0013]图11说明了适用于虚拟化为多个虚拟机的计算架构的实施例。
【具体实施方式】
[0014]各种实施例通常针对虚拟化系统。一些实施例特别针对支持多个虚拟机的虚拟化系统的增强的存储器管理技术。例如,在一个实施例中,可以以便利并支持虚拟系统的存储器管理操作的方式来执行软件程序的预链接操作。
[0015]如下面更详细地描述的,虚拟系统典型地实现了用于改善程序加载时间的预链接技术和用于改善存储器使用的存储器管理技术。在常规的虚拟系统中,预链接和存储器管理被视为不同且分别的过程。然而,预链接操作可能显著地影响存储器管理操作。当前对预链接操作的优化包括随机化部件,其对软件程序和相关的软件库使用的存储器地址进行随机化。随机化存储器地址使得存储器管理技术更加难以定位并合并存储器中的重复内容。这对虚拟系统中的存储器管理技术产生了显著的性能损失。[0016]为了解决这些和其它问题,各种实施例实现了用于软件程序的增强的预链接技术,其具体地被设计来改善虚拟系统的存储器管理操作。虚拟系统可以实现多个虚拟机,每个虚拟机被分配存储器单元的专用(private)存储器段中一个或更多专用存储器页。在多个虚拟机利用相同的软件程序及相关的库的那些情况下,所述增强的预链接技术删除了对相关的库进行重定位操作的随机化部件,从而允许该相关的库被使用一个已知的虚拟地址空间存储在不同的专用存储器页中。诸如存储器去重(memory de-duplication)这样的存储器管理技术可以使用该已知的虚拟地址空间来定位存储相同库的多个专用存储器页,并且把该多个专用存储器页转换成用于该多个虚拟机的一个共享存储器页。这使得在虚拟环境下有更高效的存储器共享,并且可以使得虚拟机能够更加动态、更加高功效和更加有成本效益。作为结果,实施例能够为操作者、设备或网络提高可承受性、可伸缩性、模块化、可扩展性或互操作性。
[0017]综合参考文中使用的概念和术语,可以就在计算机或计算机网络上执行的程序过程来给出接下来的详细说明。本领域的技术人员使用这些过程性的说明和表示,以便向本领域的其他技术人员更有效地传达他们工作的主旨。
[0018]这里的过程,通常被构思为是导致期望结果的前后一致的操作序列。这些操作是那些需要对物理量进行物理操纵的操作。虽然不是必须的,但通常这些量表现为能够被存储、传递、合并、比较和以其它方式操纵的电、磁或光信号的形式。有时,主要是因为常用的原因,把这些信号称作比特、值、元素、符号、字符、项、数字等是很方便的。然而,应当注意,所有这些及类似术语是与适当的物理量相关的,并且其仅仅是应用于那些量的方便的标号。
[0019]此外,所执行的操纵经常明确地指,例如相加或比较,其一般与人工操作员进行的智力操作有关。在多数情况下,在构成一个或更多实施例的部分的文中所述任何操作中,并不需要或不要求这种人工操作员的能力。更确切地说,该操作是机器操作。用于执行各种实施例的操作的有用的机器包括通用数字计算机或类似设备。
[0020]各种实施例还涉及用于执行这些操作的装置。这种装置可以针对所要求的目的进行专门地构造,或者其可以包括通用计算机,该通用计算机被在该计算机中存储的计算机程序有选择地激活或重新配置。文中呈现的过程不是固有地涉及特定的计算机或其它装置。各种通用机器可以和根据文中示教所编写的程序一起使用,或者,构造更多专用的装置来执行所要求的方法步骤也可以被证明是很方便的。根据给出的说明,用于各种这些机器的所要求的结构将变得明显。
[0021]现在参考附图,其中相似的参考数字自始至终用于指示相似的元素。在以下的说明中,出于解释说明的目的,给出了许多特定细节以提供对它的细致了解。然而,明显的是,在没有这些特定细节的情况下也能够实现新颖的实施例。在其它情况下,以框图的形式示出众所周知的结构和设备,以便利对它们的说明。目的是要覆盖与所要求保护的主题相一致的所有修改、等同和替代。
[0022]图1说明了用于存储器管理装置100的框图。在一个实施例中,存储器管理装置100可以包含计算机实现的装置,其包括具有一个或更多处理器电路130和一个存储器单元150的电子设备120。电子设备120还可以具有已安装的专门的软件程序,包括虚拟化应用138、存储器管理应用140、软件程序142、加载器应用144、和动态链接器应用146。尽管图1示出的存储器管理装置100在某种拓扑中具有有限数量的元件,但是可以理解,存储器管理装置100在替代的拓扑中可以包括更多或更少的元件,如给定的实现所要求的。
[0023]在各种实施例中,存储器管理装置100可以包含电子设备120。电子设备120的示例可以包括,但不限于:超级移动设备、移动设备、个人数字助理(PDA)、移动计算设备、智能电话、电话、数字电话、蜂窝电话、电子书阅读器、手持设备、单向寻呼机、双向寻呼机、消息传递设备、计算机、个人计算机(PC)、台式计算机、膝上型计算机、笔记本计算机、上网本、掌上型计算机、平板计算机、服务器、服务器阵列或服务器群、web服务器、网络服务器、因特网服务器、工作站、迷你计算机、大型计算机、超级计算机、网络装置、web装置、分布式计算系统、多处理器系统、基于处理器的系统、消费电子、可编程消费电子、游戏设备、电视、数字电视、机顶盒、无线接入点、基站、用户站、移动用户中心、无线网络控制器、路由器、集线器、网关、桥接器、交换机、机器或它们的组合。所述实施例在此方面不受限制。
[0024]在各种实施例中,存储器管理装置100可以包含处理器电路130。该处理器电路130可以包含用于通用计算的通用处理器电路,例如用于计算平台的中央处理器(CPU)。处理器电路130能够是各种商业上可获得的通用处理器中
的任何处理器,包括但不限于:AMD?的Athlon?、Duron?.和Opteron?
处理器;ARM?的应用、嵌入式和安全处理器;IBM?和Motorola?的
DragonBalI? 和 PowerPC? 处埋器;IBM? 和 Sony? 的 Cell 处理器;Intel? 的
Celeron?> Core(2)Duo?、Itanium?、Pentium?、Xeon?和xscale?处理器,以
及类似的处理器。双核微处理器、多核处理器及其它多处理器架构也可以被用作处理器电路130。所述实施例在此方面不受限制。
[0025]在各种实施例中,存储器管理装置100可以包含存储器单元150。存储器单元150可以包括其形式为一个或更多较高速存储器单元的各种类型的计算机可读存储介质,例如只读存储器(ROM)、随机存取存储器(RAM)、动态RAM(DRAM)、双倍数据速率DRAM(DDRAM)、同步DRAM (SDRAM)、静态RAM (SRAM)、可编程ROM (PROM)、可擦除可编程ROM (EPROM)、电可擦除可编程ROM(EEPROM)、闪速存储器、诸如铁电聚合物存储器这样的聚合物存储器、奥氏存储器、相变存储器或铁电存储器、硅-氧化物-氮化物-氧化物-硅(S0N0S)存储器、磁卡或光卡、诸如独立磁盘冗余阵列(RAID)驱动器这样的设备阵列、固态存储器(例如,USB存储器、固态驱动器(SSD))、以及任何其它类型的适合存储信息的存储介质。所述实施例在此方面不受限制。
[0026]在图1示出的被说明的实施例中,处理器电路130可以用于执行专门的软件程序,包括虚拟化应用138、存储器管理应用140、软件程序142、加载器应用144、和动态链接器应用146。尽管这些软件程序被说明和描述为由处理器电路130执行,但是可以理解,这些软件程序的一些部分或全部可以被电子设备120实现的诸如图形处理单元(GPU)、用于收发器的基带处理器等这样的其它处理器电路执行。所述实施例在此方面不受限制。
[0027]如图1所示,存储器管理装置100可以包括虚拟化应用138。虚拟化应用138通常用于安装并管理电子设备120上的多个虚拟机160-a。通常,虚拟机160-a是抽象的或者模拟的计算机架构,其能够在硬件或软件中实现。任一实现都是要被包括在虚拟机160-a的下列说明中的。例如,在一个实施例中,虚拟机160-a是机器的软件实现,其像诸如电子设备120这样的物理机一样执行程序。虚拟化应用138可以把虚拟机160-a实现为提供完整系统平台的系统虚拟机,所述完整系统平台能够支持执行被表示为软件程序142的完整的操作系统(OS)和/或应用程序。此外或作为选择,虚拟化应用138可以把虚拟机160-a实现为用于运行单一程序的进程虚拟机,这意味着其支持单一进程。虚拟机160-a可以使用或共享由电子设备120提供的诸如处理器电路130和存储器单元150这样的各种硬件资源,以及其它由电子设备120实现的计算和通信平台部件。
[0028]可以使用多种已知的虚拟化软件和/或硬件平台来实现虚拟化应用138。虚拟化应用138的示例可以包括,但不限于:例如Red Hat?公司制作的基于内核的虚拟机(KVM) ?、Oracle公司制作的Oracle? VM?,VMware公司制作的 VMware? ESX?,以及 Wind River System? 公司制作的 VxWorks?,
International Business Machines?公司制作的z/VM?,以及类似的虚拟化平台。所述
实施例在此方面不受限制。
[0029]尽管在虚拟化应用138创建并管理的虚拟机160-a这种情况下描述了各种实施例,但是可以理解,一些实施例可以是针对提供被分割成多个分立的计算部分的硬件平台的任何电子设备120来实现的。例如,可以使用系统划分来实现各种实施例,所述系统划分将单一硬件平台分成多个硬件子系统。例如,具有多个处理器和存储器单元的硬件平台可以被划分成两个硬件子系统,每个硬件子系统具有一个处理器和一个存储器单元。所述实施例在此方面不受限制。
[0030]值得注意的是,文中使用的“a”、“b”和“c”及类似符号是要作为表示任何正整数的变量。因此,例如,如果一种实现设置了值为a = 5,则虚拟机160-a的完整集合可以包括虚拟机160-1、160-2、160-3、160-4和160-5。所述实施例在此方面不受限制。
[0031]虚拟化应用138可以实现用来创建虚拟机160-a的多种虚拟化技术,包括虚拟机管理器(VMM)或管理程序(hypervisor),以及其它虚拟化技术。在各种实施例中,存在两种通用类型的虚拟机160-a。第一种类型是主(master)虚拟机。第二种类型是客(guest)虚拟机。主虚拟机是主要的虚拟机并且通常管理一个或更多客虚拟机的操作。例如,可以在主虚拟机中执行VMM,以便为客虚拟机提供虚拟操作平台并管理客操作系统的执行。客虚拟机遵循来自在主虚拟机中执行的VMM的控制指令。一种典型实现具有单个主虚拟机和多个客虚拟机。如图1所示,例如,虚拟化应用138可以实现VMM以创建主虚拟机160-1和客虚拟机160-2、160-3。然而,可以理解,在各种组合中可以存在任意数量的主虚拟机和客虚拟机。例如,虚拟系统可以具有多个主虚拟机,每个主虚拟机控制不同组的客虚拟机的操作。所述实施例在此方面不受限制。
[0032]存储器管理装置100可以包括存储器管理应用140。存储器管理应用140通常用于为一组虚拟机160-a执行存储器管理操作。每个虚拟机160-a可以被分配存储器150中的一个分立的存储器部分,例如一个专用存储器段。每个虚拟机160-a然后可以向它的专用存储器段中读取和写入一组专用存储器页152-b。专用存储器页152-b是受限存取的存储器页。例如,虚拟化应用138实现了安全措施以确保第一虚拟机160-1不可以存取第二虚拟机160-2的专用存储器页152-b,反之亦然。
[0033]通常,存储器页(有时被称为虚拟页或简单称为页)是虚拟存储器中的固定长度的连续块,其是操作系统为程序进行存储器分配的最小单元,并且在主存储器和诸如硬盘驱动器这样的附属存储装置之间进行传送。页大小通常由处理器架构确定。传统地,一个系统中的页具有统一的大小,例如4096字节。然而,现代处理器设计经常由于各种利弊而允许(有时候是同时有)两种或更多种页大小。存在几点在选择给定页大小要考虑的因素,包括诸如页大小对比页表大小、页大小对比转换后备缓冲(TLB)利用、页的内部碎片、页大小对比磁盘存取等这样的因素。
[0034]在一个实施例中,虚拟机160-a可以执行类似的操作系统和应用程序,例如软件程序142的不同版本。当在多个虚拟机160-a中的每一个上执行相同的软件程序142时,那些虚拟机160-a的许多专用存储器页152-b也是相同的。当这些专用存储器页152_b是相同的并因此具有重复内容时,它们能够被合并成共享存储器页154-c,从而释放存储器供其它应用使用。例如,共享存储器页154-1可以被一组多个虚拟机160-1、160-2进行存取,所述多个虚拟机160-1、160-2分别具有用于创建该共享存储器页154-1的相同的专用存储器页152-1、152-2。在这种情况下,共享存储器页154-1仍旧是专用的,因为该共享存储器页154-1不可以被虚拟机160-1、160-2以外的其它虚拟机160_a进行存取。
[0035]存储器管理应用140可以实现一个或更多后台处理线程或守护进程,其周期地对专用存储器页152-b执行扫描以便识别出重复的(或相同的)存储器页,并且把重复的存储器页合并到一起以形成共享存储器页154-c。在一个实施例中,共享存储器页154-c可以随后被标记为只读文件。在一个实施例中,可以使用写时复制(Copy-on-Write, CoW)技术来执行合并操作。存储器去重处理释放了存储器单元150中的存储器资源,以供其它应用使用。当由于任何原因,一个虚拟机160-a改变了共享存储器页154-c,则存储器管理应用140可以为进行该改变的该虚拟机160-a提供新的专用存储器页152-b。
[0036]存储器管理装置100可以包括软件程序142。软件程序142可以包括适合由处理器电路130执行的任意独立的软件程序。软件程序142的示例可以包括系统程序和应用程序。系统程序通常可以协助电子设备120的运行并且可以直接地负责控制、集成和管理计算机系统的单独的软件和硬件部件。系统程序的示例可以包括,但不限于:操作系统(OS)、设备驱动程序、编程工具、实用程序、软件库、应用编程接口(API)等。应用程序通常可以允许用户完成一个或更多专门的任务。应用程序的示例可以包括,但不限于:一个或更多消息传递应用(例如,电话、语音邮件、传真、电子邮件、即时消息、短消息服务、多媒体消息服务、视频会议)、web浏览器应用、个人信息管理(PM)应用(例如,通讯录、日历、日程安排、任务)、字处理应用、电子表格应用、数据库应用、媒体应用(例如,视频播放器、音频播放器、多媒体播放器、数码相机、摄像机、媒体管理)、游戏应用、生产力应用、企业应用等等。在各种实现中,应用程序可以提供一个或更多图形用户接口(GUI)以便在电子设备120和用户之间传送信息。所述实施例在此方面不受限制。
[0037]存储器管理装置100可以包括加载器应用144。加载器应用144是通常负责把软件程序142加载到存储器单元150中、然后将其准备好以供处理器电路130执行的软件程序。整个软件程序142可以在执行前被立即加载,或者可以在执行过程中在实际需要时分阶段地被加载(例如,使用存储器映射文件技术)。在许多情况下,软件程序142可以利用一个或更多软件库156-d来运行。软件库156-d包含由分立的代码和数据集构成的集合,所述分立的代码和数据集在本文中被称为程序模块,其向诸如软件程序142这样的独立的软件程序提供服务。在这种情况下,在加载操作期间,加载器应用144还需要从软件库156-d中定位并加载被软件程序142使用的程序模块。
[0038]存储器管理装置100可以包括动态链接器应用146。动态链接器应用146通常负责对软件程序142和一个或更多软件库156-d中的一个或更多程序模块进行链接。由于软件程序142和软件库156-d中的程序模块是独立的程序,为了便于模块化编程,软件程序142和这些程序模块典型地使用符号互相引用。在一些情况下,每个程序使用的符号可能是不同的或者未定义的。动态链接器应用146解析这些符号,以允许软件程序142和软件库156-d中的任何相关程序模块像一个统一的可执行程序一样进行操作。动态链接器应用146在软件程序142的运行期间执行动态链接操作。与之相比,静态链接器典型地在编译时使用,以产生软件程序的二进制版本(例如,可执行文件)。例如,动态链接器应用146在运行期间解析符号,而静态链接器在编译期间解析符号。
[0039]动态链接器应用146在代码长度和管理方面提供了显著的优势。然而,动态链接给加载器应用144增加了复杂度。每次执行软件程序142,加载器应用144需要定位软件程序142和软件库156-d中的相关程序模块。出于安全的原因,软件库156-d在进程地址空间中四处移动。例如,地址空间布局随机化是一种安全技术,其在存储器单元150中随机安排关键数据区(包括软件库156-d)的位置,以使攻击者更难以预测目标地址。然而,由于软件库156-d能够移动,当加载器应用144定位软件库156-d以便和软件程序142 —同加载时,该加载器应用144遭受性能损失。有越多的软件库156-d要解析,该性能损失越大。
[0040]为了补偿这种性能损失,动态链接器应用146可以实现预链接操作(也称作预绑定)。预链接是在编译时间之后、但在可执行文件在处理器电路130上的运行时间之前对诸如软件程序142的二进制版本这样的可执行文件与软件库156-d中的程序模块进行链接的处理过程。这降低了软件程序142的程序加载时间(或启动时间)。然而,诸如地址空间布局随机化这样的安全技术不能和预链接一同使用,因为这样做将需要在存储器单元150中重定位软件库156-d,从而击败了预链接的任何优势。为了在试图恢复地址空间布局随机化的一些优势,常规的预链接操作随机地选择预链接使用的地址。这使得更难以执行对系统的某些攻击,因为用于预链接的地址是单独针对那个系统的。
[0041]尽管使用随机地址的预链接对于使用单一进程空间和地址空间的物理机而言似乎是一种可行的解决方案,但是使用随机地址的预链接对诸如由存储器管理装置100所示出的那样的虚拟系统使用的存储器管理应用140造成了性能损失。存储器管理应用140可以实现存储器去重技术来检测出重复的专用存储器页152-b,并且在多个虚拟机160-a之间共享它们。然而,使用随机地址的预链接使得软件库156-d位于被分配给每个虚拟机160-a的专用存储器页152-b中的不同虚拟存储器地址处。照此,存储器管理应用140需要搜索并定位在每个专用存储器152-b中的不同虚拟存储器地址处的相同的库,以执行存储器去重,从而增加了存储器去重技术的开销、复杂度和性能影响。
[0042]动态链接器应用146通过实现用于软件程序142的增强的预链接技术,解决了这些和其它问题,改善了虚拟系统中存储器管理应用140的性能。在多个虚拟机160-a利用相同的软件程序142 (例如系统程序或应用程序)及相关的软件库156-d的那些情况下,动态链接器应用146实现了增强的预链接技术,其删除了用于相关的软件库156-d的重定位操作的随机化部件,从而允许在不同的专用存储器页152-b中使用一个已知的虚拟地址空间来存储相关的库156-d。存储器管理应用140可以使用诸如存储器去重这样的存储器管理技术,利用该已知的虚拟地址空间来定位存储相同的软件库156-d的多个专用存储器页152-b,并且将该多个专用存储器页152-b转换为用于虚拟机160-a的一个共享存储器页154-c。这允许在虚拟环境中有更高效的存储器共享,并且可以使得虚拟机160-a能够更加动态、更加高功效和更加有成本效益。
[0043]图2说明了用于存储器管理装置100的操作环境200的实施例。操作环境200说明了处理器电路130所执行的动态链接器应用146的示例性实现。更确切地,操作环境200说明了主虚拟机160-1实现动态链接器应用146的主预链接部件202-1的更详细的框图和操作。
[0044]如前参考图1所述,动态链接器应用146在处理器电路130上运行,以便在软件程序142的二进制版本204在处理器电路130上运行时,动态地对该二进制版本204与相关的程序模块206-f进行链接。
[0045]软件程序142的二进制版本204可以包含源代码的一个编译版本。软件程序142的二进制版本204的示例可以包括、但不限于:二进制目标、二进制文件、可执行文件等。通常,诸如软件程序142这样的计算机程序被用容易被人理解的高级语言写成源代码语句。当实际执行计算机程序时,计算机响应由指令组成的机器代码,所述指令由直接控制诸如处理器电路130这样的中央处理单元(CPU)的操作的二进制信号构成。一种被称为编译器的专门程序被用来读取源代码并且将它的语句转换成特定CPU的机器代码指令。这样产生的机器代码指令是与平台相关的,即,不同的计算机设备具有不同的CPU,不同的CPU具有由不同的机器代码指示的不同的指令集。
[0046]程序模块206-f可以包括一个或更多软件库156-d(在图2中被示为软件库156-1)中的各种程序模块。在软件程序142的二进制版本204在处理器电路130上运行期间,动态链接器应用146可以将程序模块206-f链接到该二进制版本204。
[0047]为了执行动态链接,主虚拟机160-1可以实现动态链接器应用146的一个或更多部件202-e。一个或更多部件202-e可以用于执行各种预链接操作,以便就在软件程序142的二进制版本204在处理器电路130上运行之前,对该二进制版本204和一个或更多软件库156-d中的相关程序模块206-f进行预链接。预链接软件程序142与相关的程序模块206-f降低了当用户实际期望启动执行软件程序142时,加载器应用144的程序加载时间。
[0048]如图2所示,例如,主虚拟机160-1可以实现动态链接器应用146的主预链接部件202-1。主预链接部件202-1通常可以用于针对主虚拟机160-1执行软件程序142和相关的软件库156-d的预链接操作,然后其可以被用作一个或更多客虚拟机160-2、160-3的模板。
[0049]在一个实施例中,主预链接部件202-1可以用于使用被分配给主虚拟机160-1的专用存储器段(例如,第一专用存储器页152-1)中的第一组虚拟存储器地址,针对该主虚拟机160-1对用于软件程序142的第一二进制版本204的第一组程序模块206-f进行重定位。
[0050]通常,重定位是为程序的各个部分指派加载地址并调整程序中的代码和数据以反映所指派的地址的处理过程。主预链接部件202-1执行重定位连同符号解析,所述符号解析是在运行软件程序142之前,搜索程序模块206-f以便用存储器单元150中的实际可用的地址来替换程序模块206-f的符号引用或名字的处理过程。重定位操作典型地分两个阶段完成。在第一阶段,每个目标文件具有各种区段,像代码、数据、bss段等等。为了将所有的目标文件合并成单个可执行文件,主预链接部件202-1将相似类型的所有区段合并成那种类型的单个区段。然后,主预链接部件202-1向每个区段和每个符号指派运行时地址。在此亥IJ,代码(函数)和数据(全局变量)将具有唯一的运行时地址。在第二阶段,每个区段引用一个或更多符号,所述一个或更多符号应该被根据在目标文件的重定位表中存储的信息进行修改,以便其指向正确的运行时地址。重定位表是由编译器或汇编器创建、并且存储在目标或可执行文件中的指针列表。该重定位表中的每个项目,有时被称作“修正(fixup) ”,是到目标代码中的地址的指针,其中,当主预链接部件202-1重定位该程序时,所述地址必须被改变。修正被设计用于支持作为一个完整单元的程序的重定位。在一些情况下,重定位表中的每个修正其自身都是相对于一个为零的基地址而言的,因此当主预链接部件202-1在重定位表中移动时,所述修正本身必须改变。
[0051]一旦主预链接部件202-1对用于软件程序142的二进制版本204的程序模块206-f进行了重定位,主预链接部件202-1可以在全局预链接布局映射208中存储针对程序模块206-f的重定位信息,以供电子设备120的其它虚拟机(例如,客虚拟机160-2、160-3)使用。
[0052]图3说明了用于存储器管理装置100的操作环境300的实施例。操作环境300说明了由动态链接器应用146的主预链接部件202-1对单个示例性程序模块206-1执行的重定位操作的一个示例性实现。可以理解,可以为该组程序模块206-f中的其它程序模块执行针对程序模块206-1所描述的重定位操作。
[0053]对程序模块202-1进行重定位涉及遍历程序模块206-1中的每个地址,并且将其用存储器单元150中被分配给主虚拟机160-1的专用存储器段的虚拟地址空间中由程序模块206-1的位置所确定的真实地址来替换。如图3所示,主预链接部件202-1通过把在程序模块202-1中引用的每个模块地址302-g改变成第一专用存储器页的第一组虚拟存储器地址中的一个虚拟存储器地址304-h,来重定位第一组程序模块206-f中的该程序模块206-1。例如,模块地址302-1可以被改变成虚拟存储器地址304-1,模块地址302-2可以被改变成虚拟存储器地址304-2,等等。一旦完成程序模块206-1的重定位操作,主预链接部件202-1可以在全局预链接布局映射208中存储重定位信息210。重定位信息210可以包含第一组程序模块206-f中的程序模块206-1的每个模块地址302-g和第一专用存储器页152-1的第一组虚拟存储器地址304-h中的每个虚拟存储器地址304-h之间的映射。然后,主预链接部件202-1可以为下一个程序模块206-2开始重定位操作。继续这种处理直到主预链接部件202-1对该组程序模块206-f中的所有程序模块进行了重定位,并且在全局预链接布局映射208中存储了对应的重定位信息210。现在软件程序142的二进制版本204被与相关的程序模块206-f进行了预链接,并且已经准备好供加载器应用144在用户启动执行该二进制版本204时将其加载到存储器单元150中。
[0054]图4说明了用于存储器管理装置100的操作环境400的实施例。操作环境400说明了处理器电路130所执行的动态链接器应用146的示例性实现。更确切地,操作环境400说明了客虚拟机160-2实现动态链接器应用146的客户机预链接部件202-2的更详细的框图和操作。[0055]如前参考图1所述,动态链接器应用146在处理器电路130上运行,以便在软件程序142的二进制版本204在处理器电路130上运行时,对该二进制版本204与相关的程序模块206-f进行链接。类似地,动态链接器应用146在处理器电路130上运行,以便在软件程序142的二进制版本404在处理器电路130上运行时,对该二进制版本404与相关的程序模块406-j进行链接。二进制版本204、404的相同之处在于它们是同一软件程序142的副本,但它们并不必然是同一个二进制文件。
[0056]与程序模块206-f—样,程序模块406-j可以包含一个或更多软件库156_d(在图4被示为软件库156-2)中的各种程序模块。在软件程序142的二进制版本404在处理器电路130上运行期间,动态链接器应用146可以将程序模块406-j链接到该二进制版本404。
[0057]如图4所示,动态链接器应用146可以包含在处理器电路130上运行的客户机预链接部件202-2,以接收主预链接部件202-1生成的全局预链接布局映射208,并且从全局预链接布局映射208中取回重定位信息210。重定位信息210可以包含第一组程序模块206-f中的程序模块206-1的每个模块地址302-g和第一专用存储器页152-1的第一组虚拟存储器地址304-h中的每个虚拟存储器地址304-h之间的映射。客户机预链接部件202-2可以用该重定位信息110作为模板,使用被分配给客虚拟机160-2的第二专用存储器页152-2中的第二组虚拟存储器地址,针对该客虚拟机160-2对用于软件程序142的第二二进制版本404的第二组程序模块406-j进行重定位。现在,二进制版本204、404以及各自相关的程序模块206-f、406-j被使用分别分配给虚拟机160-1、160-2的不同专用存储器段中的同一组虚拟存储器地址进行了预链接。
[0058]图5说明了用于存储器管理装置100的操作环境500的实施例。操作环境500说明了由动态链接器应用146的客户机预链接部件202-2对单个示例性程序模块406-1执行的重定位操作的一个示例性实现。可以理解,可以为该组程序模块406-f中的其它程序模块执行针对程序模块406-1所描述的重定位操作。
[0059]如图5所示,客户机预链接部件202-2通过把在程序模块202_1中引用的每个模块地址502-k改变成第二专用存储器页152-2的第二组虚拟存储器地址504-h中的一个虚拟存储器地址504-h,对第二组程序模块406-j中的该程序模块406-1进行重定位。例如,模块存储器地址502-1可以被改变成虚拟存储器地址504-1,模块存储器地址502-2可以被改变成虚拟存储器地址504-2,等等。一旦完成程序模块406-1的重定位操作,客户机预链接部件202-2可以对下一个程序模块406-2开始重定位操作。继续这种处理直到客户机预链接部件202-2对该组程序模块406-j中的所有程序模块进行了重定位。现在,软件程序142的二进制版本404被与相关的程序模块406-j进行了预链接,并且已经准备好供加载器应用144在用户启动执行该二进制版本404时将其加载到存储器单元150中。
[0060]由于客户机预链接部件202-2使用全局预链接布局映射208中的重定位信息210进行它的重定位操作,第一专用存储器页152-1的第一组虚拟存储器地址304-h中的一个或更多被重定位的虚拟存储器地址304-h现在与第二专用存储器页152-2的第二组虚拟存储器地址504-h中的一个或更多被重定位的虚拟存储器地址504-h相匹配。照此,动态链接器应用146可以向存储器管理应用140传送该已知的虚拟存储器地址304-h、504-h。
[0061]存储器管理应用140可以将该已知的虚拟存储器地址304-h、506_h用作起点,来寻找适合存储器去重操作的候选者。存储器管理应用140可以使用该已知的虚拟存储器地址304-h、504-h (例如,基准虚拟存储器地址304-1、504-1)中的一个虚拟存储器地址,从存储器单元150中取回专用存储器页152-1、152-2。存储器管理应用140可以对专用存储器页152-1、152-2进行比较,以确定是否存在相同内容的匹配。如果存在匹配,则存储器管理应用140可以将专用存储器页152-1、152-2合并成单个共享存储器页154-1。现在,共享存储器页154-1可以被产生了专用存储器页152-1、152-2的虚拟机160_1、160_2进行存取。如果虚拟机160-1、160-2中的一个虚拟机修改了共享存储器页154-1,存储器管理应用140可以将共享存储器页154-1转换回专用存储器页152-1、152-2,这是由于它们现在具有不重复的内容。可以为共享存储器页154-2、共享存储器页154-3等等继续这种处理,直到所有重复的专用存储器页152-b被合并成一个共享存储器页154-c为止。
[0062]图6说明了用于存储器管理装置100的操作环境600的实施例。操作环境600说明了在主预链接部件202-1与客户机预链接部件202-2、202-3和202-4之间共享预链接信息602的一种示例性实现,所述主预链接部件202-1在主虚拟机160-1中执行,所述客户机预链接部件202-2、202-3和202-4分别在客虚拟机160-2、160-3和160-4中执行。
[0063]如图6所示,主预链接部件可以在对第一组程序模块206-f进行重定位之前,接收预链接信息602,并且使用该预链接信息602对第一组程序模块206-f进行重定位。预链接信息602可以被用作预链接映射算法的输入,所述预链接映射算法被设计用于为预链接操作生成地址布局。通常,预链接信息602可以包括任何可以被用来优化由主预链接部件202-1执行的重定位操作的信息,下面给出其具体例子。
[0064]在一个实施例中,预链接信息602可以产生于诸如主虚拟机160-1这样的单个虚拟机。在主虚拟机160-1内执行的主预链接部件202-1可以针对仅仅对该主虚拟机160-1已知的信息生成预链接信息602。主预链接部件202-1可以使用该预链接信息602为在主虚拟机160-1上执行的预链接操作计算出虚拟存储器地址304-h的最佳布局。
[0065]举例来说,预链接信息602可以包括将被同时加载到主虚拟机160-1上的第一组程序模块206-f中的程序模块206-f的图。然后,主预链接部件202-1可以将第一组虚拟存储器地址304-h中的不同子组的虚拟存储器地址304-h指派给在该图中的程序模块206-f,以避免使用同一组地址加载多个程序模块206-f。例如,主预链接部件202-1可以针对要进行预链接的每个可执行文件来扫描存储在分配给第一虚拟机160-1的专用存储器段中的专用存储器页152-b,生成将要被同时加载的软件库156-d的图,然后为每个软件库156-d计算出或“布局”成组的虚拟存储器地址304h,使得两个软件库156-d(例如,156-1,156-2)将永远不会同时被加载、或者重叠虚拟存储器地址304-h。然后,这些偏移量被存储在它们自己的共享目标文件中,符号表和段地址全部都被调整以反映基于选定的基地址的地址。
[0066]此外或作为选择,预链接信息602可以产生于多个虚拟机,例如主虚拟机160-1和一个或更多客虚拟机160-2、160-3和/或160-4。分别在客虚拟机160-2、160-3和160-4内执行的客户机预链接部件202-2、202-3和202-4中的每一个可以生成并向主预链接部件202-1发送相应组的预链接信息602。主预链接部件202-1可以从客虚拟机160-2、160-3和160-4接收预链接信息602,并且使用不同组的预链接信息602为预链接操作计算出虚拟存储器地址的最佳布局。
[0067]举例来说,假设预链接信息602包含将被同时加载到主虚拟机160-1上的第一组程序模块206-f中的程序模块206-f的第一图、和将被同时加载到客虚拟机160-2上的第二组程序模块406-j中的程序模块406-j的第二图。然后,主预链接部件202-1可以向第一图中的第一组程序模块206-f指派第一组虚拟存储器地址304-h中的不同子组的虚拟存储器地址304-h,向第二图中的第二组程序模块406-j指派第二组虚拟存储器地址504-h中的不同子组的虚拟存储器地址504-h。对来自客虚拟机160-2的预链接信息602加以考虑使得主预链接部件202-1能够以模板的方式(其不会对客虚拟机160-2产生负面影响)为主虚拟机160-1布局虚拟存储器地址,例如使用客虚拟机160-2不可用或尚未使用的虚拟存储器地址。
[0068]再参考图1,电子设备120可以被耦合到各种计算和/或通信平台上,所述计算和/或通信平台包括在这样的平台上能典型地找到的平台部件。例如,电子设备120可以包括计算平台,其具有各种平台部件,例如输入/输出(I/O)设备、I/O控制器、GPU、电源、热管理部件等等。在一个实施例中,电子设备120可以包括诸如移动计算设备(例如,笔记本、平板计算机、智能电话等)或固定计算设备(例如,个人计算机、台式计算机、服务器等)这样的具有用于呈现在存储器单元150中存储的信息的显示器的计算设备。显示器可以包含任何适合电子设备120的数字显示设备。例如,显示器可以用液晶显示器(LCD)(例如触摸式的彩色薄膜晶体管(TFT)LCD)、等离子体显示器、有机发光二极管(OLED)显示器、阴极射线管(CRT)显示器、或用于向电子设备120的用户显示内容的其它类型的适当的可视接口来实现。显示器还可以包括某种形式的背光或亮度发射器,如给定的实现所要求的。
[0069]文中包括的是表示用于执行所公开的架构的多个新颖方面的示例性方法的一组流程图。尽管出于简洁解释的目的,文中示出的一个或更多方法,例如采用流程图或流图的形式,被示出并描述为一系列动作,然而将明白并理解的是,所述方法并不受到动作次序的限制,因为一些动作依照其自身可以以不同于文中示出和描述的次序来发生、并且/或者与其它动作一同发生。例如,本领域的技术人员将明白并理解,作为选择,方法能够被表示为诸如在状态图中表示的那样的一系列相关的状态或事件。此外,对于一种新颖实现来说,可能并不需要方法中所说明的所有动作。
[0070]图7说明了逻辑流700的一个实施例。逻辑流700可以表示由文中所述的一个或更多实施例(例如,存储器管理装置100)执行的一些或全部操作。更确切地,逻辑流700说明了动态链接器应用146的主预链接部件202-1和/或客户机预链接部件202-2执行的预链接操作。
[0071]在图7示出的所说明的实施例中,在块702,逻辑流700可以使用被分配给第一虚拟机的第一专用存储器页中的第一组虚拟存储器地址,针对该第一虚拟机对用于软件程序的第一二进制版本的第一组程序模块进行重定位。例如,在主虚拟机160-1上执行的动态链接器应用146的主预链接部件202-1可以使用被分配给该主虚拟机160-1的第一专用存储器页152-1中的第一组虚拟存储器地址304-h,针对该主虚拟机160-1对用于软件程序142的第一二进制版本204的第一组程序模块206-1、206-2进行重定位。
[0072]在块704,逻辑流700可以在全局预链接布局映射中存储第一组程序模块的重定位信息。例如,主预链接部件202-1可以在可以被主虚拟机160-1和客虚拟机160-2进行存取的存储器单元150的共享存储器页152-3中的全局预链接布局映射208中存储第一组程序模块206-1、206-2的重定位信息210。全局预链接布局映射208可以被存储在所有虚拟机160-1、160-2、160-3和160-4可以存取的诸如共享存储器页152-3这样的共享存储器段中。作为选择,全局预链接布局映射208可以被当做在虚拟机160-1、160-2、160-3和160-4之间传递的消息进行传送。
[0073]在块706,逻辑流700可以取回全局预链接布局映射。例如,在客虚拟机160_2上执行的动态链接器应用146的客户机预链接部件202-2可以从共享存储器页152-3中取回全局预链接布局映射208和重定位信息210。
[0074]逻辑流700可以基于全局预链接布局映射,使用被分配给第二虚拟机的第二专用存储器页中的第二组虚拟存储器地址,针对第二虚拟机对用于该软件程序的第二二进制版本的第二组程序模块进行重定位。例如,客户机预链接部件202-2可以分析重定位信息210,并且用重定位信息210作为模板,使用被分配给客虚拟机160-2的第二专用存储器页152-2中的第二组虚拟存储器地址504-h,针对虚拟机160-2对用于软件程序142的第二二进制版本404的第二组程序模块406-1、406-2进行重定位。
[0075]图8说明了逻辑流800的一个实施例。逻辑流800可以表示由文中所述的一个或更多实施例(例如,存储器管理装置100)执行的一些或全部操作。更确切地,逻辑流800说明了动态链接器应用146的主预链接部件202-1和/或客户机预链接部件202-2执行的
重定位操作。
[0076]在图8示出的所说明的实施例中,在块802,逻辑流800可以通过将在第一组程序模块中的程序模块中引用的每个模块地址改变成第一专用存储器页的第一组虚拟存储器地址中的虚拟存储器地址,对该程序模块进行重定位。例如,主预链接部件202-1可以通过将在第一组程序模块206-1、206-2中的一个程序模块206-1中引用的每个模块地址302_g改变成被分配给主虚拟机160-1的专用存储器段(例如,第一专用存储器页152-1)的第一组虚拟存储器地址304-h中的一个虚拟存储器地址304-h,对该程序模块206-1进行重定位。
[0077]在块804,逻辑流800可以通过将在第二组程序模块中的程序模块中引用的每个模块地址改变成第二专用存储器页的第二组虚拟存储器地址中的虚拟存储器地址,对该程序模块进行重定位,其中,第一专用存储器页的第一组虚拟存储器地址与第二专用存储器页中的第二组虚拟存储器地址相匹配。例如,客户机预链接部件202-2可以通过将在第二组程序模块406-1、406-2中的一个程序模块406-1中引用的每个模块地址502_k改变成被分配给客虚拟机160-2的专用存储器段(例如,第二专用存储器页152-2)的第二组虚拟存储器地址504-h中的一个虚拟存储器地址504-h,对该程序模块进行重定位。第一专用存储器页152-1的第一组虚拟存储器地址302-g与第二专用存储器页152-2的第二组虚拟存储器地址504-h相匹配,这是由于这两种地址布局使用了相同的重定位信息210。
[0078]图9说明了逻辑流900的一个实施例。逻辑流900可以表示由文中所述的一个或更多实施例(例如,存储器管理装置100)执行的一些或全部操作。更确切地,逻辑流900说明了动态链接器应用146的主预链接部件202-1和/或客户机预链接部件202-2基于不同类型和来源的预链接信息602而执行的重定位操作。
[0079]在图9示出的所说明的实施例中,在块902,逻辑流900可以接收预链接信息。例如,在一个实施例中,主预链接部件202-1可以从主虚拟机160-1接收单组的预链接信息602。此外或作为选择,主预链接部件202-1可以从诸如客虚拟机160-2、160-3和/或160-4这样的各种客虚拟机接收不同组的预链接信息602。[0080]在块904,逻辑流900可以基于该预链接信息,对第一组程序模块进行重定位。例如,在一个实施例中,主预链接部件202-1可以基于仅仅是来自主虚拟机160-1的预链接信息602,重定位第一组程序模块206-f。例如,在一个实施例中,主预链接部件202-1可以基于来自客虚拟机160-2、160-3和/或160-4的不同组的预链接信息602,重定位第一组程序模块206-f。在这个实施例中,主预链接部件202-1可以把不同组的预链接信息602整合到一个超集中,并且将该信息超集用作预链接映射算法的输入。
[0081]在块906,逻辑流900可以基于预链接信息,向第一组程序模块中的不同的程序模块指派第一组虚拟存储器地址中的不同子组的虚拟存储器地址。例如,基于预链接信息602,主预链接部件202-1可以通过向第一组程序模块206-f中的不同的程序模块206-f指派第一组虚拟存储器地址304-h中的不同子组的虚拟存储器地址304-h,来执行重定位操作。
[0082]图10说明了逻辑流1000的一个实施例。逻辑流1000可以表示由文中所述的一个或更多实施例(例如,存储器管理装置100)执行的一些或全部操作。更确切地,逻辑流1000说明了在主虚拟机160-1中,在处理器电路130上执行的存储器管理应用140执行的
存储器去重操作。
[0083]在图10示出的所说明的实施例中,在块1002,逻辑流1000可以取回被分配给第一虚拟机的第一专用存储器页和被分配给第二虚拟机的第二专用存储器页。例如,存储器管理应用140可以取回被分配给主虚拟机160-1的第一专用存储器页152-1和被分配给客虚拟机160-2的第二专用存储器页152-2。可以对存储器管理应用140进行编程,以便基于在对软件程序142的二进制版本204、404和存储器单元150中的一个或更多软件库156_d执行预链接操作之后从动态链接器应用146传递到存储器管理应用140的已知的一组虚拟存储器地址304-h、504-h,取回第一和第二专用存储器页152-1、152-2。
[0084]在块1004,逻辑流1000可以比较第一和第二专用存储器页,以查找重复内容。例如,存储器管理应用140可以比较第一和第二专用存储器页152-1、152-2,以查找重复内容。
[0085]在块1006,当第一和第二专用存储器页具有重复内容时,逻辑流1000可以合并该第一和第二专用存储器页,以构成一个共享存储器页。例如,当第一和第二专用存储器页152-1、152-2被确定具有重复内容时,存储器管理应用140可以将该第一和第二专用存储器页152-1、152-2合并成单个的共享存储器页154-1。
[0086]图11说明了适合实现前述的各种实施例(例如,存储器管理装置100)的示例性计算架构1100的实施例。在一个实施例中,计算架构1100可以包括或被实现为诸如电子设备120这样的电子设备的一部分及其它。所述实施例在此方面不受限制。
[0087]如在本申请中所使用的,术语“装置”和“部件”是要指计算机相关的实体,或者是硬件、硬件和软件的组合、软件,或者是执行中的软件,示例性计算架构1100提供了其示例。例如,部件可以是,但不限于:在处理器上运行的进程、处理器、硬盘驱动器、多个存储驱动器(或光和/或磁存储介质)、目标文件、可执行文件、执行的线程、程序、和/或计算机。作为举例说明,在服务器上运行的应用和该服务器都能够是部件。一个或更多部件能够驻留在执行的进程和/或线程中,并且部件能够位于一个计算机上和/或分布在两个或更多计算机之间。此外,多个部件可以通过各种类型的通信介质,互相通信地耦合在一起以协调操作。该协调可以涉及单向的或双向的信息交换。例如,多个部件可以用在通信介质上传送的信号的形式来传送信息。该信息能够被实现为被分配给各种信号线的信号。在这样的分配中,每个消息是一个信号。然而,另外的实施例可以替代地使用数据消息。这样的数据消息可以通过各种连接来发送。示例性的连接包括并行接口、串行接口和总线接口。
[0088]计算架构1100包括各种常见的计算元件,例如一个或更多处理器、多核处理器、协处理器、存储器单元、芯片组、控制器、外围设备、接口、振荡器、计时设备、视频卡、音频卡、多媒体输入/输出(I/o)部件、电源,等等。然而,所述实施例并不限于计算架构1100的实现。
[0089]如图11所示,计算架构1100包含多个处理单元1104、一个系统存储器1106和一个系统总线1108。处理单元1104可以包含例如处理器电路130、132,CPU510,和/或GPU530。
[0090]系统总线1108为系统部件提供到处理单元1104的接口,所述系统部件包括但不限于系统存储器1106。系统总线1108能够是几种类型的总线结构中的任意一种,其可以进一步使用各种商业上可获得的总线架构中的任意一种而互连到存储器总线(借助于或不借助于存储器控制器)、外围总线、和局部总线。接口适配器可以经由插槽架构连接到系统总线1108。插槽架构的示例可以包括,但不限于:加速图形端口(AGP)、插件总线(CardBus)、(扩展的)工业总线标准架构((E) ISA)、微通道架构(MCA)、NuBus、外围部件互连(扩展的)(PCI (X))、PCI Express、个人计算机存储卡国际协会(PCMCIA),等等。
[0091]计算架构1100可以包含或实现各种制品。制品可以包括用于存储逻辑的计算机可读存储介质。计算机可读存储介质的示例可以包括能够存储电子数据的任意有形介质,其包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写入或不可写入存储器,等等。逻辑的示例可以包括使用任意合适类型的代码实现的可执行计算机程序指令,所述代码例如是源代码、编译代码、解释代码、可执行代码、静态代码、动态代码、面向对象代码、可视化代码,等等。
[0092]系统存储器1106可以包括其形式为一个或更多较高速存储器单元的各种类型的计算机可读介质,例如只读存储器(ROM)、随机存取存储器(RAM)、动态RAM(DRAM)、双倍数据速率DRAM (DDRAM)、同步DRAM (SDRAM)、静态RAM (SRAM)、可编程ROM (PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪速存储器、诸如铁电聚合物存储器这样的聚合物存储器、奥氏存储器、相变存储器或铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、磁卡或光卡、诸如独立磁盘冗余阵列(RAID)驱动器这样的设备阵列、固态存储器(例如,USB存储器、固态驱动器(SSD))、以及任何其它类型的适合存储信息的存储介质。在图11示出的所说明的实施例中,系统存储器1106能够包括非易失性存储器1110和/或易失性存储器1112。基本输入/输出系统(BIOS)能够被存储在非易失性存储器1110 中。
[0093]计算机1102可以包括其形式为一个或更多较低速存储器单元的各种类型的计算机可读存储介质,包括内部(或外部)硬盘驱动器(HDD) 1114、用于从可移动磁盘1118读取或向其写入数据的软磁盘驱动器(FDD) 1116、以及用于从可移动光盘1122(例如,⑶-ROM或DVD)读取或向其写入数据的光盘驱动器1120。HDD1114、FDD1116和光盘驱动器1120能够分别通过HDD接口 1124、FDD接口 1126以及光盘驱动器接口 1128连接到系统总线1108。用于外部驱动器实现的HDD接口 1124能够包括通用串行总线(USB)和IEEE13114接口技术中的至少一种或两种。
[0094]驱动器和相关的计算机可读介质提供了数据、数据结构、计算机可执行指令等的易失性和/或非易失性存储。例如,许多程序模块,包括操作系统1130、一个或更多应用程序1132、其它程序模块1134和程序数据1136,能够被存储在驱动器和存储器单元1110、1112中。在一个实施例中,所述一个或更多应用程序1132、其它程序模块1134和程序数据1136能够包括例如存储器管理装置100、200和500的各种应用和/或部件。
[0095]用户能够通过一个或更多有线/无线输入设备,例如,键盘1138和诸如鼠标1140这样的指点设备,向计算机1102输入命令和信息。其它输入设备可以包括麦克风、红外线(IR)遥控器、射频(RF)遥控器、游戏手柄、手写笔、读卡器、软件保护器(dongle)、指纹读取器、手套、图形输入板、操纵杆、键盘、视网膜阅读器、触摸屏(例如,电容性的,电阻式的,等等)、轨迹球、触控板、传感器、触控笔,等等。这些和其它输入设备经常通过耦合到系统总线1108的输入设备接口 1142连接到处理单元1104,但是也能够通过诸如并口、IEEE13114串口、游戏端口、USB端口、IR接口等这样的其它接口进行连接。
[0096]监视器1144或其它类型的显示设备也经由诸如视频适配器1146这样的接口连接到系统总线1108。监视器1144可以在计算机1102的内部或外部。除了监视器1144,计算机典型地还包括诸如扬声器、打印机等这样的其它外围输出设备。
[0097]经由有线和/或无线通信,使用到诸如远程计算机1148这样的一个或更多远程计算机的逻辑连接,计算机1102可以工作在联网环境中。远程计算机1148能够是工作站、月艮务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐设备、对等设备或其它公用网络节点,并且典型地包括结合计算机1102描述的多种或全部元件——尽管为了简洁,仅说示出了存储器/存储设备1150。所述的逻辑连接包括到局域网(LAN)1152和/或更大的网络,例如广域网(WAN) 1154的有线/无线连接。这样的LAN和WAN网络环境在办公室或公司是常见的,其便利诸如内联网这样的企业范围的计算机网络,所有这些都可以连接到全球通信网络,例如,因特网。
[0098]当在LAN网络环境中使用时,计算机1102通过有线和/或无线通信网络接口或适配器1156连接到LANl 152。适配器1156能够便利到LANl 152的有线和/或无线通信,LANl 152还可以包括在其上放置的无线接入点,以用于与适配器1156的无线功能进行通信。
[0099]当在WAN网络环境中使用时,计算机1102能够包括调制解调器1158,或者其被连接到WANl 154上的通信服务器,或者其具有其它方式在WANl 154上建立通信,例如通过因特网。调制解调器1158能够是内部或者外部设备,并且能够是有线的和/或无线的设备,其经由输入设备接口 1142连接到系统总线1108。在联网环境下,结合计算机1102描述的程序模块或者其中的部分能够被存储在远程存储器/存储设备1150中。将被理解的是,所示出的网络连接是示例性的,并且能够使用其它方法在计算机之间建立通信链路。
[0100]计算机1102可用于与使用ΙΕΕΕ802系列标准的有线的和无线的设备或实体进行通信,例如在无线通信(例如,ΙΕΕΕ802.11空中调制技术)中部署的运转着的无线设备。这至少包括W1-Fi (或无线保真)、WiMax和Bluetooth?无线技术及其它技术。因此,通信能够是预定义结构的,像与常规的网络进行的那样,或者可以仅仅是至少两个设备之间的adhoc通信。W1-Fi网络使用被称作IEEE802.llx(a、b、g、n等)的无线技术,以提供安全、可靠、快速的无线连接。W1-Fi网络能够被用来使计算机互相连接,将计算机连接到因特网以及到有线网络(其使用与IEEE802.3相关的介质和功能)。
[0101]各种实施例的元件可以被实现为各种硬件元件、软件元件或两者的组合。硬件元件的示例可以包括设备、逻辑设备、部件、处理器、微处理器、电路、处理器电路、电路元件(例如,晶体管、电阻器、电容器、电感器,等等)、集成电路、专用集成电路(ASIC)、可编程逻辑设备(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器单元、逻辑门、寄存器、半导体设备、芯片、微芯片、芯片组,等等。软件元件的示例可以包括软件部件、程序、应用、计算机程序、应用程序、系统程序、软件开发程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接□、应用程序接□ (API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号、或它们的任意组合。确定使用硬件元件和/或软件元件来实现实施例是可以根据多种因素而改变的,所述因素例如是期望的计算速率、功率电平、热耐受性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其它涉及或性能限制,如给定的实现所要求的。
[0102]可以使用表述“某一实施例”或“实施例”及其派生词来描述一些实施例。这些术语意味着结合该实施例描述的特定的特征、结构或特性被包括在至少一个实施例中。在说明书的各处出现的短语“在一个实施例中”未必全部指的是相同的实施例。此外,可以使用表述“耦合的”和“连接的”及其派生词来描述一些实施例。这些术语未必互为同义词。例如,可以使用术语“连接的”和/或“耦合的”来描述一些实施例,以指示两个或更多元件彼此是直接物理或电气接触。然而,术语“耦合的”还可以表示两个或更多元件不是直接相互接触,但是仍丨H彼此协作或交互。
[0103]要强调的是,提供了该公开的摘要以便让读者快速确定该技术公开的本质。摘要的提交也伴随着这样的理解,即,其并不会被用于解释或限制权利要求的范围或意义。此夕卜,在前述的详细说明中,可以看出,为了简化该公开,各种特征被组合在一起放在单个实施例中。这种公开方式并不应被解释为反映了这样的目的,即,所要求保护的实施例需要比在每个权利要求中明确记载的特征更多的特征。相反,如下面的权利要求所反映的,有创造性的主题在于比单个公开的实施例中的全部特征更少的特征。因此,下面的权利要求被特此并入到详细说明中,每个权利要求独立自主地作为一个单独的实施例。在所附权利要求中,术语“包括(including)”和“其中(in which) ”被分别被用作相应的术语“包含(comprising) ”和“在其中(wherein) ”的简明英语同义词。此外,术语“第一”、“第二”、“第三”等仅仅被用作标号,而不是要对它们的对象强加数值上的要求。
[0104]以上所描述的包括所公开的架构的各种示例。当然,不可能描述部件和/或方法的每种可想到的组合,但是本领域的一个普通技术人员可以认识到,许多进一步的组合和排列都是可能的。因此,该新颖的架构是要包含落入所附权利要求的精神和范围之内的所有这样的替换、修改和变型。
【权利要求】
1.一种装置,包括: 处理器电路; 存储器单元,其耦合到所述处理器电路,用于存储用于多个虚拟机的专用存储器页; 动态链接器应用,其在所述处理器电路上运行,用于当软件程序的二进制版本在虚拟机上运行时,对所述二进制版本和相关的程序模块进行链接,所述动态链接器应用包括: 主预链接部件,其在所述处理器电路上运行,用于使用被分配给第一虚拟机的第一专用存储器页中的第一组虚拟存储器地址,针对所述第一虚拟机对用于所述软件程序的第一二进制版本的第一组程序模块进行重定位,并且在全局预链接布局映射中存储所述第一组程序模块的重定位信息,以供第二虚拟机使用。
2.根据权利要求1所述的装置,所述主预链接部件用于通过将在所述第一组程序模块中的程序模块中引用的每个模块地址改变成所述第一专用存储器页的第一组虚拟存储器地址中的虚拟存储器地址,对该程序模块进行重定位。
3.根据权利要求1所述的装置,所述重定位信息包括所述第一组程序模块中的程序模块的模块地址和所述第一专用存储器页的第一组虚拟存储器地址中的虚拟存储器地址之间的映射。
4.根据权利要求1所述的装置,所述动态链接器应用包括在所述处理器电路上运行的客户机预链接部件,其用于接收所述全局预链接布局映射,从所述全局预链接布局映射中取回所述重定位信息,并且利用所述重定位信息,使用被分配给所述第二虚拟机的第二专用存储器页中的第二组虚拟存储器地址,针对所述第二虚拟机对用于所述软件程序的第二二进制版本的第二组程序模块进行重定位,其中,所述第一专用存储器页的第一组虚拟存储器地址中的至少一个被重分配的虚拟存储器地址与所述第二专用存储器页的第二组虚拟存储器地址中的至少一个被重分配的虚拟存储器地址相匹配。
5.根据权利要求4所述的装置,所述客户机预链接部件用于通过将在所述第二组程序模块中的程序模块中引用的每个模块地址改变成所述第二专用存储器页的第二组虚拟存储器地址中的虚拟存储器地址,对该程序模块进行重定位。
6.根据权利要求1所述的装置,所述主预链接部件用于在对所述第一组程序模块进行重定位之前接收预链接信息,并且基于所述预链接信息对所述第一组程序模块进行重定位。
7.根据权利要求6所述的装置,所述预链接信息包括将被同时加载到所述第一虚拟机上的所述第一组程序模块中的程序模块的图。
8.根据权利要求6所述的装置,所述主预链接部件用于向所述图中的程序模块指派所述第一组虚拟存储器地址中的不同子组的虚拟存储器地址,以避免使用同一组地址加载多个程序模块。
9.根据权利要求6所述的装置,所述预链接信息包括将被同时加载到所述第一虚拟机上的所述第一组程序模块中的程序模块的第一图和将被同时加载到所述第二虚拟机上的第二组程序模块中的程序模块的第二图。
10.根据权利要求9所述的装置,所述主预链接部件用于向所述第一图中的第一组程序模块指派所述第一组虚拟存储器地址中的不同子组的虚拟存储器地址,并且向所述第二图中的第二组程序模块指派所述第二组虚拟存储器地址中的不同子组的虚拟存储器地址。
11.根据权利要求1所述的装置,包括在所述处理器电路上运行的存储器管理应用,其用于对在所述存储器单元中存储的一组专用存储器页执行存储器去重操作,以形成共享存储器页,所述一组专用存储器页包括被分配给所述第一虚拟机的所述第一专用存储器页和被分配给所述第二虚拟机的第二专用存储器页,所述第一专用存储器页和所述第二专用存储器页每个都在相同的虚拟地址上存储用于所述软件程序的至少一个程序模块。
12.根据权利要求1所述的装置,包括在所述处理器电路上运行的虚拟化应用,其用于管理所述多个虚拟机。
13.根据权利要求1所述的装置,包括耦合到所述处理器电路的数字显示器,所述数字显示器用于呈现在所述存储器单元中存储的信息。
14.一种计算机实现的方法,包括: 由处理器电路使用被分配给第一虚拟机的第一专用存储器页中的第一组虚拟存储器地址,针对所述第一虚拟机对用于软件程序的第一二进制版本的第一组程序模块进行重定位; 在全局预链接布局映射中存储所述第一组程序模块的重定位信息; 取回所述全局预链接布局映射;以及 基于所述全局预链接布局映射,使用被分配给第二虚拟机的第二专用存储器页中的第二组虚拟存储器地址,针对所述第二虚拟机对用于所述软件程序的第二二进制版本的第二组程序模块进行重定位。
15.根据权利要求14所述的计算机实现的方法,包括:通过将在所述第一组程序模块中的程序模块中引用的每个模块地址改变成所述第一专用存储器页的第一组虚拟存储器地址中的虚拟存储器地址,对该程序模块进行重定位。
16.根据权利要求14所述的计算机实现的方法,包括:通过将在所述第二组程序模块中的程序模块中引用的每个模块地址改变成所述第二专用存储器页的第二组虚拟存储器地址中的虚拟存储器地址,对该程序模块进行重定位,其中,所述第一专用存储器页的第一组虚拟存储器地址与所述第二专用存储器页的第二组虚拟存储器地址相匹配。
17.根据权利要求14所述的计算机实现的方法,包括: 从所述第一虚拟机接收预链接信息;以及 基于所述预链接信息,对所述第一组程序模块进行重定位。
18.根据权利要求14所述的计算机实现的方法,包括: 从所述第一虚拟机和所述第二虚拟机接收预链接信息;以及 基于所述预链接信息,对所述第一组程序模块进行重定位。
19.根据权利要求14所述的计算机实现的方法,包括: 基于预链接信息,向所述第一组程序模块中的不同的程序模块指派所述第一组虚拟存储器地址中的不同子组的虚拟存储器地址。
20.根据权利要求19所述的计算机实现的方法,包括: 取回被分配给所述第一虚拟机的第一专用存储器页和被分配给所述第二虚拟机的第二专用存储器页; 比较所述第一专用存储器页和所述第二专用存储器页,以查找重复内容;以及 当所述第一专用存储器页和所述第二专用存储器页具有重复内容时,合并所述第一专用存储器页和所述第二专用存储器页,以形成一个共享存储器页。
21.至少一种计算机可读存储介质,其包括指令,所述指令当被执行时使得系统: 使用被分配给第一虚拟机的第一专用存储器页中的第一组虚拟存储器地址,针对所述第一虚拟机对用于软件程序的第一二进制版本的第一组程序模块进行重定位; 在全局预链接布局映射中存储所述第一组程序模块的重定位信息;以及 基于所述全局预链接布局映射,使用被分配给第二虚拟机的第二专用存储器页中的第二组虚拟存储器地址,针对所述第二虚拟机对用于所述软件程序的第二二进制版本的第二组程序模块进行重定位。
22.根据权利要求21所述的计算机可读存储介质,包括当被执行时使得所述系统进行下述操作的指令: 通过将在所述第一组程序模块中的程序模块中引用的每个模块地址改变成所述第一专用存储器页的第一组虚拟存储器地址中的虚拟存储器地址,对所述第一组程序模块中的该程序模块进行重定位;以及 通过将在所述第二组程序模块中的程序模块中引用的每个模块地址改变成所述第二专用存储器页的第二组虚拟存储器地址中的虚拟存储器地址,对所述第二组程序模块中的该程序模块进行重定位,其中,所述第一专用存储器页的第一组虚拟存储器地址与所述第二专用存储器页的第二 组虚拟存储器地址相匹配。
23.根据权利要求21所述的计算机可读存储介质,包括当被执行时使得所述系统进行下述操作的指令: 从所述第一虚拟机接收预链接信息;以及 基于所述预链接信息,对所述第一组程序模块进行重定位。
24.根据权利要求21所述的计算机可读存储介质,包括当被执行时使得所述系统进行下述操作的指令: 从所述第一虚拟机和所述第二虚拟机接收预链接信息;以及 基于所述预链接信息,对所述第一组程序模块进行重定位。
25.根据权利要求21所述的计算机可读存储介质,包括当被执行时使得所述系统进行下述操作的指令: 合并被分配给所述第一虚拟机的第一专用存储器页和被分配给所述第二虚拟机的第二专用存储器页,以形成一个共享存储器页。
【文档编号】G06F12/08GK103975303SQ201180075337
【公开日】2014年8月6日 申请日期:2011年12月7日 优先权日:2011年12月7日
【发明者】A·范德芬 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1