用于各個處理器的輔助中斷虛擬化的訪客中斷控制器的制造方法
【專利摘要】在一實施方式中,系統(tǒng)包括處理器、與該處理器耦合的第一中斷控制器和第二中斷控制器。該第一中斷控制器被配置為用信號通知處理器中斷以對接收第一中斷消息作出響應,該第一中斷消息傳送指向系統(tǒng)中的主機的第一中斷。第二中斷控制器被配置為用信號通知處理器中斷以對接收第二中斷消息作出響應,該第二中斷消息傳送指向訪客的第二中斷,該訪客由主機控制并且在處理器上可執(zhí)行。
【專利說明】用于各個處理器的輔助中斷虛擬化的訪客中斷控制器
本申請是申請?zhí)枮?01080009842.3、申請日為2010年I月26日、發(fā)明名稱為“用于各個處理器的輔助中斷虛擬化的訪客中斷控制器”的發(fā)明專利申請的分案申請。
【技術領域】
[0001 ] 本發(fā)明涉及處理器和虛擬化,尤其涉及至虛擬機訪客(guest)的傳送中斷。
【背景技術】
[0002]出于各種不同的目的,虛擬化已經(jīng)被應用在計算機系統(tǒng)中。例如,虛擬化可以被用來在“容器”中執(zhí)行特權(quán)軟件(privileged software)以防止特權(quán)軟件未經(jīng)控制虛擬機的虛擬機管理器(VMM)許可就直接存取和/或改變至少一些物理機狀態(tài)。這樣的容器能夠防止“有臭蟲的(buggy)”或惡意的軟件在物理機上產(chǎn)生問題。除此之外,利用虛擬化可以允許兩個或兩個以上的特權(quán)程序在同一個物理機上并發(fā)執(zhí)行。由于控制了對物理機的訪問,因此可以防止特權(quán)程序彼此干擾。特權(quán)程序可以包括操作系統(tǒng),也可以包括其他當其在硬件上執(zhí)行時能夠?qū)τ布崿F(xiàn)完全控制的軟件。在另一實施例中,可利用虛擬化以在不同于特權(quán)程序所預期的硬件上執(zhí)行該特權(quán)程序。
[0003]通常地,處理器或計算機系統(tǒng)的虛擬化可以包括提供一個或多個對虛擬機(上面提到的容器)進行存取的特權(quán)程序,且該特權(quán)程序能夠完全控制虛擬機,但是物理機的控制被VMM保留。上述虛擬機可以包括一個處理器(或多個處理器)、存儲器以及特權(quán)程序預期在虛擬機中找到并能在其上執(zhí)行特權(quán)程序的各種外圍設備。虛擬機的元件可由VMM分配給(至少臨時地分配給)虛擬機的硬件來實現(xiàn),和/或由軟件仿真來實現(xiàn)。每一個特權(quán)程序(以及某些情況下的相關軟件,諸如在操作系統(tǒng)上執(zhí)行的應用)此處可以被稱作訪客。虛擬化可以以軟件(例如上面提到的VMM)實現(xiàn),而不需要在其上執(zhí)行VMM及其虛擬機的物理機中的任何具體的硬件虛擬化支持。然而,如果提供一些硬件支持,那么虛擬化就可以簡化和/或達到更高的性能。
[0004]虛擬化所引發(fā)的一個問題是中斷傳送的等待時間(latency)。如上所述,外圍設備可以被虛擬機分配使用(來作為虛擬機中的虛擬外圍設備)。這樣的外圍設備能夠生成有待虛擬機中的軟件來處理的中斷。在非虛擬化環(huán)境中,中斷處理的等待時間相對較短。在虛擬化環(huán)境中,利用某種軟件機制,中斷通??杀籚MM攔截、處理并傳送給目標虛擬機。但是中斷處理的等待時間會顯著變長(例如,大約增加了 100倍)。
【發(fā)明內(nèi)容】
[0005]在一實施方式中,系統(tǒng)包括處理器、與該處理器耦合的第一中斷控制器和第二中斷控制器。該第一中斷控制器被配置為用信號通知處理器中斷以對接收第一中斷消息作出響應,該第一中斷消息傳送指向系統(tǒng)中的主機的第一中斷。第二中斷控制器被配置為用信號通知處理器中斷以對接收第二中斷消息作出響應,該第二中斷消息傳送指向訪客的第二中斷,該訪客由主機控制并且在處理器上可執(zhí)行?!緦@綀D】
【附圖說明】
[0006]下面參照附圖來詳細描述本發(fā)明,現(xiàn)在先簡要說明附圖。
[0007]圖1是實行虛擬化的計算機系統(tǒng)的一實施方式的方塊圖。
[0008]圖2是圖1所示的主機硬件的一實施方式的方塊圖。
[0009]圖3是說明被傳送給訪客的中斷的一實施方式的方塊圖。
[0010]圖4是說明訪客高級可編程中斷控制器(APIC)的一實施方式的方框圖。
[0011]圖5是說明訪客APIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)中的訪客APIC狀態(tài)條目(entry)的一實施方式的方塊圖。
[0012]圖6是說明圖2所示的訪客中斷管理器對接收指向訪客的中斷作出響應的一實施方式的操作流程圖。
[0013]圖7是說明訪客APIC對接收中斷消息作出響應的一實施方式的操作流程圖。
[0014]圖8是說明虛擬機監(jiān)視器將訪客APIC狀態(tài)由一個訪客改變?yōu)榱硪粋€訪客的一實施方式的操作流程圖。
[0015]圖9是說明在訪客APIC狀態(tài)條目中排列中斷狀態(tài)的一實施方式的方塊圖。
[0016]圖10是說明為中斷定位訪客APIC狀態(tài)條目的一實施方式的方塊圖。
[0017]圖11是說明為中斷定位訪客APIC狀態(tài)條目的另一實施方式的方塊圖。
[0018]圖12是說明為中斷定位訪客APIC狀態(tài)條目的又一實施方式的方塊圖。
[0019]圖13是說明為中斷定位訪客APIC狀態(tài)條目的再一實施方式的方塊圖。
[0020]圖14是圖1所示的主機硬件的另一實施方式的方塊圖。
[0021]圖15是存儲VMM —實施方式的計算機可存取存儲介質(zhì)的一實施方式的方塊圖。
[0022]本發(fā)明的【具體實施方式】通過附圖中的實施例示出并在本文中進行詳細描述,同時本發(fā)明允許種種修正和替代形式。但應該明白的是,此處的附圖及相關的詳細描述并不試圖將本發(fā)明限定在所公開的特定形式上,相反地,本發(fā)明應涵蓋由所附權(quán)利要求書所定義的所有落于本發(fā)明精神與范圍內(nèi)的修正、等同方式與替代形式。此處使用的標題僅用于組織目的而不意味著限制說明書的范圍。本申請中所使用的“可/可以”用來表示許可的意思(也就是具有可能性)而不是強制的意思(也就是必須)。同樣的,“包括/包含”意味著包括在其中,但不是僅限于包括在其中的內(nèi)容。
[0023]各種元件、電路或者其他組件可以被描述為“被配置為/用于(configured to)”執(zhí)行一個或多個任務。在這樣的上下文中,“被配置為/用于”是對通常意味著在操作過程中“具有電路系統(tǒng)”來執(zhí)行一個或多個任務的結(jié)構(gòu)的廣義描述。同樣地,上述元件/電路/組件可被配置為/用于執(zhí)行任務即使是在該元件/電路/組件當前未打開時。通常來說,符合“被配置為/用于”的結(jié)構(gòu)的電路系統(tǒng)可包括硬件電路來執(zhí)行所述操作。類似的,為了便于描述,各種元件/電路/組件可被描述為執(zhí)行一個或多個任務。這樣的描述應該被解釋為包括短語“被配置為/用于”。列舉被配置為/用于執(zhí)行一個或多個任務的元件/電路/組件并不特別意指使用35U.S.C.§ 112第6段中對元件/電路/組件的解釋。
【具體實施方式】
[0024]在一實施方式中,計算機系統(tǒng)包括至少一個主機中斷控制器和至少一個訪客中斷控制器。主機中斷控制器可管理由主機(例如,虛擬化環(huán)境中的虛擬機管理器(VMM))帶來的中斷。這樣的中斷可包括諸如從計算機系統(tǒng)中的未被分配給執(zhí)行于該系統(tǒng)上的訪客的設備而來的中斷、VMM不希望暴露給訪客的系統(tǒng)級中斷,等等。訪客中斷控制器可管理由訪客帶來的中斷。這樣的中斷可包括諸如由分配給訪客以提供訪客的虛擬機中的設備之功能性(functionality)的設備所分發(fā)的中斷。
[0025]該系統(tǒng)中的硬件可發(fā)送中斷給主機中斷控制器或訪客中斷控制器??蛇x地,中斷也可以被發(fā)送給上述兩個中斷控制器,并且其中一個中斷控制器可接收該中斷,具體由哪個接收基于該中斷是主機中斷還是訪客中斷。每一個中斷控制器都可與處理器耦合并且都可與處理器通信以傳送中斷。在一些實施方式中,提供訪客中斷控制器以傳送中斷到訪客可以使得訪客中斷的傳送具有與主機中斷大致相等的等待時間。
[0026]在一實施方式中,訪客中斷控制器可以是主機中斷控制器的復本(duplicate)。也就是說,訪客中斷控制器與主機中斷控制器可包含相同的硬件。在另一實施方式中,訪客中斷控制器可以僅重復(duplicate)—部分的主機中斷控制器。與主機中斷控制器不同的部分可以經(jīng)由VMM攔截及仿真被VMM虛擬化。
虛擬化概述
[0027]圖1示出了實行虛擬化的計算機系統(tǒng)5的一實施方式的方塊圖。在圖1的實施方式中,出現(xiàn)了多個訪客10A-10N。訪客IOA包括訪客操作系統(tǒng)(OS) 12和一個或多個運行在訪客操作系統(tǒng)上的應用14A-14N。訪客ION包括特權(quán)代碼16。訪客10A-10N由虛擬機管理器(VMM) 18來管理。VMM18和訪客10A-10N在主機硬件20上執(zhí)行,該主機硬件20可以包括包含于計算機系統(tǒng)5中的物理硬件。在一實施方式中,VMM18可保有一組虛擬機控制塊(VMCB) 22。每一個訪客10A-10N都可對應一個VMCB22。盡管圖1中VMCB22是作為VMM18的一部分來圖示的,但是所述VMCB22可被存儲在存儲器和/或非易失性介質(zhì)中,例如主機硬件20中的磁盤驅(qū)動器。
[0028]主機硬件20通常包括包含在計算機系統(tǒng)5中的所有硬件。在各種實施方式中,主機硬件20可以包括一個或多個處理器、存儲器、外圍設備以及其他用以耦接前述組件的電路。特別是,主機硬件20可包括一個或多個主機中斷控制器、一個或多個訪客中斷控制器和/或一個或多個訪客中斷管理器。例如,個人計算機(PC)式的系統(tǒng)可包含耦接處理器的北橋、存儲器以及使用高級圖形端口(AGP)接口的圖形設備。此外,北橋可耦接到諸如外設組件接口(PCI)總線的外設總線,各種外設組件可直接或間接地耦接至外設總線。該PC式系統(tǒng)也可以包括耦接至PCI總線的南橋,以提供傳統(tǒng)(legacy)功能性和/或耦接至傳統(tǒng)(legacy)硬件。在各種實施方式中,訪客中斷管理器可在北橋、南橋或者在上述接口之一上面的設備中實施。主機中斷控制器和訪客中斷控制器可實施于每一個處理器中,或者在一組處理器之間共享。在其他實施方式中,其他電路可用于連接各種硬件組件。例如,可使用超級傳輸(HT)鏈接來連接節(jié)點,每一個節(jié)點都可包括一個或多個處理器、主橋以及存儲控制器。每一個節(jié)點也可包括可以包含有訪客中斷管理器和/或主機中斷控制器及訪客中斷控制器的北橋。此外,主橋可包含訪客中斷管理器和/或主機中斷控制器及訪客中斷控制器。該主橋可被用來以菊花鏈(daisy chain)的形式經(jīng)由HT鏈接f禹接至外圍設備。任何期望的電路系統(tǒng)/主機硬件結(jié)構(gòu)均可被使用。
[0029]VMM18可用于為每一個訪客10A-10N提供虛擬化并且可以控制訪客10A-10N對主機硬件20的訪問。VMM18也可負責調(diào)度訪客10A-10N以在主機硬件20上執(zhí)行。VMM18可用于將主機硬件20中提供的硬件支持用于虛擬化。例如,處理器可為虛擬化提供硬件支持,包括用以攔截事件并將訪客退出到VMM18以進行處理的硬件。訪客中斷管理器和/或訪客中斷控制器也可以是配備來支持虛擬化的硬件。
[0030]在一些實施方式中,VMM18可以作為在主機硬件20上實施的并且為訪客10A-10N提供虛擬化的“薄(thin)”的獨立軟件程序來執(zhí)行。這樣的VMM實施方式有時可被稱為“管理程序(hypervisor)”。在其他實施方式中,VMM18可被集成到主機OS中或者執(zhí)行于主機OS上。在這樣的實施方式中,VMM18可依賴主機OS,包括該主機OS中的任何驅(qū)動器、由系統(tǒng)BIOS提供的平臺系統(tǒng)管理模式(SMM)代碼等等。因此,主機OS組件(以及諸如平臺SMM代碼的各種較低層級的組件)直接執(zhí)行于主機硬件20上且未被VMM18虛擬化。在一實施方式中,VMM18和主機OS (如果包括的話)可合起來稱為主機。通常來說,主機可包括在使用過程中直接控制主機硬件20的任何代碼。例如,主機可以是VMM18、結(jié)合主機OS的VMM18或者單單是主機OS (例如在非虛擬化環(huán)境中)。
[0031]在各種實施方式中,VMM18可支持全虛擬化、半虛擬化或者兩者都支持。另外,在一些實施方式中,VMM18可并發(fā)地執(zhí)行半虛擬化的訪客和全虛擬化的訪客。
[0032]全虛擬化時,訪客10A-10N不知道虛擬化正在發(fā)生。每一個訪客10A-10N可在其虛擬機中具有相鄰的零基(zero based)存儲器,并且VMM18可使用影子頁表或嵌套頁表來控制對主機物理地址空間的訪問。影子頁表可從訪客虛擬地址重新映射到主機物理地址(有效地將訪客10A-10N中的存儲器管理軟件所分配的訪客“物理地址”重新映射到主機物理地址),而嵌套頁表則可接收訪客物理地址作為輸入并映射到主機物理地址。通過對每一個訪客10A-10N使用影子頁表或嵌套頁表,VMM18可以確保訪客不會訪問主機硬件20中的其他訪客的物理存儲器。
[0033]半虛擬化時,訪客IOA-1ON可以至少部分地感知虛擬機。這樣的訪客IOA-1ON可與VMM18協(xié)商存儲頁面,因此可以不需要將訪客物理地址重新映射到主機物理地址。在半虛擬化的一實施方式中,可允許訪客10A-10N直接與主機硬件20中的外圍設備交互。在任何給定的時間,外圍設備可被訪客10A-10N中的一個或多個所“擁有”。例如,在一實施方式中,外圍設備可通過一個或多個當前擁有此外圍設備的訪客10A-10N被映射到保護域中。只有擁有外圍設備的訪客可直接與之交互。還可以有保護機制來防止保護域中的設備讀/寫分配給其他保護域中的訪客的頁面。
[0034]如前所述,VMM18可以為每一個訪客10A-10N保留一個VMCB22。所述VMCB22通常可包括存儲在由VMM18為相應的訪客10A-10N分配的存儲區(qū)域中的數(shù)據(jù)結(jié)構(gòu)。在一實施方式中,VMCB22可包含存儲頁,盡管其他實施方式可以利用更大或更小的存儲區(qū)域和/或在其他介質(zhì)上的存儲器(例如非易失性存儲器)。在一實施方式中,VMCB22可包括訪客的處理器狀態(tài),當調(diào)度該訪客來執(zhí)行時,該狀態(tài)可被載入主機硬件20的處理器中,而當該訪客退出時(要么由于其預定時間的結(jié)束,要么由于處理器檢測的用于退出訪客的一個或多個攔截),該狀態(tài)可被存回VMCB22。在一些實施方式中,僅一部分的處理器狀態(tài)經(jīng)由將控制轉(zhuǎn)移給對應于該VMCB22的訪客的指令(“虛擬機運行(VMRUN)”指令)進行載入,其他的期望狀態(tài)可在執(zhí)行該VMRUN指令前由VMM18載入。同樣地,在這樣的實施方式中,僅一部分的處理器狀態(tài)可在訪客退出時由該處理器存儲至VMCB22,且VMM18可在需要時負責存儲任何其他狀態(tài)。在其他實施方式中,VMCB22可以包括指向存儲處理器狀態(tài)的另一存儲區(qū)域的指針。另夕卜,在一實施方式中,可以定義兩種或兩種以上的退出機制。在一實施方式中,所存儲的狀態(tài)的數(shù)量以及載入狀態(tài)的位置可以根據(jù)所選擇的退出機制而變。
[0035]在一實施方式中,VMM18也可具有被分配來存儲對應于該VMM18的處理器狀態(tài)的存儲器的區(qū)域。當執(zhí)行VMRUN時,對應于所述VMM18的處理器狀態(tài)可被保存在該區(qū)域中。當訪客退出到VMM18時,該區(qū)域中的處理器狀態(tài)可重新從該區(qū)域載入以讓VMM18繼續(xù)執(zhí)行。例如,在一實施方式中,處理器可具備寄存器(例如模式特定寄存器(MSR))以存儲VMM18保存區(qū)的地址。
[0036]此外,該VMCB22可包括用以識別使能訪客的攔截事件的攔截配置,以及如果檢測到使能的攔截事件時用于退出訪客的機制。在一實施方式中,攔截配置可包括一組攔截指示,其中每一個攔截指示用來指示處理器支持的每一個攔截事件。攔截指示可指示處理器是否要攔截相應事件(或者,從另一角度來看,該攔截是否可用)。如本文中所使用的,如果該處理器退出訪客以處理事件,其中該事件應該發(fā)生在該訪客中,則該事件在該訪客內(nèi)被“攔截”。在一實施方式中,攔截配置可包括第二組指示以指示使用兩個退出機制中的哪一個。其他實施方式也可定義多于兩個的退出機制。在另一實施方式中,攔截配置可包括一組攔截指示,每個事件一個指示,指示第一退出機制是否應用于該事件;以及第二組攔截指示,每個事件一個指示,指示第二退出機制是否應用于該事件。
[0037]通常來說,退出機制可定義由處理器進行的退出訪客執(zhí)行的操作(一般是以重新啟動的方式),并且開始執(zhí)行其他代碼。在一實施方式中,退出機制可包括存儲少量的處理器狀態(tài)并為微程序(Minivisor)載入狀態(tài)。該微程序可在訪客物理地址空間內(nèi)執(zhí)行并執(zhí)行相對簡單的攔截處理。另一退出機制可退出至該VMM,保存大量的處理器狀態(tài)并載入VMM的處理器狀態(tài)。因此,攔截事件可根據(jù)該事件由不同的指令代碼來處理。此外,相對簡單的攔截處理可通過耗費較少時間執(zhí)行的“較輕權(quán)重(lighter weight)”退出機制來處理,在一些實施方式中這樣的處理能夠提高性能。在使用“較重權(quán)重(heavier weight)”機制以退出之后,可在該VMM中執(zhí)行較復雜的處理。因此,在本實施方式中,該VMM18可配置處理器去攔截那些VMM18不希望訪客10A-10N在內(nèi)部處理的事件,也可以配置處理器使用哪種退出機制。事件可包含指令(即,攔截指令而不是執(zhí)行該指令)、中斷、異常和/或在訪客執(zhí)行過程中可能發(fā)生的其他事件。
[0038]在一實施方式中,該VMCB22可進一步包括其他控制位,所述控制位可使得處理器在載入該VMCB22時執(zhí)行某些動作。例如,控制位可包括刷新(flush)處理器中的TLB的指示。其他控制位可為訪客指定其執(zhí)行的環(huán)境(例如,中斷處理模式,訪客的地址空間標識符,等等)。還有一些其他控制位可用來傳送描述訪客為何退出的退出碼,等等。
[0039]通常來說,一個“訪客”可包括任意一個或多個將被虛擬化以在計算機系統(tǒng)5中執(zhí)行的軟件程序。一個訪客可包括至少一些執(zhí)行在特權(quán)模式中的代碼,并且因此希望可以完全控制執(zhí)行該訪客的計算機系統(tǒng)。如前所述,訪客IOA是一個包含有訪客0S12的實施例。所述訪客0S12可以是任何OS,諸如微軟公司(Redmond, WA)的任何Windows OS、任何UNIX類型的操作系統(tǒng)(例如Linux)、IBM公司(Armonk,NY)的AIX、太陽微系統(tǒng)公司(Santa Clara,CA)的Solaris、惠普公司(Palo Alto, CA)的HP-UX,等等。訪客ION是包含有非操作系統(tǒng)特權(quán)代碼16的訪客實施例。[0040]需要注意的是字母“N”,當此處使用諸如ION的參考數(shù)字時,一般是指帶有參考數(shù)字的元件編號(例如,訪客10A-10N中的任何編號均包括一個訪客)。此外,使用字母“N”的不同參考數(shù)字(例如,ION和14N)并不意指不同的元件具有相同的數(shù)量(例如,訪客10A-10N的數(shù)量與應用14A-14N的數(shù)量不同),除非另有說明。
主機硬件
[0041]現(xiàn)在翻到圖2,該圖是說明主機硬件20的一實施方式的方塊圖。在所示的實施方式中,主機硬件20包括多個處理器30A-30B、各自的主機高級可編程中斷控制器(hAPIC)32A-32B、各自的訪客APIC (gAPIC) 34A-34B以及可選的附加gAPIC34C_34D、橋36 (其包括訪客中斷管理器38、輸入/輸出(I/O)存儲管理單元(IOMMU)40以及存儲器控制器42)、多個接口電路(IF)44A-44C、存儲器接口電路(MIF)46、可選的橋48 (其可包括10APIC50)、外圍設備52A-52B (其中一些可包含諸如所述10APIC54的10APIC)以及存儲器56。處理器30A-30B與橋36耦接并與圖2所示的各自的hAPIC32A_32B和gAPIC34A_34D耦接。該hAPIC32A-32B和gAPIC34A_34D與橋36耦接,該橋36與接口電路44A-44C和存儲器接口電路46耦接。該存儲器接口電路46與存儲器56耦接,接口電路44A與橋48耦接,橋48與外圍設備52A-52B耦接。
[0042]在所示的實施方式中,每一個處理器30A-30B具有相關的hAPIC32A_32B以及至少一個相關的gAPIC34A_34D。在一實施方式中,可根據(jù)由Intel公司(Santa Clara, CA)制定的APIC規(guī)范在主機硬件20中傳送中斷。在上述規(guī)范中,每一個處理器具有相關的能夠接收中斷的本地APIC (中斷都來自所述處理器自身、其他處理器、內(nèi)部APIC中斷源以及與外圍設備設備相關的10APIC)。本地APIC對未決的中斷按照優(yōu)先級進行排列,并且如果一個中斷的優(yōu)先級高于處理器中正在執(zhí)行的另一中斷的優(yōu)先級和/或該中斷的優(yōu)先級高于處理器當前任務的優(yōu)先級,則將該中斷傳送到處理器。
[0043]在圖2的實施方式中,hAPIC32A_32B可以是針對處理器的主機中斷的本地APIC(即,中斷由主機處理)并且gAPIC36A-36D可以是針對處理器的訪客中斷的本地APIC (BP,中斷由在各自的處理器30A-30B上處于活動狀態(tài)的訪客來執(zhí)行)。如果訪客當前正在處理器上執(zhí)行(例如,VMRUN指令已經(jīng)在對訪客的處理器上被執(zhí)行并且訪客退出還未發(fā)生),或者如果訪客已經(jīng)退出且VMM18正在執(zhí)行,但是期待該訪客再次在該處理器上被執(zhí)行,則該訪客在該處理器中是活動的。
[0044]當VMM18調(diào)度處理器30A-30B上的訪客時,VMM18可載入處理器30A-30B的gAPIC34A-34D及其對應于訪客的gAPIC狀態(tài)。尤其是,給定的訪客可以具有多個虛擬CPU (vCPU)。該VMM18可調(diào)度訪客的vCPU以在處理器30A-30B上執(zhí)行,并且可載入gAPIC34A-34D以及該訪客虛擬機中的vCPU的中斷狀態(tài)。此外,任何指向訪客(以及vCPU)的中斷都可由gAPIC34A-34D來捕獲,所述訪客在活動狀態(tài)時被信號通知中斷。如上述所述,gAPIC34A-34D可根據(jù)的APIC規(guī)范來中斷訪客。
[0045]給定處理器30A-30B的hAPIC32A_32B和gAPIC34A_34D可具有到處理器的任何接口。例如,應用在本地APIC和他們各自的處理器之間的接口可是任何接口。每一個APIC可用來獨立地用信號通知處理器中斷將要被傳送過來以供服務。如果處理器正在執(zhí)行訪客并且用信號通知了訪客中斷,處理器可用來中斷訪客代碼并且開始執(zhí)行訪客虛擬機中的正確的中斷句柄(handler)。這樣的話,在一實施方式中,傳送訪客中斷與傳送主機中斷可具有同樣的等待時間。如果所述處理器正在執(zhí)行訪客并且該hAPIC用信號通知了中斷,則處理器可用來退出訪客到VMM18以處理主機中斷。如果處理器未在執(zhí)行訪客,則由gAPIC用信號通知的中斷可被處理器屏蔽直到該訪客被再次執(zhí)行。如果處理器未在執(zhí)行訪客并且hAPIC用信號通知了中斷,則處理器可用于中斷主機執(zhí)行并且分行到該主機中斷句柄。
[0046]在一實施方式中,每一個處理器30A-30B可包括不止一個gAPIC34A_34D。每一個gAPIC34A-34D可存儲對應于不同訪客/VCPU的APIC狀態(tài)。在這樣的實施方式中,當用信號通知訪客中斷給處理器時,每一個gAPIC34A-34D可用來標識其所對應的訪客(或者處理器30A-30B可具有內(nèi)部寄存器用來標識當前被分配給每一個gAPIC34A-34D的訪客)。如果一個不同的訪客當前正在執(zhí)行,則處理器可屏蔽該訪客中斷,其與當VMM18未在執(zhí)行時屏蔽該訪客中斷相類似??蛇x地,當相應的訪客被調(diào)度時,每一個gAPIC34A-34D可以包括可被VMM18設置為活動狀態(tài)的主動指示,并且當相應的訪客處于活動狀態(tài)時,所述gAPIC34A-34D可用來僅通知自身的訪客中斷。隨著時間的推移,當多個訪客被調(diào)度以在處理器上執(zhí)行時,每一個處理器30A-30B包括多于一個的gAPIC34A-34可減少gAPIC狀態(tài)變化的數(shù)量。例如,如果每一個處理器30A-30B具有N個gAPIC34A-34D (其中N是大于O的整數(shù)),在gAPIC狀態(tài)需要為任何一個訪客保存之前,多達N個不同的訪客可被調(diào)度來執(zhí)行。在實現(xiàn)每一個處理器30A-30B具有多于一個的gAPIC34A_34D的一些實施方式中,該gAPIC34A-34D可包括附加狀態(tài)來確保該中斷消息可被正確地接受和/或記錄(log)。例如,該gAPIC34A-34D可包括“當前運行”的指示用來標識相應的虛擬機當前是否運行在相應的處理器30A-30B上(相對于因VMM的執(zhí)行而暫?;蛘哂诹硪惶摂M機正在執(zhí)行時的暫停)。如果當前運行標識表明該虛擬機正在運行,則gAPIC可接受該中斷消息。如果當前運行標識表明該虛擬機未在運行,則gAPIC可用信號通知不接受該中斷??蛇x地,gAPIC可包括附加指示用來標識該gAPIC是否用信號通知不接受中斷。在這樣的實施方式中,該gAPIC可用信號通知中斷,即使當前運行標識指出當前未運行,并且不接受(not-acc印ted)標識指示該gAPIC用信號通知不被接受的中斷。這樣的功能可用來檢測針對未運行訪客的中斷是否被接收,這可用來調(diào)度該中斷所指向的訪客。
[0047]gAPIC34A-34D可包括包含在hAPIC32A_32B中的至少部分硬件,也可包括其所有硬件(例如,可以是hAPIC32A-32B的復本)。除了 APIC狀態(tài)之外,gAPIC34A_34D還可用訪客標識符(ID)編程以確定gAPIC34A-34D被分配給哪一個訪客。如果所述訪客包括多個vCPU,那么物理APIC ID和邏輯APIC ID可標識該訪客內(nèi)部的vCPU。在一實施方式中,訪客ID可以與由10MMU40支持的外圍設備的域ID相同??蛇x地,訪客ID可以是被單獨管理的資源。在另一個例子中,VMM18可分配訪客ID給訪客并可確保gAPIC34A-34D針對每個訪客而進行恰當?shù)鼐幊?。vCPU和/或gAPIC和/或這兩者在此處可更簡潔地被稱為訪客中的中斷的目的地。目的地最終可以是為中斷服務的vCPU,但是由于gAPIC與相應的處理器相關并且也記錄中斷,因此相應的gAPIC也可被看作是目的地。
[0048]該gAPIC34A-34D和hAPIC32A_32B被耦接到橋36上以接收中斷??墒褂萌我獾慕涌趤韨魉椭袛嗟絞APIC34A-34D和hAPIC32A_32B。例如,可使用任意的為APIC中斷傳送而設置的接口。在一實施方式中,可使用與用來傳送其他操作給處理器30A-30B/從處理器30A-30B傳送其他操作(諸如由處理器30A-30B發(fā)起的存儲器讀/寫操作、緩存一致性維護的探測,等等)的相同的傳送機制來傳送中斷消息。從另一角度看,可將gAPIC34A-34D與hAPIC32A-32B的耦接與處理器30A-30B到橋36的耦接共享??蛇x地,處理器30A-30B可具有到橋36的獨立路徑,比如在gAPIC34A-34D和hAPIC32A_32B采用APIC “3線接口 ”時。中斷消息可以是在任意接口上識別正被傳送的中斷和中斷目的地的任意通信。例如,中斷可具有相關的中斷向量,且該中斷向量可以是中斷消息的一部分。中斷消息也可以包括訪客ID和目的地ID (例如,邏輯APIC ID或物理APIC ID)。
[0049]該hAPIC32A-32B可與本地APIC相同。例如,由于該hAPIC為主機中斷所使用,因此該hAPIC32A-32B不包括用于訪客識別的額外硬件??蛇x地,hAPIC32A_32B可包括額外的硬件但是該額外的硬件可被編程以表明該hAPIC32A-32B是用于主機中斷的。被橋36傳送到hAPIC32A-32B和gAPIC34A_34D的中斷消息可識別訪客中斷以及與之相對的主機中斷,并可包括訪客中斷的訪客ID (或者可使用預留的訪客ID,諸如零或全二進制以指示主機中斷)。hAPIC32A-32B可用于接受被標識為主機中斷的中斷(如果主機中斷的物理APIC ID或邏輯APIC ID與相應的hAPIC ID相匹配),并且gAPIC34A-34D可用于接受其各自訪客的訪客中斷(如果訪客ID相匹配,以及如果訪客中斷的物理APIC ID或者邏輯APIC ID與相應的gAPIC ID相匹配)。
[0050]當gAPIC34A_34D可為活動訪客管理中斷時,一些訪客可以是非活動的(或者可具有被訪客中斷指向的非活動的vCPU)。在一實施方式中,訪客中斷管理器38可用于為非活動的訪客維持訪客中斷狀態(tài)并確?;顒釉L客的gAPIC接收它們的中斷。
[0051]尤其是,在一實施方式中,訪客中斷管理器38可利用分布式中斷傳送方案,其中該訪客中斷管理器38可用于記錄橋36中所接收的每一個訪客中斷,也可用于傳送該訪客中斷到每一個gAPIC34A-34D。如果gAPIC34A_34D接受該中斷,那么訪客中斷所指向的訪客是活動的。如果沒有gAPIC34A-34D接受該中斷,那么該訪客中斷所指向的訪客是非活動的。
[0052]在所示的實施方式中,訪客中斷管理器38可用于為訪客維持gAPIC的狀態(tài),所述訪客被定義于系統(tǒng)5的存儲器56中的gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中。該gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58可包括在系統(tǒng)5中所定義的每一個gAPIC的gAPIC狀態(tài)條目(例如,該系統(tǒng)中每一個訪客10A-10N的每一個vCPU的一個條目)。如果gAPIC與系統(tǒng)中活動或非活動的訪客相關聯(lián)的話,則gAPIC可被定義在該系統(tǒng)中。據(jù)此,該訪客中斷管理器38可被配置為為中斷所指向的訪客/vCPU更新gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的gAPIC狀態(tài)以對接受訪客中斷作出響應。在一實施方式中,訪客中斷管理器38可用于更新gAPIC狀態(tài)而不管訪客是否是活動的。為了組播和廣播具有多于一個目標的中斷,訪客中斷管理器38可用于為每一個中斷目的地更新gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)中的gAPIC狀態(tài)??蛇x地,訪客中斷管理器38可被配置為為這些多目的地中斷而依賴VMM18。在這樣的實施方式中,訪客中斷管理器38可用于在VMM18可存取的存儲位置中記錄該中斷,且可用于用信號通知VMM18去處理該消息。
[0053]在一些實施方式中,該訪客中斷管理器38可用于直接定位gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的gAPIC狀態(tài)條目以響應訪客中斷消息中的訪客ID和/或其他信息。在其他實施方式中,為了提供gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的靈活性和/或為了節(jié)省存儲器空間,訪客中斷管理器38可被配置為采用gAPIC狀態(tài)映射表60來定位gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的gAPIC狀態(tài)條目。gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58和映射表60 (對某些實施方式)的不同實施方式被圖示于圖10-13中并在下面進行更為詳細的討論。據(jù)此,訪客中斷管理器38可用于通過gAPIC狀態(tài)映射表60來定位gAPIC狀態(tài)條目并且用于更新該gAPIC狀態(tài)條目以記錄該中斷以響應訪客中斷。
[0054]在一實施方式中,gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58可存儲gAPIC狀態(tài)的子集。該子集可以是被硬件20 (例如訪客中斷管理器38與10MMU40的聯(lián)合)追蹤的gAPIC狀態(tài)。更特別的是,該子集可以gAPIC狀態(tài)的一部分,其中當相應的訪客是非活動的時,該部分gAPIC狀態(tài)可隨之改變。例如,在一實施方式中,當相應的訪客是非活動的時,外圍設備52A-52B可用信號通知中斷,這將導致相應的中斷請求被gAPIC捕獲。該中斷請求可在gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中被追蹤。其他gAPIC狀態(tài)可通過處理器追蹤服務中的中斷、處理器的任務優(yōu)先級,等等。只有當訪客處于活動狀態(tài)時,這些值才可以改變。在一實施方式中,當訪客處于非活動狀態(tài)時不可改變的gAPIC狀態(tài)可由VMM18追蹤,其利用在圖2中顯示為VMM管理gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)68的一個或多個其他數(shù)據(jù)結(jié)構(gòu)來進行追蹤。在該系統(tǒng)中,VMM18可在VMM管理的狀態(tài)68和作為部分的激活訪客與關閉訪客的gAPIC34A-34D之間傳送狀態(tài)。
[0055]雖然gAPIC狀態(tài)映射表60和gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58在所示的實施方式中都顯示為存儲在存儲器56中,但其中之一者或兩者的部分可被訪客中斷管理器38和/或橋36可存取的緩存存儲起來。此外或可替換的,一個或多個gAPIC狀態(tài)條目的專用存儲器可被實現(xiàn)在橋36中。該專用存儲器可存儲一組可被快速轉(zhuǎn)入和轉(zhuǎn)出gAPIC34A-34D的“快速”gAPIC狀態(tài)。而其他的gAPIC狀態(tài)則可在存儲器56中以較慢的速度來存取。在一些實施方式中,該快速gAPIC狀態(tài)開關可由訪客中斷管理器38操縱而較慢的gAPIC狀態(tài)開關則可由VMM18操縱。
[0056]在APIC中斷機制中,每一個處理器(通過其本地APIC)可具有物理APIC ID和邏輯APIC ID。物理APIC ID存儲在APIC ID寄存器中。物理APIC ID在一對一的基礎上與由物理傳送模式中斷所指示的物理APIC ID相匹配。邏輯APIC ID作為邏輯目的地寄存器被存儲在本地APIC中。邏輯APIC ID具有簇ID和本地APIC ID,其中本地APIC ID是獨熱(one-hot)向量。邏輯傳送模式中斷可包括獨熱向量中的任意置位(set bit)以傳送中斷到簇中的一個或多個本地APIC。據(jù)此,邏輯APIC ID的匹配可包括簇ID的比較以及本地APID ID向量中的置位的檢測,該置位與本地APIC中獨熱向量的置位具有相同的位置。從另一個角度看,在邏輯傳送模式中斷中的本地APIC ID向量可與本地APIC的本地APIC ID向量進行邏輯與操作(AND),并且如果結(jié)果為非零且簇ID能夠匹配,則本地APIC是邏輯中斷的目標。此處的邏輯APIC ID可更簡潔地被稱為邏輯ID,類似的,物理APIC ID可更簡潔的被稱為物理ID。與中斷相關的給定ID (物理的或邏輯的)可被稱為中斷的目的地ID。中斷的相應傳送模式可識別中斷的目的地ID。
[0057]gAPIC34A_34D也可以支持物理傳送和邏輯傳送兩種模式。除了根據(jù)上面突顯的模式在中斷消息中匹配APIC ID之外,gAPIC34A-34D可將中斷消息中的訪客ID匹配到gAPIC中的訪客ID。
[0058]10MMU40可用于對I/O啟動的存儲操作(例如,源自外圍設備52A-52B的存儲器讀/寫操作或由代表外圍設備52A-52B的DMA控制器執(zhí)行的存儲器讀/寫操作)執(zhí)行虛擬地址至物理地址的映射。作為轉(zhuǎn)換操作的一部分,10MMU40可用于存取設備表62且可選地存取訪問中斷重定向表64。設備表62可包括對每一個外圍設備52A-52B的條目(并可包括一個外圍設備的多個條目,該條目包括與外圍設備耦接的外圍設備接口上的不止一個標識符)。設備表62可包括用于轉(zhuǎn)換存儲器讀/寫操作(未圖示)的存儲地址的指向I/O頁表的頁表指針并可包括指向中斷重定向表64的指針。在一些實施方式中,設備表62可以為分配給訪客的外圍設備存儲訪客ID。在一實施方式中,訪客ID可以與10MMU40中用于設備訪問保護的域ID相同??蛇x地,訪客ID可被獨立分配。在一實施方式中,設備表62也可存儲指向gAPIC狀態(tài)映射表60 (如果使用的話)的指針,或者指向gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58的指針。在另一實施方式中,訪客ID和/或指向表60/數(shù)據(jù)結(jié)構(gòu)58的指針可被存儲在中斷重定向表64中。該中斷重定向表64可用于將中斷從其初始的目的地和/或中斷向量重定向到新的目的地和/或中斷向量。為了簡化本發(fā)明的其他部分,將采用這樣一種實施方式,在此實施方式中,訪客ID是來自設備表62的域ID且指向映射表60和/或gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58的指針被存儲在設備表62中。然而,本發(fā)明剩余部分的實施方式通??砂凑丈鲜鲇懻摰膬?nèi)容進行修正。
[0059]在其他實施方式中,可以不提供訪客中斷管理器38。例如,可能存在這樣的配置,如果在訪客從一個處理器30A-30B轉(zhuǎn)移到另一個時由VMM18更新設備表62和/或中斷重定向表64,以及如果處理器30A-30B專用于代表非活動訪客接收中斷(以按期望更新存儲器56中的gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58和/或為中斷服務),則不需要訪客中斷管理器38。
[0060]存儲器控制器42可以被耦合以接收由處理器30A-30B發(fā)出的存儲操作(例如,提取指令、存取載入/存儲數(shù)據(jù)、存取用于轉(zhuǎn)換的處理器頁表,等等)、來自訪客中斷管理器38的存儲操作(例如,讀取/更新gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58和/或gAPIC狀態(tài)映射表60)、來自10MMU40的存儲操作(例如,訪問I/O頁表、設備表62以及中斷重定向表64),以及接收來自接口電路44A-44C的存儲操作(在某些實施方式中)。存儲器控制器42可用于對存儲操作進行排序并與存儲器56通信以執(zhí)行存儲器操作。存儲器接口電路46可執(zhí)行到存儲器56的物理層訪問。
[0061]存儲器56可包括任何類型的存儲器。例如,存儲器56可包括諸如同步DRAM(SDRAM)的動態(tài)隨機存取存儲器(DRAM)以及雙倍數(shù)據(jù)速率(DDR、DDR2、DDR3等)SDRAM、RAMBUS DRAM、靜態(tài)RAM,等等。存儲器56可包括一個或多個包含有多存儲芯片的存儲模土夾,諸如單列直插式存儲模塊(SMM)、雙列直插式存儲模塊(DMM),等等。
[0062]在此實施方式中,除了包括訪客中斷管理器38、10MMU40以及存儲器控制器42之夕卜,橋36也可包括其他通信功能以在處理器30A-30B、hAPIC32A-32B、gAPIC34A-34D以及耦接到接口電路44A-44D的設備之間進行通信。例如,在所示的實施方式中,另一個橋48可被耦接到接口電路44A上,并可用于在接口電路44A所采用的協(xié)議和外圍設備52A-52B所采用的協(xié)議之間進行橋通信。在一實施方式中,接口電路44A-44C可實現(xiàn)諸如上面提到的HT接口,并且橋48可從HT橋接到諸如PCI Express (PCIe)接口的另一接口。在這一實施方式中,外圍設備52A-52B可以是PCIe設備。橋48也可用于橋接到其他接口,或另一個橋可被耦合到橋48以橋接到其他接口??墒褂萌魏我粋€或多個外圍設備接口。此外,外圍設備52A-52B可包括被配置為直接耦接到HT接口的HT外圍設備。這種外圍設備可以不需要橋48。
[0063]在一實施方式中,橋48和/或一個或多個外圍設備52A-52B可包括IOAPIC (圖2中的50和54)。IOAPIC可負責接收來自外圍設備的中斷請求并形成中斷消息以傳送中斷請求給hAPIC32A-32B和中斷管理器38 (用于到gAPIC34A_34D的傳送和/或記錄在存儲器中的gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中)。
[0064]如上所述,在一實施方式中,接口電路44A-44C可用于HT接口上的通信。該接口電路44A-44C可用于通過HT與外圍設備/橋進行通信。此外,在一些實施方式中,接口電路44A-44C可用于耦接到其他具有處理器、hAPIC和gAPIC等的節(jié)點。在這樣的實施方式中,橋36可包括除了之前描述的電路系統(tǒng)之外的一致性管理電路系統(tǒng)(coherence managementcircuitry)。
[0065]處理器30A-30B可實施任意指令集架構(gòu),并可用于執(zhí)行定義在指令集架構(gòu)中的指令。處理器30A-30B可包括任意微架構(gòu),諸如超流水線架構(gòu)、超標量架構(gòu)和/或二者的結(jié)合;按順序或不按順序的執(zhí)行;預測的執(zhí)行;等等。根據(jù)需要,處理器30A-30B可以實施或不實施微編碼技術。
[0066]外圍設備52A-52B可包括任意類型的外圍設備。外圍設備52A-52B可包括存儲設備,比如磁盤驅(qū)動器、固態(tài)磁盤驅(qū)動器、光盤驅(qū)動器或者諸如閃存之類的非易失性存儲設備,等等。外圍設備52A-52B可包括I/O設備,比如用戶I/O設備(鍵盤、鼠標、顯示器、語音輸入等等)、網(wǎng)絡設備、諸如通用串行總線(USB)或火線的外部接口設備,等等。
[0067]在所示的實施方式中,處理器30A-30B、橋 36、hAPIC32A_32B、gAPIC34A_34D、接口電路44A-44C以及存儲器接口電路46可被集成在一個單獨的半導體基底上以形成集成電路66。其他實施方式可根據(jù)需要設置不同數(shù)量的集成電路系統(tǒng)和離散電路系統(tǒng)。值得注意的是,盡管圖2示出了不同數(shù)量的組件,諸如處理器、hAPIC、gAPIC、接口電路、外圍設備、橋,等等,但其他實施方式也可根據(jù)需要設置任何數(shù)量的一個或多個上述每一個組件。
[0068]在其他實施方式中,10MMU40的位置和訪客中斷管理器38的位置是可變的。例如,其中一個或所有兩個可位于橋48中、外圍設備52A-52B中、稱接到該橋的另一個橋中,
坐坐寸寸ο
[0069]在所示的實施方式中,每一個gAPIC34A-34D和每一個hAPIC32A_32B與圖2所示的特定處理器30A-30B相關聯(lián)。這樣,給定的中斷控制器可專用于該實施方式中相應的處理器30A-30B。更具體地,在圖2中,hAPIC32A、gAPIC34A和34C專用于處理器30A,hAPIC32B、gAPIC34B和34D專用于處理器30B。中斷控制器可以用任何方式將中斷用信號通知給其相應的處理器。通常來說,該通知可表示需要中斷。該通知可包括中斷向量,或者中斷向量可被中斷傳送之后執(zhí)行的軟件讀取。在一實施方式中,傳送中斷可以指用信號通知處理器以及處理器接受該中斷。為中斷服務可以指執(zhí)行與中斷向量相關的中斷服務程序以執(zhí)行中斷設備所需要的操作。
[0070]現(xiàn)在翻到圖3,圖3所示為在一實施方式中,中斷從外圍設備進到gAPIC的方塊圖。類似于圖3,來自其他處理器的中斷(內(nèi)處理利器中斷(IPI))可也被傳送到訪客中斷管理器38且可從那一點向前進行處理??蛇x地,從初始化IPI的處理器接收IPI的gAPIC可傳送更新到訪客中斷管理器38 (來更新接收訪客的gAPIC狀態(tài),如果訪客是非活動的)并且也可傳送IPI (包括訪客ID)到其他gAPIC。
[0071]在所示的實施方式中,外圍設備52A確定需要中斷。外圍設備52A中的10APIC54(參見圖2)可生成響應外圍設備52A的操作的中斷消息。特別是,10APIC54可生成對應于預期中斷(例如,基于外圍設備52A所需要的服務、用信號通知中斷的特定功能(如果外圍設備52A執(zhí)行多種功能),等等)的中斷向量。中斷向量是中斷通信的一部分,且可通過軟件被用于識別中斷源、區(qū)分中斷的優(yōu)先順序,等等。在一些實施例中,中斷向量可由10MMU40重新映射,這樣該中斷向量在圖3中可標示為“初始向量”。外圍設備52A可將中斷消息傳送到10MMU40A (箭頭A)。在此實施方式中,中斷可按照消息通知中斷(Message-SignalledInterrupt,MSI)的方式來傳送,例如在PCIe規(guī)范中所定義的。在其他實施方式中,中斷可以以任意的期望方式來傳送。通常來說,傳送設備可識別中斷、中斷的傳送模式(例如,邏輯的或物理的)以及中斷的目的地ID (DestID)0
[0072]10MMU40可接收MSI。MSI包括外圍設備的標識符。例如,實施PCI編程模型的接口可利用總線號以及在該總線上的設備號識別每一個設備(允許多個PCI接口以分層形式和/或并行形式存在于系統(tǒng)中)。設備可具有多種“功能”,其可以是物理設備上的獨立虛擬設備,或者是設備上的操作分區(qū)。標識符還可包括功能號。這樣,在此實施方式中,標識符可被稱為總線設備功能(BDF)。10MMU40可利用BDF來索引設備表62 (箭頭B),并可識別對應于外圍設備52A的設備表條目。在一些實施方式中,該條目可包括訪客ID和指向gAPIC狀態(tài)映射表60或gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58的指針(箭頭C)。在此實施方式中,設備表條目也可包括中斷重定向表指針(IRTP),該指針可確定對應于設備的中斷重定向表64 (箭頭Cl)。中斷重定向表64可被初始中斷向量來索引,并可為該中斷提供輸出向量和目的地ID (DestID,例如,邏輯 APIC ID 或物理 APIC ID)(箭頭 C2)。
[0073]在圖3所示的實施例中,MSI被重新映射到向量42和訪客ID99。該重新映射可包括添加該訪客ID,在使用中斷重定向表64的情況下,該向量也可被改變。否則,在該中斷消息中提供來自MSI的初始中斷向量。描繪了使用中斷向量42和訪客ID99的特定實施例的圖3中的要點在圖中被括在方括號中,例如[]。
[0074]10MMU40可傳送包括訪客ID (例如,在這個實施例中是99)的中斷消息到訪客中斷管理器38。中斷消息也可包括中斷向量(例如,在這個實施例中是42)和目的地ID。中斷消息還可包括指向gAPIC狀態(tài)映射表60或gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58的指針(箭頭D)。
[0075]在具有gAPIC狀態(tài)映射表60的實施方式中,訪客中斷管理器38可利用諸如訪客ID和/或目的地ID的指針以及潛在的其他信息來定位gAPIC狀態(tài)映射表60中的gAPIC狀態(tài)指針(箭頭E1,以及如箭頭E2所示的到訪客中斷管理器38的返回指針)。gAPIC狀態(tài)指針可確定gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的gAPIC狀態(tài)條目,并且訪客中斷管理器38可利用該gAPIC狀態(tài)指針來執(zhí)行gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的gAPIC狀態(tài)更新(箭頭E)。在這個實施例中,gAPIC狀態(tài)更新可設定對應于向量42的中斷請求寄存器中的位。中斷請求寄存器(IRR)參照圖4在下面進行更為詳細的描述。
[0076]在一實施方式中,gAPIC狀態(tài)58的更新是原子的。例如,訪客中斷管理器38可生成原子或運算(OR)事務,該事務原子地將正在設置的中斷請求位或運算到gAPIC狀態(tài)條目中的中斷請求寄存器的當前狀態(tài)中。一個原子操作可以是作為一個單位來有效執(zhí)行的操作,即使該操作由多個步驟完成。試圖訪問被原子地更新的位置的觀察者(observer)要么接收原子更新之前的值,要么接收更新之后的值,但不會接收中間的值。試圖更新被原子地更新的位置的觀察者要么在該原子操作之前執(zhí)行其更新,要么在之后執(zhí)行其更新,但不會在操作過程中進行更新。盡管此實施方式可執(zhí)行原子或運算,其他實施方式也可執(zhí)行更加通用的原子更新操作。例如,原子更新可包括識別不會被修改的目標的位的與屏蔽(AND mask),以及識別會被進行或運算的位的或屏蔽(OR mask)。其他實施方式也是可能的。例如,可使用比較和交換實現(xiàn),其中來自存儲位置的初始值被讀取并且執(zhí)行比較和交換操作以用經(jīng)過或運算得到的新值替代初始值。如果比較操作失敗,該過程可被重復(讀取新的初始值,然后執(zhí)行比較和交換)。如果需要,可使用后退和/或暫停機制來退出循環(huán)。
[0077]訪客中斷管理器38也可向gAPIC34A_34D廣播包括中斷向量、訪客ID和目的地ID的中斷消息(箭頭F)。gAPIC中的一個(圖3中的gAPIC34A)可具有訪客ID99以及與目的地ID相匹配的邏輯APIC ID或物理APIC ID,因此gAPIC34A可用確認信號(Ack)來響應中斷消息,該確認信號表示gAPIC34A已經(jīng)接受該中斷消息(箭頭G)。在該實施例中,gAPIC34A也可更新其中斷請求寄存器以設置對應于向量42的位。如果該中斷的優(yōu)先級比任何當前正在進行的中斷(如果有的話)和/或處理器的任務的優(yōu)先級都要高的話,則gAPIC34A也可將該中斷用信號通知處理器30A。其他gAPIC34B-34D也可響應廣播的中斷消息,但是由于它們不是該中斷的目標,因此它們不會發(fā)出確認接受的信號(箭頭H)。對邏輯中斷而言,如果其確定有多個目標的話,則可能有不止一個確認信號。
[0078]使用上述機制,訪客中斷管理器38不需要知道哪一個gAPIC34A_34D被分配給了哪一個訪客。其他實施方式也是可預期的,其中訪客中斷管理器38追蹤哪個gAPIC34A-34D被分配給了哪個訪客以及哪個訪客僅傳送中斷到目標gAPIC。訪客中斷管理器38可自動追蹤gAPIC,或者每次一個gAPIC被重新分配給另一個訪客時由VMM18進行編程。在這樣的實施方式中,訪客中斷管理器38可僅傳送中斷消息到目標gAPIC。
[0079]到hAPIC32A_32B的中斷的傳送可按照常用的APIC方式進行。特別地,在一實施方式中,中斷可能未由訪客中斷管理器38操作在其上,但在其他方面可與圖3中的操作相同。
[0080]需要注意的是,盡管訪客中斷管理器38在此處圖示為一個方塊,但實現(xiàn)訪客中斷管理器38的電路系統(tǒng)可以是分布式的。例如,在一實施方式中,接收指針、可選擇地處理gAPIC狀態(tài)映射表60并生成gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58的更新的那部分訪客中斷管理器38可被包括在10MMU40中,因此該10MMU40為gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58和被傳送到gAPIC34A_34D的中斷消息傳送原子的或運算。訪客中斷管理器38在一個或多個物理位置中的任何實現(xiàn)方式均可采用。
[0081]現(xiàn)在翻到圖4,該圖示出了 gAPIC34A的一實施方式的方塊圖。其他的gAPIC34B-34D可以類似。在圖4的實施方式中,gAPIC34A包括中斷請求寄存器(IRR) 70、中斷服務寄存器(ISR) 72、觸發(fā)模式寄存器(TMR) 74、任務優(yōu)先級寄存器(TPR) 76、控制單元
78、物理ID寄存器80、邏輯ID寄存器82、訪客ID寄存器84以及其他可選的APIC狀態(tài)86??刂茊卧?8與IRR70、ISR72、TMR74、TPR76、物理ID寄存器80、邏輯ID寄存器82、訪客ID寄存器84和其他APIC狀態(tài)86相耦合。此外,控制單元78與訪客中斷管理器38耦合而通信以接收中斷,并與處理器接口相耦合以與處理器30A通信。
[0082]為了對從訪客中斷管理器38接收中斷消息作出響應,如果該中斷指向與gAPIC34A相應的訪客,則控制單元78可用于將該中斷寫入IRR70中。IRR中的中斷請求的位置與中斷向量相對應。IRR可追蹤“固定的(fixed)”中斷。其他中斷類型可包括不可屏蔽中斷(匪I)、系統(tǒng)管理中斷(SMI)、傳統(tǒng)外部中斷(extINT)等等。這些中斷可被作為其他APIC狀態(tài)86的一部分處理。
[0083]在一實施方式中,中斷消息也可為每一個中斷包括一個觸發(fā)模式(電平的或邊緣的)。TMR74可存儲哪一個觸發(fā)模式應用于該中斷的指示。例如,邊緣觸發(fā)中斷可由TMR74中的二進制O來表示而電平觸發(fā)中斷則可由二進制I來表示。在其他實施方式中,在gAPIC34A中僅支持邊緣觸發(fā)中斷,則可除去TMR74(及其在gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的復本))。在另一實施方式中,可重新使用TMR74以允許VMM18記錄虛擬的電平敏感中斷。VMM18可在TMR74中設置多個位以指示如下情況,如果處理器30A用信號通知中斷的結(jié)束以作相應的中斷向量,則處理器30A退出到該VMMl8。
[0084]對于固定中斷,gAPIC34A可用于對中斷請求以及服務中(in-service)中斷的優(yōu)先級進行排序以判斷中斷請求是否應被傳送給處理器。通常來說,如果最高優(yōu)先級中斷請求的優(yōu)先級高于服務中中斷的最高優(yōu)先級(其中如果處理器已中斷其軟件執(zhí)行來處理與一中斷對應的中斷句柄,則該中斷為服務中中斷),控制單元78可用于將所請求的中斷傳送給處理器30A。此外,TPR76可被軟件編程以建立處理器30A所接受的中斷的最低優(yōu)先級。如果最高優(yōu)先級中斷請求的優(yōu)先級高于服務中中斷的最高優(yōu)先級并且高于TPR76中所指明的優(yōu)先級,則控制單元78可用于傳送該最高優(yōu)先級中斷請求。
[0085]當處理器30A接收到該中斷時,該處理器可用中斷確認命令響應gAPIC34A??刂茊卧?8可用于從IRR70中移出最高優(yōu)先級中斷請求并且將該中斷作為服務中中斷記錄在ISR72中。相應于該ISR中的中斷的服務中指示的位置可對應于該中斷的中斷向量。處理器30A可執(zhí)行中斷服務程序來為該中斷服務。中斷服務程序可利用給gAPIC的結(jié)束中斷(EOI)命令來結(jié)束以用信號通知該中斷服務完成。控制單元78可用于從ISR72中移出該最高優(yōu)先級的服務中中斷以響應該EOI命令。
[0086]每一個IRR70、ISR72和T MR74都包括與gAPIC34A支持的每一個中斷向量相對應的位置。在所示的實施方式中,支持從O到255的向量。中斷向量號也可指示其與其他中斷的相對優(yōu)先級(例如,在其他實施方式中,較高向量號的優(yōu)先級高于較低向量號優(yōu)先級,反之亦然)。對每一個中斷向量而言,IRR70存儲的中斷請求位指示在該中斷向量處是否有中斷被請求。例如,該指示可以是指示當設置時有請求以及當清空時沒有請求的位。類似的,對每一個中斷向量而言,ISR72存儲的服務中(in-service)位為該中斷向量指示是否有中斷在服務中(例如,當設置時表示有服務中中斷,當清空時表示無服務中中斷)。對每一個中斷向量而言,TMR74存儲觸發(fā)模式。對每一個IRR70、ISR72和TMR74而言,寄存器中的位位置等同于與中斷相應的中斷向量號。
[0087]在所示的實施方式中,中斷被邏輯地分配到組中,這些組都被指定優(yōu)先級等級以確定未決的中斷請求是否被傳送給處理器。例如,將優(yōu)先級等級O分配給中斷向量O到15,將優(yōu)先級等級I分配給中斷向量16到31,等等,直到將優(yōu)先級等級15分配給中斷向量244到255。在此實施方式中,提高優(yōu)先級等級的號碼表示更高的優(yōu)先級等級。控制單元78可計算請求的優(yōu)先級等級,如果是最高優(yōu)先級等級,則IRR70中至少有一個中斷請求處于未決狀態(tài)??刂茊卧?8也可計算服務中的優(yōu)先級等級,如果是最高優(yōu)先級等級,則ISR72中至少有一個中斷被指示為在服務中。如果請求的優(yōu)先級等級超過了服務中的優(yōu)先級等級并且也超過了 TPR76中所表明的優(yōu)先級等級,則控制單元78可傳送該中斷。應該注意的是,盡管在所示的實施方式中256個中斷向量由16個優(yōu)先級等級組別來支持,然而在其他實施方式中也可以采用更多或更少的中斷向量和/或更多或更少的優(yōu)先級等級組別。
[0088]物理ID寄存器80和邏輯ID寄存器82可分別存儲分配給gAPIC34A的物理APICID和邏輯APIC ID。訪客ID寄存器84可存儲分配給gAPIC34A的訪客ID。據(jù)此,如果中斷的訪客ID與訪客ID寄存器84中的訪客ID相匹配,或者物理中斷中的APIC ID與物理ID寄存器80中的物理ID相匹配,亦或者邏輯中斷中的APIC ID與邏輯ID寄存器82中的邏輯ID相匹配,則控制單元78可用于接受來自訪客中斷管理器38的中斷。
[0089]其他APIC狀態(tài)86可包括內(nèi)部生成的中斷、計時器、本地向量表等等。在各種實施方式中,一些或所有的其他APIC狀態(tài)86可被包括在gAPIC34A中或通過到VMM18的攔截以及該狀態(tài)的VMM18仿真虛擬化。
[0090]除了不包含訪客ID寄存器外,hAPIC32A-32B可以與gAPIC34A類似。可選地,hAPIC32A-32B和gAPIC34A_34D可以是具有相同硬件的例子(如果gAPIC34A_34D實現(xiàn)所有的APIC狀態(tài)),并且訪客ID寄存器可包含指示該訪客ID是否有效的使能位,或者訪客ID寄存器可被編程為調(diào)O以指示hAPIC。
[0091]現(xiàn)在翻到圖5,該圖示出了 gAPIC狀態(tài)條目90的一實施方式和VMM管理的gAPIC狀態(tài)條目92的一實施方式的方塊圖。圖5中所示的是狀態(tài)的邏輯視圖。在存儲器中,狀態(tài)的實際排列可按照圖9、12或13中的一些實施方式而進行變化。
[0092]通常來說,gAPIC狀態(tài)條目90可包括至少如下的gAPIC狀態(tài),當對應于該gAPIC狀態(tài)的訪客是非活動的時,該gAPIC狀態(tài)是可變的。在當前的實施方式中,外圍設備可將中斷用信號通知訪客,這可改變IRR的狀態(tài)。但是,ISR狀態(tài)僅當訪客中的vCPU接受該中斷時才可改變,當訪客是非活動時,ISR狀態(tài)不會發(fā)生改變。類似的,可以通過vCPU來改變TPR,并且當訪客是非活動時,TPR不改變。VMM18可在VMM18管理的gAPIC狀態(tài)條目92中管理這些狀態(tài)的存儲和恢復。
[0093]相應地,對類似于圖4的APIC34A的一實施方式而言,gAPIC狀態(tài)條目90可包含IRR70的狀態(tài)。VMM管理的gAPIC狀態(tài)條目92可包括ISR72、TMR74、TPR76以及其他各種APIC狀態(tài)86的狀態(tài)。VMM管理的gAPIC狀態(tài)條目92也可存儲訪客ID、邏輯ID以及物理ID,或者這些內(nèi)容在選擇的條目92中是固有的(也就是說,VMM18可使用這些值來從數(shù)據(jù)結(jié)構(gòu)68中選擇條目92)。
[0094]現(xiàn)在翻到圖6,該圖示出了響應接收來自10MMU40的訪客中斷消息的訪客中斷管理器38的一實施方式的操作流程圖。盡管為了便于理解而將方塊按特定順序顯示,但其他順序也可以使用??砂凑赵L客中斷管理器38中的組合邏輯并行地執(zhí)行各個方塊。方塊、方塊組合和/或流程圖在多個時鐘周期期間以流水線方式處理。通常來說,訪客中斷管理器38可用于執(zhí)行如圖6所示的操作。
[0095]在一些實施方式中,中斷消息的處理根據(jù)該中斷是邏輯的還是物理的可變(也就是說,根據(jù)中斷的傳送模式是邏輯的還是物理的)。例如,在圖11的實施方式中,邏輯中斷和物理中斷讀取不同的表。在圖12和13中,邏輯表和物理表在存儲器中可以是相鄰的,但是可對基址指針增加偏移以定位邏輯中斷的邏輯表而物理中斷則不需要增加任何偏移。據(jù)此,訪客中斷管理器38可用于確定中斷是邏輯的還是物理的(判定框100)。其他實施方式不可基于傳送模式而變換,于是判定框100可以除去(且下面要討論的廣播或多個目的地的檢查可被并入一個檢查中)。
[0096]如果中斷是邏輯的(判定框100,“是”支路),訪客中斷管理器38可用于確定從邏輯中斷到gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中相應的gAPIC狀態(tài)條目90的映射(方塊102)。不同的實施方式可執(zhí)行不同的映射,如圖10-13所示,因此上述的確定是可變的。訪客中斷管理器38可用于設置對應于中斷向量的位,該中斷向量位于表示在gAPIC狀態(tài)條目90中的IRR中(方塊104)。邏輯中斷可具有多個目的地(例如,在簇中的目的地是位向量,其可以具有多于一個的置位)。如果邏輯中斷包含多個目的地(判定框106,“是”支路),則訪客中斷管理器38可用于為每一個附加的目的地重復方塊102和104??蛇x地,在圖12的實施方式中,邏輯目的地位向量在一個操作中可被寫入gAPIC狀態(tài)條目中,如下詳述。訪客中斷管理器38可用于傳送中斷消息到gAPIC34A-34D (方塊108)。
[0097]如果中斷是物理的(判定框100,“否”支路),訪客中斷管理器38可用于確定從物理中斷到gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中相應的gAPIC狀態(tài)條目90的映射(方塊110)。不同的實施方式可執(zhí)行不同的映射,如圖10-13所示,因此上述的確定是可變的。訪客中斷管理器38可用于設置對應于中斷向量的位,該中斷向量位于表示在gAPIC狀態(tài)條目90中的IRR中(方塊112)。物理中斷可以是廣播的或者是單一的目的地。如果物理中斷是廣播的(判定框114,“是”支路),則訪客中斷管理器38可用于為訪客虛擬機(例如,每一個vCPU)中的每一個目的地重復方塊110和112??蛇x地,在圖12的實施方式中,該廣播可在一個操作中被記錄在gAPIC狀態(tài)條目中,如下詳述。訪客中斷管理器可用于傳送中斷消息到gAPIC34A-34D(方塊108)。
[0098]被表示在gAPIC狀態(tài)條目90中的IRR中的位的設置可作為原子的或運算操作來執(zhí)行,其中該置位被或運算到該存儲位置中的其他IRR位中。原子或運算操作的實際執(zhí)行情況是可以變化,從鎖定的讀/修改/寫操作到定義來執(zhí)行或運算的專用電路系統(tǒng)作為一個操作。如上所述,在其他實施方式中可執(zhí)行比較和交換操作。
[0099]在另一實施方式中,具有多于一個目的地的邏輯中斷和被廣播的物理中斷可由訪客中斷管理器38通過在VMM18可存取的數(shù)據(jù)結(jié)構(gòu)中記錄該中斷來處理(例如,事件隊列)。訪客中斷管理器38可也用于用信號通知VMM18 (例如,引起從處理器30A-30B之一上的虛擬機退出)來將事件通知給VMM18??蛇x地,訪客中斷管理器38可僅周期性地用信號通知VMM18 (例如,每N毫秒一次和/或在事件隊列中處于高水位時),并且VMM18也可周期性地檢查事件隊列以比可支持的信號通知更快地為任一事件服務。在一實施方式中,事件隊列可由10MMU40而不是訪客中斷管理器38來管理。
[0100]現(xiàn)在翻到圖7,該圖所示為說明gAPIC34A-34D對接收來自訪客中斷管理器38的中斷消息的作出響應的一實施方式的操作流程圖。盡管為了便于理解而將方塊按照特定順序顯示,但其他順序也可以使用??砂凑誫APIC中的組合邏輯并行地執(zhí)行各個方塊。方塊、方塊組合和/或流程圖在多個時鐘周期期間以流水線方式處理。通常來說,gAPIC可用于執(zhí)行如圖7所示的操作。
[0101]在一實施方式中,通過設置gAPIC的訪客ID (參見圖4,在訪客ID寄存器84中)為O可使得該gAPIC非激活。因此,為了對接收中斷消息作出響應,如果該gAPIC的訪客ID為O (判定框120,“是”支路),則該gAPIC是非活動的并且不可處理中斷。其他實施方式可通過其他方式(例如,在寄存器中的活動位)來使得gAPIC非激活并且判定框120可根據(jù)gAPIC的活動/非活動狀態(tài)的檢查來相應地進行修改。
[0102]如果gAPIC的訪客ID不為0,則該gAPIC可被配置為既比較該訪客ID和接收到的中斷的訪客ID,又比較接收到的目的地ID和分別位于寄存器80與82中的邏輯ID和物理ID (參見圖4)。如果gAPIC的訪客ID與接收到的訪客ID不匹配(判定框122,“否”支路),則該gAPIC當前被分配給不同的訪客并且該gAPIC因而不再被該中斷指向。該gAPIC可被配置為用中斷的非確認信號進行響應(方塊124)。該非確認信號可表示該gAPIC已經(jīng)接收到該中斷但是已經(jīng)確定該中斷不是相應的處理器所指向的,因此該中斷未被接受。類似的,如果gAPIC的訪客ID與接收到的訪客ID相匹配,但是該中斷是邏輯的并且與該gAPIC的邏輯ID不匹配或者該中斷是物理的、單目的地的并且與該gAPIC的物理ID不匹配(判定框126和128,“否”支路),則該gAPIC可被配置為用中斷的非確認信號進行響應(方塊124)。
[0103]匹配邏輯中斷通常包括比較邏輯ID的簇ID部分的相同之處,并且檢測gAPIC邏輯ID寄存器中的置位也被設置在從該中斷接收的邏輯ID的目的地部分中。如果有不止一個邏輯目的地的話,則該中斷邏輯ID的目的地部分中的其他位也可被設置。物理ID可被比較相同之處,除了廣播的物理中斷可被看作只要訪客ID匹配就匹配。
[0104]如果中斷是邏輯的并且與邏輯ID相匹配(判定框126,“是”支路)或者中斷是物理的并且與物理ID相匹配或者中斷是廣播的(判定框128,“是”支路),則該gAPIC可用于用表示該gAPIC正在接受該中斷的確認信號來響應訪客中斷管理器38以報告給相應的處理器30A-30B (方塊130)。該gAPIC也可用于更新IRR寄存器70、設置對應于中斷消息中的中斷向量的中斷請求位(方塊132)。該gAPIC可用于重新評估與任何服務中中斷和/或任務優(yōu)先級寄存器有關的中斷的優(yōu)先級(方塊134),并可用于基于重新評估的結(jié)果將中斷用信號通知給處理器(方塊136)。也就是說,如果該中斷的優(yōu)先級高于服務中中斷和任務優(yōu)先級寄存器的優(yōu)先級的話,則該gAPIC可被配置為用信號通知該中斷。
[0105]現(xiàn)在翻到圖8,該圖示出了一個流程圖以說明VMM18將gAPIC狀態(tài)從一個訪客改變到另一個訪客的一實施方式的操作。也就是說,圖8的流程圖可表示將gAPIC34A-34D從一個訪客/vCPU重新分配給其他訪客或者同一訪客中的其他vCPU。盡管為了便于理解,方塊以特定的順序來顯示,但也可以用其他順序。通常來說,VMM18可包括一些指令,當這些指令在系統(tǒng)5上執(zhí)行時可實現(xiàn)圖8所示的操作。
[0106]VMM18可確定相應于“舊訪客”(來自gAPIC的被關閉的訪客)的位于gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的gAPIC狀態(tài)條目90的位置(方塊140)。gAPIC狀態(tài)條目90中的數(shù)據(jù)被認為是“過時的”,因為它可能已經(jīng)被gAPIC修改過。例如,IRR位可以已被重置以對傳送中斷到相應的處理器作出響應。據(jù)此,VMM18可將gAPIC狀態(tài)條目90中的IRR調(diào)0(方塊142)。VMM18可清空訪客ID寄存器84、邏輯ID寄存器82以及物理ID寄存器80 (方塊144)。由于訪客ID、邏輯ID和物理ID不會與任何中斷消息相匹配,因此清空操作可阻止gAPCI接受任何額外的中斷。在寄存器80-84被清空(方塊144)之后、IRR狀態(tài)被寫入gAPIC狀態(tài)條目90之前,中斷可能已經(jīng)被傳送。據(jù)此,為了防止中斷狀態(tài)的丟失,VMM18可原子地將IRR狀態(tài)從IRR70或運算(OR)到gAPIC狀態(tài)條目90中(方塊146)。VMM18也可將其他gAPIC狀態(tài)寫入與舊訪客相關的VMM管理的gAPIC狀態(tài)條目92中(方塊148)。
[0107]VMM18可清空gAPIC的IRR、ISR和TMR寄存器70、72和74以移除舊訪客的中斷狀態(tài)(方塊150)。VMM18可將分配給gAPIC的訪客的新訪客ID、邏輯ID以及物理ID各自寫入到訪客ID寄存器84、邏輯ID寄存器82和物理ID寄存器80 (方塊152)。一旦方塊152被執(zhí)行,則gAPIC可開始接受訪客中斷。VMM18可為“新訪客”(在gAPIC中激活的訪客)確定gAPIC狀態(tài)條目90 (方塊154),并可從gAPIC狀態(tài)條目90中讀取IRR狀態(tài)(方塊156)。既然對寄存器80-84的編程可使得gAPIC開始接受中斷,因此可能的情況是gAPIC已經(jīng)接受IRR中的中斷,該中斷在VMM18讀取gAPIC狀態(tài)條目90之后被記錄于該條目中。據(jù)此,VMMl8可原子將IRR狀態(tài)或運算到IRR寄存器70中。也就是說,gAPIC可支持IRR寄存器70上的原子或運算操作(方塊158)。VMM18可從VMM管理的gAPIC狀態(tài)條目92中為新的訪客讀取其他狀態(tài)(方塊160)并可將狀態(tài)寫入gAPIC中(方塊162)。值得注意的是,方塊160和162也可在方塊150之后的任意其他點執(zhí)行。
[0108]通常來說,方塊140-148可表示關閉來自gAPIC的訪客的操作,同時方塊150-162通??杀硎炯せ頶APIC中的訪客的操作。據(jù)此,如圖8中的水平虛線所示,如果VMM18僅希望關閉gAPIC中的訪客,則水平虛線以上的方塊可被執(zhí)行。如果VMM僅希望激活gAPIC中的訪客,則水平虛線以下的方塊可被執(zhí)行。
[0109]現(xiàn)在翻到圖9,圖中所示的方塊圖說明在一實施方式中在gAPIC狀態(tài)條目90中的gAPIC狀態(tài)的示例性排列170。在圖9的實施方式中,IRR的每一個位都被存儲在不同字節(jié)中。例如,圖9中的IRR位O (IRRO)被存儲在存儲器中一組連續(xù)字節(jié)的字節(jié)O中;IRR1被存儲在字節(jié)I中;等等,直到IRR255被存儲在字節(jié)255中。盡管字節(jié)中的任何位位置(bitposition)均可使用,但在所示的實施方式中IRR位被存儲在字節(jié)的O位處。在所示的實施方式中,字節(jié)中的其他位是不必關心的位(DC)。通過將每一個位存儲在分離的字節(jié)(存儲訪問的最小單位)中,每一個位可分別寫入而不影響其他的位。這樣,一個位可通過到字節(jié)的寫入操作被設置,這是一個原子操作。通過將置位寫入到字節(jié)中的IRR位的位置且不更新其他字節(jié),結(jié)果可以是對IRR位的原子或運算。在其他實施方式中,原子的或運算可以以其他方式完成,且IRR狀態(tài)的位可以以其他方式存儲。
[0110]現(xiàn)在翻到圖10,該圖示出了定位gAPIC狀態(tài)條目90的一實施方式的方塊圖。在所不的實施方式中顯不了設備表62和中斷重定向表64,還有gAPIC狀態(tài)映射表60的一實施方式。在該實施方式中,傳送中斷的外圍設備的BDF作為到設備表62的索引使用,且該條目可包括將BDF分配給其的訪客的訪客ID。此外,在這個實施例中,該條目包括中斷重定向表指針(IRTP),其指向中斷重定向表64的基址。到中斷重定向表64的索引是中斷的中斷標識符。中斷標識符可包括中斷向量,也可包括物理或邏輯的中斷傳送模式(Delmode)。選定的條目可包括新的向量以及目的地ID(DestlD)。在不使用中斷重定向表64的實施方式中,由外圍設備提供的中斷向量和目的地ID可直接用來索引gAPIC狀態(tài)映射表60。
[0111]gAPIC狀態(tài)映射表60可通過gAPIC狀態(tài)映射表的基址被定位在存儲器中。在不同實施方式中,基址可以對所有訪客相同,也可以是不同訪客不同,或者可被存儲在設備表62中。在圖10中,基址標識一組分層表的最高層級(L3),其可存儲指向較低層級表的指針(例如,L2以及類似的由來自L3但不指向L2的指針標識的表)。L2表可存儲指向更低層級表(LI)的指針,其可存儲指向gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的gAPIC狀態(tài)條目90的指針。其他實施方式可在層級系統(tǒng)中使用任意的層級數(shù),包括多于或少于圖10所示的3層。
[0112]在gAPIC狀態(tài)映射表60中到每一層L3-L1的索引可以是下述值的一部分,該值由來自設備表62的訪客ID、來自外圍設備或來自中斷重定向表64的中斷向量以及來自外圍設備或來自中斷重定向表64的目的地ID串聯(lián)而形成。到層L3-L1的索引可耗盡該串聯(lián)值的所有位,這樣在gAPIC狀態(tài)映射表60中訪客ID、向量和目的地ID的每一個組合都具有其自身的唯一指針。但是一些指針可指向同一個gAPIC狀態(tài)條目90 (例如,在一實施方式中,同一 gAPIC的邏輯ID和物理ID可具有指向同一個gAPIC狀態(tài)條目90的指針)。
[0113]現(xiàn)在翻到圖11,該圖示出了定位gAPIC狀態(tài)條目90的另一實施方式的方塊圖。在所不的實施方式中顯不了設備表62和中斷重定向表64,還有gAPIC狀態(tài)映射表60的一實施方式。在該實施方式中,傳送中斷的外圍設備的BDF作為到設備表62的索引使用,且該條目可包括將BDF分配給其的訪客的訪客ID。此外,在這個實施例中,該條目包括中斷重定向表指針(IRTP),其指向中斷重定向64的基址。設備62可進一步包括一個或多個指向gAPIC狀態(tài)映射表60中的表的指針。尤其是,指向訪客物理表的指針和指向訪客邏輯表的指針均可被存儲。訪客物理表可將物理目的地ID映射到gAPI狀態(tài)條目90。也就是說,訪客物理表可通過目的地ID進行索引,且可存儲指向gAPIC狀態(tài)條目90的指針。類似的,訪客邏輯表可將邏輯目的地ID映射到gAPIC狀態(tài)條目90。
[0114]到中斷重定向表64的索引是中斷的中斷標識符。中斷標識符可包括中斷向量,也可包括物理或邏輯的傳送模式(Delmode)。選定的條目可包括新的向量和目的地ID(DestID)。在不使用中斷重定向表64的實施方式中,外圍設備提供的中斷向量和目的地ID可直接用來索引gAPIC狀態(tài)映射表60。
[0115]現(xiàn)在翻到圖12,該圖示出了定位gAPIC狀態(tài)條目90的又一實施方式的方塊圖。在這一實施方式中沒有gAPIC狀態(tài)映射表60。與圖10-11中的實施方式類似的是,傳送中斷的外圍設備的BDF作為到設備表62的索引使用,且該條目可包括將BDF分配給其的訪客的訪客ID以及可選地包括中斷重定向表指針(IRTP),該指針指向中斷重定向表64的基址。設備表62可進一步包括至少一個指向gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58中的表的基址的指針(Ptr)。在所示的實施方式中,該表包括訪客物理片段(sectionMSO和訪客邏輯片段182。盡管為了繪圖的清楚在圖12中將片段180和182之間隔開一定的空間,但在存儲器中片段180和182是相鄰的。也就是說,訪客物理片段180的頂部與訪客邏輯片段182的底部相鄰。設備表62的條目可進一步包括指示訪客邏輯部分182的頂部的邏輯限制(LLim)域。在其他實施方式中,訪客物理部分180和訪客邏輯部分182可不相鄰并且可在設備表62的條目中存儲單獨的指針以分別指示訪客物理部分180和訪客邏輯部分182。
[0116]在圖12的實施方式中,訪客物理部分180可由中斷向量(或者來自外圍設備或者來自中斷重定向表64)來索引。訪客物理部分180中的每一個條目可包括對應于訪客物理機所支持的目的地ID (例如,多達64個目的地,在圖12中編號O到63)的位向量。為了響應物理中斷,訪客中斷管理器38可用于為對應于目的地ID的中斷向量設置條目中的位。對廣播中斷來說,訪客中斷管理器38可用于設置條目中的每一個對應于中斷向量的位,直到虛擬機中的vCPU的數(shù)量。
[0117]訪客邏輯部分182可通過邏輯ID的簇部分以及向量來索引。簇部分是索引的最值得注意的位,因此訪客邏輯部分182被分割成對應每一個邏輯簇的簇部分(圖12中的簇O到簇N)。在每一個簇中,條目由中斷向量來排列,每一個條目存儲對應邏輯ID向量部分的位向量。在所示的實施方式中,一個簇中可包括多達16個目的地(例如,邏輯ID的位向量部分可以是16位)。為了響應邏輯中斷,訪客中斷管理器38可被配置為利用相應于中斷向量的條目中的內(nèi)容來邏輯地對邏輯ID的位向量部分進行或運算。
[0118]相應地,圖12的實施方式可支持廣播物理中斷的記錄和邏輯中斷的記錄,所述邏輯中斷在對gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58的單個更新中具有多目的地。gAPIC的gAPIC狀態(tài)條目可包括對應于gAPIC物理ID的訪客物理部分180的列,其與來自被gAPIC邏輯ID標示的簇的列邏輯地進行或運算,該列被gAPIC邏輯ID的位向量部分中的置位所標識。響應使gAPIC中的訪客不活動而更新gAPIC狀態(tài)數(shù)據(jù)結(jié)構(gòu)58包括將對應于訪客的列中的一列調(diào)O并將IRR寫到其他列。
[0119]圖13所示為定位gAPIC狀態(tài)條目90的再一實施方式。圖13中的實施方式與圖12中的實施方式類似,除了在訪客物理部分180和訪客邏輯部分182中的數(shù)據(jù)的排列不同之外。每一個條目對應一個IRR,因此每一個條目為每一個中斷向量包括一個位。訪客物理部分180由中斷的物理ID來索引,同時訪客邏輯部分182由訪客的邏輯ID來索引。對應于中斷向量的IRR位根據(jù)中斷的傳送模式被設置在邏輯部分182或物理部分180中。訪客/vCPU的gAPIC狀態(tài)是來自對應于分配給該訪客/VCPU的物理ID的訪客物理部分180的行與來自對應于分配該訪客/VCPU的邏輯ID的訪客邏輯部分182的行的或運算。
[0120]現(xiàn)在翻到圖14,該圖所示為主機硬件20的另一實施方式的方塊圖。在所示的實施方式中,與圖2中的集成電路66類似的包括兩個集成電路66A-66B。因此,如圖所示,每一個集成電路可包括gAPIC,例如,集成電路66A中的34A-34D,以及集成電路66B中的34E-34G。每一個集成電路66A-66B可包括各自的訪客中斷管理器28A-28B和IOMMU (圖14中未圖示)。至少一個集成電路66A-66B與存儲器56A-56B相耦合,可選的是集成電路66A-66B 二者都包括存儲器。集成電路66A-66B通過所示實施方式中的接口電路44C和44D來耦合。在其他實施方式中,可提供不止兩個的集成電路66A-66B并且不同的集成電路可以以任意想要的方式互連。
[0121]在一實施方式中,每一個訪客中斷管理器28A-28B可被使能并可管理指向在同一集成電路中的gAPIC34A-34G的中斷消息。因此,訪客中斷管理器28A-28B可對訪客中斷傳送提供可擴展解決方案。訪客中斷管理器28A-28B所使用的數(shù)據(jù)結(jié)構(gòu)可被存儲在一個存儲器中(例如,存儲器58A),或者每一個訪客中斷管理器28A-28B可在其自身的存儲器58A-58B中具有自己的數(shù)據(jù)結(jié)構(gòu)。盡管可能存在一些對存取數(shù)據(jù)結(jié)構(gòu)的爭用,但在許多情況下外圍設備被分配給特定的訪客(其執(zhí)行于位于集成電路66A-66B之一中的處理器上),這樣實際爭用的數(shù)量可相對較小。
[0122]在另一實施方式中,訪客中斷管理器28A-28B中的一個可被使能并可為系統(tǒng)中的每一個gAPIC34A_34G執(zhí)行訪客中斷傳送。這樣的實施方式在集成電路66A-66B之間的交互中可經(jīng)受更多的與中斷相關的傳送,但也可為訪客中斷管理提供中心點的概念簡單性。
[0123]現(xiàn)在翻到圖15,該圖所示為計算機可存取存儲介質(zhì)200的方框圖。一般來說,計算機可存取存儲介質(zhì)可包含任何在用以對計算機提供指令和/或數(shù)據(jù)期間可由計算機存取的存儲介質(zhì)。例如,計算機可存取存儲介質(zhì)可包含諸如磁性介質(zhì)或光學介質(zhì)的存儲介質(zhì),例如,磁盤(固定的或可移動的)、磁帶、CD-ROM或DVD-ROM、CD-R、CD-RW、DVD-R、DVD-Rff和/或藍光關盤。存儲介質(zhì)可進一步包括易失性或非易失性存儲介質(zhì)諸如RAM (例如,同步動態(tài) RAM (SDRAM)、Rambus DRAM (RDRAM)、靜態(tài) RAM (SRAM),等等)、R0M、閃存、可由諸如通用串行總線(USB)接口或任何其他接口的外圍設備接口進行存取的非易失性存儲器(例如,閃存),等等。存儲介質(zhì)可包括微機電系統(tǒng)(MEMS)以及由諸如網(wǎng)絡和/或無線鏈接的通信介質(zhì)進行存取的存儲介質(zhì)。圖15中的計算機可存取存儲介質(zhì)200可存儲VMM18,VMM18可執(zhí)行圖8的流程圖和/或任何其他分配給VMM18的功能。一般來說,該計算機可存取存儲介質(zhì)200可存儲任何指令組,該指令組執(zhí)行時實現(xiàn)圖8所示的流程圖的部分或全部。載體介質(zhì)可包括計算機可存取存儲介質(zhì)以及諸如有線或無線傳輸?shù)膫鬏斀橘|(zhì)。
[0124]一旦完全地了解上述公開的內(nèi)容,本發(fā)明的多種變化和修正對本領域技術人員來說是顯而易見的。其目的在于使下面的權(quán)利要求書解釋為包括所有這樣的變化和修正。
【權(quán)利要求】
1.一種訪客中斷控制方法,其包括:
在輸入/輸出存儲管理單元中接收中斷消息,其中該中斷消息傳送中斷,其中所述中斷源自外圍設備,所述外圍設備被分配給系統(tǒng)中多個訪客中的第一訪客; 通過所述輸入/輸出存儲管理單元存取在存儲器中的一個或多個第一數(shù)據(jù)結(jié)構(gòu)以將所述中斷映射到所述第一訪客,其中所述一個或多個第一數(shù)據(jù)結(jié)構(gòu)還包括指向另一個存儲位置的指針; 響應于所述指針,通過訪客中斷管理器定位存儲器中的一個或多個第二數(shù)據(jù)結(jié)構(gòu),其中所述一個或多個第二數(shù)據(jù)結(jié)構(gòu)包括所述第一訪客的中斷控制器狀態(tài);以及 在存儲器的所述一個或多個第二數(shù)據(jù)結(jié)構(gòu)中記錄所述中斷,允許所述中斷在所述第一訪客執(zhí)行時被傳送到所述第一訪客。
2.根據(jù)權(quán)利要求1所述的方法,其進一步包括: 將所述中斷傳送到第一中斷控制器,所述第一中斷控制器被分配給所述第一訪客并且是所述第一訪客中的所述中斷的目的地。
3.根據(jù)權(quán)利要求1所述的方法,其中中斷控制器狀態(tài)包括所述中斷控制器中的中斷請求寄存器的狀態(tài),且其中所述中斷包括中斷向量,且其中所述中斷請求寄存器包括與所述向量相關的位位置,且其中記錄所述中斷包括了在數(shù)據(jù)結(jié)構(gòu)的所述位位置中設置所述位。
4.根據(jù)權(quán)利要求3所述的方法,其中設置所述位是原子的。
5.根據(jù)權(quán)利要求4所述的方法,其中設置所述位包括原子地將置位或運算到所述位位置中。
6.一種訪客中斷管理器,其被配置為接收中斷消息,所述中斷消息對應于指向在系統(tǒng)上可執(zhí)行的訪客的中斷,其中所述訪客中斷管理器被配置為將所述中斷記錄于存儲系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)中,以確保即使所述訪客在所述系統(tǒng)中在所述中斷消息被接收時不是活動的,所述中斷依然可被傳送到所述訪客,其中所述訪客中斷管理器被配置成從輸入/輸出存儲管理單元接收指針以定位所述存儲系統(tǒng)中的所述數(shù)據(jù)結(jié)構(gòu),并且其中由所述輸入/輸出存儲管理單元提供的所述指針來自第二數(shù)據(jù)結(jié)構(gòu),該輸入/輸出存儲管理單元配置成存取該第二數(shù)據(jù)結(jié)構(gòu)以將所述中斷消息映射到所述訪客。
7.根據(jù)權(quán)利要求6所述的訪客中斷管理器,其中所述數(shù)據(jù)結(jié)構(gòu)被配置為為給定訪客存儲中斷控制器的狀態(tài)的至少一部分,且其中所述狀態(tài)包括中斷請求寄存器的狀態(tài),且其中所述訪客中斷管理器被配置來更新所述中斷請求寄存器的所述狀態(tài)以記錄所述中斷。
8.根據(jù)權(quán)利要求7所述的訪客中斷管理器,其中所述中斷請求寄存器包括與所述中斷控制器所支持的每一個中斷向量相對應的位,且其中所述中斷消息包括所述中斷的所述中斷向量,且其中所述訪客中斷管理器被配置來更新與來自所述中斷消息的所述中斷向量相對應的所述位。
9.一種訪客中斷控制系統(tǒng),其包括: 存儲系統(tǒng);以及 根據(jù)權(quán)利要求6-8中的任一項所述的訪客中斷管理器。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其進一步包括: 外圍設備,其被配置來初始化所述中斷;以及 所述輸入/輸出存儲管理單元被配置為接收來自所述外圍設備的所述中斷,其中所述輸入/輸出存儲管理單元被配置為將所述中斷與所述訪客關聯(lián)以響應所述存儲器中的所述第二數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù),且其中所述輸入/輸出存儲管理單元被配置為傳送包含有標識所述訪客的訪客標識符的所述中斷消息以響應與所述訪客相關的所述中斷。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其進一步包括可被分配給所述訪客的中斷控制器,其中所述中斷控制器被配置為存儲所述訪客的所述訪客標識符,且其中所述中斷控制器被配置為將來自接收到的中斷消息的訪客標識符與存儲在所述中斷控制器中的訪客標識符進行比較,且其中所述中斷控制器被配置為接受所述中斷以響應所述訪客標識符比較過程中的匹配。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其中所述訪客中斷管理器被配置為將所述中斷消息傳送到所述中斷控制器以響應來自所述輸入/輸出存儲管理單元的所述中斷消息并響應被記錄于所述數(shù)據(jù)結(jié)構(gòu)中的所述中斷`。
【文檔編號】G06F9/48GK103761145SQ201310753146
【公開日】2014年4月30日 申請日期:2010年1月26日 優(yōu)先權(quán)日:2009年1月26日
【發(fā)明者】本杰明·C·塞雷布林, 唐納德·W·麥考利, 約翰·F·維德伊恩, 伊麗莎白·M·庫珀, 馬克·D·胡梅爾 申請人:超威半導體公司