允許處理器資源的虛擬化的制作方法
【專利說明】
【背景技術(shù)】
[0001]常規(guī)虛擬機監(jiān)視器(VMM)在計算系統(tǒng)上執(zhí)行,并向其他軟件呈現(xiàn)一個或多個虛擬機(VM)的抽象。每一個虛擬機都可以充當自包含平臺,運行由VMM主控的其自己的客戶機操作系統(tǒng)(OS)及其他軟件,統(tǒng)稱為客戶機軟件。客戶機軟件預(yù)期好像它在專用計算機上運行而并非在虛擬機上運行。即,客戶機軟件預(yù)期控制各種事件并有權(quán)訪問硬件資源。硬件資源可以包括處理器駐留資源,駐留在存儲器中的資源,以及駐留在底層硬件平臺上的資源。事件可以包括中斷、異常、平臺事件、某些指令的執(zhí)行等等。
[0002]在虛擬機環(huán)境中,VMM應(yīng)該能夠?qū)@些事件和硬件資源具有最終控制,以提供在虛擬機上運行的客戶機軟件的正確操作以及來自虛擬機上運行的客戶機軟件的保護及虛擬機之間的保護。為實現(xiàn)此,當客戶機軟件訪問受保護資源時或當發(fā)生其他事件(諸如中斷或異常)時,VMM通常接收控制。例如,當由VMM支持的虛擬機中的操作導(dǎo)致系統(tǒng)設(shè)備生成中斷時,當前正在運行的虛擬機被中斷,對處理器的控制被傳遞到VMM。然后,VMM接收中斷,并處理中斷本身,或?qū)⒅袛嗵峁┑胶线m的虛擬機。然而,在客戶機和VMM之間的此切換是對處理器周期的低效率使用。
[0003]附圖簡述
[0004]圖1是根據(jù)本發(fā)明的一實施例的系統(tǒng)的一部分的框圖。
[0005]圖2是根據(jù)本發(fā)明的一個實施例的方法的流程圖。
[0006]圖3是根據(jù)本發(fā)明的一個實施例的用于執(zhí)行APIC虛擬化微代碼操作的方法的流程圖。
[0007]圖4是根據(jù)本發(fā)明的一個實施例的虛擬機環(huán)境的一個實施例的框圖。
[0008]圖5是根據(jù)本發(fā)明的一個實施例的處理器核的框圖。
[0009]圖6是根據(jù)本發(fā)明的一個實施例的處理器的框圖。
[0010]圖7是包括多個核的處理器的一個實施例的框圖。
[0011]圖8是根據(jù)本發(fā)明的一個實施例的系統(tǒng)的框圖。
【具體實施方式】
[0012]在各實施例中,諸如多核處理器之類的處理器的一個或多個資源可以使用如此處所描述的控制結(jié)構(gòu)和邏輯來虛擬化。更具體而言,各實施例涉及諸如高級可編程中斷控制器(APIC)之類的存儲器映射的處理器資源的虛擬化。一般而言,APIC是處理器的硬件資源,諸如微控制器或從各種代理(處理器內(nèi)部和外部的)接收傳入的中斷,并按優(yōu)先級處理以及選擇用于處理中斷的合適的資源(諸如處理器的一個或多個核)的邏輯。
[0013]通過使用本發(fā)明的各實施例,此APIC可以被虛擬化,以便多個虛擬代理,例如,在處理器上執(zhí)行的單個客戶機,可以以時間切片方式訪問APIC。
[0014]如下面所進一步描述的,為實現(xiàn)APIC虛擬化,多個地址可以被存儲到虛擬機的控制結(jié)構(gòu)中,此處被稱為虛擬機控制結(jié)構(gòu)(VMCS),它可以被提供用于在處理器上運行的每一個虛擬機,并可以存儲在系統(tǒng)存儲器中。即,這些地址可以包括物理訪問頁面地址和虛擬訪問頁面地址。物理訪問頁面地址是客戶機OS向其執(zhí)行輸入/輸出(1)操作的物理地址。在虛擬化APIC的示例中,這是客戶機向其執(zhí)行存儲器映射的1操作的地址。虛擬訪問頁面地址是存儲器中的存儲了虛擬化設(shè)備的狀態(tài)的頁面的地址。在虛擬化APIC的示例中,此頁面存儲虛擬APIC的狀態(tài)。具體而言,在虛擬化APIC的示例中,物理訪問頁面可以對應(yīng)于APIC訪問頁面,虛擬訪問頁面可以對應(yīng)于虛擬APIC頁面。然而,更一般而言,這些地址可以是用于設(shè)備訪問頁面和虛擬設(shè)備頁面的。對此APIC訪問頁面內(nèi)的有效位置的客戶機訪問可以通過將這樣的訪問重新映射到虛擬APIC頁面來仿真。如此,寫入訪問將數(shù)據(jù)存儲在虛擬APIC頁面內(nèi)的對應(yīng)的偏移處,加載訪問將來自虛擬APIC頁面中的對應(yīng)的偏移處的數(shù)據(jù)返回到請求者。對APIC訪問頁面內(nèi)的無效位置的訪問會導(dǎo)致從虛擬機退出,以便虛擬機監(jiān)視器或其他主管軟件可以處理該狀況。
[0015]為有效率地執(zhí)行這樣的操作,各實施例可以提供對處理器的組合的硬件控制的和微代碼控制的機制。更具體而言,當檢測到對APIC訪問頁面的訪問時,在某些情況下,可以調(diào)用此微代碼。一般而言,此微代碼可以驗證訪問的各種屬性是否有效,如果是,則在對硬件編程以將APIC訪問頁面重新映射到虛擬APIC頁面內(nèi)的偏移之后,重新啟動指令執(zhí)行,以便在接下來對APIC訪問頁面訪問時進行有效率的訪問。
[0016]另外,各實施例還進一步提供可以代替微代碼輔助使用的硬件,以維護正確操作,甚至在指令緩存中不包括指令的情況下,其中,可能會由于從重新映射后變化的指令緩存獲取指令而發(fā)生不正確的操作。如此,各實施例可以組合虛擬化硬件和微代碼輔助機制,以甚至在指令緩存中不保證包括指令的情況下確保正確操作。
[0017]在各實施例中,處理器的存儲器集群內(nèi)的訪問邏輯可以使用來自根據(jù)本發(fā)明的一個實施例的控制寄存器的信息,提供APIC訪問頁面上的可編程偏移的匹配。當客戶機被進入時(例如,通過VMLAUNCH或VMRESUME指令),微代碼可以利用偏移將此控制寄存器的頁面地址字段中的第一地址字段(例如,EMULATED_REG_OFFSET字段)編程到APIC訪問頁面內(nèi)的預(yù)定的偏移值(例如,OxSOH)。另外,作為默認,控制寄存器可以被編程為通過存儲在許可字段(例如,EMULATE_READ和EMULATE_WRITE字段)中的第一和第二許可指示符提供讀和寫訪問的仿真。在VM條目上,APIC訪問頁面地址和vAPIC頁面地址被從VMCS讀出,并寫入到這些控制寄存器中。
[0018]然后,在檢測到對APIC訪問頁面的訪問時,此訪問請求的地址可以被重新映射到vAPIC頁面中的對應(yīng)的偏移,例如,對應(yīng)于存儲在控制寄存器中的地址(S卩,可以在進入中客戶機時,從VMCS中獲取的vAPIC頁面地址)。
[0019]然后,存儲器集群按如下方式針對在控制寄存器中編程的那些驗證訪問的許可:如果訪問是加載,并且訪問地址的比特11:0匹配控制寄存器內(nèi)的EMULATED_REG_OFFSET值,EMULATE_READ指示符被編程為置位(例如,邏輯I),則訪問被允許;而如果訪問是存儲,并且訪問地址的比特11:0匹配EMULATES_REG_OFFSET值,EMULATE_WRITE指示符被編程為1,則訪問被允許。當訪問被允許時,存儲器集群重新映射加載或存儲的地址,以便它對虛擬APIC頁面被執(zhí)行。
[0020]如果不滿足這些條件(訪問不指向由微代碼編程的偏移,訪問是加載,EMULATE,READ是0,或訪問是存儲,EMULATE_WRITE是O),則硬件可以調(diào)用微代碼輔助。硬件還向微代碼輔助提供訪問的細節(jié),例如,偏移、大小和類型(讀/寫)。
[0021]在此微代碼輔助中,可以評估訪問的偏移、大小和類型(加載或存儲)以判斷訪問是否將指向有效位置。如果是,則微代碼可以將合適的值(例如,關(guān)于許可和APIC訪問頁面偏移)編程到控制寄存器并重新啟動指令。
[0022]如果重新啟動的指令與最初導(dǎo)致輔助的指令相同,則訪問現(xiàn)在將匹配存儲器集群,并將被仿真并重定向到vAPIC頁面。匹配為仿真允許的類型的此偏移的任何后續(xù)指令都將繼續(xù)被仿真,并重新映射,無需微代碼輔助。此行為允許重新映射在硬件中發(fā)生,無需對于最常訪問的偏移的微代碼輔助。
[0023]現(xiàn)在參考圖1,所示是根據(jù)本發(fā)明的實施例的系統(tǒng)的一部分的框圖。圖1所示出的系統(tǒng)的一部分詳述了軟件和硬件的各層之間的交互。具體而言,一個或多個客戶機操作系統(tǒng)(OS)可以在對應(yīng)的虛擬機I1tl-11n(—般地,VM或客戶機110)內(nèi)操作。當然,額外的軟件也可以在每一個VM(諸如各個客戶機軟件)內(nèi)執(zhí)行,例如,一個或多個用戶級別的應(yīng)用程序。
[0024]與這里的討論相關(guān),在客戶機IlOtl*執(zhí)行的客戶機OS可以表面上向存儲器結(jié)構(gòu)發(fā)出訪問請求。然而,由于虛擬化,代替直接與諸如硬件APIC130之類的底層硬件進行通信,相反可以對APIC訪問頁面1150進行訪問,APIC訪問頁面115。是虛擬機監(jiān)視器(VMM) 120內(nèi)的被映射到客戶機地址空間的有效物理地址。此訪問頁面可以是與給定客戶機相關(guān)聯(lián)的物理存儲器中的頁面。注意,可以有每個客戶機地提供的APIC訪問頁面。
[0025]此對APIC訪問頁面的訪問115又可以導(dǎo)致對VMM 120所使用的系統(tǒng)存儲器內(nèi)的虛擬APIC(vAPIC)頁面1220的訪問。即,取決于在此頁面內(nèi)訪問指向的偏移,VMM的訪問邏輯125 (此處也被稱為APIC虛擬化邏輯)可以判斷是否允許此訪問流向底層硬件APIC130 (可以是處理器的存儲器映射的硬件結(jié)構(gòu))。
[0026]為允許這樣的訪問發(fā)生,首先,可以判斷