国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于pmi和smi的調(diào)度執(zhí)行框架中用于并發(fā)處理程序執(zhí)行的方法和系統(tǒng)的制作方法

      文檔序號(hào):6431626閱讀:322來(lái)源:國(guó)知局

      專利名稱::基于pmi和smi的調(diào)度執(zhí)行框架中用于并發(fā)處理程序執(zhí)行的方法和系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      :本發(fā)明一般地涉及計(jì)算機(jī)系統(tǒng),更具體地說(shuō),涉及用于擴(kuò)展處理器的系統(tǒng)管理模式(SMM)和其他類似的隱藏執(zhí)行模式的功能的機(jī)制。
      背景技術(shù)
      :自從Intel公司推出386SL處理器,作為對(duì)操作系統(tǒng)是隱藏的、執(zhí)行由基本輸入輸出系統(tǒng)(BIOS)或固件加載的代碼的執(zhí)行模式,SMM已經(jīng)可在IA32處理器上使用。SMM是被提供用來(lái)處理象電源管理、系統(tǒng)硬件控制或?qū)S械脑荚O(shè)備制造商(OEM)設(shè)計(jì)的代碼之類的系統(tǒng)范圍的功能。因?yàn)椴僮飨到y(tǒng)(OS)和軟件應(yīng)用程序看不見(jiàn)該執(zhí)行模式,甚至不能訪問(wèn)它,所以該執(zhí)行模式被認(rèn)為是“隱藏的”。IA32處理器被使得能夠經(jīng)由SMI(系統(tǒng)管理中斷)信號(hào)的激活而進(jìn)入SMM。大致與SMI信號(hào)相似的被稱為PMI(處理器管理中斷)信號(hào)的類似信號(hào)被用于ItaniumTM類處理器。這里,為了簡(jiǎn)化,SMI和PMI信號(hào)有是都被稱為xMI信號(hào)。還有一種使用APIC/XAPICIA32存儲(chǔ)器映射傳遞機(jī)制或IPFSAPIC傳遞機(jī)制的被稱為“SMI”或“PMI”的中斷消息類型。到目前為止,利用了前面提到的Intel處理器的SMM能力的大多數(shù)BIOS實(shí)施方式簡(jiǎn)單地注冊(cè)在BIOS的構(gòu)建過(guò)程中被創(chuàng)建的單段代碼,以支持使用該BIOS的系統(tǒng)所特有的特定功能或一組功能。該代碼包括IA32中的16位組件和用于Itanium處理器的64位組件。用于這些遺留實(shí)施方式的單個(gè)代碼段響應(yīng)于所有的xMI激活,從開(kāi)始運(yùn)行到結(jié)束。在當(dāng)前的系統(tǒng)中沒(méi)有提供用于注冊(cè)或執(zhí)行第三方SMM代碼的功能,從而不允許對(duì)于SMM框架的擴(kuò)展。例如,如果對(duì)于給定的平臺(tái),原始設(shè)備制造商(OEM)或BIOS供應(yīng)商所提供的SMM代碼提供的功能不足,則開(kāi)發(fā)者或增值分銷商(VAR)必須要么許可來(lái)自BIOS供應(yīng)商或OEM的現(xiàn)存代碼并嘗試將他們自己的邏輯移植到他們的SMM代碼的實(shí)施方式中,要么忍受該不足,這是因?yàn)槟壳暗腟MM框架沒(méi)有提供用于修改或擴(kuò)展由單個(gè)代碼段提供的功能的替代方式。另外,當(dāng)前在IA32處理器上的實(shí)施方式被限制于處理器的16位的模式,從而限制了代碼的大小和對(duì)32位或64位軟件引擎技術(shù)的可能的利用。并且,由于SMM經(jīng)常用于芯片組工作區(qū)(例如,產(chǎn)生由于芯片組或CPU中的設(shè)計(jì)或制造缺陷而引起的錯(cuò)誤和/或不可預(yù)測(cè)的結(jié)果的CPU或芯片組勘誤表),所以獲得該關(guān)鍵軟件更新的能力被BIOS供應(yīng)商或OEM的單個(gè)BIOS實(shí)施方式所控制。在現(xiàn)今的情況中,大多數(shù)芯片組供應(yīng)商選擇讓操作系統(tǒng)供應(yīng)商利用OS驅(qū)動(dòng)程序集成這樣的工作區(qū)。通常,SMM功能的BIOS更新的生效存在問(wèn)題,并且因?yàn)镺S已經(jīng)通過(guò)它自己的驅(qū)動(dòng)程序模型而具有硬件可擴(kuò)展性機(jī)制,所以BIOS供應(yīng)商和OEM很少被推動(dòng)來(lái)提供這些類型的BIOS更新。結(jié)合附圖,參考下面的詳細(xì)描述,本發(fā)明的前述方面和伴隨的許多優(yōu)點(diǎn)更容易被意識(shí)到,同時(shí)也更好理解,其中圖1是圖示了本發(fā)明的示例性實(shí)施方式的示意圖,該實(shí)施方式使得各種事件處理程序(eventhandler)能夠被加載進(jìn)隱藏的存儲(chǔ)器空間并且響應(yīng)于系統(tǒng)管理中斷(SMI)或者處理器管理中斷(PMI)(統(tǒng)稱xMI)事件被并發(fā)地執(zhí)行;圖2A包含流程圖的第一部分,圖示了根據(jù)圖1的體系結(jié)構(gòu),當(dāng)處理xMI事件時(shí)本發(fā)明所使用的邏輯;圖2B包含圖2A的流程圖的第二部分,圖示了根據(jù)一個(gè)實(shí)施例的本發(fā)明所使用的邏輯,其中多個(gè)事件處理程序被調(diào)度(dispatch)到多個(gè)處理器,并且被檢查以查看它們是否適合處理該xMI事件;圖2C包含圖2A的流程圖的第二部分,圖示了根據(jù)一個(gè)實(shí)施例的本發(fā)明所使用的邏輯,其中多個(gè)事件處理程序被調(diào)度到多個(gè)處理器,并且被執(zhí)行至完成以服務(wù)該xMI事件;圖3是一個(gè)示意圖,圖示了根據(jù)對(duì)應(yīng)于圖2A和圖2C的流程圖的實(shí)施例,對(duì)應(yīng)于雙處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)事件處理程序的調(diào)度和執(zhí)行的時(shí)間線;圖4A是一個(gè)示意圖,圖示了被存儲(chǔ)在隱藏的存儲(chǔ)器空間堆中的示例的第一組數(shù)據(jù),該組數(shù)據(jù)在事件處理程序的調(diào)度和執(zhí)行過(guò)程中被使用,包括用于資源鎖定的信號(hào)量表;圖4B是一個(gè)示意圖,圖示了被存儲(chǔ)在隱藏的存儲(chǔ)器空間堆中的示例的第二組數(shù)據(jù),該組數(shù)據(jù)對(duì)應(yīng)于一種使用情況,在該情況中,多個(gè)處理程序?qū)嵗徊l(fā)地執(zhí)行以服務(wù)糾錯(cuò)碼(ECC)存儲(chǔ)器故障事件;圖5是一個(gè)示意圖,圖示了對(duì)應(yīng)于當(dāng)并發(fā)地服務(wù)ECC存儲(chǔ)器故障事件時(shí)所使用的多個(gè)事件處理程序和事件處理程序?qū)嵗恼{(diào)度和執(zhí)行的時(shí)間線;圖6是一個(gè)流程圖,圖示了當(dāng)加載并啟動(dòng)系統(tǒng)管理模式(SMM)中心(Nub)的執(zhí)行時(shí),本發(fā)明所使用的邏輯,該SMM中心用于當(dāng)處理器運(yùn)行在SMM中時(shí)管理事件處理;圖7是圖示了SMM中心的各種功能和服務(wù)組件的框圖;圖8是一個(gè)流程圖,圖示了當(dāng)注冊(cè)事件處理程序時(shí),本發(fā)明所使用的邏輯;圖9是一個(gè)流程圖,圖示了當(dāng)注冊(cè)和安裝被存儲(chǔ)在固件卷(firmwarevolume)中的事件處理程序時(shí),本發(fā)明所使用的邏輯,所述固件卷在預(yù)引導(dǎo)處理過(guò)程中被掃描;圖10是一個(gè)流程圖,圖示了當(dāng)注冊(cè)用于服務(wù)ItaniumTM處理器的處理器管理中斷(PMI)事件的事件處理程序時(shí),本發(fā)明所執(zhí)行的操作;圖11A包含圖示了當(dāng)處理PMI事件時(shí)本發(fā)明所使用的邏輯的流程圖的第一部分;圖11B包含圖11A的流程圖的第二部分,圖示了根據(jù)一個(gè)實(shí)施例的本發(fā)明所使用的邏輯,其中多個(gè)事件處理程序被調(diào)度到多個(gè)處理器,并且被檢查以查看它們是否適合處理該P(yáng)MI事件;圖11C包含圖11A的流程圖的第二部分,圖示了根據(jù)一個(gè)實(shí)施例的本發(fā)明所使用的邏輯,其中多個(gè)事件處理程序被調(diào)度到多個(gè)處理器,并且被執(zhí)行至完成以服務(wù)該P(yáng)MI事件;以及圖12是適于實(shí)現(xiàn)本發(fā)明的多處理器計(jì)算機(jī)系統(tǒng)的示意圖。具體實(shí)施例方式在下面的描述中,闡述了很多具體細(xì)節(jié),以提供對(duì)本發(fā)明的充分理解。但是,本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,沒(méi)有這些具體細(xì)節(jié)中的一個(gè)或者多個(gè),或者利用其他方法、組件等也可以實(shí)施本發(fā)明。在其他例子里,沒(méi)有詳細(xì)示出或描述公知的結(jié)構(gòu)和操作,以免模糊了本發(fā)明的各種實(shí)施例的諸方面。說(shuō)明書中對(duì)“一個(gè)實(shí)施例”或“實(shí)施例”的引用是指與該實(shí)施例有關(guān)的具體特征、結(jié)構(gòu)或特性至少被包括在本發(fā)明的一個(gè)實(shí)施例中。從而短語(yǔ)“在一個(gè)實(shí)施例中”或“在實(shí)施例中”在說(shuō)明書不同地方的出現(xiàn)不一定都是指同一個(gè)實(shí)施例。此外,在一個(gè)或多個(gè)實(shí)施例中,特定的特征、結(jié)構(gòu)或特性可以以任何適合的方式結(jié)合。本發(fā)明提供了一種機(jī)制,使得以多個(gè)軟件驅(qū)動(dòng)程序形式的可執(zhí)行內(nèi)容能夠被加載進(jìn)Intel32位系列微處理器(即,IA-32處理器)的系統(tǒng)管理模式(SMM)中,或者利用PMI信號(hào)激活的基于Itanium處理器的本地模式,并且在使用IA-32和基于Itanium的處理器的多處理器計(jì)算機(jī)系統(tǒng)上被并發(fā)的執(zhí)行。在IA32SMM中代碼的執(zhí)行狀態(tài)是被SMI信號(hào)發(fā)起的,而在ItaniumTM處理器中該狀態(tài)是被PMI信號(hào)的激活而發(fā)起的;簡(jiǎn)化起見(jiàn),這些將被總地稱為SMM。該機(jī)制允許可能由不同方編寫的多個(gè)驅(qū)動(dòng)程序被安裝用于SMM操作。注冊(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基本(SMMBase)協(xié)議和SMM訪問(wèn)(SMMAccess)協(xié)議。在傳統(tǒng)的SMM實(shí)施方式中,在交出控制權(quán)之前,SMM空間經(jīng)常被平臺(tái)軟件/固件/BIOS經(jīng)由硬件機(jī)制鎖定;這為固件賦予了抽象這種綁定的安全和控制的能力。相反,通過(guò)本發(fā)明所提供的SMM訪問(wèn)協(xié)議的軟件抽象使該設(shè)備的使用者不必知道和理解確切的硬件機(jī)制,因而使得驅(qū)動(dòng)程序可在多個(gè)平臺(tái)上移植。如以下所進(jìn)一步詳細(xì)提供的,本發(fā)明包括下面的特征供驅(qū)動(dòng)程序使用的SMM中的庫(kù),其包括I/O訪問(wèn)抽象和存儲(chǔ)器分配服務(wù);用于與以非SMM模式執(zhí)行的驅(qū)動(dòng)程序和應(yīng)用程序通信的方法;以給定頻率周期性激活的可選擇參數(shù);在被加載進(jìn)SMM的過(guò)程中驗(yàn)證驅(qū)動(dòng)程序的方法;關(guān)閉注冊(cè)權(quán)的能力;在多處理器環(huán)境中運(yùn)行的能力,在所述多處理器環(huán)境中許多處理器接收xMI激活;以及最后,將遺留IA32SMM代碼當(dāng)作一種特殊注冊(cè)的事件處理程序來(lái)運(yùn)行的能力。本系統(tǒng)的一個(gè)特點(diǎn)在于所有事件處理程序都在ItaniumTM本地處理器模式中運(yùn)行,或者在IA32情況下,在調(diào)用事件處理程序前,框架將使處理器進(jìn)入平展32位(flat32)模式,同時(shí)以實(shí)模式(即,16位模式)運(yùn)行可選擇的(一個(gè)或多個(gè))遺留IA32處理程序。本發(fā)明的一個(gè)示例性實(shí)施方式的高級(jí)示圖在圖1中被描述。通過(guò)使用EFI框架使能了該實(shí)施方式,其為操作系統(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ò)展性框架的過(guò)程在框10中被發(fā)起,其中,SMM可擴(kuò)展性框架被實(shí)例化。這包括在框12中安裝EFISMM基本協(xié)議驅(qū)動(dòng)程序。EFISMM基本協(xié)議,即SMM_BASE,是CPU特定的協(xié)議,由CPU驅(qū)動(dòng)程序或者另一能夠抽象IA32或者Itanium處理器的ISA特定(ISA-specific)細(xì)節(jié)的代理來(lái)公布。一旦被安裝,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,以及被存儲(chǔ)在經(jīng)由網(wǎng)絡(luò)20被訪問(wèn)的存儲(chǔ)設(shè)備上。除了這些類型的存儲(chǔ)設(shè)備,驅(qū)動(dòng)程序還可以被保存在其他的在其中實(shí)現(xiàn)本發(fā)明的計(jì)算機(jī)系統(tǒng)可訪問(wèn)的持久性存儲(chǔ)設(shè)備上,包括基于主板的ROM、被包含在附加外設(shè)卡上的選項(xiàng)ROM(option-ROM)、本地硬盤以及CDROM,它們共同由固件卷23描述。(注意,驅(qū)動(dòng)程序6駐留在其上的遠(yuǎn)程存儲(chǔ)設(shè)備和EFI系統(tǒng)分區(qū)16、BIOS閃存芯片18也可以包括固件卷。)如圖1中描述的,這些驅(qū)動(dòng)程序包括存儲(chǔ)在EFI系統(tǒng)分區(qū)16中的遺留驅(qū)動(dòng)程序1和附加(add-on)驅(qū)動(dòng)程序2、存儲(chǔ)在BIOS閃存芯片18上的附加驅(qū)動(dòng)程序3、4和5以及通過(guò)網(wǎng)絡(luò)20被訪問(wèn)的來(lái)自遠(yuǎn)程存儲(chǔ)設(shè)備(例如,文件服務(wù)器)的附加驅(qū)動(dòng)程序6。如這里用到的,術(shù)語(yǔ)“附加的”對(duì)應(yīng)于沒(méi)有配備計(jì)算機(jī)系統(tǒng)的原始設(shè)備制造商(OEM)提供的計(jì)算機(jī)系統(tǒng)原始固件的驅(qū)動(dòng)程序和固件文件。在可選擇模式中,EFISMM基本協(xié)議驅(qū)動(dòng)程序可以掃描各種固件卷來(lái)識(shí)別被指定通過(guò)SMM而服務(wù)xMI事件的任何驅(qū)動(dòng)程序。在一個(gè)實(shí)施例中,這些驅(qū)動(dòng)程序通過(guò)它們的文件類型來(lái)識(shí)別,例如,作為例子的對(duì)應(yīng)于附加驅(qū)動(dòng)程序7的“DRIVER7.SMH”文件25。在EFISMM基本協(xié)議驅(qū)動(dòng)程序的安裝過(guò)程中,SMM中心24被加載進(jìn)包括只用于SMM(SMM-only)存儲(chǔ)器空間的SMRAM26中。如以下被進(jìn)一步詳細(xì)解釋的,當(dāng)控制被轉(zhuǎn)移給SMM時(shí),SMM中心24負(fù)責(zé)協(xié)調(diào)所有活動(dòng),包括為事件處理程序提供SMM庫(kù)28,該庫(kù)包括PCI和I/O服務(wù)30、存儲(chǔ)器分配服務(wù)32和配置表注冊(cè)34。SMM事件處理程序的注冊(cè)是使處理程序能夠執(zhí)行被設(shè)計(jì)要執(zhí)行的特定xMI事件服務(wù)功能的第一步。SMM事件處理程序包括一組代碼(即,被編碼的機(jī)器指令),該代碼當(dāng)被系統(tǒng)處理器(CPU)執(zhí)行時(shí),以類似于中斷服務(wù)例程的方式執(zhí)行事件服務(wù)功能。通常,每個(gè)SMM事件處理程序?qū)糜诜?wù)特定硬件組件或者子系統(tǒng)的代碼,或者特定的一類硬件。例如,SMM事件處理程序可以被提供來(lái)服務(wù)系統(tǒng)實(shí)時(shí)時(shí)鐘引起的錯(cuò)誤、I/O端口錯(cuò)誤、PCI設(shè)備錯(cuò)誤等。通常,給定的驅(qū)動(dòng)程序和SMM事件處理程序之間可以有某種對(duì)應(yīng)。然而,這并不是嚴(yán)格的要求,因?yàn)樘幚沓绦蚩梢园ㄒ唤M從單個(gè)驅(qū)動(dòng)程序文件或者對(duì)象中提取的功能塊。當(dāng)用于遺留驅(qū)動(dòng)程序1的事件處理程序被注冊(cè)時(shí),它被作為遺留處理程序36加載進(jìn)SMRAM26中。遺留處理程序是一種事件處理程序,一般具有原始系統(tǒng)固件,并且代表處理xMI事件的傳統(tǒng)機(jī)制。隨著各附加SMM事件處理程序在框22中被注冊(cè),其被加載進(jìn)SMRAM26的附加SMM事件處理程序部分38;一旦所有的附加事件處理程序都被加載,附加SMM事件處理程序部分28就包括一組如框42所描繪的對(duì)應(yīng)于附加驅(qū)動(dòng)程序2-7的事件處理程序。另外,隨著各SMM事件處理程序被注冊(cè),其也可以在框44中選擇性地被驗(yàn)證,以確保該事件處理程序?qū)τ谟糜谟?jì)算機(jī)系統(tǒng)的具體的處理器和/或固件的使用是有效的。例如,可以使用一種實(shí)現(xiàn)數(shù)字簽名和公鑰的加密方法。隨著SMM事件處理程序被注冊(cè),它們被加入存儲(chǔ)在由SMM中心24維護(hù)的堆47中的處理程序列表46中。一旦所有的遺留的和附加的SMM事件處理程序都已經(jīng)被注冊(cè)并被加載進(jìn)SMRAM26中,而且正確的配置數(shù)據(jù)(元數(shù)據(jù))被寫入SMM中心24,則SMRAM被鎖定,阻止另外的SMM事件處理程序的注冊(cè)。處理程序列表還被復(fù)制到處理程序隊(duì)列48中,它可以被存儲(chǔ)在堆47并且由SMM中心24訪問(wèn)或者直接存儲(chǔ)在SMM中心24中。該系統(tǒng)現(xiàn)在已經(jīng)準(zhǔn)備好通過(guò)SMM處理各種xMI事件。參考圖1、圖2A和2B,根據(jù)本發(fā)明的第一實(shí)施例,用IA32處理器處理xMI事件的過(guò)程如下進(jìn)行在框54中,xMI事件信號(hào)49被多處理器系統(tǒng)中的所有處理器接收,例如在圖示的實(shí)施例中被處理器50(CPU1)和處理器51(CPU2)接收。一般,對(duì)于IA32處理器,xMI(SMI)事件可以是響應(yīng)于系統(tǒng)芯片組上的引腳、總線周期類型或者處理器間中斷(IPI)的激活而產(chǎn)生的,該激活引起IA32處理器進(jìn)入SMM。對(duì)于ItaniumTM處理器,xMI(PMI)事件可以是響應(yīng)于系統(tǒng)芯片組上的引腳、總線周期類型或者IPI的激活而產(chǎn)生的,該激活引起ItaniumTM處理器返回物理模式并執(zhí)行向用于服務(wù)PMI事件的PAL(處理器抽象層)注冊(cè)的代碼。響應(yīng)于xMI事件,處理器50切換為SMM模式,并且將指令指針重定向到SMM中心24中的第一指令,SMM中心在這里開(kāi)始執(zhí)行,如框56所提供的。接著在框58中,每個(gè)處理器的機(jī)器狀態(tài)通過(guò)各處理器內(nèi)置的硬件注冊(cè)處理所執(zhí)行的操作和由SMM中心執(zhí)行的控制操作而被存儲(chǔ)。接著,在判斷框60中,判斷是否存在已經(jīng)被注冊(cè)并加載的任何遺留16位處理程序。如果答案為“是”,則所有的處理器在框62中被同步,因此,除了所選擇的處理器(例如,在預(yù)引導(dǎo)過(guò)程中被識(shí)別的第一處理器)之外的所有處理器都被停止,而在框64中,(一個(gè)或多個(gè))16位處理程序被所選擇的處理器執(zhí)行。為了方便,在該示例中,假定處理器50是被選擇的處理器。從而,所有16位處理程序?qū)⒈惶幚砥?0執(zhí)行,而任何其他處理器(例如,處理器51)將在這些16位處理程序的執(zhí)行過(guò)程中被停止。接著,在框66中,被停止的處理器被釋放,并且它們的機(jī)器執(zhí)行模式被切換為平展32保護(hù)模式。該保護(hù)模式包括具有未分頁(yè)32位、零基尋址的平展32位模式。一旦執(zhí)行模式切換被完成,則本地32位處理程序按照它們被存儲(chǔ)在處理程序隊(duì)列48中順序被調(diào)度到下一個(gè)可用處理器,直至適當(dāng)?shù)氖录幚沓绦虮粓?zhí)行完畢以服務(wù)xMI事件,如圖2B中的開(kāi)始循環(huán)和結(jié)束循環(huán)框68和70提供的。在一個(gè)實(shí)施例中,事件處理程序被保存為從頭到尾依次游歷的鏈表,其中第一個(gè)事件處理程序被調(diào)度到第一處理器,另外的事件處理程序被調(diào)度到下一個(gè)可用的處理器,直到適當(dāng)?shù)氖录幚沓绦蛞呀?jīng)在系統(tǒng)處理器中的一個(gè)上被執(zhí)行。如果處理程序希望獨(dú)占地執(zhí)行,則它可以被標(biāo)記為“單處理器(Single-processor)”;這是對(duì)于被優(yōu)化用于單位處理器桌面的模塊或遺留代碼的情況。在后者的情況下,所有其他處理器將被保持在等待服務(wù)狀態(tài)中,直到“單處理器”處理程序完成執(zhí)行。當(dāng)本地32位處理程序被調(diào)度時(shí),在框72中,處理程序隊(duì)列48被更新,這包括遞增下一個(gè)調(diào)度的指針的位置以及識(shí)別事件處理程序被調(diào)度到哪個(gè)處理器。各事件處理程序包含有被用來(lái)判斷該處理程序是否是服務(wù)xMI事件的適當(dāng)處理程序的前期部分代碼。典型的這類判斷包括詢問(wèn)對(duì)應(yīng)于該事件處理程序的硬件組件、子系統(tǒng)等,以查看對(duì)象是否發(fā)生錯(cuò)誤。在某些情況下,在本地事件處理程序的這種初始代碼部分或其他代碼部分的執(zhí)行過(guò)程中,可能有多于一個(gè)處理器可以執(zhí)行試圖并發(fā)地訪問(wèn)同一系統(tǒng)資源的處理程序代碼。例如,許多設(shè)備,包括內(nèi)置外圍設(shè)備和驅(qū)動(dòng)器組件(例如聲音芯片、視頻芯片、網(wǎng)絡(luò)接口芯片等)和附加外圍設(shè)備(例如,聲卡、視頻卡、網(wǎng)絡(luò)接口卡等),工作在PCI(外圍部件接口)體系結(jié)構(gòu)下。在該體系結(jié)構(gòu)下,可以通過(guò)發(fā)送請(qǐng)求字符串到PCICF8hI/O(輸入/輸出)端口來(lái)詢問(wèn)PCI設(shè)備,該字符串包括與該設(shè)備和保存了該詢問(wèn)所關(guān)心的數(shù)據(jù)的寄存器有關(guān)的信息。典型的請(qǐng)求字符串具有“總線/設(shè)備/功能/寄存器”的格式,其中“總線”指明了設(shè)備所連接到的被列舉的PCI總線,“/設(shè)備”指明了在PCI初始化過(guò)程中分配給設(shè)備的被列舉的設(shè)備號(hào),“/功能”指明了由設(shè)備所執(zhí)行的PCI功能,“/寄存器”指明了存儲(chǔ)關(guān)于提交該請(qǐng)求的事件處理程序可能感興趣的設(shè)備的信息的寄存器,所述信息例如是錯(cuò)誤代碼。為了檢查各種PCI請(qǐng)求,PCI控制器“監(jiān)聽(tīng)”被提交到CF8hI/O端口的請(qǐng)求。因此,在向PCI控制器提交這樣的請(qǐng)求后,PCI控制器和/或設(shè)備將檢查以查看該請(qǐng)求是否涉及這些設(shè)備。請(qǐng)求所不涉及的設(shè)備簡(jiǎn)單地忽略該請(qǐng)求。相反,由字符串的“/設(shè)備”部分指明的設(shè)備通過(guò)將由“/功能/寄存器”寄存器所指明的值復(fù)制到PCICFChI/O端口來(lái)進(jìn)行響應(yīng),這使得處理程序的詢問(wèn)代碼能夠讀取被存儲(chǔ)在所指明的寄存器中的值。如果第一處理器幾乎與第二處理器在相同的時(shí)間提交了請(qǐng)求,并且被寫入CFCI/O端口的數(shù)據(jù)涉及錯(cuò)誤的請(qǐng)求,則傳統(tǒng)的PCI設(shè)備查詢方案將出現(xiàn)一個(gè)潛在的問(wèn)題。為了防止這種情況,本發(fā)明利用了資源鎖定方案,其中,信號(hào)量55被用于保證給定的資源或一組資源(例如,I/O端口或一組I/O端口、存儲(chǔ)器范圍等)同時(shí)只能被一個(gè)事件處理程序訪問(wèn)。一般,這種資源鎖定方案涉及存儲(chǔ)跟蹤資源用途(例如,I/O端口、存儲(chǔ)器)的信號(hào)量數(shù)據(jù),以及在執(zhí)行訪問(wèn)這些資源的處理程序代碼部分之前檢查該數(shù)據(jù),其中,這些代碼部分的執(zhí)行被延遲,直到對(duì)應(yīng)于該資源的(一個(gè)或多個(gè))信號(hào)量被清除(指示這些資源可用)。因此,對(duì)應(yīng)于被調(diào)度的事件處理程序的(一個(gè)或多個(gè))資源信號(hào)量55在框74中被檢查以證實(shí)對(duì)被那些事件處理程序所使用的相關(guān)I/O端口的訪問(wèn)是可用的。如判斷框76所提供的,如果該檢查結(jié)果是假(否),則在框78中,事件處理程序執(zhí)行預(yù)定的等待,并且邏輯循環(huán)返回判斷框76。該等待/檢查過(guò)程被重復(fù),直到(一個(gè)或多個(gè))資源信號(hào)量清除的檢查結(jié)果是真(是)。在證實(shí)與(一個(gè)或多個(gè))資源信號(hào)量檢查相對(duì)應(yīng)的資源可用后,在框80中,對(duì)應(yīng)的信號(hào)量數(shù)據(jù)被更新或改寫,如圖1中的信號(hào)量S1、S2、S3和SN所示。實(shí)際上,這通過(guò)指示資源對(duì)任何其他事件處理程序不可用而“鎖定”了該資源。接著,根據(jù)判斷框82,允許執(zhí)行判斷該事件處理程序是否是適合的事件處理程序的代碼部分。如果該代碼部分判斷出該事件處理程序不是適合的處理程序(即,該代碼部分判斷出其對(duì)應(yīng)的設(shè)備不引起該錯(cuò)誤),則它向SMM中心返回一個(gè)指示這種情況的代碼,并且在框84中,SMM中心清除上面在框80中被改寫或更新的(一個(gè)或多個(gè))I/O信號(hào)量。接著邏輯進(jìn)行到結(jié)束循環(huán)框70,在此,其循環(huán)回到起始循環(huán)框68,其中SMM中心將處理程序隊(duì)列48中的下一個(gè)處理程序調(diào)度到下一個(gè)可用的處理器,并且對(duì)于該處理程序重復(fù)前述的操作。如果事件處理程序是用于服務(wù)該xML事件的適合的處理程序,則判斷框82的答案是“真”,并且邏輯進(jìn)行到框86,在此執(zhí)行處理程序代碼直到完成,完成后處理程序代碼向它于其上運(yùn)行的處理器返回?cái)?shù)據(jù),以標(biāo)識(shí)xMI事件是否被成功地處理。獲知xML事件被處理后,在框88中,SMM中心清除對(duì)應(yīng)于該處理程序的(一個(gè)或多個(gè))資源信號(hào)量(即,上面在框80中的改寫或更新),并且在框90中,恢復(fù)機(jī)器狀態(tài)并對(duì)所有的處理器執(zhí)行適合的指令(對(duì)于IA32為RSM,在b0返回進(jìn)入PALPMI代碼),以將處理器返回到它們先前的執(zhí)行模式。這完成了對(duì)xML事件的處理。核心需要保證所有的被登記并且已經(jīng)按次序從它們的處理程序返回了的處理器在SMM中心中具有單一的點(diǎn),以將機(jī)器控制返回各個(gè)處理器。在執(zhí)行處理程序之前,SMM中心需要在執(zhí)行任何處理程序之前保存某些機(jī)器和平臺(tái)資源。這樣存儲(chǔ)包括寄存器的內(nèi)容,例如當(dāng)前臺(tái)代碼在對(duì)0CF8h和0CFCh的PCI配置訪問(wèn)的中間時(shí)所發(fā)生的SMI或PMI的情況下的PCI配置空間地址端口0CF8h。這與SIO配置端口22h/23h、RTC端口70h/71h等的情況相同。平臺(tái)特性“狀態(tài)保存”模塊將被用于該目的。對(duì)于在IA32上支持32位處理程序和遺留16位處理程序的情況,SMM中心應(yīng)在運(yùn)行遺留處理程序之前進(jìn)入保護(hù)模式,以保存數(shù)學(xué)協(xié)處理器和浮點(diǎn)的狀態(tài)。因?yàn)樵诒Wo(hù)模式中比在實(shí)模式中存在更多的浮點(diǎn)(FP)狀態(tài),所以首先進(jìn)入保護(hù)模式。應(yīng)該注意,圖2B中所示的和上面涉及的全部過(guò)程所討論的資源信號(hào)量檢查的時(shí)序只是示例性的。除了I/O端口,信號(hào)量可以用于任何可以被兩個(gè)或多個(gè)事件處理程序共享的資源。另外,資源信號(hào)量檢查可以在除了示于圖2B中的那些操作以外的操作過(guò)程中被執(zhí)行。例如,信號(hào)量的使用可用應(yīng)用于給定處理程序的任何I/O訪問(wèn)部分,其中在單個(gè)處理程序的執(zhí)行過(guò)程中可以執(zhí)行多于一個(gè)的信號(hào)量檢查。在前述的實(shí)施例中,各種事件處理程序被調(diào)度到下一個(gè)可用處理器,并且每個(gè)處理程序的早期部分被執(zhí)行以判斷其是否是對(duì)于該xML事件的適合的處理程序。該步驟被重復(fù),直到識(shí)別出適合的事件處理程序,接著允許該處理程序一直執(zhí)行完畢以服務(wù)該事件。在另一個(gè)實(shí)施例中,可以將多個(gè)事件處理程序執(zhí)行完畢,以進(jìn)行與該xMI事件相關(guān)的單個(gè)服務(wù)操作或一組相關(guān)的操作。對(duì)于該框架的邏輯示于圖2A和圖2C中,其中圖2A的處理部分與上面所討論的相同,并且在圖2C中,與圖2B中對(duì)應(yīng)的框共享相同標(biāo)號(hào)的各種操作框執(zhí)行基本上類似的操作。因此,這些類似標(biāo)號(hào)的框的細(xì)節(jié)將不被進(jìn)一步討論。通常,每個(gè)事件處理程序?qū)⒒谄湓谔幚沓绦蜿?duì)列48中的順序以類似于上述的方式被調(diào)度。接著處理程序被執(zhí)行至完成,如框86A所示。在這種情況下,在執(zhí)行該事件處理程序代碼的過(guò)程中,可以以類似于上面所描述的方式進(jìn)行信號(hào)量檢查、等待和鎖定,如框74A、76A、78A和80A所提供的。一旦處理程序代碼已經(jīng)執(zhí)行完畢,則在框88中,所有對(duì)應(yīng)的資源信號(hào)量被清除,并且在判斷框92判斷是否有任何其他處理程序要執(zhí)行。如果有,則它們按照它們的隊(duì)列順序被調(diào)度。一旦所有的事件處理程序已經(jīng)被調(diào)度,則判斷框92的判斷將為“真”,并且在框94中,系統(tǒng)將等待,直到所有的處理程序已經(jīng)執(zhí)行完畢。接著在框90中,機(jī)器狀態(tài)和先前的執(zhí)行模式被恢復(fù),完成了xMI事件處理過(guò)程。在圖3中描述了根據(jù)本實(shí)施例的xMI事件的示例處理。響應(yīng)于xMI事件49A,對(duì)應(yīng)于前面的圖2A的流程圖部分,使用CPU50和51執(zhí)行操作。接著,處理程序的調(diào)度開(kāi)始,其中處理程序2被調(diào)度到處理器50,處理程序3被調(diào)度到處理器51。在處理程序2的執(zhí)行過(guò)程中,生成信號(hào)量S2以鎖定由該處理程序使用的資源。類似地,生成信號(hào)量S3以鎖定由處理程序3使用的資源。處理程序2和處理程序3兩者都被執(zhí)行到完成,并且它們各自的信號(hào)量被清除。在完成處理程序3之后,處理程序4被調(diào)度到處理器51,它立即生成信號(hào)量S4。之后不久,處理程序5被調(diào)度到處理器50。處理程序5需要訪問(wèn)被信號(hào)量S4鎖定的共享資源。因此,處理程序5必須等待該資源變?yōu)榭捎?,如等待?6所指示的。處理程序4的共享資源的使用完成后,它清除信號(hào)量S4,從而釋放對(duì)應(yīng)的資源以由處理程序5使用。處理程序5之后立即生成信號(hào)量Sx以鎖定該資源。處理程序4和處理程序5都繼續(xù)執(zhí)行到完成,之后隨后的處理程序基于該處理程序在處理程序隊(duì)列48中的順序被調(diào)度到下一個(gè)可用的處理器。最終,最后兩個(gè)處理程序M和N被調(diào)度。在處理程序N的情況下,處理程序包括在不同的時(shí)間點(diǎn)訪問(wèn)不同資源的代碼部分。因此,生成兩個(gè)信號(hào)量,即SN1和SN2。處理程序M和N都繼續(xù)執(zhí)行直到完成,處理程序M首先完成。接著,處理器50等待,直到處理程序N已經(jīng)完成執(zhí)行,之后,在框90中,處理器被恢復(fù)到先前的機(jī)器狀態(tài)和執(zhí)行模式。與前面的示例相對(duì)應(yīng)的存儲(chǔ)在堆47中的示例性數(shù)據(jù)示于圖4A中。堆47一般將包括SMRAM26的保留部分。如上面所討論的,它將包括與處理程序列表46、處理器隊(duì)列48和信號(hào)量55相關(guān)的數(shù)據(jù)。在被圖示的實(shí)施例中,處理程序列表包括用于標(biāo)識(shí)每個(gè)處理程序98的處理程序標(biāo)識(shí)符98,以及對(duì)應(yīng)的起始地址100,該地址規(guī)定用于該處理程序的代碼的第一指令。處理程序隊(duì)列48包括表,該表包括三列處理程序標(biāo)識(shí)符102、處理程序狀態(tài)104和CPU標(biāo)識(shí)符106,CPU標(biāo)識(shí)符106標(biāo)識(shí)了處理程序正在或曾在哪個(gè)CPU上被執(zhí)行。通常,信號(hào)量55可以以各種數(shù)據(jù)結(jié)構(gòu)被存儲(chǔ)。一般地,信號(hào)量將包括資源值對(duì),從該資源值對(duì),處理程序可以判斷給定的資源是否被另一個(gè)處理程序鎖定。在示于圖4A中的實(shí)施例中,信號(hào)量55包括信號(hào)量表108,該表包括各種I/O端口和它們對(duì)應(yīng)的可用性,這些可用性是用布爾信號(hào)量來(lái)標(biāo)記的,其包括“0”以指示資源可用(即,信號(hào)量被清除)和“1”以指示資源被鎖定。在一個(gè)實(shí)施例中,使用了I/O端口“位映射表(bitmap)”,其中該位映射表包括對(duì)應(yīng)于各個(gè)I/O端口的一位存儲(chǔ)單元的序列,利用各個(gè)一位存儲(chǔ)單元,從各I/O端口的基址和每個(gè)各自的位對(duì)應(yīng)的從該基址的偏移量,得到各I/O端口的標(biāo)識(shí)。被設(shè)置的位指示對(duì)應(yīng)的資源被鎖定,而被清除的位指示對(duì)應(yīng)的資源是被釋放了的。因此,信號(hào)量表108指示出I/O端口70h、71h、CF8h、CFCh、D06h和DA1h被鎖定。在另一個(gè)實(shí)施例中,與支持并發(fā)訪問(wèn)的資源相對(duì)應(yīng)的處理程序(或其代碼部分)被調(diào)度到不同的處理器,并且被允許并發(fā)地執(zhí)行。對(duì)應(yīng)于該實(shí)施例的示例使用情況的時(shí)間線被示于圖5中,而被存儲(chǔ)在堆47A中的對(duì)應(yīng)的數(shù)據(jù)被示于圖4B中。在該示例中,對(duì)應(yīng)于糾錯(cuò)碼(ECC)事件的xMI信號(hào)被發(fā)送到四個(gè)處理器50、51、52和53中的每一個(gè)。用于處理xMI事件的初始操作以類似于上面參照?qǐng)D2A所討論的方式被執(zhí)行。隨后,處理程序H2被調(diào)度到處理器50,而處理程序H3、H4和H5分別被調(diào)度到處理器51、52和53。在這種情況下,假定處理程序H2是用于處理ECC事件的適合的處理程序,而處理程序H3、H4和H5是不適合的處理程序。從而,這些不適合的處理程序的早期部分被允許執(zhí)行,并向SMM中心24返回信息,指示出它們是不適合用于該事件的處理程序。在一個(gè)實(shí)施例中,并發(fā)類型列110被添加到處理程序列表46中,以指示處理程序是否支持并發(fā)執(zhí)行??蛇x地,該信息可以由處理程序代碼的早期部分來(lái)判斷?;谇懊娴姆桨钢?,應(yīng)該認(rèn)識(shí)到,處理程序H2所支持的資源(即,在ECC事件處理程序情況下的存儲(chǔ)器)可以支持并發(fā)訪問(wèn)。因此,處理程序H2的早期代碼部分更新了處理程序列表46和處理程序隊(duì)列48,使得將要被調(diào)度給處理器51、52和53的接下來(lái)的代碼部分是服務(wù)ECC事件的處理程序H2的核心部分或者是處理程序H2的附加實(shí)例。這些處理程序或者處理程序核心部分被描述為處理程序H2A、H2C和H2D,在處理程序H3、H5和H4完成后,它們分別被調(diào)度到處理器51、53和52。ECC事件由提供了糾錯(cuò)碼支持的系統(tǒng)存儲(chǔ)器來(lái)發(fā)布?;旧?,ECC事件是在存儲(chǔ)器檢測(cè)到潛在的錯(cuò)誤狀態(tài)時(shí)被發(fā)布的。在一個(gè)實(shí)施例中,對(duì)這樣的事件的響應(yīng)是使處理器讀取被存儲(chǔ)在由ECC代碼標(biāo)識(shí)的一個(gè)或多個(gè)存儲(chǔ)器塊中的數(shù)據(jù),并且寫回這些存儲(chǔ)器塊。在本示例中,將假定存儲(chǔ)器的ECC能力相當(dāng)粗略,通過(guò)該能力,存儲(chǔ)器只能檢測(cè)整個(gè)DIMM(雙列直插存儲(chǔ)器模塊)的錯(cuò)誤,并且其中在系統(tǒng)中安裝了四個(gè)64兆(M)的DIMM(總共256M)。此外,假定與從64M到128M的存儲(chǔ)器塊相對(duì)應(yīng)的第二DIMM產(chǎn)生了ECC事件。根據(jù)前面的情況,處理程序H2或者SMM庫(kù)28中的代碼確定出因?yàn)橛?4M存儲(chǔ)器要糾正(即,讀取和寫回以實(shí)現(xiàn)“基于軟件”的存儲(chǔ)器整理(scrub)),并且有四個(gè)處理器用于執(zhí)行該任務(wù),所以每個(gè)處理器被分配來(lái)糾正16M存儲(chǔ)器。在一個(gè)實(shí)施例中,資源鎖定數(shù)據(jù)(例如,信號(hào)量)可以被存儲(chǔ)在信號(hào)量表55中,以標(biāo)識(shí)哪些存儲(chǔ)器塊被分配給哪個(gè)處理器來(lái)糾正,如圖4B所示。如圖4B所圖示的,有四組信號(hào)量112、114、116和118,每個(gè)包含與16個(gè)1M存儲(chǔ)器塊相對(duì)應(yīng)的數(shù)據(jù),其中每組信號(hào)量鎖定它對(duì)應(yīng)的存儲(chǔ)器塊,使得那些存儲(chǔ)器塊只可以被由信號(hào)量所標(biāo)識(shí)的處理器訪問(wèn)。例如,信號(hào)量112鎖定從64M到80M的存儲(chǔ)器塊,使得它們只可以被處理器50(CPU1)訪問(wèn),信號(hào)量114鎖定從80M到96M的存儲(chǔ)器塊,使得它們只可以被處理器51(CPU2)訪問(wèn),等等。除了所示的基于信號(hào)量的鎖定方案,也可以使用其他資源鎖定方案,例如標(biāo)識(shí)由各處理器鎖定的存儲(chǔ)器的范圍。每個(gè)處理程序或處理程序核心部分H2、H2A、H2B和H2C繼續(xù)執(zhí)行,直到它們對(duì)應(yīng)的存儲(chǔ)器塊已經(jīng)被糾正。對(duì)應(yīng)的處理程序完成之后,處理器50、51、52和53中的每個(gè)等待,直到執(zhí)行了所有剩余的處理程序代碼,之后,在框90B中,所有的處理器被恢復(fù)到它們各自的機(jī)器狀態(tài)和先前的執(zhí)行模式。為了使用事件處理程序,必須首先安裝EFISMM基本協(xié)議處理程序。參照?qǐng)D6,用于IA32處理器的EFISMM基本協(xié)議驅(qū)動(dòng)程序(SMM_BASE)通過(guò)如下過(guò)程被安裝。首先,在框120中,SMM_BASE::Initialize服務(wù)被調(diào)用。這是利用DXE(驅(qū)動(dòng)程序執(zhí)行環(huán)境)引導(dǎo)服務(wù)驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)的,所述DXE引導(dǎo)服務(wù)驅(qū)動(dòng)程序加載并輸出該構(gòu)造器。響應(yīng)于實(shí)例化驅(qū)動(dòng)程序,當(dāng)在保護(hù)模式中操作時(shí),用于SMM中心24的起始代碼在CPU缺省SMRAM地址處(0x3000段,偏移0x8000)被加載進(jìn)SMRAM。然后,在框122中,處理器模式在執(zhí)行地址0x38000p處轉(zhuǎn)移到實(shí)模式。接著,在框124中,用于平臺(tái)的SMRAM實(shí)施方式的可允許的地址范圍被確定和分配。如下面所描述的,通過(guò)利用SMM_BASE::Initialize驅(qū)動(dòng)程序,調(diào)用SMM_ACCESS::GetCapabilities和SMM_ACCESS::AcquireSmramRange方法可以得到該信息。如果該驅(qū)動(dòng)程序不存在,則缺省策略將會(huì)是具有缺省大小(對(duì)于IA32A段是128千字節(jié),對(duì)于ItaniumTM是256千字節(jié))的對(duì)于IA32處理器的0xA000段(或者對(duì)于頂段(T-SEG)芯片組實(shí)施方式的存儲(chǔ)器頂端(top-of-memeory),以及對(duì)于高段(H-SEG)芯片組實(shí)施方式的接近4GB)和對(duì)于ItaniumTM處理器的運(yùn)行時(shí)數(shù)據(jù)。地址范圍已經(jīng)被分配之后,在框126中,SMM_ACCESS::Open服務(wù)被調(diào)用,并且對(duì)于IA32,在框128中,用于SMRAM的初始地址從缺省CPU地址(0x38000p)被重定位至平臺(tái)地址。被重定位的代碼將包括一個(gè)實(shí)模式組件和一個(gè)保護(hù)模式組件。實(shí)模式組件將包括進(jìn)入SMRAM重定位地址的SMM入口(SMMEntry)。在框130中,該代碼在必要的時(shí)候被執(zhí)行以進(jìn)行所有遺留服務(wù),并將處理器切換為保護(hù)模式操作。然后,在框132中,控制權(quán)被交給SMM核心。如上面所討論的,當(dāng)處理器運(yùn)行在SMM中時(shí),SMM中心24負(fù)責(zé)協(xié)調(diào)各活動(dòng)。圖7中以圖形的方式描述了SMM中心24的一個(gè)實(shí)施例提供的各種功能和服務(wù)。如功能塊134、136和138所提供的,這些功能和服務(wù)包括同步用于多處理器配置的所有處理器、保存機(jī)器狀態(tài),包括需要時(shí)的浮點(diǎn)寄存器,以及刷新高速緩存。SMM中心還提供了將處理器模式由實(shí)模式切換到保護(hù)模式的模式切換功能140,如上面參考框130所討論的。模式切換功能130還使能了處理器的內(nèi)部高速緩存。如功能塊142、144和146所描述的,SMM中心24所提供的其他功能包括在SMRAM26中建立調(diào)用棧、維護(hù)處理程序列表46以及維護(hù)處理程序隊(duì)列48。SMM中心24通過(guò)SMM庫(kù)28為各種事件處理程序提供一系列服務(wù),包括PCI和I/O服務(wù)30、存儲(chǔ)器分配服務(wù)32和配置表注冊(cè)服務(wù)34。另外,SMM中心24還提供在xMI事件被服務(wù)之后被執(zhí)行的若干功能。如果計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn)了多處理器配置,則這些處理器由功能148釋放。功能150還原(一個(gè)或多個(gè))處理器的機(jī)器狀態(tài),包括需要時(shí)的浮點(diǎn)寄存器。最后,功能152被用來(lái)在系統(tǒng)中所有處理器上執(zhí)行RMS指令。如上面所討論的,本發(fā)明提供了兩種用于加載事件處理程序的機(jī)制(1)基于驅(qū)動(dòng)程序的安裝;和(2)從固件卷中自主加載。對(duì)于基于驅(qū)動(dòng)程序的安裝,SMM_BASE協(xié)議將通過(guò)被DXE調(diào)度器加載的驅(qū)動(dòng)程序被安裝。SMM_BASE協(xié)議被安裝之后,它公布一個(gè)使能事件處理程序被注冊(cè)和加載的接口。用于注冊(cè)的協(xié)議由EFI1.0說(shuō)明書描述,它定義了一種在EFI環(huán)境中公布新的可調(diào)用的接口的機(jī)制。SMM_BASE協(xié)議公布基本上包括用EFI核心揭示在SMM-CIS(描述在預(yù)引導(dǎo)空間中抽象這種注冊(cè)機(jī)制的API集或者EFI2.0協(xié)議的EFI2.0文檔或者SMM“組件接口規(guī)范”)中描述的API。EFI核心維護(hù)GUID/接口指針對(duì)的協(xié)議數(shù)據(jù)庫(kù)。GUID包括接口的128位全球唯一標(biāo)識(shí)符(ID)。通過(guò)該機(jī)制,當(dāng)SMM_BASE協(xié)議被安裝時(shí),希望安裝事件處理程序的任何驅(qū)動(dòng)程序都能使用EFI1.0的標(biāo)準(zhǔn)機(jī)制來(lái)發(fā)現(xiàn)SMM_BASE協(xié)議實(shí)例(通過(guò)核心服務(wù)“定位協(xié)議(LocateProtocol)”)或者向要被警告的EFI核心注冊(cè)一個(gè)通知,其中在一個(gè)實(shí)施例中,所述事件處理程序是某些代碼,可以是IA32或者ItaniumTM指令集中的PE32+二進(jìn)制代碼,或者是用于IA32的遺留16位處理程序。在任一情況下,一旦SMM_BASE協(xié)議被安裝,各種驅(qū)動(dòng)程序可以使接口指針指向SMM_BASE實(shí)例(通過(guò)EFI1.0“處理協(xié)議(HandleProtocol)服務(wù)”),然后調(diào)用SMM_BASE::Register服務(wù)。使用SMM_BASE服務(wù)的驅(qū)動(dòng)程序所用的二進(jìn)制代碼能從它自己的驅(qū)動(dòng)程序映像、來(lái)自磁盤或者網(wǎng)絡(luò)的文件來(lái)確定。文件可以在固件卷中或者在FAT磁盤分區(qū)上。通過(guò)SMM_BASE::Register服務(wù),事件處理程序的注冊(cè)更容易。該服務(wù)包括允許事件處理程序注冊(cè)的DXE引導(dǎo)服務(wù)驅(qū)動(dòng)程序。參考圖8,注冊(cè)事件處理程序的過(guò)程在框154中開(kāi)始,其中注冊(cè)事件處理程序的請(qǐng)求通過(guò)SMM_BASE協(xié)議驅(qū)動(dòng)程序從另一個(gè)引導(dǎo)服務(wù)驅(qū)動(dòng)程序或者應(yīng)用程序(即,驅(qū)動(dòng)程序1-7)被接收。作為響應(yīng),在框156中,利用IPI或者SMM_CONTROL協(xié)議產(chǎn)生SMI。利用ESP存儲(chǔ)器棧指針,自變量在存儲(chǔ)器棧被傳送,似乎是調(diào)用另一處理程序。處理程序可以用C和所生成的映像PE32+來(lái)編寫。接著,在框158中進(jìn)行存儲(chǔ)器重定位,并且ST(來(lái)自EFI1.0的系統(tǒng)表)指針被指向SMST(系統(tǒng)管理系統(tǒng)表)的指針替換。接著,在框160中,使用SMM_ACCESS::Open服務(wù),SMRAM被打開(kāi),它通過(guò)SMM_ACCESS協(xié)議被訪問(wèn)。下面的附錄中給出了SMM_ACCESS協(xié)議的進(jìn)一步的細(xì)節(jié)。SMM_ACCESS::Open服務(wù)抽象了從基于非SMRAM的代碼的使能SMRAM可見(jiàn)性的存儲(chǔ)器控制器的編程。這使得SMM_BASE協(xié)議能將代碼,例如SMM中心,復(fù)制和安裝進(jìn)SMRAM中。接著,在判斷框162中,判斷是否有足夠的SMRAM可用來(lái)保存事件處理程序例程。如果沒(méi)有足夠的SMRAM存儲(chǔ)器空間可用,則邏輯進(jìn)行到框164,在其中警告調(diào)用者。作為選項(xiàng),響應(yīng)于被警告,調(diào)用者可以用SMM_ACCESS::GetCapabilities和SMM_ACCESS::AcquireSmramRang方法來(lái)獲得SMRAM中額外的存儲(chǔ)器空間,如框166所提供的。如果沒(méi)有足夠的SMRAM存儲(chǔ)器空間可用,則在錯(cuò)誤返回框168中,通過(guò)調(diào)用SMM_ACCESS::Close方法,SMRAM被關(guān)閉,并且向調(diào)用者返回一個(gè)錯(cuò)誤代碼。如果判斷出有足夠的SMRAM存儲(chǔ)器空間可用,則在框170中,用于處理程度的SMRAM映像的存儲(chǔ)器緩沖區(qū)被分配。在判斷框172中,判斷分配是否成功。如果分配不成功,則邏輯進(jìn)行到錯(cuò)誤返回框168。如果分配成功,則在框174中,事件處理程序的映像被加載進(jìn)入先前被分配的SMRAM存儲(chǔ)器空間。然后在判斷框176中,判斷映像是否是好的。如果不是,則邏輯進(jìn)行到錯(cuò)誤返回框168。如果映像被證實(shí)是好的,則在框178中,SMM中心24通過(guò)將新的事件處理程序加入它的處理程序列表46中來(lái)注冊(cè)該新的事件處理程序,并且在返回框180中,SMRAM被關(guān)閉,過(guò)程返回到調(diào)用者。從固件卷中自主加載事件處理程序的機(jī)制并不依賴于使另一個(gè)驅(qū)動(dòng)程序使用SMM_BASE接口和SMM_BASE::Register服務(wù)。不是使驅(qū)動(dòng)程序發(fā)起注冊(cè)過(guò)程,而是在預(yù)引導(dǎo)過(guò)程中被具體化(materialize)的各種固件卷(FV)被掃描來(lái)尋找適當(dāng)?shù)尿?qū)動(dòng)程序文件,所述驅(qū)動(dòng)程序文件包含可以被SMM_BASE驅(qū)動(dòng)程序加載的事件處理程序。固件卷是固件文件的集合。除了在固件文件頭中的其他元數(shù)據(jù),固件卷中的每一個(gè)固件文件都具有類型(TYPE)字段。一個(gè)被稱為“SmmHandler”的新類型被包括在固件文件頭內(nèi)的類型字段的列舉中。理解了固件卷和固件文件系統(tǒng),實(shí)現(xiàn)和公布SMM_BASE接口的所有驅(qū)動(dòng)程序都將知道ReadFile(讀取文件)服務(wù)和這種新類型。參考圖9,該機(jī)制開(kāi)始于框182,其中SMM_BASE驅(qū)動(dòng)程序搜索預(yù)引導(dǎo)過(guò)程中在系統(tǒng)中被具體化的所有固件卷。如開(kāi)始循環(huán)框和結(jié)束循環(huán)框184和186定義的,下面的邏輯被應(yīng)用于這些固件卷中的每一個(gè)。在判斷框188中,判斷固件卷是否包括任何與固件文件系統(tǒng)一致的固件文件。如果答案是“否”,則邏輯循環(huán)返回以檢測(cè)下一個(gè)固件卷。如果找到了一個(gè)或者多個(gè)一致的固件文件,則利用下面的過(guò)程,這些文件中每一個(gè)都被檢測(cè),如開(kāi)始循環(huán)框和結(jié)束循環(huán)框190和192所定義的。在判斷框194中,SMM_BASE驅(qū)動(dòng)檢測(cè)當(dāng)前文件的文件類型,以確定它是否是“SMMHandle”文件。如果不是,邏輯循環(huán)返回,以開(kāi)始下一個(gè)文件的檢測(cè)。如果文件類型是“SMMHandler”,則在框196中,SMM_BASE驅(qū)動(dòng)程序分解固件文件節(jié)(section);節(jié)是固件文件內(nèi)的內(nèi)部打包機(jī)制。如框198所提供的,如果一個(gè)節(jié)包含有PE32+可執(zhí)行映像,或者,如果SMM_BASE的實(shí)施方式是在支持加載遺留16位處理程序的IA32系統(tǒng)上的,則SMM_BASE驅(qū)動(dòng)程序?qū)惭b包含在該節(jié)中的遺留16位處理程序或者可執(zhí)行映像,其中PE32+是微軟在可移動(dòng)映像(PortableImage)規(guī)范(于“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包括類似的過(guò)程。然而,也存在著一些區(qū)別。二者之間一個(gè)主要的區(qū)別是ItaniumTM處理器沒(méi)有基于它的xMI信號(hào)的激活而進(jìn)入的專用CPU模式。而是ItaniumTM處理器僅僅提供一種將處理程序綁定進(jìn)處理器的機(jī)制以處理PMI事件。這種綁定通過(guò)進(jìn)入處理器抽象層(PAL)的注冊(cè)調(diào)用來(lái)起作用,其中PAL是Intel為所有Itanium平臺(tái)構(gòu)建器提供的固件,包括Itanium體系結(jié)構(gòu)的一部分,其用來(lái)提供相容的固件接口以抽象處理器實(shí)施方式特定(processorimplementation-specific)的特征。圖10和圖11示出了用ItaniumTM處理器處理PMI事件和注冊(cè)處理程序的細(xì)節(jié)。注冊(cè)過(guò)程在框200中開(kāi)始,其中EFI2.0SMM_BASE驅(qū)動(dòng)程序加載64位版本的SMM中心。一旦加載了SMM中心,則在框202中,EFI用在存儲(chǔ)器中被加載的中心的映像調(diào)用PAL_PMI_ENTRYPOINT服務(wù),這創(chuàng)建了進(jìn)入中心代碼的入口點(diǎn)。在初始化過(guò)程中,PAL公布一組稱為PAL_PROCS的服務(wù)。然后,在框204中,這些PAL_PROCS中的一個(gè)被用于向適當(dāng)?shù)奶幚砥魈囟?processor-specific)的資源注冊(cè)入口點(diǎn),所述資源例如處理器模型特定(processor’smodel-specific)的寄存器(MSR)。由此,入口點(diǎn)的注冊(cè)創(chuàng)建了處理器和經(jīng)由SMM中心被訪問(wèn)的一組PMI事件處理程序之間的綁定。參考圖11A,PMI事件處理然后可以如下進(jìn)行。在框206中,PAL_PMI事件處理程序接收PMI事件。然后,在框208中,PAL_PMI事件處理程序調(diào)用SMM中心24,使得被選擇執(zhí)行可擴(kuò)展PMI事件處理的處理器的處理被引導(dǎo)至在上面被注冊(cè)的中心入口點(diǎn)。接下來(lái),在框210中,所有的處理器被集中(rendezvous),由此,除了所選擇的處理器(例如,在預(yù)引導(dǎo)過(guò)程中被識(shí)別的第一處理器)之外的所有處理器被停止,而被選擇的處理器中的SMM中心被執(zhí)行。然后,在框212中,各CPU的機(jī)器狀態(tài)被CPU硬件和SMM中心24兩者保存。在一個(gè)實(shí)施例中,根據(jù)圖11B,一旦處理器的機(jī)器狀態(tài)已經(jīng)被保存,則本地64位處理程序按照處理程序隊(duì)列的順序被調(diào)度到下一個(gè)可用的處理器,直到適當(dāng)?shù)氖录幚沓绦虮粓?zhí)行完畢以服務(wù)PMI事件,如開(kāi)始循環(huán)框和結(jié)束循環(huán)框68A和70A所提供的。在該實(shí)施例中,在框68A、70A、72A、74A、76A、78A、80A、82A、84A、88A和90A中所執(zhí)行的操作反映了由示于圖2B中的框中的共用了相同的基礎(chǔ)參考標(biāo)號(hào)的框所執(zhí)行的操作,除了在64位處理程序替代32位處理程序被調(diào)度和執(zhí)行的情況以外。舉例來(lái)說(shuō),在以類似于上面參照?qǐng)D2B中的框72所討論的更新處理程序隊(duì)列48的方式,在每個(gè)處理程序的調(diào)度之后,在框72A中,處理程序隊(duì)列48被更新。在確認(rèn)PMI事件被處理后,在框90A中,SMM中心恢復(fù)機(jī)器狀態(tài)并執(zhí)行對(duì)于處理器/所有處理器的適當(dāng)?shù)闹噶?IA32上的RSM和對(duì)于IPF的在b0的返回),以將(一個(gè)或多個(gè))處理器返回它/它們的先前的處理模式。在示于圖11C中的另一個(gè)實(shí)施例中,多個(gè)事件處理程序被調(diào)度到可用處理器,并通過(guò)類似于上面參照?qǐng)D2C所討論的方式被執(zhí)行至完成,其中類似的操作在具有共同基礎(chǔ)參考標(biāo)號(hào)的框中執(zhí)行。除了這些實(shí)施例,PMI事件處理還可以包括以類似于上面參照?qǐng)D4B和圖5所描述的方式,調(diào)度和執(zhí)行并發(fā)事件處理程序。框架還規(guī)定了在SMM模式中的時(shí)候的服務(wù)中斷。除了上述響應(yīng)于SMI或PMI激活而以同步方式調(diào)度處理程序外,還提供了處理程序的周期性激活的機(jī)制。這部分地通過(guò)軟件xMI定時(shí)器服務(wù)處理程序被支持。該服務(wù)處理程序可以編程平臺(tái)資源,來(lái)以某個(gè)給定的時(shí)間間隔造成周期性的SMI/PMI的激活。相關(guān)聯(lián)的處理程序還可以向其他希望成為監(jiān)聽(tīng)者或代理以響應(yīng)這些周期性事件的對(duì)等處理程序公布該能力。這樣,來(lái)自軟件xMI定時(shí)服務(wù)處理程序的基于GUID的服務(wù)可以被其他處理程序使用,并且允許它們?cè)跁r(shí)間被分片的基礎(chǔ)上被調(diào)用。該框架還提供了用于取消周期性激活的服務(wù)。這種周期性服務(wù)能力的一種示例的使用涉及軟件存儲(chǔ)器整理處理程序。存儲(chǔ)器整理經(jīng)常被用來(lái)糾正存儲(chǔ)器錯(cuò)誤,并且涉及讀取存儲(chǔ)器和寫回存儲(chǔ)器。通常,該任務(wù)是通過(guò)系統(tǒng)的芯片組(例如,存儲(chǔ)器控制器)和/或由存儲(chǔ)器組件(例如,DRAMDIMM)提供的內(nèi)置功能而自動(dòng)處理的。但是,在某些情況中,存儲(chǔ)器控制器或內(nèi)置功能不夠完善,該任務(wù)必須由軟件通過(guò)服務(wù)處理程序來(lái)執(zhí)行。例如,假定給定的芯片組只能夠在DRAM存儲(chǔ)體級(jí)別報(bào)告SBE(單比特錯(cuò)誤),并且該存儲(chǔ)體大小可達(dá)到1G字節(jié)。如果SMI或PMI處理程序在單個(gè)激活過(guò)程中試圖軟件整理存儲(chǔ)器,則對(duì)十億個(gè)存儲(chǔ)器單元的每個(gè)的讀/寫訪問(wèn)將具有長(zhǎng)期延遲,特別是因?yàn)樵撛L問(wèn)需要向真實(shí)的DRAM寫回。前臺(tái)操作系統(tǒng)控制的這種損耗將很可能對(duì)該操作系統(tǒng)產(chǎn)生不利的影響,至少引起明顯的系統(tǒng)“凍結(jié)”并且可能使OS崩潰。如此,一種解決方法是讓存儲(chǔ)器整理處理程序使用上面所描述的本發(fā)明的并行調(diào)度機(jī)制以進(jìn)行分段的并發(fā)存儲(chǔ)器整理,其中處理程序被分階段地進(jìn)行,使得每個(gè)階段期間只處理存儲(chǔ)器整理的一個(gè)部分(例如10MB或者100MB的塊)。例如,在一個(gè)實(shí)施例中,處理程序?qū)⒄{(diào)用xMI定時(shí)器處理程序來(lái)以連續(xù)的間隔請(qǐng)求激活(例如,100毫秒、1秒等),其中在每個(gè)間隔期間,預(yù)定的存儲(chǔ)器塊被整理,直到所有的存儲(chǔ)器已經(jīng)被整理。用于實(shí)現(xiàn)本發(fā)明的示例機(jī)器參考圖12,圖示了結(jié)合實(shí)踐本發(fā)明而適于使用的一般的傳統(tǒng)多處理器計(jì)算機(jī)系統(tǒng)300。多處理器計(jì)算機(jī)系統(tǒng)300包括處理器機(jī)箱302,其中安裝有軟盤驅(qū)動(dòng)器304、硬盤驅(qū)動(dòng)器306、其上組裝了包括多個(gè)處理器(描述為處理器309A和309B)的適當(dāng)?shù)募呻娐返闹靼?08、一個(gè)或多個(gè)存儲(chǔ)器模塊310以及以及電源(未示出),這是本領(lǐng)域的普通技術(shù)人員一般公知的。主板308還包括本地固件存儲(chǔ)設(shè)備311(例如,閃爍可擦除只讀存儲(chǔ)器(flashEPROM)),其上存儲(chǔ)了BIOS固件基本部分。為了方便對(duì)經(jīng)由網(wǎng)絡(luò)314從遠(yuǎn)程固件存儲(chǔ)設(shè)備312取得的BIOS固件的部分進(jìn)行訪問(wèn),個(gè)人計(jì)算機(jī)300包括網(wǎng)絡(luò)接口卡316或者集成在主板208中的等效電路。網(wǎng)絡(luò)314可以包括局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)和/或者互聯(lián)網(wǎng),并且可以提供個(gè)人計(jì)算機(jī)300和遠(yuǎn)程固件存儲(chǔ)設(shè)備312之間的有線或者無(wú)線連接。該機(jī)器還包括顯示器318,用于顯示由個(gè)人計(jì)算機(jī)運(yùn)行的軟件程序所產(chǎn)生的以及在POST(上電自檢)和其他方式的固件加載/執(zhí)行的過(guò)程中通常會(huì)顯示的圖像和文本。鼠標(biāo)320(或者其他點(diǎn)選設(shè)備)被連接至處理器機(jī)箱302背面的串口(或總線端口),來(lái)自鼠標(biāo)320的信號(hào)被傳輸至主板308以控制顯示器上的光標(biāo),以及選擇通過(guò)在個(gè)人計(jì)算機(jī)上執(zhí)行的軟件程序而顯示在顯示器318上的文本、菜單項(xiàng)和圖像成分。另外,鍵盤322被耦和至主板,用于文本和命令的使用戶輸入,它們影響在個(gè)人計(jì)算機(jī)上執(zhí)行的軟件程序的運(yùn)行。個(gè)人計(jì)算機(jī)300也可選擇地包括光盤只讀存儲(chǔ)(CD-ROM)驅(qū)動(dòng)器324,CD-ROM盤可以插入其中,使得盤上的可執(zhí)行文件和數(shù)據(jù)能夠被讀出,以傳輸至個(gè)人計(jì)算機(jī)300的存儲(chǔ)器和/或者硬盤驅(qū)動(dòng)器306上的存儲(chǔ)裝置里。如果基本BIOS固件被保存在可重寫設(shè)備上,例如flashEPROM,用于更新BIOS固件基本部分的機(jī)器指令可以被存儲(chǔ)在CD-ROM盤上或者軟盤上,由計(jì)算機(jī)的處理器讀出并處理,以重寫存儲(chǔ)在flashEPROM上的BIOS固件??筛碌腂IOS固件也可以經(jīng)由網(wǎng)絡(luò)314加載。雖然已經(jīng)結(jié)合了實(shí)踐本發(fā)明及其修改的優(yōu)選方式描述了本發(fā)明,但是本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以在所附權(quán)利要求范圍內(nèi),對(duì)本發(fā)明作出許多其他的修改。所以,本發(fā)明的范圍并不意味著以任何方式由以上的描述來(lái)限定,而是完全根據(jù)所附的權(quán)利要求來(lái)決定。附錄用于IA32的SMM_ACCESS協(xié)議SMM_ACCESS協(xié)議被芯片組驅(qū)動(dòng)程序,即82815芯片組的MCH驅(qū)動(dòng)程序公布。該驅(qū)動(dòng)程序抽象了存儲(chǔ)器控制器開(kāi)、關(guān)和鎖定SMRAM的能力。它還描述了用于SMRAM的可能區(qū)域,包括在0xA000處的遺留幀緩沖區(qū)的位置以及物理DRAM頂部附近的存儲(chǔ)器(T-SEG)。SMM_ACCESS協(xié)議構(gòu)造器應(yīng)在ExitBootServices上注冊(cè)一個(gè)回調(diào)(call-back)。SMM_ACCESS協(xié)議提供了以下功能SMM_ACCESS::Open該服務(wù)抽象了從基于非SMRAM代碼的使能SMRAM可見(jiàn)性的存儲(chǔ)器控制器編程。這使得SMM_BASE協(xié)議能將代碼,例如SMM中心,復(fù)制和安裝進(jìn)SMRAM中。SMM_ACCESS::Close該服務(wù)抽象了從非SMRAM代碼的禁止SMRAM可見(jiàn)性的存儲(chǔ)器控制器編程。這使得SMM_BASE協(xié)議能阻止其他預(yù)引導(dǎo)代理查看基于SMRAM的內(nèi)容。SMM_ACCESS::Lock該服務(wù)抽象了保證SMRAM安全的硬件能力,以使以后的嘗試不能成功開(kāi)啟該區(qū)域的可見(jiàn)性。SMM_ACCESS::GetCapabilities該調(diào)用為調(diào)用者提供了可被用作SMRAM的可用存儲(chǔ)器區(qū)域,其中調(diào)用者很可能是SMM_BASE驅(qū)動(dòng)程序。這是公布信息的只讀報(bào)告服務(wù)。影響對(duì)SMRAM中這種存儲(chǔ)的解碼的芯片組編程以及對(duì)該區(qū)域的聲明,通過(guò)獲得所指的區(qū)域而生效(見(jiàn)下一服務(wù))。SMM_ACCESS::AcquireSmramRange該服務(wù)提供了兩種類型的功能。第一個(gè)是它是對(duì)EFI2.0引導(dǎo)服務(wù)調(diào)用者可見(jiàn)的資源管理數(shù)據(jù)庫(kù)。平臺(tái)中可用的SMRAM的可能區(qū)域被GetCapabilities的服務(wù)SMRAM映射公布,并且區(qū)域是可以通過(guò)該服務(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)的驅(qū)動(dòng)程序的更新,但是該調(diào)用還需要實(shí)際上使請(qǐng)求方式無(wú)效的芯片組編程。權(quán)利要求1.一種方法,用于在多處理器計(jì)算機(jī)系統(tǒng)中服務(wù)隱藏執(zhí)行模式事件,包括將多個(gè)事件處理程序加載進(jìn)隱藏的存儲(chǔ)器空間,所述隱藏的存儲(chǔ)器空間對(duì)于由所述多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器中的每個(gè)所支持的隱藏執(zhí)行模式是可訪問(wèn)的,但是對(duì)于這些處理器的其他操作模式是不可訪問(wèn)的;響應(yīng)于所述隱藏執(zhí)行模式事件,將所述多個(gè)事件處理程序中的事件處理程序調(diào)度到所述多個(gè)處理器中的不同的處理器;以及并發(fā)地執(zhí)行被調(diào)度到所述不同的處理器上的所述事件處理程序,以服務(wù)所述隱藏執(zhí)行模式事件。2.如權(quán)利要求1所述的方法,其中所述隱藏執(zhí)行模式包括微處理器的系統(tǒng)管理模式,并且所述隱藏執(zhí)行模式事件包含系統(tǒng)管理中斷事件。3.如權(quán)利要求1所述的方法,其中所述隱藏執(zhí)行模式事件包含處理器管理中斷事件。4.如權(quán)利要求1所述的方法,還包括生成包含所述多個(gè)事件處理程序的有序列表的處理程序隊(duì)列;基于在所述有序列表中每個(gè)事件處理程序的相對(duì)位置,將事件處理程序調(diào)度到下一個(gè)可用的處理器來(lái)執(zhí)行。5.如權(quán)利要求1所述的方法,還包括將第一組事件處理程序調(diào)度到所述多個(gè)處理器中的各個(gè)處理器;對(duì)于被調(diào)度的每個(gè)事件處理程序,判斷所述處理程序是否是用于服務(wù)所述隱藏執(zhí)行模式事件的適合的事件處理程序,并且,如果是的話,將該事件處理程序執(zhí)行至完成,以服務(wù)所述隱藏執(zhí)行模式事件;否則停止執(zhí)行被判斷為不是適合的事件處理程序的任何事件處理程序;以及將所述列表中的下一個(gè)事件處理程序調(diào)度到下一個(gè)可用的處理器,并且判斷所述事件處理程序是否是適合的事件處理程序,并且重復(fù)這種操作直到已經(jīng)調(diào)度了適合的事件處理程序,之后,該事件處理程序被執(zhí)行至完成,以服務(wù)所述事件。6.如權(quán)利要求5所述的方法,其中所述多個(gè)事件處理程序中的每個(gè)包括一組機(jī)器代碼,所述代碼由所述處理器執(zhí)行以服務(wù)由所述計(jì)算機(jī)系統(tǒng)中的硬件組件所產(chǎn)生的引起所述隱藏執(zhí)行模式事件的錯(cuò)誤狀態(tài),并且所述判斷事件處理程序是否是服務(wù)所述隱藏執(zhí)行模式事件的適合的事件處理程序的步驟包括執(zhí)行對(duì)應(yīng)于被調(diào)度的事件處理程序的所述一組機(jī)器代碼的第一部分,所述代碼的第一部分詢問(wèn)對(duì)應(yīng)于所述事件處理程序的所述硬件組件,以判斷所述錯(cuò)誤狀態(tài)是否是由該硬件組件引起的;以及如果判斷出所述錯(cuò)誤狀態(tài)是由其對(duì)應(yīng)的硬件組件所引起的,則完成用于所述事件處理程序的所述這組機(jī)器代碼的執(zhí)行,否則返回值以調(diào)用軟件組件,指示所述事件處理程序不是用于服務(wù)所述錯(cuò)誤狀態(tài)的適合的事件處理程序。7.如權(quán)利要求1所述的方法,還包括將事件處理程序管理服務(wù)加載進(jìn)所述隱藏的存儲(chǔ)器空間;向所述事件處理管理服務(wù)注冊(cè)所述多個(gè)事件處理程序;響應(yīng)于所述隱藏執(zhí)行模式事件,重定向?qū)τ谒x擇的處理器的指令指針,以開(kāi)始執(zhí)行所述事件處理程序管理服務(wù);以及經(jīng)由所述事件處理程序管理服務(wù),將所述多個(gè)事件處理程序中的事件處理程序調(diào)度到至少兩個(gè)不同的處理器,以服務(wù)所述事件。8.如權(quán)利要求7所述的方法,還包括在所述多處理器計(jì)算機(jī)系統(tǒng)中的每個(gè)處理器上執(zhí)行事件處理程序之前,保存對(duì)于該處理器的與處理模式和機(jī)器狀態(tài)有關(guān)的信息;以及在所述事件已經(jīng)被一個(gè)或多個(gè)適合的事件處理程序服務(wù)之后,將每個(gè)處理器返回到其先前的處理器模式和機(jī)器狀態(tài),以恢復(fù)其各自操作的執(zhí)行。9.如權(quán)利要求1所述的方法,還包括提供資源鎖定機(jī)制,所述機(jī)制使得特定資源每次只能被一個(gè)事件處理程序訪問(wèn)。10.如權(quán)利要求9所述的方法,其中所述資源鎖定機(jī)制包括一個(gè)或多個(gè)信號(hào)量的使用。11.如權(quán)利要求9所述的方法,還包括存儲(chǔ)與由任何已經(jīng)被調(diào)度的事件處理程序訪問(wèn)的一個(gè)或多個(gè)資源相對(duì)應(yīng)的資源鎖定信息;在執(zhí)行訪問(wèn)給定資源或一組資源的事件處理程序的任何代碼部分之前,檢查與所述資源或一組資源相對(duì)應(yīng)的資源鎖定信息,以證實(shí)所述資源或一組資源可用于訪問(wèn);以及在執(zhí)行所述事件處理程序的所述代碼部分之前,等待與所述資源或一組資源相對(duì)應(yīng)的所有資源鎖定被清除。12.如權(quán)利要求1所述的方法,其中所述隱藏執(zhí)行模式事件由支持并發(fā)訪問(wèn)的系統(tǒng)資源產(chǎn)生,并且其中多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例被調(diào)度到所述多個(gè)處理器,并且被并發(fā)地執(zhí)行以服務(wù)所述隱藏執(zhí)行模式事件。13.如權(quán)利要求12所述的方法,其中所述多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例使用基于定時(shí)器的機(jī)制被重復(fù)地調(diào)度,以分階段地服務(wù)所述隱藏執(zhí)行模式事件。14.一種方法,用于在多處理器計(jì)算機(jī)系統(tǒng)中服務(wù)系統(tǒng)管理中斷事件,包括將多個(gè)事件處理程序加載進(jìn)系統(tǒng)管理模式存儲(chǔ)器,當(dāng)所述多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器在系統(tǒng)管理模式中執(zhí)行時(shí),所述系統(tǒng)管理模式存儲(chǔ)器對(duì)于這些處理器是可訪問(wèn)的;響應(yīng)于所述系統(tǒng)管理中斷事件,將所述多個(gè)處理器切換到系統(tǒng)管理模式;將所述多個(gè)事件處理程序中的事件處理程序調(diào)度到所述多個(gè)處理器中的不同的處理器;以及在所述不同的處理器上并發(fā)地執(zhí)行被調(diào)度的所述事件處理程序,以服務(wù)所述系統(tǒng)管理中斷事件。15.如權(quán)利要求14所述的方法,還包括將事件處理程序管理服務(wù)加載到系統(tǒng)管理模式存儲(chǔ)器中;向所述事件處理管理服務(wù)注冊(cè)所述多個(gè)事件處理程序;響應(yīng)于所述系統(tǒng)管理中斷事件,重定向?qū)τ谒x擇的處理器的指令指針,以開(kāi)始執(zhí)行所述事件處理程序管理服務(wù);以及經(jīng)由所述事件處理程序管理服務(wù),調(diào)度所述事件處理程序,以服務(wù)所述系統(tǒng)管理中斷事件。16.如權(quán)利要求15所述的方法,還包括經(jīng)由所述事件處理程序管理服務(wù),維護(hù)處理程序隊(duì)列,在所述處理程序隊(duì)列中存儲(chǔ)了所述事件處理程序的有序列表;基于在所述有序列表中每個(gè)事件處理程序的相對(duì)位置,將事件處理程序調(diào)度到下一個(gè)可用的處理器來(lái)執(zhí)行。其中所述系統(tǒng)管理模式包括多處理器的系統(tǒng)管理模式,并且所述系統(tǒng)管理模式事件包含系統(tǒng)管理中斷事件。17.如權(quán)利要求14所述的方法,還包括存儲(chǔ)與由任何已經(jīng)被調(diào)度的事件處理程序訪問(wèn)的一個(gè)或多個(gè)資源相對(duì)應(yīng)的資源鎖定信息;在執(zhí)行訪問(wèn)給定資源或一組資源的事件處理程序的任何代碼部分之前,檢查與所述資源或一組資源相對(duì)應(yīng)的資源鎖定信息,以證實(shí)所述資源或一組資源可用于訪問(wèn);以及在執(zhí)行所述事件處理程序的所述代碼部分之前,等待與所述資源或一組資源相對(duì)應(yīng)的所有資源鎖定被清除。18.如權(quán)利要求14所述的方法,其中所述系統(tǒng)管理中斷事件由支持并發(fā)訪問(wèn)的系統(tǒng)資源產(chǎn)生,并且其中多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例被調(diào)度到所述多個(gè)處理器,并且被并發(fā)地執(zhí)行以服務(wù)所述系統(tǒng)管理中斷事件。19.如權(quán)利要求18所述的方法,其中所述多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例使用基于定時(shí)器的機(jī)制被重復(fù)地調(diào)度,以分階段地服務(wù)所述系統(tǒng)管理中斷事件。20.一種方法,用于在多處理器計(jì)算機(jī)系統(tǒng)中處理平臺(tái)管理中斷事件,包括將平臺(tái)管理中斷事件處理管理服務(wù)加載進(jìn)存儲(chǔ)器,所述存儲(chǔ)器對(duì)于所述多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器是可訪問(wèn)的;注冊(cè)對(duì)于所述平臺(tái)管理中斷事件處理管理服務(wù)的入口點(diǎn);使多個(gè)平臺(tái)管理中斷事件處理程序能夠經(jīng)由所述平臺(tái)管理中斷事件處理管理服務(wù)對(duì)所述處理器是可訪問(wèn)的;以及響應(yīng)于所述平臺(tái)管理中斷事件,引導(dǎo)所選擇的處理器開(kāi)始在所述平臺(tái)管理中斷事件處理管理服務(wù)的入口點(diǎn)執(zhí)行所述平臺(tái)管理中斷事件處理管理服務(wù),以實(shí)現(xiàn)如下操作將所述多個(gè)平臺(tái)管理中斷事件處理程序中的至少兩個(gè)調(diào)度到所述多個(gè)處理器中的不同的處理器;以及在所述不同的處理器上執(zhí)行所述至少兩個(gè)平臺(tái)管理中斷事件處理程序,以服務(wù)所述平臺(tái)管理中斷事件。21.如權(quán)利要求20所述的方法,其中所述多個(gè)事件處理程序通過(guò)公布注冊(cè)接口而被使得對(duì)于所述平臺(tái)管理中斷事件處理管理服務(wù)是可訪問(wèn)的,所述注冊(cè)接口使得能夠向所述平臺(tái)管理中斷事件處理管理服務(wù)注冊(cè)平臺(tái)管理中斷事件處理程序。22.如權(quán)利要求21所述的方法,其中向所述平臺(tái)管理中斷事件處理管理服務(wù)注冊(cè)多個(gè)事件處理程序,還包括經(jīng)由所述事件處理程序管理服務(wù)維護(hù)處理程序隊(duì)列,在所述處理程序隊(duì)列中存儲(chǔ)了所述事件處理程序的有序列表;基于在所述有序列表中每個(gè)事件處理程序的相對(duì)位置,將事件處理程序調(diào)度到下一個(gè)可用的處理器來(lái)執(zhí)行。23.如權(quán)利要求20所述的方法,還包括存儲(chǔ)與由任何已經(jīng)被調(diào)度的事件處理程序訪問(wèn)的一個(gè)或多個(gè)資源相對(duì)應(yīng)的資源鎖定信息;在執(zhí)行訪問(wèn)給定資源或一組資源的事件處理程序的任何代碼部分之前,檢查與所述資源或一組資源相對(duì)應(yīng)的資源鎖定信息,以證實(shí)所述資源或一組資源可用于訪問(wèn);以及在執(zhí)行所述事件處理程序的所述代碼部分之前,等待與所述資源或一組資源相對(duì)應(yīng)的所有資源鎖定被清除。24.如權(quán)利要求20所述的方法,其中所述平臺(tái)管理中斷事件由支持并發(fā)訪問(wèn)的系統(tǒng)資源產(chǎn)生,并且其中多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例被調(diào)度到所述多個(gè)處理器,并且被并發(fā)地執(zhí)行以服務(wù)所述平臺(tái)管理中斷事件。25.如權(quán)利要求24所述的方法,其中所述多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例使用基于定時(shí)器的機(jī)制被重復(fù)地調(diào)度,以分階段地服務(wù)所述平臺(tái)管理中斷事件。26.一種機(jī)器可讀介質(zhì),所述機(jī)器可讀介質(zhì)具有多個(gè)存儲(chǔ)于其上的機(jī)器指令,當(dāng)所述指令被多處理器計(jì)算機(jī)系統(tǒng)中的處理器執(zhí)行時(shí),進(jìn)行如下操作將多個(gè)事件處理程序加載進(jìn)隱藏的存儲(chǔ)器空間,所述隱藏的存儲(chǔ)器空間對(duì)于由所述多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器中的每個(gè)所支持的隱藏執(zhí)行模式是可訪問(wèn)的,但是對(duì)于這些處理器的其他操作模式是不可訪問(wèn)的;響應(yīng)于所述隱藏執(zhí)行模式事件,將所述多個(gè)事件處理程序中的事件處理程序調(diào)度到運(yùn)行在所述多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器之中的所選擇的處理器,使得在所述所選擇的處理器上可以并發(fā)地執(zhí)行所述事件處理程序,以服務(wù)所述隱藏執(zhí)行模式事件。27.如權(quán)利要求26所述的機(jī)器可讀介質(zhì),其中所述多個(gè)機(jī)器指令的執(zhí)行還進(jìn)行如下操作將第一組事件處理程序調(diào)度到所述所選擇的處理器,每個(gè)處理器被調(diào)度了所述第一組事件處理程序中的各自的事件處理程序;對(duì)于被調(diào)度的每個(gè)事件處理程序,判斷所述處理程序是否是用于服務(wù)所述隱藏執(zhí)行模式事件的適合的事件處理程序,并且,如果是的話,將該事件處理程序執(zhí)行至完成,以服務(wù)所述隱藏執(zhí)行模式事件;否則停止執(zhí)行被判斷為不是適合的事件處理程序的任何事件處理程序;以及將所述列表中的下一個(gè)事件處理程序調(diào)度到下一個(gè)可用的處理器,并且判斷所述事件處理程序是否是適合的事件處理程序,并且重復(fù)這種操作直到已經(jīng)調(diào)度了適合的事件處理程序,之后,該事件處理程序被執(zhí)行至完成,以服務(wù)所述事件。28.如權(quán)利要求26所述的機(jī)器可讀介質(zhì),其中所述隱藏執(zhí)行模式事件由支持并發(fā)訪問(wèn)的系統(tǒng)資源產(chǎn)生,并且其中多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例被調(diào)度到所述所選擇的處理器,并且被并發(fā)地執(zhí)行以服務(wù)所述隱藏執(zhí)行模式事件。29.如權(quán)利要求28所述的方法,其中所述多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例使用基于定時(shí)器的機(jī)制被重復(fù)地調(diào)度,以分階段地服務(wù)所述隱藏執(zhí)行模式事件。30.如權(quán)利要求26所述的機(jī)器可讀介質(zhì),其中所述多個(gè)機(jī)器指令的執(zhí)行還進(jìn)行如下操作提供資源鎖定機(jī)制,所述機(jī)制使得特定資源每次只能被一個(gè)事件處理程序訪問(wèn);存儲(chǔ)與由任何已經(jīng)被調(diào)度的事件處理程序訪問(wèn)的一個(gè)或多個(gè)資源相對(duì)應(yīng)的資源鎖定信息;在執(zhí)行訪問(wèn)給定資源或一組資源的事件處理程序的任何代碼部分之前,檢查與所述資源或一組資源相對(duì)應(yīng)的資源鎖定信息,以證實(shí)所述資源或一組資源可用于訪問(wèn);以及在執(zhí)行所述事件處理程序的所述代碼部分之前,等待與所述資源或一組資源相對(duì)應(yīng)的所有資源鎖定被清除。31.一種多處理器計(jì)算機(jī)系統(tǒng),包括主板;存儲(chǔ)器,所述存儲(chǔ)器可操作地耦合到所述主板,在所述存儲(chǔ)器中存儲(chǔ)了多個(gè)機(jī)器指令;多個(gè)處理器,所述多個(gè)處理器可操作地耦合到所述主板并且與所述存儲(chǔ)器相通信地鏈接,用于執(zhí)行所述機(jī)器指令,以進(jìn)行如下操作將多個(gè)事件處理程序加載進(jìn)隱藏的存儲(chǔ)器空間,所述隱藏的存儲(chǔ)器空間對(duì)于由所述多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器中的每個(gè)所支持的隱藏執(zhí)行模式是可訪問(wèn)的,但是對(duì)于這些處理器的其他操作模式是不可訪問(wèn)的;響應(yīng)于所述隱藏執(zhí)行模式事件,將所述多個(gè)事件處理程序中的事件處理程序調(diào)度到運(yùn)行在所述多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器之中的所選擇的處理器,使得在所述所選擇的處理器上可以并發(fā)地執(zhí)行所述事件處理程序,以服務(wù)所述隱藏執(zhí)行模式事件。32.如權(quán)利要求31所述的多處理器計(jì)算機(jī)系統(tǒng),其中由所述多個(gè)處理器進(jìn)行的所述多個(gè)機(jī)器指令的執(zhí)行還進(jìn)行如下操作將第一組事件處理程序調(diào)度到所述所選擇的處理器,每個(gè)處理器被調(diào)度了所述第一組事件處理程序中的各自的事件處理程序;對(duì)于被調(diào)度的每個(gè)事件處理程序,判斷所述處理程序是否是用于服務(wù)所述隱藏執(zhí)行模式事件的適合的事件處理程序,并且,如果是的話,將該事件處理程序執(zhí)行至完成,以服務(wù)所述隱藏執(zhí)行模式事件;否則停止執(zhí)行被判斷為不是適合的事件處理程序的任何事件處理程序;以及將列表中的下一個(gè)事件處理程序調(diào)度到下一個(gè)可用的處理器,并且判斷所述事件處理程序是否是適合的事件處理程序,并且重復(fù)這種操作直到已經(jīng)調(diào)度了適合的事件處理程序,之后,該事件處理程序被執(zhí)行至完成,以服務(wù)所述事件。33.如權(quán)利要求31所述的多處理器計(jì)算機(jī)系統(tǒng),其中所述隱藏執(zhí)行模式事件由支持并發(fā)訪問(wèn)的系統(tǒng)資源產(chǎn)生,并且其中多個(gè)事件處理程序?qū)嵗蛘呤录幚沓绦虼a部分實(shí)例被調(diào)度到所述所選擇的處理器,并且被并發(fā)地執(zhí)行以服務(wù)所述隱藏執(zhí)行模式事件。34.如權(quán)利要求31所述的多處理器計(jì)算機(jī)系統(tǒng),其中由所述多個(gè)處理器進(jìn)行的所述多個(gè)機(jī)器指令的執(zhí)行還進(jìn)行如下操作提供資源鎖定機(jī)制,所述機(jī)制使得特定資源每次只能被一個(gè)事件處理程序訪問(wèn);存儲(chǔ)與由任何已經(jīng)被調(diào)度的事件處理程序訪問(wèn)的一個(gè)或多個(gè)資源相對(duì)應(yīng)的資源鎖定信息;在執(zhí)行訪問(wèn)給定資源或一組資源集事件處理程序的任何代碼部分之前,檢查與所述資源或一組資源相對(duì)應(yīng)的資源鎖定信息,以證實(shí)所述資源或一組資源可用于訪問(wèn);以及在執(zhí)行所述事件處理程序的所述代碼部分之前,等待與所述資源或一組資源相對(duì)應(yīng)的所有資源鎖定被清除。全文摘要一種方法和系統(tǒng),其在基于處理器管理中斷(PMI)和系統(tǒng)管理中斷(SMI)的調(diào)度執(zhí)行框架中使能并發(fā)事件處理程序的執(zhí)行,以服務(wù)PMI或SMI事件。多個(gè)事件處理程序被加載到隱藏的存儲(chǔ)器空間中,該隱藏的存儲(chǔ)器空間對(duì)于多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)處理器的每個(gè)所支持的隱藏執(zhí)行模式是可訪問(wèn)的,但對(duì)于這些處理器的其他操作模式是不可訪問(wèn)的。接著,響應(yīng)于隱藏執(zhí)行模式事件,事件處理程序被調(diào)度到兩個(gè)或多個(gè)處理器,并且被并發(fā)地執(zhí)行以服務(wù)該事件。各種實(shí)施例包括使用用于服務(wù)事件的單個(gè)事件處理程序、執(zhí)行不同任務(wù)的多個(gè)事件處理程序以及并發(fā)執(zhí)行單個(gè)任務(wù)的多個(gè)事件處理程序?qū)嵗?。本發(fā)明還提供了資源鎖定機(jī)制以防止資源訪問(wèn)沖突。文檔編號(hào)G06F9/46GK1589431SQ02822826公開(kāi)日2005年3月2日申請(qǐng)日期2002年11月13日優(yōu)先權(quán)日2001年11月15日發(fā)明者文森特·齊默,沙曼娜·達(dá)塔申請(qǐng)人:英特爾公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1