專利名稱::對(duì)多體系組件軟件的系統(tǒng)管理模式加載程序和執(zhí)行機(jī)制的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明一般地涉及計(jì)算機(jī)系統(tǒng),具體地涉及一種用于擴(kuò)展處理器的系統(tǒng)管理模式(SMM)和其他類似模式的功能性的機(jī)制。
背景技術(shù):
:自從英特爾(Intel)公司推出386SL型處理器以來,作為一種被隱藏至操作系統(tǒng)、執(zhí)行由基本輸入輸出系統(tǒng)(BIOS)或者固件加載的代碼的操作模式,SMM一直用于IA32處理器。SMM是一種為處理像電源管理、系統(tǒng)硬件控制或者原始設(shè)備制造商(OEM)設(shè)計(jì)的專有代碼這樣的系統(tǒng)級(jí)功能而提供的特定用途操作模式。由于操作系統(tǒng)(OS)和軟件應(yīng)用程序不能看到,或者甚至不能訪問它,所以該模式被認(rèn)為是“隱藏的”。通過SMI(系統(tǒng)管理中斷)信號(hào)觸發(fā),IA32處理器能夠進(jìn)入SMM。一種大致類似于SMI信號(hào),被稱為PMI(處理器管理中斷)信號(hào)的相似信號(hào)被用于ItaniumTM類處理器。簡化起見,這里SMI和PMI信號(hào)有時(shí)都被稱為xMI信號(hào)。迄今,善用上述Intel處理器的SMM性能的大多數(shù)BIOS實(shí)現(xiàn)僅僅注冊(cè)單段在建立BIOS過程中創(chuàng)建的代碼,以支持對(duì)于使用BIOS的系統(tǒng)特殊的特定功能或者一系列功能。該代碼包括IA32中的16位匯編和用于Itanium處理器的64位匯編。為響應(yīng)所有xMI觸發(fā),用于這些遺留實(shí)現(xiàn)的單代碼段自始至終運(yùn)行著?,F(xiàn)今的系統(tǒng)中沒有注冊(cè)或者執(zhí)行第三方SMM代碼的規(guī)定,因而不允許擴(kuò)展SMM結(jié)構(gòu)。但這種擴(kuò)展經(jīng)常是想要的。例如,如果原始設(shè)備制造商(OEM)或者BIOS廠商為指定平臺(tái)提供的SMM代碼提供的功能不足,開發(fā)者或者增值經(jīng)銷商(VAR)不得不要么許可來自BIOS廠商或者OEM的現(xiàn)有代碼并試圖將他們自己的邏輯移植至他們的SMM代碼實(shí)現(xiàn)中,要么忍受這種不足,因?yàn)槟壳暗腟MM架構(gòu)沒有提供一種修改或者擴(kuò)展單代碼段提供的功能的替換方式。另外,現(xiàn)今在IA32處理器上的實(shí)現(xiàn)限于處理器的16位模式,因而限制了代碼長度和對(duì)32位或者64位軟件工程技術(shù)的合理利用。而且,由于SMM經(jīng)常被用于芯片組工作區(qū)(例如,產(chǎn)生由于芯片組或者CPU中的設(shè)計(jì)或者制造缺陷引起的錯(cuò)誤的和/或者不可預(yù)料的結(jié)果的CPU或者芯片組勘誤表),這種關(guān)鍵軟件更新的能力被BIOS廠商或者OEM的整體的BIOS實(shí)現(xiàn)控制了。在現(xiàn)今的環(huán)境中,大多數(shù)芯片組廠商選擇讓操作系統(tǒng)廠商利用OS驅(qū)動(dòng)程序集成這種工作區(qū)。一般,SMM功能的BIOS更新實(shí)現(xiàn)上還存在問題,而且,由于通過自身的驅(qū)動(dòng)模型,OS已經(jīng)具有硬件可擴(kuò)展性機(jī)制,所以BIOS廠商和OEM很少去積極提供這些類型的BIOS更新。結(jié)合附圖,參考下面的詳細(xì)描述,本發(fā)明的前述方面和伴隨的許多優(yōu)點(diǎn)更容易被意識(shí)到,同時(shí)也更好理解;其中圖1是舉例說明本發(fā)明的一個(gè)能使各種事件處理程序(eventhandler)加載進(jìn)隱藏的內(nèi)存空間并且被執(zhí)行來響應(yīng)一個(gè)SMI或者PMI(xMI)事件的示例性的實(shí)現(xiàn)的示意圖;圖2是舉例說明當(dāng)處理xMI事件時(shí),本發(fā)明使用的邏輯的流程圖;圖3是舉例說明當(dāng)加載和開始系統(tǒng)管理模式(SMM)核心(Nub)的執(zhí)行時(shí),本發(fā)明使用的邏輯的流程圖,該系統(tǒng)管理模式核心當(dāng)處理器以SMM運(yùn)行時(shí),被用來管理事件處理;圖4是舉例說明SMM核心的各種功能和服務(wù)組件的方框圖;圖5是舉例說明當(dāng)注冊(cè)事件處理程序時(shí),本發(fā)明使用的邏輯的流程圖;圖6是舉例說明當(dāng)注冊(cè)和安裝存儲(chǔ)在預(yù)引導(dǎo)處理過程中被掃描的固件卷(firmwarevolume)中的事件處理程序時(shí),本發(fā)明使用的邏輯的流程圖;圖7是舉例說明當(dāng)注冊(cè)用于服務(wù)ItaniumTM處理器的處理器管理中斷(PMI)事件的事件處理程序時(shí),本發(fā)明執(zhí)行的操作的流程圖;圖8是舉例說明當(dāng)處理PMI事件時(shí),本發(fā)明執(zhí)行的操作的流程圖;以及圖9是適合實(shí)現(xiàn)本發(fā)明的個(gè)人計(jì)算機(jī)系統(tǒng)的示意圖。具體實(shí)施例方式在下面的描述中,為了使本發(fā)明的實(shí)施例被徹底理解,會(huì)提供許多具體的細(xì)節(jié)。然而,相關(guān)領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,缺少一個(gè)或者多個(gè)具體的細(xì)節(jié),或者利用其他方法、組件等,本發(fā)明也能被實(shí)行。在其他情況下,沒有詳細(xì)地示出或者描述公知的結(jié)構(gòu)或者操作,以避免混淆本發(fā)明的各種實(shí)施例的方面。本說明書中凡提及“一個(gè)實(shí)施例”或者“實(shí)施例”,表示結(jié)合該實(shí)施例描述的具體的特點(diǎn)、結(jié)構(gòu)或者特征包括在本發(fā)明的至少一個(gè)實(shí)施例中。因此,本說明書中出現(xiàn)在各處的“一個(gè)實(shí)施例中”或者“實(shí)施例中”的字樣,未必都是指同一個(gè)實(shí)施例。而且,在一個(gè)或者多個(gè)實(shí)施例中,具體的特點(diǎn)、結(jié)構(gòu)或者特征可以以任何適當(dāng)?shù)姆绞浇Y(jié)合。本發(fā)明提供了一種機(jī)制,使得以一個(gè)或者多個(gè)軟件驅(qū)動(dòng)程序方式的可執(zhí)行內(nèi)容能夠被加載進(jìn)Intel32位系列微處理器(即,IA-32處理器)的系統(tǒng)管理模式(SMM),或者用PMI信號(hào)觸發(fā)的基于Itanium處理器的本機(jī)模式(nativemode)。在IA32SMM中代碼的執(zhí)行狀態(tài)是被SMI信號(hào)初始化的,而在ItaniumTM處理器中該狀態(tài)是被PMI信號(hào)觸發(fā)初始化的;簡化起見,這些一般都被稱為SMM。該機(jī)制允許可能由不同方編寫的多驅(qū)動(dòng)程序被安裝用于SMM操作。一個(gè)注冊(cè)驅(qū)動(dòng)程序的代理在EFI(可擴(kuò)展固件接口)引導(dǎo)服務(wù)模式(即,操作系統(tǒng)啟動(dòng)前的模式)中運(yùn)行,它由綁定驅(qū)動(dòng)程序的CPU特定(CPU-specific)的組件和抽象xMI(PMI或者SMI)信號(hào)的芯片組控制的平臺(tái)組件組成。提供這一系列功能的API(應(yīng)用程序接口)分別被稱為SMM基礎(chǔ)(SMMBase)和SMM訪問(SMMAccess)協(xié)議。在一般的SMM實(shí)現(xiàn)中,在交出控制權(quán)之前,SMM空間經(jīng)常被平臺(tái)軟件/固件/BIOS通過硬件機(jī)制鎖定;這樣賦予固件抽象這種綁定的控制和安全的能力。相反,通過本發(fā)明提供的SMM訪問協(xié)議,軟件抽象使該設(shè)備的使用者不必知道和理解確切的硬件機(jī)制,因而使得驅(qū)動(dòng)程序是跨平臺(tái)可移植的。如以下提供的進(jìn)一步詳細(xì)介紹,本發(fā)明包括下面的特征一個(gè)供驅(qū)動(dòng)程序使用的SMM中的庫,包括I/O訪問抽象和內(nèi)存分配服務(wù);一種以非SMM模式執(zhí)行的與驅(qū)動(dòng)程序和應(yīng)用程序通信的方法;一個(gè)以給定頻率周期性觸發(fā)的可選擇參數(shù);一種在被加載進(jìn)SMM過程中驗(yàn)證驅(qū)動(dòng)程序的方法;一種關(guān)閉注冊(cè)權(quán)的能力;一種在許多處理器接收xMI觸發(fā)的多處理器環(huán)境中運(yùn)行的能力;以及最后,將遺留IA32SMM代碼當(dāng)作一種特殊注冊(cè)的事件處理程序來運(yùn)行的能力。本系統(tǒng)的一個(gè)特點(diǎn)在于所有事件處理程序都在ItaniumTM本機(jī)處理器模式中運(yùn)行,或者在IA32情況下,當(dāng)以實(shí)模式(即,16位模式)運(yùn)行可選擇的遺留IA32處理程序時(shí),在調(diào)用事件處理程序前,結(jié)構(gòu)將使處理器進(jìn)入32位平坦(flat32)模式。本發(fā)明的一個(gè)示例性實(shí)現(xiàn)的高級(jí)示圖在圖1中被描述。通過使用EFI結(jié)構(gòu)該實(shí)現(xiàn)成為可能,該結(jié)構(gòu)為操作系統(tǒng)和平臺(tái)固件之間的接口定義了一新模型。接口由包含有與平臺(tái)相關(guān)的信息的數(shù)據(jù)表組成,加上操作系統(tǒng)及其加載程序可用的引導(dǎo)和運(yùn)行時(shí)間服務(wù)調(diào)用。同時(shí),這些提供了引導(dǎo)操作系統(tǒng)和運(yùn)行預(yù)引導(dǎo)應(yīng)用程序的標(biāo)準(zhǔn)環(huán)境。產(chǎn)生SMM可擴(kuò)展性結(jié)構(gòu)的過程在方框10中被初始化,其中,用具體例子說明了SMM可擴(kuò)展性結(jié)構(gòu)。這包括在方框12中的安裝EFISMM基礎(chǔ)協(xié)議驅(qū)動(dòng)程序。EFISMM基礎(chǔ)協(xié)議,即SMM_BASE,是CPU特定的協(xié)議,由CPU驅(qū)動(dòng)程序或者另一能夠抽象IA32或者Itanium處理器的ISA特定(ISA-specific)的細(xì)節(jié)的代理公布。一旦被安裝,SMM_BASE在方框14中公布SMM處理程序注冊(cè)服務(wù)。該處理程序注冊(cè)服務(wù)的公布使得遺留和附加的驅(qū)動(dòng)程序在方框22中注冊(cè)SMM事件處理程序,其中驅(qū)動(dòng)程序被存儲(chǔ)在各種存儲(chǔ)設(shè)備上,包括EFI系統(tǒng)分區(qū)16和BIOS閃存芯片18,以及通過網(wǎng)絡(luò)20被訪問的存儲(chǔ)設(shè)備上。除了這些類型的存儲(chǔ)設(shè)備,驅(qū)動(dòng)程序還可以保存在其他的實(shí)施本發(fā)明的計(jì)算機(jī)系統(tǒng)可訪問的持久性存儲(chǔ)設(shè)備上,包括基于主板的ROM、包含在附加的外設(shè)卡上的選項(xiàng)ROM、本地硬盤以及CDROM,這些都用固件卷23共同描述。(注意,EFI系統(tǒng)分區(qū)16、BIOS閃存芯片18和驅(qū)動(dòng)程序6駐留的遠(yuǎn)程存儲(chǔ)設(shè)備也可以包括固件卷。)如圖1中描述的,這些驅(qū)動(dòng)程序包括存儲(chǔ)在EFI系統(tǒng)分區(qū)16中的遺留(legacy)驅(qū)動(dòng)程序1和附加(add-on)驅(qū)動(dòng)程序2、存儲(chǔ)在BIOS閃存芯片18上的附加驅(qū)動(dòng)程序3、4和5以及通過網(wǎng)絡(luò)20由遠(yuǎn)程存儲(chǔ)設(shè)備(例如,文件服務(wù)器)訪問的附加驅(qū)動(dòng)程序6。如這里用到的,術(shù)語“附加的”對(duì)應(yīng)于沒有被提供如該系統(tǒng)的原始設(shè)備制造商(OEM)所提供的計(jì)算機(jī)系統(tǒng)的原始固件的驅(qū)動(dòng)程序和固件文件。在一種可選擇的模式中,EFISMM基礎(chǔ)協(xié)議驅(qū)動(dòng)程序可以掃描各種固件卷來識(shí)別任何通過SMM為服務(wù)xMI事件而被指定的驅(qū)動(dòng)程序。在一個(gè)實(shí)施例中,這些驅(qū)動(dòng)程序通過它們的文件類型來識(shí)別,例如,作為例子的“DRIVER7.SMH”文件25對(duì)應(yīng)附加驅(qū)動(dòng)程序7。在EFISMM基礎(chǔ)協(xié)議驅(qū)動(dòng)程序的安裝過程中,SMM核心24被加載進(jìn)包括只用于SMM(SMM-only)內(nèi)存空間的SMRAM26中。如以下被進(jìn)一步詳細(xì)解釋的,當(dāng)控制權(quán)被轉(zhuǎn)移給SMM時(shí),SMM核心24負(fù)責(zé)協(xié)調(diào)所有活動(dòng),包括為事件處理程序提供SMM庫28,該庫包括PCI和I/O服務(wù)30、內(nèi)存分配服務(wù)32和配置表注冊(cè)34。注冊(cè)SMM事件處理程序是使處理程序能夠執(zhí)行被設(shè)計(jì)要執(zhí)行的具體xMI事件服務(wù)功能的第一步。SMM事件處理程序包括一組代碼(即,被編碼的機(jī)器指令),該代碼被系統(tǒng)處理器(CPU)執(zhí)行時(shí),以類似于中斷服務(wù)例程的方式執(zhí)行事件服務(wù)功能。一般,每個(gè)SMM事件處理程序?qū)?wù)具體的硬件組件或者子系統(tǒng),或者具體的一類硬件的代碼。例如,SMM事件處理程序可以被提供來服務(wù)系統(tǒng)實(shí)時(shí)時(shí)鐘引起的錯(cuò)誤、I/O端口錯(cuò)誤、PCI設(shè)備錯(cuò)誤等。一般,給定的驅(qū)動(dòng)程序和SMM事件處理程序之間可以有某種對(duì)應(yīng)。然而,這并不是嚴(yán)格的要求,因?yàn)樘幚沓绦蚩梢园ㄒ幌盗袕膯蝹€(gè)的驅(qū)動(dòng)程序文件或者對(duì)象中提取的功能塊。當(dāng)服務(wù)于遺留驅(qū)動(dòng)程序1的事件處理程序被注冊(cè)時(shí),它被作為遺留處理程序加載進(jìn)SMRAM26中。遺留處理程序是一種事件處理程序,一般被提供了原始系統(tǒng)固件,并且代表處理xMI事件的傳統(tǒng)機(jī)制。當(dāng)各附加SMM事件處理程序在方框22中被注冊(cè)時(shí),它被加載進(jìn)SMRAM26的附加SMM事件處理程序部分38;一旦所有的附加事件處理程序被加載,附加SMM事件處理程序部分28就包括一系列如方框42所描繪的對(duì)應(yīng)于附加驅(qū)動(dòng)程序2-7的事件處理程序。另外,當(dāng)各SMM事件處理程序被注冊(cè)時(shí),也可能在方框44中選擇性地被驗(yàn)證,以確保事件處理程序?qū)τ?jì)算機(jī)系統(tǒng)的具體的處理器和/或者固件的使用是合法的。例如,一種實(shí)現(xiàn)公共密鑰的加密方法可以被使用。當(dāng)SMM事件處理程序被注冊(cè)時(shí),它們也被加入由SMM核心24維護(hù)的處理程序列表46中。一旦所有的遺留和附加的SMM事件處理程序都已經(jīng)被注冊(cè)并被加載進(jìn)SMRAM26中,而且正確的配置數(shù)據(jù)(元數(shù)據(jù))被寫入SMM核心24,則SMRAM被鎖定,阻止另外的SMM事件處理程序注冊(cè)。該系統(tǒng)現(xiàn)在已經(jīng)準(zhǔn)備好通過SMM處理各種xMI事件。參考圖1和圖2,用IA32處理器處理xMI事件的過程進(jìn)行如下在方框54中,xMI事件信號(hào)48被CPU50接收。在IA32多處理器環(huán)境中,xMI事件信號(hào)被各處理器接收。一般,對(duì)于IA32處理器,xMI(SMI)事件可以是響應(yīng)引起IA32處理器進(jìn)入SMM的系統(tǒng)芯片組上的引腳、總線周期類型或者處理器間中斷(IPI)的觸發(fā)而產(chǎn)生的。對(duì)于ItaniumTM處理器,xMI事件可以是響應(yīng)引起ItaniumTM處理器返回物理模式并執(zhí)行為服務(wù)PMI事件而向PAL(處理器抽象層)注冊(cè)的代碼的系統(tǒng)芯片組上的引腳、總線周期類型或者IPI的觸發(fā)而產(chǎn)生的。響應(yīng)xMI事件,CPU50切換為SMM模式,并且將指令指針重新指向SMM核心24中的第一指令,SMM核心在這里開始執(zhí)行,如方框55所提供的。在判斷框56中,判斷系統(tǒng)是否是多處理器系統(tǒng)。如果答案為“是”,所有處理器在方框57中被同步,因此,當(dāng)被選定的處理器中的SMM核心被執(zhí)行時(shí),除了該選定的處理器(例如,預(yù)引導(dǎo)過程中被識(shí)別的第一處理器)之外,所有處理器都被停止。然后各CPU的機(jī)器狀態(tài)在方框58中被CPU硬件和SMM核心24保存。接著,在判斷框59中,判斷是否存在已經(jīng)被注冊(cè)并加載的任何遺留16位處理程序。如果存在,對(duì)應(yīng)于那些遺留處理程序的代碼在方框60中被執(zhí)行。然后,在方框61中機(jī)器執(zhí)行模式被切換為Flat32保護(hù)模式。該保護(hù)模式包括具有未分頁32位、基于零尋址的Flat32模式。一旦執(zhí)行模式切換完成,本機(jī)32位處理程序被依次調(diào)度(dispatch),直至適當(dāng)?shù)氖录幚沓绦虮粓?zhí)行完畢以服務(wù)xMI事件,如圖2中的開始循環(huán)和結(jié)束循環(huán)方框62和63以及圖1中方框52提供的。在一個(gè)實(shí)施例中,事件處理程序被保存為從頭到尾依次游歷的鏈表,其中第一個(gè)事件處理程序被調(diào)度,另外的事件處理程序根據(jù)需要被調(diào)度。各事件處理程序包含有用來判斷該處理程序是否是服務(wù)xMI事件的適當(dāng)處理程序的第一部分代碼,如判斷框64提供的。這類典型的判斷包括詢問對(duì)應(yīng)于該事件處理程序的硬件組件、子系統(tǒng)等,查看對(duì)象是否發(fā)生錯(cuò)誤。如果錯(cuò)誤已經(jīng)發(fā)生,事件處理程序在方框65中被執(zhí)行完畢,于是在返回框66中,它再返回一個(gè)代碼至SMM核心,表示它已經(jīng)服務(wù)了xMI事件。如果事件處理程序判斷它的對(duì)應(yīng)設(shè)備沒有引起錯(cuò)誤,它也返回一個(gè)代碼至SMM核心表示這一點(diǎn),并且SMM核心調(diào)度列表中的下一個(gè)事件處理程序。該過程被重復(fù),直至適當(dāng)?shù)氖录幚沓绦虮粓?zhí)行。獲悉xMI事件被處理,SMM核心恢復(fù)機(jī)器狀態(tài),并且執(zhí)行對(duì)于該處理器/所有處理器適當(dāng)?shù)闹噶?對(duì)于IA32的RSM),以使處理器在方框67中返回至它(們)以前的處理模式。參考圖3,用于IA32處理器的EFISMM基礎(chǔ)協(xié)議驅(qū)動(dòng)程序(SMM_BASE)通過下面過程安裝。首先,在方框68中SMM_BASE::Initialize服務(wù)被調(diào)用。這是利用加載并輸出該構(gòu)造器的DXE(驅(qū)動(dòng)執(zhí)行環(huán)境)引導(dǎo)服務(wù)驅(qū)動(dòng)程序來實(shí)現(xiàn)的。對(duì)應(yīng)實(shí)例化驅(qū)動(dòng)程序,當(dāng)在保護(hù)模式中操作時(shí),用于SMM核心24的啟動(dòng)代碼在CPU缺省SMRAM地址處(0x3000段,偏移0x8000)被加載進(jìn)SMRAM。然后,在方框69中,處理器模式在執(zhí)行地址0x38000p處轉(zhuǎn)換為實(shí)模式。接著,在方框70中,用于平臺(tái)的SMRAM實(shí)現(xiàn)所允許的地址范圍被確定和分配。通過利用SMM_BASE::Initialize驅(qū)動(dòng)程序調(diào)用SMM_ACCESS::GetCapabilities和SMM_ACCESS::AcquireSmramRange方法可以得到該信息,如下所述。如果該驅(qū)動(dòng)程序不存在,則缺省策略將會(huì)是缺省大小(對(duì)于IA32是128千字節(jié)和對(duì)于ItaniumTM是256千字節(jié))的用于IA32處理器的0xA000段和用于ItaniumTM處理器的運(yùn)行時(shí)間數(shù)據(jù)。地址范圍被分配后,在方框71中SMM_ACCESS::Open服務(wù)被調(diào)用,并且在方框72中SMRAM的初始地址從缺省的CPU地址(0x38000p)被重新定位至平臺(tái)地址。被重定位的代碼將包括一個(gè)實(shí)模式組件和一個(gè)保護(hù)模式組件。實(shí)模式組件將包括進(jìn)入SMRAM重定位地址的SMMEntry。在方框73中,該代碼在必要的時(shí)候被執(zhí)行以完成任何遺留服務(wù),并將處理器切換為保護(hù)模式操作。然后,在方框74中控制權(quán)被交給SMM核心。如以上討論的,當(dāng)處理器以SMM運(yùn)行時(shí),SMM核心24負(fù)責(zé)協(xié)調(diào)活動(dòng)。圖4中用圖描述了SMM核心24提供的各種功能和服務(wù)。這些功能和服務(wù)包括同步對(duì)于多處理器配置的所有處理器、保存機(jī)器狀態(tài),包括需要時(shí)的浮點(diǎn)注冊(cè),以及清空緩存,如功能框75、76和78所提供的。SMM核心也提供了將處理器模式由實(shí)模式切換為保護(hù)模式的模式切換功能80,如以上參考方框73所討論的。模式切換功能80也能使能處理器的內(nèi)部緩存。SMM核心24提供的其他功能包括在SMRAM26中建立調(diào)用棧,維護(hù)處理程序列表以及依次調(diào)用處理程序,如功能框82、84和86所描述的。SMM核心24通過SMM庫28為各種事件處理程序提供一系列服務(wù),包括PCI和I/O服務(wù)30,內(nèi)存分配服務(wù)32和配置表注冊(cè)服務(wù)34。另外,SMM核心24還提供在xMI事件被服務(wù)之后被實(shí)施的若干功能。如果計(jì)算機(jī)系統(tǒng)實(shí)施了多處理器配置,這些處理器通過功能88被釋放。功能90還原處理器的機(jī)器狀態(tài),包括需要時(shí)的浮點(diǎn)注冊(cè)。最后,功能92用來在系統(tǒng)中所有處理器上執(zhí)行RMS指令。如以上討論的,本發(fā)明提供了加載事件處理程序的兩種機(jī)制(1)基于驅(qū)動(dòng)程序的安裝;和(2)從固件卷中自主加載。對(duì)于基于驅(qū)動(dòng)程序的安裝,通過DXE調(diào)度程序加載的驅(qū)動(dòng)程序?qū)惭bSMM_BASE協(xié)議。SMM_BASE協(xié)議被安裝后,公布一個(gè)使事件處理程序被注冊(cè)和加載的接口。注冊(cè)協(xié)議由EFI1.0說明書描述,它定義了一種在EFI環(huán)境中公布新的可調(diào)用的接口的機(jī)制。SMM_BASE協(xié)議公布實(shí)質(zhì)上包括用EFI核心揭示在SMM-CIS(描述EFI2.0協(xié)議或者在預(yù)引導(dǎo)空間中抽象這種注冊(cè)機(jī)制的API設(shè)置的EFI2.0文檔或者SMM“組件接口說明”)中描述的API。EFI核心維護(hù)GUID/接口指針對(duì)的協(xié)議數(shù)據(jù)庫。GUID包括接口的128位全球唯一ID。通過該機(jī)制,當(dāng)SMM_BASE協(xié)議被安裝后,希望安裝事件處理程序的任何驅(qū)動(dòng)程序都能應(yīng)用EFI1.0的標(biāo)準(zhǔn)機(jī)制來發(fā)現(xiàn)SMM_BASE協(xié)議實(shí)例(通過核心服務(wù)“定位協(xié)議(LocateProtocol)”)或者向要被使得處于待命狀態(tài)的EFI核心注冊(cè)通知,其中在一個(gè)實(shí)施例中,事件處理程序是某些代碼,可以是IA32或者ItaniumTM指令集中的PE32+二進(jìn)制代碼,或者是用于IA32的遺留16位處理程序代碼。任一情況下,一旦SMM_BASE協(xié)議被安裝,各種驅(qū)動(dòng)程序可以排列接口指針至SMM_BASE實(shí)例(通過EFI1.0“處理協(xié)議(HandleProtocol)服務(wù)”),然后調(diào)用SMM_BASE::Register服務(wù)。使用SMM_BASE服務(wù)的驅(qū)動(dòng)程序所用的二進(jìn)制代碼能從它自己的驅(qū)動(dòng)程序映像、來自磁盤的文件或者網(wǎng)絡(luò)來確定。文件可以在固件卷中或者在FAT磁盤分區(qū)上。通過SMM_BASE::Register服務(wù),事件處理程序的注冊(cè)更容易。該服務(wù)包括允許事件處理程序注冊(cè)的DXE引導(dǎo)服務(wù)驅(qū)動(dòng)程序。參考圖5,注冊(cè)事件處理程序的過程在方框100中開始,其中注冊(cè)事件處理程序的請(qǐng)求通過SMM_BASE協(xié)議驅(qū)動(dòng)程序從另一個(gè)引導(dǎo)服務(wù)驅(qū)動(dòng)程序或者應(yīng)用程序(即,驅(qū)動(dòng)程序1-7)被接收。作為響應(yīng),在方框102中,利用IPI或者SMM_CONTROL協(xié)議,SMI被產(chǎn)生。利用ESP內(nèi)存棧指針,自變量在內(nèi)存棧被傳送,似乎是調(diào)用另一處理程序。處理程序可以用C和生成的映像PE32+來編寫。接著,在方框104中進(jìn)行內(nèi)存重定位,并且ST(來自EFI1.0的系統(tǒng)表)指針被指向SMST(系統(tǒng)管理系統(tǒng)表)的指針替換。接著,在方框106中,用SMM_ACCESS::Open服務(wù),SMRAM被打開,它是通過SMM_ACCESS協(xié)議訪問。下面的附錄給出了SMM_ACCESS協(xié)議的進(jìn)一步的細(xì)節(jié)。SMM_ACCESS::Open服務(wù)從基于非SMRAM的代碼中抽象了內(nèi)存控制器的程序指令,實(shí)現(xiàn)了SMRAM可見性。這使得SMM_BASE協(xié)議能將代碼,例如SMM核心,復(fù)制和安裝進(jìn)SMRAM中。接著,在判斷框108中,判斷是否有足夠的SMRAM可用來容納事件處理例程。如果沒有足夠的SMRAM內(nèi)存空間是可用的,邏輯進(jìn)行到方框110,其中有一調(diào)用程序被使得處于待命狀態(tài)。作為一個(gè)選擇,響應(yīng)被使得處于待命狀態(tài),調(diào)用程序可以用SMM_ACCESS::GetCapabilities和SMM_ACCESS::AcquireSmramRange方法來獲得SMRAM中額外的內(nèi)存空間。如果沒有足夠的SMRAM內(nèi)存空間可用,在錯(cuò)誤返回框114中,通過調(diào)用SMM_ACCESS::Close方法,SMRAM被關(guān)閉,并且向調(diào)用程序返回一個(gè)錯(cuò)誤代碼。如果判斷為有足夠的SMRAM內(nèi)存空間可用,在方框116中,用于處理程序的SMRAM映像的內(nèi)存緩沖區(qū)被分配。在判斷框118中,判斷分配是否成功。如果分配沒有成功,邏輯進(jìn)行到錯(cuò)誤返回框114。如果分配成功,在方框120中,事件處理程序的映像被加載進(jìn)先前被分配的SMRAM內(nèi)存空間。然后在判斷框122中,判斷映像是否是有效的。如果不是,邏輯進(jìn)行到錯(cuò)誤返回框114。如果映像被驗(yàn)證是有效的,在方框124中,SMM核心24通過將其加入它的處理程序列表46中,注冊(cè)該新的事件處理程序,并且在返回框126中,SMRAM被關(guān)閉,過程返回到調(diào)用程序。從固件卷中自主加載事件處理程序的機(jī)制并不依賴于使另一個(gè)驅(qū)動(dòng)程序使用SMM_BASE接口和SMM_BASE::Register服務(wù)。不是使驅(qū)動(dòng)程序初始化注冊(cè)程序,而是在預(yù)引導(dǎo)過程中被具體化(materialize)的各種固件卷(FV)被掃描來找到包含有通過SMM_BASE驅(qū)動(dòng)程序加載的事件處理程序的適當(dāng)?shù)尿?qū)動(dòng)程序文件。固件卷是固件文件的集合。除了在固件文件頭中的其他元數(shù)據(jù),固件卷中的每一個(gè)固件文件都具有類型字段(TYPEfield)。一個(gè)被稱為“SmmHandler”的新類型被包括在固件文件頭內(nèi)的類型字段的列舉中。理解了固件卷和固件文件系統(tǒng),實(shí)現(xiàn)和公布SMM_BASE接口的所有驅(qū)動(dòng)程序都將知道ReadFile服務(wù)和這種新類型。參考圖6,該機(jī)制開始于方框130,其中SMM_BASE驅(qū)動(dòng)程序搜索預(yù)引導(dǎo)過程中在系統(tǒng)中被具體化的所有固件卷。如開始循環(huán)框和結(jié)束循環(huán)框132和134定義的,下面的邏輯被應(yīng)用于這些固件卷的其中每一個(gè)。在判斷框136中,判斷固件卷是否包括任何與固件文件系統(tǒng)一致的固件文件。如果答案是“否”,邏輯循環(huán)返回檢測下一個(gè)固件卷。如果找到了一個(gè)或者多個(gè)一致的固件文件,利用下面的過程,這些文件的其中每一個(gè)都被檢測,如開始循環(huán)框和結(jié)束循環(huán)框138和140定義的。在判斷框142中,SMM_BASE驅(qū)動(dòng)程序檢測當(dāng)前文件的文件類型,以確定它是否是“SMMHandle”文件。如果不是,邏輯循環(huán)返回開始下一個(gè)文件的檢測。如果文件類型是“SMMHandler”,在方框144中,SMM_BASE驅(qū)動(dòng)程序分解固件文件節(jié)(section);節(jié)是固件文件內(nèi)的內(nèi)部打包機(jī)制。如方框146所提供的,如果一個(gè)節(jié)包含有PE32+可執(zhí)行的映像,或者,如果SMM_BASE的實(shí)現(xiàn)是在支持加載遺留16位處理程序的IA32系統(tǒng)上,則在方框146中,SMM_BASE驅(qū)動(dòng)程序?qū)惭b包含在節(jié)中的可執(zhí)行映像或者遺留16位處理程序,其中PE32+是微軟在可移動(dòng)映像(PortableImage)說明(于“www.microsoft.com/hwdev/efi”張貼在互聯(lián)網(wǎng)上)中描述的可移動(dòng)可執(zhí)行映像類型,它與實(shí)現(xiàn)SMM_BASE的機(jī)器類型是相同的(例如,計(jì)算機(jī)系統(tǒng)是IA32機(jī)器并且處理程序是IA32PE32+映像)。然后,邏輯以類似方式繼續(xù)處理隨后的固件文件和固件卷。一般,當(dāng)從固件文件中自主加載處理程序時(shí),SMM_BASE將假定以上提出的用于SMM_BASE::Register的自變量具有缺省值,例如浮點(diǎn)保存和MakeFirst==FALSE。一般,處理IA32處理器的SMI和Itanium類處理器的PMI包括類似過程。然而,也存在著一些區(qū)別。二者之間一個(gè)主要的區(qū)別是ItaniumTM處理器沒有響應(yīng)它的xMI信號(hào)觸發(fā)而進(jìn)入的專用CPU模式。相反地,ItaniumTM處理器僅僅提供一種將處理程序綁定進(jìn)處理器的機(jī)制以處理PMI事件。這種綁定通過進(jìn)入處理器抽象層(PAL)的注冊(cè)調(diào)用來實(shí)現(xiàn),其中PAL是Intel為所有Itanium平臺(tái)構(gòu)建器提供的固件,包括用來提供一致的固件接口以抽象處理器實(shí)現(xiàn)特定(processorimplementation-specific)的特征的Itanium結(jié)構(gòu)的一部分。圖7和圖8示出了用ItaniumTM處理器注冊(cè)處理程序和處理PMI事件的細(xì)節(jié)。注冊(cè)過程在方框148中開始,其中EFI2.0SMM_BASE驅(qū)動(dòng)程序加載64位版本的SMM核心。一旦加載了SMM核心,在方框150中,EFI用內(nèi)存中的Nub的被加載映像調(diào)用PAL_PMI_ENTRYPOINT服務(wù),該服務(wù)創(chuàng)建了進(jìn)入Nub代碼的入口點(diǎn)。在初始化過程中,PAL公布一系列被稱為PAL_PROCS的服務(wù)。然后,這些PAL_ROCS中的一個(gè)被用于向適當(dāng)?shù)奶幚砥魈囟?processor-specific)的資源,例如處理器的模型特定(processor’smodel-specific)的寄存器(MSR)注冊(cè)入口點(diǎn)。由此,入口點(diǎn)的注冊(cè)創(chuàng)建了處理器和通過SMM核心被訪問的一系列PMI事件處理程序之間的綁定。參考圖8,PMI事件處理于是可以如下進(jìn)行。在方框154中,PAL_PMI事件處理程序接收PMI事件。然后,在方框155中,PAL_PMI事件處理程序調(diào)用SMM核心24,使得被選定執(zhí)行可擴(kuò)展PMI事件處理的處理器的處理被引導(dǎo)至以上已被注冊(cè)的Nub入口點(diǎn)。在判斷框156中,判斷系統(tǒng)是否是多處理器系統(tǒng)。如果答案為“是”,在方框157中所有處理器被會(huì)合,由此,當(dāng)被選定的處理器中的SMM核心被執(zhí)行時(shí),除了被選定的處理器(例如,預(yù)引導(dǎo)過程中被識(shí)別的第一處理器),所有處理器都被停止。然后,在方框158中,各CPU的機(jī)器狀態(tài)被CPU硬件和SMM核心24兩者保存。一旦處理器的機(jī)器狀態(tài)已經(jīng)被保存,本機(jī)64位處理程序被依次調(diào)用直至適當(dāng)?shù)氖录幚沓绦虮粓?zhí)行完畢來服務(wù)PMI事件,如開始循環(huán)框和結(jié)束循環(huán)框162和163所提供的。如前所述,在一個(gè)實(shí)施例中,事件處理程序被保存為從頭到尾依次被游歷的鏈表,其中第一個(gè)事件處理程序被調(diào)度,另外的事件處理程序根據(jù)需要而被調(diào)度。各事件處理程序包含有用來判斷該處理程序是否是服務(wù)xMI事件的適當(dāng)處理程序的第一部分代碼,如判斷框164提供的,該判斷一般包括以前面討論過的方式詢問相應(yīng)的硬件組件。如果當(dāng)前被執(zhí)行的事件處理程序被判斷為是適當(dāng)?shù)奶幚沓绦?,則在方框165中該處理程序被執(zhí)行完畢,于是,在返回框166中它返回一個(gè)代碼至SMM核心,表示已經(jīng)服務(wù)了PMI事件。如果事件處理程序判斷它不是適當(dāng)?shù)腜MI事件的處理程序,它也返回一個(gè)代碼至SMM核心表達(dá)這一點(diǎn),并且SMM核心調(diào)度列表中的下一個(gè)事件處理程序。以類似于前面討論的SMI事件處理的方式,該過程被重復(fù)直至適當(dāng)?shù)氖录幚沓绦虮粓?zhí)行。獲悉PMI事件被處理,SMM核心恢復(fù)機(jī)器狀態(tài),并且執(zhí)行對(duì)于處理器/所有處理器適當(dāng)?shù)闹噶?RSM),以使處理器在方框167中返回至它(們)以前的處理模式。實(shí)現(xiàn)本發(fā)明的示例機(jī)器參考圖9,與實(shí)踐本發(fā)明相關(guān)的適于使用的一般傳統(tǒng)個(gè)人計(jì)算機(jī)200被舉例說明。本發(fā)明的分布式平臺(tái)固件結(jié)構(gòu)也可以以類似方式在工作站、膝上型電腦和計(jì)算機(jī)服務(wù)器上實(shí)現(xiàn)。個(gè)人計(jì)算機(jī)200包括處理器機(jī)箱202,其中安裝有軟盤驅(qū)動(dòng)器204、硬盤驅(qū)動(dòng)器206、板上組裝了包含有一個(gè)或者多個(gè)微處理器和存儲(chǔ)器模塊(二者都未示出)的適當(dāng)集成電路的主板208以及電源(也未示出),如本領(lǐng)域的普通技術(shù)人員一般公知的。主板208還包括保存了BIOS固件基礎(chǔ)部分的本地固件存儲(chǔ)設(shè)備210(例如,閃爍電可擦除只讀存儲(chǔ)器(flashEEPROM))。為了方便訪問通過網(wǎng)絡(luò)214從遠(yuǎn)程固件存儲(chǔ)設(shè)備212檢索到的BIOS固件部分,個(gè)人計(jì)算機(jī)200包括一個(gè)網(wǎng)絡(luò)接口卡216或者集成在主板208中的等價(jià)電路。網(wǎng)絡(luò)214可以包括局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)和/或者互聯(lián)網(wǎng),并且可以提供個(gè)人計(jì)算機(jī)200和遠(yuǎn)程固件存儲(chǔ)設(shè)備212之間的有線或者無線連接。該機(jī)器還包括顯示器218,用于顯示由個(gè)人計(jì)算機(jī)運(yùn)行的軟件程序所產(chǎn)生的以及在上電自檢和其他方式的固件加載/執(zhí)行的過程中通常會(huì)顯示的圖像和文本。鼠標(biāo)220(或者其他指點(diǎn)設(shè)備)被連接至處理器機(jī)箱202背面的串口(或總線端口),發(fā)自鼠標(biāo)220的信號(hào)被傳輸至主板208以控制顯示屏上的光標(biāo),以及選擇通過在個(gè)人計(jì)算機(jī)上執(zhí)行的軟件程序而顯示在顯示器218上的文本、菜單項(xiàng)和圖像成分。另外,鍵盤222被耦聯(lián)至主板,以使用戶輸入影響在個(gè)人計(jì)算機(jī)上執(zhí)行的軟件程序的運(yùn)行的文本和命令。個(gè)人計(jì)算機(jī)200也可選擇地包括光盤只讀存儲(chǔ)(CD-ROM)驅(qū)動(dòng)器224,CD-ROM盤可以插入其中,使得盤上的可執(zhí)行文件和數(shù)據(jù)能夠被讀出,以傳輸至個(gè)人計(jì)算機(jī)200的內(nèi)存和/或者硬盤驅(qū)動(dòng)器206上的存儲(chǔ)器里。如果基礎(chǔ)BIOS固件被保存在可重寫設(shè)備上,例如flashEEPROM,更新BIOS固件基礎(chǔ)部分的機(jī)器指令可以保存在CD-ROM盤上或者軟盤上,由計(jì)算機(jī)的處理器讀出并處理,以重寫保存在flashEEPROM上的BIOS固件??筛碌腂IOS固件也可以通過網(wǎng)絡(luò)214加載。雖然本發(fā)明是結(jié)合實(shí)踐它的優(yōu)選方式和對(duì)其的修改來描述的,但是本領(lǐng)域的普通技術(shù)人員應(yīng)理解,可以對(duì)本發(fā)明進(jìn)行許多其他的在所附權(quán)利要求范圍內(nèi)的修改。所以,并不意味著本發(fā)明的范圍是由以上的描述以任何方式來限定的,而是完全根據(jù)所附的權(quán)利要求來決定。附錄用于IA32的SMM_ACCESS協(xié)議SMM_ACCESS協(xié)議被芯片組驅(qū)動(dòng)程序,即82815芯片組的MCH驅(qū)動(dòng)程序公布。該驅(qū)動(dòng)程序抽象了內(nèi)存控制器開、關(guān)和鎖定SMRAM的能力。它還描述了用于SMRAM的可能區(qū)域,包括在0xA000處的遺留幀緩沖區(qū)的定位以及在物理DRAM(T-SEG)頂部附近的內(nèi)存的定位。SMM_ACCESS協(xié)議的構(gòu)造器應(yīng)在ExitBootServices上注冊(cè)一個(gè)回調(diào)(call-back)。SMM_ACCESS協(xié)議提供了以下功能SMM_ACCESS::Open該服務(wù)從基于非SMRAM的代碼中抽象了內(nèi)存控制器的程序指令,實(shí)現(xiàn)了SMRAM可見性。這使得SMM_BASE協(xié)議能將代碼,例如SMM核心,復(fù)制和安裝進(jìn)SMRAM中。SMM_ACCESS::Close該服務(wù)從基于非SMRAM的代碼中抽象了內(nèi)存控制器的程序指令,禁止了SMRAM可見性。這使得SMM_BASE協(xié)議能阻止其他預(yù)引導(dǎo)代理查看基于SMRAM的內(nèi)容。SMM_ACCESS::Lock該服務(wù)抽象了保SMRAM安全的硬件能力,以使以后的嘗試不能成功開啟該區(qū)域的可見性。SMM_ACCESS::GetCapabilities該調(diào)用為調(diào)用程序提供了可被用作SMRAM可用內(nèi)存區(qū)域,其中調(diào)用程序很可能是SMM_BASE驅(qū)動(dòng)程序。這是一個(gè)公布信息的只讀報(bào)告服務(wù)。SMRAM中導(dǎo)致對(duì)這種存儲(chǔ)解碼的芯片組程序指令以及該區(qū)域的聲明,通過獲得所指的區(qū)域(見下一服務(wù))而生效。SMM_ACCESS::AcquireSmramRange該服務(wù)提供了兩種類型的功能。第一個(gè)是它是EFI2.0引導(dǎo)服務(wù)的調(diào)用程序可見的資源管理數(shù)據(jù)庫。平臺(tái)中可用的SMRAM的可能區(qū)域被GetCapabilities的服務(wù)SMRAM映射公布,并且該區(qū)域是可以被該服務(wù)請(qǐng)求使能的映射。該請(qǐng)求至少包括對(duì)驅(qū)動(dòng)程序的所有權(quán)的更新,但是該調(diào)用還需要實(shí)際上使請(qǐng)求方式有效的芯片組程序指令。SMM_ACCESS::ReleaseSmramRange該服務(wù)提供了兩種類型的功能。該請(qǐng)求至少包括釋放區(qū)域所有權(quán)的對(duì)驅(qū)動(dòng)程序的更新,但是該調(diào)用還需要實(shí)際上使請(qǐng)求方式無效的芯片組程序指令。權(quán)利要求1.一種用于擴(kuò)展計(jì)算機(jī)系統(tǒng)中的處理器的被隱藏的執(zhí)行和存儲(chǔ)模式的方法,包括提供一種使事件處理程序能夠被加載進(jìn)被隱藏的內(nèi)存空間中的機(jī)制,所述事件處理程序沒有被保存在所述計(jì)算機(jī)系統(tǒng)的原始設(shè)備制造商提供的一組原始固件中,所述被隱藏的內(nèi)存空間對(duì)于所述被隱藏的執(zhí)行和存儲(chǔ)模式是可訪問的,但是對(duì)于所述處理器的其他操作模式是不可訪問的;和響應(yīng)引起所述處理器被切換為所述被隱藏的執(zhí)行和存儲(chǔ)模式的事件,執(zhí)行所述事件處理程序,以服務(wù)所述事件。2.如權(quán)利要求1所述的方法,其中,所述被隱藏的執(zhí)行和存儲(chǔ)模式包括微處理器的系統(tǒng)管理模式(SMM)。3.如權(quán)利要求1所述的方法,其中,使能所述事件處理程序的加載和執(zhí)行的所述機(jī)制包括提供一個(gè)被抽象的接口,所述接口使得對(duì)應(yīng)于被保存在任何其中保存有所述一組原始固件的組件外部的事件處理程序的一組機(jī)器代碼能夠被加載進(jìn)所述被隱藏的內(nèi)存空間;當(dāng)所述處理器在所述被隱藏的執(zhí)行和存儲(chǔ)模式中運(yùn)行時(shí),將所述處理器的指令指針重定向,以執(zhí)行所述這組機(jī)器代碼來服務(wù)所述事件。4.如權(quán)利要求3所述的方法,其中,被抽象的接口是在所述計(jì)算機(jī)系統(tǒng)的預(yù)引導(dǎo)過程中被公布的,以使驅(qū)動(dòng)程序能夠在加載所述計(jì)算機(jī)系統(tǒng)的操作系統(tǒng)之前加載對(duì)應(yīng)于所述事件處理程序的所述這組機(jī)器代碼。5.如權(quán)利要求1所述的方法,其中,使能所述事件處理程序的加載的所述機(jī)制包括掃描在所述計(jì)算機(jī)系統(tǒng)的預(yù)引導(dǎo)過程中被具體化的任何固件卷,以識(shí)別包含與所述處理器的所述被隱藏的執(zhí)行和存儲(chǔ)模式兼容的事件處理程序的任何固件文件的存在;將所述事件處理程序加載進(jìn)所述被隱藏的內(nèi)存空間;當(dāng)所述處理器在所述被隱藏的執(zhí)行和存儲(chǔ)模式中運(yùn)行時(shí),將所述處理器的指令指針重定向,以執(zhí)行所述事件處理程序來服務(wù)所述事件。6.如權(quán)利要求1所述的方法,還包括將事件處理程序管理服務(wù)加載進(jìn)所述被隱藏的內(nèi)存存儲(chǔ)空間;向所述事件處理管理服務(wù)注冊(cè)一個(gè)或者多個(gè)事件處理程序;將所述的一個(gè)或者多個(gè)事件處理程序加載進(jìn)所述被隱藏的內(nèi)存空間;響應(yīng)引起所述處理器被切換到所述被隱藏的執(zhí)行和存儲(chǔ)模式的事件,將所述處理器的指令指針重定向,以開始所述事件處理程序管理服務(wù)的執(zhí)行;和通過所述事件處理程序管理服務(wù)調(diào)度事件處理程序,以服務(wù)所述事件。7.如權(quán)利要求6所述的方法,其中,多個(gè)事件處理程序向所述事件處理管理服務(wù)注冊(cè),并被加載進(jìn)所述被隱藏的內(nèi)存空間,還包括創(chuàng)建所述多個(gè)事件處理程序的有序列表;調(diào)度第一個(gè)事件處理程序;判斷所述第一個(gè)事件處理程序是否是服務(wù)所述事件的適當(dāng)?shù)氖录幚沓绦?,如果是,則將所述第一個(gè)事件處理程序執(zhí)行完畢,以服務(wù)所述事件;否則調(diào)度所述列表中的下一個(gè)事件處理程序,并且判斷該事件處理程序是否是適當(dāng)?shù)氖录幚沓绦?,重?fù)該功能直至適當(dāng)?shù)氖录幚沓绦虮徽{(diào)度,由此該事件處理程序被執(zhí)行完畢,以服務(wù)所述事件。8.如權(quán)利要求7所述的方法,其中,所述的多個(gè)事件處理程序中的每一個(gè)包括一組被所述處理器執(zhí)行的機(jī)器代碼,以服務(wù)引起所述事件的計(jì)算機(jī)系統(tǒng)中的硬件組件所產(chǎn)生的錯(cuò)誤狀態(tài),和判斷事件處理程序是否是服務(wù)所述事件的適當(dāng)?shù)氖录幚沓绦?,包括?zhí)行對(duì)應(yīng)于最近被調(diào)度的事件處理程序的所述這組機(jī)器代碼的第一部分,所述這組機(jī)器代碼的第一部分詢問對(duì)應(yīng)于該事件處理程序的硬件組件,以判斷所述錯(cuò)誤狀態(tài)是否是由該硬件組件引起的;和如果判斷出所述錯(cuò)誤狀態(tài)是由其對(duì)應(yīng)的硬件組件引起的,則完成所述事件處理程序的所述這組機(jī)器代碼的執(zhí)行,否則返回一個(gè)值至所述事件處理程序管理服務(wù),表示該事件處理程序不是服務(wù)所述錯(cuò)誤狀態(tài)的適當(dāng)?shù)氖录幚沓绦颉?.如權(quán)利要求6所述的方法,還包括在所述事件處理程序被加載進(jìn)所述被隱藏的內(nèi)存空間之前對(duì)其進(jìn)行驗(yàn)證。10.如權(quán)利要求6所述的方法,其中,所述一組原始固件包括一個(gè)或者多個(gè)遺留事件處理程序,還包括向所述事件處理管理服務(wù)注冊(cè)所述的一個(gè)或者多個(gè)遺留事件處理程序;將所述的一個(gè)或者多個(gè)遺留事件處理程序加載進(jìn)可以被所述被隱藏的執(zhí)行和存儲(chǔ)模式訪問的所述被隱藏的內(nèi)存空間;和通過所述事件處理程序管理服務(wù),調(diào)度所述的一個(gè)或者多個(gè)遺留事件處理程序中的至少一個(gè),以服務(wù)所述事件。11.如權(quán)利要求6所述的方法,其中,所述計(jì)算機(jī)系統(tǒng)包括多個(gè)處理器,還包括將所述事件處理程序管理服務(wù)加載進(jìn)所述的多個(gè)處理器中被選定的一個(gè)處理器;響應(yīng)所述事件,使所述被選定的處理器開始執(zhí)行所述事件處理程序管理服務(wù);在執(zhí)行所述事件處理程序管理服務(wù)的過程中,同步除了所述被選定的處理器之外的其他所有所述的多個(gè)處理器,并且停止這些其他處理器中的每一個(gè)的各自當(dāng)前操作的執(zhí)行;在所述事件被適當(dāng)?shù)氖录幚沓绦蚍?wù)之后,將所有所述的多個(gè)處理器返回至以前的處理模式,以恢復(fù)它們各自操作的執(zhí)行。12.如權(quán)利要求1所述的方法,還包括在適當(dāng)?shù)臅r(shí)候,響應(yīng)所述事件而使作為機(jī)器代碼保存在所述一組原始固件中的任何的遺留事件處理程序能夠被執(zhí)行,以服務(wù)所述事件。13.一種用于擴(kuò)展計(jì)算機(jī)系統(tǒng)中的微處理器的系統(tǒng)管理模式(SMM)的方法,包括在所述計(jì)算機(jī)系統(tǒng)的預(yù)引導(dǎo)過程中,公布一個(gè)接口使得被保存在其中保存有一組原始固件的組件的外部的驅(qū)動(dòng)程序能夠提供一組包括被加載進(jìn)系統(tǒng)管理模式內(nèi)存(SMRAM)中的事件處理程序的機(jī)器代碼,所述系統(tǒng)管理模式內(nèi)存在系統(tǒng)管理模式中對(duì)于所述微處理器是可訪問的;響應(yīng)系統(tǒng)管理模式觸發(fā)事件,將所述微處理器切換為系統(tǒng)管理模式;和執(zhí)行所述事件處理程序以服務(wù)系統(tǒng)管理模式觸發(fā)事件。14.如權(quán)利要求13所述的方法,還包括將事件處理程序管理服務(wù)加載進(jìn)系統(tǒng)管理模式內(nèi)存;向所述事件處理管理服務(wù)注冊(cè)一個(gè)或者多個(gè)事件處理程序;將所述的一個(gè)或者多個(gè)事件處理程序加載進(jìn)系統(tǒng)管理模式內(nèi)存;響應(yīng)系統(tǒng)管理模式觸發(fā)事件,將所述微處理器的指令指針重定向,以開始所述事件處理程序管理服務(wù)的執(zhí)行;和通過所述事件處理程序管理服務(wù)調(diào)度事件處理程序,以服務(wù)所述事件。15.如權(quán)利要求14所述的方法,其中,多個(gè)事件處理程序被向所述事件處理管理服務(wù)注冊(cè),并被加載進(jìn)系統(tǒng)管理模式內(nèi)存,還包括創(chuàng)建所述多個(gè)事件處理程序的有序列表;調(diào)度第一個(gè)事件處理程序;判斷所述第一個(gè)事件處理程序是否是服務(wù)系統(tǒng)管理模式觸發(fā)事件的適當(dāng)?shù)氖录幚沓绦?,如果是,則將所述第一個(gè)事件處理程序執(zhí)行完畢,以服務(wù)所述事件;否則調(diào)度所述列表中的下一個(gè)事件處理程序,并且判斷該事件處理程序是否是服務(wù)系統(tǒng)管理模式觸發(fā)事件的適當(dāng)?shù)氖录幚沓绦?,重?fù)該功能直至適當(dāng)?shù)氖录幚沓绦虮徽{(diào)度,由此該事件處理程序被執(zhí)行完畢,以服務(wù)該系統(tǒng)管理模式觸發(fā)事件。16.如權(quán)利要求14所述的方法,還包括在所述事件處理程序被加載進(jìn)系統(tǒng)管理模式內(nèi)存之前對(duì)其進(jìn)行驗(yàn)證。17.如權(quán)利要求14所述的方法,其中,所述一組原始固件包括一個(gè)或者多個(gè)遺留事件處理程序,還包括向事件處理管理服務(wù)注冊(cè)所述的一個(gè)或者多個(gè)遺留事件處理程序;將所述的一個(gè)或者多個(gè)遺留事件處理程序加載進(jìn)系統(tǒng)管理模式內(nèi)存;和通過事件處理程序管理服務(wù),調(diào)度所述的一個(gè)或者多個(gè)遺留事件處理程序中的至少一個(gè),以服務(wù)對(duì)應(yīng)于系統(tǒng)管理模式觸發(fā)事件的遺留事件。18.如權(quán)利要求13所述的方法,還包括掃描在所述計(jì)算機(jī)系統(tǒng)的預(yù)引導(dǎo)過程中被具體化的任何固件卷,以識(shí)別包含與所述微處理器的系統(tǒng)管理模式兼容的事件處理程序的任何固件文件的存在;將所述事件處理程序加載進(jìn)系統(tǒng)管理模式內(nèi)存;以及執(zhí)行所述事件處理程序,以服務(wù)所述系統(tǒng)管理模式觸發(fā)事件。19.一種處理處理器中的平臺(tái)管理中斷(PMI)的方法,包括將平臺(tái)管理中斷事件處理管理服務(wù)加載進(jìn)所述處理器可訪問的內(nèi)存;為所述平臺(tái)管理中斷事件處理管理服務(wù)注冊(cè)入口點(diǎn);通過所述平臺(tái)管理中斷事件處理管理服務(wù)使得一個(gè)或者多個(gè)平臺(tái)管理中斷事件處理程序成為所述處理器可訪問的;和響應(yīng)所述平臺(tái)管理中斷事件,引導(dǎo)所述處理器在其入口點(diǎn)開始執(zhí)行所述平臺(tái)管理中斷事件處理管理服務(wù),其中,所述平臺(tái)管理中斷事件處理管理服務(wù)的執(zhí)行完成了以下功能調(diào)度所述的一個(gè)或者多個(gè)平臺(tái)管理中斷事件處理程序中的至少一個(gè),以服務(wù)平臺(tái)管理中斷事件。20.如權(quán)利要求19所述的方法,其中,通過公布使能平臺(tái)管理中斷事件處理程序向所述平臺(tái)管理中斷事件處理管理服務(wù)注冊(cè)的注冊(cè)接口,所述的一個(gè)或者多個(gè)平臺(tái)管理中斷事件處理程序成為所述平臺(tái)管理中斷事件處理管理服務(wù)可訪問的。21.如權(quán)利要求20所述的方法,其中,多個(gè)事件處理程序向所述平臺(tái)管理中斷事件處理管理服務(wù)注冊(cè),還包括創(chuàng)建所述的多個(gè)事件處理程序的有序列表;調(diào)度第一個(gè)事件處理程序;判斷所述第一個(gè)事件處理程序是否是服務(wù)所述平臺(tái)管理中斷事件的適當(dāng)?shù)氖录幚沓绦?,如果是,則將所述第一個(gè)事件處理程序執(zhí)行完畢,以服務(wù)所述事件;否則調(diào)度所述列表中的下一個(gè)事件處理程序,并且判斷該事件處理程序是否是服務(wù)所述平臺(tái)管理中斷事件的適當(dāng)?shù)氖录幚沓绦?,重?fù)該功能直至適當(dāng)?shù)氖录幚沓绦虮徽{(diào)度,由此該事件處理程序被執(zhí)行完畢,以服務(wù)所述平臺(tái)管理中斷事件。22.如權(quán)利要求19所述的方法,其中,所述計(jì)算機(jī)系統(tǒng)包括多個(gè)處理器,還包括將所述平臺(tái)管理中斷事件處理程序管理服務(wù)加載進(jìn)所述的多個(gè)處理器中的被選定的一個(gè)處理器;響應(yīng)所述事件,使所述被選定的處理器開始執(zhí)行所述平臺(tái)管理中斷事件處理程序管理服務(wù);在執(zhí)行所述事件處理程序管理服務(wù)的過程中,同步除了所述被選定的處理器之外的其他所有所述的多個(gè)處理器,并且停止這些其他處理器中的每一個(gè)的各自當(dāng)前操作的執(zhí)行;在所述平臺(tái)管理中斷事件被適當(dāng)?shù)氖录幚沓绦蚍?wù)之后,將所有所述的多個(gè)處理器返回至以前的處理模式,以恢復(fù)它們各自操作的執(zhí)行。23.一種機(jī)器可讀的介質(zhì),具有多個(gè)保存在其上的機(jī)器指令,當(dāng)在計(jì)算機(jī)系統(tǒng)中被處理器執(zhí)行時(shí),進(jìn)行下面的操作提供一種使事件處理程序能夠被加載進(jìn)被隱藏的內(nèi)存空間中的機(jī)制,所述事件處理程序沒有被保存在所述計(jì)算機(jī)系統(tǒng)的原始設(shè)備制造商提供的一組原始固件中,所述被隱藏的內(nèi)存空間對(duì)于所述處理器的被隱藏的執(zhí)行和存儲(chǔ)模式是可訪問的,但是對(duì)于所述處理器的其他操作模式是不可訪問的;和響應(yīng)引起所述處理器被切換為所述被隱藏的執(zhí)行和存儲(chǔ)模式的事件,執(zhí)行所述事件處理程序,以服務(wù)所述事件。24.如權(quán)利要求23所述的機(jī)器可讀的介質(zhì),其中,使能所述事件處理程序的加載和執(zhí)行的所述機(jī)制包括提供一個(gè)被抽象的接口,所述接口使得對(duì)應(yīng)于被保存在任何其中保存有所述一組原始固件的組件外部的事件處理程序的一組機(jī)器代碼能夠被加載進(jìn)所述被隱藏的內(nèi)存空間;當(dāng)所述處理器在所述被隱藏的執(zhí)行和存儲(chǔ)模式中運(yùn)行時(shí),將所述處理器的指令指針重定向,以執(zhí)行所述這組機(jī)器代碼來服務(wù)所述事件。25.如權(quán)利要求23所述的機(jī)器可讀的介質(zhì),其中,使能所述事件處理程序的加載和執(zhí)行的所述機(jī)制包括掃描在所述計(jì)算機(jī)系統(tǒng)的預(yù)引導(dǎo)過程中被具體化的任何固件卷,以識(shí)別包含與所述處理器的所述被隱藏的執(zhí)行和存儲(chǔ)模式兼容的事件處理程序的任何固件文件的存在;將所述事件處理程序加載進(jìn)所述被隱藏的內(nèi)存空間;當(dāng)所述處理器在所述被隱藏的執(zhí)行和存儲(chǔ)模式中運(yùn)行時(shí),將所述處理器的指令指針重定向,以執(zhí)行所述事件處理程序來服務(wù)所述事件。26.如權(quán)利要求23所述的機(jī)器可讀的介質(zhì),其中,所述的多個(gè)機(jī)器指令的執(zhí)行還進(jìn)行下面的操作將事件處理程序管理服務(wù)加載進(jìn)所述被隱藏的內(nèi)存空間;向所述事件處理管理服務(wù)注冊(cè)一個(gè)或者多個(gè)事件處理程序;將所述的一個(gè)或者多個(gè)事件處理程序加載進(jìn)所述被隱藏的內(nèi)存空間;響應(yīng)引起所述處理器被切換到所述被隱藏的執(zhí)行和存儲(chǔ)模式的事件,將所述處理器的指令指針重定向,以開始所述事件處理程序管理服務(wù)的執(zhí)行;和通過所述事件處理程序管理服務(wù)調(diào)度事件處理程序,以服務(wù)所述事件。27.如權(quán)利要求26所述的機(jī)器可讀的介質(zhì),其中,多個(gè)事件處理程序向所述事件處理管理服務(wù)注冊(cè),并被加載進(jìn)所述被隱藏的內(nèi)存空間,并且所述的多個(gè)機(jī)器指令的執(zhí)行還進(jìn)行下面的操作創(chuàng)建所述多個(gè)事件處理程序的有序列表;調(diào)度第一個(gè)事件處理程序;判斷所述第一個(gè)事件處理程序是否是服務(wù)所述事件的適當(dāng)?shù)氖录幚沓绦?,如果是,則將所述第一個(gè)事件處理程序執(zhí)行完畢,以服務(wù)所述事件;否則調(diào)度所述列表中的下一個(gè)事件處理程序,并且判斷該事件處理程序是否是適當(dāng)?shù)氖录幚沓绦?,重?fù)該功能直至適當(dāng)?shù)氖录幚沓绦虮徽{(diào)度,由此該事件處理程序被執(zhí)行完畢,以服務(wù)所述事件。28.一種計(jì)算機(jī)系統(tǒng),包括在其上保存有一組原始固件的主板;被可操作地耦聯(lián)至所述主板,其中保存有多個(gè)機(jī)器指令的內(nèi)存;和與內(nèi)存連接的處理器,用于執(zhí)行機(jī)器指令以進(jìn)行下面的操作提供一種使事件處理程序能夠被加載進(jìn)被隱藏的內(nèi)存空間中的機(jī)制,所述事件處理程序沒有被保存在所述計(jì)算機(jī)系統(tǒng)的原始設(shè)備制造商提供的一組原始固件中,所述被隱藏的內(nèi)存空間對(duì)于所述處理器的被隱藏的執(zhí)行和存儲(chǔ)模式是可訪問的,但是對(duì)于所述處理器的其他操作模式是不可訪問的;和響應(yīng)引起所述處理器被切換為所述被隱藏的執(zhí)行和存儲(chǔ)模式的事件,執(zhí)行所述事件處理程序,以服務(wù)所述事件。29.如權(quán)利要求28所述的計(jì)算機(jī)系統(tǒng),其中,使能所述事件處理程序的加載和執(zhí)行的所述機(jī)制包括提供一個(gè)被抽象的接口,所述接口使得對(duì)應(yīng)于被保存在任何其中保存有所述一組原始固件的組件外部的事件處理程序的一組機(jī)器代碼能夠被加載進(jìn)所述被隱藏的內(nèi)存空間;當(dāng)所述處理器在所述被隱藏的執(zhí)行和存儲(chǔ)模式中運(yùn)行時(shí),將所述處理器的指令指針重定向,以執(zhí)行所述這組機(jī)器代碼來服務(wù)所述事件。30.如權(quán)利要求28所述的計(jì)算機(jī)系統(tǒng),其中,使能所述事件處理程序的加載和執(zhí)行的所述機(jī)制包括掃描在所述計(jì)算機(jī)系統(tǒng)的預(yù)引導(dǎo)過程中被具體化的任何固件卷,以識(shí)別包含與所述處理器的所述被隱藏的執(zhí)行和存儲(chǔ)模式兼容的事件處理程序的任何固件文件的存在;將所述事件處理程序加載進(jìn)所述被隱藏的內(nèi)存空間;當(dāng)所述處理器在所述被隱藏的執(zhí)行和存儲(chǔ)模式中運(yùn)行時(shí),將所述處理器的指令指針重定向,以執(zhí)行所述事件處理程序來服務(wù)所述事件。全文摘要本發(fā)明公開了一種使以一個(gè)或者多個(gè)軟件驅(qū)動(dòng)程序或者固件卷方式的可執(zhí)行內(nèi)容能夠被加載進(jìn)微處理器的系統(tǒng)管理模式(SMM)或者基于Itanium處理器的本機(jī)模式的方法和系統(tǒng)。該機(jī)制允許可能由不同方編寫的多個(gè)驅(qū)動(dòng)程序被安裝用于這些操作。一個(gè)注冊(cè)由驅(qū)動(dòng)程序提供的事件處理程序的代理在EFI引導(dǎo)服務(wù)模式中運(yùn)行,它由綁定了驅(qū)動(dòng)程序的CPU特定的組件和抽象對(duì)應(yīng)事件觸發(fā)條件的xMI(PMI或者SMI)信號(hào)的芯片組控制的平臺(tái)組件組成。從而,通過除了OEM之外的其他方編寫的附加驅(qū)動(dòng)程序,各種處理器的SMM模式和Itanium處理器的本機(jī)模式的功能能夠從系統(tǒng)的BIOS廠商的計(jì)算機(jī)系統(tǒng)被擴(kuò)展。文檔編號(hào)G06F9/48GK1636190SQ02809670公開日2005年7月6日申請(qǐng)日期2002年5月9日優(yōu)先權(quán)日2001年5月11日發(fā)明者文森特·齊默申請(qǐng)人:英特爾公司