專利名稱:Smi處理和初始化的優(yōu)化的制作方法
領(lǐng)域本發(fā)明涉及計(jì)算機(jī)系統(tǒng)領(lǐng)域,并且更具體地說(shuō),涉及系統(tǒng)管理模式優(yōu)化。
背景計(jì)算機(jī)系統(tǒng)在我們的社會(huì)中正變得越來(lái)越普遍,所述計(jì)算機(jī)系統(tǒng)包括從例如個(gè)人數(shù)字?jǐn)?shù)據(jù)助理和蜂窩電話的小型手持電子設(shè)備到例如機(jī)頂盒和其他消費(fèi)類(lèi)電子的專用電子組件,再到完全可移動(dòng)設(shè)備、桌面和服務(wù)器系統(tǒng)的一切事物。但是,系統(tǒng)變的越小和越便宜,對(duì)高效的存儲(chǔ)器分配和系統(tǒng)管理的需求就變得越重要。
一直以來(lái),服務(wù)器系統(tǒng)的傳統(tǒng)特征在于同一系統(tǒng)(多處理器系統(tǒng))中的大量的常規(guī)存儲(chǔ)器和多個(gè)物理處理器,其中物理處理器是指單個(gè)處理器管芯(die)或單個(gè)封裝(package)。服務(wù)器系統(tǒng)可用的大量存儲(chǔ)器已經(jīng)導(dǎo)致效率極其低下的存儲(chǔ)器空間分配和嚴(yán)重浪費(fèi)的執(zhí)行時(shí)間。
典型地,在多處理器系統(tǒng)中,在引導(dǎo)時(shí)(upon boot),每個(gè)處理器對(duì)喚醒進(jìn)行仲裁(arbitrate),所述喚醒操作可以包括分配存儲(chǔ)器和重新定位處理器的基地址(SMBase)。在初始化每個(gè)處理器的過(guò)程中產(chǎn)生系統(tǒng)管理中斷(SMI),所述SMI使用每個(gè)處理器(processor)的默認(rèn)SMI處理程序(SMI handler)來(lái)處理。通常,處理器使用賽跑(race toflag)的方案來(lái)仲裁,其中開(kāi)始處理SMI的第一處理器能夠開(kāi)始初始化。初始化通常包括為每個(gè)處理器分配分開(kāi)的且不同的4KB對(duì)齊的存儲(chǔ)器空間,這迫使人們分配比系統(tǒng)管理所需的存儲(chǔ)器要多的存儲(chǔ)器。
此外,當(dāng)發(fā)生系統(tǒng)管理中斷(SMI)時(shí),無(wú)論是在引導(dǎo)期間還是常規(guī)操作期間,多處理器系統(tǒng)中的每個(gè)處理器運(yùn)行分開(kāi)的且不同的SMI處理程序來(lái)服務(wù)/處理SMI。存在著兩種類(lèi)型的SMI。第一種是異步中斷,異步中斷可以由系統(tǒng)硬件產(chǎn)生,例如當(dāng)電池電量低時(shí)。因?yàn)椴恍枰懒硪粋€(gè)處理器的狀態(tài)保存區(qū)的信息來(lái)服務(wù)請(qǐng)求,所以異步中斷可以分別被任一處理器處理。第二種中斷即同步SMI由軟件產(chǎn)生,應(yīng)該被每個(gè)處理器處理。典型地,軟件產(chǎn)生的SMI發(fā)生在操作系統(tǒng)(OS)需要處理器進(jìn)入系統(tǒng)管理模式(SMM)時(shí)。SMM是用于執(zhí)行不干擾操作系統(tǒng)和應(yīng)用程序的軟件例程/處理程序的環(huán)境。
在當(dāng)前的多處理器系統(tǒng)中,每個(gè)處理器進(jìn)入SMM并且隨后一條接一條地執(zhí)行不同的SMI處理程序來(lái)核查它們的寄存器,以找出哪個(gè)處理器產(chǎn)生所述SMI。這需要為每個(gè)處理器執(zhí)行分開(kāi)的SMI處理程序,這就引入了資源爭(zhēng)奪問(wèn)題,并因此使得對(duì)SMI處理程序代碼的更新變得困難。
但是,這些效率低下的初始化和處理方法不限于多處理器服務(wù)器系統(tǒng),還存在于其他系統(tǒng)中,例如移動(dòng)多處理器系統(tǒng)。超線程技術(shù)(HT)是一項(xiàng)來(lái)自加利福尼亞州圣塔克萊拉市的Intel公司的技術(shù),所述技術(shù)使得能夠使用信號(hào)物理處理器并行地執(zhí)行線程。HT在一個(gè)物理處理器(同一管芯)上包括兩個(gè)邏輯處理器。邏輯處理器是操作系統(tǒng)(OS)可見(jiàn)的獨(dú)立處理器,能夠執(zhí)行代碼并且維持相對(duì)于系統(tǒng)中其他處理器來(lái)說(shuō)獨(dú)特的體系結(jié)構(gòu)狀態(tài)。HT是通過(guò)包括多個(gè)體系結(jié)構(gòu)狀態(tài)來(lái)實(shí)現(xiàn)的,所述多個(gè)體系結(jié)構(gòu)狀態(tài)共享一套執(zhí)行資源。
因此,HT使得人們能夠在移動(dòng)平臺(tái)中實(shí)現(xiàn)多(邏輯)處理器系統(tǒng)。如上所示,效率低下的存儲(chǔ)器分配、處理器初始化和SMI處理存在于傳統(tǒng)的多處理器系統(tǒng)(例如服務(wù)器系統(tǒng))中。此外,隨著多處理器系統(tǒng)開(kāi)始滲入資源(例如存儲(chǔ)器)受限的移動(dòng)領(lǐng)域,對(duì)于上述的低效率的優(yōu)化的需求就變得愈發(fā)重要。
附圖簡(jiǎn)要說(shuō)明本發(fā)明是以示例性的方式描述的,并且不應(yīng)認(rèn)為本發(fā)明受附圖限制。
圖1示出具有多個(gè)處理器的設(shè)備的方框圖,所述多個(gè)處理器共享執(zhí)行資源、緩存和存儲(chǔ)器。
圖2示出具有多個(gè)處理器的系統(tǒng)的方框圖。
圖3示出具有物理處理器的系統(tǒng)的方框圖,所述物理處理器包括多個(gè)邏輯處理器圖4示出第一處理器喚醒第二處理器的流程圖。
圖5示出使用第一處理器喚醒第二處理器的例證性實(shí)施方案的流程圖。
圖6示出在第一和第二處理器上使用相同的SMI處理程序處理SMI的流程圖。
圖7示出在第一和第二處理器上使用一個(gè)SMI處理程序處理SMI的例證性實(shí)施方案的流程圖。
圖8示出如果產(chǎn)生的SMI是軟件SMI的情況下在第一和第二處理器上執(zhí)行相同的系統(tǒng)管理中斷代碼的流程圖,。
圖9示出如果正被處理的SMI是軟件產(chǎn)生的情況下執(zhí)行相同的SMI處理程序的第一和第二處理器的例證性實(shí)施方案的流程圖。
詳細(xì)描述在以下描述中闡述了大量具體的細(xì)節(jié),例如具體的存儲(chǔ)器地址、存儲(chǔ)器大小、組件配置的實(shí)施例,以提供對(duì)本發(fā)明的完整理解。然而,本領(lǐng)域的技術(shù)人員將會(huì)清楚,無(wú)需使用這些具體的細(xì)節(jié)可以實(shí)現(xiàn)本發(fā)明。此外,沒(méi)有詳細(xì)描述公知的組件和方法,例如例程引導(dǎo)模塊(block)(例如上電自檢(POST))、具體的系統(tǒng)管理模式(SMM)實(shí)現(xiàn)以及具體的系統(tǒng)管理中斷處理程序代碼,以免不必要地模糊本發(fā)明。
在此描述的方法和裝置用于在多處理器系統(tǒng)中當(dāng)喚醒處理器時(shí)優(yōu)化存儲(chǔ)器分配和優(yōu)化系統(tǒng)管理中斷(SMI)處理。喚醒處理器的方法可以發(fā)生為任何數(shù)量的普通操作的結(jié)果。例如,當(dāng)計(jì)算機(jī)上電或重啟時(shí),可以喚醒非活動(dòng)/睡眠的處理器。此外,當(dāng)系統(tǒng)從低功率狀態(tài)返回時(shí),可以喚醒非活動(dòng)的處理器,所述低功率狀態(tài)例如睡眠、待機(jī)、掛起、休眠、等待SIPI、睡眠、深度睡眠、重啟和第二處理器不響應(yīng)中斷的任何其他模式。
本領(lǐng)域的技術(shù)人員將會(huì)很容易理解,所公開(kāi)的喚醒第二處理器的方法可以適用于任何級(jí)別的計(jì)算機(jī)系統(tǒng)(個(gè)人數(shù)字助理、移動(dòng)平臺(tái)、桌面平臺(tái)和服務(wù)器平臺(tái))以及任何數(shù)量的處理器。例如,具有四個(gè)或更多個(gè)處理器的多處理器系統(tǒng)可以采用該方法利用活動(dòng)的處理器來(lái)喚醒非活動(dòng)的處理器。
圖1-3示出了可以具體實(shí)施在此描述的方法的一些硬件的例證性的實(shí)施例。在此描述的方法可以用于任何多處理器系統(tǒng);因此所述方法只在參考圖3時(shí)詳細(xì)描述,以免因?yàn)椴槐匾募?xì)節(jié)模糊本發(fā)明。
圖1示出了具有多個(gè)邏輯處理器的設(shè)備105的方框圖。物理處理器是指物理處理器管芯或單個(gè)封裝。邏輯處理器是操作系統(tǒng)(OS)可見(jiàn)的獨(dú)立處理器,所述邏輯處理器能夠執(zhí)行代碼并保存相對(duì)于系統(tǒng)中其他處理器來(lái)說(shuō)獨(dú)特的體系結(jié)構(gòu)狀態(tài)。超線程技術(shù)(HT)是一項(xiàng)來(lái)自加利福尼亞州圣塔克萊拉市的Intel公司的技術(shù),所述技術(shù)使得能夠使用信號(hào)物理處理器并行地執(zhí)行線程。HT在一個(gè)物理處理器上包括兩個(gè)邏輯處理器,并且通過(guò)復(fù)制體系結(jié)構(gòu)狀態(tài)來(lái)實(shí)現(xiàn),其中每個(gè)體系結(jié)構(gòu)狀態(tài)共享一套處理器執(zhí)行資源。
設(shè)備105可以包括第一處理器120和第二處理器125。設(shè)備105可以是物理處理器。設(shè)備105也可以是嵌入式系統(tǒng)或其他的具有至少兩個(gè)處理器的設(shè)備。處理器120和125可以是邏輯處理器。例如,處理器105可以包括體系結(jié)構(gòu)狀態(tài)寄存器130和135,所述體系結(jié)構(gòu)狀態(tài)寄存器130和135各自保存獨(dú)特的體系結(jié)構(gòu)狀態(tài)。很容易理解,設(shè)備105可以包括兩個(gè)以上的邏輯處理器,所述邏輯處理器各自具有與其相關(guān)聯(lián)的體系結(jié)構(gòu)狀態(tài)寄存器以保存各自的體系結(jié)構(gòu)狀態(tài)。所述兩個(gè)處理器120和125共享相同的執(zhí)行資源140、緩存145、總線150和存儲(chǔ)器155。
設(shè)備105還可以包括控制器110。控制器110可以是高級(jí)可編程中斷控制器(APIC)控制器??刂破?10可以被用于產(chǎn)生系統(tǒng)管理中斷(SMI)。控制器110也可以被用于在APIC總線(未示出)上通信,所述APIC總線將第一處理器120和第二處理器125耦合到一起。
設(shè)備105還可以包括存儲(chǔ)器155。存儲(chǔ)器可以是任何類(lèi)型的可以存儲(chǔ)數(shù)據(jù)的儲(chǔ)存裝置。例如存儲(chǔ)器155可以是存儲(chǔ)信息的寄存器。存儲(chǔ)器155也可以是緩存145的另一層次。存儲(chǔ)器155還可以是某種形式的置于器件105上的系統(tǒng)存儲(chǔ)器。
存儲(chǔ)器155至少包括第一存儲(chǔ)器單元(location)160和第二存儲(chǔ)器單元165。第一存儲(chǔ)器單元160可以包括默認(rèn)的系統(tǒng)管理處理程序代碼。第一存儲(chǔ)器單元160還可以是按1k對(duì)齊的。第二處理器165可以是另一不按1k對(duì)齊的地址。第一存儲(chǔ)器單元160和第二存儲(chǔ)器單元165還可以分別是第一處理器120和第二處理器125的基地址。在重新定位第一處理器120的基地址時(shí),第二存儲(chǔ)器單元165還可以被用作暫存空間。第一和第二存儲(chǔ)器單元將參照?qǐng)D4到9中描述的方法被更詳細(xì)地描述。
參照?qǐng)D2,示出了具有多個(gè)處理器的系統(tǒng)的例證性實(shí)施例。系統(tǒng)可以包括第一處理器205和第二處理器210。處理器205和210可以是物理處理器,其中每個(gè)處理器位于其自身的封裝中。系統(tǒng)還可以包括將處理器205和210耦合到控制器中心(hub)220的系統(tǒng)總線215??刂破髦行?20也可以通過(guò)總線225被耦合到存儲(chǔ)器230。
圖3示出了具有多個(gè)處理器的系統(tǒng)的實(shí)施例。處理器305可以包括共享執(zhí)行資源330、緩存335和系統(tǒng)總線340的處理器310和處理器315。體系結(jié)構(gòu)狀態(tài)寄存器320和325分別保存處理器320和325的獨(dú)特的體系結(jié)構(gòu)狀態(tài)。系統(tǒng)總線340將處理器305耦合到控制器中心345??刂破髦行?45可以通過(guò)第二總線350被耦合到系統(tǒng)存儲(chǔ)器。系統(tǒng)存儲(chǔ)器可以包括多個(gè)存儲(chǔ)器單元,例如第一存儲(chǔ)器單元365和第二處理器單元370。
圖3的例證性系統(tǒng)將被用于描述圖4到9中所述的方法。雖然圖3在描述高效的存儲(chǔ)器分配和系統(tǒng)管理中斷(SMI)處理方法時(shí)被提及,但是很明顯地,圖1、圖2中的硬件和其他未示出的硬件配置可以實(shí)現(xiàn)在此描述的方法。
圖4示出了第一處理器喚醒第二處理器的高級(jí)流程圖。第一和第二處理器可以是位于一個(gè)處理器管芯上的邏輯處理器、位于如圖2所示的分開(kāi)的封裝上的分開(kāi)的處理器或在其他多處理器配置中的處理器。最初,當(dāng)多處理器系統(tǒng)從低功率狀態(tài),例如睡眠、待機(jī)、掛起、休眠、等待SIPI、睡眠、深度睡眠、重啟和任何其他的第二處理器不響應(yīng)中斷的模式中回復(fù)時(shí),第一處理器應(yīng)該初始化為活動(dòng)狀態(tài),而第二處理器應(yīng)該初始化為非活動(dòng)狀態(tài)?;顒?dòng)狀態(tài)可以包括執(zhí)行代碼或響應(yīng)中斷。反過(guò)來(lái),非活動(dòng)狀態(tài)可以包括不響應(yīng)中斷。非活動(dòng)狀態(tài)也可以包括不執(zhí)行代碼。
在方框405中接收到第一系統(tǒng)管理中斷(SMI)。通常產(chǎn)生SMI來(lái)請(qǐng)求處理器的服務(wù)。一旦接收到SMI,除非處理器是非活動(dòng)的且不響應(yīng)中斷,否則處理器進(jìn)入系統(tǒng)管理模式(SMM),通過(guò)運(yùn)行常規(guī)存儲(chǔ)器中的SMI處理代碼和例程來(lái)服務(wù)該請(qǐng)求。
作為例證性的實(shí)施例,方框405中的第一SMI可以由控制器中心(例如圖3中描述的控制器中心345)產(chǎn)生。作為另一個(gè)實(shí)施例,方框405中的第一SMI可以由APIC(例如圖1中的控制器110)產(chǎn)生,或者由分開(kāi)定位在系統(tǒng)中的控制器(未示出)來(lái)產(chǎn)生。作為再一個(gè)實(shí)施例,方框405中的第一SMI可以通過(guò)改變例如處理器305的處理器或例如控制器345的控制器中心上的管腳的邏輯電平來(lái)產(chǎn)生。
方框405中的第一SMI可以是初始化SMM的服務(wù)請(qǐng)求,用于為系統(tǒng)管理分配地址空間和/或重新定位處理器基地址(SMBase)。SMBase可以是存儲(chǔ)器的系統(tǒng)管理部分的起始地址。SMBase也可以是存儲(chǔ)器的系統(tǒng)管理部分所參考的地址。例如SMBase可以是值0x30000。用于存儲(chǔ)器那部分的SMI處理程序可以參考SMBase偏移一個(gè)偏移量。例如,SMI處理程序可以從SMBase偏移0x8000(SMBase+0x8000),在本實(shí)施例中這會(huì)把SMI處理程序放在0x38000上。
當(dāng)在多處理器系統(tǒng)中產(chǎn)生了SMI時(shí),第一和第二處理器應(yīng)該接收/鎖存該SMI。但是,第二處理器可能在此時(shí)不進(jìn)入SMM并且不處理SMI,因?yàn)樗赡芴幱诜腔顒?dòng)狀態(tài)(不響應(yīng)中斷)。相反,在方框410中,第一處理器可以是活動(dòng)的,并且可以處理在方框405中接收到的第一SMI。當(dāng)?shù)谝惶幚砥鹘邮盏降谝籗MI時(shí),第一處理器可以進(jìn)入系統(tǒng)管理模式(SMM)來(lái)服務(wù)/處理該SMI。
如圖5所示,第一處理器可以通過(guò)在方框505中初始化SMM并且在方框510中執(zhí)行默認(rèn)的SMI處理程序來(lái)處理SMI。默認(rèn)的SMI處理程序可以是位于默認(rèn)存儲(chǔ)器單元(例如第一存儲(chǔ)器單元365)中默認(rèn)的代碼。第一存儲(chǔ)器單元可以是按1k、4k或任何其他大小對(duì)齊的存儲(chǔ)器區(qū)間(range)。
回到圖4,在方框415中由第一處理器產(chǎn)生喚醒信號(hào)。方框415中的喚醒信號(hào)可以是任何信號(hào),所述信號(hào)被發(fā)送以將第二處理器從非活動(dòng)狀態(tài)喚醒。因?yàn)榈诙幚砥髟诜腔顒?dòng)狀態(tài)可能不響應(yīng)中斷或不執(zhí)行代碼,所以喚醒信號(hào)可以是總線信號(hào),處于非活動(dòng)狀態(tài)的第二處理器等待該總線信號(hào)來(lái)開(kāi)始喚醒過(guò)進(jìn)。在一個(gè)實(shí)施方案中,喚醒信號(hào)可以是在耦合第一和第二處理器的總線(未示出)上傳輸?shù)膯?dòng)內(nèi)部處理器中斷(SIPI)消息,所述總線例如APIC總線。
如圖5的方框515中所示,喚醒信號(hào)可以是基于默認(rèn)SMI處理程序在存儲(chǔ)器中的位置的向量。喚醒信號(hào)可以是存儲(chǔ)器中的任何地址或任何對(duì)存儲(chǔ)器中地址單元的參考。在一個(gè)實(shí)施方案中,默認(rèn)SMI處理程序位于第一存儲(chǔ)器單元365中,其中喚醒信號(hào)是基于第一存儲(chǔ)器單元365的向量。在另一個(gè)實(shí)施方案中,喚醒信號(hào)是基于第一存儲(chǔ)器單元365的,所述存儲(chǔ)器單元365是按1k、4k或其他大小對(duì)齊的存儲(chǔ)器地址區(qū)間。第二處理器可以要求喚醒信號(hào)對(duì)齊并且要求其位于常規(guī)系統(tǒng)存儲(chǔ)器中。在另一個(gè)實(shí)施方案中,第一存儲(chǔ)器單元365可以是第二處理器315開(kāi)始執(zhí)行的地址單元。
回到圖4,方框420示出了第二處理器的喚醒操作。方框420可以包括喚醒第二處理器以允許它處理方框405中接收的第一SMI,或運(yùn)行基本的喚醒例程,例如上電自檢(POST)。
在下一個(gè)方框425中,在方框405中接收的第一SMI被第二處理器處理。然而,當(dāng)?shù)谝籗MI在方框405中被接收時(shí),第二處理器可能一直是非活動(dòng)的,并因此不能在該時(shí)刻服務(wù)該SMI;第二處理器在其處于非活動(dòng)狀態(tài)時(shí)可能依舊已經(jīng)鎖存了該SMI。一旦醒來(lái),第二處理器可以處理先前鎖存的第一SMI。
轉(zhuǎn)向圖5,在方框520和525中示出了使用第二處理器處理第一SMI的一個(gè)實(shí)施方案。在方框520中,第二處理器初始化SMM。此外,在方框525中第二處理器的指令指針可以被修改為第二存儲(chǔ)器地址,例如圖3中的第二存儲(chǔ)器地址370。第二存儲(chǔ)器地址370可以是未對(duì)齊的地址,所述地址不再限于常規(guī)存儲(chǔ)器。一旦第二處理器將指令指針修改(patch)為第二存儲(chǔ)器地址370,那么就沒(méi)有必要為執(zhí)行啟動(dòng)代碼分配常規(guī)的對(duì)齊存儲(chǔ)器。在完成初始化和恢復(fù)后,如方框530所示,第二處理器可以恢復(fù)到被修改的指令指針,并且開(kāi)始執(zhí)行其啟動(dòng)代碼,所述被修改的指針指向第二存儲(chǔ)器地址370。
參照?qǐng)D6,示出了無(wú)論是在引導(dǎo)時(shí)還是在普通操作下的處理SMI的方法,其中可以使用相同的SMI處理程序在多個(gè)處理器上處理SMI。在方框605中接收到SMI。SMI可以是例如電池電量低的硬件(異步)中斷或例如操作系統(tǒng)請(qǐng)求處理器改變頻率或功率水平的軟件中斷。典型地,硬件SMI可以被任一處理器處理而不需知道其他處理器的狀態(tài)保存區(qū)。相反,軟件SMI常常依賴于處理器在SMI被產(chǎn)生時(shí)的體系結(jié)構(gòu)狀態(tài),并因此需要訪問(wèn)產(chǎn)生該SMI的處理器的狀態(tài)保存區(qū)。因此,軟件產(chǎn)生的SMI可以使多處理器系統(tǒng)中的所有處理器進(jìn)入SMM并執(zhí)行處理程序。
在方框610中,第一處理器執(zhí)行SMI代碼(SMI處理程序),用于為第一處理器處理SMI。處理SMI可以包括執(zhí)行SMI代碼以確定正被檢查的當(dāng)前處理器的狀態(tài)保存區(qū)是否產(chǎn)生了SMI。處理SMI還包括服務(wù)SMI請(qǐng)求。
如上參考圖4所述,第一處理器可以具有第一SMBase地址。SMI代碼(SMI處理程序)可以位于偏離第一SMBase地址默認(rèn)偏移量的地址。此外,SMI代碼可以參考目標(biāo)SMBase地址。目標(biāo)SMBase可以是SMI代碼打算訪問(wèn)該處理器的系統(tǒng)管理區(qū)域(存儲(chǔ)器中的區(qū)間)的地址。
作為例證性的實(shí)施例,目標(biāo)SMBase可以被默認(rèn)地設(shè)置為參考第一SMBase地址,所述SMBase地址是第一處理器的系統(tǒng)管理區(qū)域的起始地址。因此,當(dāng)接收到SMI并且執(zhí)行SMI處理程序代碼時(shí),SMI處理程序代碼能夠通過(guò)參考目標(biāo)SMBase來(lái)訪問(wèn)第一處理器系統(tǒng)管理區(qū)域,所述第一處理器系統(tǒng)管理區(qū)域可以包括第一處理器的狀態(tài)保存區(qū)。
在方框610中執(zhí)行SMI代碼來(lái)為第一處理器處理SMI之后,可以執(zhí)行相同的SMI代碼/處理程序來(lái)為第二處理器處理SMI,如方框615所示。在圖7中在流程圖中示出了執(zhí)行SMI處理程序來(lái)為第二處理器處理SMI的方框615的例證性實(shí)施例。在方框705中,SMI處理程序的目標(biāo)SMBase地址從第一處理器的第一SMBase地址改為第二處理器的第二SMBase地址。
繼續(xù)上面的例證性實(shí)施例,在使用以第一SMBase為目標(biāo)的目標(biāo)SMBase來(lái)執(zhí)行SMI處理程序之后,目標(biāo)SMBase可以被改為以第二SMBase地址為目標(biāo)。第二SMBase地址可以是第二處理器的系統(tǒng)管理區(qū)域(存儲(chǔ)器空間)的起始地址。因此,如方框710所示,當(dāng)使用第二處理器的SMBase作為目標(biāo)SMBase來(lái)執(zhí)行SMI處理程序時(shí),相同的SMI代碼/處理程序能夠通過(guò)參考偏置第二處理器的SMBase地址來(lái)為第二處理器處理SMI。
圖8示出了如果正被產(chǎn)生處理的SMI是軟件產(chǎn)生的情況下為多個(gè)處理器執(zhí)行相同的SMI處理程序代碼的另一個(gè)例證性實(shí)施例。如上所述,硬件SMI可以被任何處理器處理而不會(huì)影響其他處理器。因此,在方框805中,第一處理器執(zhí)行SMI代碼。在方框810中,第一處理器或第二處理器可以進(jìn)行核查來(lái)觀察SMI是否是軟件產(chǎn)生的。很明顯地,任一處理器可以以任意時(shí)間順序進(jìn)行核查來(lái)觀察正被處理的SMI是否是軟件產(chǎn)生的。例如,在方框805之前第一處理器可以進(jìn)行核查來(lái)觀察SMI是否是由軟件產(chǎn)生,隨后在方框805中執(zhí)行SMI處理程序代碼。作為另一個(gè)實(shí)施例,在方框805之后第二處理器可以進(jìn)行核查來(lái)觀察是否有軟件產(chǎn)生的SMI存在。如果軟件SMI不存在,那么第一處理器在方框815中退出SMM并且返回普通操作。
然而,如果SMI是軟件產(chǎn)生的,那么第二處理器也應(yīng)該處理該SMI。在方框820中,第二處理器可以隨后執(zhí)行與方框805中第一處理器執(zhí)行的代碼相同的SMI代碼。
圖9中使用流程圖示出了執(zhí)行相同SMI代碼的例證性實(shí)施例。與圖6和圖7大部分相同的是,可以位于第一存儲(chǔ)器單元365中的第一處理器SMBase可以是目標(biāo)SMBase地址。在使用第一處理器執(zhí)行SMI代碼來(lái)為第一處理器處理SMI之后,在方框905中目標(biāo)SMBase可以被改為以第二處理器的SMBase地址為目標(biāo)。在方框910中,使用第二處理器的SMBase作為目標(biāo)SMBase來(lái)執(zhí)行SMI代碼。此外,如方框915所示,目標(biāo)SMBase可以被恢復(fù)成以第一處理器SMBase地址為目標(biāo)。
很明顯地,第一和第二處理器的任何組合都可以執(zhí)行SMI代碼。例如,第一處理器可以為第一處理器執(zhí)行SMI代碼。隨后,在目標(biāo)SMBase被改為第二處理器的SMBase后,第一處理器可以再次執(zhí)行該SMI代碼來(lái)為第二處理器處理SMI。作為另一個(gè)實(shí)施例,第二處理器可以兩次都執(zhí)行該SMI代碼。作為再一個(gè)實(shí)施例,在SMI代碼第一次被執(zhí)行來(lái)為第一處理器處理SMI時(shí)第一處理器可以執(zhí)行SMI代碼,并且第二處理器可以第二次執(zhí)行該SMI代碼來(lái)為第二處理器處理SMI。
因此,不同于當(dāng)前的系統(tǒng),這些優(yōu)化可以只使用一個(gè)要被產(chǎn)生的SMI來(lái)喚醒和開(kāi)始執(zhí)行第二處理器。此外,不同于在不同的默認(rèn)存儲(chǔ)器地址啟動(dòng)每個(gè)處理器的傳統(tǒng)方法,通過(guò)發(fā)送在第一存儲(chǔ)器地址啟動(dòng)第二處理器的喚醒信號(hào)可以節(jié)省存儲(chǔ)器,所述第一存儲(chǔ)器地址可以是默認(rèn)的SMI處理程序的位置。此外,通過(guò)在第二處理器處理第一SMI時(shí)修改指令指針,第二處理器可以在未對(duì)齊的第二存儲(chǔ)器地址恢復(fù)執(zhí)行。允許第二處理器在第二存儲(chǔ)器地址恢復(fù)執(zhí)行節(jié)省了為每個(gè)處理器分配的分開(kāi)的對(duì)齊存儲(chǔ)器空間。
此外,處理SMI可以使用統(tǒng)一的處理程序,通過(guò)使用第一處理器并且隨后使用第二處理器執(zhí)行相同的處理程序代碼來(lái)實(shí)現(xiàn)。通過(guò)進(jìn)行核查來(lái)觀察正被處理的SMI是否是軟件產(chǎn)生的,并且如果SMI不是軟件產(chǎn)生的就退出SMM,人們可以節(jié)省大量的執(zhí)行時(shí)間。此外,該實(shí)現(xiàn)允許平臺(tái)開(kāi)發(fā)更容易,因?yàn)檐浖MI處理程序所需的所有改變可以很容易地被包括在包裝(wrapper)代碼中而不需對(duì)軟件SMI處理程序例程進(jìn)行修改。
在前面的詳細(xì)說(shuō)明中,參考本發(fā)明的具體示例性的實(shí)施方案描述了本發(fā)明。但是,很明顯地,正如所附權(quán)利要求書(shū)所闡述的,可以對(duì)本發(fā)明做出各種修改和變化,而不背離本發(fā)明的較寬的精神和范圍。因此,本說(shuō)明書(shū)和附圖可以被視為描述性的而非限制性的。
權(quán)利要求
1.一種方法,包括接收第一系統(tǒng)管理中斷(SMI);使用第一處理器處理所述第一SMI;使用所述第一處理器產(chǎn)生喚醒信號(hào);基于來(lái)自所述第一處理器的所述喚醒信號(hào)喚醒第二處理器;以及使用第二處理器處理所述第一SMI。
2.如權(quán)利要求1所述方法,其中所述第一和第二處理器是邏輯處理器。
3.如權(quán)利要求1所述方法,其中所述第一和第二處理器是物理處理器。
4.如權(quán)利要求1所述方法,其中使用第一處理器處理所述第一SMI的操作包括執(zhí)行位于第一存儲(chǔ)器地址上的默認(rèn)SMI處理程序。
5.如權(quán)利要求4所述方法,其中所述喚醒信號(hào)包括基于所述第一存儲(chǔ)器地址的向量。
6.如權(quán)利要求5所述方法,其中所述第一存儲(chǔ)器地址是對(duì)齊的。
7.如權(quán)利要求6所述方法,其中所述第一存儲(chǔ)器地址是按4k對(duì)齊的。
8.如權(quán)利要求5所述方法,其中使用所述第二處理器處理所述第一SMI的操作包括執(zhí)行位于所述第一存儲(chǔ)器地址的所述默認(rèn)SMI處理程序。
9.如權(quán)利要求8所述方法,其中使用所述第二處理器處理所述第一SMI的操作還包括將指令指針修改為第二存儲(chǔ)器地址。
10.如權(quán)利要求9所述方法,其中所述第二存儲(chǔ)器地址是未對(duì)齊的地址。
11.如權(quán)利要求10所述方法,還包括在所述第二處理器已經(jīng)處理了所述第一SMI之后執(zhí)行所述第二存儲(chǔ)器地址上的代碼。
12.一種方法,包括接收第一系統(tǒng)管理中斷(SMI);響應(yīng)于所述第一SMI,使用第一處理器執(zhí)行第一存儲(chǔ)器地址上的代碼;使用所述第一處理器產(chǎn)生喚醒信號(hào);基于來(lái)自所述第一處理器的喚醒信號(hào)喚醒第二處理器;以及使用所述第二處理器執(zhí)行所述第一存儲(chǔ)器地址上的所述代碼。
13.如權(quán)利要求12所述方法,其中所述喚醒信號(hào)基于所述第一存儲(chǔ)器地址。
14.如權(quán)利要求13所述方法,其中所述第一存儲(chǔ)器地址是默認(rèn)SMI處理代碼的位置。
15.如權(quán)利要求14所述方法,其中所述第一存儲(chǔ)器地址位于常規(guī)存儲(chǔ)器中。
16.如權(quán)利要求15所述方法,其中所述第一存儲(chǔ)器地址是對(duì)齊的。
17.如權(quán)利要求12所述方法,其中所述第一和第二處理器都是位于相同管芯上的邏輯處理器。
18.如權(quán)利要求12所述方法,其中所述第一和第二處理器是位于分開(kāi)的封裝上的物理處理器。
19.如權(quán)利要求12所述方法,還包括將所述第二處理器的指令指針修改為第二存儲(chǔ)器地址。
20.如權(quán)利要求19所述方法,其中所述第二存儲(chǔ)器地址是未對(duì)齊的地址。
21.如權(quán)利要求20所述方法,還包括在將所述指令指針修改為所述第二存儲(chǔ)器地址之后執(zhí)行所述第二存儲(chǔ)器地址上的代碼。
22.如權(quán)利要求12所述方法,還包括在使用第一和第二處理器接收所述SMI之前產(chǎn)生所述SMI。
23.如權(quán)利要求22所述方法,其中產(chǎn)生所述SMI的操作包括改變耦合到控制器中心的管腳的邏輯電平。
24.如權(quán)利要求22所述方法,其中APIC被用于產(chǎn)生所述SMI。
25.如權(quán)利要求24所述方法,其中所述APIC位于所述第一處理器中。
26.一種方法,包括接收系統(tǒng)管理中斷;執(zhí)行SMI處理程序來(lái)為第一處理器處理SMI;以及執(zhí)行所述SMI處理程序來(lái)為第二處理器處理所述SMI。
27.如權(quán)利要求26所述方法,其中所述SMI是軟件產(chǎn)生的SMI。
28.如權(quán)利要求27所述方法,其中所述第一處理器執(zhí)行所述SMI處理程序來(lái)為所述第一和第二處理器處理所述SMI。
29.如權(quán)利要求26所述方法,其中所述SMI處理程序位于第一存儲(chǔ)器地址。
30.如權(quán)利要求29所述方法,其中所述第一存儲(chǔ)器地址是相對(duì)于用于所述第一處理器的第一系統(tǒng)管理基(SMBase)地址的默認(rèn)偏移。
31.如權(quán)利要求30所述方法,其中使用所述第一SMI處理程序處理所述第二SMI的操作包括將所述SMI處理程序的目標(biāo)SMBase從所述第一SMBase改為所述第二處理器的第二SMBase;以及使用所述第二處理器的SMBase作為所述目標(biāo)SMBase來(lái)執(zhí)行所述第一SMI處理程序。
32.一種方法,包括使用第一處理器執(zhí)行系統(tǒng)管理中斷(SMI)代碼來(lái)為所述第一處理器處理SMI;核查所述SMI時(shí)候是否是軟件產(chǎn)生的SMI;以及如果所述SMI是軟件產(chǎn)生的,執(zhí)行所述SMI代碼來(lái)為第二處理器處理所述SMI。
33.如權(quán)利要求32所述方法,其中,如果所述SMI是軟件產(chǎn)生的,所述第一處理器執(zhí)行所述SMI代碼來(lái)為所述第二處理器處理所述SMI。
34.如權(quán)利要求32所述方法,其中,如果所述SMI是軟件產(chǎn)生的,所述第二處理器執(zhí)行所述SMI代碼來(lái)為所述第二處理器處理所述SMI。
35.如權(quán)利要求32所述方法,其中所述第一處理器包括第一系統(tǒng)管理基(SMBase)地址。
36.如權(quán)利要求33所述方法,其中所述第二處理器包括第二SMBase地址。
37.如權(quán)利要求36所述方法,其中所述SMI代碼位于第一存儲(chǔ)器單元,所述第一存儲(chǔ)器單元相對(duì)于所述第一SMBase地址具有偏移。
38.如權(quán)利要求37所述方法,其中執(zhí)行所述SMI代碼來(lái)為所述第二處理器處理所述SMI的操作包括將所述SMI處理程序的所述目標(biāo)SMBase從所述第一SMBase改為所述第二SMBase;以及使用所述第二處理器的SMBase作為所述目標(biāo)SMBase來(lái)執(zhí)行所述SMI代碼。
39.如權(quán)利要求38所述方法,還包括在執(zhí)行所述SMI代碼來(lái)為所述第二處理器處理所述SMI之后,使所述SMI處理程序的所述目標(biāo)SMBase回到所述第一SMBase。
40.一種裝置,包括產(chǎn)生第一系統(tǒng)管理中斷(SMI)的控制器;耦合到所述控制器的第一邏輯處理器,所述第一邏輯處理器用于產(chǎn)生第一SMI來(lái)處理所述第一SMI,以及用于產(chǎn)生喚醒信號(hào);以及耦合到所述控制器的第二邏輯處理器,所述第二邏輯處理器用于在接收到來(lái)自所述第一邏輯處理器的所述喚醒信號(hào)后處理所述第一SMI。
41.如權(quán)利要求40所述裝置,其中為了使用所述第一邏輯處理器來(lái)處理所述第一SMI,所述第一邏輯處理器執(zhí)行第一存儲(chǔ)器單元上的代碼。
42.如權(quán)利要求41所述裝置,其中所述第一存儲(chǔ)器地址是按1k對(duì)齊的。
43.如權(quán)利要求41所述裝置,其中使用所述第二邏輯處理器處理所述第一SMI的操作包括執(zhí)行所述第一存儲(chǔ)器單元上的代碼。
44.如權(quán)利要求43所述裝置,其中使用所述第二邏輯處理器處理所述第一SMI的操作還包括將指令指針修改為第二存儲(chǔ)器地址。
45.一種系統(tǒng),包括產(chǎn)生第一系統(tǒng)管理中斷(SMI)的控制器中心;具有第一存儲(chǔ)器地址的存儲(chǔ)器,所述第一存儲(chǔ)器地址包括代碼;耦合到所述控制器中心用于處理所述第一SMI的第一處理器,其中所述第一處理器執(zhí)行所述第一存儲(chǔ)器地址上的代碼并產(chǎn)生喚醒信號(hào);以及耦合到所述控制器中心用于在接收到所述喚醒信號(hào)后處理所述第一SMI的第二處理器,其中所述第二處理器執(zhí)行所述第一存儲(chǔ)器地址上的所述代碼。
46.如權(quán)利要求45所述系統(tǒng),其中所述第一和第二處理器是位于相同管芯上的邏輯處理器。
47.如權(quán)利要求45所述系統(tǒng),其中所述第一和第二處理器是位于分開(kāi)的封裝上的物理處理器。
48.如權(quán)利要求45所述系統(tǒng),其中在所述控制器中心上反轉(zhuǎn)管腳以產(chǎn)生所述第一SMI。
49.如權(quán)利要求45所述系統(tǒng),其中代碼被所述控制器中心執(zhí)行,以產(chǎn)生所述第一SMI。
50.如權(quán)利要求45所述系統(tǒng),其中所述第一存儲(chǔ)器地址上的所述代碼是SMI處理代碼。
51.如權(quán)利要求50所述系統(tǒng),其中所述喚醒信號(hào)是包括所述第一存儲(chǔ)器地址的向量。
52.如權(quán)利要求51所述系統(tǒng),其中在接收到所述喚醒信號(hào)后使用所述第二處理器處理所述第一SMI的操作還包括將指針設(shè)置為第二存儲(chǔ)器地址。
53.如權(quán)利要求52所述系統(tǒng),其中所述第二處理器一旦從處理所述SMI的操作中恢復(fù),執(zhí)行所述第二存儲(chǔ)器地址上的代碼。
54.一種系統(tǒng),包括具有包括系統(tǒng)管理中斷(SMI)代碼的第一存儲(chǔ)器地址的存儲(chǔ)器;在接收到SMI時(shí)執(zhí)行所述SMI代碼的第一處理器;以及如果所述SMI是軟件產(chǎn)生的,執(zhí)行所述SMI代碼的第二處理器。
55.如權(quán)利要求54所述系統(tǒng),其中所述第一處理器包括第一系統(tǒng)管理基(SMBase)地址。
56.如權(quán)利要求55所述系統(tǒng),其中所述第二處理器包括第二SMBase地址。
57.如權(quán)利要求56所述系統(tǒng),其中所述第一存儲(chǔ)器地址相對(duì)于所述第一SMBase具有偏移。
58.如權(quán)利要求57所述系統(tǒng),其中所述目標(biāo)SMBase默認(rèn)地是所述第一SMBase。
59.如權(quán)利要求58所述系統(tǒng),其中,在所述第二處理器執(zhí)行所述SMI代碼之前,所述目標(biāo)SMBase被改為所述第二SMBase。
60.如權(quán)利要求54所述系統(tǒng),其中所述第一和第二處理器是邏輯處理器。
61.如權(quán)利要求54所述系統(tǒng),其中所述第一和第二處理器是物理處理器。
全文摘要
在本文中描述了用于高效的存儲(chǔ)器分配和系統(tǒng)管理中斷(SMI)處理的方法和裝置。一旦喚醒多個(gè)處理器系統(tǒng)中第二處理器,那么可以使用單個(gè)SMI來(lái)初始化每個(gè)處理器,可以使用單個(gè)默認(rèn)SMI處理程序的位置作為第二處理器的喚醒向量,并且可以在使用第二處理器處理SMI期間將指令指針修改到未對(duì)齊地址,以避免傳統(tǒng)的額外的對(duì)齊存儲(chǔ)器的分配。此外,可以使用統(tǒng)一的處理程序代碼在第一和第二處理器兩者上處理軟件產(chǎn)生的SMI,并且在處理完硬件SMI后可以直接退出SMM以節(jié)省執(zhí)行時(shí)間。
文檔編號(hào)G06F9/46GK1890634SQ200480036293
公開(kāi)日2007年1月3日 申請(qǐng)日期2004年9月30日 優(yōu)先權(quán)日2003年10月6日
發(fā)明者巴恩斯·庫(kù)珀, 格蘭特·小林 申請(qǐng)人:英特爾公司