專利名稱:安全執(zhí)行模式下信任客戶使用安全核心系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及內(nèi)存管理系統(tǒng)和方法,特別是涉及提供安全計(jì)算環(huán)境的內(nèi)存管理系統(tǒng)和方法。
背景技術(shù):
圖1為由x86處理器產(chǎn)生的異常堆棧幀(exception stackframe)100的方框圖,例如當(dāng)運(yùn)行視窗操作系統(tǒng)時(shí)(Windows操作系統(tǒng),由位于華盛頓州的雷特蒙德的微軟公司提供)。在異常處理程序的記錄(entry)中,除了代碼段(CS)、指令指針(EIP)、堆棧段(SS)、堆棧指針(ESP)寄存器和標(biāo)志寄存器(EFLAGS)以外,保留了發(fā)生異常(亦即,錯(cuò)誤應(yīng)用程序)的應(yīng)用程序的所有寄存器。在異常堆棧幀100中可取得這些寄存器的內(nèi)容。
異常堆棧幀100開(kāi)始于段地址SSESP,錯(cuò)誤碼位于異常堆棧幀100中的段地址SSESP+00h處,錯(cuò)誤應(yīng)用程序的指令指針寄存器的內(nèi)容位于異常堆棧幀100中的段地址SSESP+04h處,錯(cuò)誤應(yīng)用程序的代碼段寄存器的內(nèi)容位于異常堆棧幀100中的段地址SSESP+08h處,錯(cuò)誤應(yīng)用程序的標(biāo)志寄存器的內(nèi)容位于異常堆棧幀100中的段地址SSESP+0Ch處,錯(cuò)誤應(yīng)用程序的堆棧指針寄存器的內(nèi)容位于異常堆棧幀100中的段地址SSESP+10h處,錯(cuò)誤應(yīng)用程序的堆棧段寄存器的內(nèi)容位于異常堆棧幀100中的段地址SSESP+14h處。應(yīng)注意的是如果傳送至異常處理程序的相關(guān)控制包含了優(yōu)先權(quán)等級(jí)變更,則ESP和SS會(huì)出現(xiàn)在異常堆棧幀100中。
在段地址SSESP+04h的錯(cuò)誤應(yīng)用程序的指令指針寄存器的內(nèi)容指向錯(cuò)誤應(yīng)用程序中產(chǎn)生異常的指令。在段地址SSESP+10h的錯(cuò)誤應(yīng)用程序的堆棧指針寄存器的內(nèi)容為錯(cuò)誤應(yīng)用程序的堆棧幀在發(fā)生錯(cuò)誤時(shí)的地址(亦即,指向此地址)。
有關(guān)段異常的錯(cuò)誤碼非常類似于保護(hù)模式選擇器。最高的13位(位15:3)為選擇器索引,而位2為表索引。然而,取代請(qǐng)求者(requestor)優(yōu)先權(quán)等級(jí),位0和1會(huì)碰到下列的情況若由外部事件引起程序錯(cuò)誤,則位0(EXT)置位,若選擇器指針涉及IDT內(nèi)的門描述符,則位1(IDT)置位。
圖2為用于先進(jìn)微裝置(AMD)公司制造的x86處理器中的SYSCALL/SYSRET目標(biāo)地址寄存器(STAR)200的方框圖。該SYSCALL/SYSRET目標(biāo)地址寄存器200包括“SYSRET CS選擇器和SS選擇器基本”字段、“SYSCALL CS選擇器和SS選擇器基本”字段和“目標(biāo)EIP地址”字段。
在執(zhí)行SYSCALL指令之前的一些點(diǎn),操作系統(tǒng)將用于適當(dāng)?shù)南到y(tǒng)服務(wù)碼的代碼段的值寫入至SYSCALL/SYSRET目標(biāo)地址寄存器200的SYSCALL CS選擇器和SS選擇器基本字段。操作系統(tǒng)也將要被執(zhí)行的系統(tǒng)服務(wù)碼內(nèi)的第一指令的地址寫至SYSCALL/SYSRET目標(biāo)地址寄存器200的目標(biāo)EIP地址字段。STAR寄存器在系統(tǒng)啟動(dòng)配置。目標(biāo)EIP地址可指向操作系統(tǒng)核心中的固定系統(tǒng)服務(wù)區(qū)。
在執(zhí)行SYSCALL指令期間,將SYSCALL CS選擇器和SS選擇器基本字段的內(nèi)容復(fù)制到CS寄存器中。將SYSCALL CS選擇器和SS選擇器基本字段的內(nèi)容加上‘1000b’值,復(fù)制到SS寄存器中。如此有效地增量CS選擇器的指針字段而使得所得到的SS選擇器指向在描述符表中的CS描述符后的下一個(gè)描述符。目標(biāo)EIP地址字段的內(nèi)容復(fù)制到指令指針器寄存器中,并指定要被執(zhí)行的第一指令的地址。
在執(zhí)行相對(duì)于SYSCALL指令的SYSRET指令之前的一些點(diǎn),操作系統(tǒng)將用于呼叫碼的代碼段的值寫入至SYSCALL/SYSRET目標(biāo)地址寄存器(STAR)200的SYSCALL CS選擇器和SS選擇器基本字段。SYSRET指令獲得從ECX寄存器來(lái)的返回EIP地址。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個(gè)方面,提供了一種方法。該方法包括執(zhí)行一不安全例程并接收來(lái)自該不安全例程的請(qǐng)求。該方法還包括在硬件中執(zhí)行該請(qǐng)求的第一次評(píng)估,并在軟件中的安全例程中執(zhí)行該請(qǐng)求的第二次評(píng)估。
根據(jù)本發(fā)明的另一方面,提供了一種計(jì)算機(jī)系統(tǒng)。該計(jì)算機(jī)系統(tǒng)包括可配置來(lái)執(zhí)行安全例程和不安全例程的處理器。該計(jì)算機(jī)系統(tǒng)還包括連接以執(zhí)行與該不安全例程相關(guān)的請(qǐng)求的第一次評(píng)估的硬件。可進(jìn)一步配置該硬件以將該請(qǐng)求的通知提供至該安全例程。可配置該安全例程以執(zhí)行該請(qǐng)求的第二次評(píng)估??蛇M(jìn)一步配置該安全例程以拒絕該請(qǐng)求的請(qǐng)求響應(yīng)。
通過(guò)結(jié)合附圖的下述詳細(xì)說(shuō)明,可易于了解本發(fā)明,各圖中相同的參考數(shù)字表示相同或相似的組件,其中圖1為由x86處理器產(chǎn)生的異常堆棧幀的方框圖,例如運(yùn)行Windows操作系統(tǒng)時(shí);圖2為SYSCALL/SYSRET目標(biāo)地址寄存器的方框圖;圖3為根據(jù)本發(fā)明的一個(gè)方面的系統(tǒng)的一個(gè)實(shí)施例的方框圖;圖4A為可根據(jù)本發(fā)明的一個(gè)方面,可使用的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例的方框圖;圖4B為根據(jù)本發(fā)明的一個(gè)方面的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例的方框圖,該計(jì)算機(jī)系統(tǒng)包括了含有輸入/輸出(I/O)安全檢測(cè)單元(SCU)的中央處理器(CPU),該SCU用來(lái)保護(hù)設(shè)備硬件單元免于由該CPU產(chǎn)生的未經(jīng)授權(quán)的存??;圖4C為根據(jù)本發(fā)明的一個(gè)方面的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例的方框圖,該計(jì)算機(jī)系統(tǒng)包括了包含CPU安全檢測(cè)單元(SCU)的CPU和包含主橋接器SCU的主橋接器;圖5A顯示根據(jù)本發(fā)明的一個(gè)方面的計(jì)算機(jī)系統(tǒng)實(shí)施例的各種硬件組件和軟件組件間的一些關(guān)系的方框圖;圖5B顯示根據(jù)本發(fā)明的一個(gè)方面的計(jì)算機(jī)系統(tǒng)實(shí)施例的各種硬件組件和軟件組件間的一些關(guān)系的另一個(gè)方框圖;圖5C顯示根據(jù)本發(fā)明的一個(gè)方面的計(jì)算機(jī)系統(tǒng)實(shí)施例的各種硬件組件和軟件組件間的一些關(guān)系的又一個(gè)方框圖;圖6A為根據(jù)本發(fā)明的一個(gè)方面的一個(gè)CPU實(shí)施例的方框圖;圖6B為根據(jù)本發(fā)明的一個(gè)方面的另一個(gè)CPU實(shí)施例的方框圖;
圖6C為根據(jù)本發(fā)明的一個(gè)方面的另一個(gè)CPU實(shí)施例的方框圖;圖7為根據(jù)本發(fā)明的一個(gè)方面的包括了具有中央處理器SCU的分頁(yè)單元的一個(gè)MMU實(shí)施例的方框圖;圖8A為根據(jù)本發(fā)明的一個(gè)方面的顯示輸入/輸出SCU的一個(gè)實(shí)施例的方框圖;圖8B為根據(jù)本發(fā)明的一個(gè)方面的中央處理器SCU的一個(gè)實(shí)施例的方框圖;圖9為根據(jù)本發(fā)明的一個(gè)方面用來(lái)處理安全執(zhí)行模式(SEM)異常的安全模式SMCALL/SMRET目標(biāo)地址寄存器(SMSTAR)和安全模式GS基址(SMGSBASE)寄存器的實(shí)施例的方框圖;圖10A為根據(jù)本發(fā)明的一個(gè)方面,當(dāng)SEM異常發(fā)生時(shí),所產(chǎn)生的SEM異常堆棧幀的一個(gè)實(shí)施例的方框圖;圖10B為根據(jù)本發(fā)明的一個(gè)方面,SEM異常堆棧幀的錯(cuò)誤碼的示例性格式的方框圖;圖11為根據(jù)本發(fā)明的一個(gè)方面,處理安全執(zhí)行模式異常的方法的實(shí)施例的流程圖;圖12為根據(jù)本發(fā)明的各種方面,結(jié)合了在計(jì)算機(jī)系統(tǒng)中用來(lái)維持安全的各種實(shí)施例的方框圖;圖13為根據(jù)本發(fā)明的一個(gè)方面,用來(lái)存取選擇的內(nèi)存頁(yè)的安全屬性表(SAT)記錄以獲得選擇的內(nèi)存頁(yè)的額外的安全信息的機(jī)制的一個(gè)實(shí)施例的方框圖;圖14A為根據(jù)本發(fā)明的一個(gè)方面,SAT默認(rèn)寄存器的一個(gè)實(shí)施例的方框圖;圖14B為根據(jù)本發(fā)明的一個(gè)方面,SAT目錄記錄格式的一個(gè)實(shí)施例的方框圖;圖15為根據(jù)本發(fā)明的一個(gè)方面,SAT記錄格式的一個(gè)實(shí)施例的方框圖;圖16A為根據(jù)本發(fā)明的一個(gè)方面,包含主橋接器SCU的主橋接器的一個(gè)實(shí)施例的方框圖;圖16B為根據(jù)本發(fā)明的一個(gè)方面,包含主橋接器SCU的主橋接器的另一個(gè)實(shí)施例的方框圖;
圖17為根據(jù)本發(fā)明的一個(gè)方面,主橋接器SCU的一個(gè)實(shí)施例的方框圖;圖18為根據(jù)本發(fā)明的一個(gè)方面,包括存取授權(quán)表的主橋接器SCU的另一個(gè)實(shí)施例的方框圖;圖19為根據(jù)本發(fā)明的一個(gè)方面,根據(jù)本發(fā)明的一個(gè)實(shí)施例,圖2中所示的處理單元的更詳細(xì)方框圖;圖20為根據(jù)本發(fā)明的一個(gè)實(shí)施例,圖19中所示的I/O存取接口的更詳細(xì)方框圖;圖21A和圖21B為顯示根據(jù)本發(fā)明的各種方面,由圖19至20所示的處理器所執(zhí)行的I/O空間和/或I/O內(nèi)存存取的方框圖表示;圖22為顯示根據(jù)本發(fā)明的各種方面,儲(chǔ)存在內(nèi)存內(nèi)的SEM I/O允許位圖的一個(gè)實(shí)施例及用來(lái)存取SEM I/O允許位圖的機(jī)制的一個(gè)實(shí)施例的方框圖;圖23為顯示根據(jù)本發(fā)明的各種方面,圖22的SEM I/O允許位圖的另一個(gè)實(shí)施例及用來(lái)存取SEM I/O允許位圖的機(jī)制的又一個(gè)實(shí)施例的方框圖;圖24為根據(jù)本發(fā)明的一個(gè)方面,顯示計(jì)算機(jī)系統(tǒng)的各種硬件和軟件組件之間的關(guān)系圖,其中第一設(shè)備驅(qū)動(dòng)器和對(duì)應(yīng)的第一設(shè)備硬件單元放置于第一安全“室(compartment)”中,而第二設(shè)備驅(qū)動(dòng)器和對(duì)應(yīng)的第二設(shè)備硬件單元放置于第二安全室中,該第二安全室與該第一安全室分離并可獨(dú)立地操作;以及圖25為根據(jù)本發(fā)明的一個(gè)方面,顯示操作該計(jì)算機(jī)系統(tǒng)用以改進(jìn)安全性的方法的實(shí)施例的流程圖。
具體實(shí)施例方式
雖然本發(fā)明易受到許多不同形式的實(shí)施例的影響,然本發(fā)明已以方框圖顯示了特定的實(shí)施例并予以詳細(xì)說(shuō)明。但是應(yīng)了解的是,此處特定實(shí)施例的說(shuō)明并非將本發(fā)明限制于所揭示的特定形式,反之,本發(fā)明將涵蓋所有落入由所附的權(quán)利要求所界定的精神和范圍內(nèi)的所有的修飾、等效和改變。
下面將說(shuō)明本發(fā)明的具體實(shí)施例。為了清楚起見(jiàn),本說(shuō)明書中并未對(duì)所有實(shí)際執(zhí)行本發(fā)明的特征進(jìn)行了說(shuō)明。然而應(yīng)當(dāng)理解的是,開(kāi)發(fā)任何這種實(shí)際的實(shí)施例時(shí),必須作出許多與實(shí)施相關(guān)的決定,以便達(dá)到發(fā)明者的特定目標(biāo),比如符合隨著實(shí)施例的不同而有所變化的與系統(tǒng)相關(guān)及與商業(yè)相關(guān)的限制條件。此外,我們應(yīng)當(dāng)了解,這種開(kāi)發(fā)工作可能是復(fù)雜且耗時(shí)的,然而對(duì)于受益于本揭示的本領(lǐng)域技術(shù)人員來(lái)說(shuō)僅為一種例行工作。
現(xiàn)在參照?qǐng)D3,顯示了根據(jù)本發(fā)明的系統(tǒng)300的一個(gè)實(shí)施例。系統(tǒng)300包括處理單元310;多個(gè)輸入/輸出裝置,比如鍵盤330、鼠標(biāo)340和輸入筆350;及顯示單元320,比如監(jiān)視器。在一個(gè)實(shí)施例中,由本發(fā)明所揭示的安全等級(jí)系統(tǒng)設(shè)置在處理單元310中。根據(jù)本發(fā)明的一個(gè)方面,從輸入/輸出裝置330、340及350的其中之一進(jìn)來(lái)的輸入,可啟動(dòng)執(zhí)行在處理單元310中的一個(gè)或多個(gè)軟件結(jié)構(gòu),包括操作系統(tǒng)。然后存取相關(guān)存在于系統(tǒng)300中的輸入輸出空間和/或與輸入/輸出空間相關(guān)的內(nèi)存,以執(zhí)行存在于處理單元310中的各種軟件結(jié)構(gòu)。本發(fā)明的實(shí)施例將根據(jù)編程進(jìn)系統(tǒng)300的預(yù)定安全記錄來(lái)限制由一個(gè)或多個(gè)軟件結(jié)構(gòu)所啟動(dòng)的輸入/輸出空間存取。
圖4A為計(jì)算機(jī)系統(tǒng)400A的一個(gè)實(shí)施例的方框圖,該計(jì)算機(jī)系統(tǒng)400A包括中央處理器402、系統(tǒng)或“主”橋接器404、內(nèi)存406、第一設(shè)備總線408(例如,外圍設(shè)備互連或PCI總線)、設(shè)備總線橋接器410、第二設(shè)備總線412(例如,工業(yè)標(biāo)準(zhǔn)架構(gòu)或ISA總線)以及四個(gè)設(shè)備硬件單元414A至414D。主橋接器404連接到CPU 402、內(nèi)存406和第一設(shè)備總線408。主橋接器404轉(zhuǎn)換CPU 402和第一設(shè)備總線408之間的信號(hào),并可操作地將內(nèi)存406連接至CPU 402和第一設(shè)備總線408。設(shè)備總線橋接器410連接于第一設(shè)備總線408和第二設(shè)備總線412之間,并轉(zhuǎn)換第一設(shè)備總線408和第二設(shè)備總線412之間的信號(hào)。
在圖4A的實(shí)施例中,設(shè)備硬件單元414A和414B連接于第一設(shè)備總線408,而設(shè)備硬件單元414C和414D連接于第二設(shè)備總線412。舉例而言,一個(gè)或多個(gè)的設(shè)備硬件單元414A至414D可以是儲(chǔ)存裝置(例如,硬盤驅(qū)動(dòng)器、軟盤驅(qū)動(dòng)器和光盤驅(qū)動(dòng)器)、通訊裝置(例如,調(diào)制解調(diào)器和網(wǎng)絡(luò)適配器)或輸入/輸出裝置(例如,視頻裝置、音頻裝置和列表機(jī))。應(yīng)注意的是在其它實(shí)施例中,主橋接器404可以為CPU 402的一部分,如圖4A中所示。
在圖4B的實(shí)施例中,CPU 402包括I/O安全檢測(cè)單元417。設(shè)備硬件單元414A至414D可映射至CPU 402的I/O空間的各種I/O端口,和CPU 402可通過(guò)對(duì)應(yīng)的I/O端口而與設(shè)備硬件單元414A至414D通訊。在這種情況下,輸入/輸出SCU 417用來(lái)保護(hù)設(shè)備硬件單元414A至414D避免由CPU 402所產(chǎn)生的未經(jīng)授權(quán)的存取。應(yīng)注意的是在其它實(shí)施例中,主橋接器404可以為CPU 402的一部分,如圖4B中所示。
在圖4C的實(shí)施例中,CPU 402包括CPU安全檢測(cè)單元416,而主橋接器404包括主橋接器SCU 418。將在下文中更詳細(xì)說(shuō)明之,中央處理器SCU 416保護(hù)內(nèi)存406免于由該CPU 402所產(chǎn)生的未經(jīng)授權(quán)的存取(即,“軟件啟動(dòng)的存取”),而主橋接器SCU 418保護(hù)內(nèi)存406免于由設(shè)備硬件單元414A至414D所啟動(dòng)的未經(jīng)授權(quán)的存取(即,“硬件啟動(dòng)的存取”)。
圖5A為顯示圖4A或圖4B的計(jì)算機(jī)系統(tǒng)400的各種硬件組件和軟件組件間的一些關(guān)系的方框圖。在圖5A的實(shí)施例中,多個(gè)應(yīng)用程序500、操作系統(tǒng)502、安全核心504和設(shè)備驅(qū)動(dòng)器506A至506D儲(chǔ)存在內(nèi)存406中。應(yīng)用程序500、操作系統(tǒng)502、安全核心504和設(shè)備驅(qū)動(dòng)器506A至506D包括了由CPU 402所執(zhí)行的指令。操作系統(tǒng)502提供了用戶接口和其上可運(yùn)行應(yīng)用程序500的軟件平臺(tái)。操作系統(tǒng)502也可提供例如基本支持功能,該基本支持功能包括文件系統(tǒng)管理、處理管理和I/O控制。
操作系統(tǒng)502也可提供基本安全功能。例如,CPU 402可以是執(zhí)行x86指令集的指令的x86處理器。在這種情況下,CPU 402可包括特殊的硬件組件以提供如上所述的在保護(hù)模式中的虛擬內(nèi)存和物理內(nèi)存保護(hù)特征。操作系統(tǒng)502也可為例如在保護(hù)模式下操作CPU 402的Windows操作系統(tǒng)家族其中之一,以及操作系統(tǒng)502使用CPU 402的特定的硬件組件以提供在保護(hù)模式下的虛擬內(nèi)存和物理內(nèi)存保護(hù)。安全核心504提供由操作系統(tǒng)502所提供的安全功能之外的額外的安全功能,例如,保護(hù)儲(chǔ)存在內(nèi)存406中的數(shù)據(jù)免于未經(jīng)授權(quán)存取。
在圖5A的實(shí)施例中,設(shè)備驅(qū)動(dòng)器506A至506D操作上相關(guān)于且連接到各個(gè)對(duì)應(yīng)的設(shè)備硬件單元414A至414D。設(shè)備硬件單元414A和414D例如可以是“安全”裝置,而對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)器506A和506D可以是“安全”設(shè)備驅(qū)動(dòng)器。安全核心504連接于操作系統(tǒng)502和安全設(shè)備驅(qū)動(dòng)器506A與506D之間,并可通過(guò)應(yīng)用程序500和操作系統(tǒng)502來(lái)監(jiān)視所有的存取,以確保設(shè)備驅(qū)動(dòng)器506A和506D和對(duì)應(yīng)的安全設(shè)備414A和414D的安全。安全核心504可通過(guò)應(yīng)用程序500和操作系統(tǒng)502來(lái)防止對(duì)安全設(shè)備驅(qū)動(dòng)器506A和506D和對(duì)應(yīng)的安全裝置414A和414D的未經(jīng)授權(quán)的存取。另一方面,設(shè)備驅(qū)動(dòng)器506B和506C可以是“非安全”設(shè)備驅(qū)動(dòng)器,且對(duì)應(yīng)的設(shè)備硬件單元414B和414C可以是“非安全”設(shè)備硬件單元。設(shè)備驅(qū)動(dòng)器506B和506C和對(duì)應(yīng)的設(shè)備硬件單元414B和414C可以是例如“遺留”的設(shè)備驅(qū)動(dòng)器和設(shè)備硬件單元。
應(yīng)注意的是在其它實(shí)施例中,安全核心504可以是操作系統(tǒng)502的一部分。在其它的實(shí)施例中,安全核心504、設(shè)備驅(qū)動(dòng)器506A和506D和/或設(shè)備驅(qū)動(dòng)器506B和506C可以是操作系統(tǒng)502的一部分。
如圖5B中所示,安全核心504可以連接到輸入/輸出SCU 417。如將于下文中詳細(xì)說(shuō)明的,輸入/輸出SCU 417監(jiān)視至I/O地址空間中I/O端口的所有軟件啟動(dòng)的存取,并僅允許經(jīng)過(guò)授權(quán)的存取至I/O端口。
如圖5C中所指示的,安全核心504連接到中央處理器SCU 416和主橋接器SCU 418(例如,通過(guò)一個(gè)或多個(gè)設(shè)備驅(qū)動(dòng)器)。如將在下文中詳細(xì)說(shuō)明的,中央處理器SCU 416和主橋接器SCU 418控制至內(nèi)存406的存取。中央處理器SCU 416監(jiān)視所有的至內(nèi)存406的軟件啟動(dòng)的存取,而主橋接器SCU 418監(jiān)視所有的至內(nèi)存406的硬件啟動(dòng)的存取。一旦由安全核心504配置后,中央處理器SCU 416和主橋接器SCU 418僅允許經(jīng)過(guò)授權(quán)的存取至內(nèi)存406和I/O空間。應(yīng)注意在一個(gè)實(shí)施例中,中央處理器SCU 416保護(hù)著寄存器空間。
圖6A為圖4A的計(jì)算機(jī)系統(tǒng)400A的CPU 402的一個(gè)實(shí)施例的方框圖。在圖6A的實(shí)施例中,CPU 402A包括執(zhí)行單元600、內(nèi)存管理單元(MMU)602、高速緩存(cache)單元604、總線接口單元(BIU)606、一組控制寄存器608和一組安全執(zhí)行模式寄存器610。該組安全執(zhí)行模式寄存器610可用來(lái)執(zhí)行在圖4A的計(jì)算機(jī)系統(tǒng)400A中的安全執(zhí)行模式。安全執(zhí)行模式寄存器610由安全核心504所存取(即,寫入和/或讀取)。
在圖6A的實(shí)施例中,該組安全執(zhí)行模式寄存器610包括安全執(zhí)行模式位609。例如當(dāng)(i)CPU 402為在x86保護(hù)模式下操作的x86處理器,(ii)內(nèi)存分頁(yè)被使能,(iii)SEM位設(shè)定為“1”時(shí),則圖4A的計(jì)算機(jī)系統(tǒng)400A可以操作于安全執(zhí)行模式。也可以使用在安全執(zhí)行模式中指示操作的其它方法和安全執(zhí)行模式的其它操作。
一般而言,該組控制寄存器608的內(nèi)容被用來(lái)管理CPU 402的操作。因此,該組控制寄存器608的內(nèi)容被用來(lái)管理執(zhí)行單元600、MMU602、高速緩存單元604和/或BIU 606。該組控制寄存器608可包括,例如,x86處理器架構(gòu)的多個(gè)控制寄存器。
CPU 402的執(zhí)行單元600取得指令(例如,x86指令)和數(shù)據(jù),執(zhí)行該取得的指令及在指令執(zhí)行期間產(chǎn)生信號(hào)(例如,地址、數(shù)據(jù)、和控制信號(hào))。執(zhí)行單元600連接至高速緩存單元604,并可通過(guò)高速緩存單元604和BIU 606而接收從內(nèi)存406來(lái)的指令。應(yīng)注意的是執(zhí)行單元600可根據(jù)所執(zhí)行的內(nèi)容而執(zhí)行標(biāo)準(zhǔn)指令、安全指令和/或微碼。在一個(gè)實(shí)施例中,在處理器中執(zhí)行的微碼是硬件而非軟件。
計(jì)算機(jī)系統(tǒng)400A的內(nèi)存406(例如,圖4A)包括多個(gè)內(nèi)存位置,各具有唯一的物理地址。當(dāng)操作在具有能夠分頁(yè)的保護(hù)模式時(shí),CPU 402的地址空間劃分成稱為頁(yè)幀(page frame)或“頁(yè)”的多個(gè)區(qū)塊。在其它的實(shí)施例中,內(nèi)存可劃分成定義不同的內(nèi)存區(qū)域或通過(guò)這些內(nèi)存區(qū)域存取。一般而言,僅對(duì)應(yīng)于各頁(yè)的一部分的數(shù)據(jù)在指定的時(shí)間儲(chǔ)存在內(nèi)存406中。
在圖6A的實(shí)施例中,在指令執(zhí)行期間由執(zhí)行單元600所產(chǎn)生的地址信號(hào)表示段(即,“邏輯”)地址。MMU 602將由執(zhí)行單元600所產(chǎn)生的段地址轉(zhuǎn)換到對(duì)應(yīng)的內(nèi)存406的物理地址。MMU 602將物理地址提供至高速緩存單元604。高速緩存單元604為用來(lái)儲(chǔ)存由執(zhí)行單元600最新取得的指令和數(shù)據(jù)的相當(dāng)小的儲(chǔ)存單元。BIU 606連接在高速緩存單元604和主橋接器404之間,并用來(lái)通過(guò)主橋接器404獲取不在高速緩存單元604中的來(lái)自內(nèi)存406的指令和數(shù)據(jù)。應(yīng)注意的是高速緩存單元604為可選擇的,但其有利于為CPU 402提供更高的操作效率。
當(dāng)圖4A的計(jì)算機(jī)系統(tǒng)400A在安全執(zhí)行模式下操作時(shí),安全核心505在內(nèi)存406中產(chǎn)生并維持一個(gè)或多個(gè)安全屬性數(shù)據(jù)結(jié)構(gòu)(例如,表)。各內(nèi)存頁(yè)具有對(duì)應(yīng)的安全上下文(security context)識(shí)別(SCID)值,且該對(duì)應(yīng)的SCID值可儲(chǔ)存在安全屬性數(shù)據(jù)結(jié)構(gòu)內(nèi)。MMU 602使用在指令執(zhí)行期間所產(chǎn)生的地址(例如,物理地址)來(lái)存取一個(gè)或多個(gè)安全屬性數(shù)據(jù)結(jié)構(gòu)以獲得對(duì)應(yīng)于內(nèi)存頁(yè)的SCID。一般而言,計(jì)算機(jī)系統(tǒng)400A具有n個(gè)不同的SCID值,其中n為大于等于1的整數(shù)。
當(dāng)圖4A的計(jì)算機(jī)系統(tǒng)400A在安全執(zhí)行模式下操作時(shí),由違反安全機(jī)制的軟件所產(chǎn)生的各種活動(dòng)將引起安全執(zhí)行模式安全異常??赏ㄟ^(guò)一對(duì)類似于x86“SYSENTER”和“SYSEXIT”指令操作的寄存器(例如,模式指定寄存器或MSR)而迅速處理安全執(zhí)行模式安全異常。該對(duì)寄存器可以是“安全異常記錄點(diǎn)”寄存器,并且當(dāng)安全執(zhí)行模式安全異常發(fā)生時(shí)可定義對(duì)于指令執(zhí)行的分支目標(biāo)地址。該安全異常記錄點(diǎn)寄存器可定義代碼段、然后指令指針(IP,或64位形式RIP)、堆棧段和用于至安全執(zhí)行模式安全異常處理程序1210的記錄的堆棧指針(SP,或64位形式RSP)值(請(qǐng)參閱圖12)。
在軟件控制下,執(zhí)行單元600可將前面的SS、SP/RSP、EFLAGS、CS和IP/RIP值推到新的堆棧以指示異常發(fā)生處。此外,執(zhí)行單元600可將錯(cuò)誤碼推進(jìn)堆棧。應(yīng)注意的是,IRET指令可不用作為之前總是儲(chǔ)存著的SS和SP/RSP值,而即使當(dāng)前優(yōu)先權(quán)等級(jí)未發(fā)生改變,也總可完成堆棧交換。因此,可以定義新的指令以完成從SEM安全異常處理程序1210(SMRET)來(lái)的返回。
圖6B為圖4B的計(jì)算機(jī)系統(tǒng)400B的CPU 402B的一個(gè)實(shí)施例的方框圖。在圖6B的實(shí)施例中,CPU 402B包括執(zhí)行單元600、內(nèi)存管理單元(MMU)602、高速緩存單元604、總線接口單元(BIU)606、一組控制寄存器608、和一組安全執(zhí)行模式(SEM)寄存器610。BIU 606連接至主橋接器404(圖4),并在CPU 402B和主橋接器404之間形成接口。BIU 606還通過(guò)主橋接器404連接至內(nèi)存406(圖4),并在CPU 402B和內(nèi)存406之間形成接口。在圖6B的實(shí)施例中,輸入/輸出SCU 417位于BIU 606內(nèi)。
在圖4B的計(jì)算機(jī)系統(tǒng)400B內(nèi),可使用該組SEM寄存器610以執(zhí)行安全執(zhí)行模式(SEM),而由該組SEM寄存器610的內(nèi)容管理輸入/輸出SCU 417的操作。由安全核心504而存取(亦即,寫入和/或讀取)SEM寄存器610。
在圖6B的實(shí)施例中,該組SEM寄存器610包括SEM位609。圖4B的計(jì)算機(jī)系統(tǒng)400B例如當(dāng)(i)CPU 402B為在x86保護(hù)模式下操作的x86處理器(ii)內(nèi)存頁(yè)被使能,及(iii)SEM位設(shè)為“1”時(shí),則可在安全執(zhí)行模式下操作。
一般而言,該組控制寄存器608的內(nèi)容管理CPU 402B的操作。因此,該組控制寄存器608的內(nèi)容管理執(zhí)行單元600、MMU 602、高速緩存單元604和/或BIU 606的操作。該組控制寄存器608可包括諸如x86處理器架構(gòu)的多個(gè)控制寄存器。
CPU 402B的執(zhí)行單元600在指令執(zhí)行期間取得指令(例如,x86指令)和數(shù)據(jù)、執(zhí)行取得的指令及產(chǎn)生信號(hào)(例如,地址、數(shù)據(jù)和控制信號(hào))。執(zhí)行單元600連接至高速緩存單元604,并可通過(guò)高速緩存單元604和BIU 606而接收從內(nèi)存406來(lái)的指令。
計(jì)算機(jī)系統(tǒng)400B的內(nèi)存406包括多個(gè)內(nèi)存地址,各地址具有唯一的物理地址。當(dāng)在具有頁(yè)使能的保護(hù)模式下操作時(shí),CPU 402B的地址空間劃分成稱之為頁(yè)幀或“頁(yè)”的多個(gè)區(qū)塊。也可考慮其它方式的內(nèi)存單元或劃分。在任何指定的時(shí)間,僅有對(duì)應(yīng)于各頁(yè)的一部分的數(shù)據(jù)儲(chǔ)存在內(nèi)存406中。在圖6B的實(shí)施例中,由執(zhí)行單元600在指令執(zhí)行期間所產(chǎn)生的地址信號(hào)表示段(即“邏輯”)地址。MMU 602將由執(zhí)行單元600所產(chǎn)生的段地址轉(zhuǎn)換為對(duì)應(yīng)內(nèi)存406的物理地址。MMU 602將物理地址提供至高速緩存單元604。高速緩存單元604為用來(lái)儲(chǔ)存最近由執(zhí)行單元600所取得的指令和數(shù)據(jù)的相當(dāng)小的儲(chǔ)存單元。
BIU 606連接于高速緩存單元604和主橋接器404之間。BIU 606用于通過(guò)主橋接器404取出不在高速緩存單元604中的來(lái)自內(nèi)存406的指令或數(shù)據(jù)。BIU 606還包括輸入/輸出SCU 417。輸入/輸出SCU 417連接至SEM寄存器610、執(zhí)行單元600和MMU 602。如上所述,輸入/輸出SCU 417監(jiān)視在I/O地址空間中的到I/O端口的所有軟件啟動(dòng)的存取,并僅允許至I/O端口的授權(quán)存取。
圖6C為圖4C的計(jì)算機(jī)系統(tǒng)400C的CPU 402C的一個(gè)實(shí)施例的方框圖。在圖6C的實(shí)施例中,CPU 402C包括執(zhí)行單元600、內(nèi)存管理單元(MMU)602、高速緩存單元604、總線接口單元(BIU)606、一組控制寄存器608、和一組安全執(zhí)行模式(SEM)寄存器610。中央處理器SCU 416位于MMU 602內(nèi)。
可使用該組SEM寄存器610以執(zhí)行圖4C的計(jì)算機(jī)系統(tǒng)400C內(nèi)的安全執(zhí)行模式,且由該組SEM寄存器610的內(nèi)容管理中央處理器SCU416和主橋接器SCU 418的操作。由安全核心504存取(亦即,寫入和/或讀取)SEM寄存器610。圖4C的計(jì)算機(jī)系統(tǒng)400C例如當(dāng)(i)CPU 402C為在x86保護(hù)模式下操作的x86處理器,(ii)內(nèi)存頁(yè)被使能,及(iii)SEM寄存器610的內(nèi)容指定SEM操作時(shí),則可在安全執(zhí)行模式下操作。
在圖6C的實(shí)施例中,該組SEM寄存器610包括SEM位609。計(jì)算機(jī)系統(tǒng)400C的操作模式包括“正常執(zhí)行模式”和“安全執(zhí)行模式(SEM)”。計(jì)算機(jī)系統(tǒng)400C通常操作于正常執(zhí)行模式。使用該組SEM寄存器610來(lái)執(zhí)行在計(jì)算機(jī)系統(tǒng)400C內(nèi)的安全執(zhí)行模式。由安全核心504來(lái)存取(亦即,寫入和/或讀取)SEM寄存器610。計(jì)算機(jī)系統(tǒng)400C例如當(dāng)(i)CPU402C為在x86保護(hù)模式下操作的x86處理器,(ii)內(nèi)存頁(yè)被使能,及(iii)SEM位設(shè)定為“1”時(shí),則可在安全執(zhí)行模式下操作。
一般而言,該組控制寄存器608的內(nèi)容管理CPU 402C的操作。因此,該組控制寄存器608的內(nèi)容管理執(zhí)行單元600、MMU 602、高速緩存單元604和/或BIU 606的操作。該組控制寄存器608可包括諸如x86處理器架構(gòu)的多個(gè)控制寄存器。
CPU 402C的執(zhí)行單元600在指令執(zhí)行期間取得指令(例如,x86指令)和數(shù)據(jù)、執(zhí)行取得的指令及產(chǎn)生信號(hào)(例如,地址、數(shù)據(jù)和控制信號(hào))。執(zhí)行單元600連接至高速緩存單元604,并可通過(guò)高速緩存單元604和BIU 606來(lái)接收來(lái)自內(nèi)存406的指令。
計(jì)算機(jī)系統(tǒng)400C的內(nèi)存406包括多個(gè)內(nèi)存地址,各地址具有唯一的物理地址。當(dāng)在具有頁(yè)使能的保護(hù)模式下操作時(shí),CPU 402的地址空間劃分成稱之為頁(yè)幀或“頁(yè)”的多個(gè)區(qū)塊。也可考慮其它方式的內(nèi)存單元或劃分。如上所述,在任何指定的時(shí)間,僅對(duì)應(yīng)于各頁(yè)的一部分的數(shù)據(jù)可儲(chǔ)存在內(nèi)存406中。在圖6C的實(shí)施例中,由執(zhí)行單元600在指令執(zhí)行期間所產(chǎn)生的地址信號(hào)表示段(即“邏輯”)地址。如下所述,MMU 602將由執(zhí)行單元600所產(chǎn)生的段地址轉(zhuǎn)換為對(duì)應(yīng)內(nèi)存406的物理地址。MMU 602將物理地址提供給高速緩存單元604。高速緩存單元604為用來(lái)儲(chǔ)存最近由執(zhí)行單元600所取得的指令和數(shù)據(jù)的相當(dāng)小的儲(chǔ)存單元。BIU 606連接在高速緩存單元604和主橋接器404之間,并用來(lái)通過(guò)主橋接器404取出不在高速緩存單元604中的來(lái)自內(nèi)存406的指令或數(shù)據(jù)。
圖6D為計(jì)算機(jī)系統(tǒng)400的CPU 402的另一個(gè)實(shí)施例的方框圖。在圖6D的實(shí)施例中,CPU 402D包括上述關(guān)于圖6A的描述中的執(zhí)行單元600、MMU 602、高速緩存單元604、BIU 606、該組控制寄存器608和該組安全執(zhí)行模式(SEM)寄存器610。此外,CPU 602D包括微碼引擎(microcode engine)650和包含了安全檢測(cè)碼654的微碼儲(chǔ)存器652。微碼引擎650連接至執(zhí)行單元600、MMU 602、高速緩存單元604、BIU606、該組控制寄存器608和該組安全執(zhí)行模式(SEM)寄存器610。這一連接方式顯示為共享總線結(jié)構(gòu),雖然也可考慮使用其它的連接方式。微碼引擎650執(zhí)行儲(chǔ)存在微碼儲(chǔ)存器652內(nèi)的微碼指令,并根據(jù)該微碼指令、該組控制寄存器608的內(nèi)容和該組SEM寄存器610的內(nèi)容,產(chǎn)生控制執(zhí)行單元600、MMU 602、高速緩存單元604和BIU 606操作的信號(hào)。在圖6D的實(shí)施例中,執(zhí)行儲(chǔ)存于微碼儲(chǔ)存器652內(nèi)的微碼指令的微碼引擎650可替代一個(gè)或多個(gè)中央處理器SCU 416和輸入/輸出SCU 417。在一個(gè)x86實(shí)施例中,微碼引擎650可幫助執(zhí)行單元600執(zhí)行x86指令集的更復(fù)雜的指令。
在圖6D的實(shí)施例中,儲(chǔ)存在微碼儲(chǔ)存器652中的一部分的微碼指令形成安全檢測(cè)碼654。當(dāng)計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí),可執(zhí)行安全檢測(cè)碼654,而一個(gè)指令已經(jīng)傳輸?shù)綀?zhí)行單元600用于執(zhí)行。本質(zhì)上,安全檢測(cè)碼654的微碼指令的執(zhí)行引起微碼引擎650和執(zhí)行單元600、MMU 602及BIU 606的其中數(shù)種以執(zhí)行如上所述的一個(gè)或多個(gè)中央處理器SCU 416和輸入/輸出SCU 417的功能。
舉例而言,當(dāng)I/O指令傳輸?shù)綀?zhí)行單元600以用于執(zhí)行時(shí),執(zhí)行單元600可發(fā)送I/O指令存在的信號(hào)至微碼引擎650。微碼引擎可確認(rèn)信號(hào)至MMU 602和BIU606。響應(yīng)來(lái)自微碼引擎650的信號(hào),MMU 602可提供內(nèi)存頁(yè)的安全上下文識(shí)別(SCID)值,該內(nèi)存頁(yè)包含至BIU 606的I/O指令的。執(zhí)行單元600可將由I/O指令存取的I/O端口號(hào)提供給BIU 606。
響應(yīng)來(lái)自微碼引擎650的信號(hào),BIU 606可使用安全上下文識(shí)別(SCID)值和接收的I/O端口號(hào)以存取SEM I/O允許位圖2200、2300(參閱圖22和23),并可以將來(lái)自SEM I/O允許位圖2200、2300的對(duì)應(yīng)位提供給微碼引擎650。若將來(lái)自SEM I/O允許位圖2200、2300的對(duì)應(yīng)位清零,則微碼引擎650將繼續(xù)支持執(zhí)行單元600完成I/O指令的執(zhí)行。另一方面,若對(duì)應(yīng)的位設(shè)定為“1”,則微碼引擎650可發(fā)送信號(hào)至執(zhí)行單元600以停止執(zhí)行I/O指令,并開(kāi)始執(zhí)行SEM異常處理程序1210的指令。
還值得注意的是,根據(jù)執(zhí)行的情況,執(zhí)行單元600可執(zhí)行標(biāo)準(zhǔn)指令、安全指令和/或微碼。在一個(gè)實(shí)施例中,執(zhí)行單元600和微碼引擎650都執(zhí)行微碼。
圖7是MMU 602的一個(gè)實(shí)施例的方框圖,比如圖6C中顯示說(shuō)明的x86實(shí)施例。在圖7的實(shí)施例中,MMU 602包括分段單元700、分頁(yè)單元702及用于在分段單元700和分頁(yè)單元702的輸出之間作選擇以產(chǎn)生物理地址的選擇邏輯704。如圖7中所指示,分段單元700接收從執(zhí)行單元600來(lái)的段地址,并可使用公知的x86處理器架構(gòu)的段至線性(segmented to linear)地址轉(zhuǎn)換機(jī)制,以在輸出處產(chǎn)生對(duì)應(yīng)的線性地址。如圖7所示,當(dāng)啟用“分頁(yè)”信號(hào)時(shí),分頁(yè)單元702接收由分段單元700所產(chǎn)生的線性地址,并在輸出處產(chǎn)生對(duì)應(yīng)的物理地址。分頁(yè)信號(hào)可映像(mirror)在x86處理器架構(gòu)和該組控制寄存器608的控制寄存器O(CRO)中的分頁(yè)標(biāo)記(PG)位。當(dāng)分頁(yè)信號(hào)解除確認(rèn)時(shí),內(nèi)存分頁(yè)被禁用,而選擇邏輯704產(chǎn)生從分段單元700所接收的線性地址以作為物理地址。
當(dāng)分頁(yè)信號(hào)確認(rèn)時(shí),啟用內(nèi)存分頁(yè),而分頁(yè)單元702使用x86處理器架構(gòu)的線性至物理地址轉(zhuǎn)換機(jī)制將分段單元700所接收的線性地址轉(zhuǎn)換到對(duì)應(yīng)的物理地址。在線性至物理地址轉(zhuǎn)換操作期間,若至頁(yè)幀的存取經(jīng)授權(quán),則選擇的頁(yè)目錄記錄和選擇的頁(yè)表記錄的U/S位的內(nèi)容邏輯上由“與”運(yùn)算決定。同樣地,若至頁(yè)幀的存取經(jīng)授權(quán),則選擇的頁(yè)目錄記錄和選擇的頁(yè)表記錄的R/W位的內(nèi)容邏輯上由“與”運(yùn)算決定。若U/S和R/W位的邏輯組合顯示至頁(yè)幀的存取經(jīng)授權(quán),則分頁(yè)單元702生成由線性至物理地址轉(zhuǎn)換操作所產(chǎn)生的物理地址。選擇邏輯704接收由分頁(yè)單元702所產(chǎn)生的物理地址,將從分頁(yè)單元702所接收的物理地址生成為物理地址,并將該物理地址提供給高速緩存單元604。
在另一方面,若在線性至物理地址轉(zhuǎn)換操作期間U/S和R/W位的邏輯組合指示至頁(yè)幀的存取未經(jīng)授權(quán),則分頁(yè)單元702不產(chǎn)生物理地址。取而代之,分頁(yè)單元702聲明一頁(yè)錯(cuò)誤(PF)信號(hào),且MMU 602將該頁(yè)錯(cuò)誤信號(hào)傳輸?shù)綀?zhí)行單元600。響應(yīng)該P(yáng)F信號(hào),執(zhí)行單元600可執(zhí)行異常處理程序例程,并當(dāng)聲明頁(yè)錯(cuò)誤信號(hào)時(shí),可最終停止執(zhí)行應(yīng)用程序500之一。
在圖7的實(shí)施例中,中央處理器SCU 416位于MMU 602的分頁(yè)單元702內(nèi)。分頁(yè)單元702還可包括用來(lái)儲(chǔ)存最新決定的線性至物理地址轉(zhuǎn)換的相當(dāng)小數(shù)量的旁路轉(zhuǎn)換緩沖(translation lookasidebuffer,TLB)。
圖8A為顯示圖4B的輸入/輸出SCU 417的一個(gè)實(shí)施例的方框圖。在圖8A的實(shí)施例中,輸入/輸出SCU 417包括安全檢測(cè)邏輯800A。安全檢測(cè)邏輯800A接收從執(zhí)行單元600來(lái)的“使能”信號(hào)和I/O端口號(hào),并接收從MMU 602來(lái)的SCID值。在執(zhí)行I/O指令之前,執(zhí)行單元600可確認(rèn)使能信號(hào),該I/O指令存取在I/O地址空間中的“目標(biāo)”I/O端口。該I/O端口號(hào)為目標(biāo)I/O端口的號(hào)碼。該SCID值指示包含I/O指令的內(nèi)存頁(yè)的安全上下文等級(jí)。
當(dāng)計(jì)算機(jī)系統(tǒng)在安全執(zhí)行模式下操作時(shí),安全核心504在內(nèi)存406中產(chǎn)生和維持一個(gè)或多個(gè)安全屬性數(shù)據(jù)結(jié)構(gòu)(例如,表)。各內(nèi)存頁(yè)具有對(duì)應(yīng)的SCID值,而對(duì)應(yīng)的SCID值可以儲(chǔ)存在安全屬性數(shù)據(jù)結(jié)構(gòu)內(nèi)。MMU 602使用在指令執(zhí)行期間所產(chǎn)生的地址(例如,物理地址)來(lái)存取一個(gè)或多個(gè)安全屬性數(shù)據(jù)結(jié)構(gòu),以獲得對(duì)應(yīng)于內(nèi)存頁(yè)的SCID。一般而言,計(jì)算機(jī)系統(tǒng)400具有n個(gè)不同的SCID值,其中n為大于等于1的整數(shù)值。
當(dāng)計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí),安全核心504還可在內(nèi)存406中產(chǎn)生和維持SEM I/O允許位圖2200,2300(例如,第22至23圖)。當(dāng)執(zhí)行單元600執(zhí)行任務(wù)的I/O指令,則在CPU 402B內(nèi)的邏輯可首先比較任務(wù)的CPL與I/O優(yōu)先權(quán)等級(jí)(IOPL)。若任務(wù)的CPL為至少有與IOPL同樣的優(yōu)先權(quán)(即,數(shù)字上為少于或相等),則在CPU402B內(nèi)的邏輯可檢測(cè)SEM I/O允許位圖2200,2300。另一方面,若任務(wù)的CPL沒(méi)有與IOPL同樣的優(yōu)先權(quán)(即,數(shù)字上大于),則執(zhí)行單元600將不執(zhí)行I/O指令。在一個(gè)實(shí)施例中,將發(fā)生一般的保護(hù)錯(cuò)誤(GPF)。
當(dāng)執(zhí)行單元600確認(rèn)使能信號(hào)時(shí),安全檢測(cè)邏輯800A將使能信號(hào)、接收的SCID值和接收的I/O端口號(hào)提供給BIU 406內(nèi)的邏輯。在BIU406內(nèi)的邏輯使用SCID值和接收的I/O端口號(hào)以存取該SEM I/O允許位圖2200,2300,并將來(lái)自SEM I/O允許位圖2200,2300的對(duì)應(yīng)位提供給安全檢測(cè)邏輯800A。若來(lái)自該SEM I/O允許位圖2200,2300的對(duì)應(yīng)位清除為“0”,則安全檢測(cè)邏輯800A可確認(rèn)輸出“執(zhí)行(EXECUTE)”信號(hào)提供至執(zhí)行單元600。響應(yīng)該確認(rèn)的執(zhí)行信號(hào),執(zhí)行單元600將執(zhí)行I/O指令。另一方面,若對(duì)應(yīng)的位設(shè)定為“1”,則安全檢測(cè)邏輯800A可確認(rèn)輸出“SEM安全異常(SEM SECURITY EXCEPTION)”信號(hào)提供至執(zhí)行單元600。響應(yīng)該確認(rèn)的SEM安全異常信號(hào),執(zhí)行單元600可不執(zhí)行I/O指令,并可替代地執(zhí)行一SEM異常處理程序(請(qǐng)見(jiàn)下文說(shuō)明)。
當(dāng)I/O指令嘗試存取16位字I/O端口或32位雙字I/O端口,則執(zhí)行單元600可連續(xù)提供多個(gè)字節(jié)I/O端口號(hào)至安全檢測(cè)邏輯800A。若安全檢測(cè)邏輯800A確認(rèn)對(duì)于各字節(jié)I/O端口號(hào)的執(zhí)行信號(hào),則執(zhí)行單元600可執(zhí)行I/O指令。另一方面,若安全檢測(cè)邏輯800A確認(rèn)對(duì)于一個(gè)或多個(gè)字節(jié)I/O端口號(hào)的SEM安全異常,則執(zhí)行單元600可不執(zhí)行I/O指令,而可替代地執(zhí)行該SEM異常處理程序。
圖8B為中央處理器SCU 416的一個(gè)實(shí)施例的方框圖。在圖8B的實(shí)施例中,中央處理器SCU 416包括連接到該組SEM寄存器610和安全屬性表(SAT)記錄緩沖器802的安全檢測(cè)邏輯800B。該SAT記錄1225(參閱圖12)可包括對(duì)應(yīng)于各內(nèi)存頁(yè)的頁(yè)目錄和各頁(yè)表記錄的U/S和R/W位上方的額外的安全信息。安全檢測(cè)邏輯800B使用儲(chǔ)存在給定的其中一個(gè)SAT記錄1225內(nèi)的額外的安全信息,以防止至對(duì)應(yīng)的內(nèi)存頁(yè)的未經(jīng)授權(quán)的軟件啟動(dòng)的存取。SAT記錄緩沖器802被用來(lái)儲(chǔ)存最近存取的內(nèi)存頁(yè)的相當(dāng)小數(shù)目的SAT記錄1225。
如上所述,可使用該組SEM寄存器610來(lái)執(zhí)行在計(jì)算機(jī)系統(tǒng)400內(nèi)的安全執(zhí)行模式。該組SEM寄存器610的內(nèi)容管理中央處理器SCU416的操作。安全檢測(cè)邏輯800B通過(guò)圖8B中所示的通訊總線接收從MMU 602來(lái)的將儲(chǔ)存于SAT記錄緩沖器802中的信息。安全檢測(cè)邏輯800B也接收由分頁(yè)單元所產(chǎn)生的物理地址。
圖9為安全模式SMCALL/SMRET目標(biāo)地址寄存器(SMSTAR)900和用來(lái)處理該SEM安全異常的安全模式GS基址(SMGBASE)寄存器902的方框圖。
基于安全理由,當(dāng)SEM安全異常發(fā)生時(shí),SEM安全異常機(jī)制不能依賴任何負(fù)載控制寄存器的內(nèi)容或數(shù)據(jù)結(jié)構(gòu)來(lái)提供SEM異常處理程序和堆棧的地址。
SMSTAR寄存器900包括“SMRET CS選擇器和SS選擇器基礎(chǔ)(SMRETCS Selector and SS Selector Base)”字段、“SMCALL CS選擇器和SS選擇器基礎(chǔ)(SMCALL CS Selector and SS Selector Base)”字段和“目標(biāo)EIP地址(Target EIP Address)”字段。SMGSBASE寄存器902包括安全模式GS基址。儲(chǔ)存在SMSTAR寄存器900和SMGSBASE寄存器902中的值一般在啟動(dòng)時(shí)間設(shè)定。
圖10A為當(dāng)SEM異常發(fā)生時(shí),由操作系統(tǒng)502所產(chǎn)生的SEM異常堆棧幀1000的一個(gè)實(shí)施例的方框圖。SEM異常堆棧幀1000開(kāi)始于GS
。
錯(cuò)誤碼存在于SEM異常堆棧幀1000的GS
。錯(cuò)誤應(yīng)用程序的指令指針(EIP)的內(nèi)容存在于SEM異常堆棧幀1000的GS
。錯(cuò)誤應(yīng)用程序的代碼段寄存器的內(nèi)容存在于SEM異常堆棧幀1000的GS
。錯(cuò)誤應(yīng)用程序的標(biāo)志寄存器的內(nèi)容存在于SEM異常堆棧幀1000的GS
。錯(cuò)誤應(yīng)用程序的堆棧指針(ESP)寄存器的內(nèi)容存在于SEM異常堆棧幀1000的GS[10h]。錯(cuò)誤應(yīng)用程序的堆棧段(SS)寄存器的內(nèi)容存在于SEM異常堆棧幀1000的GS[14h]。
圖10B為圖10A的SEM異常堆棧幀1000的錯(cuò)誤碼的示例性格式1010的方框圖。在圖10B的實(shí)施例中,錯(cuò)誤碼格式1010包括寫入/讀取(W/R)位、用戶/監(jiān)督者(U/S)位、模式指定寄存器位和系統(tǒng)管理中斷(SMI)位。在寫入操作期間當(dāng)發(fā)生SEM安全異常時(shí),寫入/讀取(W/R)位為“1”,而在讀取或執(zhí)行操作期間當(dāng)發(fā)生SEM安全異常時(shí),寫入/讀取(W/R)位為“0”。在用戶模式(CPL=3)當(dāng)發(fā)生SEM安全執(zhí)行模式異常時(shí),用戶/監(jiān)督者(U/S)位為“1”,而在監(jiān)督模式(CPL=0)下發(fā)生SEM安全異常時(shí),用戶/監(jiān)督者(U/S)位為“0”。
在嘗試存取安全模式指定寄存器(MSR)期間發(fā)生SEM安全異常時(shí),模式指定寄存器(MSR)位為“1”,而在嘗試存取安全MSR期間未發(fā)生SEM安全異常時(shí),模式指定寄存器(MSR)位為“0”。在系統(tǒng)管理中斷(SMI)期間發(fā)生SEM安全異常時(shí),系統(tǒng)管理中斷(SMI)位為“1”,而在SMI期間未發(fā)生SEM安全異常時(shí),系統(tǒng)管理中斷(SMI)位為“0”。
圖11為顯示根據(jù)本發(fā)明的一個(gè)方面處理SEM安全異常的方法1100的實(shí)施例的流程圖。方法1100可包括在步驟1105,通過(guò)硬件或通過(guò)軟件,比如通過(guò)SMCALL指令,來(lái)產(chǎn)生SEM安全異常。方法1100包括在步驟1110,在基址加上偏移量(offset)上建立SEM堆棧幀1000。從SMGSBASE寄存器902讀取安全模式GS基址。可通過(guò)在SEM堆棧幀中的字節(jié)號(hào)碼而由安全模式GS基址的偏移量形成堆棧指針。SEM堆棧幀1000寫入到內(nèi)存中,而使得錯(cuò)誤碼是由安全模式而指向儲(chǔ)存在SMGSBASE寄存器902中的GS基址。通過(guò)SEM異常硬件而產(chǎn)生SEM安全異常的錯(cuò)誤碼。SEM安全異常其本身可通過(guò)操作系統(tǒng)502、通過(guò)設(shè)備驅(qū)動(dòng)器碼506、通過(guò)應(yīng)用碼500等而產(chǎn)生。如圖10A中所示,錯(cuò)誤代碼段值寫入到GS空間。
方法1100其次在步驟1115讀取從SMSTAR寄存器900來(lái)的目標(biāo)EIP地址和SMCALL CS和SS選擇器值,并將該目標(biāo)EIP地址和SMCALL CS和SS選擇器值儲(chǔ)存在適當(dāng)?shù)募拇嫫?。目?biāo)EIP地址載入EIP寄存器。CS選擇器值載入CS寄存器,而SS選擇器值載入SS寄存器。SS選擇器地址可由CS選擇器地址導(dǎo)出。目標(biāo)EIP地址指向SEM安全異常處理程序碼的第一指令。
方法1100在步驟1120還執(zhí)行SWAPGS指令。SWAPGS指令的執(zhí)行交換SMGSBASE寄存器902與緩存在CPU 402中GS段描述符的基址的內(nèi)容。后續(xù)的SEM安全異常處理程序指令能使用GS空間僅移位尋址(displacement-only addressing)以存取SEM安全異常堆棧幀1000和SEM安全異常堆棧幀1000之上和之下的內(nèi)存。GS空間尋址提供用于SEM安全異常處理程序的安全內(nèi)存。
在安全核心504中的SEM安全異常處理程序可包括幾頁(yè)由安全位所保護(hù)的虛擬內(nèi)存,該安全位比如為儲(chǔ)存于SEM寄存器610,或此處所說(shuō)明的其它的安全測(cè)量單元中。SEM安全異常處理程序可包括幾頁(yè)由比如儲(chǔ)存在SEM寄存器610中或此處所說(shuō)明的其它的安全測(cè)量單元中的安全位來(lái)保護(hù)的受保護(hù)的物理內(nèi)存。
方法1100接著在步驟1125中分析錯(cuò)誤碼。當(dāng)決定了SEM安全異常的來(lái)源以后,一次可分析一個(gè)錯(cuò)誤碼位??蛇x地,方法1100在步驟1130譯碼一個(gè)或多個(gè)在產(chǎn)生SEM安全異常前被執(zhí)行或準(zhǔn)備執(zhí)行的指令。特定的指令和他們的操作數(shù)可提供SEM安全異常來(lái)源額外的信息。方法1100在步驟1135根據(jù)錯(cuò)誤碼,有可能和引起產(chǎn)生SEM安全異常的指令之前或之后的指令,來(lái)評(píng)估SEM安全異常。步驟1135的評(píng)估可包括參照一查找表或執(zhí)行一安全算法。該查找表可由一個(gè)或多個(gè)的錯(cuò)誤碼、錯(cuò)誤碼的一個(gè)或多個(gè)位、以及一個(gè)或多個(gè)的特定指令和/或他們的操作數(shù)所索引。安全算法可包括由安全核心504所執(zhí)行的碼樹(codetree)。查找表和安全算法將決定于正確的硬件310等、和執(zhí)行于計(jì)算機(jī)系統(tǒng)300中的操作系統(tǒng)402。
一旦該方法1100在步驟1135評(píng)估了SEM安全異常,則該方法1100當(dāng)需要時(shí)在步驟1140根據(jù)評(píng)估結(jié)果動(dòng)作。SEM安全異常可被忽略和繼續(xù)操作。錯(cuò)誤指令或代碼段可被忽略??砂e(cuò)誤指令或代碼段以便由在虛擬內(nèi)存或I/O空間中的代理主機(jī)所執(zhí)行。
方法1100在步驟1145主要將計(jì)算機(jī)系統(tǒng)300恢復(fù)至其預(yù)先SEM安全異常配置。在步驟1150,當(dāng)SEM安全異常處理程序退出時(shí),執(zhí)行另一SWAPGS指令將安全模式基址值返回至其原來(lái)的值,并執(zhí)行SMRET指令以返回至其先前的操作模式。當(dāng)執(zhí)行SWAPGS指令時(shí),安全核心504將用于錯(cuò)誤碼的代碼段值寫至SMSTAR寄存器900的SMRET CS選擇器和SS選擇器基本字段。SMRET指令可將系統(tǒng)返回至正常模式。不像SYSRET指令,SMRET指令可將CPL保留在0,而不設(shè)定EFLAGS.IF位。
應(yīng)注意在一實(shí)施例中,方法1100的步驟1105至1115主要在硬件中執(zhí)行,而步驟1120至1145主要在軟件中執(zhí)行。在另一個(gè)實(shí)施例中,方法1100主要在軟件中執(zhí)行。又在另一個(gè)實(shí)施例中,方法1100主要在硬件中執(zhí)行。注意在一個(gè)實(shí)施例中,修改EIP地址以避免可能引起SEM安全異常的指令。
現(xiàn)在回頭參照?qǐng)D8B,當(dāng)計(jì)算機(jī)系統(tǒng)300在安全執(zhí)行模式下操作時(shí),安全檢測(cè)邏輯800B接收當(dāng)前執(zhí)行任務(wù)(亦即,當(dāng)前執(zhí)行指令)的CPL,伴隨著正??刂莆缓鸵粋€(gè)或多個(gè)與其中具有物理地址的選擇的內(nèi)存頁(yè)相關(guān)聯(lián)的SEM位509。安全檢測(cè)邏輯800B使用上述信息來(lái)決定至內(nèi)存406的該部分的存取是否經(jīng)過(guò)授權(quán)。
CPU 402可以是x86處理器,而可包括代碼段寄存器、x86處理器架構(gòu)的各16位段寄存器的其中一個(gè)。各段寄存器選擇一個(gè)64k的內(nèi)存區(qū)塊,稱之為一段。在具有分頁(yè)使能的保護(hù)模式中,CS寄存器加載了指示內(nèi)存406的可執(zhí)行段的段選擇器。使用段選擇器的最高(亦即,最高有效)位來(lái)儲(chǔ)存指示內(nèi)存的段的信息,該內(nèi)存包括將由CPU 402的執(zhí)行單元600所執(zhí)行的下一個(gè)指令。使用指令指針寄存器以將偏移量?jī)?chǔ)存在由CS寄存器所指示的段中。CSIP對(duì)(CSIP pair)指示了下一個(gè)指令的段地址。使用CS寄存器的兩個(gè)最低(亦即,最低有效)位來(lái)儲(chǔ)存指示現(xiàn)正由執(zhí)行單元600所執(zhí)行的任務(wù)的CPL的值(亦即,現(xiàn)行任務(wù)的CLP)。
中央處理器SCU 416的安全檢測(cè)邏輯800B可產(chǎn)生頁(yè)錯(cuò)誤(PF)信號(hào)和如“SEM安全異?!毙盘?hào),并將PF和SEM安全異常信號(hào)提供給在分頁(yè)單元702內(nèi)的邏輯。當(dāng)安全檢測(cè)邏輯800B確認(rèn)PF信號(hào)時(shí),MMU 602將PF信號(hào)傳輸至執(zhí)行單元600。響應(yīng)該P(yáng)F信號(hào),執(zhí)行單元600可使用已知的x86處理器架構(gòu)的中斷描述符表(IDT)指引機(jī)制來(lái)存取和執(zhí)行PF處理器例程。
當(dāng)安全檢測(cè)邏輯800B確認(rèn)SEM安全異常信號(hào)時(shí),MMU 602將SEM安全異常信號(hào)傳輸至執(zhí)行單元600。不像使用x86處理器架構(gòu)的IDT指引機(jī)制的一般處理器異常,可使用不同的指引方法來(lái)處理SEM安全異常。可通過(guò)一對(duì)類似于x86“SYSENTER”和“SYSEXIT”指令操作方法的寄存器(例如,MSRs)來(lái)傳輸SEM安全異常信號(hào)。該對(duì)寄存器可以是“安全異常記錄點(diǎn)”寄存器,并且可定義一用于當(dāng)SEM安全異常發(fā)生時(shí)指令執(zhí)行的分支目標(biāo)地址。
安全異常記錄點(diǎn)寄存器可定義將用于SEM安全異常處理程序的記錄的代碼段,之后的指令指針(EIP,或64位形式RIP)、堆棧段(SS)、和堆棧指針(ESP,或64位形式RSP)值。執(zhí)行單元600可將前面的SS、ESP/RSP、EFLAGS、CS和EIP/RIP值推入新的堆棧以指示何處發(fā)生了SEM安全異常。此外,執(zhí)行單元600可將錯(cuò)誤碼推入堆棧。如上所述,可不使用IRET指令作為之前儲(chǔ)存的SS和ESP/RSP值,而即使在CPL中未發(fā)生改變,也可完成堆棧交換。通過(guò)SMRET指令從SEM安全異常處理程序返回。
圖12為根據(jù)本發(fā)明的各種方面,結(jié)合了各種實(shí)施例以維持計(jì)算機(jī)系統(tǒng)的安全的方框圖。如圖12中所示,操作系統(tǒng)可包括安全核心504。安全核心504可包括SEM安全異常處理程序1210和/或頁(yè)管理例程1215。安全核心504接收SEM安全異常1205。安全核心504接收一個(gè)或多個(gè)值,這些值通過(guò)一個(gè)或多個(gè)信號(hào)1255而傳輸當(dāng)前的CPU狀態(tài)1230。安全核心504也可通過(guò)一個(gè)或多個(gè)信號(hào)1255而修正當(dāng)前的CPU狀態(tài)1230??捎蓛?chǔ)存在控制寄存器1235和MSRs 1240中的值來(lái)決定CPU狀態(tài)1230。這些值可包括儲(chǔ)存在CR3控制寄存器1242、CPL 1244和SEM使能位1246中的值。
可被考慮的其它值包括,例如,將頁(yè)打開(kāi)和關(guān)閉的CRO、擴(kuò)展特征寄存器或用于擴(kuò)展尋址的頁(yè)地址擴(kuò)展模式寄存器等。如果需要的話,也可排除所示的值1242、1244、1246的其中一個(gè)或多個(gè)。安全核心504從CPU狀態(tài)1230、虛擬內(nèi)存配置1220和安全屬性記錄1225的其中一個(gè)或多個(gè)接收安全值和信號(hào)1250。安全值1250A顯示在安全核心504和虛擬內(nèi)存配置1220之間。安全值1250B顯示在安全核心504和安全屬性記錄1225之間。安全值1250C顯示在安全核心504和CPU狀態(tài)1230之間。
在一個(gè)實(shí)施例中,虛擬內(nèi)存配置1220通過(guò)頁(yè)管理例程1215的安全核心504,而通過(guò)1250A來(lái)監(jiān)視,以維持至內(nèi)存406的存取的安全性。安全核心504也監(jiān)視CPU狀態(tài)1230,而使得通過(guò)頁(yè)管理例程1215來(lái)應(yīng)用適當(dāng)?shù)陌踩?。也可通過(guò)頁(yè)管理例程1215至1250A來(lái)修正虛擬內(nèi)存配置1220。頁(yè)管理例程1215可以是操作系統(tǒng)502的一部分。頁(yè)管理例程1215亦可以使用SEM安全異常處理程序1210來(lái)監(jiān)督虛擬內(nèi)存配置1220的改變。
在一個(gè)實(shí)施例中,安全屬性記錄1225由安全核心504通過(guò)1250B來(lái)監(jiān)視。一個(gè)嘗試對(duì)內(nèi)存位置的存取可產(chǎn)生SEM安全異常1205至SEM安全異常處理程序1210,并引導(dǎo)在CPU狀態(tài)1230中的一個(gè)改變至SEM。根據(jù)相關(guān)的其中一個(gè)安全屬性記錄1225,而可允許或拒絕對(duì)內(nèi)存位置的存取。各安全屬性記錄1225可在內(nèi)存406中的一個(gè)保護(hù)頁(yè)中。
在一個(gè)實(shí)施例中,CPU狀態(tài)1230由安全核心504通過(guò)1250C來(lái)監(jiān)視。這為一典型的實(shí)施例。一個(gè)對(duì)內(nèi)存位置的嘗試存取可產(chǎn)生至SEM安全異常處理程序1210的SEM安全異常1205??筛鶕?jù)在嘗試存取時(shí)的CPU狀態(tài)1230而允許或拒絕對(duì)內(nèi)存位置的存取。
在CPU 402內(nèi)的通用寄存器的內(nèi)容(圖中未顯示)可在任何指定時(shí)間獲得。在一個(gè)實(shí)施例中,對(duì)控制寄存器1235的存取關(guān)于一安全位值,例如,在控制寄存器1235中的TX(信任已執(zhí)行)位,或在MSRs 1240中的安全指令(SIE)位。同樣地,對(duì)MSRs 1240的存取也可關(guān)于一安全位值。若未設(shè)定安全位,則任何嘗試對(duì)安全感測(cè)控制寄存器1235和MSRs 1240的改變將導(dǎo)致SEM安全異常1205。在另一個(gè)實(shí)施例中,執(zhí)行頁(yè)值可控制對(duì)控制寄存器1235的存取。
從例如SEM的安全模式轉(zhuǎn)移到例如正常模式的不安全模式,將清除某些寄存器的內(nèi)容。內(nèi)存內(nèi)容維持固定,但是不能再讀取某些內(nèi)存地址。當(dāng)使用虛擬內(nèi)存配置1220來(lái)執(zhí)行安全保護(hù)時(shí),可以再加載CR3寄存器1242的內(nèi)容。這為不信任碼提供了不同于由信任碼所使用的虛擬內(nèi)存配置1220的一個(gè)虛擬內(nèi)存配置1220。當(dāng)使用安全屬性記錄1225時(shí),與安全頁(yè)相關(guān)聯(lián)的各記錄可標(biāo)記為在各頁(yè)表中受到保護(hù),以防止CPU狀態(tài)1230不是在安全(或是受保護(hù))模式下的存取。當(dāng)使用CPU狀態(tài)1230來(lái)執(zhí)行安全保護(hù)時(shí),在允許對(duì)保護(hù)的內(nèi)存存取之前,CPU狀態(tài)1230必須是在安全模式。
在一個(gè)實(shí)施例中,在SEM中的安全核心504可通過(guò)執(zhí)行頁(yè)管理例程1215而提供對(duì)整個(gè)虛擬內(nèi)存配置1220的保護(hù)。該保護(hù)需要最少的硬件,且主要以執(zhí)行最高優(yōu)先權(quán)(SCID)等級(jí)的軟件實(shí)現(xiàn)。
SEM可通過(guò)使能的分頁(yè)而應(yīng)用于保護(hù)模式環(huán)境中。為了防止通過(guò)建立不適當(dāng)或干擾的線性至物理地址映射而對(duì)SEM進(jìn)行攻擊,則必須保護(hù)分頁(yè)指令和控制寄存器1235和/或與分頁(yè)(比如CR3 1241)相關(guān)聯(lián)的MSRs 1240,以避免不適當(dāng)?shù)男薷摹?br>
應(yīng)注意使用圖12中所描繪的虛擬內(nèi)存配置1220、安全屬性記錄1225、和CPU狀態(tài)1230的其中一種機(jī)制所執(zhí)行的安全措施也可使用其它的專用機(jī)制。在其它的實(shí)施例中,可以結(jié)合使用這些機(jī)制中的其中兩個(gè)或多個(gè)機(jī)制。
現(xiàn)在參照?qǐng)D13至15來(lái)說(shuō)明選用的內(nèi)存頁(yè)的額外的安全信息,如何使用可用于圖4A至4C的計(jì)算機(jī)系統(tǒng)400中的地址轉(zhuǎn)換機(jī)制。圖13為用來(lái)存取用于所選擇的內(nèi)存頁(yè)相關(guān)的SAT記錄1225之一的機(jī)制1300的一個(gè)實(shí)施例的方框圖,以獲得所選擇內(nèi)存頁(yè)的額外的安全信息。圖13的機(jī)制1300可在圖8A至8B的安全檢測(cè)邏輯800內(nèi)可被實(shí)現(xiàn),并且當(dāng)圖4A至4C圖的任何一個(gè)計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí)可被實(shí)現(xiàn)。機(jī)制1300包括由使用x86地址轉(zhuǎn)換機(jī)制的分頁(yè)機(jī)制702所產(chǎn)生的物理地址1302、SAT目錄1304、包括SAT 1306的多個(gè)SAT及該組SEM寄存器610的SAT基址寄存器1308。SAT目錄1304和包括SAT1306的多個(gè)SAT為建立的SEM數(shù)據(jù)結(jié)構(gòu),并由安全核心504維持。如下所述,SAT目錄1304(當(dāng)存在時(shí))和任何需要的SAT 1306在存取之前復(fù)制到內(nèi)存406中。
SAT基址寄存器1308包括存在(P)位,該存在位指示在SAT基址寄存器1308內(nèi)的存在的有效SAT目錄基址。SAT基址寄存器1308的最高(亦即,最有效)位保留用于SAT目錄基址。SAT目錄基址為包含SAT目錄1304的內(nèi)存頁(yè)的基址。若P=1,則SAT目錄基址為有效,而SAT表1306指定內(nèi)存頁(yè)的安全屬性。若P=0,則SAT目錄基址為無(wú)效,并無(wú)SAT表存在,而內(nèi)存頁(yè)的安全屬性由SAT默認(rèn)寄存器決定。
圖14為SAT默認(rèn)寄存器1400的一個(gè)實(shí)施例的方框圖。在圖14A的實(shí)施例中,SAT默認(rèn)寄存器1400包括安全頁(yè)(SP)位。該SP位指示是否所有的內(nèi)存頁(yè)為安全頁(yè)。舉例而言,若SP=0,則所有的內(nèi)存頁(yè)可能并非安全頁(yè);而若SP=1,則所有的內(nèi)存頁(yè)可能是安全頁(yè)。
回頭參照?qǐng)D13,現(xiàn)在假設(shè)SAT基址寄存器1308的P位為“1”,則由分頁(yè)邏輯702所產(chǎn)生的物理地址1302分成三個(gè)部分以存取用于所選擇的內(nèi)存頁(yè)的相關(guān)SAT目錄1225其中之一。如上所述,SAT基址寄存器1308的SAT目錄基址為包含SAT目錄1304的內(nèi)存頁(yè)的基址。SAT目錄1304包括多個(gè)SAT目錄記錄,其中包含了SAT目錄記錄1312。各SAT目錄記錄可具有在內(nèi)存406中的對(duì)應(yīng)的SAT。物理地址1302的“上”部分,包含物理地址1302的最高位或最有效位,是用作SAT目錄1304內(nèi)的索引。SAT目錄記錄1312從使用SAT基址寄存器1308的SAT目錄基址和物理地址1302的上部分的SAT目錄1304內(nèi)選擇。
圖14B為SAT目錄記錄格式1430的一個(gè)實(shí)施例的方框圖。根據(jù)圖14B,每個(gè)SAT目錄記錄包括指示在SAT目錄記錄內(nèi)的有效SAT基址存在的存在(P)位。在圖14B的實(shí)施例中,各SAT目錄記錄1310的最高(亦即,最有效)位保留用于SAT基址。SAT基址為包含對(duì)應(yīng)SAT的內(nèi)存頁(yè)的基址。若P=1,則SAT基址為有效,而對(duì)應(yīng)的SAT儲(chǔ)存于內(nèi)存406中。
若P=0,則SAT基址為無(wú)效,而對(duì)應(yīng)的SAT并不存在于內(nèi)存406中,而是必須從一個(gè)儲(chǔ)存裝置(例如,磁盤驅(qū)動(dòng)器)復(fù)制到內(nèi)存406中。若P=0,則安全檢測(cè)邏輯800可以發(fā)送頁(yè)錯(cuò)誤信號(hào)至分頁(yè)單元702內(nèi)的邏輯,而MMU 602可以傳輸頁(yè)錯(cuò)誤信號(hào)至執(zhí)行單元600(圖6中)。響應(yīng)該頁(yè)錯(cuò)誤信號(hào),執(zhí)行單元600可執(zhí)行頁(yè)錯(cuò)誤處理器例程,該例程從儲(chǔ)存裝置恢復(fù)所需的SAT,并將所需的SAT儲(chǔ)存到內(nèi)存406中。將所需的SAT儲(chǔ)存到內(nèi)存406中后,將對(duì)應(yīng)SAT目錄記錄的P位設(shè)定為“1”,而繼續(xù)機(jī)制1300。
回頭參照?qǐng)D13,使用物理地址1302的“中間”部分作為進(jìn)入SAT1306的索引。因此使用SAT目錄記錄1312的SAT基址和物理地址1302的中間部分而在SAT 1306內(nèi)選擇SAT記錄1312。
圖15為SAT記錄格式1500的一個(gè)實(shí)施例的方框圖。在圖15的實(shí)施例中,各SAT記錄包括安全頁(yè)(SP)位。該SP位指示所選擇的內(nèi)存頁(yè)是否為一安全頁(yè)。舉例而言,若SP=0,則所選擇的內(nèi)存頁(yè)不是一安全頁(yè),而若SP=1,則所選擇的內(nèi)存頁(yè)是一安全頁(yè)。
BIU 606從內(nèi)存406中取得所需的SEM數(shù)據(jù)結(jié)構(gòu)記錄,并將該SEM數(shù)據(jù)結(jié)構(gòu)記錄提供給MMU 602?;仡^參照?qǐng)D8B,安全檢測(cè)邏輯800B通過(guò)通訊總線接收來(lái)自MMU 602和分頁(yè)單元702的SEM數(shù)據(jù)結(jié)構(gòu)記錄。如上所述,使用SAT記錄緩沖器來(lái)儲(chǔ)存最近存取內(nèi)存頁(yè)的相當(dāng)小數(shù)量的SAT記錄。安全檢測(cè)邏輯800B將給定的SAT記錄1312與對(duì)應(yīng)的物理地址的“卷標(biāo)”部分一起儲(chǔ)存在SAT記錄緩沖器802中。
在后續(xù)的內(nèi)存頁(yè)存取期間,安全檢測(cè)邏輯800B可將由分頁(yè)單元702所產(chǎn)生的一物理地址的“卷標(biāo)”部,與儲(chǔ)存在SAT記錄緩沖器1102中的對(duì)應(yīng)于SAT記錄1225的物理地址的卷標(biāo)部分相比較。若物理地址的卷標(biāo)部分與儲(chǔ)存在SAT記錄緩沖器1102中的對(duì)應(yīng)于SAT記錄1225的物理地址的卷標(biāo)部分相匹配,則安全檢測(cè)邏輯800B可存取在SAT記錄緩沖器1102中的SAT記錄1312,而免除了圖13的從內(nèi)存406獲得SAT記錄1312的所需執(zhí)行的處理。安全核心504修正在CPU 402中(例如,于處理關(guān)系交換期間)的SAT基址寄存器1308的內(nèi)容。響應(yīng)該SAT基址寄存器1308的修正,中央處理器SCU 417的安全檢測(cè)邏輯800B可充滿SAT記錄緩沖器802。
當(dāng)圖4A至4C的計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí),安全檢測(cè)邏輯800B接收當(dāng)前執(zhí)行的任務(wù)(即,正在執(zhí)行的指令)的CPL、頁(yè)目錄記錄(PDE)U/S位、PDE R/W位、頁(yè)表記錄(PTE)U/S位、和其中存在有物理地址的選擇的內(nèi)存頁(yè)的PTE R/W位。安全檢測(cè)邏輯800B使用上述的信息及對(duì)應(yīng)于所選擇的內(nèi)存頁(yè)的SAT記錄1312的SP位來(lái)確定內(nèi)存406的存取是否經(jīng)授權(quán)。
圖4B的CPU 402B可以是x86處理器,并可包括代碼段寄存器,其為x86處理器架構(gòu)的16位段寄存器其中之一。各段寄存器選擇內(nèi)存的一64k區(qū)塊,稱之為一段。在具有分頁(yè)使能的保護(hù)模式下,CS寄存器加載了可指示內(nèi)存406的可執(zhí)行段的段選擇器。段選擇器的最高(亦即,最有效)位用來(lái)儲(chǔ)存指示內(nèi)存段的信息,包括了將由CPU 402B的執(zhí)行單元600所執(zhí)行的下一個(gè)指令。使用指令指針(IP)寄存器來(lái)將偏移量?jī)?chǔ)存到由CS寄存器所指示的段中。CSIP對(duì)指示下一個(gè)指令的段地址。CS寄存器的兩個(gè)最低(亦即,最低有效)位用來(lái)儲(chǔ)存指示由執(zhí)行單元600當(dāng)前執(zhí)行的任務(wù)的CPL的值(亦即,當(dāng)前任務(wù)的CPL)。
下列表1顯示當(dāng)計(jì)算機(jī)系統(tǒng)400B在安全執(zhí)行模式下操作時(shí),用于CPU啟動(dòng)(亦即,軟件起始)的內(nèi)存存取的示例性規(guī)則。當(dāng)計(jì)算機(jī)系統(tǒng)400B在安全執(zhí)行模式下操作時(shí),中央處理器SCU 417和安全核心504一起操作來(lái)執(zhí)行表1的規(guī)則,以提供在由操作系統(tǒng)502所提供的數(shù)據(jù)安全之上的對(duì)于儲(chǔ)存在內(nèi)存406中的數(shù)據(jù)的額外的安全保護(hù)。
表1.當(dāng)計(jì)算機(jī)系統(tǒng)400B操作于SEM時(shí),對(duì)于軟件啟動(dòng)的內(nèi)存存取的示例性規(guī)則
注釋(1)一般存取頁(yè)內(nèi)容包括安全核心和SEM數(shù)據(jù)結(jié)構(gòu)。
注釋(2)寫入嘗試引起GPF;若選擇的內(nèi)存頁(yè)為安全頁(yè)(SP=1),則發(fā)出SEM安全異常信號(hào)以代替GPF。
注釋(3)一般存取頁(yè)內(nèi)容包括高安全程序類型。
注釋(4)一般存取頁(yè)內(nèi)容包括OS核心和環(huán)0設(shè)備驅(qū)動(dòng)器。
注釋(5)任何存取嘗試引起GFP;若選擇的內(nèi)存頁(yè)為一安全頁(yè)(SP=1),則發(fā)出SEM安全異常信號(hào)以代替GPF。
注釋(6)一般存取頁(yè)內(nèi)容包括應(yīng)用程序。
在表1中,當(dāng)前執(zhí)行指令的SP位為對(duì)應(yīng)于包含當(dāng)前執(zhí)行指令的內(nèi)存頁(yè)的SAT記錄1312的SP位。選擇的內(nèi)存頁(yè)的U/S位為PDE U/S位存頁(yè)的SAT記錄1312的SP位。選擇的內(nèi)存頁(yè)的U/S位為PDE U/S位和選擇的內(nèi)存頁(yè)的PTE U/S位的邏輯“與”。選擇的內(nèi)存頁(yè)的R/W位為PDE R/W位和選擇的內(nèi)存頁(yè)的PTE R/W位的邏輯“與”。符號(hào)“X”表示“任意項(xiàng)”邏輯值可以是“0”或“1”。
現(xiàn)在回頭參照?qǐng)D8B,中央處理器SCU 417的安全檢測(cè)邏輯800B產(chǎn)生一般的保護(hù)錯(cuò)誤(GPF)信號(hào)和“SEM安全異?!毙盘?hào),并提供GPF和SEM安全異常信號(hào)至在分頁(yè)單元702中的邏輯。當(dāng)安全檢測(cè)邏輯800B確認(rèn)GPF信號(hào)時(shí),MMU 602將GPF信號(hào)傳輸給執(zhí)行單元600。響應(yīng)該GPF信號(hào),執(zhí)行單元600可使用公知的x86處理器架構(gòu)的中斷描述符表(IDT)指引機(jī)制來(lái)存取和執(zhí)行GPF處理器例程。
當(dāng)安全檢測(cè)邏輯800B確認(rèn)SEM安全異常信號(hào)時(shí),MMU 602將SEM安全異常信號(hào)傳輸至執(zhí)行單元600。不像一般處理器異常的使用x86處理器架構(gòu)的中斷描述符表(IDT)指引機(jī)制,而可使用不同的指引方法來(lái)處理SEM安全異常??梢酝ㄟ^(guò)類似于x86“SYSENTER”和“SYSEXIT”指令運(yùn)作方式的一對(duì)寄存器(例如,MSRs)來(lái)調(diào)配SEM安全異常。該對(duì)寄存器可以是“安全異常記錄點(diǎn)”寄存器,并且當(dāng)SEM安全異常發(fā)生時(shí),可以定義用于指令執(zhí)行的分支目標(biāo)地址。安全異常記錄點(diǎn)寄存器可以定義代碼段,之后的指令指針(IP,或64位形式RIP)、堆棧段(SS)、和將用于至SEM安全異常處理程序1210的記錄的堆棧指針(SP,或64位形式RSP)值。在軟件控制下,執(zhí)行單元600可以將前面的SS、SP/RSP、EFLAGS、CS和IP/RIP值推入新的堆棧以指示異常發(fā)生的位置。此外,執(zhí)行單元600可將錯(cuò)誤碼推入堆棧。如上所述,IRET指令可不用作為之前總是儲(chǔ)存著的SS和SP/RSP值,以及即使未發(fā)生CPL的改變,也總可完成堆棧交換。通過(guò)SMRET指令從SEM安全異常處理程序1210返回。
下列表2顯示用于內(nèi)存頁(yè)存取的示例性規(guī)則,該內(nèi)存存取當(dāng)計(jì)算機(jī)系統(tǒng)4400在安全執(zhí)行模式下操作時(shí),由設(shè)備硬件單元414A至414D啟動(dòng)(亦即,硬件啟動(dòng)的內(nèi)存存取)。這些硬件啟動(dòng)的內(nèi)存存取可以通過(guò)在設(shè)備硬件單元414A至414D內(nèi)的總線主控電路,或通過(guò)在設(shè)備硬件單元414A至414D的請(qǐng)求的DMA裝置而進(jìn)行啟動(dòng)。當(dāng)計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí),安全檢測(cè)邏輯800可執(zhí)行表2的規(guī)則以給的額外的安全。在下列表2中,該“目標(biāo)”內(nèi)存頁(yè)為在其內(nèi)存在有由內(nèi)存存取的內(nèi)存存取信息所傳輸?shù)奈锢淼刂返膬?nèi)存頁(yè)。
表2.當(dāng)計(jì)算機(jī)系統(tǒng)400B操作于SEM時(shí),對(duì)于硬件啟動(dòng)的內(nèi)存存取的示例性規(guī)則
在上列表2中,通過(guò)使用內(nèi)存存取的物理地址的主橋接器SCU 418及上述圖9的用來(lái)獲得對(duì)應(yīng)的內(nèi)存頁(yè)的SAT記錄1225的機(jī)制900,而獲得目標(biāo)內(nèi)存頁(yè)的SP位。
如表2中所指示,當(dāng)SP=1指示目標(biāo)內(nèi)存頁(yè)為安全頁(yè)時(shí),則內(nèi)存未經(jīng)授權(quán)。在這種情況,安全檢測(cè)邏輯800并未提供內(nèi)存存取信息給內(nèi)存控制器。內(nèi)存存取信息(例如,控制信號(hào))的部分指示內(nèi)存存取類型,而其中該內(nèi)存存取類型為讀取存取或?qū)懭氪嫒∑渲兄?。?dāng)SP=1和內(nèi)存存取信息指示內(nèi)存存取類型為讀取存取時(shí),該內(nèi)存存取為未經(jīng)授權(quán)的讀取存取,且安全檢測(cè)邏輯800通過(guò)提供所有的“F”而非實(shí)際的內(nèi)存內(nèi)容(亦即,假讀取數(shù)據(jù)),而響應(yīng)該未經(jīng)授權(quán)的讀取存取。安全檢測(cè)邏輯800也可通過(guò)上述登錄未經(jīng)授權(quán)的讀取存取,而響應(yīng)未經(jīng)授權(quán)的讀取存取。
當(dāng)SP=1和內(nèi)存存取信息指示內(nèi)存存取類型為寫入存取時(shí),該內(nèi)存存取為未經(jīng)授權(quán)的寫入存取。在這種情況,安全檢測(cè)邏輯800通過(guò)舍棄由該內(nèi)存存取信息所傳輸?shù)膶懭霐?shù)據(jù),而響應(yīng)未經(jīng)授權(quán)的寫入存取。安全檢測(cè)邏輯800也可通過(guò)上述登錄未經(jīng)授權(quán)的寫入存取,而響應(yīng)未經(jīng)授權(quán)的寫入存取。
圖16A為圖4C的主橋接器404C的一個(gè)實(shí)施例的方框圖。在圖16A的實(shí)施例中,主橋接器404C包括主接口1600、橋接器邏輯1602、主橋接器SCU 418、內(nèi)存控制器1604和設(shè)備總線接口1606。主接口1600連接到CPU 402,且設(shè)備總線接口1606連接到設(shè)備總線408。橋接器邏輯1602連接到主接口1600和設(shè)備總線接口1606之間。內(nèi)存控制器1604連接到內(nèi)存406,并執(zhí)行對(duì)內(nèi)存406的所有存取。主橋接器SCU 418連接到橋接器邏輯1602和內(nèi)存控制器1604之間。如上所述,主橋接器SCU 418控制通過(guò)設(shè)備總線接口1606到內(nèi)存406的存取。該主橋接器SCU 418監(jiān)視通過(guò)設(shè)備總線接口1606到內(nèi)存406的所有存取,并僅允許對(duì)內(nèi)存406的經(jīng)授權(quán)的存取。
圖16B為圖4C的主橋接器404C的另一個(gè)實(shí)施例的方框圖。在圖16B的實(shí)施例中,主橋接器404C包括主接口1600、橋接器邏輯1602、主橋接器SCU 418、內(nèi)存控制器1604、設(shè)備總線接口1606和總線仲裁器1608。主接口1600連接到CPU 402,且設(shè)備總線接口1606連接到設(shè)備總線408。橋接器邏輯1602連接到主接口1600和設(shè)備總線接口1606之間。內(nèi)存控制器1604連接到內(nèi)存406,并執(zhí)行對(duì)內(nèi)存406的所有存取。主橋接器SCU 418連接到橋接器邏輯1602和內(nèi)存控制器1604之間。如上所述,主橋接器SCU 418控制通過(guò)設(shè)備總線接口1606到內(nèi)存406的存取。該主橋接器SCU 418監(jiān)視通過(guò)設(shè)備總線接口1606到內(nèi)存406的所有的存取,并僅允許對(duì)內(nèi)存406的經(jīng)授權(quán)的存取。
在圖16B的實(shí)施例中,總線仲裁器1608連接到設(shè)備總線接口1606、橋接器邏輯1602和主橋接器SCU 418??偩€仲裁器1608在橋接器邏輯1602、設(shè)備硬件單元414A和414B及設(shè)備總線橋接器410之間作仲裁,該設(shè)備總線橋接器410用來(lái)控制設(shè)備總線408。(設(shè)備硬件單元414C和414D通過(guò)設(shè)備總線橋接器410存取設(shè)備總線408)。一般而言,設(shè)備總線408可包括傳輸許可信號(hào)的一條或多條信號(hào)線,其中該允許的信號(hào)是多狀態(tài)的其中之一,該多狀態(tài)指示連接至設(shè)備總線408的這些裝置的其中具有設(shè)備總線控制408者??偩€仲裁器1608可根據(jù)傳輸許可信號(hào)的一條或多條信號(hào)線來(lái)驅(qū)動(dòng)許可信號(hào)。在正常情況下總線仲裁器1608可接收從設(shè)備硬件單元414A和414B以及設(shè)備總線橋接器410來(lái)的分離的請(qǐng)求信號(hào),其中當(dāng)該對(duì)應(yīng)的裝置需要控制設(shè)備總線408時(shí),各請(qǐng)求信號(hào)由對(duì)應(yīng)的裝置所確認(rèn)??偩€仲裁器1608可發(fā)布分離的許可信號(hào)至設(shè)備硬件單元414A和414B以及至設(shè)備總線橋接器410,其中許可信號(hào)的給定之一被確認(rèn)以指示對(duì)應(yīng)的裝置允許控制設(shè)備總線408??偩€仲裁器1608可與主橋接器SCU 418工作以提供在計(jì)算機(jī)系統(tǒng)400C內(nèi)的設(shè)備間的安全存取。
圖17為圖16A或16B的主橋接器SCU 418的一個(gè)實(shí)施例的方框圖。在圖17的實(shí)施例中,主橋接器SCU 418包括連接到一組SEM寄存器1702和SAT記錄緩沖器1704的安全檢測(cè)邏輯1700。該組SEM寄存器1702管理安全檢測(cè)邏輯1700的操作,并包括了圖9的第二SAT基址寄存器908。該組SEM寄存器1702的第二SAT基址寄存器908可以是可尋址寄存器。當(dāng)安全核心504修改在CPU 402的該組SEM寄存器610中的SAT基址寄存器908的內(nèi)容時(shí)(例如,在上下文切換期間),安全核心504也可將相同的值寫入到在主橋接器SCU 418的該組SEM寄存器1702中的第二SAT基址寄存器908。響應(yīng)該修改的第二SAT基址寄存器908,主橋接器SCU 418的安全檢測(cè)邏輯1700可清除SAT記錄緩沖器1704。
安全檢測(cè)邏輯1700接收由硬件裝置單元414A至414D通過(guò)設(shè)備總線接口1606和橋接器邏輯1602所啟動(dòng)的內(nèi)存存取的內(nèi)存存取信息。內(nèi)存存取信息傳輸來(lái)自硬件裝置單元414A至414D的物理地址及相關(guān)的控制和/或數(shù)據(jù)信號(hào)。安全檢測(cè)邏輯1700可具體實(shí)施用來(lái)獲得對(duì)應(yīng)于內(nèi)存頁(yè)的SAT記錄1225的機(jī)制1300,并且當(dāng)計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí)可執(zhí)行機(jī)制1300。SAT記錄緩沖器1704類似于上述的中央處理器SCU 416的SAT記錄緩沖器802,并用來(lái)儲(chǔ)存最近存取的內(nèi)存頁(yè)相當(dāng)小數(shù)目的SAT記錄1225。
當(dāng)計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí),圖17的安全檢測(cè)邏輯1700可使用與所選擇的內(nèi)存頁(yè)相關(guān)的SAT記錄1312的額外的安全信息,以判定是否給定的硬件啟動(dòng)的內(nèi)存存取已經(jīng)授權(quán)。若給定的硬件啟動(dòng)的內(nèi)存存取已經(jīng)授權(quán),則內(nèi)存檢測(cè)邏輯1700提供內(nèi)存存取的內(nèi)存存取信息(亦即,地址信號(hào)傳輸物理地址和相關(guān)的控制和/或數(shù)據(jù)信號(hào))給內(nèi)存控制器1604。內(nèi)存控制器1604使用物理地址和相關(guān)的控制和/或數(shù)據(jù)信號(hào)來(lái)存取內(nèi)存406。若內(nèi)存406存取為寫入存取,則由數(shù)據(jù)信號(hào)所傳輸?shù)臄?shù)據(jù)寫入到內(nèi)存406。若內(nèi)存406存取為讀取存取,則內(nèi)存控制器1604從內(nèi)存406讀取數(shù)據(jù),并將所獲得的讀取數(shù)據(jù)提供給安全檢測(cè)邏輯1700。安全檢測(cè)邏輯1700將讀取數(shù)據(jù)傳輸?shù)綐蚪悠鬟壿?602,而橋接器邏輯1602將數(shù)據(jù)提供給設(shè)備總線接口1606。
另一方面,若給定的硬件啟動(dòng)的內(nèi)存存取未經(jīng)授權(quán),則安全檢測(cè)邏輯1700并不提供物理地址及內(nèi)存406相關(guān)的控制和/或數(shù)據(jù)信號(hào)對(duì)內(nèi)存控制器1604的存取。若未經(jīng)授權(quán)的硬件啟動(dòng)的內(nèi)存存取為內(nèi)存寫入存取,則安全檢測(cè)邏輯1700可發(fā)信號(hào)完成寫入存取并舍棄寫入數(shù)據(jù),保留內(nèi)存406未改變。安全檢測(cè)邏輯1700也可在日志(log)中建立(例如,設(shè)定或清除狀態(tài)寄存器的一個(gè)或多個(gè)位)日志記錄,以便記載違反安全的存取。安全核心504可周期性地存取該日志以檢測(cè)這種日志記錄。若該未經(jīng)授權(quán)的硬件啟動(dòng)的內(nèi)存存取為內(nèi)存讀取存取,則安全檢測(cè)邏輯1700可通過(guò)橋接器邏輯1602將錯(cuò)誤的結(jié)果(例如,所有的“假(F)”)送回到設(shè)備總線接口1606以作為讀取數(shù)據(jù)。安全檢測(cè)邏輯1700也可建立如上所述的日志記錄,以為了記載違反安全的存取。
圖18為主橋接器SCU 418的另一個(gè)實(shí)施例的方框圖,其中該主橋接器SCU 418包括存取授權(quán)表1800。一般而言,存取授權(quán)表1800具有連接到設(shè)備總線408并能夠驅(qū)動(dòng)設(shè)備總線408(亦即,各裝置具有相關(guān)的REQ#和GNT#信號(hào))的用于各裝置的不同組的記錄。對(duì)應(yīng)于設(shè)備硬件414A的第一組記錄和關(guān)聯(lián)于設(shè)備硬件414B的第二組的記錄如圖18所示。也可考慮使用額外組的記錄。
存取授權(quán)表1800的各記錄對(duì)應(yīng)于連接到設(shè)備總線408并能夠驅(qū)動(dòng)設(shè)備總線408的裝置。例如,在圖18中,對(duì)應(yīng)于設(shè)備硬件414A的第一組記錄中的第一記錄是針對(duì)設(shè)備硬件414B。第一記錄包括“許可信號(hào)狀態(tài)(GRANT SIGNAL STATE)”字段,該許可信號(hào)狀態(tài)字段包含術(shù)語(yǔ)“許可#2確認(rèn)(GNT#2 ASSERTED)”,以指示當(dāng)確認(rèn)GNT#2信號(hào)時(shí),應(yīng)用第一記錄。該第一記錄還包括對(duì)應(yīng)于設(shè)備硬件414B并指示設(shè)備硬件414B是否已授權(quán)來(lái)存取設(shè)備硬件414A的“存取已授權(quán)”值。也可建立存取授權(quán)表1800,并由安全核心504所維持。
根據(jù)PCI總線協(xié)議,“啟動(dòng)器”裝置存取“目標(biāo)”裝置以啟動(dòng)總線傳送或“事務(wù)”??赏ㄟ^(guò)確認(rèn)“停止#(STOP#)”信號(hào)而使目標(biāo)裝置終止事務(wù)。當(dāng)啟動(dòng)器裝置偵測(cè)確認(rèn)的STOP#信號(hào)時(shí),該啟動(dòng)器裝置必須終止事務(wù)并再仲裁PCI總線的控制,以便完成事務(wù)。若在任何數(shù)據(jù)傳送之前目標(biāo)裝置確認(rèn)STOP#信號(hào),則該終止稱之為“重試”。
在一個(gè)實(shí)施例中,設(shè)備總線408為PCI總線,設(shè)備總線408包括多條地址和數(shù)據(jù)(A/D)信號(hào)線。連接到設(shè)備總線408的啟動(dòng)器裝置通過(guò)驅(qū)動(dòng)設(shè)備總線408的多條A/D信號(hào)線存取連接到設(shè)備總線408的目標(biāo)裝置,該設(shè)備總線408具有輸送指定到目標(biāo)裝置的地址的地址信號(hào)。舉例而言,為了控制連接至設(shè)備總線408的設(shè)備硬件414B的存取,主橋接器SCU 418首先通過(guò)PCI總線而編程設(shè)備硬件414B,以配置設(shè)備硬件414B通過(guò)確認(rèn)STOP#信號(hào)(亦即,通過(guò)起始PCI總線重試而阻斷所有的存取嘗試)而響應(yīng)所有的存取嘗試。
主橋接器SCU 418通過(guò)設(shè)備總線接口1606連接到設(shè)備總線408的信號(hào)線,并監(jiān)視設(shè)備總線408的GNT#和A/D信號(hào)線,以偵測(cè)裝置存取嘗試。例如,假設(shè)設(shè)備硬件414A嘗試存取設(shè)備硬件414B。當(dāng)“啟動(dòng)器”設(shè)備硬件414A嘗試存取“目標(biāo)”設(shè)備硬件414B時(shí),設(shè)備硬件414B通過(guò)啟動(dòng)PCI總線重試(亦即,在偵測(cè)指定到設(shè)備總線408的A/D信號(hào)線上的設(shè)備硬件414B的地址之后,確認(rèn)STOP#信號(hào))而阻止存取嘗試。該動(dòng)作迫使設(shè)備硬件414A通過(guò)后續(xù)的存取嘗試而重試存取嘗試。
當(dāng)設(shè)備硬件414B阻止存取嘗試時(shí),主橋接器SCU 418通過(guò)指定到在設(shè)備總線408的A/D信號(hào)線上驅(qū)動(dòng)的設(shè)備硬件414B的地址而偵測(cè)存取嘗試。當(dāng)設(shè)備硬件414A具有設(shè)備總線408的控制時(shí),GNT#1信號(hào)被確認(rèn),而主橋接器SCU 418通過(guò)確認(rèn)的GNT#1信號(hào)而辨識(shí)作為啟動(dòng)器的設(shè)備硬件414A。
主橋接器SCU 418然后決定是否將允許由設(shè)備硬件414A所產(chǎn)生的之后的存取嘗試。主橋接器SCU 418存取對(duì)應(yīng)于設(shè)備硬件414B的第二組的記錄存取授權(quán)表1800,并選擇在許可信號(hào)狀態(tài)字段中具有“已經(jīng)確認(rèn)允許#1”的該第二組的第一記錄。該第一記錄的存取已授權(quán)值為“1”,其指示通過(guò)設(shè)備硬件414A的設(shè)備硬件414B的存取已經(jīng)授權(quán),并將允許設(shè)備硬件414A的后續(xù)的存取嘗試。
當(dāng)存取已授權(quán)值指示將允許設(shè)備硬件414A的后續(xù)的存取嘗試時(shí),主橋接器SCU 418送出信號(hào)至總線仲裁器1608以確認(rèn)設(shè)備硬件414A。就在下一個(gè)至設(shè)備硬件414A的設(shè)備總線408的允許控制之前,總線仲裁器1608將設(shè)備總線408的控制授權(quán)給主橋接器SCU 418。主橋接器SCU 418驅(qū)動(dòng)在設(shè)備總線408的信號(hào)線上的信號(hào),該設(shè)備總線408配置設(shè)備硬件414B以允許由設(shè)備硬件414A產(chǎn)生的后續(xù)存取嘗試。
緊接著設(shè)備硬件414A的后續(xù)存取嘗試之后,總線仲裁器1608立即將設(shè)備總線408的控制再授權(quán)給主橋接器SCU 418。主橋接器SCU 418驅(qū)動(dòng)在PCI總線的信號(hào)線上的信號(hào),該P(yáng)CI總線配置設(shè)備硬件414B以響應(yīng)通過(guò)啟動(dòng)PCI總線重試的所有的存取嘗試(亦即,在偵測(cè)指定至在設(shè)備總線408的A/D信號(hào)線上的設(shè)備硬件414B的地址之后,通過(guò)確認(rèn)STOP#信號(hào)而阻止所有的存取嘗試)。
當(dāng)存取授權(quán)表1800的選擇的記錄中的存取已授權(quán)值為“0”時(shí),則表示啟動(dòng)器裝置并未被授權(quán)存取目標(biāo)裝置,且由啟動(dòng)器裝置所產(chǎn)生的后續(xù)存取嘗試將不被允許,主橋接器SCU 418不配置目標(biāo)裝置以允許由啟動(dòng)器裝置所產(chǎn)生的后續(xù)的存取嘗試,且目標(biāo)裝置繼續(xù)阻隔由啟動(dòng)器裝置所產(chǎn)生的通過(guò)起始PCI總線重試的存取嘗試。應(yīng)注意的是,為了保護(hù)的目的,上述的基本的(atomic)配置-存取-配置機(jī)制僅要求存在的PCI裝置可編程以啟動(dòng)PCI總線重試即可。
現(xiàn)在參照?qǐng)D19,顯示了根據(jù)本發(fā)明的處理單元1910的一個(gè)實(shí)施例的簡(jiǎn)化方框圖。在一個(gè)實(shí)施例中,處理單元310包括處理單元1910、I/O存取接口1920、I/O空間1940和比如軟件目標(biāo)或結(jié)構(gòu)的可編程目標(biāo)1950。處理器1910可以是微處理器(例如,CPU 420),并可包括多個(gè)處理器(未示出)。
在一個(gè)實(shí)施例中,I/O空間1940提供“通路(gateway)”給I/O裝置1960,比如調(diào)制解調(diào)器、軟盤驅(qū)動(dòng)器、硬盤驅(qū)動(dòng)器、光驅(qū)、數(shù)字激光視盤(DVD)機(jī)、PCMCIA卡和各種的其它輸入輸出外圍設(shè)備(例如,414A至414D)。在另一個(gè)實(shí)施例中,I/O空間1940集成在I/O裝置1960內(nèi)。在一個(gè)實(shí)施例中,I/O空間1940包括內(nèi)存單元1947,該內(nèi)存單元1947包含相關(guān)于尋址和與I/O空間1940通訊的數(shù)據(jù)。內(nèi)存單元1947包括物理內(nèi)存部件,該物理內(nèi)存部件包括比如磁帶存儲(chǔ)器、高速緩存、隨機(jī)存取存儲(chǔ)器、設(shè)置在半導(dǎo)體芯片上的內(nèi)存以及此類的物理內(nèi)存。設(shè)置在半導(dǎo)體芯片上的內(nèi)存可采用任何各種不同的形式,比如同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)、雙倍同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DDRAM)等。
處理器1910通過(guò)系統(tǒng)I/O存取接口1920而與I/O空間1940通訊。在一個(gè)實(shí)施例中,I/O存取接口1920為一種公知的結(jié)構(gòu),提供I/O空間地址和邏輯信號(hào)給I/O空間1940,以描述所希望的輸入/輸出數(shù)據(jù)事務(wù)。本發(fā)明的實(shí)施例提供I/O存取接口1920以執(zhí)行多重表、基于安全的存取系統(tǒng)。
在一個(gè)實(shí)施例中,處理器1910連接至主總線1915。處理器1910通過(guò)主總線1915而與I/O存取接口1920及目標(biāo)1950通訊。I/O存取接口1920連接至主總線1915和I/O空間1940。處理器1910還連接至主要總線1925,該主要總線1925用來(lái)與外圍設(shè)備通訊。在一個(gè)實(shí)施例中,主要總線1925為一個(gè)外圍設(shè)備互連(PCI)總線(參閱PCI規(guī)格,2.1版)。驅(qū)動(dòng)顯示單元320和其它裝置(例如,PCI裝置)的視頻控制器(未示出)連接到主要總線1925。計(jì)算機(jī)系統(tǒng)200可包括其它的總線比如第二PCI總線(未示出)或本領(lǐng)域技術(shù)人員公知的其它的外圍設(shè)備(未示出)。
處理器1910根據(jù)從目標(biāo)1950來(lái)的指令,而執(zhí)行多個(gè)計(jì)算機(jī)處理操作。目標(biāo)1950可包括軟件結(jié)構(gòu),該軟件結(jié)構(gòu)提示處理器1910以執(zhí)行多個(gè)功能。此外,目標(biāo)1950的多個(gè)子段,比如操作系統(tǒng)、例如Microsoft Word等用戶接口軟件系統(tǒng),可同時(shí)存在于處理器1910內(nèi)并執(zhí)行操作。本發(fā)明的各實(shí)施例提供安全等級(jí)存取及用于處理器1910的優(yōu)先權(quán)。
響應(yīng)由目標(biāo)1950所提供的執(zhí)行軟件碼,處理器1910可執(zhí)行一個(gè)或多個(gè)I/O裝置存取,包括內(nèi)存存取,以執(zhí)行由一個(gè)或多個(gè)目標(biāo)1950的啟動(dòng)所提示的任務(wù)。由處理器1910所執(zhí)行的I/O存取,可包括存取I/O裝置1960以控制I/O裝置1960的個(gè)別功能,比如調(diào)制解調(diào)器的操作。由處理器1910所執(zhí)行的I/O存取,也可包括為儲(chǔ)存執(zhí)行碼和內(nèi)存存取而存取I/O裝置1960的內(nèi)存地址,以獲得從儲(chǔ)存的內(nèi)存地址來(lái)的數(shù)據(jù)。
許多時(shí)候,可通過(guò)一個(gè)或多個(gè)選擇的目標(biāo)1950,來(lái)限制某些I/O裝置1960或I/O裝置1960的各部分的存取。同樣地,可通過(guò)一個(gè)或多個(gè)選擇的目標(biāo)1950來(lái)限制儲(chǔ)存于I/O裝置1960的特定的內(nèi)存地址的某些數(shù)據(jù)的存取。本發(fā)明的各實(shí)施例提供了多重表安全存取來(lái)限制存取到系統(tǒng)200中的特定的I/O裝置1960或I/O裝置1960的內(nèi)存地址。處理器1910通過(guò)I/O存取接口1920執(zhí)行I/O空間存取。I/O存取接口1920提供對(duì)I/O空間1940的存取,該I/O空間1940可包括到多個(gè)I/O裝置1960的通路。通過(guò)本發(fā)明的至少一個(gè)實(shí)施例,而提供多重表虛擬內(nèi)存存取協(xié)議。
現(xiàn)在參照?qǐng)D20,顯示了根據(jù)本發(fā)明的I/O存取接口1920的一個(gè)實(shí)施例的方框圖。在一個(gè)實(shí)施例中,I/O存取接口1920包括I/O存取表2010、第二I/O表2030和I/O空間接口1945。在一個(gè)實(shí)施例中,I/O空間接口1945代表一個(gè)“虛擬”I/O空間地址,可用來(lái)尋址關(guān)于I/O裝置1960或關(guān)于I/O裝置1960的一部分的物理地址。處理器1910可通過(guò)尋址I/O空間接口1945而存取I/O空間1940。
本發(fā)明的實(shí)施例提供使用多重表I/O和內(nèi)存存取系統(tǒng)而執(zhí)行的I/O存取。由本發(fā)明的實(shí)施例所使用的多重表I/O和內(nèi)存存取系統(tǒng)使用了多級(jí)表尋址設(shè)計(jì)(亦即,使用I/O存取表2010結(jié)合第二I/O表2030)以通過(guò)I/O空間接口1945存取I/O空間地址。處理器1910使用I/O內(nèi)存地址來(lái)定位所希望的物理I/O地址。
系統(tǒng)300可利用I/O存取表2010結(jié)合一個(gè)或多個(gè)其它的表比如第二I/O表2030,來(lái)定義一虛擬I/O空間地址。使用I/O存取表2010和第二I/O存取表2030來(lái)轉(zhuǎn)換可引導(dǎo)至物理I/O地址的虛擬I/O空間地址。物理I/O地址指向I/O裝置360的物理地址,或指向在I/O裝置1960中的內(nèi)存地址。由本發(fā)明的實(shí)施例所提供的多級(jí)I/O存取表系統(tǒng)允許第二I/O表2030來(lái)定義全部各段的I/O存取表2010。在一些例子中,第二I/O表2030可定義并不出現(xiàn)于I/O存取表2010中的一部分的虛擬I/O地址。第二I/O表2030可被用作微調(diào)裝置,該微調(diào)裝置可根據(jù)由I/O存取表2010所產(chǎn)生的虛擬I/O地址來(lái)進(jìn)一步定義物理I/O地址。如此將得到更正確和快速的虛擬I/O地址定義。
在一個(gè)實(shí)施例中,在其中可包括多個(gè)子集合表的第二表2030儲(chǔ)存在內(nèi)存單元1947中或在系統(tǒng)300的主存儲(chǔ)器(圖中未顯示)中。第二I/O表2030可儲(chǔ)存于高安全等級(jí)以防止不安全或未經(jīng)驗(yàn)證的軟件結(jié)構(gòu)或目標(biāo)1950獲得對(duì)第二I/O表2030的存取。在一個(gè)實(shí)施例中,處理器1910根據(jù)通過(guò)目標(biāo)1950所送出的指令,而請(qǐng)求對(duì)物理I/O裝置地址中的地址的存取。響應(yīng)由處理器1910所作的內(nèi)存存取請(qǐng)求,I/O存取接口1920提示I/O存取表2010產(chǎn)生虛擬I/O地址,該虛擬I/O地址進(jìn)一步由第二I/O表2030所定義。虛擬I/O地址然后指向在I/O空間接口1945中的一位置。處理器1910然后請(qǐng)求對(duì)虛擬I/O地址的存取,然后可使用該虛擬I/O地址來(lái)定位在I/O裝置1960中對(duì)應(yīng)的位置。
以下說(shuō)明在圖21A和圖21B中所示的執(zhí)行由處理器1910所執(zhí)行的內(nèi)存存取的一個(gè)實(shí)施例?,F(xiàn)在參照?qǐng)D21A,顯示了用來(lái)儲(chǔ)存和取得在數(shù)據(jù)處理器或系統(tǒng)300中的安全等級(jí)屬性的I/O存取系統(tǒng)2100的一個(gè)示例性實(shí)施例。在一個(gè)實(shí)施例中,I/O存取系統(tǒng)2100集成到系統(tǒng)300中的處理單元1910。I/O存取系統(tǒng)2100對(duì)于使用多重表安全方案來(lái)存取I/O空間1940的數(shù)據(jù)處理器(圖中未顯示)是有用的。舉例而言,當(dāng)使用諸如在x86型的微處理器中執(zhí)行的分頁(yè)設(shè)計(jì)的分頁(yè)設(shè)計(jì)尋址I/O空間1940時(shí),處理器1910可使用I/O存取系統(tǒng)2100。在一個(gè)實(shí)施例中,x86系統(tǒng)中的單一內(nèi)存頁(yè)包括4k字節(jié)的內(nèi)存。再者,I/O存取系統(tǒng)2100找到在處理器1910中的特殊的應(yīng)用,該處理器1910指定在頁(yè)級(jí)的適當(dāng)安全等級(jí)屬性。
I/O存取系統(tǒng)2100接收I/O空間地址2153,該I/O空間地址2153由頁(yè)部分2110和偏移部分2120組成,相對(duì)于將由x86型的微處理器中的分頁(yè)單元所接收的虛擬、線性或中間地址。在一個(gè)實(shí)施例中,頁(yè)部分2110數(shù)據(jù)尋址于適當(dāng)?shù)膬?nèi)存頁(yè),而偏移部分2120數(shù)據(jù)尋址于選擇的頁(yè)部分2110內(nèi)的特定偏移I/O位置。I/O存取系統(tǒng)2100接收比如將由x86類型的微處理器中的分頁(yè)單元(圖中未顯示)所產(chǎn)生的物理地址。
通常稱之為擴(kuò)展安全屬性表(ESAT)的多級(jí)查找表2130接收物理I/O地址的頁(yè)部分2110。多級(jí)查找表2130儲(chǔ)存與內(nèi)存的各頁(yè)2110相關(guān)的安全屬性。換言之,各頁(yè)2110具有關(guān)于該頁(yè)2110的某些安全等級(jí)屬性。在一個(gè)實(shí)施例中,關(guān)于頁(yè)2110的安全屬性儲(chǔ)存在多級(jí)查找表2130中。舉例而言,關(guān)于各頁(yè)2110的安全屬性可包括下查(look down)、安全上下文ID(security context ID)、輕權(quán)值調(diào)用門(lightweightcall gate)、讀取使能、寫入使能、執(zhí)行、外部主控寫入使能、外部主控讀取使能、加密內(nèi)存及安全指令使能等。本領(lǐng)域技術(shù)人員結(jié)合本發(fā)明揭示的內(nèi)容將易于了解許多的這些屬性。
在一個(gè)實(shí)施例中,多級(jí)查找表2130位于系統(tǒng)300的系統(tǒng)內(nèi)存(圖中未顯示)中。在另一個(gè)實(shí)施例中,多級(jí)查找表2130集成入處理器1910,該處理器1910包括使用了系統(tǒng)300的微處理器。因此,多級(jí)查找表2130能夠操作的速度依賴于至少是部分依賴于系統(tǒng)內(nèi)存的速度。系統(tǒng)內(nèi)存的速度相對(duì)于處理器310的速度來(lái)說(shuō)一般相當(dāng)?shù)穆?。因此,使用多?jí)查找表2130的取得安全屬性的處理可放慢系統(tǒng)300的整個(gè)操作速度。為了減少定位需要的時(shí)間周期并取得安全屬性,而同時(shí)使用高速緩存2140和多級(jí)查找表2130。高速緩存2140可位于與處理器1910(亦即,高速緩存2140和處理器1910集成于一個(gè)半導(dǎo)體芯片上)相同的晶粒上,或設(shè)在處理器晶粒的外部,或者二種情況都有。一般而言,高速緩存2140的速度實(shí)質(zhì)上快于多級(jí)查找表2130的速度。高速緩存2140包括包含在多級(jí)查找表2130內(nèi)的頁(yè)2110和其安全屬性的較小的子集。于是,對(duì)于儲(chǔ)存在高速緩存2140中的頁(yè)2110,獲取安全屬性的操作實(shí)質(zhì)上被增強(qiáng)。
現(xiàn)在回頭參照?qǐng)D21B,顯示了使用相關(guān)于內(nèi)存中的頁(yè)2110而用來(lái)儲(chǔ)存和獲取安全屬性的多級(jí)查找表2130的一個(gè)實(shí)施例。多級(jí)查找表2130包括通常稱之為ESAT目錄的第一表2150,和通常稱之為ESAT的第二表2152。一般而言,第一表2150包含用于多個(gè)ESAT 2152的開(kāi)始地址的目錄,其中儲(chǔ)存了關(guān)于各頁(yè)2110的安全屬性。在此處所示的實(shí)施例中,可使用單一ESAT目錄2150來(lái)映射在I/O裝置1960內(nèi)的I/O地址和/或內(nèi)存的整個(gè)范圍。
I/O空間地址2153的第一部分用來(lái)作為進(jìn)入第一表2150中的指針,其包括了最高位和通常稱之為目錄2154者。I/O空間地址2153還可包括含有表數(shù)據(jù)2170的部分,表數(shù)據(jù)2170能夠確認(rèn)正被尋址的表2150、2152。I/O空間地址2153進(jìn)一步包括在表2150、2152內(nèi)的偏移2120,該表2150、2152引導(dǎo)至一特定的記錄2160、2180。第一表2150位于系統(tǒng)內(nèi)存中基址2155處。將I/O空間地址2153的目錄部分2154加至基址2155以確認(rèn)記錄2160,記錄2160指向第二表2152其中之一的適當(dāng)?shù)牡刂返幕?。在一個(gè)實(shí)施例中,有多個(gè)第二表2152可存在于多級(jí)查找表2130中。一般而言,在第一表2150中的各個(gè)記錄2160指向第二表2152中其中一個(gè)地址的開(kāi)始地址。換言之,各記錄2180可指向其自己?jiǎn)为?dú)的ESAT 2152。
在一個(gè)實(shí)施例中,第一表2150和各第二表2152占據(jù)在物理內(nèi)存中的一頁(yè)2110。因此,在公知的具有分頁(yè)使能的x86型的微處理器中的內(nèi)存管理單元在需要時(shí)能夠交換進(jìn)入和離開(kāi)系統(tǒng)內(nèi)存的表2150、2152。也就是說(shuō),因?yàn)楸?150、2152的多級(jí)管理,而希望所有的表2152同時(shí)存在于I/O空間340。若其中一個(gè)當(dāng)前不在內(nèi)存單元1947中的表2152由第一表2150中的記錄2160所請(qǐng)求時(shí),公知的x86微處理器的內(nèi)存管理單元(圖中未顯示)可從比如硬盤驅(qū)動(dòng)器的主存儲(chǔ)器讀取頁(yè)2110,并將請(qǐng)求的頁(yè)2110儲(chǔ)存于也許可被存取的系統(tǒng)內(nèi)存中。此一頁(yè)大小的表2150、2152減少需要儲(chǔ)存多級(jí)查找表2130的系統(tǒng)內(nèi)存的量,并且減少需要使用表2150、2152存取I/O空間1940的交換的內(nèi)存量。
在一個(gè)實(shí)施例中,各頁(yè)為4k字節(jié)大小,而系統(tǒng)內(nèi)存總共有十六兆字節(jié)或更多。因此,大約有4000個(gè)ESAT表2152位于一頁(yè)2110內(nèi)。在一個(gè)實(shí)施例中,4000個(gè)ESAT表2152各可包含4000組的安全屬性。再者,ESAT目錄2150包含用于各4000個(gè)ESAT表2152的開(kāi)始地址。第一表2150的記錄2160指向適當(dāng)?shù)牡诙?152的基址。通過(guò)將I/O空間地址2153的第二部分2152(表部分)加至包含于記錄2160中的基址2155,而確認(rèn)在適當(dāng)?shù)牡诙?152中的所需的記錄2180。在一個(gè)實(shí)施例中,記錄2180包含與I/O空間240中確認(rèn)的頁(yè)2110相關(guān)的預(yù)定的安全屬性。在圖21A和21B圖中顯示的多重表設(shè)計(jì)為一示范實(shí)施例,本領(lǐng)域技術(shù)人員結(jié)合本發(fā)明揭示的技術(shù)內(nèi)容后,可根據(jù)本發(fā)明而實(shí)現(xiàn)變化的多重表設(shè)計(jì)。
圖22顯示SEMI/O允許位圖(在圖22中標(biāo)號(hào)為2200)的一個(gè)實(shí)施例的方框圖,和用來(lái)存取SEM I/O允許位圖2200的機(jī)制的一個(gè)實(shí)施例。圖22的機(jī)制可在BIU 406內(nèi)的邏輯內(nèi)具體實(shí)施,并當(dāng)計(jì)算機(jī)系統(tǒng)400在安全執(zhí)行模式下操作時(shí)可加以應(yīng)用。在圖22中,該組SEM寄存器610包括模式指定寄存器(MSR)2202。MSR 2202用來(lái)儲(chǔ)存SEM I/O允許位圖2200的開(kāi)始地址(即,基址)。如上所述,計(jì)算機(jī)系統(tǒng)400具有n個(gè)不同的SCID值,其中n是整數(shù)且n大于等于1。SEM I/O允許位圖2200包括用于各n個(gè)不同的SCID值的不同的I/O允許位圖。各分離的I/O允許位圖包括64k位或8k字節(jié)。
在圖22的實(shí)施例中,包括存取I/O端口的I/O指令的內(nèi)存頁(yè)的SCID值用來(lái)作為從模式指定寄存器2202(亦即,SEM I/O允許位圖2200的基址)的內(nèi)容來(lái)的進(jìn)入到用來(lái)偏移SEM I/O允許位圖2200的一個(gè)或多個(gè)64k位(8k字節(jié))I/O允許位圖的偏移。結(jié)果,對(duì)應(yīng)于SCID值的I/O允許位圖被存取。然后I/O端口號(hào)用作為位偏移進(jìn)入對(duì)應(yīng)于SCID值的I/O允許位圖。以這種方式存取的位是由I/O端口號(hào)所定義的對(duì)應(yīng)于I/O端口的位。
圖23為顯示在該圖中標(biāo)號(hào)為2300的SEM I/O允許位圖的另一個(gè)實(shí)施例,以及用來(lái)存取SEM I/O允許位圖的機(jī)制的另一實(shí)施例的方框圖??稍贐IU 406內(nèi)的邏輯內(nèi)具體實(shí)施圖23的機(jī)制。在圖23的實(shí)施例中,SEMI/O允許位圖2300包括單一64k位(8k字節(jié))I/O允許位圖。I/O端口號(hào)用來(lái)作為從模式指定寄存器2202(亦即,安全執(zhí)行模式I/O允許位圖2200的基址)的內(nèi)容來(lái)的進(jìn)入到I/O允許位圖的偏移。以這種方式存取的位是由I/O端口號(hào)所定義的對(duì)應(yīng)于I/O端口的位。應(yīng)注意的是除非有其它的指示,該SEM I/O允許位圖2200和該SEMI/O允許位圖2300是可交換的。
圖24可用來(lái)說(shuō)明指定的SCID值和建立的對(duì)應(yīng)SEM I/O允許位圖2200、2300,如何用作在計(jì)算機(jī)系統(tǒng)400內(nèi)為了安全目的而“劃分”設(shè)備驅(qū)動(dòng)器和相關(guān)的設(shè)備硬件單元。圖24顯示計(jì)算機(jī)系統(tǒng)400的各種硬件和軟件組件之間關(guān)系的方框圖,類似于圖5B,其中設(shè)備驅(qū)動(dòng)器506A和對(duì)應(yīng)的設(shè)備硬件單元414A位于第一安全“室”2400,而設(shè)備驅(qū)動(dòng)器506D和對(duì)應(yīng)的設(shè)備硬件單元414D位于第二安全室2404。安全室2400和2404彼此分開(kāi)并操作上隔離。僅允許設(shè)備驅(qū)動(dòng)器506A存取設(shè)備硬件單元414A,且僅允許設(shè)備驅(qū)動(dòng)器506D存取設(shè)備硬件單元414D。這種室化(compartmentalization)的設(shè)備驅(qū)動(dòng)器和相關(guān)的設(shè)備硬件單元有助于防止惡意的或錯(cuò)誤的代碼對(duì)設(shè)備硬件單元的狀態(tài)的負(fù)面影響,或干擾計(jì)算機(jī)系統(tǒng)400的適當(dāng)操作。
舉例而言,在圖24的實(shí)施例中,包括設(shè)備驅(qū)動(dòng)器506A和506D的指令的內(nèi)存頁(yè)可指定不同的SCID值。為設(shè)備驅(qū)動(dòng)器506A的SCID值建立的第一個(gè)SEM I/O允許位圖2200、2300可允許設(shè)備驅(qū)動(dòng)器506A存取指定到設(shè)備硬件單元414A的計(jì)算機(jī)系統(tǒng)400的I/O地址空間的第一部分,而不允許設(shè)備驅(qū)動(dòng)器506A存取指定到設(shè)備硬件單元414D的I/O地址空間的第二部分。同樣地,為設(shè)備驅(qū)動(dòng)器506D的SCID值建立的第二個(gè)SEM I/O允許位圖2200、2300可允許設(shè)備驅(qū)動(dòng)器506D存取指定到設(shè)備硬件單元414D的I/O地址空間的第二部分,而不允許設(shè)備驅(qū)動(dòng)器506A存取指定到設(shè)備硬件單元414A的I/O地址空間的第一部分。結(jié)果,僅有設(shè)備驅(qū)動(dòng)器506A允許存取設(shè)備硬件單元414A,且僅有設(shè)備驅(qū)動(dòng)器506D允許存取設(shè)備硬件單元414D。
鑒于上述的系統(tǒng)300和說(shuō)明的其相關(guān)各種特征,圖25顯示了操作計(jì)算機(jī)系統(tǒng)400的方法3300的實(shí)施例,其可用于任何其它各實(shí)施例中。方法3300包括在步驟3305中執(zhí)行不安全例程。不安全例程可為一般的操作時(shí)不需要安全保護(hù)的軟件例程。不安全例程也可為具有最少安全保護(hù)的軟件例程。不安全例程可包括操作系統(tǒng)呼叫。
方法3300還包括在步驟3310中接收從不安全例程來(lái)的請(qǐng)求。該請(qǐng)求可包括例如內(nèi)存事務(wù)、I/O事務(wù)、設(shè)備間事務(wù)或軟件例程。該請(qǐng)求通常會(huì)遇到計(jì)算機(jī)系統(tǒng)400作出的所期望的響應(yīng)。方法3300在步驟3315執(zhí)行硬件中請(qǐng)求的第一次評(píng)估。第一次評(píng)估可包括特征化或其它較廣的潛在的安全風(fēng)險(xiǎn)判定。第一次評(píng)估可用標(biāo)記標(biāo)示請(qǐng)求,除了落于一類型或包括可能或潛在的安全風(fēng)險(xiǎn)的事務(wù)類型之外,并不具有真正的安全風(fēng)險(xiǎn)。
方法3300接著在決定步驟3320中判定是否請(qǐng)求有潛在的安全風(fēng)險(xiǎn)。若在決定步驟3320中判定請(qǐng)求似乎并沒(méi)有潛在的安全風(fēng)險(xiǎn),則方法3300在步驟3325賦加(fill)此請(qǐng)求??少x加此請(qǐng)求以便將任何安全風(fēng)險(xiǎn)降至最小和/或?qū)⒂?jì)算機(jī)系統(tǒng)400的響應(yīng)時(shí)間變得最大。若在決定步驟3320中判定請(qǐng)求似乎有潛在的安全風(fēng)險(xiǎn),則方法3300在步驟3330用軟件執(zhí)行更詳細(xì)的第二次評(píng)估。該第二次評(píng)估包括對(duì)請(qǐng)求的更完全的評(píng)估和以所期望的響應(yīng)賦加請(qǐng)求的任何可能的安全風(fēng)險(xiǎn)。
方法3300接著在決定步驟3335中判定請(qǐng)求是否看起來(lái)有安全風(fēng)險(xiǎn)。若請(qǐng)求在決定步驟3335中看起來(lái)并沒(méi)有安全風(fēng)險(xiǎn),則方法3300在步驟3325賦加此請(qǐng)求??少x加此請(qǐng)求以便將任何安全風(fēng)險(xiǎn)降至最小和/或?qū)⒂?jì)算機(jī)系統(tǒng)400的響應(yīng)時(shí)間變得最大。若在決定步驟3335中判定請(qǐng)求似乎有潛在的安全風(fēng)險(xiǎn),則方法3300在決定步驟3340判定該風(fēng)險(xiǎn)是否可用本發(fā)明說(shuō)明書中所舉出的一種或多種方面來(lái)管理該風(fēng)險(xiǎn),以安全地響應(yīng)該請(qǐng)求。若在決定步驟3340賦加的請(qǐng)求的安全風(fēng)險(xiǎn)看起來(lái)為可管理,則方法3300在步驟3345賦加安全形式的請(qǐng)求。在一個(gè)實(shí)施例中,當(dāng)不安全例程未接收到指示該請(qǐng)求并未如所請(qǐng)求的被賦加時(shí),通過(guò)虛擬化而執(zhí)行響應(yīng)。該請(qǐng)求通過(guò)軟件結(jié)構(gòu)而替代賦加,該軟件結(jié)構(gòu)允許計(jì)算機(jī)系統(tǒng)400陷捕或包含關(guān)于請(qǐng)求的安全問(wèn)題。若賦加請(qǐng)求的安全風(fēng)險(xiǎn)看起來(lái)為不可管理,則方法3300在步驟3350拒絕或忽略該請(qǐng)求。方法3300也可響應(yīng)具有仿造或預(yù)定響應(yīng)的請(qǐng)求。
在步驟3315可在硬件中快速有利地執(zhí)行第一次評(píng)估。在步驟3330可在軟件中更有利地完全執(zhí)行第二次評(píng)估。當(dāng)開(kāi)發(fā)出新的安全風(fēng)險(xiǎn)算法時(shí),可很容易更新軟件評(píng)估。
下列的請(qǐng)求和可能的安全反應(yīng)僅作例示用,并不欲限制任何特定的權(quán)利要求范圍?,F(xiàn)在考慮一請(qǐng)求寫入到包括已作安全處理的保密數(shù)據(jù)的內(nèi)存頁(yè)。寫入不能允許作為請(qǐng)求。內(nèi)存頁(yè)可虛擬化成虛擬頁(yè),而寫入允許寫入到虛擬頁(yè)。然后計(jì)算機(jī)系統(tǒng)400能夠評(píng)估至虛擬頁(yè)的改變。
現(xiàn)在考慮對(duì)于寫入到保護(hù)的寄存器的下一個(gè)請(qǐng)求。保護(hù)的寄存器可虛擬化成虛擬寄存器。可允許寫入至虛擬寄存器,并評(píng)估安全風(fēng)險(xiǎn)。亦可考慮一請(qǐng)求以修正實(shí)時(shí)時(shí)鐘。可將實(shí)時(shí)時(shí)鐘虛擬化成虛擬時(shí)鐘。可將請(qǐng)求賦加為不安全例程而不會(huì)改變實(shí)時(shí)時(shí)鐘。
以上揭示的本發(fā)明的一些方面可用硬件或軟件的方式來(lái)實(shí)施。因此,此處詳細(xì)說(shuō)明的一些部分結(jié)果表現(xiàn)為所謂的硬件執(zhí)行的處理,和此處詳細(xì)說(shuō)明的一些部分結(jié)果表現(xiàn)為所謂的軟件執(zhí)行的處理,該軟件執(zhí)行的處理包含在計(jì)算機(jī)系統(tǒng)或計(jì)算機(jī)裝置的內(nèi)存內(nèi)數(shù)據(jù)位操作的符號(hào)表示。這些說(shuō)明和表示為本領(lǐng)域技術(shù)人員更有效地將其工作的實(shí)質(zhì)傳達(dá)給使用硬件和軟件的本領(lǐng)域技術(shù)人員所使用的手段。二者的處理和操作需要實(shí)際數(shù)量的物理操作。通常對(duì)于軟件,雖然并不是必須的,這些數(shù)量是采用能夠儲(chǔ)存、傳輸、組合、比較和其它操作的電學(xué)、磁性或光學(xué)信號(hào)的形式。主要為了普通用途的目的,在許多情況下可將這些信號(hào)方便地表示為位、數(shù)值、元素、信號(hào)、字符、術(shù)語(yǔ)和數(shù)字等。
然而,應(yīng)該理解的是,所有的這些和相似的術(shù)語(yǔ)將有關(guān)于適當(dāng)?shù)奈锢砹?,且僅為方便而將標(biāo)記應(yīng)用于這些數(shù)量。除非經(jīng)特別說(shuō)明或可明顯地看出,所有本發(fā)明揭示的這些說(shuō)明將參照電子裝置的動(dòng)作和處理,該裝置操作和轉(zhuǎn)變代表在儲(chǔ)存到相似表現(xiàn)在儲(chǔ)存器內(nèi)的物理量的其它數(shù)據(jù)的一些電子裝置內(nèi),或在傳輸或顯示裝置內(nèi)的物理(電學(xué)、磁性或光學(xué))量的數(shù)據(jù)。表示如此說(shuō)明的各術(shù)語(yǔ)的范例為“處理”、“計(jì)算(computing)”、“核算(calculating)”、“判定”和“顯示”等,但是并不受限于這些術(shù)語(yǔ)。
還應(yīng)注意的是,本發(fā)明的軟件執(zhí)行的方面一般編碼在程序儲(chǔ)存介質(zhì)或執(zhí)行于一些傳輸介質(zhì)的形式。程序儲(chǔ)存介質(zhì)可為磁性(例如,軟盤驅(qū)動(dòng)器或硬盤驅(qū)動(dòng)器)或光學(xué)(例如,光盤只讀存儲(chǔ)器,或“CD ROM”)的儲(chǔ)存媒體,并可為只讀的或隨機(jī)存取。同樣地,傳輸介質(zhì)可為雙絞線、同軸電纜、光學(xué)電纜或一些在此技術(shù)方面公知的其它的適合傳輸介質(zhì)。本發(fā)明并不受所給予的任何這些實(shí)施方面的限制。
上述揭示的特殊實(shí)施例僅作說(shuō)明用,而本發(fā)明可作修飾以及以不同的方式實(shí)施,但是對(duì)于本領(lǐng)域技術(shù)人員而言在理解本說(shuō)明書的揭示后,應(yīng)該了解本發(fā)明可以多種等效方式實(shí)施。再者,除了以下的權(quán)利要求范圍中說(shuō)明之外,并不欲對(duì)其中所示的構(gòu)造或設(shè)計(jì)的細(xì)部作限制。因此,很明顯可對(duì)本發(fā)明揭露的特定實(shí)施例作更改或修飾,而所有這些變化都包含在本發(fā)明的精神和范圍內(nèi)。由此,本發(fā)明提出下列權(quán)利要求請(qǐng)求保護(hù)。
權(quán)利要求
1.一種計(jì)算機(jī)系統(tǒng)(400A-B),包括一處理器(404),可配置用來(lái)執(zhí)行安全例程和不安全例程;以及硬件,其連接以執(zhí)行與該不安全例程相關(guān)的請(qǐng)求的第一次評(píng)估,其中該硬件進(jìn)一步配置以提供一請(qǐng)求的通知給該安全例程;其中該安全例程配置以執(zhí)行請(qǐng)求的第二次評(píng)估,以及其中該安全例程進(jìn)一步配置以拒絕該請(qǐng)求所請(qǐng)求的響應(yīng)。
2.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中該安全例程包括配置用來(lái)執(zhí)行該請(qǐng)求的第二次評(píng)估的軟件安全異常處理程序(1210)。
3.如權(quán)利要求2所述的計(jì)算機(jī)系統(tǒng),其中若該請(qǐng)求遞送該第二次評(píng)估,則該軟件安全異常處理程序(1210)配置以允許該請(qǐng)求的響應(yīng)。
4.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中該安全例程為安全核心(505)的組件,以及其中該安全核心(505)為操作系統(tǒng)(502)的組件。
5.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中該第一次評(píng)估為分類,而其中該第二次評(píng)估為安全風(fēng)險(xiǎn)評(píng)估。
6.如權(quán)利要求5所述的計(jì)算機(jī)系統(tǒng),其中該分類包括比較該請(qǐng)求與多個(gè)包括具有最小安全風(fēng)險(xiǎn)的類目及具有潛在的高安全風(fēng)險(xiǎn)的類目的類目,及其中若該請(qǐng)求是在其中一個(gè)具有潛在的高安全風(fēng)險(xiǎn)的類目,則該硬件通知該請(qǐng)求的安全例程。
7.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中該硬件包括儲(chǔ)存了至少一個(gè)安全執(zhí)行模式位(609)的安全執(zhí)行模式寄存器(610),儲(chǔ)存了輸入/輸出保護(hù)位圖(2200)與安全屬性數(shù)據(jù)結(jié)構(gòu)的內(nèi)存(406),以及其中該安全例程包括微碼(650)和有限狀態(tài)機(jī)的至少其中一個(gè)。
8.一種內(nèi)存管理方法,包括執(zhí)行不安全例程;接收從該不安全例程來(lái)的請(qǐng)求;執(zhí)行在硬件中該請(qǐng)求的第一次評(píng)估;以及執(zhí)行在軟件中的安全例程中該請(qǐng)求的第二次評(píng)估。
9.如權(quán)利要求8所述的方法,其中執(zhí)行在硬件中該請(qǐng)求的第一次評(píng)估包括執(zhí)行在硬件中該請(qǐng)求的分類;以及其中執(zhí)行在軟件中該安全例程中該請(qǐng)求的第二次評(píng)估包括執(zhí)行在軟件中該安全例程中該請(qǐng)求的安全風(fēng)險(xiǎn)評(píng)估。
10.如權(quán)利要求9所述的方法,其中執(zhí)行在硬件中該請(qǐng)求的該分類包括比較該請(qǐng)求與多個(gè)包括具有低安全風(fēng)險(xiǎn)的類目,和具有潛在的安全風(fēng)險(xiǎn)的類目的類目;及若該請(qǐng)求是在其中一個(gè)具有潛在的安全風(fēng)險(xiǎn)的類目,則該硬件遞送該請(qǐng)求至該安全例程。
全文摘要
本發(fā)明提供一種在安全計(jì)算環(huán)境中執(zhí)行內(nèi)存管理的方法和系統(tǒng)(400A-B)。該方法包括執(zhí)行一不安全例程并接收來(lái)自該不安全例程的請(qǐng)求。該方法還包括在硬件中執(zhí)行該請(qǐng)求的第一次評(píng)估,和在軟件中的安全例程中執(zhí)行該請(qǐng)求的第二次評(píng)估。計(jì)算機(jī)系統(tǒng)(400A-B)包括可配置用來(lái)執(zhí)行安全例程和不安全例程的處理器(404)。該計(jì)算機(jī)系統(tǒng)(400A-B)還包括連接以執(zhí)行與該不安全例程相關(guān)的請(qǐng)求的第一次評(píng)估的硬件。該硬件進(jìn)一步配置提供該請(qǐng)求的通知至該安全例程。該安全例程配置可執(zhí)行該請(qǐng)求的第二次評(píng)估。該安全例程進(jìn)一步配置以拒絕該請(qǐng)求所請(qǐng)求的響應(yīng)。
文檔編號(hào)G06F21/00GK1630849SQ02829057
公開(kāi)日2005年6月22日 申請(qǐng)日期2002年12月17日 優(yōu)先權(quán)日2002年5月31日
發(fā)明者R·W·施密特, B·C·巴恩斯, G·S·斯特龍金, D·S·克里斯蒂 申請(qǐng)人:先進(jìn)微裝置公司