用于預鏈接軟件以改善虛擬系統中的存儲器去重的技術的制作方法
【專利摘要】本文描述了用于對軟件進行預鏈接以改善虛擬系統中的存儲器去重的技術。一種裝置可以包括處理器電路、存儲器單元和動態鏈接器應用,其中,所述存儲器單元耦合到所述處理器電路,用于存儲用于多個虛擬機的專用存儲器頁,所述動態鏈接器應用在所述處理器電路上運行,用于當軟件程序的二進制版本在虛擬機上運行時,對該二進制版本和相關的程序模塊進行鏈接。所述動態鏈接器應用可以包括在所述處理器電路上運行的主預鏈接部件,其用于使用被分配給第一虛擬機的第一專用存儲器頁中的第一組虛擬存儲器地址,針對該第一虛擬機對用于該軟件程序的第一二進制版本的第一組程序模塊進行重定位,并且在全局預鏈接布局映射中存儲該第一組程序模塊的重定位信息,以供第二虛擬機使用。還描述并要求保護其它實施例。
【專利說明】用于預鏈接軟件以改善虛擬系統中的存儲器去重的技術
【背景技術】
[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·范德芬 申請人:英特爾公司