專利名稱:在安全模式和非安全模式間切換的處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理系統(tǒng)。更具體地說(shuō),本發(fā)明涉及數(shù)據(jù)處理系統(tǒng)中的安全和非安全處理模式間切換的控制。
背景技術(shù):
數(shù)據(jù)處理裝置通常包括用于運(yùn)行加載在數(shù)據(jù)處理裝置上的應(yīng)用程序的處理器。該處理器將在操作系統(tǒng)的控制下操作。運(yùn)行任何特定的應(yīng)用程序所需的數(shù)據(jù)通常存儲(chǔ)在數(shù)據(jù)處理裝置的存儲(chǔ)器中。將意識(shí)到數(shù)據(jù)可以由包含在應(yīng)用程序內(nèi)的指令和/或在處理器上執(zhí)行那些指令期間使用的實(shí)際數(shù)據(jù)值組成。
許多例子當(dāng)中,由至少一個(gè)應(yīng)用程序使用的數(shù)據(jù)是不應(yīng)當(dāng)被處理器上運(yùn)行的其他應(yīng)用程序訪問(wèn)的敏感數(shù)據(jù)。其中一個(gè)例子諸如數(shù)據(jù)處理裝置是智能卡,以及一個(gè)應(yīng)用程序是使用敏感數(shù)據(jù),諸如例如安全密鑰(secure key)來(lái)執(zhí)行確認(rèn)、驗(yàn)證、解密等等的安全應(yīng)用程序。在這些情況下,確保那些敏感數(shù)據(jù)安全以便不能由可以加載到數(shù)據(jù)處理裝置上的其他應(yīng)用程序,例如為試圖訪問(wèn)那個(gè)安全數(shù)據(jù)的目的,而加載在數(shù)據(jù)處理裝置上的黑客應(yīng)用程序訪問(wèn)是非常重要的。
在已知的系統(tǒng)中,確保操作系統(tǒng)提供足夠的安全性以確保一個(gè)應(yīng)用程序的數(shù)據(jù)不能由在操作系統(tǒng)的控制下運(yùn)行的其他應(yīng)用程序訪問(wèn),已然成為操作系統(tǒng)開(kāi)發(fā)員的典型任務(wù)。然而,隨著系統(tǒng)變得更復(fù)雜,通常的趨勢(shì)是使操作系統(tǒng)變得更大以及更復(fù)雜,而在這樣的情況下,確保操作系統(tǒng)本身內(nèi)的足夠的安全性,變得日益困難。
在美國(guó)專利申請(qǐng)US2002/0007456A1和美國(guó)專利US6,282,657和US6,292,874B中公開(kāi)了試圖提供敏感數(shù)據(jù)的安全存儲(chǔ)和提供防惡意程序代碼的保護(hù)的系統(tǒng)的例子。
因此,將期望提供用于試圖保持包含在數(shù)據(jù)處理裝置的存儲(chǔ)器內(nèi)的那些安全數(shù)據(jù)的安全性的改進(jìn)技術(shù)。
發(fā)明內(nèi)容
從一個(gè)方面可以看出,本發(fā)明提供用于處理數(shù)據(jù)的裝置,所述裝置包括處理器,可在多種模式和多個(gè)域中操作,所述多個(gè)域包括安全域或非安全域,所述多種模式包括為所述安全域中的模式的至少一個(gè)安全模式;為所述非安全域中的模式的至少一個(gè)非安全模式;以及監(jiān)視模式,其特征在于,當(dāng)所述處理器正在執(zhí)行安全模式中的程序時(shí),所述程序訪問(wèn)當(dāng)所述處理器正在非安全模式中操作時(shí)不能訪問(wèn)的安全數(shù)據(jù);以及經(jīng)所述監(jiān)視模式,發(fā)生所述安全模式和所述非安全模式間的切換,所述處理器至少部分在所述監(jiān)視模式中操作來(lái)執(zhí)行監(jiān)視程序以便管理所述安全模式和所述非安全模式間的切換。
本發(fā)明意識(shí)到控制可在安全和非安全模式中操作的系統(tǒng)的安全性中的關(guān)鍵方面在于如何控制那些安全和非安全模式間的切換。特別地,執(zhí)行這種切換的方法越靈活,那么,安全性中的潛在的易受攻擊性越大。本發(fā)明通過(guò)提供任何安全模式和非安全模式間的所有切換必須經(jīng)監(jiān)視模式進(jìn)行的系統(tǒng)來(lái)解決這一問(wèn)題。完全可以在監(jiān)視模式中執(zhí)行切換或者可以使用從監(jiān)視模式切換到一些安全模式(例如安全特許模式)來(lái)執(zhí)行與切換有關(guān)的一些任務(wù),諸如上下文保存/恢復(fù)。因此,假如監(jiān)視模式或安全核心的安全性不是被直接或間接破壞的,則不可能進(jìn)行非安全模式和安全模式間的未授權(quán)切換。該結(jié)構(gòu)還允許監(jiān)視模式設(shè)計(jì)的相對(duì)簡(jiǎn)單,這是因?yàn)槠湄?zé)任被限定在支持安全域和非安全域間的切換所需的范圍內(nèi)。通常,監(jiān)視模式越簡(jiǎn)單,越不易破壞安全性。監(jiān)視程序(內(nèi)核)至少部分在監(jiān)視模式中操作以便控制安全和非安全域間的切換-一部分監(jiān)視核心可在安全特許模式而不是監(jiān)視模式中操作。
作為安全域和非安全域間的切換的管理的一部分,由監(jiān)視模式提供的操作的例子是監(jiān)視程序(至少部分在監(jiān)視模式中運(yùn)行,但是要求切換到安全特許模式以便執(zhí)行上下文保存/恢復(fù)或其他操作)可用來(lái)刷新在安全域和非安全域間共享的處理器的寄存器組的至少一部分。這防止了存在于在安全域的寄存器中的任何數(shù)據(jù),當(dāng)切換到非安全域時(shí),仍然駐留在那些寄存器中,從而不利地使數(shù)據(jù)變成可在非安全域中訪問(wèn)。
作為另一可能的實(shí)施例,可以提供單獨(dú)的非安全和安全寄存器組。該方法在降低安全域和非安全域間的切換所需的時(shí)間方面具有某些優(yōu)點(diǎn),但它還與另外的硬件需求不利有關(guān),同時(shí)還使它不利于將數(shù)據(jù)從非安全域傳送到安全域。
可以用各種不同方式啟動(dòng)安全域和非安全域間的切換,但這些將期望共享發(fā)送到在用于提供服務(wù)的監(jiān)視模式中操作的監(jiān)視程序內(nèi)的一個(gè)或多個(gè)固定位置的特征。將進(jìn)入監(jiān)視程序的可能進(jìn)入點(diǎn)控制到較少數(shù)目的固定點(diǎn)內(nèi),增加了安全性。
相反,在安全域中,使用以方便上下文切換的方式,應(yīng)用于切換到安全用戶模式的正常機(jī)制,安全特許模式可以切換到監(jiān)視模式,以及允許有利地簡(jiǎn)化在監(jiān)視模式中運(yùn)行的軟件。安全特許模式具有與監(jiān)視模式類似的安全狀態(tài)。
在本發(fā)明的一個(gè)優(yōu)選形式中,切換采用調(diào)用監(jiān)視程序中的固定點(diǎn)的形式。
在本發(fā)明的另一優(yōu)選形式中,除在監(jiān)視模式中時(shí),通過(guò)程序的任何嘗試觸發(fā)切換以便在安全域和非安全域間改變系統(tǒng),諸如通過(guò)寫(xiě)入存儲(chǔ)安全狀態(tài)變量或程序狀態(tài)變量。這些嘗試可以通過(guò)硬件來(lái)觸發(fā)并用來(lái)觸發(fā)調(diào)用監(jiān)視程序中的固定點(diǎn)。
當(dāng)從非安全模式啟動(dòng)進(jìn)入監(jiān)視模式時(shí),那么可以配置處理器存儲(chǔ)程序計(jì)數(shù)值,當(dāng)返回到非安全模式時(shí),將恢復(fù)該程序計(jì)數(shù)器值,以便在中斷點(diǎn)恢復(fù)執(zhí)行處理。對(duì)當(dāng)返回到非安全模式時(shí)需要恢復(fù)的一個(gè)或多個(gè)處理器狀態(tài),執(zhí)行類似的狀態(tài)存儲(chǔ)。
可能引發(fā)的一個(gè)問(wèn)題是當(dāng)處于安全模式中的處理器在要求切換到非安全模式以便能適當(dāng)?shù)靥幚懋惓r(shí),會(huì)產(chǎn)生異常。在這種情況下,通常,安全模式和非安全模式間的切換是經(jīng)監(jiān)視模式的,以及監(jiān)視模式負(fù)責(zé)在適當(dāng)點(diǎn)重啟安全處理,而不是依賴于非安全模式來(lái)恢復(fù)安全模式處理,因?yàn)檫@能允許非安全模式獲得有關(guān)當(dāng)系統(tǒng)處于安全模式中時(shí),在發(fā)生異常的點(diǎn)的例如程序計(jì)數(shù)器值或處理器狀態(tài)寄存器值的安全區(qū)域的一些知識(shí)。
提供安全域和非安全域間的清楚劃分的一種方法是將安全狀態(tài)標(biāo)記與系統(tǒng)關(guān)聯(lián)。通過(guò)提供安全狀態(tài)標(biāo)記僅在監(jiān)視模式中可寫(xiě)入,可以將安全狀態(tài)標(biāo)記的控制集中在監(jiān)視模式中。
可以使用本發(fā)明的系統(tǒng)的優(yōu)選方法是提供一種非安全操作系統(tǒng),當(dāng)在非安全模式先操作時(shí)控制處理器,以及提供一種安全操作系統(tǒng)((在某些情況下,可以是刪節(jié)的安全核心,)當(dāng)在安全模式下操作時(shí),控制處理器。監(jiān)視程序由部分安全操作系統(tǒng)組成是比較有利的。
本發(fā)明的優(yōu)選實(shí)施例意識(shí)到系統(tǒng)的安全性的潛在的弱點(diǎn)可以通過(guò)正在控制安全域和非安全域間的切換時(shí)的監(jiān)視程序的中斷產(chǎn)生。因此,在本發(fā)明的優(yōu)選實(shí)施例中,當(dāng)處于監(jiān)視模式時(shí),禁止能觸發(fā)異常處理(正常處理流程的中斷)的異常條件的至少一個(gè)。
為改進(jìn)經(jīng)監(jiān)視模式,進(jìn)行安全域間的切換的速度,當(dāng)太考慮成本/利潤(rùn)時(shí),本發(fā)明的一些實(shí)施例提供專用寄存器(影像寄存器),當(dāng)進(jìn)入監(jiān)視模式時(shí),替代處理器的寄存器組內(nèi)的相應(yīng)的通用寄存器。因此,這些專用寄存器可以直接由監(jiān)視程序使用,從而允許監(jiān)視程序在執(zhí)行其自己的操作前,避免對(duì)現(xiàn)有的寄存器內(nèi)容的保存,因此,降低了在監(jiān)視模式中實(shí)現(xiàn)切換所花的時(shí)間。當(dāng)在監(jiān)視模式中禁止異常時(shí),降低在監(jiān)視模式中所花的時(shí)間很顯著。
整體上,在系統(tǒng)的上下文中處理異常的方法與異常,諸如中斷一樣重要,總的來(lái)說(shuō),對(duì)系統(tǒng)的安全性存在潛在的弱點(diǎn)。為允許系統(tǒng)響應(yīng)適合于特定環(huán)境的異常的方式,本發(fā)明的優(yōu)選實(shí)施例提供中斷屏蔽寄存器,存儲(chǔ)一個(gè)或多個(gè)參數(shù),用于指定哪些異常應(yīng)當(dāng)由正在模式中執(zhí)行的異常處理程序處理以及哪些異常應(yīng)當(dāng)由當(dāng)異常發(fā)生時(shí),正在當(dāng)前域中的模式中執(zhí)行的異常處理程序處理。因此,根據(jù)異常產(chǎn)生的類型,可以使系統(tǒng)切換到安全域以便處理該異?;蚩梢员3之?dāng)前的、可能的非安全域中。監(jiān)視模式有能力切換安全域以及可以視為安全域,因?yàn)榭稍谠撃J街性O(shè)置安全狀態(tài)標(biāo)記以及可以將系統(tǒng)的整個(gè)安全性視為駐留在監(jiān)視模式的安全性。在一些方式中,系統(tǒng)的安全狀態(tài)可以視為安全狀態(tài)標(biāo)記和系統(tǒng)是否在監(jiān)視模式中的OR。可以將某些異常配置成迫使在監(jiān)視模式中處理。另外,可以將異常留給在不管在系統(tǒng)的安全或非安全模式中操作的異常處理程序中處理。
本發(fā)明的優(yōu)選實(shí)施例提供專用監(jiān)視模式進(jìn)入指令,硬件響應(yīng)這些指令,進(jìn)入監(jiān)視模式以及開(kāi)始執(zhí)行在預(yù)定位置處的監(jiān)視程序。這些監(jiān)視模式進(jìn)入指令采用具有相關(guān)模式切換軟件中斷矢量的模式切換軟件中斷的形式。配置成進(jìn)入監(jiān)視模式的主要方式是通過(guò)使用這一指令以及配置指令的行為來(lái)使硬件以清楚和緊密定義的方式響應(yīng),諸如在固定點(diǎn)開(kāi)始執(zhí)行監(jiān)視程序特別有利。
將意識(shí)到在安全域和非安全域內(nèi),可以提供各種不同處理模式。不一定要求在兩個(gè)域中提供相同的模式。適當(dāng)?shù)哪J降睦邮潜O(jiān)督模式、系統(tǒng)模式、中止異常模式、未定義異常模式、中斷模式、快速中斷模式和用戶模式。
在優(yōu)選實(shí)施例中,處理器可以在所述安全域中的至少一種特許安全模式下操作,該安全模式不能從安全域改變到非安全域,所述具有特權(quán)的特許安全模式允從所述特許安全模式改變到所述監(jiān)視模式,而無(wú)需重新定向程序的執(zhí)行點(diǎn)。
監(jiān)視程序主要負(fù)責(zé)管理安全域和非安全域之間的來(lái)回改變。監(jiān)視程序至少部分在監(jiān)視模式中執(zhí)行。例如,監(jiān)視程序可以至少部分在監(jiān)視模式中以及部分在安全模式中執(zhí)行。安全核心在特許安全模式中執(zhí)行。通過(guò)允許特許安全模式切換到監(jiān)視模式,監(jiān)視程序的編寫(xiě)可以通過(guò)傳送到安全核心的一些函數(shù)而變得更加簡(jiǎn)單,即使可能會(huì)增加安全核心的復(fù)雜度。使監(jiān)視程序簡(jiǎn)單化而增加其安全性在于其更易于證明其安全即,僅執(zhí)行所期望做的很重要,因?yàn)樗鼨M跨安全和非安全域。然而,安全核心僅在安全域中執(zhí)行。監(jiān)視程序能通過(guò)切換到那些模式來(lái)保存安全特許模式的狀態(tài),因?yàn)樗梢噪S后切換回監(jiān)視模式。
在優(yōu)選實(shí)施例中,處理器用來(lái)改變安全標(biāo)記以便在安全域和非安全域間改變,該安全標(biāo)記為除監(jiān)視模式外不可寫(xiě)入訪問(wèn)的。將意識(shí)到安全標(biāo)記可以或不可以從監(jiān)視模式之外讀取訪問(wèn)的。
本技術(shù)允許從特許安全模式改變成監(jiān)視模式,而無(wú)需重定向程序執(zhí)行的同時(shí),優(yōu)選實(shí)施例還響應(yīng)軟件中斷指令來(lái)執(zhí)行切換到監(jiān)視模式,但在這種情況下,需要由與軟件中斷指令相關(guān)的中斷矢量指定的程序執(zhí)行點(diǎn)的重定向。該軟件中斷機(jī)制與從特許安全模式提供的相比,靈活較低,因?yàn)橥ㄟ^(guò)軟件中斷機(jī)制,使程序流通過(guò)中斷機(jī)制。能從安全或非安全特許模式調(diào)用軟件中斷機(jī)制,同時(shí)降低安全性風(fēng)險(xiǎn),因?yàn)槟芨芮械乜刂浦袛嗍聞?wù)的代碼。
可能安全域僅包括安全特許模式的同時(shí),優(yōu)選實(shí)施例通常將包括至少一個(gè)特許非安全模式,不重定向程序執(zhí)行點(diǎn)就不能執(zhí)行從該特許非安全模式到監(jiān)視模式的切換。安全域內(nèi)的模式的多樣性便于正常結(jié)構(gòu)和組織在安全域內(nèi)執(zhí)行的操作系統(tǒng)。
在本發(fā)明的優(yōu)選實(shí)施例中,一旦復(fù)位,處理器進(jìn)入特許安全模式。復(fù)位到特許安全模式具有多種不同優(yōu)點(diǎn),諸如允許更易于與非安全環(huán)境中的非安全識(shí)別操作系統(tǒng)的向后兼容性。通過(guò)復(fù)位到特許安全模式,這種安全不敏感系統(tǒng)能保留在安全域中,即使它不要求安全操作。當(dāng)系統(tǒng)意識(shí)到安全性,在特許安全模式中引導(dǎo)還允許大量代碼的可能性以及支持由允許在監(jiān)視模式內(nèi)執(zhí)行監(jiān)視模式的特許安全模式內(nèi)的安全核心提供的引導(dǎo)操作以便以簡(jiǎn)單的形式保存,從而能更容易確保其安全性。
為允許安全模式和特許安全模式間的適當(dāng)?shù)韧?,?yōu)選實(shí)施例是可在監(jiān)視模式中訪問(wèn)的存儲(chǔ)區(qū)也可在特許安全模式中訪問(wèn)。
從本發(fā)明的另一方面可以看出,提供處理數(shù)據(jù)的方法,所述方法包括步驟通過(guò)可在多種模式和多個(gè)域中操作的處理器執(zhí)行程序,所述多個(gè)域包括安全域或非安全域,所述多種模式包括為所述安全域中的模式的至少一個(gè)安全模式;為所述非安全域中的模式的至少一個(gè)非安全模式;以及監(jiān)視模式,其特征在于,當(dāng)所述處理器正在執(zhí)行安全模式中的程序時(shí),所述程序訪問(wèn)當(dāng)所述處理器正在非安全模式中操作時(shí)不能訪問(wèn)的安全數(shù)據(jù);以及經(jīng)所述監(jiān)視模式,進(jìn)行所述安全模式和所述非安全模式間的切換,所述處理器執(zhí)行至少部分在所述監(jiān)視模式的監(jiān)視程序來(lái)管理所述安全模式和所述非安全模式間的切換。
參考如在附圖中所述的優(yōu)選實(shí)施例,僅通過(guò)舉例來(lái)進(jìn)一步描述本發(fā)明,其中圖1是示意性地示例說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例的數(shù)據(jù)處理裝置的框圖;圖2示意性地示例說(shuō)明在非安全域和安全域(secure domain)中操作的不同程序;
圖3示意性地示例說(shuō)明與不同安全域有關(guān)的處理模式矩陣;圖4和5示意性地示例說(shuō)明處理模式和安全域間的不同關(guān)系;圖6示例說(shuō)明根據(jù)處理模式,處理器的寄存器組的一個(gè)程序員模型;圖7示例說(shuō)明提供用于安全域和非安全域的單獨(dú)的寄存器組的例子;圖8示意性地示例說(shuō)明具有經(jīng)單獨(dú)的監(jiān)視模式進(jìn)行的安全域間的切換的多個(gè)處理模式;圖9示意性地示例說(shuō)明使用模式切換軟件中斷指令,用于安全域切換的情形;圖10示意性地示例說(shuō)明如何由系統(tǒng)執(zhí)行非安全中斷請(qǐng)求和安全中斷請(qǐng)求的一個(gè)例子;圖11A和11B示意性地示例說(shuō)明根據(jù)圖10,非安全中斷請(qǐng)求處理的例子和安全中斷請(qǐng)求處理的例子;圖12示例說(shuō)明與圖10所示相比,用于處理非安全中斷請(qǐng)求信號(hào)和安全中斷請(qǐng)求信號(hào)的另一方案;圖13A和13B示例說(shuō)明根據(jù)圖12所示的方案,用于處理非安全中斷請(qǐng)求和安全中斷請(qǐng)求的示例情況;圖14是矢量中斷表的例子;圖15示意性地示例說(shuō)明與不同安全域有關(guān)的多個(gè)矢量中斷表;圖16示意性地示例說(shuō)明異??刂萍拇嫫鳎粓D17是示例說(shuō)明以修改安全域設(shè)置的方式,試圖修改處理狀態(tài)寄存器的指令如何生成反過(guò)來(lái)觸發(fā)進(jìn)入監(jiān)視模式和運(yùn)行監(jiān)視程序的單獨(dú)的模式改變異常的流程圖;圖18示意性地表示在多個(gè)模式中操作的處理器的控制的線程,其中中斷監(jiān)視模式中的任務(wù);圖19示意性地表示在多個(gè)模式中操作的處理器的控制的不同線程;圖20示意性地表示在多個(gè)模式中操作的處理器的控制的另一線程,其中在監(jiān)視模式中允許中斷;圖21至23示例說(shuō)明根據(jù)另一示例性實(shí)施例,用于在安全和非安全域間切換的不同處理模式和情形的視圖;
圖24示意性地示例說(shuō)明將安全處理選項(xiàng)增加到傳統(tǒng)的RAM內(nèi)核上的原理;圖25示意性地示例說(shuō)明具有安全和非安全域和復(fù)位的處理器;圖26示意性地示例說(shuō)明使用軟件偽中斷,將處理請(qǐng)求遞送到暫停的操作系統(tǒng);圖27示意性地示例說(shuō)明經(jīng)軟件偽中斷,將處理請(qǐng)求遞送到暫停的操作系統(tǒng)的另一例子;圖28是示意性地示例說(shuō)明在接收在圖26和27中所產(chǎn)生的類型的軟件偽中斷后執(zhí)行的處理的流程圖;圖29和30示意性地示例說(shuō)明在安全操作系統(tǒng)跟蹤由非安全操作系統(tǒng)執(zhí)行的可能任務(wù)切換后的任務(wù);圖31是示意性地示例說(shuō)明在接收?qǐng)D29和30的安全操作系統(tǒng)處的呼叫時(shí)執(zhí)行的處理的流程;圖32是示意性地示例說(shuō)明在具有多個(gè)操作系統(tǒng)的系統(tǒng)中出現(xiàn)的中斷優(yōu)先級(jí)反轉(zhuǎn)的問(wèn)題的圖,其中可以由不同操作系統(tǒng)處理不同中斷;圖33是示意性地示例說(shuō)明使用插樁中斷)處理器來(lái)避免在圖32中所示的問(wèn)題的圖;圖34示意性地示例說(shuō)明如何處理不同類型和優(yōu)先級(jí)的中斷,取決于它們是否能夠由采用不同操作系統(tǒng)來(lái)實(shí)現(xiàn)的中斷進(jìn)行中斷;圖35示例說(shuō)明當(dāng)處理器在監(jiān)視模式中操作時(shí),如何用監(jiān)視程序模式特定處理器結(jié)構(gòu)數(shù)據(jù)來(lái)覆蓋處理器結(jié)構(gòu)數(shù)據(jù);圖36是示例說(shuō)明根據(jù)本發(fā)明的一個(gè)實(shí)施例,當(dāng)在安全域和非安全域間轉(zhuǎn)變時(shí),如何切換處理器結(jié)構(gòu)數(shù)據(jù)的流程圖;圖37是示例說(shuō)明控制訪問(wèn)存儲(chǔ)器的用在本發(fā)明的一個(gè)實(shí)施例中的存儲(chǔ)器管理邏輯的圖;圖38是示例說(shuō)明用來(lái)控制存儲(chǔ)器的訪問(wèn)的本發(fā)明的第二實(shí)施例的存儲(chǔ)器管理邏輯的框圖;圖39是示例說(shuō)明處理指定虛擬地址的存儲(chǔ)器訪問(wèn)請(qǐng)求的存儲(chǔ)器管理邏輯內(nèi),在本發(fā)明的一個(gè)實(shí)施例中執(zhí)行的過(guò)程的流程圖;圖40是示例說(shuō)明在處理指定物理地址的存儲(chǔ)器訪問(wèn)請(qǐng)求的存儲(chǔ)器管理邏輯內(nèi),在本發(fā)明的一個(gè)實(shí)施例中執(zhí)行的過(guò)程的流程圖;圖41示意性地示例說(shuō)明當(dāng)發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求的設(shè)備正在非安全模式中操作時(shí),優(yōu)選實(shí)施例的分區(qū)校驗(yàn)器(partition checker)如何用來(lái)防止訪問(wèn)物理地址;圖42是示例說(shuō)明在本發(fā)明的優(yōu)選實(shí)施例中,非安全頁(yè)表和安全頁(yè)表的用法的圖;圖43是示例說(shuō)明用在優(yōu)選實(shí)施例的主翻譯后援緩沖器(TLB)內(nèi)的兩種形式的標(biāo)記的圖;圖44示例說(shuō)明在本發(fā)明的一個(gè)實(shí)施例中,在引導(dǎo)級(jí)后如何分區(qū)存儲(chǔ)器;圖45示例說(shuō)明根據(jù)本發(fā)明的實(shí)施例,根據(jù)引導(dǎo)分區(qū)的性能,通過(guò)存儲(chǔ)器管理單元映射非安全存儲(chǔ)器;圖46示例說(shuō)明根據(jù)本發(fā)明的實(shí)施例,如何將一部分存儲(chǔ)器的權(quán)利修改成允許安全應(yīng)用程序與非安全應(yīng)用程序共享存儲(chǔ)器;圖47示例說(shuō)明根據(jù)本發(fā)明的一個(gè)實(shí)施例,如何將設(shè)備連接到數(shù)據(jù)處理裝置的外部總線;圖48是示例說(shuō)明根據(jù)本發(fā)明的第二實(shí)施例,如何將設(shè)備耦合到外部總線的框圖;圖49示例說(shuō)明在使用單個(gè)頁(yè)表集的實(shí)施例中,物理存儲(chǔ)器的配置;圖50A示例說(shuō)明使用兩個(gè)MMUs來(lái)經(jīng)中間地址執(zhí)行從虛擬地址到物理地址的轉(zhuǎn)換的配置;圖50B通過(guò)舉例,示例說(shuō)明使用兩個(gè)MMUs來(lái)經(jīng)中間地址,執(zhí)行從虛擬地址到物理地址的轉(zhuǎn)換的另一配置;圖51通過(guò)舉例,示例說(shuō)明用于安全域和非安全域的物理地址空間和中間地址空間的對(duì)應(yīng)關(guān)系;圖52示例說(shuō)明通過(guò)操作與第二MMU有關(guān)的頁(yè)表,在安全和非安全域間交換存儲(chǔ)區(qū);圖53是示例說(shuō)明使用單個(gè)MMU的實(shí)現(xiàn)的實(shí)施例,以及其中,主TLB中的差錯(cuò)將導(dǎo)致被調(diào)用來(lái)確定虛擬到物理地址轉(zhuǎn)換的異常;圖54是示例說(shuō)明由處理器內(nèi)核執(zhí)行以便對(duì)在圖53的MMU的主TLB中出現(xiàn)未命中時(shí)發(fā)出的異常起使用的過(guò)程的流程圖;圖55是示例說(shuō)明在一個(gè)實(shí)施例的數(shù)據(jù)處理裝置內(nèi)提供的元件的框圖,其中高速緩存具有有關(guān)存儲(chǔ)在單個(gè)高速緩存線中的數(shù)據(jù)是安全數(shù)據(jù)還是非安全數(shù)據(jù)的信息;圖56示例說(shuō)明在圖55中所示的存儲(chǔ)器管理單元的結(jié)構(gòu);圖57是示例說(shuō)明在圖55的數(shù)據(jù)處理裝置內(nèi)執(zhí)行的、處理非安全存儲(chǔ)器訪問(wèn)請(qǐng)求的處理的流程圖;圖58是示例說(shuō)明在圖55的數(shù)據(jù)處理裝置內(nèi)執(zhí)行的以便處理安全存儲(chǔ)器訪問(wèn)請(qǐng)求的處理的流程圖;圖59示意性地表示用于不同模式在處理器上運(yùn)行的程序的監(jiān)視功能的可能粒度;圖60表示啟動(dòng)不同監(jiān)視功能的可能方式;圖61表示用于控制不同監(jiān)視功能的可用性的控制值的表;圖62表示正沿觸發(fā)的觸發(fā)器視圖;圖63表示掃描鏈單元(scan chain cell);圖64表示在掃描鏈中的多個(gè)掃描鏈單元;圖65表示調(diào)試TAP控制器;圖66A表示具有JADI輸入的調(diào)試TAP控制器;圖66B表示具有旁通寄存器(bypass register)的掃描鏈單元;圖67示意性地示例說(shuō)明包括內(nèi)核、掃描鏈和調(diào)試狀態(tài)和控制寄存器的處理器;圖68示意性地示例說(shuō)明控制調(diào)試或跟蹤初始化的因素;圖69A和69B表示調(diào)試粒度的概述;圖70示意性地示例說(shuō)明在運(yùn)行時(shí)的調(diào)試粒度;以及圖71A和71B分別表示在安全區(qū)域中允許調(diào)試時(shí)和不允許調(diào)試時(shí)的監(jiān)視調(diào)試。
具體實(shí)施例方式
圖1是示例說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例的數(shù)據(jù)處理裝置的結(jié)構(gòu)圖。數(shù)據(jù)處理裝置包含處理器內(nèi)核10,在其內(nèi)提供用來(lái)執(zhí)行指令序列的算術(shù)邏輯單元(ALU)16。ALU16所需的數(shù)據(jù)存儲(chǔ)在寄存器組14中。內(nèi)核10具有各種監(jiān)視功能以允許俘獲表示處理器內(nèi)核的活動(dòng)性的診斷數(shù)據(jù)。例如,提供嵌入跟蹤模塊(ETM)22,用于根據(jù)定義將跟蹤的活動(dòng)性的EMT22內(nèi)的某一控制寄存器26的內(nèi)容,產(chǎn)生處理器內(nèi)核的某些活動(dòng)性的實(shí)時(shí)跟蹤。通常,將跟蹤信號(hào)輸出到跟蹤緩沖器,隨后可從跟蹤緩沖器對(duì)其進(jìn)行分析。提供矢量中斷控制器21,用于管理由各種外設(shè)(未示出)引發(fā)的多個(gè)中斷的維護(hù)。
另外,如圖1所示,內(nèi)核10內(nèi)所能提供的另一監(jiān)視功能是調(diào)試功能,數(shù)據(jù)處理裝置的外接調(diào)試應(yīng)用程序能夠經(jīng)由聯(lián)合測(cè)試訪問(wèn)組(JTAG)控制器18與內(nèi)核10通信,聯(lián)合測(cè)試訪問(wèn)組(JTAG)控制器18與一個(gè)或多個(gè)掃描鏈12耦合。能經(jīng)掃描鏈12和JTAG控制器18,將有關(guān)處理器內(nèi)核10的各個(gè)部分的狀態(tài)的信息輸出到外部調(diào)試應(yīng)用程序。使用內(nèi)置在線仿真電路(ICE)20來(lái)將識(shí)別何時(shí)啟動(dòng)和停止調(diào)試功能的條件存儲(chǔ)在寄存器24內(nèi),因此,例如,將用來(lái)存儲(chǔ)斷點(diǎn)、觀察點(diǎn)等等。
經(jīng)配置成管理由內(nèi)核10發(fā)出的訪問(wèn)數(shù)據(jù)處理裝置的存儲(chǔ)器中的單元的存儲(chǔ)器訪問(wèn)請(qǐng)求的存儲(chǔ)器管理邏輯30,將內(nèi)核10耦合到系統(tǒng)總線40。通過(guò)直接連接到系統(tǒng)總線40,例如圖1中所示的緊耦合存儲(chǔ)器(TCM)36和高速緩存38,可以嵌入存儲(chǔ)器的某些部分。也可以提供另外的設(shè)備,用于訪問(wèn)這些存儲(chǔ)器,例如直接存儲(chǔ)器訪問(wèn)(DMA)控制器32。通常,將提供各種控制寄存器34,用于定義芯片的各個(gè)元件的某些控制參數(shù),這些控制寄存器在此也稱為協(xié)處理器(CP)15寄存器。
經(jīng)外部總線接口42,包含內(nèi)核10的芯片也可以耦合到外部總線70(例如根據(jù)由ARM Limited開(kāi)發(fā)的“高級(jí)微控制器總線體系結(jié)構(gòu)”(AMBA)規(guī)格操作的總線),以及也可以將各種設(shè)備連接到外部總線70。這些設(shè)備可以包括主設(shè)備,諸如數(shù)字信號(hào)處理器(DSP)50,或直接存儲(chǔ)器訪問(wèn)(DMA)控制器52,以及各種從設(shè)備,諸如引導(dǎo)ROM44、屏幕驅(qū)動(dòng)器46、外部存儲(chǔ)器56、輸入/輸出(I/O)接口60或鍵存儲(chǔ)單元64。在圖1中所示的這些各種從設(shè)備也均能視為數(shù)據(jù)處理裝置的整個(gè)存儲(chǔ)器的包含部件。例如,引導(dǎo)ROM44將形成數(shù)據(jù)處理裝置的可訪問(wèn)存儲(chǔ)器的一部分,如外部存儲(chǔ)器56。另外,諸如屏幕驅(qū)動(dòng)器46、I/O接口60和鍵存儲(chǔ)單元64的設(shè)備均分別包括內(nèi)部存儲(chǔ)元件,諸如寄存器或緩沖器48、62、66,可單獨(dú)地尋址為數(shù)據(jù)處理裝置的整個(gè)存儲(chǔ)器的一部分。如稍后更詳細(xì)地論述,存儲(chǔ)器的一部分,例如外部存儲(chǔ)器56的一部分,將用來(lái)存儲(chǔ)定義與存儲(chǔ)器訪問(wèn)控制有關(guān)的信息的一個(gè)或多個(gè)頁(yè)表58。
如本區(qū)域的技術(shù)人員將意識(shí)到的,外部總線70通常將具有判優(yōu)器和解碼器邏輯54、使用判優(yōu)器在由多個(gè)主設(shè)備,例如內(nèi)核10、DMA32、DSP50、DMA52等等發(fā)出的多個(gè)存儲(chǔ)器訪問(wèn)請(qǐng)求間判優(yōu),而使用解碼器來(lái)確定外部總線上的哪個(gè)從設(shè)備將處理任何特定的存儲(chǔ)器訪問(wèn)請(qǐng)求。
盡管在一些實(shí)施例中,可以在包含內(nèi)核10的芯片外提供外部總線,在其他實(shí)施例中,也可以在具有內(nèi)核10的芯片上提供外部總線。其優(yōu)點(diǎn)在于與外部總線為芯片外時(shí)相比,外部總線上的安全數(shù)據(jù)更容易保密。當(dāng)外部總線是芯片外時(shí),可以使用數(shù)據(jù)加密技術(shù)來(lái)增加安全數(shù)據(jù)的安全性。
圖2示意性地示例說(shuō)明在具有安全域和非安全域的處理系統(tǒng)上運(yùn)行的各種程序。該系統(tǒng)具有至少部分在監(jiān)視模式中執(zhí)行的監(jiān)視程序72。在該示例性實(shí)施例中,安全狀態(tài)標(biāo)記僅可在監(jiān)視模式中訪問(wèn)的寫(xiě)入,以及可以通過(guò)監(jiān)視程序72寫(xiě)入。監(jiān)視程序72負(fù)責(zé)管理安全域和非安全域間的來(lái)回改變。從核心外的觀點(diǎn)看,監(jiān)視程序模式總是安全以及監(jiān)視程序位于安全存儲(chǔ)器中。
在非安全域內(nèi),提供非安全操作系統(tǒng)74和與非安全操作系統(tǒng)74協(xié)同執(zhí)行的多個(gè)非安全應(yīng)用程序76、78。在安全域中,提供安全核心程序80。安全核心程序80能視為形成安全操作系統(tǒng)。通常,這些安全核心程序80將設(shè)計(jì)成僅提供對(duì)必須在安全域中提供的處理活動(dòng)性很關(guān)鍵的那些功能,以便安全核心80能盡可能小和簡(jiǎn)單,因?yàn)檫@將使其更趨安全。示出了結(jié)合安全核心80執(zhí)行的多個(gè)安全應(yīng)用程序82、84。
圖3示例說(shuō)明與不同安全域有關(guān)的處理模式的矩陣。在該示例性例子中,相對(duì)于安全域,處理模式是對(duì)稱的,因此,模式1和模式2以安全和非安全形式存在。
監(jiān)視模式在系統(tǒng)中具有最高安全訪問(wèn)級(jí),以及在該示例性實(shí)施例中,是有權(quán)在任一方向中,在非安全域和安全域間切換系統(tǒng)的唯一模式。因此,經(jīng)切換,發(fā)生到監(jiān)視模式的所有域切換以及在監(jiān)視模式內(nèi)執(zhí)行監(jiān)視程序72。
圖4示意性地示例說(shuō)明另一組非安全域處理模式1、2、3和4和安全域處理模式a、b和c。與圖3的對(duì)稱排列相反,圖4表示一些處理模式可能不存在于安全域的一個(gè)或另一個(gè)中。監(jiān)視模式86同樣示例說(shuō)明為橫跨于非安全域和安全域。監(jiān)視模式86能視為安全處理模式,因?yàn)樵谠撃J街锌梢愿淖儼踩珷顟B(tài)標(biāo)記以及監(jiān)視模式中的監(jiān)視程序72具有自己設(shè)置安全狀態(tài)標(biāo)記的能力,總的來(lái)說(shuō),有效地提供系統(tǒng)內(nèi)最大安全級(jí)。
圖5示意性地示例說(shuō)明關(guān)于安全域的處理模式的另一配置。在該配置中,識(shí)別安全和非安全域以及另外的域。該另外的域可以是以不需要與所示的安全域或非安全域交互作用的方式,獨(dú)立于系統(tǒng)的其他部件,這樣使得其發(fā)射與所屬的這些部件無(wú)關(guān)。
如將意識(shí)到的,處理系統(tǒng),諸如微型處理器通常具有寄存器組88,其中,可以存儲(chǔ)操作數(shù)值。圖6示例說(shuō)明在某些處理模式中,具有為某些寄存器數(shù)提供的專用寄存器的示例性寄存器組的程序員模式視圖。更具體地說(shuō),圖6的例子是具有用于每個(gè)處理模式的專用保存程序狀態(tài)寄存器、專用棧指針寄存器和專用連接寄存器R14的已知ARM寄存器組(例如在ARM Limited的ARM處理器,Cambridge,England中提供的)的擴(kuò)展,但在這種情況下,通過(guò)提供監(jiān)視模式來(lái)擴(kuò)展。如圖6所示,中斷模式具有所提供的另外的專用寄存器以便在進(jìn)入快速中斷模式時(shí),不需要保存,然后從其他模式恢復(fù)寄存器內(nèi)容。用與快速中斷模式相似的方式,在另外的實(shí)施例,監(jiān)視模式可以具有另外的專用寄存器以便加速安全域轉(zhuǎn)換的處理,以及降低與這些轉(zhuǎn)換有關(guān)的系統(tǒng)等待時(shí)間。
圖7示意性地示例說(shuō)明另一實(shí)施例,其中以分別用在安全域和非安全域的兩個(gè)完全和單獨(dú)的寄存器組的形式,提供寄存器組88。這是當(dāng)切換到非安全域時(shí),能防止存儲(chǔ)在可在安全域中操作的寄存器內(nèi)的安全數(shù)據(jù)被訪問(wèn)的一種方法。然而,這樣配置妨礙數(shù)據(jù)從非安全域向安全域傳送的可能性,而通過(guò)使用在寄存器中快速和有效機(jī)制對(duì)其進(jìn)行替換,則可以允許并且是所期望的,該寄存器在非安全域和安全域中都是可以訪問(wèn)的。
具有安全寄存器組的重要優(yōu)點(diǎn)是避免在從一個(gè)區(qū)域轉(zhuǎn)換到另一個(gè)之前,刷新寄存器的內(nèi)容的需要。如果等待時(shí)間不是主要問(wèn)題,可以使用用于安全域區(qū)域,不具有重復(fù)寄存器的更簡(jiǎn)單的硬件系統(tǒng),例如圖6。監(jiān)視模式負(fù)責(zé)從一個(gè)域轉(zhuǎn)換到另一個(gè)域。通過(guò)至少部分在監(jiān)視模式中執(zhí)行的監(jiān)視程序,執(zhí)行恢復(fù)上下文、保存先前上下文以及刷新寄存器。該系統(tǒng)由此表現(xiàn)為虛擬化模式。下面將進(jìn)一步論述這種實(shí)施例。將參考例如在其上構(gòu)造在此所述的安全特性的ARM7的程序員模式。
處理器模式代替安全模式中的復(fù)制模式,相同的模式支持安全和非安全域(見(jiàn)圖8)。監(jiān)視模式知道內(nèi)核的當(dāng)前狀態(tài),不管是安全還是不安全(例如,如從所存儲(chǔ)的S位所讀出為協(xié)處理器配置寄存器)。
在圖8中,只要出現(xiàn)SMI(軟件監(jiān)視中斷指令),內(nèi)核進(jìn)入監(jiān)視模式以便適當(dāng)?shù)貜囊粋€(gè)區(qū)域切換到另一個(gè)。
參考圖9,其中從用戶模式允許SMIs1.調(diào)度程序運(yùn)行線程12.線程1需要執(zhí)行安全函數(shù)=>SMI安全調(diào)用,內(nèi)核進(jìn)入監(jiān)視模式。在硬件控制下,當(dāng)前PC和CPRS(當(dāng)前處理器狀態(tài)寄存器)存儲(chǔ)在R14_mon和SPSR_MON(為監(jiān)視模式而保存的處理器狀態(tài)寄存器)并禁止IRQ/FIQ中斷。
3.監(jiān)視程序執(zhí)行下述任務(wù)-設(shè)置S位(安全狀態(tài)標(biāo)志)-至少將R14_mon和SPSR_mon保存在堆棧中以便如果在運(yùn)行安全應(yīng)用程序時(shí),出現(xiàn)異常,不會(huì)丟失非安全上下文。
-校驗(yàn)是否運(yùn)行新線程安全線程1。機(jī)制(在一些實(shí)施例中經(jīng)線程ID表)表示線程1在安全區(qū)域中是有效的。
-重新允許IRQ/FIQ中斷。然后,在安全用戶模式中,安全應(yīng)用能開(kāi)始。
4.運(yùn)行安全線程1直到它結(jié)束為止,然后轉(zhuǎn)移(SIM)到監(jiān)視程序模式的“從安全返回”函數(shù)上(當(dāng)內(nèi)核進(jìn)入監(jiān)視模式時(shí),禁止IRQ/FIQ中斷)。
5.“從安全返回”函數(shù)執(zhí)行下述任務(wù)-表明結(jié)束安全線程1(例如,在線程ID表的情況下,從表移出線程1)。
-從棧非安全上下文恢復(fù)以及清除所需寄存器,以便只要返回到非安全域,就無(wú)法讀取安全數(shù)據(jù)。
-然后通過(guò)SUBS指令(這使程序計(jì)數(shù)器恢復(fù)到正確點(diǎn)以及更新?tīng)顟B(tài)標(biāo)志),轉(zhuǎn)移到非安全域,恢復(fù)PC(從R14_mon恢復(fù))和CPSR(從SPSR_mon)。因此,非安全域中的返回點(diǎn)是在線程1中的在前執(zhí)行的SMI后的指令。
6.線程1執(zhí)行直到結(jié)束為止,然后將控制返回給調(diào)度程序。
根據(jù)具體的實(shí)施例,在監(jiān)視程序和安全操作系統(tǒng)間可以分開(kāi)一些上述功能性。
在其他實(shí)施例中,不期望在用戶模式中出現(xiàn)允許SMIs。
安全區(qū)域進(jìn)入復(fù)位當(dāng)出現(xiàn)硬件復(fù)位時(shí),禁止MMU以及通過(guò)所設(shè)置的S位,使ARM內(nèi)核(處理器)轉(zhuǎn)移到安全監(jiān)督模式。只要終止安全引導(dǎo),可以執(zhí)行進(jìn)入監(jiān)視模式的SMI,以及如果需要的話,監(jiān)視能切換到非安全區(qū)域中的OS(非安全svc模式)。如果期望使用傳統(tǒng)的OS,這能在安全監(jiān)督模式中簡(jiǎn)單地引導(dǎo)以及忽略安全狀態(tài)。
SMI指令能從非安全域中的任何非安全模式調(diào)用該指令(模式切換軟件中斷指令)(如前所述,可以期望將SMIs限制到特許模式),但由相關(guān)矢量確定的目標(biāo)進(jìn)入點(diǎn)總是固定的并且在監(jiān)視模式內(nèi)。一直到SMI處理程序以便轉(zhuǎn)移到必須運(yùn)行的適當(dāng)?shù)陌踩瘮?shù)(例如由通過(guò)指令傳遞的操作數(shù)控制)。
使用在圖6類型寄存器組內(nèi)的寄存器組的共享寄存器,執(zhí)行將參數(shù)從非安全區(qū)域傳遞到安全區(qū)域。
當(dāng)在非安全區(qū)域中出現(xiàn)SMI時(shí),用硬件,ARM內(nèi)核可以執(zhí)行下述動(dòng)作-使SMI矢量(由于現(xiàn)在將處于監(jiān)視模式中,允許安全存儲(chǔ)器訪問(wèn))轉(zhuǎn)移到監(jiān)視模式中-將PC保存在R14_mon中以及使CPSR保存在SPSR_mon中-使用監(jiān)視程序,設(shè)置S位-在監(jiān)視模式中,開(kāi)始執(zhí)行安全異常處理程序(在多線程的情況下,恢復(fù)/保存上下文)-轉(zhuǎn)移到安全用戶模式(或另一模式,如svc模式)以便執(zhí)行適當(dāng)?shù)暮瘮?shù)-禁止IRQ和FIQ,而內(nèi)核處于監(jiān)視模式中(增加等待時(shí)間)
安全區(qū)域退出退出安全區(qū)域的兩種可能-結(jié)束安全功能以及返回到已經(jīng)調(diào)用該函數(shù)的先前非安全模式。
-通過(guò)非安全異常(例如IRQ/FIQ/SMI)中斷安全功能。
安全函數(shù)的正常結(jié)束安全函數(shù)正常終止以及需要以正好在SMI后的指令恢復(fù)非安全區(qū)域中的應(yīng)用程序。在安全用戶模式中,執(zhí)行“SMI”指令以便返回到通過(guò)對(duì)應(yīng)于“從安全區(qū)域返回”例程的適當(dāng)參數(shù),返回到監(jiān)視模式。在該階段,刷新寄存器以避免在非安全和安全區(qū)域之間的數(shù)據(jù)泄漏,然后恢復(fù)非安全上下文通用寄存器以及用在非安全區(qū)域中已經(jīng)具有的值更新非安全組寄存器。R14_mon和SPSR_mon由此獲得適當(dāng)?shù)闹?,通過(guò)執(zhí)行“MOVS PC,R14”指令來(lái)恢復(fù)SMI后的非安全應(yīng)用。
因非安全異常導(dǎo)致的安全函數(shù)退出在這種情況下,未結(jié)束安全函數(shù),以及在進(jìn)入非安全異常處理程序后,必須保存安全上下文,不管是否需要處理這些中斷。
安全中斷對(duì)安全中斷,存在幾種可能性。
根據(jù)下述,提出兩種可能的解決方案,具體取決于-是何種中斷(安全還是非安全)-當(dāng)出現(xiàn)IRQ時(shí)(不管是在安全還是非安全區(qū)域中),內(nèi)核處于何種模式。
解決方案一在該解決方案中,要求兩個(gè)不同的管腳來(lái)支持安全和非安全中斷。
當(dāng)在非安全區(qū)域中,如果-出現(xiàn)IRQ,內(nèi)核進(jìn)入IRQ模式以便處理該中斷,如同在ARM內(nèi)核中,諸如ARM7。
-出現(xiàn)SIRQ,內(nèi)核進(jìn)入監(jiān)視模式以便保存非安全上下文,然后進(jìn)入安全I(xiàn)RQ處理程序以便處理安全中斷。
當(dāng)在安全區(qū)域中,如果-出現(xiàn)SIRQ,內(nèi)核進(jìn)入安全I(xiàn)RQ處理程序。內(nèi)核不離開(kāi)安全區(qū)域-出現(xiàn)IRQ,內(nèi)核進(jìn)入監(jiān)視模式,其中保存安全上下文,然后進(jìn)入非安全I(xiàn)RQ處理程序以便處理該非安全中斷。
換句話說(shuō),當(dāng)出現(xiàn)不屬于當(dāng)前區(qū)域的中斷時(shí),內(nèi)核直接進(jìn)入監(jiān)視模式,否則停留在當(dāng)前區(qū)域(見(jiàn)圖10)。
在安全區(qū)域中出現(xiàn)IRQ見(jiàn)圖11A1.調(diào)度程序運(yùn)行線程1。
2.線程1需要執(zhí)行安全函數(shù)=>SMI安全調(diào)用,內(nèi)核進(jìn)入監(jiān)視模式。將當(dāng)前PC和CPSR保存在R14_mon和SPSR_MON中,禁用IRQ/FIQ。
3.監(jiān)視處理程序(程序)執(zhí)行下述任務(wù)-設(shè)置S位。
-至少將R14_mon和SPSR_mon保存在堆棧中(以及還可能壓入其他寄存器),以便如果在運(yùn)行安全應(yīng)用程序的同時(shí),出現(xiàn)異常,也不至丟失非安全上下文。
-校驗(yàn)運(yùn)行新線程安全線程1(經(jīng)線程ID表)機(jī)制表明線程1在安全區(qū)域中有效。
-然后在安全用戶模式中開(kāi)始安全應(yīng)用程序。然后重新允許IRQ/FIQ。
4.在運(yùn)行安全線程1時(shí)出現(xiàn)IRQ。內(nèi)核直接跳到監(jiān)視模式(特定的矢量),以及在監(jiān)視模式中,將當(dāng)前PC存儲(chǔ)在R14_mon中以及將CPSR存儲(chǔ)在SPSR_mon中,(然后禁用IRQ/FIQ)。
5.必須保存安全上下文,恢復(fù)先前的非安全上下文。監(jiān)視處理程序可以切換到IRQ模式來(lái)通過(guò)適當(dāng)?shù)闹蹈翿14_irq/SPSR_irq,然后將控制傳遞到非安全I(xiàn)RQ處理程序。
6.IRQ處理程序提供IRQ,然后將控制返回到非安全區(qū)域中的線程1。通過(guò)使SPSR_irq和R14_irq再存入CPSR和PC中,現(xiàn)在,線程1指向已經(jīng)中斷的SMI指令。
7.重新執(zhí)行SMI指令(指令與2相同)。
8.監(jiān)視處理程序注意到先前已經(jīng)中斷該線程,以及恢復(fù)線程1上下文。然后轉(zhuǎn)移到用戶模式中的安全線程1,指向已經(jīng)中斷指令上。
9.運(yùn)行安全線程1直到完成為止,然后轉(zhuǎn)移到監(jiān)視模式中的“從安全返回”函數(shù)上(專用SMI)。
10.“從安全返回”函數(shù)執(zhí)行下述任務(wù)
-表明完成安全線程1(即,在線程ID表的情況下,從表移出線程1)。
-從棧非安全上下文恢復(fù)以及清除所需寄存器,以便只要返回到非安全區(qū)域,就無(wú)法讀取安全數(shù)據(jù)。
-通過(guò)SUBS指令,使轉(zhuǎn)移回非安全區(qū)域,恢復(fù)PC(從恢復(fù)的R14_mon和CPSR(從SPSR_mon)。因此,非安全區(qū)域中的返回點(diǎn)應(yīng)當(dāng)是線程1中先前執(zhí)行的SMI后的指令。
11.執(zhí)行線程1直到結(jié)束為止,然后將控制返回調(diào)度程序。
在非安全區(qū)域中出現(xiàn)SIRQ見(jiàn)圖11B1.調(diào)度程序運(yùn)行線程12.當(dāng)安全線程1正運(yùn)行時(shí),出現(xiàn)SIRQ。內(nèi)核直接跳轉(zhuǎn)到監(jiān)視模式(特定矢量)以及在監(jiān)視模式中,將當(dāng)前PC存儲(chǔ)在R14_mon和將CPSR存儲(chǔ)在SPSR_mon中,然后禁用IRQ/FIQ。
3.必須保存非安全上下文,然后內(nèi)核進(jìn)入安全I(xiàn)RQ處理程序。
4.IRQ處理程序提供SIRQ,然后使用具有適當(dāng)參數(shù)的SMI,將控制返回到監(jiān)視模式處理程序。
5.監(jiān)視處理程序恢復(fù)非安全上下文以便SUBS指令使內(nèi)核返回到非安全區(qū)域以及恢復(fù)中斷線程1。
6.執(zhí)行線程1直到結(jié)束為止,然后使控制返回到調(diào)度程序。
圖11A的機(jī)制具有提供進(jìn)入安全區(qū)域的確定方法的優(yōu)點(diǎn)。然而,存在與中斷優(yōu)先級(jí)有關(guān)的一些問(wèn)題例如,當(dāng)SIRQ正在安全中斷處理程序中運(yùn)行時(shí),具有較高優(yōu)先級(jí)的非安全I(xiàn)RQ會(huì)發(fā)生。只要完成非安全I(xiàn)RQ,需要重建SIRQ事件以便內(nèi)核能恢復(fù)安全中斷。
解決方案二在該機(jī)制中(見(jiàn)圖12),兩個(gè)不同管腳,或僅一個(gè)可以支持安全和非安全中斷。具有兩個(gè)管腳降低中斷等待時(shí)間。
當(dāng)在非安全區(qū)域中時(shí),如果-出現(xiàn)IRQ,內(nèi)核進(jìn)入IRQ模式以便處理該中斷,如在ARM7系統(tǒng)中。
-出現(xiàn)SIRQ,內(nèi)核進(jìn)入IRQ處理程序,其中,SMI指令將使內(nèi)核轉(zhuǎn)移到監(jiān)視模式以便保存非安全上下文,然后進(jìn)入安全I(xiàn)RQ處理程序以便處理安全中斷。
當(dāng)在安全區(qū)域中,如果-出現(xiàn)SIRQ,內(nèi)核進(jìn)入安全I(xiàn)RQ處理程序。內(nèi)核不離開(kāi)安全區(qū)域-出現(xiàn)IRQ,內(nèi)核進(jìn)入安全I(xiàn)RQ處理程序,其中,SMI指令將使內(nèi)核轉(zhuǎn)移到監(jiān)視模式(其中,保存安全上下文),然后進(jìn)入非安全I(xiàn)RQ處理程序以便處理該非安全中斷。
在安全區(qū)域中出現(xiàn)IRQ見(jiàn)圖13A1.調(diào)度程序運(yùn)行線程1。
2.線程1需要執(zhí)行安全函數(shù)=>SMI安全調(diào)用,內(nèi)核進(jìn)入監(jiān)視模式。將當(dāng)前PC和CPSR保存在R14_mon和SPSR_MON中,禁用IRQ/FIQ。
3.監(jiān)視處理程序執(zhí)行下述任務(wù)-設(shè)置S位。
-至少將R14_mon和SPSR_mon保存在堆棧中(最后其他寄存器),以便如果在運(yùn)行安全應(yīng)用程序的同時(shí),出現(xiàn)異常,也不至于丟失非安全上下文。
-校驗(yàn)運(yùn)行新線程安全線程1(經(jīng)線程ID表)機(jī)制表示在安全區(qū)域中,線程1有效。
-然后在安全用戶模式中開(kāi)始安全應(yīng)用程序。重新允許IRQ/FIQ。
4.在運(yùn)行安全線程1時(shí)出現(xiàn)IRQ。內(nèi)核直接跳到安全I(xiàn)RQ模式。
5.內(nèi)核將當(dāng)前PC存儲(chǔ)在R14_irq中以及將CPSR存儲(chǔ)在SPSR_irq中。IRQ處理程序檢測(cè)這是非安全中斷以及執(zhí)行SMI來(lái)通過(guò)適當(dāng)參數(shù)進(jìn)入監(jiān)視模式。
6.必須保存安全上下文,恢復(fù)先前的非安全上下文。監(jiān)視處理程序通過(guò)讀取CPRS,知道SMI來(lái)自何處。還能進(jìn)入IRQ模式來(lái)讀取R14_irq/SPSR_irq以便適當(dāng)?shù)乇4姘踩舷挛?。還能將非安全上下文保存在相同的寄存器中,而這些非安全上下文一旦IRQ事務(wù)處理結(jié)束就必須恢復(fù)。
7.IRQ處理程序提供IRQ,然后將控制返回到非安全區(qū)域中的線程1。通過(guò)使SPSR_irq和R14_irq再存入CPSR和PC中,現(xiàn)在,內(nèi)核指向已經(jīng)中斷的SMI指令。
8.重新執(zhí)行SMI指令(指令與2相同)。
9.監(jiān)視處理程序注意到先前已經(jīng)中斷該線程,以及恢復(fù)線程1上下文。然后轉(zhuǎn)移到用戶模式中的安全線程1,指向已經(jīng)中斷指令上。
10.運(yùn)行安全線程1直到完成為止,然后轉(zhuǎn)移到監(jiān)視模式中的“從安全返回”函數(shù)上(專用SMI)。
11.“從安全返回”函數(shù)執(zhí)行下述任務(wù)-表示完成安全線程1(即,在線程ID表的情況下,從表移出線程1)。
-從棧非安全上下文恢復(fù)以及清除所需寄存器,以便只要返回到非安全區(qū)域,能讀取安全數(shù)據(jù)。
-通過(guò)SUBS指令,使轉(zhuǎn)移回非安全區(qū)域,恢復(fù)PC(從恢復(fù)的R14_mon和CPSR(從SPSR_mon)。非安全區(qū)域中的返回點(diǎn)應(yīng)當(dāng)是線程1中先前執(zhí)行的SMI后的指令。
12.執(zhí)行線程1直到結(jié)束為止,然后將控制返回調(diào)度程序。
在非安全區(qū)域中出現(xiàn)SIRQ見(jiàn)圖13B1.調(diào)度程序運(yùn)行線程12.當(dāng)安全線程1正運(yùn)行時(shí),出現(xiàn)SIRQ。
3.內(nèi)核直接跳轉(zhuǎn)irq模式以及將當(dāng)前PC存儲(chǔ)在R14_irq和將CPSR存儲(chǔ)在SPSR_irq中,然后禁用IRQ。IRQ處理程序檢測(cè)這是SIRQ以及通過(guò)適當(dāng)?shù)膮?shù),執(zhí)行SMI指令。
4.只要在監(jiān)視模式中,必須保存非安全上下文,然后內(nèi)核進(jìn)入安全I(xiàn)RQ處理程序。
5.IRQ處理程序提供SIRQ服務(wù)例程,然后通過(guò)具有適當(dāng)參數(shù)的SMI,將控制返回到監(jiān)視模式處理程序。
6.監(jiān)視處理程序恢復(fù)非安全上下文以便SUBS指令使內(nèi)核返回到非安全區(qū)域以及恢復(fù)中斷IRQ處理程序。
7.然后,通過(guò)執(zhí)行SUBS,IRQ處理程序返回到非安全線程。
8.執(zhí)行線程1直到結(jié)束為止,然后將控制返回到調(diào)度程序。
通過(guò)圖12的機(jī)制,在嵌套中斷的情況下,不需要重建SIRQ事件,但不保證將執(zhí)行安全中斷。
異常矢量保存至少兩個(gè)物理矢量表(盡管從虛擬地址的觀看點(diǎn),它們看起來(lái)象單一矢量表),一個(gè)用于非安全存儲(chǔ)器中的非安全區(qū)域,一個(gè)用于安全存儲(chǔ)器(不能從非安全區(qū)域訪問(wèn))中的安全區(qū)域。用在安全和非安全區(qū)域中的不同虛擬到物理存儲(chǔ)器映射有效地允許相同的虛擬存儲(chǔ)器地址訪問(wèn)存儲(chǔ)在物理存儲(chǔ)器中的不同矢量表。監(jiān)視模式可以總是使用單調(diào)存儲(chǔ)器映射以便在物理存儲(chǔ)器中提供第三矢量表。
如果中斷按照?qǐng)D12機(jī)制,將存在用于每個(gè)表的如圖14所示的下述矢量。在安全和非安全存儲(chǔ)器中復(fù)制該矢量集。
NB.復(fù)位項(xiàng)僅在安全矢量表中,當(dāng)在非安全區(qū)域中執(zhí)行復(fù)位時(shí),內(nèi)核硬件迫使進(jìn)入監(jiān)督模式以及設(shè)置S位以便能在安全存儲(chǔ)器中訪問(wèn)復(fù)位矢量。
圖15示例說(shuō)明分別應(yīng)用于安全模式、非安全模式和監(jiān)視模式的三個(gè)異常矢量表??梢酝ㄟ^(guò)異常矢量編程這些異常矢量表以便滿足安全和非安全操作系統(tǒng)的需求和特性。每一個(gè)異常矢量表都可以在存儲(chǔ)指向存儲(chǔ)器中的那個(gè)表的基地址的CP15內(nèi),具有相關(guān)矢量表基地址寄存器。當(dāng)發(fā)生異常時(shí),硬件將引用對(duì)應(yīng)于該系統(tǒng)的當(dāng)前狀態(tài)的矢量表基地址寄存器來(lái)確定待使用的矢量表的基地址。另外,可以使用在不同模式中應(yīng)用的不同虛擬到物理存儲(chǔ)器映射來(lái)分開(kāi)在不同物理存儲(chǔ)器地址處存儲(chǔ)的三個(gè)不同矢量表。如圖16所示,在與處理器內(nèi)核有關(guān)的系統(tǒng)(配置控制)協(xié)處理器(CP15)中提供異常中斷屏蔽寄存器。該異常中斷屏蔽寄存器提供與各個(gè)異常類型有關(guān)的標(biāo)記。這些標(biāo)記表明硬件當(dāng)前用來(lái)直接處理用于與其當(dāng)前域有關(guān)的矢量還是應(yīng)當(dāng)強(qiáng)迫切換到監(jiān)視模式(一種安全模式),然后按照監(jiān)視模式矢量表中的矢量。僅能從監(jiān)視模式寫(xiě)異常中斷屏蔽寄存器(異??刂萍拇嫫?。當(dāng)在非安全模式中時(shí),還能防止讀取訪問(wèn)異常中斷屏蔽寄存器。將看到圖16的異常中斷屏蔽寄存器不包括用于復(fù)位矢量的標(biāo)記,因?yàn)樵撓到y(tǒng)配置成總是使此跳轉(zhuǎn)到如在安全矢量表中指定的安全監(jiān)督模式中的復(fù)位矢量以便確保安全引導(dǎo)和向后兼容性。將看出在圖15中,為完整起見(jiàn),在除安全監(jiān)督模式安全矢量表外,矢量表中示出了復(fù)位矢量。
圖16還示例說(shuō)明用于異常中斷屏蔽寄存器內(nèi)的不同異常類型的標(biāo)記是可編程的,諸如在安全引導(dǎo)期間通過(guò)監(jiān)視程序。另外,一些或全部標(biāo)記在某些實(shí)現(xiàn)中可以通過(guò)物理輸入信號(hào)來(lái)提供,例如可以硬布線安全中斷標(biāo)記SIRQ以便當(dāng)接收安全中斷信號(hào)時(shí),總是使監(jiān)視模式輸入和執(zhí)行相應(yīng)的監(jiān)視模式安全中斷請(qǐng)求矢量。圖16僅示例說(shuō)明與非安全域異常有關(guān)的部分異常中斷寄存器,對(duì)安全域異常,將提供類似的可編程位集。
雖然從上述可以理解,在一級(jí),硬件要么迫使中斷由當(dāng)前域異常處理來(lái)控制管理來(lái)實(shí)現(xiàn),要么由監(jiān)視模式異常管理來(lái)實(shí)現(xiàn),具體取決于異常控制寄存器標(biāo)記,這僅是所應(yīng)用的控制的第一級(jí)。例如,異??梢园l(fā)生在安全模式中,安全模式異常矢量在安全模式異常處理程序后,但該安全模式異常處理程序確定該異常是非安全異常處理程序更好的屬性,因此,利用SMI指令來(lái)切換到非安全模式以及調(diào)用非安全異常處理程序。逆過(guò)程也是可能的,其中硬件可以用來(lái)啟動(dòng)非安全處理程序,但是然后,執(zhí)行安全異常處理程序或監(jiān)視模式異常處理程序的直接處理的指令。
圖17是示意性地示例說(shuō)明系統(tǒng)的操作以便支持與新類型的異常有關(guān)的另外可能的切換請(qǐng)求類型的流程。在步驟98,硬件檢測(cè)正嘗試改變監(jiān)視模式的任何指令,如在當(dāng)前程序狀態(tài)寄存器(CPSR)中所表明的。當(dāng)檢測(cè)到該嘗試時(shí),那么觸發(fā)新類型的異常,這稱為CPSR沖突異常。在步驟100,生成該CPSR沖突異常層到引用監(jiān)視模式內(nèi)的適當(dāng)異常以及在步驟102運(yùn)行監(jiān)視程序以便處理該CPSR沖突異常。
將意識(shí)到除支持上述的SMI指令外,還可以提供與圖17有關(guān)所述的用于啟動(dòng)安全域和非安全域間的切換的機(jī)制。當(dāng)經(jīng)SMI指令,進(jìn)行所有授權(quán)嘗試時(shí),可以提供該異常機(jī)制以便響應(yīng)切換模式的未授權(quán)嘗試。另外,該機(jī)制可以是合法方法來(lái)在安全域和非安全域間切換或可以提供以便提供與現(xiàn)有碼的向后兼容性,例如,即使不是真正嘗試執(zhí)行非授權(quán)嘗試來(lái)在安全域和非安全域間切換,作為其正常操作的一部分,試圖清除處理狀態(tài)寄存器。
如上所述,總的來(lái)說(shuō),當(dāng)處理器正在監(jiān)視模式中時(shí),禁止中斷。這樣做的目的是增加系統(tǒng)的安全性。當(dāng)中斷發(fā)生時(shí),將當(dāng)時(shí)的處理器狀態(tài)存儲(chǔ)在中斷異常寄存器中以便在完成中斷功能時(shí),在中斷點(diǎn)能恢復(fù)中斷函數(shù)的處理。如果在監(jiān)視模式中允許該過(guò)程,則會(huì)減低監(jiān)視模式的安全性,提供可能的安全數(shù)據(jù)泄漏路徑。為此,在監(jiān)視模式中,通常禁止中斷。然而,在監(jiān)視模式期間,禁止中斷的一個(gè)后果是增加中斷等待時(shí)間。
如果不存儲(chǔ)執(zhí)行該函數(shù)的處理器狀態(tài),則可以允許在監(jiān)視模式中中斷。這僅僅在中斷之后不恢復(fù)該函數(shù)的情況下才能執(zhí)行。因此,通過(guò)允許僅中斷監(jiān)視模式中的能安全重啟的函數(shù),可以解決監(jiān)視模式中的中斷等待時(shí)間的問(wèn)題。在這種情況下,在監(jiān)視模式中的中斷后,涉及函數(shù)處理的數(shù)據(jù)不進(jìn)行存儲(chǔ),而是將其丟棄,并在中斷結(jié)束之后向處理器發(fā)出指令,從頭對(duì)該函數(shù)進(jìn)行處理。在上述例子中,這是當(dāng)處理器簡(jiǎn)單地返回到切換到監(jiān)視模式時(shí)的點(diǎn)時(shí)處理的簡(jiǎn)單的事件。應(yīng)注意到,對(duì)能重啟的某些函數(shù)來(lái)說(shuō),只是對(duì)部分特定的函數(shù)來(lái)說(shuō)是可能重啟并產(chǎn)生可重復(fù)產(chǎn)生的結(jié)果的。如果函數(shù)已經(jīng)改變處理器的狀態(tài)以致如果重啟它,將產(chǎn)生不同結(jié)果時(shí),那么重啟函數(shù)不是好的主意。為此,在監(jiān)視模式中,僅中斷能安全重啟的那些函數(shù),對(duì)于其他函數(shù),則禁止中斷。
圖18示例說(shuō)明根據(jù)本發(fā)明的實(shí)施例,處理在監(jiān)視模式中出現(xiàn)的中斷的方法。在非安全模式中處理任務(wù)A期間出現(xiàn)SMI以及這將處理器切換到監(jiān)視模式。SMI指令使內(nèi)核通過(guò)專用的非安全SMI矢量進(jìn)入監(jiān)視模式。保存PC的當(dāng)前狀態(tài),設(shè)置s位以及禁止中斷。通常,使用LR_mon和SPSR_mon來(lái)保存非安全模式的PC和CPSR。
然后在監(jiān)視模式中啟動(dòng)函數(shù),函數(shù)C。函數(shù)C所做的第一件事是允許中斷,然后處理函數(shù)C。如果在處理函數(shù)C期間出現(xiàn)中斷,不禁止中斷以便接受和執(zhí)行中斷。然而,監(jiān)視模式指示器指示處理器在該中斷后,不恢復(fù)該函數(shù),而是重啟。另外,這也可以通過(guò)單獨(dú)的控制參數(shù)來(lái)指示處理器。因此,在中斷后,用LR_mon和SPSR_mon的值來(lái)更新中斷異常矢量以及不保存處理器的當(dāng)前狀態(tài)。
如圖18所示,在完成中斷任務(wù),任務(wù)B后,處理器讀取已經(jīng)拷貝到中斷寄存器的SMI指令的地址以及執(zhí)行SMI和開(kāi)始再次處理函數(shù)C。
僅僅在函數(shù)C是可重的情況下,上述過(guò)程才能執(zhí)行,即,如果重啟,過(guò)程C將導(dǎo)致可重復(fù)的處理步驟。如果函數(shù)C改變處理器的狀態(tài)的任何一個(gè),諸如會(huì)影響其未來(lái)處理的棧指針的情形,情況就完全不一樣了。用這種方式可重復(fù)的函數(shù)被認(rèn)為具有冪等性。處理不具有冪等性的函數(shù)的問(wèn)題的一種方法是重新排列定義函數(shù)的代碼,用這種方法,代碼的第一部分具有冪等性,以及只要不同可能排列碼來(lái)具有冪等性,禁止中斷。例如,如果代碼C涉及寫(xiě)入棧,可以執(zhí)行該操作,而至少不首先更新棧指針。只要確定不再可行地安全重啟代碼,那么用于函數(shù)C的代碼能指示處理器禁止中斷,然后它能將棧指針更新到正確的位置。這如圖18所示,其中通過(guò)函數(shù)C的處理,用某種方式禁止中斷。
圖19示例說(shuō)明稍微不同的例子。在該例子中,通過(guò)處理任務(wù)C的某些方法,設(shè)置另外的控制參數(shù)。這表明任務(wù)C的后續(xù)部分不是嚴(yán)格的冪等性,但假定首先運(yùn)行修復(fù)例程,能安全地重啟。該修復(fù)例程用來(lái)使處理器的狀態(tài)恢復(fù)到在開(kāi)始任務(wù)C時(shí)的情形,以便能安全地重啟任務(wù)C以及在任務(wù)結(jié)束時(shí),產(chǎn)生與沒(méi)有被中斷時(shí)相同的處理器狀態(tài)。在一些實(shí)施例中,在設(shè)置另外的控制參數(shù)的點(diǎn),可以短時(shí)間禁止中斷,同時(shí)改正處理器的一些狀態(tài),諸如正更新的棧指針。這允許處理器稍后恢復(fù)到冪等性狀態(tài)。
當(dāng)在已經(jīng)設(shè)置另外的控制參數(shù)后,出現(xiàn)中斷時(shí),那么有兩種可能的方法來(lái)進(jìn)行。要么立即執(zhí)行修復(fù)例程(在F1),然后能處理中斷,或立即處理中斷,以及在中斷完全后,執(zhí)行SMI,然后在重啟任務(wù)C前,執(zhí)行修復(fù)例程(在F2)。如所看到的,在這些實(shí)施例中,在監(jiān)視模式中執(zhí)行修復(fù)例程,因此,不影響非安全域中的執(zhí)行,非安全域不知道安全域或監(jiān)視模式。
如從圖19所看到的,代碼C的第一部分具有冪等性以及能在中斷后重啟。假定首先運(yùn)行修復(fù)例程,可重啟第二部分,這通過(guò)設(shè)置“另外”控制參數(shù)來(lái)表明,以及不能重啟代碼的最后部分,因此,在處理該代碼前,禁止中斷。
圖20示例說(shuō)明另外的例子,在這種情況下,不同于其他實(shí)施例,在監(jiān)視模式期間允許中斷。然后,在監(jiān)視模式中運(yùn)行的函數(shù),只要不再能被安全地重啟,則禁止中斷。如果重啟在監(jiān)視模式中中斷的所有函數(shù)而不是恢復(fù),這是可能的。
能幾種方法來(lái)確保當(dāng)中斷時(shí),重啟而不是恢復(fù)在某一模式中運(yùn)行的所有函數(shù)。一種方法是通過(guò)增加新處理器狀態(tài),其中中斷保存指令序列的開(kāi)始地址而不是中斷指令的地址。在這種情況下,監(jiān)視模式總是運(yùn)行在該狀態(tài)中。另一種方法是通過(guò)在開(kāi)始每個(gè)函數(shù)時(shí),將函數(shù)的起始地址預(yù)載到中斷異常寄存器,在中斷后,禁止處理器的狀態(tài)的順序?qū)懭胍员阒袛喈惓<拇嫫鳌?br>
在圖20所示的實(shí)施例中,在終止中斷函數(shù)后,立即執(zhí)行函數(shù)的重啟,或如果要求使函數(shù)安全重啟,在修復(fù)例程后執(zhí)行。
盡管已經(jīng)根據(jù)具有安全和非安全域的系統(tǒng)以及監(jiān)視模式描述了處理中斷等待時(shí)間的方法,很顯然,能應(yīng)用于具有由于特定原因,不應(yīng)當(dāng)恢復(fù)的函數(shù)的任何系統(tǒng)。通常,這些函數(shù)通過(guò)禁止增加中斷等待時(shí)間的中斷來(lái)操作。將函數(shù)修改成可重啟以及控制處理器在中斷后重啟它們?cè)试S對(duì)函數(shù)的處理的至少一部分,允許中斷以及有助于降低中斷等待時(shí)間。例如,操作系統(tǒng)的標(biāo)準(zhǔn)上下文切換。
訪問(wèn)安全和非安全存儲(chǔ)器如參考圖1所述,數(shù)據(jù)處理裝置具有存儲(chǔ)器,尤其包括TCM36、高速緩存38、ROM44、從設(shè)備的存儲(chǔ)器和外部存儲(chǔ)器56。如參考圖37所示,例如,將存儲(chǔ)器分區(qū)成安全和非安全存儲(chǔ)器。將意識(shí)到在制作時(shí),在存儲(chǔ)器的安全存儲(chǔ)器區(qū)和非安全存儲(chǔ)器區(qū)間通常沒(méi)有任何實(shí)質(zhì)區(qū)別,但是當(dāng)在安全域中操作時(shí),這些區(qū)由數(shù)據(jù)處理裝置的安全操作系統(tǒng)來(lái)定義。因此,可以將存儲(chǔ)器設(shè)備的任何物理部分分配成安全存儲(chǔ)器,以及可以將任何物理部分分配成非安全存儲(chǔ)器。
如參考圖2至5所述,處理系統(tǒng)具有安全域和非安全域。在安全域中,提供安全核心程序80以及在安全模式中執(zhí)行。提供橫跨于安全域和非安全域并至少部分在監(jiān)視模式中執(zhí)行的監(jiān)視程序72。在本發(fā)明的實(shí)施例中,監(jiān)視程序部分在監(jiān)視模式中執(zhí)行以及部分在安全模式中執(zhí)行。如例如圖10所示,有多個(gè)安全模式,尤其包括監(jiān)督模式SVC。
監(jiān)視程序72負(fù)責(zé)管理在任一方向中,安全和非安全域間的所有改變。在節(jié)“處理器模式”中,參考圖8和9描述其一些函數(shù)。監(jiān)視程序響應(yīng)在非安全模式中發(fā)出的模式轉(zhuǎn)換請(qǐng)求SMI以便啟動(dòng)從所述非安全模式到所述安全模式的轉(zhuǎn)換以及響應(yīng)在安全模式中發(fā)出的模式切換請(qǐng)求SMI,以便啟動(dòng)從所述安全模式到所述非安全模式的轉(zhuǎn)換。如在節(jié)“區(qū)域間的切換”中所述,在監(jiān)視模式中,切換發(fā)生至少一些寄存器從安全和非安全域的一個(gè)切換到另一個(gè)。涉及存在于一個(gè)域中的寄存器的狀態(tài)的保存以及將新?tīng)顟B(tài)寫(xiě)入另一個(gè)域中的寄存器(或恢復(fù)寄存器中先前保存的狀態(tài))。如在此所述,當(dāng)執(zhí)行這種切換時(shí),可以禁止訪問(wèn)一些寄存器。最好,在監(jiān)視模式中,禁止所述中斷。
因?yàn)楸O(jiān)視程序執(zhí)行的監(jiān)視模式橫跨于安全和非安全域,證明監(jiān)視程序安全很重要即,其僅實(shí)現(xiàn)那些意圖實(shí)現(xiàn)的功能。因此,如果監(jiān)視程序盡可能簡(jiǎn)單是有利的。安全模式允許僅在安全域中執(zhí)行過(guò)程。在本發(fā)明的該實(shí)施例中,特許安全模式和監(jiān)視模式允許訪問(wèn)相同的安全和非安全存儲(chǔ)器。通過(guò)確保特許安全模式“看見(jiàn)”相同的安全和非安全存儲(chǔ)器,將僅在監(jiān)視模式中實(shí)現(xiàn)的函數(shù)傳送到允許簡(jiǎn)化監(jiān)視程序的安全模式。另外,這允許在特許安全模式中操作的過(guò)程直接切換到監(jiān)視模式或反之亦然。允許從特許安全模式切換到監(jiān)視模式以及在監(jiān)視模式中,可以執(zhí)行到非安全域的切換。非特許安全模式必須使用SMI來(lái)進(jìn)入監(jiān)視模式。該系統(tǒng)在復(fù)位后進(jìn)入特許安全模式。執(zhí)行監(jiān)視模式和特許安全模式間的切換和返回以便于當(dāng)在域間移動(dòng)時(shí)的狀態(tài)保存。
在其他實(shí)施例中,可以從安全特許模式以及監(jiān)視模式內(nèi)允許訪問(wèn)S標(biāo)記。如果允許安全特許模式使處理器切換到監(jiān)視模式中同時(shí)維持程序流的控制,那么,這些安全特許模式已經(jīng)有效地具有改變S標(biāo)記(位)的能力。因此,提供僅能在監(jiān)視模式內(nèi)改變S標(biāo)志的另外的復(fù)雜度不合理。相反,S標(biāo)記能用與通過(guò)一個(gè)或多個(gè)安全特許模式改變的其他配置標(biāo)記相同的方式存儲(chǔ)。可以在多個(gè)安全特許模式的一個(gè)內(nèi)改變S標(biāo)記的這些實(shí)施例包括在當(dāng)前技術(shù)中。
返回到先前描述的示例性實(shí)施例,該裝置具有處理器內(nèi)核10,定義模式和定義模式的特許級(jí),即,任何模式允許的函數(shù)集。因此,用公知的方式配置處理器內(nèi)核10以便允許安全模式和監(jiān)視模式訪問(wèn)安全和非安全存儲(chǔ)器和安全模式訪問(wèn)監(jiān)視模式允許訪問(wèn)的所有存儲(chǔ)器以及允許在特許安全模式中操作的過(guò)程直接切換到監(jiān)視模式或反之亦然。處理器內(nèi)核10最好配置成允許下述內(nèi)容。
在該裝置的一個(gè)例子中,將存儲(chǔ)器分區(qū)成安全存儲(chǔ)器和非安全存儲(chǔ)器,以及僅在監(jiān)視和安全模式中可訪問(wèn)安全和非安全存儲(chǔ)器。最好,在監(jiān)視模式、安全模式和非安全模式中可訪問(wèn)非安全存儲(chǔ)器。
在該裝置的另一例子中,在監(jiān)視模式和安全模式的一個(gè)或多個(gè)中,安全模式拒絕訪問(wèn)非安全存儲(chǔ)器,以及在非安全模式中,安全和監(jiān)視模式拒絕訪問(wèn)非安全存儲(chǔ)器。因此,僅在監(jiān)視和安全模式中訪問(wèn)安全存儲(chǔ)器,以及僅通過(guò)非安全模式訪問(wèn)非安全存儲(chǔ)器,增加安全性。
在該裝置的例子中,裝置的復(fù)位和引導(dǎo)可以在監(jiān)視模式中執(zhí)行,該監(jiān)視模式可以被認(rèn)為是安全模式更有特權(quán)的模式。然而,在該裝置的許多例子中,配置成在安全模式中提供重新設(shè)置或引導(dǎo),這是可能的,因?yàn)樵试S安全模式和監(jiān)視模式間的直接切換。
如參考圖2所述,在安全域中,以及在安全模式中,安全內(nèi)核80(苛操作系統(tǒng))函數(shù),以及一個(gè)或多個(gè)安全應(yīng)用程序82、84可以在安全內(nèi)核80下運(yùn)行。允許在安全模式中運(yùn)行的安全核心和/或安全應(yīng)用程序或任何其他程序代碼訪問(wèn)安全和非安全存儲(chǔ)器。
盡管已經(jīng)參考具有處理器的裝置描述了本發(fā)明的例子,本發(fā)明可以通過(guò)計(jì)算機(jī)程序來(lái)實(shí)現(xiàn),當(dāng)在適當(dāng)?shù)奶幚砥魃线\(yùn)行時(shí),使處理器操作,如本節(jié)中所述。
下面,將根據(jù)圖21至23,描述從程序員的模型所考慮的本發(fā)明的另外的實(shí)施例如下在下述描述,使用在由Cambridge,England的ARM Limited設(shè)計(jì)的ARM處理器的情況下,必須理解的下述術(shù)語(yǔ)。
-S位安全狀態(tài)位,包括在專用CP15寄存器中。
-“安全/非安全狀態(tài)”。通過(guò)S位值來(lái)定義該狀態(tài)。表示內(nèi)核可以訪問(wèn)安全區(qū)域(當(dāng)其處于安全狀態(tài),即S=1時(shí))還是僅限制到非安全區(qū)域(S=0)。注意監(jiān)視模式(另外見(jiàn))覆蓋S位狀態(tài)。
-“非安全區(qū)域”集合可訪問(wèn)不需要安全性的非安全應(yīng)用程序的所有硬件/軟件。
-“安全區(qū)域”集合僅當(dāng)執(zhí)行安全代碼時(shí)可訪問(wèn)的所有硬件/軟件(內(nèi)核、存儲(chǔ)器….)。
-監(jiān)視模式負(fù)責(zé)在安全和非安全狀態(tài)間切換內(nèi)核的新模式。
概述-內(nèi)核總是能訪問(wèn)非安全區(qū)域。
-僅當(dāng)處于安全狀態(tài)或監(jiān)視模式時(shí),內(nèi)核才能訪問(wèn)安全區(qū)域。
-SMI軟件監(jiān)視中斷通過(guò)專用SMI異常矢量,使內(nèi)核進(jìn)入監(jiān)視模式的新指令?!熬€程ID”與每個(gè)線程(受OS控制)有關(guān)的標(biāo)識(shí)符。對(duì)一些類型的OS,其中,OS在非安全區(qū)域中運(yùn)行,每次調(diào)用安全函數(shù)時(shí),有必要將當(dāng)前線程ID傳遞為參數(shù)以便將安全函數(shù)鏈接到其調(diào)用的非安全應(yīng)用程序上。因此,安全區(qū)域能支持多線程。
-安全中斷定義由安全外設(shè)生成的中斷。
程序員的模型Carbon內(nèi)核概述在此用于使用本技術(shù)的處理器的術(shù)語(yǔ)的Carbon的原理,體系結(jié)構(gòu)包括單獨(dú)的兩個(gè)區(qū)域,一個(gè)安全區(qū)域和一個(gè)非安全區(qū)域。安全區(qū)域一定不能將任何數(shù)據(jù)泄漏到非安全區(qū)域。
在所提出的解決方案中,安全和非安全狀態(tài)將共享相同的(現(xiàn)有)寄存器組。因此,存在于ARM內(nèi)核中的所有當(dāng)前模式(中止,未定義,Irq,用戶,…)將存在于每個(gè)狀態(tài)中。
由于在專用CP15寄存器中所示的新的狀態(tài)位,S(安全)位,內(nèi)核將知道它在安全或非安全狀態(tài)中操作。
允許指令或事件來(lái)修改S位,即從一個(gè)狀態(tài)改變成另一個(gè)狀態(tài)的控制是該系統(tǒng)的安全性的主要特征。當(dāng)前技術(shù)方案提出增加將“監(jiān)督”兩個(gè)狀態(tài)間的切換的新模式,監(jiān)視模式。通過(guò)寫(xiě)入適當(dāng)?shù)腃P15寄存器,監(jiān)視模式將是允許修改S位的唯一模式。
最后,建議將一些靈活性增加到異常處理。除復(fù)位外,所有異常將在它們出現(xiàn)的狀態(tài)中處理,或指向監(jiān)視模式。由于專用CP15寄存器,這將允許可配置。
在下述段落中,將論述該解決方案的詳細(xì)情況。
處理器狀態(tài)和模式Carbon新特征安全或非安全狀態(tài)(S位)
Carbon內(nèi)核的一個(gè)主要特征是存在S位,表明內(nèi)核處于安全(S=1)還是非安全(S=0)狀態(tài)。當(dāng)在安全狀態(tài)中,內(nèi)核將能訪問(wèn)安全或非安全區(qū)域中的任何數(shù)據(jù)。當(dāng)在非安全狀態(tài)中,內(nèi)核將僅限于訪問(wèn)非安全區(qū)域。
該規(guī)則的唯一異常涉及監(jiān)視模式,覆蓋S位信息。即使當(dāng)S=0時(shí),當(dāng)其位于監(jiān)視模式中時(shí),內(nèi)核將執(zhí)行安全特許訪問(wèn)。見(jiàn)下一段落,用于另外的信息的監(jiān)視模式。
僅能在監(jiān)視模式中,讀取和寫(xiě)入S位。不管S值如何,如果任何其他模式嘗試訪問(wèn)它,將被忽略或?qū)е挛炊x異常。
除復(fù)位外,所有異常對(duì)安全狀態(tài)位無(wú)影響。在復(fù)位時(shí),將設(shè)置S位,以及內(nèi)核將在監(jiān)視模式中啟動(dòng)。參見(jiàn)用于詳細(xì)信息的引導(dǎo)節(jié)。
安全/非安全狀態(tài)是獨(dú)立的,并且其操作獨(dú)立于與ARM/Thumb/Java狀態(tài)。
監(jiān)視模式Carbon系統(tǒng)的一個(gè)其他重要特征是創(chuàng)建新模式,監(jiān)視模式。這將用來(lái)控制安全和非安全狀態(tài)間的內(nèi)核切換。將總被視為安全模式,即不管S位的值如何,當(dāng)它處于監(jiān)視模式中時(shí),內(nèi)核將總是對(duì)外部區(qū)域執(zhí)行安全特許訪問(wèn)。
僅僅通過(guò)寫(xiě)入CPSR模式位(MSR,MOVS或等效指令),任何安全特許模式(即當(dāng)S=1時(shí)的特許模式)將能切換到監(jiān)視模式。然而,這在非安全模式或安全用戶模式將被禁止。如果這經(jīng)常發(fā)生,將忽略指令或?qū)е庐惓!?br>
將需要專用的CPSR沖突異常。通過(guò)直接從任何非安全模式或安全用戶模式寫(xiě)入CPSR,切換到監(jiān)視模式的任何嘗試,將產(chǎn)生該異常。
當(dāng)監(jiān)視模式有效時(shí),實(shí)際上,將禁止除復(fù)位外的所有異常●屏蔽所有中斷●所有存儲(chǔ)器異常要么可以忽略或者導(dǎo)致致命異?!裎炊x/SWI/SMI要么可以忽略或者導(dǎo)致致命異常。
當(dāng)進(jìn)入監(jiān)視模式時(shí),自動(dòng)禁止中斷以及應(yīng)當(dāng)寫(xiě)入系統(tǒng)監(jiān)視程序以便在系統(tǒng)監(jiān)視程序正運(yùn)行時(shí),不發(fā)生任何其他類型的異常。
監(jiān)視程序模式需要具有一些專用寄存器。該解決方案建議僅復(fù)制最小寄存器集,即R13(sp_mon)、R14(lr_mon)和SPSR(spsr_mon)。
在監(jiān)視模式中,禁止MMU(單調(diào)地址映射)和MPU或分區(qū)校驗(yàn)器(監(jiān)視程序模式將總是執(zhí)行安全特許外部訪問(wèn))。然而,專用編程MPU區(qū)屬性(高速緩存能力,…)將仍然有效。作為另一方案,不管安全域使用何種映射,監(jiān)視模式可以使用。
新指令該提議要求將一個(gè)新指令增加到現(xiàn)有的ARM指令集上。
將使用SMI(軟件監(jiān)視中斷)來(lái)進(jìn)入監(jiān)視模式,在固定SMI異常矢量轉(zhuǎn)移。該指令將主要用來(lái)向監(jiān)視程序表示在非安全和安全狀態(tài)間交換。
作為另一方案(或另外),將可以增加新指令以便允許監(jiān)視模式將任何其他模式保存到監(jiān)視棧/從監(jiān)視?;謴?fù)任何其他模式以便提高上下文切換性能。
處理器模式如在前段落中所述,在內(nèi)核中僅增加一個(gè)新模式,監(jiān)視模式。所有現(xiàn)有的模式仍然可用,以及將存在于安全和非安全狀態(tài)中。
實(shí)際上,Carbon用戶將看見(jiàn)如圖21所示的結(jié)構(gòu)。
處理器寄存器本實(shí)施例提出安全和非安全區(qū)域共享相同的寄存器組。這意味著當(dāng)通過(guò)監(jiān)視模式,從一個(gè)區(qū)域切換到另一個(gè)區(qū)域時(shí),系統(tǒng)監(jiān)視程序?qū)⑿枰4娴谝粎^(qū)域的上下文,以及在第二區(qū)域中創(chuàng)建(或恢復(fù))上下文。
傳遞參數(shù)變?yōu)橐豁?xiàng)簡(jiǎn)單的任務(wù)只要系統(tǒng)監(jiān)視程序已經(jīng)切換S位,包含在第一區(qū)域中的寄存器中的任何數(shù)據(jù)將用在第二區(qū)域中的相同寄存器中。
然而,除了需要嚴(yán)格控制的專用于傳遞參數(shù)的有限多個(gè)寄存器之外,當(dāng)從安全傳遞到非安全狀態(tài)時(shí),所有其他寄存器需要被清除以便避免安全區(qū)域的任何泄漏。
當(dāng)從安全切換到非安全狀態(tài)時(shí),實(shí)現(xiàn)硬件機(jī)制或新指令來(lái)直接刷新寄存器也是可能的。
所提出的另一解決方案涉及復(fù)制所有(或大多數(shù))現(xiàn)有的寄存器組,從而在安全和非安全狀態(tài)間具有兩個(gè)物理分開(kāi)的寄存器。該解決方案具有明顯地分開(kāi)包含在寄存器中的安全和非安全數(shù)據(jù)的主要優(yōu)點(diǎn)。還允許安全和非安全狀態(tài)間的快速上下文切換。然而,缺點(diǎn)在于通過(guò)寄存器傳遞參數(shù)變得困難,除非創(chuàng)建一些專用指令來(lái)允許安全區(qū)域訪問(wèn)非安全寄存器。
圖22示例說(shuō)明根據(jù)處理器模式的可用寄存器。注意,處理器狀態(tài)對(duì)該主題無(wú)影響。
異常安全中斷當(dāng)前解決方案目前提出保持與當(dāng)前內(nèi)核中相同的中斷管腳,即IRQ和FIQ。與異常中斷屏蔽寄存器(在本文獻(xiàn)中稍后定義)有關(guān),對(duì)任何系統(tǒng)來(lái)說(shuō),有足夠的靈活性來(lái)實(shí)現(xiàn)和處理不同類型的中斷。
VIC增強(qiáng)用下述方法增加VIC(矢量中斷控制器)VIC可以包含與每個(gè)矢量地址有關(guān)的一個(gè)安全信息位。僅可以通過(guò)監(jiān)視或安全特許模式編程該位。表示所認(rèn)為的中斷是否應(yīng)當(dāng)被視為安全,從而應(yīng)當(dāng)在安全端處理。
還增加兩個(gè)新的矢量地址寄存器,一個(gè)用于在非安全狀態(tài)中出現(xiàn)的所有安全中斷,另一個(gè)用于在安全狀態(tài)中出現(xiàn)的所有非安全中斷。
包含在CP15中的S位信息將可用于VIC,作為新VIC輸入。
根據(jù)輸入中斷的狀態(tài)(安全或非安全,用與每個(gè)中斷線有關(guān)的位表示)和內(nèi)核的狀態(tài)(CP15中的S位=VIC上的S輸入信號(hào)),下述表概述不同可能的情形。
異常處理可配置性。
為提高Carbon靈活性,新寄存器,異常中斷屏蔽將增加到CP15中。該寄存器將包含下述位-位0未定義異常(非安全狀態(tài))-位1SWI異常(非安全狀態(tài))-位2預(yù)取中止異常(非安全狀態(tài))-位3數(shù)據(jù)中止異常(非安全狀態(tài))-位4IRQ異常(非安全狀態(tài))-位5FIQ異常(非安全狀態(tài))-位6SMI異常(非安全/安全狀態(tài))-位16未定義異常(安全狀態(tài))-位17SWI異常(安全狀態(tài))-位18預(yù)取中止異常(安全狀態(tài))-位19數(shù)據(jù)中止異常(安全狀態(tài))-位20IRQ異常(安全狀態(tài))-位21FIQ異常(安全狀態(tài))
復(fù)位異常在該寄存器中不具有任何相應(yīng)位。復(fù)位將總是使內(nèi)核通過(guò)其專用矢量進(jìn)入安全監(jiān)督模式。
如果設(shè)置位,相應(yīng)的異常使內(nèi)核進(jìn)入監(jiān)視模式。否則,將在其出現(xiàn)的區(qū)域中的相應(yīng)的處理程序中處理該異常。
該寄存器將僅在監(jiān)視模式中可見(jiàn)。將忽略在任何其他模式中嘗試訪問(wèn)它的任何指令。
根據(jù)系統(tǒng)是否監(jiān)視程序,應(yīng)當(dāng)將該寄存器初始化到系統(tǒng)專用值。能通過(guò)VIC控制該功能性。
異常矢量表當(dāng)有單獨(dú)的安全和非安全區(qū)域時(shí),還需要單獨(dú)的安全和非安全異常矢量表。
此外,當(dāng)監(jiān)視程序還能設(shè)一些異常中斷時(shí),還需要專用于該監(jiān)視程序的第三異常矢量表。
下述表概述那些三個(gè)不同異常矢量表在非安全存儲(chǔ)器中
在安全存儲(chǔ)器中
*參見(jiàn)進(jìn)一步描述有關(guān)復(fù)位機(jī)制的“引導(dǎo)”節(jié)。
在監(jiān)視存儲(chǔ)器中(單調(diào)映射)
在監(jiān)視模式中,可以復(fù)制異常矢量,以便每個(gè)異常將具有兩個(gè)不同的相關(guān)矢量-一個(gè)用于在非安全狀態(tài)中出現(xiàn)的異常-一個(gè)用于在安全狀態(tài)中出現(xiàn)的異常這對(duì)于降低異常等待時(shí)間是有用的,因?yàn)楸O(jiān)視核心不再具有檢測(cè)異常出現(xiàn)的原始狀態(tài)的必要。
注意該特征可限于一些異常,SMI是改進(jìn)安全和非安全狀態(tài)間的切換的最適當(dāng)?shù)暮蜻x。
區(qū)域間的切換當(dāng)狀態(tài)間切換時(shí),監(jiān)視模式必須將第一狀態(tài)的上下文保存在其監(jiān)視棧上,以及從監(jiān)視棧恢復(fù)第二狀態(tài)上下文。
因此,監(jiān)視模式需要訪問(wèn)任何其他模式的任何寄存器,包括專用寄存器(r14,SPSR,…)。
為處理此,所提出的解決方案包括通過(guò)簡(jiǎn)單地寫(xiě)入CPSR,向安全狀態(tài)中的任何特許模式提供直接切換到監(jiān)視模式的權(quán)利。
通過(guò)該系統(tǒng),區(qū)域間的切換執(zhí)行如下-進(jìn)入監(jiān)視模式-設(shè)置S位-切換到監(jiān)督模式-將監(jiān)視寄存器保存在監(jiān)視棧上(當(dāng)然監(jiān)督模式將需要訪問(wèn)監(jiān)視棧指針,但這能容易實(shí)現(xiàn),例如通過(guò)使用共用寄存器(R0至R8))-切換到系統(tǒng)模式-將寄存器(=與用戶模式相同)保存在監(jiān)視棧上-監(jiān)視棧上的IRQ寄存器等等…用于所有模式-一旦保存所有模式的所有專用寄存器,通過(guò)簡(jiǎn)單的MSR指令(=簡(jiǎn)單地將監(jiān)視值寫(xiě)在CPSR模式字段中),回復(fù)到監(jiān)視模式也考慮到其他解決方案-增加允許監(jiān)視程序?qū)⑵渌J降膶S眉拇嫫鞅4嬖谄渥约旱臈I系男轮噶睢?br>
-將監(jiān)視程序?qū)崿F(xiàn)為新“狀態(tài)”,即,能處于監(jiān)視狀態(tài)(具有適當(dāng)?shù)脑L問(wèn)權(quán))和IRQ(或任何其他模式),以便查看IRQ(或任何其他)專用寄存器。
基本情形(見(jiàn)圖23)1.線程1運(yùn)行在非安全區(qū)域中(S位=0)2.通過(guò)非安全SMI矢量,SMI指令使內(nèi)核進(jìn)入監(jiān)視模式。
使用LR_mon和SPSR_mon來(lái)保存非安全模式的PC和CPSR。
在該階段,S位仍然不變,盡管該系統(tǒng)現(xiàn)在在安全狀態(tài)中。
監(jiān)視核心將非安全上下文保存在監(jiān)視程序上。
還壓入LR_mon和SPSR_mon。
然后監(jiān)視內(nèi)核通過(guò)寫(xiě)入CP15寄存器來(lái)改變“S”位。
在該實(shí)施例中,監(jiān)視內(nèi)核記錄將在安全區(qū)域中(例如通過(guò)更新線程ID表),啟動(dòng)“安全線程1”。
最后,它退出監(jiān)視模式以及切換到安全監(jiān)督模式(在更新LR_mon和SPSR_mon后的MOVS指令?)。
3.安全核心將應(yīng)用程序調(diào)度到正確的安全存儲(chǔ)單元,然后切換到用戶模式(例如使用MOVS)。
4.在安全用戶模式中執(zhí)行安全函數(shù)。一旦完成,通過(guò)執(zhí)行適當(dāng)?shù)腟WI,調(diào)用“退出”函數(shù)。
5.通過(guò)反過(guò)來(lái)執(zhí)行“退出”函數(shù)的專用SWI矢量,SWI指令使內(nèi)核進(jìn)入安全svc模式。該“退出”函數(shù)以“SMI”結(jié)束以便切換回監(jiān)視模式。
6.SMI指令使內(nèi)核通過(guò)專用的安全SMI矢量進(jìn)入監(jiān)視模式。
使用LR_mon和SPSR_mon來(lái)保存安全svc模式的PC和CPSR。
S位仍然不變(即安全狀態(tài))監(jiān)視核心記錄結(jié)束安全線程1的事實(shí)(從線程ID表移出安全線程1ID?)然后通過(guò)寫(xiě)入CP15寄存器,返回到非安全狀態(tài)來(lái)改變“S”位。
監(jiān)視核心從監(jiān)視?;謴?fù)非安全上下文。
在步驟2中,還加載先前保存的LR_mon和SPSR_mon。
最后,根據(jù)指令,它通過(guò)SUBS退出監(jiān)視模式,使內(nèi)核返回到非安全用戶模式中。
7.線程1能正?;謴?fù)。
參考圖6,在安全和非安全域間共享所有寄存器。在監(jiān)視模式中,切換發(fā)生,寄存器從安全和非安全域的一個(gè)切換到另一個(gè)。包含對(duì)存在于一個(gè)域中的寄存器的狀態(tài)進(jìn)行保存以及將新?tīng)顟B(tài)寫(xiě)入另一個(gè)域中的寄存器(或恢復(fù)寄存器中的先前保存的狀),如在上節(jié)“區(qū)域間的切換”中所述。
期望降低執(zhí)行這一切換所需的時(shí)間。為降低執(zhí)行切換所花的時(shí)間,當(dāng)安全和非安全域間的切換保持不改變存儲(chǔ)在其中的值時(shí),禁止共享寄存器。例如,假定從非安全域切換到安全域。假定例如在安全區(qū)域中不需要圖6所示的FIQ寄存器。因此,禁止那些寄存器以及不需要將它們切換到安全域以及不需要保存那些寄存器的內(nèi)容。
可以采用多種方法來(lái)實(shí)現(xiàn)禁止寄存器。一種方法是封鎖使用那些寄存器的模式。這是通過(guò)將控制位寫(xiě)入CP15寄存器中,表示禁止那個(gè)模式來(lái)實(shí)現(xiàn)的。
另外,在逐個(gè)指令的基礎(chǔ)上,通過(guò)將控制位寫(xiě)入CP15寄存器,可以禁止訪問(wèn)寄存器。寫(xiě)入CP15中的位明確與該寄存器,而不是模式有關(guān),以便不禁止工,而是禁止訪問(wèn)該模式中的寄存器。
FIQ寄存器存儲(chǔ)與快速中斷有關(guān)的數(shù)據(jù)。如果禁止FIQ寄存器以及快速中斷發(fā)生,處理器發(fā)出監(jiān)視程序中的異常的信號(hào)。響應(yīng)異常,監(jiān)視模式能用來(lái)保存與一個(gè)域有關(guān)并存儲(chǔ)在所述禁止寄存器中的任何數(shù)據(jù)值以及將與另一域有關(guān)的新數(shù)據(jù)值加載到那個(gè)寄存器中,然后重新允許FIQ模式寄存器。
可以將處理器配置成當(dāng)在監(jiān)視模式中時(shí),當(dāng)處理器切換域時(shí),禁止所有成組寄存器。另外,禁止寄存器是可選擇的,因?yàn)楫?dāng)切換域時(shí),禁止一些預(yù)定的共享寄存器,以及根據(jù)程序員的選擇,可以禁止其他寄存器。
可以將處理器配置成當(dāng)在監(jiān)視模式中切換域時(shí),禁止一個(gè)或多個(gè)的共享寄存器,以及當(dāng)存在一個(gè)域時(shí),一個(gè)或多個(gè)其他共享寄存器保存它們的數(shù)據(jù),以及將新數(shù)據(jù)加載在另一個(gè)域中。新數(shù)據(jù)可以是空數(shù)據(jù)。
圖24示意性地示例說(shuō)明將安全處理選項(xiàng)增加到傳統(tǒng)的ARM內(nèi)核的原理。該圖示意性地表示如何通過(guò)將安全處理選項(xiàng)增加到現(xiàn)有的內(nèi)核,能形成包含安全處理選項(xiàng)的處理器。如果該系統(tǒng)將向后與現(xiàn)有的傳統(tǒng)操作系統(tǒng)兼容,直覺(jué)想到在處理器的傳統(tǒng)非安全部分中操作的傳統(tǒng)系統(tǒng)。然而,如該圖的下半部分中示意所示以及下面的進(jìn)一步詳述,實(shí)際上,傳統(tǒng)系統(tǒng)在該系統(tǒng)的安全部分中操作。
圖25表示具有安全和非安全域以及示例說(shuō)明復(fù)位并與圖2類似的處理器。圖2示例說(shuō)明用來(lái)通過(guò)控制安全域中的處理的安全OS系統(tǒng)和控制非安全域中的處理的非安全OS系統(tǒng),運(yùn)行安全性敏感型操作的處理器。然而,該處理器與傳統(tǒng)的操作系統(tǒng)向后兼容,因此,該處理器使用傳統(tǒng)的操作系統(tǒng),以安全性不敏感方式操作。
如圖25所示,復(fù)位在安全域中,以及不管操作類型如何,通過(guò)所設(shè)置的S位或安全性狀態(tài)標(biāo)記,發(fā)生復(fù)位。在安全性不敏感的操作的情況下,在安全域中發(fā)生復(fù)位,然后處理在安全域內(nèi)繼續(xù)。然而,控制處理的傳統(tǒng)操作系統(tǒng)不知道系統(tǒng)的安全性方面。
如圖25所示,執(zhí)行復(fù)位來(lái)設(shè)置地址,不管處理是安全敏感還是實(shí)際上安全不敏感,從該地址啟動(dòng)安全監(jiān)督模式內(nèi)的處理。一旦執(zhí)行復(fù)位,那么執(zhí)行存在于引導(dǎo)或重新引導(dǎo)機(jī)制中的另外的任務(wù)。下面描述引導(dǎo)機(jī)制。
引導(dǎo)機(jī)制引導(dǎo)機(jī)制必須考慮下述特征-保持與傳統(tǒng)OSes的兼容性-在最特許模式中引導(dǎo)以便確保系統(tǒng)的安全性。
因此,Carbon內(nèi)核將在安全監(jiān)督模式中引導(dǎo)。
然后不同系統(tǒng)將是-對(duì)希望運(yùn)行傳統(tǒng)OS的系統(tǒng),不考慮S位,以及內(nèi)核將正好看見(jiàn)其在監(jiān)督模式中引導(dǎo)。
-對(duì)希望使用Carbon特征的系統(tǒng),內(nèi)核在應(yīng)當(dāng)能在系統(tǒng)中配置所有安全保護(hù)(可以在切換到監(jiān)視模式后)的安全特許模式中引導(dǎo)。
根據(jù)如上給出的引導(dǎo)機(jī)制的詳細(xì)情況,本發(fā)明的實(shí)施例的處理器復(fù)位該處理器以便在所有情況下,在安全監(jiān)督模式中開(kāi)始處理。在安全性不敏感的操作的情況下,操作系統(tǒng)實(shí)際上在安全域中操作,盡管安全性在此不是問(wèn)題,因?yàn)樵O(shè)置了S位(盡管操作系統(tǒng)不知道此)。其優(yōu)點(diǎn)在于不能從非安全域訪問(wèn)的部分存儲(chǔ)器在這種情況下是可以訪問(wèn)的。
在安全敏感系統(tǒng)中,在所有情況下,在安全監(jiān)督模式中引導(dǎo)也有利,因?yàn)橛兄诖_保系統(tǒng)的安全性。在安全敏感系統(tǒng)中,在安全監(jiān)督模式中,在存儲(chǔ)引導(dǎo)程序的引導(dǎo)點(diǎn)處提供地址,從而允許系統(tǒng)配置成安全系統(tǒng)以及切換到監(jiān)視模式。通常允許從安全監(jiān)督模式切換到監(jiān)督模式以及在適當(dāng)?shù)臅r(shí)間,允許安全系統(tǒng)在監(jiān)督模式中開(kāi)始處理以便初始化監(jiān)視模式配置。
圖26示例說(shuō)明在步驟1,由非安全操作系統(tǒng)執(zhí)行非安全線程N(yùn)SA。在步驟2,非安全線程N(yùn)SA經(jīng)在步驟3,運(yùn)行監(jiān)視模式程序的監(jiān)視模式,調(diào)用安全域。在步驟5,監(jiān)視模式程序改變S位以便切換域以及在移動(dòng)到安全操作系統(tǒng)前,執(zhí)行任何所需的上下文保存和上下文恢復(fù)。然后,在步驟6,在經(jīng)受中斷irq前,執(zhí)行相應(yīng)的安全線程SA。在步驟7,中斷處理硬件觸發(fā)返回到監(jiān)視模式,其中確定有關(guān)中斷將由安全操作系統(tǒng)還是非安全操作系統(tǒng)處理。在這種情況下,將由在步驟9開(kāi)始的非安全操作系統(tǒng)處理中斷。當(dāng)由非安全操作系統(tǒng)處理該中斷時(shí),在步驟11,在正常線程切換操作前,非安全線程N(yùn)SA恢復(fù)成非安全操作系統(tǒng)中的當(dāng)前任務(wù)。該線程切換可以是定時(shí)事件等待的結(jié)果。在步驟12,通過(guò)非安全操作系統(tǒng)中的非安全域,執(zhí)行不同線程N(yùn)SB,然后在步驟14,經(jīng)監(jiān)視域/程序,調(diào)用安全域。步驟7的監(jiān)視程序已經(jīng)存儲(chǔ)標(biāo)記,在一些其他機(jī)制中,用來(lái)表示根據(jù)中斷的結(jié)果,最后暫停安全操作系統(tǒng),而不是留下,因?yàn)榘踩€程已經(jīng)結(jié)束執(zhí)行或由于正常請(qǐng)求而留下。因此,由于通過(guò)中斷暫停安全操作系統(tǒng),步驟15的監(jiān)視程序使用指定返回線程ID(例如,根據(jù)非安全線程N(yùn)SB的請(qǐng)求,由安全操作系統(tǒng)啟動(dòng)的線程的標(biāo)識(shí)符以及其他參數(shù)數(shù)據(jù))的軟件偽中斷,重新進(jìn)入安全操作系統(tǒng)。軟件偽中斷的這些參數(shù)可以作為寄存器值來(lái)傳遞。
在步驟15,軟件偽中斷觸發(fā)安全操作系統(tǒng)的返回中斷處理程序例程。該返回中斷處理程序例程檢查軟件偽中斷的返回線程ID以便確定這是否與在暫停前,最后執(zhí)行安全操作系統(tǒng)時(shí)中斷的安全線程SA的線程ID匹配。在這種情況下,沒(méi)有匹配,因此,在步驟16,觸發(fā)安全操作系統(tǒng)以便在已經(jīng)保存安全線程SA的上下文后,根據(jù)非安全線程N(yùn)SB所指定的,執(zhí)行切換到返回線程的線程。然后,根據(jù)請(qǐng)求,從中斷的點(diǎn)處重啟安全線程SA。
圖27示意性地示例說(shuō)明在圖26中所示的行為的類型的另一例子。在該例子中,盡管在非安全操作系統(tǒng)的控制下,處理執(zhí)行以便處理irq,但沒(méi)有非安全切換,因此當(dāng)安全操作系統(tǒng)的返回中斷處理程序接收到軟件偽中斷時(shí),確定不需要線程切換,在步驟15,僅僅恢復(fù)安全線程SA。
圖28是示意性地示例說(shuō)明由返回線程處理程序執(zhí)行的處理的流程圖。在步驟4002,開(kāi)始返回線程處理程序。在步驟4004,當(dāng)暫停安全操作系統(tǒng)時(shí),檢查來(lái)自軟件偽中斷的返回線程標(biāo)識(shí)符以及與當(dāng)前執(zhí)行的安全線程進(jìn)行比較。如果這些匹配,那么,處理進(jìn)入步驟4006,其中恢復(fù)安全線程。如果在步驟4004,比較得出不匹配,那么處理進(jìn)入步驟4008,其中,在步驟4010執(zhí)行切換到新安全線程前,保存先前的安全線程的上下文(用于后續(xù)恢復(fù))。新線程可能已經(jīng)進(jìn)行,因此步驟4010是恢復(fù)。
圖29示意性地示例說(shuō)明從安全操作系統(tǒng)遵循由主非安全操作系統(tǒng)執(zhí)行的任務(wù)切換的處理。主非安全操作系統(tǒng)可以是傳統(tǒng)的操作系統(tǒng),不具有用于與其他操作系統(tǒng)通信和協(xié)調(diào)其活動(dòng)性的機(jī)制,因此,僅操作為主程序。作為圖29中的起始輸入點(diǎn),非安全操作系統(tǒng)正在執(zhí)行非安全線程N(yùn)SA。使用軟件中斷,該非安全線程N(yùn)SA調(diào)用將由安全操作系統(tǒng)執(zhí)行的安全線程,SMI調(diào)用。在步驟2,SMI調(diào)用進(jìn)入在監(jiān)視模式中執(zhí)行的監(jiān)視程序,由此,在步驟4,監(jiān)視程序在將調(diào)用傳遞到安全操作系統(tǒng)前,執(zhí)行任何必要的上下文保存和切換。然后安全操作系統(tǒng)啟動(dòng)相應(yīng)的安全線程SA。諸如根據(jù)定時(shí)器事件等等的結(jié)果,該安全線程可以經(jīng)監(jiān)視模式,將控制返回到非安全操作系統(tǒng)。當(dāng)在步驟9,非安全線程N(yùn)SA再次將控制傳遞給安全操作系統(tǒng)時(shí),通過(guò)重新發(fā)出原始軟件中斷執(zhí)行此。軟件中斷包括識(shí)別NSA的非安全線程ID、將激活的目標(biāo)安全線程的安全線程ID,即識(shí)別安全線程SA的線程ID以及其他參數(shù)。
當(dāng)通過(guò)監(jiān)視程序傳遞在步驟9生成的調(diào)用并通過(guò)安全操作系統(tǒng),在安全域中,在步驟12接收時(shí),檢查非安全線程ID以便通過(guò)非安全操作系統(tǒng),確定是否具有上下文切換。也可以檢查目標(biāo)線程的安全線程ID以便查看安全操作系統(tǒng)下的正確線程重啟或啟動(dòng)為新線程。在圖29的例子中,通過(guò)安全操作系統(tǒng),在安全域中不要求線程切換。
除在非安全操作系統(tǒng)的控制下,在非安全域中,在步驟9產(chǎn)生線程的切換外,圖30與圖29類似。因此,在步驟11,它是使軟件中斷調(diào)用經(jīng)過(guò)安全操作系統(tǒng)的不同的非安全線程N(yùn)SB。在步驟14,安全操作系統(tǒng)識(shí)別非安全線程N(yùn)SB的不同線程ID,因此,執(zhí)行包含保存安全線程SA的上下文以及開(kāi)始安全線程SB的任務(wù)切換。
圖31是示意性地示例說(shuō)明當(dāng)將軟件中斷接收為啟動(dòng)線程或恢復(fù)安全操作系統(tǒng)的線程的調(diào)用時(shí),由安全操作系統(tǒng)執(zhí)行的處理的流程圖。在步驟4012,接收調(diào)用。在步驟4014,檢查調(diào)用的參數(shù)以便確定它們是否與安全操作系統(tǒng)上的當(dāng)前有效安全線程匹配。如果匹配發(fā)生,那么在步驟4016,重啟該安全線程。如果匹配未發(fā)生,那么處理進(jìn)入步驟4018,其中確定有關(guān)新請(qǐng)求的線程是否可用。由于諸如它是或要求已經(jīng)由正在安全操作系統(tǒng)上執(zhí)行的一些其他線程使用的互斥資源的原因,新請(qǐng)求的線程不可用。在這種情況下,通過(guò)返回給非安全操作系統(tǒng)的適當(dāng)?shù)南?,在步驟4020拒絕調(diào)用。如果在步驟4018確定新線程可用,那么處理進(jìn)入步驟4022,其中為稍后可能的恢復(fù),保存先前的安全線程的上下文。在步驟4024,根據(jù)在對(duì)安全操作系統(tǒng)所做的軟件中斷調(diào)用中所指定的,切換到新安全線程。
圖32示意性地示例說(shuō)明當(dāng)通過(guò)由不同操作系統(tǒng)處理的不同中斷,處理具有多個(gè)操作系統(tǒng)的系統(tǒng)內(nèi)的中斷時(shí),發(fā)生優(yōu)先級(jí)反轉(zhuǎn)的操作。
處理從執(zhí)行安全線程SA的安全操作系統(tǒng)開(kāi)始。然后通過(guò)第一中斷Int1中斷。這觸發(fā)監(jiān)視模式中的監(jiān)視程序確定該中斷將在安全域還是非安全域中處理。在這種情況下,該中斷將在安全域中處理以及處理返回到安全操作系統(tǒng),啟動(dòng)用于中斷Int1的中斷處理例程。到執(zhí)行用于Int1的中斷處理例程的一半時(shí),接收到具有更高優(yōu)先級(jí)的另外的中斷Int2。因此,停止用于Int1的中斷處理程序同,以及監(jiān)視模式中的監(jiān)視程序用來(lái)確定將處理中斷Int2。在這種情況下,將通過(guò)非安全操作系統(tǒng)處理中斷Int2,因此控制傳遞到非安全操作系統(tǒng),以及用于Int2的中斷處理程序啟動(dòng)。當(dāng)用于中斷Int2的中斷處理程序結(jié)束時(shí),非安全操作系統(tǒng)不具有表示在安全域中,有暫停維護(hù)的未決中斷Int2的信息。因此,非安全操作系統(tǒng)會(huì)執(zhí)行一些另外的處理,諸如任務(wù)切換或啟動(dòng)不同的非安全線程N(yùn)SB,同時(shí)最初中斷Int1仍然未處理。
圖33示例說(shuō)明可以避免與圖32的操作有關(guān)的問(wèn)題的技術(shù)。當(dāng)中斷Int1產(chǎn)生時(shí),監(jiān)視程序?qū)⒋藗鬟f到非安全域,其中啟動(dòng)插樁中斷處理程序。該插樁中斷處理程序相對(duì)較小,以及經(jīng)由監(jiān)視模式,快速將處理返回到安全域,以及觸發(fā)安全域內(nèi)用于中斷Int1的中斷處理程序。主要在安全域中處理中斷Int1以及在非安全域中啟動(dòng)插樁中斷處理程序能視為一種插樁符,向非安全域表示該中斷正被掛在安全域中。
用于中斷Int1的安全域中的中斷處理程序再次遇到高優(yōu)先級(jí)Int2。如前所述,這觸發(fā)執(zhí)行非安全域中,用于中斷Int2的中斷處理程序。然而,在這種情況下,當(dāng)用于Int2的那個(gè)中斷處理程序結(jié)束時(shí),非安全操作系統(tǒng)具有表示用于中斷Int1的插樁中斷處理程序仍然未決的數(shù)據(jù),因此,將恢復(fù)該插樁中斷處理程序。該插樁中斷處理程序就象掛在使其調(diào)用回安全域的點(diǎn)處,因此重新執(zhí)行該調(diào)用,從而切換到安全域。一旦回到安全域中,安全域本身能在暫停它的點(diǎn)處,重啟用于中斷Int1的中斷處理程序。當(dāng)在安全域內(nèi),用于中斷Int1的中斷處理程序結(jié)束時(shí),調(diào)用返回到非安全域以便在恢復(fù)最初執(zhí)行安全線程SA前,關(guān)閉非安全域中的插樁中斷處理程序。
圖34示意性地示例說(shuō)明具有它們相關(guān)的優(yōu)先級(jí)和不同類型的中斷和如何處理它們。完全使用提供沒(méi)有由非安全域處理的更高優(yōu)先級(jí)中斷的安全域中斷處理程序,處理高優(yōu)先級(jí)中斷。只要具有比后續(xù)中斷更高優(yōu)先級(jí)以及在非安全域中處理的中斷,那么所有更低中斷必須完全在非安全域中處理或利用圖33所示的插樁中斷處理程序技術(shù),由此非安全域能了解這些中斷,即使它們的大部分處理在安全域內(nèi)發(fā)生。
如前所述,使用監(jiān)視模式來(lái)執(zhí)行安全域和非安全域間的切換。在兩個(gè)不同域間共享寄存器的實(shí)施例中,這包含將那些寄存器內(nèi)的狀態(tài)保存在存儲(chǔ)器中,然后將用于目標(biāo)域的新?tīng)顟B(tài)從存儲(chǔ)器加載到那些寄存器中。對(duì)不在兩個(gè)域間共享的任何寄存器,不必保存狀態(tài),因?yàn)槟切┘拇嫫鲗⒉挥闪硪挥蛟L問(wèn),而狀態(tài)間的切換實(shí)現(xiàn)為安全和非安全域間的直接切換結(jié)果(即,存儲(chǔ)在CP15寄存器的一個(gè)中的S位的值確定使用哪個(gè)非共享寄存器)。
當(dāng)在監(jiān)視模式中時(shí)需要切換的狀態(tài)部分為控制由處理器訪問(wèn)存儲(chǔ)器的處理器配置數(shù)據(jù)。由于每個(gè)域內(nèi),存在存儲(chǔ)器的不同視圖,例如,訪問(wèn)安全存儲(chǔ)器的安全域用于存儲(chǔ)安全數(shù)據(jù),該安全存儲(chǔ)器不能由非安全域訪問(wèn),很顯然,當(dāng)在域間切換時(shí),需要改變處理器配置數(shù)據(jù)。
如圖35所示,該處理器配置數(shù)據(jù)存儲(chǔ)在CP15寄存器34中,以及在一個(gè)實(shí)施例中,在域間這些寄存器是共享的。因此,當(dāng)在安全域和非安全域間切換監(jiān)視模式時(shí),當(dāng)前在CP15寄存器34中的處理器配置數(shù)據(jù)需要從CP15寄存器移入到存儲(chǔ)器中,而與目標(biāo)域有關(guān)的處理器配置數(shù)據(jù)需要加載到CP15寄存器34中。
由于CP15中的處理器配置數(shù)據(jù)通常對(duì)訪問(wèn)系統(tǒng)內(nèi)的存儲(chǔ)器具有迅速影響,因此,很顯然當(dāng)在監(jiān)視模式中操作時(shí),通過(guò)處理器更新它們,這些設(shè)定值迅速有效。然而,這不是所期望的,因?yàn)槠谕O(jiān)視模式具有當(dāng)在監(jiān)視模式中時(shí),控制訪問(wèn)存儲(chǔ)器的靜態(tài)處理器配置數(shù)據(jù)集。
因此,如圖35所示,在本發(fā)明的一個(gè)實(shí)施例中,提供監(jiān)視模式專用處理器配置數(shù)據(jù)2000,能用來(lái)當(dāng)處理器在監(jiān)視模式中操作時(shí),覆蓋CP15寄存器34中的處理器配置數(shù)據(jù)。通過(guò)提供在其輸入處接收存儲(chǔ)在CP15寄存器中的處理器配置數(shù)據(jù)和監(jiān)視模式專用處理器配置數(shù)據(jù)2000的復(fù)用器2010,在圖35所示的實(shí)施例中實(shí)現(xiàn)。此外,復(fù)用器2010在路徑2015上接收表明處理器是否正在監(jiān)視模式中操作的控制信號(hào)。如果處理器不在監(jiān)視模式中操作,那么將CP15寄存器34中的處理器配置數(shù)據(jù)輸出到系統(tǒng),但在處理器在監(jiān)視模式中操作的情況下,復(fù)用器2010反而輸出監(jiān)視模式專用處理器配置數(shù)據(jù)2000以確保處理器正在監(jiān)視模式中操作時(shí),應(yīng)用相符的處理器配置數(shù)據(jù)集。
能在系統(tǒng)內(nèi)對(duì)監(jiān)視模式專用處理器配置數(shù)據(jù)盡心硬編碼,從而確保不能操作它。然而,假定當(dāng)在安全特許模式中操作時(shí),僅能修改監(jiān)視模式專用處理器配置數(shù)據(jù),則能編程監(jiān)視模式專用處理器配置數(shù)據(jù)2000,而不損害安全性。這提供有關(guān)監(jiān)視模式專用處理器配置數(shù)據(jù)的設(shè)定值的一些靈活性。如果監(jiān)視模式處理器配置數(shù)據(jù)配置成可編程,能將配置數(shù)據(jù)存儲(chǔ)在系統(tǒng)內(nèi)的適當(dāng)?shù)胤剑鏑P15寄存器34內(nèi)的單獨(dú)的寄存器集中。
典型地,將設(shè)置監(jiān)視模式專用處理器配置數(shù)據(jù)以便提供用于在監(jiān)視模式中操作處理器的非常安全的環(huán)境。因此,在上述實(shí)施例中,監(jiān)視模式專用處理器配置數(shù)據(jù)可以指定當(dāng)處理器正在監(jiān)視模式中操作時(shí),禁止存儲(chǔ)器配置單元30,從而禁止可以由存儲(chǔ)器管理單元應(yīng)用的任何虛擬到物理地址轉(zhuǎn)換。在這種情況下,總是將處理器配置成當(dāng)發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求時(shí),直接發(fā)送物理地址,即,將采用單調(diào)映射。這確保處理器正在監(jiān)視模式中操作時(shí),能可靠地訪問(wèn)存儲(chǔ)器,而與是否已經(jīng)篡改任何虛擬到物理地址映射無(wú)關(guān)。
監(jiān)視模式專用處理器配置數(shù)據(jù)通常還指定當(dāng)處理器正在監(jiān)視模式中操作時(shí),允許處理器訪問(wèn)安全數(shù)據(jù)。這最好通過(guò)采用域狀態(tài)位的存儲(chǔ)器允許數(shù)據(jù)指定,該域狀態(tài)位具有將為安全處理器配置數(shù)據(jù)內(nèi)的相應(yīng)的域狀態(tài)位(“S”位)指定的相同值。因此,不管存儲(chǔ)在CP15寄存器內(nèi)的域狀態(tài)位的實(shí)際值如何,通過(guò)由監(jiān)視模式專用處理器配置數(shù)據(jù)指定的域狀態(tài)位覆蓋那個(gè)值,以確保監(jiān)視模式訪問(wèn)安全數(shù)據(jù)。
監(jiān)視模式專用處理器配置數(shù)據(jù)也指定用來(lái)控制訪問(wèn)部分存儲(chǔ)器的其他數(shù)據(jù)。例如,監(jiān)視模式專用處理器配置數(shù)據(jù)可以指定當(dāng)處理器正在監(jiān)視模式中操作時(shí),不使用高速緩存38來(lái)訪問(wèn)數(shù)據(jù)。
在上述實(shí)施例中,已經(jīng)假定包含處理器配置數(shù)據(jù)的所有CP15寄存器在域間共享。然而,在上述實(shí)施例中,“成組”多個(gè)CP15寄存器,以便例如具有用于存儲(chǔ)處理器配置數(shù)據(jù)的特定項(xiàng)的兩個(gè)寄存器,一個(gè)寄存器可在非安全域中訪問(wèn)以及包含用于非安全域的處理器配置數(shù)據(jù)的那個(gè)項(xiàng)的值,以及另一個(gè)寄存器可在安全域中訪問(wèn)以及包含用于安全域的處理器配置數(shù)據(jù)的那個(gè)項(xiàng)的值。
將不成組的一個(gè)CP15寄存器是包含“S”位,但原理上,如果需要的話,可以對(duì)任何其他CP15寄存器進(jìn)行成組。在這些實(shí)施例中,通過(guò)監(jiān)視模式切換處理器配置數(shù)據(jù)包含使當(dāng)前在那些共享寄存器中的處理器配置數(shù)據(jù)從任何共享CP15寄存器移入存儲(chǔ)器,以及將與目標(biāo)域有關(guān)的處理器配置數(shù)據(jù)加載到那些共享CP15寄存器。對(duì)任何成組寄存器,處理器配置數(shù)據(jù)不需要存儲(chǔ)在存儲(chǔ)器外,相反根據(jù)改變存儲(chǔ)在相關(guān)共享CP15寄存器中的S位值的結(jié)果,將自動(dòng)發(fā)生切換。
如前所述,監(jiān)視模式處理器配置數(shù)據(jù)將包括覆蓋存儲(chǔ)在相關(guān)CP15寄存器中的域狀態(tài)位,而具有與用于用在安全域中的域狀態(tài)位相同的值(即,在上述實(shí)施例中,S位值為1)。當(dāng)多個(gè)CP15寄存器成組時(shí),這表示能從存儲(chǔ)在成組寄存器中的安全處理器配置數(shù)據(jù)導(dǎo)出圖35中的監(jiān)視模式專用處理器配置數(shù)據(jù)2000的至少一部分,因?yàn)樵谇袚Q過(guò)程期間,那些寄存器內(nèi)容不寫(xiě)到存儲(chǔ)器外。
因此,例如,由于監(jiān)視模式專用處理器配置數(shù)據(jù)將指定域狀態(tài)位以便覆蓋當(dāng)不在監(jiān)視模式中使用的域狀態(tài)位,以及在優(yōu)選實(shí)施例中,這具有與用在安全域中相同的值,這表示選擇訪問(wèn)哪個(gè)成組CP15寄存器的邏輯將允許訪問(wèn)安全成組CP15寄存器。通過(guò)允許監(jiān)視模式將該安全處理器配置數(shù)據(jù)用作監(jiān)視模式專用處理器配置數(shù)據(jù)的相關(guān)部分,能實(shí)現(xiàn)節(jié)省資源,因?yàn)椴辉傩枰峁┯糜诒O(jiān)視模式專用處理器配置數(shù)據(jù)的那些項(xiàng)的單獨(dú)的寄存器集。
圖36是示例說(shuō)明當(dāng)要求在一個(gè)域和另一個(gè)間轉(zhuǎn)變時(shí),切換處理器配置數(shù)據(jù)所執(zhí)行的步驟的流程圖。如前所述,發(fā)出SMI指令以便促使域間的轉(zhuǎn)變。因此,在步驟2020,等待發(fā)出SMI指令。當(dāng)接收到SMI指令時(shí),處理器進(jìn)入步驟2030,其中處理器開(kāi)始在監(jiān)視模式中運(yùn)行監(jiān)視程序,根據(jù)進(jìn)入多路復(fù)用器2010中,導(dǎo)致多路復(fù)用器切換到監(jiān)視模式專用處理器配置數(shù)據(jù)的路徑2015上的控制信號(hào),引發(fā)監(jiān)視模式專用處理器配置數(shù)據(jù)的使用。如前所述,這能是獨(dú)立的數(shù)據(jù)集,或能從存儲(chǔ)在成組寄存器中的安全處理器配置數(shù)據(jù)導(dǎo)出的某些部分。
此后,在步驟2040,從將SMI指令發(fā)出到存儲(chǔ)器中的域,保存當(dāng)前狀態(tài),這包括從任何共享CP15寄存器保存與那個(gè)域有關(guān)的處理器配置數(shù)據(jù)的狀態(tài)。通常,存在除存儲(chǔ)這些狀態(tài)外設(shè)置的一部分存儲(chǔ)器。然后,在步驟2050,該狀態(tài)指針切換到包含用于目標(biāo)域的相應(yīng)狀態(tài)的部分存儲(chǔ)器。因此,通常,存在為存儲(chǔ)狀態(tài)信息而分配的兩個(gè)存儲(chǔ)器部分,一個(gè)分配用于存儲(chǔ)用于非安全域的狀態(tài),以及一個(gè)分配用于存儲(chǔ)用于安全域的狀態(tài)。
一旦在步驟2050切換狀態(tài)指針,在步驟2060,現(xiàn)在將由狀態(tài)指針指向的那個(gè)狀態(tài)加載到相關(guān)共享CP15寄存器,這包括將用于目標(biāo)域的配置數(shù)據(jù)加載在相關(guān)處理器中。此后,在步驟2070,退出監(jiān)視程序,如在監(jiān)視模式中,然后,處理器切換到目標(biāo)域中的所需模式。
圖37更詳細(xì)地示例說(shuō)明本發(fā)明的一個(gè)實(shí)施例的存儲(chǔ)器管理邏輯30的操作。存儲(chǔ)器管理邏輯由存儲(chǔ)器管理單元(MMU)200和存儲(chǔ)器保護(hù)單元(MPU)220組成。在路徑234上,由內(nèi)核10發(fā)出、指定虛擬地址的任何存儲(chǔ)器訪問(wèn)請(qǐng)求傳遞到MMU200,MMU200負(fù)責(zé)執(zhí)行預(yù)定訪問(wèn)控制功能,更具體地說(shuō),用于確定對(duì)應(yīng)于那個(gè)虛擬地址的物理地址,以及用于決定訪問(wèn)許可權(quán)和確定區(qū)域?qū)傩浴?br>
數(shù)據(jù)處理裝置的存儲(chǔ)器系統(tǒng)由安全存儲(chǔ)器和非安全存儲(chǔ)器組成,當(dāng)內(nèi)核或其他設(shè)備正在安全操作模式中操作,相應(yīng)地,在安全域中操作時(shí),安全存儲(chǔ)器用來(lái)存儲(chǔ)僅用來(lái)由內(nèi)核10,或一個(gè)或多個(gè)其他主設(shè)備訪問(wèn)的安全數(shù)據(jù)。
在圖37所示的本發(fā)明的實(shí)施例中,通過(guò)MPU220內(nèi)的分區(qū)校驗(yàn)器222,執(zhí)行通過(guò)在非安全模式中,在內(nèi)核10上運(yùn)行的應(yīng)用程序,訪問(wèn)安全存儲(chǔ)器中的安全數(shù)據(jù)的嘗試控制,MPU220受安全操作系統(tǒng),在此也稱為安全核心管理。
根據(jù)本發(fā)明的優(yōu)選實(shí)施例,在非安全存儲(chǔ)器內(nèi),例如外部存儲(chǔ)器56的非安全存儲(chǔ)器部分內(nèi)提供非安全頁(yè)表58,以及用來(lái)存儲(chǔ)用于在那個(gè)頁(yè)表內(nèi)定義的多個(gè)非安全存儲(chǔ)器區(qū)的每一個(gè)的相應(yīng)的描述符。
描述符包含信息,MMU200能從該信息導(dǎo)出允許MMU執(zhí)行預(yù)定訪問(wèn)控制功能所需的控制信息,因此,在參考圖37所述的實(shí)施例中,將提供有關(guān)虛擬到物理地址映射、訪問(wèn)許可權(quán)以及任何區(qū)域?qū)傩缘男畔ⅰ?br>
此外,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,在存儲(chǔ)器系統(tǒng)的安全存儲(chǔ)器內(nèi),例如外部存儲(chǔ)器56的安全部分內(nèi)提供至少一個(gè)安全頁(yè)表58,再次提供用于在表內(nèi)定義的多個(gè)存儲(chǔ)區(qū)的相關(guān)描述符。當(dāng)處理器在非安全模式中操作時(shí),引用非安全頁(yè)表以便獲得用在管理存儲(chǔ)器訪問(wèn)中的相關(guān)描述符,同時(shí)當(dāng)處理器正在安全模式中操作時(shí),將使用來(lái)自安全頁(yè)表的描述符。
從MMU中的相關(guān)頁(yè)表檢索描述符如下。在內(nèi)核10發(fā)出的存儲(chǔ)器訪問(wèn)請(qǐng)求指定虛擬地址的情況下,在存儲(chǔ)用于多個(gè)虛擬地址部分的一個(gè)的從相關(guān)頁(yè)表獲得的相應(yīng)的物理地址部分的微TLB206中,執(zhí)行查找。因此,微TLB206將虛擬地址的某些部分與存儲(chǔ)在微TLB中的相應(yīng)的虛擬地址進(jìn)行比較以便確定是否有匹配。所比較的部分通常是一些預(yù)定多個(gè)虛擬地址的最高有效位,位數(shù)由頁(yè)表58內(nèi)的頁(yè)的粒度而定。在微TLB206內(nèi)執(zhí)行的查找通常相對(duì)較快,因?yàn)槲LB206將僅包括相當(dāng)少量條目,例如八個(gè)條目。
在微TLB206中沒(méi)有發(fā)現(xiàn)匹配的情況下,那么在路徑242上,將存儲(chǔ)器訪問(wèn)請(qǐng)求傳送到包含從頁(yè)表獲得的多個(gè)描述符的主TLB208。如隨后所作更詳細(xì)的討論,來(lái)自非安全頁(yè)表和安全頁(yè)表的描述符能共存于主TLB208中,以及主TLB內(nèi)的每個(gè)條目具有可設(shè)置來(lái)表示已經(jīng)從安全頁(yè)表還是非安全頁(yè)表獲得那個(gè)輸入中的相應(yīng)的描述符的相應(yīng)的標(biāo)記(稱為主標(biāo)記)。在所有安全操作模式直接指定它們的存儲(chǔ)器訪問(wèn)請(qǐng)求內(nèi)的物理地址的任何實(shí)施例中,將意識(shí)到在主TLB內(nèi)不需要這一標(biāo)記,因?yàn)橹鱐LB將僅存儲(chǔ)非安全描述符。
在主TLB208內(nèi),執(zhí)行類似的查找過(guò)程以便確定在存儲(chǔ)器訪問(wèn)請(qǐng)求內(nèi)發(fā)出的虛擬地址的相關(guān)部分是否對(duì)應(yīng)于與操作的特定模式有關(guān)、與主TLB208中的描述符有關(guān)的虛擬地址部分的任何一個(gè)。因此,如果內(nèi)核10正在非安全模式中操作,將僅校驗(yàn)已經(jīng)從非安全頁(yè)表獲得的、主TLB208內(nèi)的那些描述符,而如果內(nèi)核10正在安全模式中操作,將僅校驗(yàn)已經(jīng)從安全頁(yè)表獲得的主TLB內(nèi)的描述符。
如果根據(jù)那個(gè)校驗(yàn)過(guò)程的結(jié)果,在主TLB中有命中,那么從相關(guān)描述符提取訪問(wèn)控制信息并在路徑242上傳回。特別地,在路徑242上,將描述符的虛擬地址部分和相應(yīng)的物理地址部分傳送到微TLB206,用于存儲(chǔ)在微TLB的條目中,將訪問(wèn)許可權(quán)加載到訪問(wèn)許可邏輯202中,以及將區(qū)域?qū)傩约虞d到區(qū)域?qū)傩赃壿?04中,使訪問(wèn)許可邏輯202和區(qū)域?qū)傩赃壿?04與微TLB分開(kāi),或可以包含在微TLB中。
在這一點(diǎn)上,然后,MMU200能處理存儲(chǔ)請(qǐng)求,因?yàn)楝F(xiàn)在在微TLB206內(nèi)有命中。因此,微TLB206將生成物理地址,然后,在路徑238上輸出到系統(tǒng)總線40上,用于傳送到相關(guān)存儲(chǔ)器,這將是片上存儲(chǔ)器,諸如TCM36、高速緩存38等等,或可經(jīng)外部總線接口42訪問(wèn)的外部存儲(chǔ)單元的一個(gè)。此時(shí),訪問(wèn)許可邏輯202將確定是否允許存儲(chǔ)器訪問(wèn),以及如果確定在當(dāng)前操作模式中,不允許內(nèi)核訪問(wèn)特定存儲(chǔ)單元,在路徑230上,將中止信號(hào)發(fā)送回內(nèi)核10。例如,當(dāng)內(nèi)核正在監(jiān)督模式中操作時(shí),某些存儲(chǔ)器部分,不管是在安全存儲(chǔ)器還是非安全存儲(chǔ)器中,可以指定為僅可由那個(gè)內(nèi)核訪問(wèn),因此,如果當(dāng)在例如用戶模式中時(shí),內(nèi)核10正嘗試訪問(wèn)該存儲(chǔ)單元,訪問(wèn)許可邏輯202將檢測(cè)內(nèi)核10當(dāng)前不具有適當(dāng)?shù)脑L問(wèn)權(quán),以及將在路徑230上發(fā)出中止信號(hào)。這將導(dǎo)致中止存儲(chǔ)器訪問(wèn)。最后,區(qū)域?qū)傩赃壿?04將確定用于特定存儲(chǔ)器訪問(wèn)的區(qū)域?qū)傩?,諸如訪問(wèn)是否能高速緩存、可緩存等等,以及將在路徑232上發(fā)出這些信號(hào),然后,將使用它們來(lái)確定例如在高速緩存38內(nèi),是否能高速緩存存儲(chǔ)器訪問(wèn)請(qǐng)求的主題的數(shù)據(jù),在寫(xiě)入訪問(wèn)的情況下,是否能緩沖寫(xiě)入數(shù)據(jù)等等。
在主TLB208內(nèi)沒(méi)有命中的情況下,那么使用轉(zhuǎn)換表行程邏輯(walklogic)210來(lái)訪問(wèn)相關(guān)頁(yè)表58以便在路徑248上檢索所需描述符,然后在路徑246上,將那個(gè)描述符傳遞到主TLB208,將其存儲(chǔ)在其中。用于非安全頁(yè)表和安全頁(yè)表的基地址將存儲(chǔ)在CP15的寄存器34內(nèi),以及在CP15的寄存器內(nèi),還將設(shè)置處理器內(nèi)核10正在操作的當(dāng)前域,即安全域或非安全域,當(dāng)在非安全域和安全域間發(fā)生轉(zhuǎn)換,或反之亦然時(shí),通過(guò)監(jiān)視模式設(shè)置那個(gè)域狀態(tài)寄存器。域狀態(tài)寄存器的內(nèi)容在此稱為域位。因此,如果需要執(zhí)行轉(zhuǎn)換表行程過(guò)程,轉(zhuǎn)換表行程邏輯210將知道內(nèi)核10正在哪個(gè)域中操作,因此,其基地址用來(lái)訪問(wèn)相關(guān)表。然后將虛擬地址用作基地址的偏移以便訪問(wèn)適當(dāng)頁(yè)表內(nèi)的適當(dāng)項(xiàng),從而獲得所需描述符。
一旦通過(guò)轉(zhuǎn)換表行程邏輯210檢索到描述符,并放在主TLB208內(nèi),那么在主TLB內(nèi)獲得命中,以及調(diào)用先前描述的過(guò)程來(lái)檢索訪問(wèn)控制信息,以及將其存儲(chǔ)在微TLB206、訪問(wèn)許可邏輯202和區(qū)域?qū)傩赃壿?04內(nèi)。然后通過(guò)MMU200能對(duì)存儲(chǔ)器訪問(wèn)起作用。
如前所述,在優(yōu)選實(shí)施例中,主TLB208能存儲(chǔ)來(lái)自安全頁(yè)表和非安全頁(yè)表的描述符,但一旦相關(guān)信息存儲(chǔ)在主TLB206內(nèi),僅由MMU200處理存儲(chǔ)器訪問(wèn)請(qǐng)求。在優(yōu)選實(shí)施例中,通過(guò)位于MPU220內(nèi)的分區(qū)校驗(yàn)器222監(jiān)視主TLB208和微TLB206間的信息傳送,以確保在內(nèi)核10正在非安全模式中操作的情況下,不會(huì)有訪問(wèn)控制信息從主TLB208內(nèi)的描述符傳送到微TLB206,如果會(huì)導(dǎo)致在安全存儲(chǔ)器內(nèi)生成物理地址的話。
由能位于CP15的寄存器34內(nèi)、劃分定義安全和非安全存儲(chǔ)器間的分區(qū)的信息的安全操作系統(tǒng)管理存儲(chǔ)器保護(hù)單元。然后,分區(qū)校驗(yàn)器222能引用那個(gè)分區(qū)信息以便確定訪問(wèn)控制信息是否正傳送到在非安全模式中,允許內(nèi)核10訪問(wèn)安全存儲(chǔ)器的微TLB206。更具體地說(shuō),在優(yōu)選實(shí)施例中,當(dāng)內(nèi)核10正在非安全操作模式中時(shí),如用由CP15域狀態(tài)寄存器內(nèi)的監(jiān)視模式設(shè)置的域位所示,分區(qū)校驗(yàn)器222能經(jīng)路徑244監(jiān)視正試圖從主TLB208恢復(fù)到微TLB206中的任何物理地址部分以及確定基于那個(gè)物理地址部分,對(duì)虛擬地址產(chǎn)生的物理地址是否在安全存儲(chǔ)器內(nèi)。在這種情況下,分區(qū)校驗(yàn)器222將在路徑230上向內(nèi)核10發(fā)出中止信號(hào)以防止發(fā)生存儲(chǔ)器訪問(wèn)。
將意識(shí)到,另外,能將分區(qū)校驗(yàn)器222配置成真正防止那個(gè)物理地址部分存儲(chǔ)在微TLB206中,或者,物理地址部分仍然位于微TLB206內(nèi),但中止過(guò)程部分將通過(guò)例如刷新微TLB206,從微TLB206移出那個(gè)不正確的物理地址部分。
只要內(nèi)核10經(jīng)監(jiān)視模式,在操作的非安全模式和安全模式間改變時(shí),監(jiān)視模式將改變CP15域狀態(tài)寄存器內(nèi)的域位值,以表示處理器的操作正在改變到該域中。作為域間傳送過(guò)程的一部分,將刷新微TLB206,因此,在安全域和非安全域間的轉(zhuǎn)換后的第一存儲(chǔ)器訪問(wèn)將在微TLB206中產(chǎn)生未命中,以及要求直接或經(jīng)從相關(guān)頁(yè)表檢索相關(guān)描述符,從TLB208檢索訪問(wèn)信息。
通過(guò)上述方法,將意識(shí)到分區(qū)校驗(yàn)器222將確保當(dāng)內(nèi)核正在非安全域中操作時(shí),如果嘗試使允許訪問(wèn)安全存儲(chǔ)器的訪問(wèn)控制信息恢復(fù)到微TLB206,將產(chǎn)生存儲(chǔ)器訪問(wèn)中止。
如果在處理器內(nèi)核10的任何操作模式中,將存儲(chǔ)器訪問(wèn)請(qǐng)求配置成直接指定物理地址,那么,在那個(gè)操作模式中,將禁止MMU200,以及在路徑236上,將物理地址傳送到MPU220中,在安全操作模式中,訪問(wèn)許可邏輯224和區(qū)域?qū)傩赃壿?26將基于對(duì)CP15內(nèi)的分區(qū)信息寄存器34內(nèi)的相應(yīng)區(qū)識(shí)別的訪問(wèn)許可權(quán)和區(qū)域?qū)傩?,?zhí)行必要的訪問(wèn)許可和區(qū)域?qū)傩苑治?。如果正嘗試訪問(wèn)的安全存儲(chǔ)單元位于僅在某些操作模式,例如安全特許模式中可訪問(wèn)的部分安全存儲(chǔ)器內(nèi),那么,在不同操作模式,例如安全用戶模式中,內(nèi)核的訪問(wèn)嘗試將使得訪問(wèn)許可邏輯224在路徑230上,用與MMU的訪問(wèn)許可邏輯202在這些情況下產(chǎn)生中止相同的方式,向內(nèi)核生成中止。類似地,區(qū)域?qū)傩赃壿?26將用MMU的區(qū)域?qū)傩赃壿?04以產(chǎn)生用于通過(guò)虛擬地址指定的存儲(chǔ)器訪問(wèn)請(qǐng)求的那些信號(hào)相同的方式,生成可高速緩存和緩沖的信號(hào)。假定允許訪問(wèn),然后,訪問(wèn)請(qǐng)求在路徑240上進(jìn)入到系統(tǒng)總線40上,從該總線傳送到適當(dāng)?shù)拇鎯?chǔ)單元。
對(duì)訪問(wèn)請(qǐng)求指定物理地址的非安全訪問(wèn),經(jīng)路徑236,使訪問(wèn)請(qǐng)求傳送到分區(qū)校驗(yàn)器222,分區(qū)校驗(yàn)器將引用CP15寄存器34內(nèi)的分區(qū)信息,執(zhí)行分區(qū)校驗(yàn)以便確定物理地址是否指定安全存儲(chǔ)器內(nèi)的單元,在這種情況下,在路徑230上將再次產(chǎn)生中止信號(hào)。
現(xiàn)在,將參考圖39和40的流程圖,更詳細(xì)地描述上述存儲(chǔ)器管理邏輯的處理。圖39示例說(shuō)明在內(nèi)核10上運(yùn)行的程序產(chǎn)生虛擬地址的情形,如步驟300所示。由監(jiān)視模式設(shè)置的CP15域狀態(tài)寄存器34內(nèi)的相關(guān)域位將表示內(nèi)核當(dāng)前正在安全域還是非安全域中運(yùn)行。在內(nèi)核正在安全域中運(yùn)行的情況下,處理轉(zhuǎn)移到步驟302,其中在微TLB206內(nèi)執(zhí)行查找以便查看虛擬地址的相關(guān)部分是否與微TLB206內(nèi)的虛擬地址部分相匹配。在步驟302命中的情況下,處理直接轉(zhuǎn)移到步驟312,其中訪問(wèn)許可邏輯202執(zhí)行必要的訪問(wèn)分析。在步驟314,然后確定是否有訪問(wèn)許可違反,以及如果有,過(guò)程進(jìn)入步驟316,其中訪問(wèn)許可邏輯202在路徑230上發(fā)出中止。否則,在沒(méi)有這種訪問(wèn)許可違反的情況下,過(guò)程從步驟314進(jìn)入步驟318,其中進(jìn)入存儲(chǔ)器訪問(wèn)。特別地,區(qū)域?qū)傩赃壿?04將在路徑232上輸出必要的可高速緩存和緩沖的屬性,以及微TLB206將在路徑238上發(fā)出物理地址,如前所述。
如果在步驟302,在微TLB中有未命中,那么在步驟304,在主TLB208內(nèi)執(zhí)行查找過(guò)程以便確定所需安全描述符是否存在于主TLB中。如果沒(méi)有,那么,在步驟306執(zhí)行頁(yè)表行程過(guò)程,由此轉(zhuǎn)換表行程邏輯210從安全頁(yè)表獲得所需描述符,如參考圖37所述。然后過(guò)程進(jìn)入步驟308,或在安全描述符已經(jīng)存在于主TLB208中的情況下,直接從步驟304進(jìn)入步驟308。
在步驟308,確定主TLB現(xiàn)在包含有效標(biāo)記的安全描述符,因此,過(guò)程進(jìn)入步驟310,通過(guò)包含物理地址部分的描述符的子部分,加載微TLB。由于內(nèi)核10當(dāng)前正在安全模式中運(yùn)行,不需要分區(qū)校驗(yàn)器222執(zhí)行任何分區(qū)校驗(yàn)功能。
然后處理進(jìn)入步驟312,其中如前所述,執(zhí)行存儲(chǔ)器訪問(wèn)的剩余部分。
在非安全存儲(chǔ)器訪問(wèn)的情況下,過(guò)程從步驟300轉(zhuǎn)到步驟320,其中,在微TLB206內(nèi)執(zhí)行查找過(guò)程以便確定來(lái)自非安全描述符的相應(yīng)物理地址部分是否存在。如果是,那么處理直接轉(zhuǎn)移到步驟336,其中由訪問(wèn)許可邏輯202校驗(yàn)訪問(wèn)許可權(quán)。注意,在該點(diǎn),如果相關(guān)物理地址部分在微TLB內(nèi),假定沒(méi)有安全違反,由于分區(qū)校驗(yàn)器222在其存儲(chǔ)在微TLB中前,有效地控制信息,以致如果信息位于微TLB內(nèi),假定它是適當(dāng)?shù)姆前踩畔⒑苤匾?。只要在步驟336已經(jīng)校驗(yàn)訪問(wèn)許可,處理進(jìn)入步驟338,其中確定是否有任何違反,在任一事件中,在步驟316,發(fā)出訪問(wèn)許可故障中止。否則,處理進(jìn)入步驟318,其中執(zhí)行存儲(chǔ)器訪問(wèn)的剩余部分,如前所述。
在步驟320,在微TLB中沒(méi)有命中的情況下,處理進(jìn)入步驟322,其中在主TLB208中執(zhí)行查找過(guò)程以便確定相關(guān)非安全描述符是否存在。如果沒(méi)有,通過(guò)轉(zhuǎn)換表行程邏輯210,在步驟324執(zhí)行頁(yè)表行程過(guò)程以便使來(lái)自非安全頁(yè)表的必要的非安全描述符恢復(fù)到主TLB208中。然后處理進(jìn)入步驟326,或在步驟322出現(xiàn)主TLB208內(nèi)的命令的情況下,直接從步驟322進(jìn)入步驟326。在步驟326,確定主TLB現(xiàn)在包含用于所述虛擬地址的有效標(biāo)記非安全描述符,然后,在步驟328,分區(qū)校驗(yàn)器222校驗(yàn)將從存儲(chǔ)器訪問(wèn)請(qǐng)求的虛擬地址生成的物理地址(假定描述符內(nèi)的物理地址部分)將指定非安全存儲(chǔ)器中的單元。如果不,即,如果物理地址指向安全存儲(chǔ)器中的單元,那么在步驟330,確定有安全違反,以及處理進(jìn)入步驟331,其中由分區(qū)校驗(yàn)器222發(fā)出安全/非安全故障中止。
然而,如果分區(qū)校驗(yàn)器邏輯222確定沒(méi)有安全違反,過(guò)程進(jìn)入步驟334,其中通過(guò)包含物理地址部分的相關(guān)描述符的子部分,加載微TLB,然后,在步驟336,用先前所述的方式,處理存儲(chǔ)器訪問(wèn)。
現(xiàn)在,參考圖40描述直接發(fā)出物理地址的存儲(chǔ)器訪問(wèn)請(qǐng)求的處理。如前所述,在該情況下,將去激活MMU200,這最好通過(guò)在CP15寄存器的相關(guān)寄存器內(nèi)設(shè)置MMU允許位來(lái)實(shí)現(xiàn),通過(guò)監(jiān)視模式來(lái)實(shí)現(xiàn)該設(shè)置過(guò)程。其中,在步驟350,內(nèi)核10將生成在路徑236傳遞到MPU220中的物理地址。然后,在步驟352,MPU校驗(yàn)許可以便校驗(yàn)正請(qǐng)求的存儲(chǔ)器訪問(wèn)能處理當(dāng)前操作模式,即用戶、監(jiān)督等等。此外,如果內(nèi)核正在非安全模式中操作,在步驟352,分區(qū)校驗(yàn)器222將校驗(yàn)物理地址是否在非安全存儲(chǔ)器中。然后,在步驟354,確定是否有違反,即,訪問(wèn)許可處理是否顯示違反,或如果在非安全模式中,分區(qū)校驗(yàn)過(guò)程識(shí)別出違反。如果這些違反的任何一個(gè)發(fā)生,那么過(guò)程進(jìn)入步驟356,其中,通過(guò)MPU220,生成訪問(wèn)許可故障中止。將意識(shí)到在某些實(shí)施例中,在兩種中止間沒(méi)有區(qū)別,而在另外的實(shí)施例中,中止信號(hào)能表示它與訪問(wèn)許可故障還是安全故障有關(guān)。
如果在步驟354,未檢測(cè)到違反,過(guò)程進(jìn)入步驟358,其中發(fā)生對(duì)由物理地址識(shí)別的單元的存儲(chǔ)器訪問(wèn)。
在優(yōu)選實(shí)施例中,僅將監(jiān)視模式配置成直接生成物理地址,因此,在所有其他情況下,MMU200將有效以及由存儲(chǔ)器訪問(wèn)請(qǐng)求的虛擬地址生成物理地址將會(huì)發(fā)生,如前所述。
圖38示例說(shuō)明在所有存儲(chǔ)器訪問(wèn)請(qǐng)求指定虛擬地址,因此,在任何操作模式中,不直接生成物理地址的情況下,存儲(chǔ)器管理邏輯的另一實(shí)施例。在這種情況下,將意識(shí)到不需要單獨(dú)的MPU220,而是將分區(qū)校驗(yàn)器222包含在MMU200中。這改變除外,該處理正好用與參考圖37和39所述的相同方式進(jìn)行。
將意識(shí)到各種其他選擇也是可能的。例如,假定通過(guò)指定虛擬地址的安全和非安全模式發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求,能提供兩個(gè)MMUs,一個(gè)用于安全訪問(wèn)請(qǐng)求以及一個(gè)用于非安全訪問(wèn)請(qǐng)求,即圖37中的MPU220能用完整的MMU代替。在這些情況下,將不需要使用標(biāo)記和每個(gè)MMU的主TLB來(lái)定義描述符是安全還是非安全,因?yàn)橐粋€(gè)MMU將非安全描述符存儲(chǔ)在其主TLB中,以及另一個(gè)MMU將安全描述符存儲(chǔ)在其主TLB中。當(dāng)然,仍然需要分區(qū)校驗(yàn)器來(lái)校驗(yàn)在內(nèi)核處于非安全域中時(shí),是否正嘗試訪問(wèn)安全存儲(chǔ)器。
另外,如果所有存儲(chǔ)器訪問(wèn)請(qǐng)求直接指定物理地址,另外的實(shí)現(xiàn)可以使用兩個(gè)MPUs,一個(gè)用于安全訪問(wèn)請(qǐng)求,一個(gè)用于非安全訪問(wèn)請(qǐng)求。用于非安全訪問(wèn)請(qǐng)求的MPU將具有受分區(qū)校驗(yàn)器控制的其訪問(wèn)請(qǐng)求以確保在非安全模式中,不允許訪問(wèn)安全存儲(chǔ)器。
作為圖37或圖38配置所具有的另一特征,分區(qū)校驗(yàn)器222能配置成執(zhí)行一些分區(qū)校驗(yàn)以便管理轉(zhuǎn)換表行程邏輯210的活動(dòng)性。特別地,如果內(nèi)核當(dāng)前正在非安全域中操作,那么分區(qū)校驗(yàn)器222能配置成只要轉(zhuǎn)換表行程邏輯210正試圖訪問(wèn)頁(yè)表,校驗(yàn)它正在訪問(wèn)非安全頁(yè)表而不是安全頁(yè)表。如果檢測(cè)到違反,最好生成中止信號(hào)。由于轉(zhuǎn)換表行程邏輯210通常通過(guò)將頁(yè)表基地址與通過(guò)存儲(chǔ)器訪問(wèn)請(qǐng)求發(fā)出的虛擬地址的某些位結(jié)合來(lái)執(zhí)行頁(yè)表查找,該分區(qū)校驗(yàn)可以包含例如校驗(yàn)轉(zhuǎn)換表行程邏輯210正使用非安全頁(yè)表的基地址而不是安全頁(yè)表的基地址。
圖41示意性地示例說(shuō)明當(dāng)內(nèi)核10正在非安全模式中操作時(shí),由分區(qū)校驗(yàn)器222執(zhí)行的過(guò)程。將意識(shí)到在正常的操作中,從非安全頁(yè)表獲得的描述符將僅描述在非安全存儲(chǔ)器中映射的頁(yè)。然而,在軟件攻擊的情況下,可以篡改描述符以便現(xiàn)在描述包含存儲(chǔ)器的非安全和安全區(qū)的部分。因此,考慮圖41中的例子,不可靠的非安全描述符可以覆蓋包括非安全區(qū)370、372、374和安全區(qū)376、378和380的頁(yè)。如果作為存儲(chǔ)器訪問(wèn)請(qǐng)求的一部分發(fā)出的虛擬地址對(duì)應(yīng)于安全存儲(chǔ)區(qū)中的物理地址,例如,圖41中所示的安全存儲(chǔ)區(qū)376,那么分區(qū)校驗(yàn)器222配置成生成中止以便防止訪問(wèn)發(fā)生。因此,即使在嘗試訪問(wèn)安全存儲(chǔ)器中損壞非安全描述符,分區(qū)校驗(yàn)器222可防止訪問(wèn)發(fā)生。相反,如果使用該描述符導(dǎo)出的物理地址對(duì)應(yīng)于非安全存儲(chǔ)區(qū),例如圖41中所示的區(qū)域374,那么加載到微TLB206中的訪問(wèn)控制信息僅識(shí)別該非安全區(qū)374。因此,非安全存儲(chǔ)區(qū)374內(nèi)的訪問(wèn)會(huì)發(fā)生,但不會(huì)發(fā)生訪問(wèn)安全區(qū)376、378或380的任何一個(gè)。因此,能看出即使主TLB208可以包含來(lái)自已經(jīng)篡改的非安全頁(yè)表的描述符,微TLB將僅包含將允許訪問(wèn)非安全存儲(chǔ)區(qū)的物理地址部分。
如前所述,在非安全模式或安全模式可以生成指定虛擬地址的存儲(chǔ)器訪問(wèn)請(qǐng)求的實(shí)施例,那么存儲(chǔ)器最好包括非安全存儲(chǔ)器內(nèi)的非安全頁(yè)表,以及安全存儲(chǔ)器內(nèi)的安全頁(yè)表。當(dāng)在非安全模式中,將通過(guò)轉(zhuǎn)換表行程邏輯210引用非安全頁(yè)表,而當(dāng)在安全模式中,將通過(guò)轉(zhuǎn)換表行程邏輯210引用安全頁(yè)表。圖42示例說(shuō)明這兩個(gè)頁(yè)表。如圖42所示,可以位于例如圖1的外部存儲(chǔ)器56中的非安全存儲(chǔ)器390在其中包括通過(guò)引用基地址397,在CP15寄存器34中指定的非安全頁(yè)表395。類似地,在同樣位于圖1的外部存儲(chǔ)器56內(nèi)的安全存儲(chǔ)器400中,提供通過(guò)安全頁(yè)表基地址407,在專用CP15寄存器34內(nèi)指定的相應(yīng)安全頁(yè)表405。非安全頁(yè)表395的每個(gè)描述符將指向非安全存儲(chǔ)器390中的相應(yīng)的非安全頁(yè),而安全頁(yè)表405內(nèi)的每個(gè)描述符將定義安全存儲(chǔ)器400中的相應(yīng)安全頁(yè)。另外,如稍后更詳細(xì)所述,對(duì)存儲(chǔ)器的某些區(qū)域,可以共享可以由非安全模式和安全模式訪問(wèn)的存儲(chǔ)區(qū)410。
圖43更詳細(xì)地示例說(shuō)明根據(jù)優(yōu)選實(shí)施例,在主TLB208內(nèi)執(zhí)行的查找過(guò)程。如前所述,主TLB208包括識(shí)別相應(yīng)的描述符是來(lái)自安全頁(yè)表還是非安全頁(yè)表的安全標(biāo)425。這確保當(dāng)執(zhí)行查找過(guò)程時(shí),將僅校驗(yàn)與內(nèi)核10正在其中操作的特定域有關(guān)的描述符。圖43示例說(shuō)明內(nèi)核正在安全域,也稱為安全區(qū)域中運(yùn)行的例子。如從圖43所看出的,當(dāng)執(zhí)行主TLB208查找時(shí),將導(dǎo)致忽略描述符440,以及僅將描述符445識(shí)別為用于查找過(guò)程的候選。
根據(jù)優(yōu)選實(shí)施例,提供在此也稱為ASID標(biāo)記的另外的過(guò)程ID標(biāo)記430,以便從過(guò)程特定頁(yè)表識(shí)別描述符。因此,過(guò)程P1、P2和P3分別可以具有在存儲(chǔ)器內(nèi)提供的相應(yīng)的頁(yè)表,以及另外可以具有用于非安全操作和安全操作的不同頁(yè)表。另外,將意識(shí)到安全域中的過(guò)程P1、P2和P3可以完全將過(guò)程與非安全域中的過(guò)程P1、P2和P3分開(kāi)。因此,如圖43所示,除當(dāng)要求主TLB查找208時(shí)校驗(yàn)域外,還校驗(yàn)ASID標(biāo)記。
因此,在圖43的例子中,其中在安全域中,執(zhí)行過(guò)程P1,該查找過(guò)程正好識(shí)別主TLB208內(nèi)的兩個(gè)項(xiàng)450,然后根據(jù)那兩個(gè)描述符內(nèi)的虛擬地址部分是否與由存儲(chǔ)器訪問(wèn)請(qǐng)求發(fā)出的虛擬地址的相應(yīng)部分匹配,生成命中或未命中。如果是,那么抽取相關(guān)訪問(wèn)控制信息并傳遞到微TLB206、訪問(wèn)許可邏輯202和區(qū)域?qū)傩赃壿?04。否則,發(fā)生未命中,使用轉(zhuǎn)換表行程邏輯210來(lái)將來(lái)自為安全過(guò)程P1提供的頁(yè)表的所需描述符恢復(fù)到主TLBA208。如本領(lǐng)域的技術(shù)人員將意識(shí)到的,有許多用于管理TLB的內(nèi)容的技術(shù),因此,當(dāng)檢索存儲(chǔ)在主TLB208中的新描述符時(shí),主TLB已經(jīng)滿,可以使用多種已知技術(shù)的任何一個(gè)來(lái)確定從主TLB驅(qū)出哪個(gè)描述符來(lái)為新描述符騰出空位,例如最近使用方法等等。
將意識(shí)到用在操作的安全模式中的安全核心可以開(kāi)發(fā)成與非安全操作系統(tǒng)完全分開(kāi)。然而,在某些情況下,安全核心和非安全操作系統(tǒng)的開(kāi)發(fā)可以緊密結(jié)合在一起,以及在這些情況下,允許安全應(yīng)用程序使用非安全描述符也是適當(dāng)?shù)?。的確,這允許安全應(yīng)用程序通過(guò)僅知道虛擬地址,直接訪問(wèn)非安全數(shù)據(jù)(用于共享)。當(dāng)然,這假定對(duì)特定ASID,安全虛擬映射和非安全虛擬映射是互斥的。在這些情況下,將不需要先前介紹的區(qū)分安全和非安全描述符的標(biāo)記(即域標(biāo)記)。然后,通過(guò)所有可用描述符,執(zhí)行TLB中的查找。
在優(yōu)選實(shí)施例中,通過(guò)在CP15控制寄存器內(nèi)提供的特定位,能設(shè)置主TLB的配置和具有單獨(dú)的安全和非安全描述符的先前描述的配置間的選擇。在優(yōu)選實(shí)施例中,該位僅通過(guò)安全核心設(shè)置。
在直接允許安全應(yīng)用程序使用非安全虛擬地址的實(shí)施例中,將可以從安全域獲得非安全棧指針。這能通過(guò)將識(shí)別非安全棧指針的非安全寄存器值拷貝到CP15寄存器34內(nèi)的專用寄存器來(lái)完成。然后,根據(jù)由安全應(yīng)用程序理解的方案,這將允許非安全應(yīng)用程序經(jīng)棧傳遞參數(shù)。
如前所述,可以將存儲(chǔ)器劃分成非安全和安全部分,以及使用專用于分區(qū)校驗(yàn)器222的CP15寄存器34,控制該分區(qū)?;痉謪^(qū)方法基于如在典型的MPU設(shè)備中定義的區(qū)域訪問(wèn)許可。因此,存儲(chǔ)器劃分成區(qū)域,以及每個(gè)區(qū)域最好用其基地址、大小、存儲(chǔ)器屬性和訪問(wèn)許可來(lái)定義。另外,當(dāng)覆蓋區(qū)域被編程時(shí),上一區(qū)域的屬性獲得最高優(yōu)先級(jí)。另外,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,提供新區(qū)域?qū)傩砸员愣x相應(yīng)區(qū)域位于安全存儲(chǔ)器還是非安全存儲(chǔ)器中。由安全核心使用該新區(qū)域?qū)傩砸员愣x將保護(hù)為安全存儲(chǔ)器的存儲(chǔ)器部分。
在引導(dǎo)階段,如圖44所示,執(zhí)行第一分區(qū)。該初始分區(qū)將定義分配到非安全區(qū)域、非安全操作系統(tǒng)和非安全應(yīng)用程序的存儲(chǔ)器量460。該量對(duì)應(yīng)于在該分區(qū)中定義的非安全區(qū)。然后由非安全操作系統(tǒng)使用該信息,用于其存儲(chǔ)器管理。非安全操作系統(tǒng)不知道定義為安全的存儲(chǔ)器的其余部分462、464。為保護(hù)非安全區(qū)域中的完整性,通過(guò)僅用于安全特許模式的訪問(wèn)許可,編程非安全存儲(chǔ)器。因此,安全應(yīng)用程序?qū)⒉粨p壞非安全應(yīng)用程序。如從圖44所看到的,在該引導(dǎo)階段分區(qū)后,存儲(chǔ)器460可用于由非安全操作系統(tǒng)使用,存儲(chǔ)器462可用于由安全核心使用,以及存儲(chǔ)器464可用于由安全應(yīng)用程序使用。
一旦執(zhí)行引導(dǎo)階段分區(qū),使用MMU200,由非安全操作系統(tǒng)處理非安全存儲(chǔ)器460的存儲(chǔ)器映射,因此,能用常規(guī)方式定義一系列非安全頁(yè)。這如圖45所示。
如果安全應(yīng)用程序需要與非安全應(yīng)用程序共享存儲(chǔ)器,安全內(nèi)核能改變存儲(chǔ)器部分的權(quán)利以便將數(shù)據(jù)從一個(gè)域人工傳送到另一個(gè)。因此,如圖46所示,在校驗(yàn)非安全頁(yè)的完整性后,安全核心改變那個(gè)頁(yè)的權(quán)利以便它變成共享存儲(chǔ)器可訪問(wèn)的安全頁(yè)466。
當(dāng)存儲(chǔ)器的分區(qū)改變后,需要刷新微TLB206。因此,在這種情況下,當(dāng)順序地發(fā)生非安全訪問(wèn)時(shí),在微TLB206中將發(fā)生未命中,因此,將從主TLB208加載新描述符。當(dāng)嘗試將其恢復(fù)到微TLB206中時(shí),由MPU的分區(qū)校驗(yàn)器222順序地校驗(yàn)該新描述符,因此,將與存儲(chǔ)器的新分區(qū)一致。
在優(yōu)選實(shí)施例中,高速緩存38是虛擬索引和物理標(biāo)記的。因此,當(dāng)在高速緩存38中執(zhí)行訪問(wèn)時(shí),將首先在微TLB206中執(zhí)行查找,并因此,對(duì)訪問(wèn)許可,特別是安全和非安全許可進(jìn)行校驗(yàn)。因此,通過(guò)非安全應(yīng)用程序,不能將安全數(shù)據(jù)存儲(chǔ)在高速緩存38中。對(duì)高速緩存38的訪問(wèn)是在由分區(qū)校驗(yàn)器222執(zhí)行的分區(qū)校驗(yàn)的控制之下,因此,在非安全模式中,不能執(zhí)行訪問(wèn)安全數(shù)據(jù)。
然而,會(huì)發(fā)生的一個(gè)問(wèn)題將是非安全域中的應(yīng)用程序,能使用高速緩存操作寄存器來(lái)無(wú)效、清除或刷新該高速緩存。需要保證這些操作將不影響系統(tǒng)的安全性。例如,如果非安全操作系統(tǒng)想使高速緩存38無(wú)效,而不是清除它,任何安全惡劣數(shù)據(jù)數(shù)據(jù)在替換前,必須寫(xiě)到外部存儲(chǔ)器。最好,在高速緩存中標(biāo)記安全數(shù)據(jù),因此,如果需要的話,能不同地處理。
在優(yōu)選實(shí)施例中,如果通過(guò)非安全程序執(zhí)行“通過(guò)地址使行無(wú)效”操作,由分區(qū)校驗(yàn)器222校驗(yàn)物理地址,以及如果高速緩存行是安全高速緩存行,操作變?yōu)椤扒宄蜔o(wú)效”操作,從而維護(hù)確保系統(tǒng)的安全性。另外,在優(yōu)選實(shí)施例中,由非安全程序執(zhí)行的所有“通過(guò)索引使行無(wú)效”操作變?yōu)椤巴ㄟ^(guò)索引清除和無(wú)效”操作。類似地,由非安全程序執(zhí)行的所有“無(wú)效全部”操作變?yōu)椤扒宄蜔o(wú)效全部”操作。
此外,參考圖1,由微TLB206控制通過(guò)DMA32,對(duì)TCM36的任何訪問(wèn)。因此,當(dāng)DMA32在TLB中執(zhí)行查找以便將其虛擬地址翻譯成物理地址時(shí),已經(jīng)增加在主TLB中的先前描述的標(biāo)記允許執(zhí)行所需安全性校驗(yàn),正如已經(jīng)由內(nèi)核10發(fā)出訪問(wèn)請(qǐng)求一樣。另外,如稍后所述,將復(fù)制分區(qū)校驗(yàn)器耦合到外部總線70,最好位于判優(yōu)器/解碼器塊54中,以便如果DMA32直接訪問(wèn)經(jīng)外部總線接口42耦合到外部總線70的存儲(chǔ)器時(shí),連接到外部總線的復(fù)制分區(qū)校驗(yàn)器校驗(yàn)訪問(wèn)的有效性。此外,在某些優(yōu)選實(shí)施例中,能通過(guò)將位增加到CP15寄存器34來(lái)定義DMA控制器32是否能用在非安全域中,當(dāng)操作在特許模式中時(shí),該位僅允許由安全核心設(shè)置。
考慮TCM36,如果安全數(shù)據(jù)位于TCM36中,這必須小心處理。例如,能想像非安全操作系統(tǒng)編程用于TCM存儲(chǔ)器36的物理地址范圍以便它覆蓋外部安全存儲(chǔ)器部分的情形。如果操作模式改變成安全模式,安全核心會(huì)導(dǎo)致數(shù)據(jù)存儲(chǔ)在那個(gè)覆蓋部分,通常,將數(shù)據(jù)存儲(chǔ)在TCM36中,因?yàn)門(mén)CM36通常具有比外部存儲(chǔ)器更高的優(yōu)先級(jí)。如果非安全操作系統(tǒng)改變用于TCM36的物理地址空間的設(shè)定值以便在存儲(chǔ)器的非安全物理區(qū)中映射先前安全區(qū),將意識(shí)到非安全操作系統(tǒng)能訪問(wèn)安全數(shù)據(jù),因?yàn)榉謪^(qū)校驗(yàn)器將該區(qū)域看作非安全并且將不斷言中止。因此,為概述,如果將TCM配置成充當(dāng)常規(guī)本地RAM以及不充當(dāng)智能高速緩存,如果它能將TCM基寄存器移動(dòng)到非安全物理地址,那么非安全操作系統(tǒng)可以讀取安全區(qū)域數(shù)據(jù)。
為防止這種情況下,在優(yōu)選實(shí)施例中,在CP15寄存器34內(nèi)提供控制位,其僅可在安全特許操作模式中訪問(wèn),以及提供兩種可能的配置。在第一種配置中,將該控制位設(shè)置成“1”,在這種情況下,僅能由安全特許模式控制TCM。因此,嘗試的任何非安全訪問(wèn)CP15 34內(nèi)的TCM控制寄存器將導(dǎo)致輸入未定義的指令異常。因此,在該第一實(shí)施例中,安全模式和非安全模式能使用TCM,但僅由安全特許模式控制TCM。在該第二配置中,將控制位設(shè)置成“0”,在這種情況下,由非安全操作系統(tǒng)控制TCM。在這種情況下,僅由非安全應(yīng)用程序使用TCM。任何安全數(shù)據(jù)都不能從TCM存儲(chǔ)或加載。因此,當(dāng)執(zhí)行安全訪問(wèn)時(shí),在TCM內(nèi)不執(zhí)行查看地址是否與TCM地址范圍匹配的查找。
根據(jù)缺省情況,設(shè)想TCM僅由非安全操作系統(tǒng)使用,因?yàn)樵谶@種情況下,不需要改變非安全操作系統(tǒng)。
如前所述,除在MPU220內(nèi)提供分區(qū)校驗(yàn)器222外,本發(fā)明的優(yōu)選實(shí)施例還提供耦合到外部總線70的類似分區(qū)校驗(yàn)塊,該另外的分區(qū)校驗(yàn)器用來(lái)管理由其他主設(shè)備,例如數(shù)字信號(hào)處理器(DSP)50、直接耦合到外部總線的DMA控制器52、經(jīng)外部總線接口42可連接到外部總線的DMA控制器32等等訪問(wèn)存儲(chǔ)器。的確,在一些實(shí)施例中,如稍后所述,可以僅具有耦合到外部(或設(shè)備)總線上的分區(qū)校驗(yàn)塊,以及不提供作為存儲(chǔ)器管理邏輯30的一部分的分區(qū)校驗(yàn)器。在一些這種實(shí)施例中,可以可選地將分區(qū)校驗(yàn)器提供為存儲(chǔ)器管理邏輯30的一部分,在這些實(shí)例中,該分區(qū)校驗(yàn)器能視為除耦合到設(shè)備總線的以外提供的另一分區(qū)校驗(yàn)器。
如前所述,整個(gè)存儲(chǔ)器系統(tǒng)能由幾個(gè)存儲(chǔ)器單元組成,以及多個(gè)這些存儲(chǔ)器單元可以存在于外部總線70上,例如外部存儲(chǔ)器56、引導(dǎo)ROM44或外設(shè),諸如屏幕驅(qū)動(dòng)器46、I/O接口60、鍵存儲(chǔ)單元64等等內(nèi)的實(shí)際緩沖器或寄存器48、62、66上。此外,需要將存儲(chǔ)器系統(tǒng)的不同部分定義為安全存儲(chǔ)器,例如可以期望鍵存儲(chǔ)單元64內(nèi)的鍵緩沖器66處理為安全存儲(chǔ)器。如果耦合到外部總線上的設(shè)備試圖訪問(wèn)該安全存儲(chǔ)器,那么很顯然,在包含在內(nèi)核10中的芯片內(nèi)的先前所述的存儲(chǔ)器管理邏輯30將不能管理該訪問(wèn)。
圖47示例說(shuō)明如何使用耦合到外部總線,在此也稱為設(shè)備總線的另外的分區(qū)校驗(yàn)器492。外部總線通常配置成只要通過(guò)設(shè)備,諸如設(shè)備470、472將存儲(chǔ)器訪問(wèn)請(qǐng)求發(fā)送到那個(gè)外部總線上,那些存儲(chǔ)器訪問(wèn)請(qǐng)求還包括定義操作模式,例如特許、用戶等待的外部總線上的某些信號(hào)。根據(jù)本發(fā)明的優(yōu)選實(shí)施例,存儲(chǔ)器訪問(wèn)請(qǐng)求還包含將域信號(hào)發(fā)送到外部總線上以便識(shí)別該設(shè)備正在安全模式還是非安全模式中操作。最好在硬件級(jí)發(fā)出該域信號(hào),以及在優(yōu)選實(shí)施例中,能在安全或非安全域中操作的設(shè)備將包括用于在外部總線內(nèi)的路徑490上,輸出域信號(hào)的預(yù)定管腳。為示例說(shuō)明目的,該路徑490與外部總線上的其他信號(hào)路徑488分開(kāi)表示。
在此也稱為“S位”的該域信號(hào)將識(shí)別發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求的設(shè)備正在安全域還是非安全域中操作,以及由耦合到外部總線的分區(qū)校驗(yàn)器492接收該信息。分區(qū)校驗(yàn)器492還訪問(wèn)識(shí)別存儲(chǔ)區(qū)為安全還是非安全的分區(qū)信息,因此,能配置成如果斷定S位識(shí)別安全操作模式,僅允許設(shè)備訪問(wèn)存儲(chǔ)器的安全部分。
根據(jù)缺省情況,設(shè)想不斷定S位,因此,預(yù)先存在的非安全設(shè)備,諸如圖47所示的設(shè)備472將不輸出斷言S位,因此,將永不保證分區(qū)校驗(yàn)器492訪問(wèn)存儲(chǔ)器的任何安全部分,不管在屏幕驅(qū)動(dòng)器480的寄存器或緩沖器482、486、I/O接口484還是外部存儲(chǔ)器474內(nèi)。
為方便說(shuō)明,與用來(lái)確定提供存儲(chǔ)器訪問(wèn)請(qǐng)求服務(wù)的適當(dāng)?shù)拇鎯?chǔ)器設(shè)備的解碼器478分開(kāi)說(shuō)明用來(lái)在由主設(shè)備,諸如設(shè)備470、472發(fā)出的存儲(chǔ)器訪問(wèn)請(qǐng)求間判優(yōu)的判優(yōu)器塊476,并與分區(qū)校驗(yàn)器492分開(kāi)。然而,將意識(shí)到如果需要的話,可以在相同單元中集成這些部件的一個(gè)或多個(gè)。
圖48示例說(shuō)明另外的實(shí)施例,其中不提供分區(qū)校驗(yàn)器。相反,將每個(gè)存儲(chǔ)器設(shè)備474、480、484配置成根據(jù)S位值,管理其自身的存儲(chǔ)器訪問(wèn)。因此,如果設(shè)備470想在非安全模式中向標(biāo)記為安全存儲(chǔ)器的屏幕驅(qū)動(dòng)器480內(nèi)的寄存器482提出存儲(chǔ)器訪問(wèn)請(qǐng)求,那么屏幕驅(qū)動(dòng)器480判定S位是不斷言的,以及不處理存儲(chǔ)器訪問(wèn)請(qǐng)求。因此,設(shè)想通過(guò)適當(dāng)?shù)母鞣N存儲(chǔ)器器件的設(shè)計(jì),可以避免在外間總線上單獨(dú)提供分區(qū)校驗(yàn)器492的需要。
在圖47和48的上述描述中,所述“S位”識(shí)別發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求的設(shè)備正在安全域還是非安全域中操作??戳硪环N方法,能將該S位看成表示存儲(chǔ)器訪問(wèn)請(qǐng)求屬于安全域還是非安全域。
在參考圖37和38所述的實(shí)施例中,使用單個(gè)MMU以及單個(gè)頁(yè)表集來(lái)執(zhí)行虛擬地址到物理地址的轉(zhuǎn)換。通過(guò)這種方法,通常用簡(jiǎn)單的方式在非安全存儲(chǔ)器和安全存儲(chǔ)器間分段物理地址空間,如圖49所示。其中,物理地址空間包括從地址0開(kāi)始并延伸到用于存儲(chǔ)器系統(tǒng),例如外部存儲(chǔ)器56內(nèi)的一個(gè)存儲(chǔ)單元的地址Y的地址空間。對(duì)每個(gè)存儲(chǔ)單元,可尋址存儲(chǔ)器通常分成兩部分,第一部分2110分配成非安全存儲(chǔ)器以及第二部分2120分配成安全存儲(chǔ)器。
通過(guò)這種方法,將意識(shí)到存在不能由特定域訪問(wèn)的某些物理地址,以及這些差異對(duì)用在那些域中的操作系統(tǒng)是顯而易見(jiàn)的。同時(shí)用在安全域中的操作系統(tǒng)將了解非安全域,因此,對(duì)此將不關(guān)心,非安全域中的操作系統(tǒng)理論上將不需要了解存在安全域,但相反,應(yīng)當(dāng)就像安全域不存在一樣操作。
作為另外的問(wèn)題,將意識(shí)到非安全操作系統(tǒng)將用于外部存儲(chǔ)器的地址空間看成以地址0開(kāi)始并延伸到地址X,以及非安全操作系統(tǒng)不知道安全核心的任何信息,特別地存在從地址X+1延伸到地址Y的安全存儲(chǔ)器。相反,安全核心將看不見(jiàn)從地址0開(kāi)始的地址空間,這不是操作系統(tǒng)通常所期望的。
在圖51中示意性地示例說(shuō)明通過(guò)允許從其物理地址空間的非安全操作系統(tǒng)的視圖安全隱藏安全存儲(chǔ)區(qū),以及通過(guò)允許安全域中的安全核心和非安全域中的非安全操作系統(tǒng)將用于外部存儲(chǔ)器的它們的地址空間看成從地址0開(kāi)始,避免上述問(wèn)題的一個(gè)實(shí)施例。其中,物理地址空間2200能在頁(yè)組分成安全或非安全段。在圖51所示的例子中,用于外部存儲(chǔ)器的地址空間表示為分成四個(gè)部分2210、2220、2230和2240,由兩個(gè)安全存儲(chǔ)區(qū)和兩個(gè)非安全存儲(chǔ)區(qū)組成。
不是經(jīng)單個(gè)頁(yè)表轉(zhuǎn)換的虛擬地址空間和物理地址空間間的轉(zhuǎn)換,參考第一頁(yè)表和第二頁(yè)表執(zhí)行兩個(gè)單獨(dú)地址層轉(zhuǎn)換,從而允許引入根據(jù)處理器是在安全域還是非安全域中,不同配置的中間地址空間的概念。更具體地說(shuō),如圖51所示,通過(guò)使用在頁(yè)表集2250中的安全頁(yè)表內(nèi)提供的描述符,能將物理地址空間中的兩個(gè)安全存儲(chǔ)區(qū)2210和2230映射到用于安全域的中間地址空間中的單個(gè)區(qū)域2265。關(guān)于所涉及的在處理器上運(yùn)行的操作系統(tǒng),將中間地址空間看成物理地址空間,以及使用MMU來(lái)將虛擬地址轉(zhuǎn)換成中間地址空間內(nèi)的中間地址。
類似地,對(duì)非安全域,能配置中間地址空間2270,其中,經(jīng)頁(yè)表集2250內(nèi)的非安全頁(yè)表中的相應(yīng)的描述符,將物理地址空間中的兩個(gè)非安全存儲(chǔ)區(qū)2220和2240映射到用于非安全域的中間地址空間中的非安全區(qū)2275。
在一個(gè)實(shí)施例中,使用兩個(gè)單獨(dú)的MMU,處理經(jīng)中間地址,將虛擬地址轉(zhuǎn)換成物理地址,如圖50A所示,圖50A中的MMU2150和2170的每一個(gè)能視為用與圖37所示的MMU200類似的方式構(gòu)成,但為方便說(shuō)明,在圖50A中省略某些細(xì)節(jié)。
第一MMU2150包括微TLB2155、主TLB2160和轉(zhuǎn)換表行程邏輯2165,類似地,第二MMU2170包括微TLB2175、主TLB2180和轉(zhuǎn)換表行程邏輯2185。當(dāng)處理器正在非安全域中操作時(shí),通過(guò)非安全操作系統(tǒng)控制第一MMU,或當(dāng)處理器正在安全域中操作時(shí),通過(guò)安全核心控制第一MMU。然而,在優(yōu)選實(shí)施例中,只能由安全核心或者監(jiān)視程序控制第二MMU。
當(dāng)處理器內(nèi)核10發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求時(shí),在路徑2153上,將虛擬地址發(fā)送到微TLB2155。微TLB2155將存儲(chǔ)用于多個(gè)虛擬地址部分的從存儲(chǔ)在主TLB2160內(nèi)的描述符、已經(jīng)從與第一MMU2150有關(guān)的第一頁(yè)表集檢索的主TLB2160中的描述符檢索的相應(yīng)的中間地址部分。如果在微TLB2155中檢測(cè)到命中,那么微TLB2155將在路徑2157上發(fā)送對(duì)應(yīng)于在路徑2153上接收的虛擬地址對(duì)應(yīng)的中間地址。如果在微TLB2155中無(wú)命中,那么將引用主TLB2160來(lái)查看是否在主TLB內(nèi)檢測(cè)到命中,以及如果是的話,將相關(guān)虛擬地址部分和相應(yīng)的中間地址部分恢復(fù)到微TLB2155中,然后,在路徑2157上發(fā)送中間地址。
如果在微TLB2155和主TLB2160中無(wú)命中,那么使用轉(zhuǎn)換表行程邏輯2165來(lái)發(fā)送用于來(lái)自可由第一MMU2150訪問(wèn)的第一頁(yè)表集中的預(yù)定頁(yè)表的所需描述符的請(qǐng)求。典型地,具有與用于安全域或非安全域的單個(gè)處理器有關(guān)的頁(yè)表,以及可由轉(zhuǎn)換表行程邏輯2165訪問(wèn)用于那些頁(yè)表的中間基地址,例如從CP15寄存器34內(nèi)的適當(dāng)寄存器。因此,轉(zhuǎn)換表行程邏輯2165能在路徑2167上發(fā)送中間地址以便從適當(dāng)頁(yè)表請(qǐng)求描述符。
第二MMU2170經(jīng)配置在路徑2157上,由微TLB2155,或在路徑2167上,接收由轉(zhuǎn)換表行程邏輯2165輸出的任何中間地址,以及如果在微TLB2175內(nèi)檢測(cè)到命中,那么,在路徑2192上,微TLB將所需物理地址發(fā)送到存儲(chǔ)器以便在數(shù)據(jù)總線2190上檢索所需數(shù)據(jù)。在路徑2157上發(fā)送中間地址的情況下,這將導(dǎo)致所需數(shù)據(jù)返回到內(nèi)核10,而對(duì)在路徑2167上發(fā)送的中間地址,將導(dǎo)致所需描述符返回到第一MMU2150,用于存儲(chǔ)在主TLB2160中。
在微TLB2175未命中的情況下,將引用主TLB2180,以及如果在主TLB內(nèi)有命中,將所需中間地址部分和相應(yīng)的物理地址部分返回到微TLB2175,然后允許微TLB2175在路徑2192上發(fā)送所需物理地址。然而,在微TLB2175或主TLB2170中均缺少命中的情況下,那么,將轉(zhuǎn)換表行程邏輯2185配置成在路徑2194上輸出從與第二MMU2170有關(guān)的第二頁(yè)表集內(nèi)的相關(guān)頁(yè)表,請(qǐng)求所需描述符。該第二頁(yè)表集包括將中間地址部分與物理地址部分關(guān)聯(lián)的描述符,通常至少存在用于安全域的一個(gè)頁(yè)表和用于非安全域的一個(gè)頁(yè)表。當(dāng)在路徑2194上發(fā)出請(qǐng)求時(shí),將導(dǎo)致來(lái)自第二頁(yè)表集的相關(guān)描述符返回到第二MMU2170,用于存儲(chǔ)在主TLB2180內(nèi)。
現(xiàn)在,通過(guò)如下所述的特定的例子,進(jìn)一步示例說(shuō)明圖50A中所示的實(shí)施例的操作,其中縮寫(xiě)VA表示虛擬地址,IA表示中間地址,以及PA表示物理地址。
1)內(nèi)核發(fā)出VA=3000[IA=5000,PA=7000]2)MMU1的微TLB中的未命中3)MMU1的主TLB中的未命中頁(yè)表1基地址=8000IA[PA=10000]4)MMU1中的轉(zhuǎn)換表行程邏輯執(zhí)行頁(yè)表查找-發(fā)出IA=80035)MMU2的微TLB中的未命中6)MMU2的主TLB中的未命中頁(yè)表2基地址=12000PA7)MMU2中的轉(zhuǎn)換表行程邏輯執(zhí)行頁(yè)表查找-發(fā)出PA=12008“8000IA=10000PA”返回為頁(yè)表數(shù)據(jù)8)-存儲(chǔ)在MMU2的主TLB中9)-存儲(chǔ)在MMU2的微TLB中10)MMU2中的微TLB現(xiàn)在命中-發(fā)出PA=10003“3000VA=5000IA”返回為頁(yè)表數(shù)據(jù)11)-存儲(chǔ)在MMU1的主TLB中12)-存儲(chǔ)在MMU1的微TLB中13)MMU1中的微TLB現(xiàn)在命中-發(fā)出IA=5000來(lái)執(zhí)行數(shù)據(jù)訪問(wèn)14)MMU2的微TLB中的未命中15)MMU2的主TLB中的未命中16)MMU2中的轉(zhuǎn)換表行程邏輯執(zhí)行頁(yè)表查找-發(fā)出PA=12005“5000IA=7000PA”返回為頁(yè)表數(shù)據(jù)17)-存儲(chǔ)在MMU2的主TLB中18)-存儲(chǔ)在MMU2的微TLB中19)MMU2中的微TLB現(xiàn)在命中-發(fā)出PA=7000來(lái)執(zhí)行數(shù)據(jù)訪問(wèn)20)物理地址7000處的數(shù)據(jù)返回到內(nèi)核下次內(nèi)核發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求(假定VA3001..)1)內(nèi)核發(fā)出VA=30012)在MMU1的微TLB中命中,請(qǐng)求發(fā)送到MMU2的IA50013)在MMU2的微TLB中命令,請(qǐng)求發(fā)送到存儲(chǔ)器的PA70014)返回到內(nèi)核的PA7001的數(shù)據(jù)。
將意識(shí)到在上述例子中,在兩個(gè)MMU的微TLB和主TLB中發(fā)生未命中,因此,該例子代表“最壞情況”情形。典型地,期望在微TLB或主TLB的至少一個(gè)中觀察到命中,從而顯著地降低檢索數(shù)據(jù)所花的時(shí)間。
返回到圖51,通常在物理地址空間的某些區(qū),在優(yōu)選實(shí)施例中為安全區(qū)中提供第二頁(yè)表集2250。將第一頁(yè)表集分成兩種,命名為安全頁(yè)表和非安全頁(yè)表。最好,安全頁(yè)表將連續(xù)地出現(xiàn)在中間地址空間2265內(nèi),就象非安全頁(yè)表位于非安全中間地址空間2275中一樣。然而,它們不需要連續(xù)地位于物理地址空間中,因此,例如,用于第一頁(yè)表集的安全頁(yè)表分布在整個(gè)安全區(qū)2210、2230上,用類似的方法,非安全頁(yè)表可以分布在整個(gè)非安全存儲(chǔ)區(qū)2220和2240上。
如前所述,使用兩個(gè)頁(yè)表集的二級(jí)方法的一個(gè)主要好處是對(duì)安全域的操作系統(tǒng)和非安全域的操作系統(tǒng),能將物理地址空間配置成以0開(kāi)始,這是通常操作系統(tǒng)所期望的。另外,從其“物理地址”空間的非安全操作系統(tǒng)看,能完全隱藏安全存儲(chǔ)區(qū),因?yàn)閷⒅虚g地址空間看作其物理地址空間,其能配置具有連續(xù)的中間地址序列。
另外,使用這種方法大大地簡(jiǎn)化在非安全存儲(chǔ)器和安全存儲(chǔ)器間交換存儲(chǔ)區(qū)的處理。這參考圖52來(lái)示意說(shuō)明。如圖52所看到的,例如為單個(gè)存儲(chǔ)頁(yè)的存儲(chǔ)區(qū)2300可以存在于非安全存儲(chǔ)區(qū)2220中,以及類似地,存儲(chǔ)區(qū)2300可以存在于安全存儲(chǔ)區(qū)2210中。然而,能僅通過(guò)交換第二頁(yè)表集內(nèi)的相關(guān)描述符,容易交換這兩個(gè)存儲(chǔ)區(qū)2300和2310,以便區(qū)域2300現(xiàn)在變成映射到安全域的中間地址空間中的區(qū)域2305的安全區(qū),而區(qū)域2310能變成映射到非安全區(qū)的中間地址空間中的區(qū)域2315的非安全區(qū)。對(duì)安全域和非安全域中的操作系統(tǒng)來(lái)說(shuō),完全透明發(fā)生,因?yàn)樗鼈兊奈锢淼刂房臻g的視圖實(shí)際上分別是安全域或非安全域的中間地址空間。因此,該方法避免了重新定義每個(gè)操作系統(tǒng)內(nèi)的物理地址空間。
現(xiàn)在,參考圖50B描述使用兩個(gè)MMU的本發(fā)明的另一實(shí)施例,與圖50A的配置不同。從圖50B與圖50A的比較可以看出,配置幾乎相同,但在該實(shí)施例中,將第一MMU2150配置成執(zhí)行虛擬地址到物理地址轉(zhuǎn)換以及第二MMU配置成執(zhí)行中間地址到物理地址轉(zhuǎn)換。因此,代替從第一MMU2150中的微TLB2155到用在圖50A實(shí)施例中的第二MMU2170中的微TLB2175的路徑2157,將第一MMU中的微TLB2155配置成在路徑2192上直接輸出物理地址,如圖50B所示?,F(xiàn)在,通過(guò)在下文中示出的具體的例子來(lái)示例說(shuō)明在圖50B中所示的實(shí)施例的操作,其詳述相同內(nèi)核存儲(chǔ)器訪問(wèn)請(qǐng)求的處理,如先前對(duì)圖50A實(shí)施例所述。
1)內(nèi)核發(fā)出VA=3000[IA=5000,PA=7000]2)MMU1的微TLB和主TLB中的未命中頁(yè)表1基地址=8000IA[PA=10000]3)MMU1中的轉(zhuǎn)換表行程邏輯執(zhí)行頁(yè)表查找-發(fā)出IA=80034)MMU2的微TLB和主TLB中的未命中頁(yè)表2基地址=12000PA5)MMU2中的轉(zhuǎn)換表行程邏輯執(zhí)行頁(yè)表查找-發(fā)出PA=12008“8000IA=10000PA”返回為頁(yè)表數(shù)據(jù)6)-存儲(chǔ)在MMU2的主和微TLB中的“8000IA=10000PA”映射7)MMU2中的微TLB現(xiàn)在能將來(lái)自步驟(3)的請(qǐng)求轉(zhuǎn)換成PA1003以及發(fā)出提取“3000VA=5000IA”返回為頁(yè)表數(shù)據(jù)注意該轉(zhuǎn)換通過(guò)MMU1保留在臨時(shí)存儲(chǔ)器中,但不直接存儲(chǔ)在任何TLB中。
8)MMU1中的轉(zhuǎn)換表行程邏輯現(xiàn)在向MMU2發(fā)出IA=5000的請(qǐng)求9)MMU2的uTLB和主TLB中的IA5000未命中10)MMU2中的轉(zhuǎn)換表行程邏輯執(zhí)行頁(yè)表查找-發(fā)出PA=12005“5000IA=7000PA”返回為頁(yè)表數(shù)據(jù)11)MMU2將“5000IA=7000PA”存儲(chǔ)在uTLB和和主TLB中。該轉(zhuǎn)換還傳送到MMU1。
12a)MMU2發(fā)出PA=7000存儲(chǔ)器訪問(wèn)12b)MMU1將“3000VA=5000IA”和“5000IA=7000PA”描述符結(jié)合以給出“3000VA=7000PA”描述符,其存儲(chǔ)在MMU1的主TLB和微TLB中。
13)將PA7000處的數(shù)據(jù)返回到內(nèi)核下次內(nèi)核發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求(假定VA3001..)1)內(nèi)核發(fā)出VA=30012)在MMU1的微TLB中命中,MMU1發(fā)出PA=7001請(qǐng)求3)PA7001處的數(shù)據(jù)返回到內(nèi)核。
如從上述例子與圖50A所提供的比較可以看出,主要差別是在步驟7中,其中MMU1不直接存儲(chǔ)第一表描述符,以及在步驟12b(12a和12b能同時(shí)發(fā)生),其中MMU1還接收IA->PA轉(zhuǎn)換以及進(jìn)行結(jié)合并將組合描述符存儲(chǔ)在其TLBs中。
因此,能看出雖然該另一實(shí)施例仍然使用兩個(gè)頁(yè)表集來(lái)將虛擬地址轉(zhuǎn)換成物理地址,微TLB2155和主TLB2160存儲(chǔ)直接虛擬地址到物理地址轉(zhuǎn)換的事實(shí)避免了當(dāng)在微TLB2155或主TLB2160中產(chǎn)生擊中時(shí),在兩個(gè)MMU中執(zhí)行查找的需要。在這些情況下,第一MMU能直接處理來(lái)自內(nèi)核的請(qǐng)求,而不參考第二MMU。
將意識(shí)到第二MMU2170能配置成不包括微TLB2175和主TLB2180,在任一情況下,頁(yè)表行程邏輯2185將用于需要由第二MMU處理的每個(gè)請(qǐng)求。假定對(duì)第二MMU的需求不是很頻繁,這可以節(jié)省第二MMU的復(fù)雜性和成本,達(dá)到可以接受的程度。由于第一MMU需要用于每個(gè)請(qǐng)求,通常有利地將微TLB2155和主TLB2160包括在第一MMU2150中以便提高第一MMU的操作速度。
應(yīng)注意到頁(yè)表中的頁(yè)可以改變大小,因此,用于轉(zhuǎn)換的兩半部分的描述符與不同大小的頁(yè)有關(guān)。典型地,MMU1頁(yè)將小于MMU2頁(yè)但這不一定必須如此。例如表1將在0x40003000的4Kb映射到0x00081000上表2將在0x00000000的1Mb映射到0x02000000上其中,兩個(gè)大小的最小一個(gè)必須用于組合轉(zhuǎn)換,因此,組合描述符是將在0x400030000的4Kb映射到0x02081000上。
然而,其中,在區(qū)域間交換數(shù)據(jù)(如先前參考圖52所述),反向成立是可能的,例如
表1將在0xc0003000的1Mb映射到0x00000000上表2將在0x00042000的4Kb映射到0x02042000上現(xiàn)在,在地址0xc0042010從內(nèi)核查找給出映射將在0xc00420000的4Kb映射到0x02042000上即,兩個(gè)大小的較小一個(gè)總是用于組合映射注意在第二種情況下,處理效率較低,因?yàn)閷⒅貜?fù)查找和放棄表1中的(1Mb)描述符,因?yàn)樵L問(wèn)不同4Kb區(qū)。然而,在典型的系統(tǒng)中,表2描述符將更大(如在第一例子中),大部分時(shí)間更有效(對(duì)指向適當(dāng)IA空間部分的其他4Kb頁(yè),能再循環(huán)1Mb映射)。
作為采用兩個(gè)單獨(dú)的MMU的另一方案,如在圖50A和50B中所示,能使用單個(gè)MMU,如在圖53中所示,其中在主TLB2420未命中時(shí),由MMU產(chǎn)生異常,然后使軟件在內(nèi)核10中運(yùn)行以便基于來(lái)自兩個(gè)不同頁(yè)表集的組合,產(chǎn)生虛擬到物理地址轉(zhuǎn)換。更具體地說(shuō),如圖53所示,內(nèi)核10耦合到MMU2400,其包括微TLB2410和主TLB2420。當(dāng)內(nèi)核10發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求時(shí),在路徑2430上提供虛擬地址,以及如果在微TLB中發(fā)現(xiàn)命中,那么在路徑2440上直接輸出相應(yīng)的物理地址,使得在路徑2450上使數(shù)據(jù)返回到內(nèi)核10中。然而,如果在微TLB2410中有未命中,引用主TLB2420以及如果相關(guān)描述符包含在主TLB中,使相關(guān)虛擬地址部分和相應(yīng)的物理地址部分恢復(fù)到微TLB2410中,其后,在路徑2440上發(fā)送物理地址。然而,如果主TLB也產(chǎn)生未命中,那么在路徑2422上,向內(nèi)核產(chǎn)生異?!,F(xiàn)在,將進(jìn)一步結(jié)合圖54來(lái)描述從接收這一異常,在內(nèi)核中執(zhí)行的過(guò)程。
如圖54所示,如果在步驟2500,由內(nèi)核檢測(cè)到TLB未命中,那么在步驟2510,以用于那個(gè)異常的預(yù)定矢量,內(nèi)核進(jìn)入監(jiān)視模式。因此,這將導(dǎo)致運(yùn)行頁(yè)表合并碼來(lái)執(zhí)行在54所示的剩余步驟。
更具體地說(shuō),在步驟2520,檢索在路徑2430上發(fā)送的,并引起微TLB2410和主TLB2420中的未命中的虛擬地址(在下文中稱為故障虛擬地址),其后,在步驟2530,根據(jù)用于第一表集內(nèi)的適當(dāng)表的中間基地址,確定用于所需第一描述符的中間地址。一旦已經(jīng)確定中間地址(通常由虛擬地址和中間基地址的一些預(yù)定組合),那么參考第二表集內(nèi)的相關(guān)表以便獲得用于第一描述符的相應(yīng)的物理地址。此后,在步驟2550,能從存儲(chǔ)器提取第一描述符以便允許確定用于故障虛擬地址的中間地址。
然后,在步驟2560,再次引用第二表來(lái)查找給出用于故障虛擬地址的中間地址的物理地址的第二描述符。此后,在步驟2570,提取第二描述符以便獲得用于故障虛擬地址的物理地址。
一旦已經(jīng)獲得上述信息,那么程序合并第一和第二描述符以便生成向物理地址轉(zhuǎn)換提供所需的虛擬地址的新描述符,在步驟2580執(zhí)行該步驟。用先前參考圖50B所述的類似的方式,通過(guò)軟件執(zhí)行合并再次使用用于聯(lián)合組合的最小頁(yè)表大小。此后,在步驟2590,將新描述符存儲(chǔ)在主TLB2420內(nèi),此后,在步驟2595,該過(guò)程由于異常返回。
此后,內(nèi)核10將配置成在路徑2430上重新發(fā)出用于存儲(chǔ)器訪問(wèn)請(qǐng)求的虛擬地址,這仍將導(dǎo)致主TLB2410中的未命中,但現(xiàn)在,導(dǎo)致主TLB2420中命中。因此,能使虛擬地址部分和相應(yīng)的物理地址部分恢復(fù)到微TLB2410中,此后,微TLB2410能在路徑2440上發(fā)送物理地址,產(chǎn)生在路徑2450上返回到內(nèi)核10的所需數(shù)據(jù)。
將意識(shí)到,作為先前參考圖50A和50B所述的替代實(shí)施例,使用參考圖53和54所述的原理,能通過(guò)軟件管理那些實(shí)施例中的一個(gè)或兩個(gè)MMU。
不管是否使用兩個(gè)MMU,如圖50A或50B所示,或使用一個(gè)MMU,如圖53所示,當(dāng)操作在監(jiān)視模式中時(shí)(或者在特許安全模式中),由處理器管理第二頁(yè)表集的事實(shí)確保了那些頁(yè)表安全。因此,當(dāng)處理器位于非安全域中時(shí),僅能看見(jiàn)非安全存儲(chǔ)器,因?yàn)楫?dāng)位于非安全域中時(shí),它僅是通過(guò)第二頁(yè)表集,為非安全域產(chǎn)生的、處理器能看見(jiàn)的中間地址。因此,不需要將分區(qū)校驗(yàn)器提供為如圖1所示的存儲(chǔ)器管理邏輯30的一部分。然而,仍然在外部總線上提供分區(qū)校驗(yàn)器以便監(jiān)視由系統(tǒng)中的其他總線主機(jī)進(jìn)行的訪問(wèn)。
在參考圖37和38先前的實(shí)施例中,提供與MMU200有關(guān)的分區(qū)校驗(yàn)器222,因此,當(dāng)在高速緩存38中執(zhí)行訪問(wèn)時(shí),將已經(jīng)首先在微TLB206中執(zhí)行查找,因此,校驗(yàn)訪問(wèn)許可,特別是安全和非安全許可,可能已經(jīng)完成。因此,在這些實(shí)施例中,通過(guò)非安全應(yīng)用程序,安全數(shù)據(jù)不能存儲(chǔ)在高速緩存38中。訪問(wèn)高速緩存38是在由分區(qū)校驗(yàn)器222執(zhí)行分區(qū)校驗(yàn)的控制下,因此,在非安全模式中,不能執(zhí)行訪問(wèn)安全數(shù)據(jù)。
然而,在本發(fā)明的替代實(shí)施例中,不提供用于監(jiān)視在系統(tǒng)總線40上進(jìn)行訪問(wèn)的分區(qū)校驗(yàn)器222,相反數(shù)據(jù)處理裝置僅具有耦合到外部總線70,用于監(jiān)視訪問(wèn)連接到那個(gè)外部總線的存儲(chǔ)器單元的單個(gè)分區(qū)校驗(yàn)器。在這些實(shí)施例中,這意味著處理器內(nèi)核10能訪問(wèn)直接耦合到系統(tǒng)40上的任何存儲(chǔ)器單元,例如TCM36和高速緩存38,而那些訪問(wèn)不受外部分區(qū)校驗(yàn)器控制,因此,需要一些機(jī)制來(lái)確保處理器內(nèi)核10當(dāng)在非安全模式中操作時(shí),不訪問(wèn)高速緩存38或TCM36內(nèi)的安全數(shù)據(jù)。
圖55示例說(shuō)明根據(jù)本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)處理裝置,提供機(jī)制來(lái)允許高速緩存38和/或TCM36來(lái)控制對(duì)它們的訪問(wèn),而不需要提供與MMU200有關(guān)的任何分區(qū)校驗(yàn)邏輯。如圖55所示,經(jīng)MMU200將內(nèi)核10耦合到系統(tǒng)總線40、也耦合到系統(tǒng)總線40上的高速緩存38和TCM36。經(jīng)外部總線接口42,使內(nèi)核10、高速緩存38和TCM36耦合到如圖55所示、由地址總線2620、控制總線2630和數(shù)據(jù)總線2640組成的外部總線70。
能將內(nèi)核10、MMU200、高速緩存38、TCM36和外部總線接口42看作構(gòu)成連接到外部總線70,也稱為設(shè)備總線上的單個(gè)設(shè)備,以及其他設(shè)備也可以耦合到那個(gè)設(shè)備總線,例如安全外圍設(shè)備470或非安全外圍設(shè)備472。在設(shè)備總線70上還連接一個(gè)或多個(gè)存儲(chǔ)器單元,例如外部存儲(chǔ)器56。另外,總線控制單元2650也連接到設(shè)備總線70,以及通常包括判優(yōu)器2652、解碼器2654和分區(qū)校驗(yàn)器2656。對(duì)連接到設(shè)備總線的部件的操作的一般論述,應(yīng)當(dāng)參考先前所述的圖47。在先前所述的圖47中,判優(yōu)器、解碼器和分區(qū)校驗(yàn)器以單獨(dú)的模塊圖示,但當(dāng)位于單個(gè)控制塊2650中時(shí),這些元件用相同方式工作。
在圖56中,更詳細(xì)地示例說(shuō)明圖55的MMU200。通過(guò)圖56和圖37的比較,能看出以完全與圖37的MMU相同的方式構(gòu)成MMU200,唯一區(qū)別在于不提供用于監(jiān)視在主TLB208和微TLB206間,在路徑242上發(fā)送的數(shù)據(jù)的分區(qū)校驗(yàn)器222。如果處理器內(nèi)核10發(fā)出指定虛擬地址的存儲(chǔ)器訪問(wèn)請(qǐng)求,那么經(jīng)MMU200,路由存儲(chǔ)器請(qǐng)求,如參考圖37所述處理,產(chǎn)生在路徑238上,從微TLB206,在系統(tǒng)總線40上輸出的物理地址。相反,如果存儲(chǔ)器訪問(wèn)請(qǐng)求直接指定物理地址,則回避MMU200,經(jīng)路徑236,直接路徑到系統(tǒng)總線40上。在一個(gè)實(shí)施例中,僅當(dāng)處理器正在監(jiān)視模式中操作時(shí),產(chǎn)生直接指定物理地址的存儲(chǔ)器訪問(wèn)請(qǐng)求。
如從MMU200的先前描述可以想到,以及特別地,從圖43的描述,主TLB208將包含多個(gè)描述符,以及對(duì)每個(gè)描述符,將提供域標(biāo)記425以便識(shí)別相應(yīng)的描述是來(lái)自安全頁(yè)表還是非安全頁(yè)表。在圖55的MMU200中,示意性地示例說(shuō)明這些描述符435和相關(guān)的域標(biāo)記425。
當(dāng)內(nèi)核10發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求時(shí),這將產(chǎn)生用于在系統(tǒng)總線40上輸出的那個(gè)存儲(chǔ)器訪問(wèn)請(qǐng)求的物理地址,以及通常高速緩存38將執(zhí)行查找處理來(lái)確定由那個(gè)地址所指定的數(shù)據(jù)項(xiàng)是否存儲(chǔ)在高速緩存中。只要在高速緩存中出現(xiàn)未命中,即,確定經(jīng)受訪問(wèn)請(qǐng)求的數(shù)據(jù)項(xiàng)未存儲(chǔ)在高速緩存中,通過(guò)高速緩存啟動(dòng)行填充過(guò)程以便從外部存儲(chǔ)器56檢索包括存儲(chǔ)器訪問(wèn)請(qǐng)求的主題的數(shù)據(jù)項(xiàng)的數(shù)據(jù)行。特別地,高速緩存經(jīng)EBI42,將行填充請(qǐng)求到設(shè)備總線70的控制總線2630上,以及將起始地址輸出到地址總線2620上。另外,在路徑2632上,將HPROT信號(hào)輸出到控制總線2630上,將包括指定在發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求時(shí),內(nèi)核的操作模式的域信號(hào)。因此,行填充過(guò)程能看作通過(guò)高速緩存38將原始存儲(chǔ)器訪問(wèn)請(qǐng)求傳播到外部總線上。
由分區(qū)校驗(yàn)器2656接收該HPROT信號(hào),因此,分區(qū)校驗(yàn)器將識(shí)別當(dāng)發(fā)出存儲(chǔ)器訪問(wèn)請(qǐng)求時(shí),從外部存儲(chǔ)器56請(qǐng)求指定數(shù)據(jù)的設(shè)備(在這種情況下,包含內(nèi)核10和高速緩存38的設(shè)備)正在安全域還是非安全域中操作。分區(qū)校驗(yàn)器2656還將訪問(wèn)識(shí)別存儲(chǔ)器的那些區(qū)安全或不安全的分區(qū)信息,因此,能確定是否允許設(shè)備訪問(wèn)它正請(qǐng)求的數(shù)據(jù)。因此,能將分區(qū)校驗(yàn)器配置成如果斷言HPROT信號(hào)內(nèi)的域信號(hào)(在此也稱為S位)表示由正在安全操作模式中操作的設(shè)備請(qǐng)求訪問(wèn)該數(shù)據(jù),僅允許設(shè)備訪問(wèn)存儲(chǔ)器的安全部分。
如果分區(qū)校驗(yàn)器確定不允許內(nèi)核10訪問(wèn)所請(qǐng)求的數(shù)據(jù),例如,因?yàn)镠PRTO信號(hào)表示內(nèi)核正在不安全操作模式中操作,但行填充請(qǐng)求正試圖從位于存儲(chǔ)器的安全區(qū)內(nèi)的外部存儲(chǔ)器檢索數(shù)據(jù),那么分區(qū)校驗(yàn)器2656將中止信號(hào)發(fā)送到控制總線2630上,在路徑2636上,將其傳遞回EBI42,以及從此回到高速緩存38,產(chǎn)生在路徑2670上發(fā)送到內(nèi)核10的中止信號(hào)。然而,如果分區(qū)校驗(yàn)器2656確定允許訪問(wèn),那么將輸出表示從外部存儲(chǔ)器檢索的數(shù)據(jù)是安全數(shù)據(jù)還是非安全數(shù)據(jù)的S標(biāo)記信號(hào),以及經(jīng)路徑2634,使該S標(biāo)記信號(hào)傳遞回EBI42,以及從此返回到高速緩存38以允許設(shè)置與行填充過(guò)程的主題,高速緩存行2600有關(guān)的標(biāo)記2602。
同時(shí),控制邏輯2650將授權(quán)外部存儲(chǔ)器56來(lái)輸出所請(qǐng)求的行填充數(shù)據(jù),在路徑2680上,經(jīng)EBI42將該數(shù)據(jù)傳回到高速緩存38,用來(lái)存儲(chǔ)在相關(guān)高速緩存行2600中。因此,作為該過(guò)程的結(jié)果,用來(lái)自外部存儲(chǔ)器56的數(shù)據(jù)項(xiàng)填充高速緩存38內(nèi)的選定的高速緩存行,那些數(shù)據(jù)項(xiàng)包括為來(lái)自內(nèi)核10的原始存儲(chǔ)器訪問(wèn)請(qǐng)求的主題的數(shù)據(jù)項(xiàng)。然后,使來(lái)自內(nèi)核的存儲(chǔ)器訪問(wèn)請(qǐng)求的主題的數(shù)據(jù)項(xiàng)從高速緩存38返回到內(nèi)核,或者在路徑2660上,直接從EBI提供到內(nèi)核10。
在優(yōu)選實(shí)施例中由于根據(jù)上述行填充過(guò)程,將產(chǎn)生在高速緩存中原始存儲(chǔ)數(shù)據(jù),將基于由分區(qū)校驗(yàn)器2656提供的值,設(shè)置與那個(gè)高速緩存行有關(guān)的標(biāo)記2602,然后由高速緩存38使用該標(biāo)記以便直接控制對(duì)那個(gè)高速緩存行2600中的數(shù)據(jù)項(xiàng)的任何后續(xù)訪問(wèn)。因此,如果內(nèi)核10順序地發(fā)出在高速緩存38的特定高速緩存行2600中的命中的存儲(chǔ)器訪問(wèn)請(qǐng)求時(shí),高速緩存38將預(yù)覽相關(guān)標(biāo)記2602的值,并將該值與內(nèi)核10的操作的當(dāng)前模式進(jìn)行比較。在優(yōu)選實(shí)施例中,用由CP15域狀態(tài)寄存器內(nèi)的監(jiān)視模式設(shè)置的域位表示內(nèi)核10的當(dāng)前操作模式。因此,能將高速緩存38配置成當(dāng)處理器內(nèi)核10正在安全操作模式中操作時(shí),僅允許相應(yīng)標(biāo)記2602表示的高速緩存行中的數(shù)據(jù)項(xiàng)是由處理器內(nèi)核10訪問(wèn)的安全數(shù)據(jù)。當(dāng)內(nèi)核正在非安全模式中時(shí),內(nèi)核訪問(wèn)高速緩存38內(nèi)的安全數(shù)據(jù)的任何嘗試將導(dǎo)致高速緩存38在路徑2670上產(chǎn)生中止信號(hào)。
能用各種方式設(shè)置TCM36。在一個(gè)實(shí)施例中,能將其設(shè)置成象高速緩存一樣操作,以及在那個(gè)實(shí)施例中,用與高速緩存38相同的方式,將配置成包括多個(gè)行2610,每個(gè)行具有與之有關(guān)的標(biāo)記2612。然后,用與參考高速緩存38所述的完全相同的方式,管理對(duì)TCM36的訪問(wèn),以及任何TCM未命中產(chǎn)生正執(zhí)行的行填充過(guò)程,作為其結(jié)果,使數(shù)據(jù)恢復(fù)到特定行2610,以及分區(qū)校驗(yàn)器2656將生成所需的S標(biāo)記值,用于存儲(chǔ)在與那個(gè)行2610有關(guān)的標(biāo)記2612中。
在一可選的實(shí)施例中,能將TCM36設(shè)置成外部存儲(chǔ)器56的擴(kuò)展,以及用來(lái)存儲(chǔ)通常由處理器使用的數(shù)據(jù),因?yàn)榻?jīng)系統(tǒng)總線訪問(wèn)TCM通常快于訪問(wèn)外部存儲(chǔ)器。在該實(shí)施例中,TCM36將不使用標(biāo)記2612,相反,將使用不同機(jī)制來(lái)控制對(duì)TCM的訪問(wèn)。特別地,如前所述,在這些實(shí)施例中,提供當(dāng)正在特許安全模式中操作時(shí)可設(shè)置的控制標(biāo)記,表示僅當(dāng)正在特許安全模式中執(zhí)行時(shí),可由處理器控制還是當(dāng)正在至少一個(gè)非安全模式中執(zhí)行時(shí),可由處理器控制緊密耦合存儲(chǔ)器。通過(guò)安全操作系統(tǒng)設(shè)置控制標(biāo)記,以及實(shí)際上,定義TCM受特許安全模式還是受非安全模式控制。因此,能定義的一種結(jié)構(gòu)是僅當(dāng)處理器正在特許安全操作模式中操作時(shí),控制TCM。在這些實(shí)施例中,對(duì)TCM控制寄存器嘗試的任何非安全訪問(wèn)將導(dǎo)致進(jìn)入未定義指令異常。
在一可選的結(jié)構(gòu)中,當(dāng)正在非安全操作模式中操作時(shí),能由處理器控制TCM。在這些實(shí)施例中,僅由非安全應(yīng)用程序使用TCM。不將安全數(shù)據(jù)存儲(chǔ)到TCM或從TCM加載安全數(shù)據(jù)。因此,當(dāng)執(zhí)行安全訪問(wèn)時(shí),在TCM內(nèi)不執(zhí)行查看該地址是否與TCM地址范圍匹配的查找。
圖57是示例說(shuō)明當(dāng)在處理器內(nèi)核10上操作的非安全程序生成虛擬地址時(shí),由圖55的裝置執(zhí)行的處理的流程圖(步驟2700)。首先,在步驟2705,在微TLB206內(nèi)執(zhí)行查找,以及如果該結(jié)果命中,那么微TLB在步驟2730校驗(yàn)訪問(wèn)許可。參考圖56,該過(guò)程能看作由訪問(wèn)許可邏輯202執(zhí)行。
如果在步驟2705,在微TLB查找中出現(xiàn)未命中,那么在其中存儲(chǔ)的非安全描述符中,在主TLB208中執(zhí)行查找(步驟2710)。如果這導(dǎo)致未命中,那么在步驟2715執(zhí)行頁(yè)表行程過(guò)程(已經(jīng)參考圖37描述過(guò))在步驟2720后,確定主TLB包含有效標(biāo)記的非安全描述符。如果在步驟2710查找產(chǎn)生命中,那么過(guò)程直接進(jìn)入步驟2720。
此后,在步驟2725,通過(guò)包含物理地址的描述符部分,加載微TLB,然后在步驟2730,微TLB校驗(yàn)訪問(wèn)許可。
如果在步驟2730,確定有違反訪問(wèn)許可,那么過(guò)程進(jìn)入步驟2740,其中在路徑230上向處理器內(nèi)核發(fā)出中止信號(hào)(與圖55中所示的路徑2670類似)。然而,假定未檢測(cè)到違反,那么在步驟2745,確定訪問(wèn)是否與可高速緩存的數(shù)據(jù)項(xiàng)有關(guān)。如果不,那么在步驟2790啟動(dòng)外部訪問(wèn)以便嘗試從外部存儲(chǔ)器56檢索數(shù)據(jù)項(xiàng)。在步驟2795,分區(qū)校驗(yàn)器25656將確定是否有安全分區(qū)違反,即,如果處理器內(nèi)核10正在非安全模式中操作時(shí),嘗試訪問(wèn)安全存儲(chǔ)器中的數(shù)據(jù)項(xiàng),以及如果檢測(cè)到違反,那么分區(qū)校驗(yàn)器5656將在步驟5775生成中止信號(hào)。然而,假定沒(méi)有安全分區(qū)違反,那么處理器進(jìn)入步驟2785,在步驟2785發(fā)生數(shù)據(jù)訪問(wèn)。
如果在步驟2745,確定正請(qǐng)求的數(shù)據(jù)項(xiàng)能高速緩存,那么在步驟2750,在高速緩存內(nèi)執(zhí)行高速緩存查找,以及如果檢測(cè)到命中,那么在步驟2755,高速緩存確定是否有安全行標(biāo)記違反。因此,在該階段,高速緩存將瀏覽與包含數(shù)據(jù)項(xiàng)的高速緩存行有關(guān)的標(biāo)記2602的值,以及將那個(gè)標(biāo)記的值與內(nèi)核10的操作模式進(jìn)行比較以便確定內(nèi)核是否有權(quán)訪問(wèn)所請(qǐng)求的數(shù)據(jù)項(xiàng)。如果檢測(cè)到安全行標(biāo)記違反,那么過(guò)程進(jìn)入步驟2760,其中由高速緩存38生成安全違反故障中止信號(hào)并在路徑2670上發(fā)送到內(nèi)核10。然而,假定在步驟2755沒(méi)有檢測(cè)到安全行標(biāo)記違反,那么在步驟2785執(zhí)行數(shù)據(jù)訪問(wèn)。
如果當(dāng)在步驟2750執(zhí)行高速緩存查找時(shí),高速緩存未命中存在,那么在步驟2765啟動(dòng)高速緩存行填充。在步驟2770,分區(qū)校驗(yàn)器2656檢測(cè)是否有安全分區(qū)違反,以及如果是,在步驟2775發(fā)出中止信號(hào)。然而,假定未檢測(cè)到安全分區(qū)違反,那么在步驟2780,高速緩存行填充處理,導(dǎo)致在步驟2785結(jié)束數(shù)據(jù)訪問(wèn)。
如圖57所示,在MMU內(nèi)執(zhí)行步驟2705、2710、2715、2720、2725、2730和2735,以及由高速緩存執(zhí)行步驟2745、2750、2755、2765、2780和2790,以及由分區(qū)校驗(yàn)器執(zhí)行步驟2770和步驟2795。
圖58是表示在內(nèi)核上執(zhí)行的安全程序生成虛擬地址的情況下執(zhí)行的類似過(guò)程的流程圖(步驟2800)。通過(guò)將圖58和圖57比較,將意識(shí)到在MMU內(nèi)執(zhí)行的步驟2805至2835與先前參考圖57所述的步驟2705至2735類似。唯一區(qū)別在步驟2710,其中根據(jù)存儲(chǔ)在主TLB內(nèi)的任何安全描述符,執(zhí)行在主TLB內(nèi)執(zhí)行的查找,作為結(jié)果,在步驟2820,主TLB包含有效標(biāo)記的安全描述符。
在高速緩存內(nèi),高速緩存不再需要查找任何安全行標(biāo)記違反,因?yàn)樵趨⒖紙D58所示的實(shí)施例中,假定安全程序能訪問(wèn)安全數(shù)據(jù)和非安全數(shù)據(jù)。因此,如果在步驟2850,在高速緩存查找期間生成命中,那么處理直接進(jìn)入數(shù)據(jù)訪問(wèn)步驟2885。
類似地,在要求外部存儲(chǔ)器的外部訪問(wèn)的情況下(即,在步驟3865或2890),分區(qū)校驗(yàn)器不需要執(zhí)行分區(qū)校驗(yàn),同樣因?yàn)榧俣ò踩绦蚰茉L問(wèn)安全數(shù)據(jù)或非安全數(shù)據(jù)。
在高速緩存內(nèi)執(zhí)行的步驟2845、2850、2865、2880和2890與參考圖57所述的步驟2745、2750、2765、2780和2790類似。
圖59圖示了在處理器上運(yùn)行的不同模式和應(yīng)用程序。虛線表示根據(jù)本發(fā)明的實(shí)施例,在監(jiān)視處理器期間,如何能將不同模式和/或應(yīng)用程序與另一個(gè)分開(kāi)和隔離。
監(jiān)視處理器來(lái)定位可能的故障以及發(fā)現(xiàn)為何應(yīng)用程序不按預(yù)期的那樣執(zhí)行,極為有用,而許多處理器提供這些功能。能用各種方法,包括調(diào)試和跟蹤功能執(zhí)行監(jiān)視。
在根據(jù)當(dāng)前技術(shù)的處理器中,調(diào)試能在包括暫停調(diào)試模式和監(jiān)視調(diào)試模式的幾種模式中操作。這些模式是插入模式并且導(dǎo)致此時(shí)運(yùn)行的程序中止。在暫停調(diào)試模式中,當(dāng)斷點(diǎn)或觀察點(diǎn)出現(xiàn)時(shí),停止內(nèi)核以及與系統(tǒng)的其余部分隔離以及內(nèi)核進(jìn)入調(diào)試狀態(tài)。在進(jìn)入時(shí),停止內(nèi)核,刷新流水線以及不預(yù)提取指令。凍結(jié)PC以及忽略任何中斷(IRQ和FIQ)。然后可以檢查內(nèi)核內(nèi)部狀態(tài)(經(jīng)JTAG串行接口)和存儲(chǔ)器系統(tǒng)狀態(tài)。這種狀態(tài)插入執(zhí)行,因?yàn)榭梢孕薷漠?dāng)前模式,修改寄存器內(nèi)容等等。一旦終止調(diào)試,通過(guò)用重啟指令,通過(guò)調(diào)試TAP(測(cè)試訪問(wèn)端口)掃描,內(nèi)核從調(diào)試狀態(tài)退出。然后程序恢復(fù)執(zhí)行。
在監(jiān)視調(diào)試模式中,斷點(diǎn)或觀察點(diǎn)引發(fā)內(nèi)核進(jìn)入中止模式,分別進(jìn)行預(yù)提取或數(shù)據(jù)中止矢量。在這種情況下,當(dāng)在暫停調(diào)試模式中時(shí),內(nèi)核仍然在處于功能模式,并且不停止。中止處理程序與調(diào)試程序應(yīng)用程序通信以便訪問(wèn)處理器和處理器狀態(tài)或轉(zhuǎn)儲(chǔ)存儲(chǔ)器。調(diào)試監(jiān)視程序連接在調(diào)試硬件和軟件調(diào)試程序之間。如果設(shè)置調(diào)試狀態(tài)和控制寄存器DSCR的位11(見(jiàn)稍后),能禁止中斷(FIQ和IRQ)。在監(jiān)視調(diào)試模式中,在數(shù)據(jù)中止和預(yù)提取中止時(shí),禁止矢量俘獲以避免根據(jù)為監(jiān)視調(diào)試模式生成的中止結(jié)果,使處理器進(jìn)入不可恢復(fù)狀態(tài)。應(yīng)注意到監(jiān)視調(diào)試模式是一種調(diào)試模式以及不與為監(jiān)督安全區(qū)域和非安全區(qū)域間的切換的模式的處理器的監(jiān)視模式關(guān)聯(lián)。
調(diào)試能提供在某一時(shí)刻處理器的狀態(tài)的抽點(diǎn)打印。通過(guò)注意在接收調(diào)試啟動(dòng)請(qǐng)求時(shí),不同寄存器中的值來(lái)完成。這些值記錄在掃描鏈(圖67的541、544)上,然后,使用JTAG控制器(圖1的18),順序地輸出它們。
監(jiān)視內(nèi)核的一種可選方法是通過(guò)跟蹤。跟蹤不是插入以及當(dāng)內(nèi)核繼續(xù)操作時(shí),記錄續(xù)狀態(tài)。跟蹤運(yùn)行在圖1的內(nèi)嵌式跟蹤宏單元(ETM)22、26。ETM具有跟蹤端口,通過(guò)該端口,輸出跟蹤信息,然后通過(guò)外部跟蹤端口分析器分析。
本技術(shù)的實(shí)施例的處理器在兩個(gè)單獨(dú)的域中操作,在所述的實(shí)施例中,這些域包括安全域和非安全域。然而,為監(jiān)視功能目的,對(duì)技術(shù)人員來(lái)說(shuō),這些域可以是數(shù)據(jù)不應(yīng)當(dāng)泄漏的任何兩個(gè)域。本發(fā)明的實(shí)施例涉及防止在兩個(gè)域間泄漏數(shù)據(jù)以及通常允許訪問(wèn)整個(gè)系統(tǒng)的監(jiān)視功能,諸如調(diào)試和跟蹤是域間數(shù)據(jù)泄漏的潛在源。
在上述給出的安全和非安全域或區(qū)域的例子中,安全數(shù)據(jù)一定不能用于非安全區(qū)域。另外,如果允許調(diào)試,在安全區(qū)域中,限制或隱藏安全區(qū)域內(nèi)的一些數(shù)據(jù)是有利的。圖59中的虛線表示分段數(shù)據(jù)訪問(wèn)和提供不同粒度級(jí)的可能方法的一些例子。在圖59中,用方框500表示監(jiān)視模式以及是所有模式的最安全模式,以及控制安全和非安全區(qū)域間的切換。在監(jiān)視模式500下,有監(jiān)督模式,這包括安全監(jiān)督模式510和非安全監(jiān)督模式520。然后,有具有應(yīng)用程序522和524的非安全用戶模式和具有應(yīng)用程序512、514和516的安全用戶模式。能將監(jiān)視模式(調(diào)試和跟蹤)控制到僅監(jiān)視非安全模式(虛擬501的左邊)。另外,可以允許監(jiān)視非安全域或區(qū)域以及安全用戶模式(501的左邊以及位于502下的501的右邊)。在另一實(shí)施例中,可以允許在安全用戶域中運(yùn)行的非安全區(qū)域和某些應(yīng)用程序,在這種情況下,通過(guò)虛線503的另外的分段發(fā)生。這些分隔有助于防止在運(yùn)行不同應(yīng)用程序的不同用戶間泄漏安全數(shù)據(jù)。在一些受控的情況下,可以允許監(jiān)視整個(gè)系統(tǒng)。根據(jù)所要求的粒度,內(nèi)核的下述部分需要在監(jiān)視功能期間控制它們的訪問(wèn)。
在調(diào)試事件上,能設(shè)置四個(gè)寄存器指令故障狀態(tài)寄存器(IFSR)、數(shù)據(jù)故障狀態(tài)寄存器(DFSR)、故障地址寄存器(FAR)和指令故障地址寄存器(IFAR)。在一些實(shí)施例中,當(dāng)從安全區(qū)域進(jìn)入非安全區(qū)域時(shí),應(yīng)當(dāng)刷新這些寄存器以避免數(shù)據(jù)的任何泄漏。
PC樣本寄存器調(diào)試TAP能通過(guò)掃描鏈7訪問(wèn)PC。當(dāng)在安全區(qū)域中調(diào)試時(shí),根據(jù)在安全區(qū)域中選擇的調(diào)試粒度,能屏蔽那個(gè)值。當(dāng)內(nèi)核正在安全區(qū)域中操作時(shí),非安全區(qū)域,或非安全區(qū)域加上安全用戶應(yīng)用程序不能獲得PC的任何值很重要。
TLB項(xiàng)使用CP15,可以讀取微TLB項(xiàng)以及讀取和寫(xiě)入主TLB項(xiàng)。還能控制主TLB和微LTB加載和匹配。必須嚴(yán)格控制這種操作,特別是如果安全線程識(shí)別調(diào)試需要MMU/MPU的幫助時(shí)。
性能監(jiān)視控制寄存器性能控制寄存器提供有關(guān)高速緩存未命中、微TLB未命中、外部存儲(chǔ)器請(qǐng)求、所執(zhí)行的轉(zhuǎn)移指令等等的信息。非安全區(qū)域不應(yīng)當(dāng)訪問(wèn)該數(shù)據(jù),即使在調(diào)試狀態(tài)中。計(jì)數(shù)器應(yīng)當(dāng)在安全區(qū)域中操作,即使在安全區(qū)域中禁止調(diào)試。
在高速緩存系統(tǒng)中調(diào)試在高速緩存系統(tǒng)中,調(diào)試必須是非插入模式。保持高速緩存和外部存儲(chǔ)器間的一致很重要。使用CP15,能使高速緩存無(wú)效,或能使高速緩存在所有區(qū)中直寫(xiě)。在任何情況下,在調(diào)試中允許修改高速緩存行為能是安全性弱點(diǎn)以及應(yīng)當(dāng)控制。
字節(jié)順序(endianness)不應(yīng)當(dāng)允許能訪問(wèn)調(diào)試的非安全區(qū)域或安全用戶應(yīng)用程序改變字節(jié)順序。改變字節(jié)順序能使安全核心誤操作。根據(jù)粒度,在調(diào)試中,能禁止字節(jié)順序訪問(wèn)。
在啟動(dòng)監(jiān)視功能時(shí),能控制內(nèi)核部分的監(jiān)視功能的訪問(wèn)。用各種方法啟動(dòng)調(diào)試和跟蹤。僅允許在某些條件下初始化,本技術(shù)的實(shí)施例將監(jiān)視功能的訪問(wèn)控制到內(nèi)核的某些安全部分。
本技術(shù)的實(shí)施例試圖通過(guò)下述粒度,將項(xiàng)限制到監(jiān)視功能通過(guò)單獨(dú)控制插入和可觀察(跟蹤)調(diào)試;通過(guò)僅在安全用戶模式或在整個(gè)安全區(qū)域中,允許調(diào)試項(xiàng);通過(guò)僅在安全用戶模式中允許調(diào)試,此外,考慮線程ID(運(yùn)行的應(yīng)用程序)。
為控制啟動(dòng)監(jiān)視功能,知道如何能啟動(dòng)功能是很重要的。圖60表示示例說(shuō)明啟動(dòng)監(jiān)視功能的可能方式、啟動(dòng)的監(jiān)視功能的類型以及能編程啟動(dòng)指令的方式的表格。
通常,經(jīng)軟件或經(jīng)硬件,即經(jīng)JTAG控制器,輸入這些監(jiān)視指令。為了控制啟動(dòng)監(jiān)視功能,使用控制值。這些包括根據(jù)條件而定的允許位,因此,如果存在特定條件,如果設(shè)置允許位,僅允許啟動(dòng)監(jiān)視。這些位存儲(chǔ)在位于ICE530(見(jiàn)圖67)中的安全寄存器CP14(調(diào)試和狀態(tài)控制寄存器,DSCR)上。
在優(yōu)選實(shí)施例中,存在允許/禁止插入和可觀察調(diào)試的四個(gè)位,這些包括安全調(diào)試允許位、安全跟蹤允許位、安全用戶模式允許位和安全線程識(shí)別允許位。這些控制值用來(lái)提供用于監(jiān)視功能的可控制粒度,同樣地,能幫助防止從特定域泄漏數(shù)據(jù)。圖61提供這些位的概述以及如何訪問(wèn)它們。
這些控制位保存在安全域中的寄存器中,以及訪問(wèn)該寄存器限定到三種可能性。經(jīng)ARM協(xié)處理器MRC/MCR指令,提供軟件訪問(wèn),以及僅從安全監(jiān)督模式允許這些。另外,通過(guò)使用驗(yàn)證碼,從任何其他模式提供軟件訪問(wèn)。另一替代方案更多地涉及硬件訪問(wèn)以及調(diào)用經(jīng)JTAG上的輸入端口所寫(xiě)的指令。除用來(lái)輸入與監(jiān)視功能的可用性有關(guān)的控制值外,還能使用該輸入端口來(lái)輸入與處理器的其他功能有關(guān)的控制值。
下面提供與掃描鏈和JTAG有關(guān)的進(jìn)一步描述。
寄存器邏輯單元每個(gè)集成電路(IC)由兩種邏輯組成●組合邏輯單元,象AND、OR、INV門(mén)。這些門(mén)或這些門(mén)的組合用來(lái)根據(jù)一個(gè)或多個(gè)輸入信號(hào),計(jì)算布爾表達(dá)式。
●寄存器邏輯單元象鎖存器、觸發(fā)器。這些單元用來(lái)存儲(chǔ)任何信號(hào)值。圖62表示正沿觸發(fā)的觸發(fā)器視圖。
當(dāng)在時(shí)鐘信號(hào)(CK)上產(chǎn)生正沿事件時(shí),輸出(Q)接收輸入(D)的值,否則輸出(Q)將其值保存在存儲(chǔ)器中。
掃描鏈單元為測(cè)試或調(diào)試目的,期望忽略寄存器邏輯單元的功能訪問(wèn)以及直接訪問(wèn)寄存器邏輯單元的內(nèi)容。寄存器單元集成在圖63所示的掃描鏈單元中。
在功能模式中,清除(SE)(掃描允許)以及寄存器單元工作為單一寄存器單元。在測(cè)試或調(diào)試模式中,設(shè)置SE以及輸入數(shù)據(jù)能來(lái)自SI輸入(掃描輸入),而不是D輸入。
掃描鏈?zhǔn)顾袙呙桄渾卧`在掃描鏈中,如圖64所示。
在功能模式中,清除SE以及能正常訪問(wèn)所有寄存器單元并與電路的其他邏輯交互作用。在測(cè)試或調(diào)試模式中,設(shè)置SE以及所有寄存器束縛在掃描鏈的相互之間。根據(jù)每個(gè)時(shí)鐘周期的步調(diào)信號(hào),數(shù)據(jù)能來(lái)自第一掃描鏈單元以及能移過(guò)任何其他掃描鏈單元。能移出數(shù)據(jù)以便查看寄存器的內(nèi)容。
TAP控制器調(diào)試TAP控制器用來(lái)處理多個(gè)掃描鏈。TAP控制器能選擇特定的掃描鏈它將“掃描入”和“掃描出”信號(hào)連接到那個(gè)特定的掃描鏈。然后,能將數(shù)據(jù)掃描到鏈中、移出或掃描出。外部由JTAG端口拾音器外部控制TAP控制器。圖65示意性地示例說(shuō)明TAP控制器。
JTAG有選擇禁止掃描鏈單元出于安全原因,一些寄存器不能由掃描鏈訪問(wèn),即使是在調(diào)試或測(cè)試模式中。新輸入所謂的JADI(JTAG訪問(wèn)禁止)能允許從整個(gè)掃描鏈動(dòng)態(tài)和靜止地移出掃描鏈單元,而不修改集成電路的掃描鏈結(jié)構(gòu)。圖66A和66B示意性地表示該輸入。
如果JADI無(wú)效(JADI=0),不管是在功能還是測(cè)試或調(diào)試模式中,掃描鏈正常工作。如果JADI有效(JADI=1),以及如果正在測(cè)試或調(diào)試模式中,可以從掃描鏈結(jié)構(gòu)移出一些掃描鏈單元(由設(shè)計(jì)者選擇)。為保持相同掃描鏈單元號(hào),JTAG有選擇允許掃描鏈單元使用旁路寄存器。注意掃描出(SO)以及掃描鏈單元輸出(Q)現(xiàn)在不同。
圖67示意性地圖示了包括JTAG部分的處理器。在正常操作中,指令存儲(chǔ)器550與內(nèi)核通信以及在某些環(huán)境下,還能與寄存器CP14通信,以及復(fù)位控制值。這通常只在安全監(jiān)督模式下才是允許的。
當(dāng)啟動(dòng)調(diào)試時(shí),經(jīng)調(diào)試TAP580輸入指令以及它是控制內(nèi)核的那些指令。調(diào)試中的內(nèi)核在逐個(gè)步驟模式中運(yùn)行。調(diào)試TAP經(jīng)內(nèi)核訪問(wèn)CP14(由在示為JADI管腳的JSDAEN管腳上輸入,圖45中的JTAG訪問(wèn)禁止輸入的訪問(wèn)控制信號(hào)而定)并以這種方式復(fù)位控制值。
通過(guò)訪問(wèn)控制信號(hào)JSDAEN控制經(jīng)調(diào)試TAP580訪問(wèn)CP14寄存器。這配置成為訪問(wèn)以及特別是允許寫(xiě)入訪問(wèn),JSDAEN必須設(shè)置成高。在板級(jí)階段,當(dāng)正驗(yàn)證整個(gè)處理器時(shí),將JSDAEN設(shè)置成高以及在整個(gè)系統(tǒng)上允許調(diào)試。一旦校驗(yàn)該系統(tǒng),能將JSDAEN管腳連接到地,這意味著經(jīng)調(diào)試TAP580,訪問(wèn)允許在安全模式中調(diào)試的控制值現(xiàn)在不可用。通常,生產(chǎn)模式中的處理器具有連接到地的JSDAEN。經(jīng)指令存儲(chǔ)器550,經(jīng)軟件路由,訪問(wèn)控制值僅可用。經(jīng)這一路由訪問(wèn)限定到安全監(jiān)督模式或假定給出驗(yàn)證碼的另一模式(見(jiàn)圖68)。
應(yīng)注意到根據(jù)缺省情況,調(diào)試(插入和可觀察-跟蹤)僅可用在非安全區(qū)域中。為允許它們用在安全區(qū)域中,需要設(shè)置控制值允許位。
其優(yōu)點(diǎn)在于總是能由用戶啟動(dòng)調(diào)試以便在非安全區(qū)域中運(yùn)行。因此,盡管在調(diào)試中,訪問(wèn)安全區(qū)域不總是可用于用戶,在許多情況下,這不是問(wèn)題,因?yàn)橄拗圃L問(wèn)該區(qū)域以及在使得可用之前,在板級(jí)完全驗(yàn)證安全區(qū)域。因此,預(yù)見(jiàn)在許多情況下,調(diào)試安全區(qū)域是不必要的。如果必要的話,安全監(jiān)督員仍然經(jīng)寫(xiě)入CP14的軟件路由啟動(dòng)調(diào)試。
圖68示意性圖示了調(diào)試啟動(dòng)的控制。在該圖中,內(nèi)核部分600包括存儲(chǔ)表示系統(tǒng)是否是安全區(qū)域的安全狀態(tài)位S的存儲(chǔ)元件601(可以是如前所述的CP15寄存器。內(nèi)核600還包括由表示處理器正在運(yùn)行的模式,例如用戶模式的位組成的寄存器602,以及提供識(shí)別當(dāng)前正在內(nèi)核上運(yùn)行的應(yīng)用程序或線程的上下文標(biāo)識(shí)符的寄存器603。
當(dāng)斷點(diǎn)到達(dá)將存儲(chǔ)在寄存器611上的斷點(diǎn)與存儲(chǔ)在寄存器612上的內(nèi)核的址進(jìn)行比較的比較器610時(shí),將信號(hào)發(fā)送到控制邏輯620??刂七壿?20查看安全狀態(tài)S、模式602和線程(上下文標(biāo)識(shí)符)603以及將它與存儲(chǔ)在寄存器CP14上的控制值和條件指示符進(jìn)行比較。如果系統(tǒng)不在安全區(qū)域中操作,那么將在630輸出“進(jìn)入調(diào)試”信號(hào)。然而,如果系統(tǒng)正在安全區(qū)域中操作,控制邏輯620將查看模式602,以及如果在用戶模式中,將校驗(yàn)以查看是否設(shè)置用戶模式允許和調(diào)試允許位。如果它們是,那么假定還沒(méi)有初始化線程識(shí)別位,將初始化調(diào)試。上文示例說(shuō)明控制值的分層屬性。
在圖68中還示意地圖示了監(jiān)視控制的線程識(shí)別部分以及如何僅能從安全監(jiān)督模式(在該實(shí)施例中,處理器位于產(chǎn)品級(jí)和JSDAEN連接到地),改變存儲(chǔ)在寄存器CP14中的控制值。從安全用戶模式,使用驗(yàn)證碼,能進(jìn)入安全監(jiān)督模式,然后,能在CP14中設(shè)置控制值。
假定線程比較器640表示調(diào)試可用于那個(gè)線程,當(dāng)?shù)刂繁容^器610表示已經(jīng)到達(dá)斷點(diǎn)時(shí),控制邏輯620輸出“進(jìn)入調(diào)試”信號(hào)。這假定能在CP14中設(shè)置線程識(shí)別初始化位。如果在斷點(diǎn)后,設(shè)置線程識(shí)別初始化位,如果地址和上下文標(biāo)識(shí)符與在斷點(diǎn)和可允許線程指示器中表示的那些匹配,能僅進(jìn)入調(diào)試或跟蹤。在啟動(dòng)監(jiān)視功能后,將僅繼續(xù)俘獲診斷數(shù)據(jù),同時(shí)由比較器640將上下文標(biāo)識(shí)符標(biāo)識(shí)為允許線程。當(dāng)上下文標(biāo)識(shí)符表示正在運(yùn)行的應(yīng)用程序不是允許的應(yīng)用程序,那么抑制俘獲診斷數(shù)據(jù)。
應(yīng)注意到在優(yōu)選實(shí)施例中,在粒度內(nèi)有一些等級(jí)。實(shí)際上,安全調(diào)試或跟蹤允許位位于頂部,在安全用戶模式允許位后以及最后來(lái)到安全線程識(shí)別允許位。這在圖69A和69B中示例說(shuō)明(見(jiàn)下文)。
保持在“調(diào)試和狀態(tài)控制”寄存器(CP14)中的控制值根據(jù)域、模式和執(zhí)行線程,控制安全調(diào)試粒度。其在安全監(jiān)督模式的上部分。一旦構(gòu)成“調(diào)試和狀態(tài)控制”寄存器CP14,它直到安全監(jiān)督模式來(lái)編程相應(yīng)的斷點(diǎn)、觀察點(diǎn)等等來(lái)使內(nèi)核進(jìn)入調(diào)試狀態(tài)。
圖69A圖示了用于插入調(diào)試的安全調(diào)試粒度的概述。用灰色表示復(fù)位時(shí)的缺省值。
對(duì)有關(guān)可觀察測(cè)試的調(diào)試粒度也是一樣的。圖69B表示在這種情況下,安全調(diào)試粒度的概述,其中也用灰色表示復(fù)位時(shí)的缺省值。
注意安全用戶模式調(diào)試允許位和安全線程識(shí)別調(diào)試允許位通常用于插入和可觀察調(diào)試。
線程識(shí)別初始化位存儲(chǔ)在寄存器CP14中,以及表示是否需要由應(yīng)用程序的粒度。如果已經(jīng)初始化線程識(shí)別位,控制邏輯將進(jìn)一步校驗(yàn)應(yīng)用標(biāo)識(shí)符或線程603是在線程識(shí)別控制位中表示的,如果是,那么初始化調(diào)試。如果未設(shè)置用戶模式或調(diào)試允許位的任何一個(gè)或設(shè)置線程識(shí)別位以及應(yīng)用程序不是在線程識(shí)別控制位中表示的一個(gè),那么將忽略斷點(diǎn)以及內(nèi)核將繼續(xù)它所執(zhí)行的處理以及不初始化調(diào)試。
除控制監(jiān)視功能的初始化外,用類似的方式,能控制監(jiān)視模式期間俘獲診斷數(shù)據(jù)。為執(zhí)行此操作,內(nèi)核必須繼續(xù)考慮控制值,即存儲(chǔ)在CP14中的允許位以及在監(jiān)視功能期間,與它們有關(guān)的條件。
圖70示意性地表示運(yùn)行時(shí)的監(jiān)視功能的粒度。在這種情況下,區(qū)域A與允許俘獲診斷數(shù)據(jù)的區(qū)域有關(guān),以及區(qū)域B與存儲(chǔ)在CP14中的控制值表示不可能俘獲診斷數(shù)據(jù)的區(qū)域有關(guān)。
因此,當(dāng)調(diào)試運(yùn)行以及程序正在區(qū)域A中操作時(shí),在調(diào)試期間,以逐步方式輸出診斷數(shù)據(jù)。當(dāng)操作切換到區(qū)域B時(shí),其中,不允許俘獲診斷數(shù)據(jù),調(diào)試不再以逐步方式進(jìn)行,相反,其自動(dòng)處理以及不俘獲數(shù)據(jù)。這繼續(xù)直到程序的操作再次進(jìn)入?yún)^(qū)域A為止,然后,再次開(kāi)始俘獲診斷數(shù)據(jù)以及調(diào)試?yán)^續(xù)以逐步方式運(yùn)行。
在上述實(shí)施例中,如果安全域未被授權(quán),則總是將SMI指令看作原子事件以及抑制俘獲診斷數(shù)據(jù)。
此外,如果設(shè)置線程識(shí)別初始化位,那么相對(duì)于應(yīng)用程序,在操作期間的監(jiān)視功能的粒度也發(fā)生。
關(guān)于可觀察調(diào)試或跟蹤,這是通過(guò)ETM來(lái)實(shí)現(xiàn)的,而與調(diào)試完全無(wú)關(guān)。當(dāng)允許跟蹤時(shí),ETM正常工作以及當(dāng)禁止它時(shí),ETM在安全區(qū)域,或由所選擇的粒度而定的安全區(qū)域部分中隱藏跟蹤。當(dāng)不允許時(shí),避免ETM俘獲和跟蹤安全域中的診斷數(shù)據(jù)的一種方法是當(dāng)S位為高時(shí),停止ETM。這能通過(guò)將S位與ETMPWRDOWN信號(hào)結(jié)合來(lái)實(shí)現(xiàn),以便當(dāng)內(nèi)核進(jìn)入安全區(qū)域時(shí),ETM值保持在它們的最后值。因此,ETM應(yīng)當(dāng)跟蹤SMI指令,然后直到內(nèi)核返回到非安全區(qū)域才停止。因此,ETM僅看見(jiàn)非安全活動(dòng)性。
下面給出不同監(jiān)視功能和它們的粒度的一些的概述。
板級(jí)的插入調(diào)試在板級(jí),當(dāng)不連接JSDAEN管腳時(shí),在開(kāi)始任何引導(dǎo)圣誕前,有能力在任何地方允許調(diào)試。類似地,如果在安全監(jiān)督模式中,具有類似的權(quán)利。
如果在中止調(diào)試模式中初始化調(diào)試,能訪問(wèn)所有寄存器(非安全和安全寄存器組),以及能轉(zhuǎn)儲(chǔ)整個(gè)存儲(chǔ)器,除專用于控制調(diào)試的位外。
能從任何模式和從任何域進(jìn)入調(diào)試中止模式。能在安全或非安全存儲(chǔ)器中設(shè)置斷點(diǎn)和觀察點(diǎn)。在調(diào)試狀態(tài)中,可以經(jīng)MCR指令,通過(guò)簡(jiǎn)單地改變S位來(lái)進(jìn)入安全區(qū)域。
當(dāng)安全異常發(fā)生時(shí),能進(jìn)入調(diào)試模式時(shí),通過(guò)如下新位擴(kuò)展矢量中斷寄存器SMI矢量中斷允許安全數(shù)據(jù)中止矢量中斷允許安全預(yù)提取中止矢量中斷允許安全非定義矢量中斷允許在監(jiān)視調(diào)試模式中,如果任何地方允許調(diào)試,即使當(dāng)在非安全區(qū)域中調(diào)試SMI時(shí),可以在逐步調(diào)試中進(jìn)入安全區(qū)域。當(dāng)在安全域中出現(xiàn)斷點(diǎn)時(shí),安全中止處理程序能用來(lái)轉(zhuǎn)儲(chǔ)安全寄存器組和安全存儲(chǔ)器。
安全和非安全區(qū)域中的兩個(gè)中止處理程序向調(diào)試應(yīng)用程序提供它們的信息以便調(diào)試程序窗口(在相關(guān)調(diào)試控制PC上)能表示安全和非安全區(qū)域中的寄存器狀態(tài)。
圖71A表示當(dāng)在監(jiān)視調(diào)試模式中構(gòu)成內(nèi)核以及在安全區(qū)域中允許調(diào)試時(shí)所發(fā)生的事件。圖71B表示當(dāng)在監(jiān)視調(diào)試模式中構(gòu)成內(nèi)核以及在安全區(qū)域中禁止調(diào)試時(shí)所發(fā)生的事件。下面將描述該后一過(guò)程。
在產(chǎn)品級(jí)的插入調(diào)試在產(chǎn)品級(jí),當(dāng)連接JSDAEN以及使調(diào)試限制到非安全區(qū)域時(shí),除非安全監(jiān)督程序確定,那么圖71B所示的表表示所發(fā)生的事件。在這種情況下,SMI應(yīng)當(dāng)總是視為原子指令,以便在進(jìn)入調(diào)試狀態(tài)前,總是完成安全功能。
進(jìn)入調(diào)試中止模式經(jīng)受下述限制僅在非安全區(qū)域中考慮外部調(diào)試請(qǐng)求或內(nèi)部調(diào)試請(qǐng)求。如果斷言EDBGRQ(外部調(diào)試請(qǐng)求)同時(shí)在安全區(qū)域中,一旦終止安全功能和內(nèi)核返回到非安全區(qū)域中,內(nèi)核進(jìn)入調(diào)試中止模式。
在安全存儲(chǔ)器上編程斷點(diǎn)或觀察點(diǎn)沒(méi)有影響以及當(dāng)編程地址匹配時(shí),不停止內(nèi)核。
矢量中斷寄存器(下面給出該詳細(xì)情況)僅涉及非安全區(qū)域異常。先前所述的所有擴(kuò)展中斷允許位沒(méi)有影響。
只要在中止調(diào)試模式中,應(yīng)用下述限制不改變S位來(lái)強(qiáng)制安全區(qū)域輸入,除非允許安全調(diào)試如果僅在安全監(jiān)督模式中允許調(diào)試,不改變模式位。
不改變控制安全調(diào)試的專用位。
如果加載和執(zhí)行SMI(通過(guò)系統(tǒng)速度訪問(wèn)),僅當(dāng)完全執(zhí)行安全功能時(shí),內(nèi)核重新進(jìn)入調(diào)試狀態(tài)。
在監(jiān)視調(diào)試模式中,因?yàn)樵诎踩珔^(qū)域中不發(fā)生監(jiān)視,安全中止處理程序不需要支持調(diào)試監(jiān)視程序。在非安全區(qū)域中,逐步是可能的,但只要執(zhí)行SMI,整個(gè)執(zhí)行安全功能,換句話說(shuō),當(dāng)在所有其他指令上,“步進(jìn)”和“失步”是可能的,則允許XWSI單步。因此,XWSI視為原子指令。
一旦禁止安全調(diào)試,具有下述限制在進(jìn)入監(jiān)視模式前僅在非安全區(qū)域中考慮斷點(diǎn)和觀察點(diǎn)。如果設(shè)置S位,忽略斷點(diǎn)/觀察點(diǎn)。注意還能通過(guò)MCR/MRC(CP14)訪問(wèn)觀察點(diǎn)單元,因?yàn)樵诎踩鎯?chǔ)器中,斷點(diǎn)/觀察點(diǎn)無(wú)影響,因此不是安全問(wèn)題。
BKPT通常用來(lái)替換在其上設(shè)置斷點(diǎn)的指令。這假定用BKPT指令覆蓋存儲(chǔ)器中的這一指令,這種情況僅在非安全模式中是可能的。
矢量中斷寄存器僅涉及非安全異常。如前所述的所有擴(kuò)展的中斷允許位沒(méi)有影響。應(yīng)當(dāng)禁止數(shù)據(jù)中止和預(yù)提取中止允許位以避免處理器迫使進(jìn)入不可恢復(fù)狀態(tài)。
經(jīng)JTAG,具有與用于中止模式的相同限制(不能修改S位等等)。
一旦在監(jiān)視模式中(非安全中止模式)非安全中止處理程序能轉(zhuǎn)儲(chǔ)非安全區(qū)域以及在安全成組寄存器和安全存儲(chǔ)器上沒(méi)有可見(jiàn)度。
通過(guò)原子SMI指令執(zhí)行安全功能能改變S位以強(qiáng)制安全區(qū)域項(xiàng)不能改變模式位,因?yàn)閮H在安全監(jiān)督模式中允許調(diào)試注意如果發(fā)生外部調(diào)試請(qǐng)求(EDBGRQ),在非安全區(qū)域中,內(nèi)核中止當(dāng)前指令,然后立即進(jìn)入調(diào)試狀態(tài)(在中止模式中)在安全區(qū)域中,內(nèi)核中止當(dāng)前功能以及當(dāng)已經(jīng)返回到非安全區(qū)域中時(shí),進(jìn)入調(diào)試狀態(tài)。
新調(diào)試需求意味著內(nèi)核硬件中的改進(jìn)。必須仔細(xì)地控制S位,以及出于安全原因,安全位必須不能插入掃描鏈中。
總的來(lái)說(shuō),在調(diào)試中,能修改模式位,只要在安全監(jiān)督模式中允許調(diào)試。將防止任何人進(jìn)入安全域中調(diào)試以便通過(guò)修改系統(tǒng)(修改TBL項(xiàng)等待)進(jìn)入所有安全區(qū)域。用那種方式,每個(gè)線程能調(diào)試其自己的代碼,以及僅其自己的代碼。必須保持安全核心安全。因此,當(dāng)內(nèi)核正在非安全區(qū)域中運(yùn)行時(shí)進(jìn)入調(diào)試時(shí),如以前,僅改變模式位。
該技術(shù)的實(shí)施例使用新矢量中斷寄存器。如果該寄存器中的一個(gè)位設(shè)置成高以及相應(yīng)的矢量觸發(fā),處理器進(jìn)入調(diào)試狀態(tài),就象已經(jīng)在從相關(guān)異常矢量提取的指令上設(shè)置斷點(diǎn)一樣。這些位的行為可以根據(jù)在調(diào)試控制寄存器中的安全區(qū)域允許位中的調(diào)試值而不同。
新矢量中斷寄存器包括下述位D_s_abort、P_s_abort、S_undef、SMI、FIQ、IRQ、Unaligned、D_abort、P_abort、SWI和Undef。
● D_s_abort位僅當(dāng)在安全區(qū)域中允許調(diào)試時(shí),以及當(dāng)在中止調(diào)試模式中配置調(diào)試才設(shè)置。在監(jiān)視調(diào)試模式中,該位應(yīng)當(dāng)是永不設(shè)置位。如果禁止在安全區(qū)域中調(diào)試,不管其值如何,該位沒(méi)有影響。
● P_s_abort位與D_s_abort位相同。
● S_undef位僅當(dāng)在安全區(qū)域中允許調(diào)試時(shí)才設(shè)置。如果禁止安全區(qū)域中的調(diào)試,不管其值如何,該位沒(méi)有影響。
● SMI位應(yīng)當(dāng)僅當(dāng)在安全區(qū)域中允許調(diào)試時(shí)才設(shè)置。如果禁止安全區(qū)域中的調(diào)試,不管其值如何,該位沒(méi)有影響。
● FIQ、IRQ、Unaligned、D_abort、P_abort、SWI和Undef位對(duì)應(yīng)于非安全異常,因此,即使禁止安全區(qū)域中的調(diào)試,它們也是有效的。注意在監(jiān)視模式中,不應(yīng)當(dāng)斷言D_abort和、P_abort為高。
● Reset位當(dāng)在復(fù)位發(fā)生時(shí)進(jìn)入安全區(qū)域時(shí),僅當(dāng)允許安全區(qū)域中的調(diào)試時(shí),該位才有效,否則沒(méi)有影響。
盡管在此已經(jīng)描述了本發(fā)明的具體實(shí)施例,很顯然本發(fā)明不限于此,以及可以在本發(fā)明的范圍內(nèi)進(jìn)行許多改進(jìn)和增加。例如,根據(jù)獨(dú)立權(quán)利要求的特征,能進(jìn)行下述從屬權(quán)利要求的特征的各種組合而不背離本發(fā)明的范圍。
權(quán)利要求
1.一種用于處理數(shù)據(jù)的裝置,所述裝置包括一個(gè)處理器,可用在多種模式和多個(gè)域中,所述多個(gè)域包括安全域或非安全域,所述多種模式包括為所述安全域中的模式的至少一個(gè)安全模式;為所述非安全域中的模式的至少一個(gè)非安全模式;以及監(jiān)視模式,其特征在于,當(dāng)所述處理器正在執(zhí)行安全模式中的程序時(shí),所述程序訪問(wèn)當(dāng)所述處理器正在非安全模式中操作時(shí)不能訪問(wèn)的安全數(shù)據(jù);以及經(jīng)所述監(jiān)視模式,發(fā)生所述安全模式和所述非安全模式間的切換,所述處理器至少部分在所述監(jiān)視模式中操作來(lái)執(zhí)行監(jiān)視程序以便管理所述安全模式和所述非安全模式間的切換。
2.如權(quán)利要求1所述的裝置,其特征在于,所述處理器包括寄存器組以及所述監(jiān)視程序可用來(lái)當(dāng)從所述安全模式切換到所述非安全模式時(shí),至少刷新在所述安全模式和所述非安全模式間共享的所述寄存器組部分,以便除了所述監(jiān)視程序所允許的,保存在所述寄存器組中的安全數(shù)據(jù)不會(huì)從所述安全模式傳遞到所述非安全模式。
3.如權(quán)利要求1所述的裝置,其特征在于,所述處理器包括當(dāng)所述處理器正在所述非安全模式中操作時(shí)使用的非安全寄存器組和所述處理器正在所述安全模式中操作時(shí)使用的安全寄存器組。
4.如權(quán)利要求1、2和3的任何一個(gè)所述的裝置,其特征在于,當(dāng)在所述非安全模式中操作時(shí),通過(guò)切換到所述監(jiān)視程序內(nèi)的一個(gè)或多個(gè)固定點(diǎn)的一個(gè)來(lái)切換到所述安全模式。
5.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,所述安全域提供至少一個(gè)安全特許模式和至少一個(gè)安全用戶模式,以及當(dāng)在所述安全特許模式中操作時(shí),使用與切換到安全用戶模式相同的機(jī)制,可以切換到所述監(jiān)視模式。
6.如權(quán)利要求5所述的裝置,其特征在于,所述切換使用由正在所述非安全模式中執(zhí)行的程序產(chǎn)生的調(diào)用。
7.如權(quán)利要求6所述的裝置,其特征在于,執(zhí)行對(duì)所述監(jiān)視程序中的固定點(diǎn)的所述調(diào)用。
8.如權(quán)利要求4所述的裝置,其特征在于,除在所述監(jiān)視模式中外,由程序嘗試觸發(fā)所述切換以便在所述非安全模式和所述安全模式中切換。
9.如權(quán)利要求8所述的裝置,其特征在于,對(duì)除在所述監(jiān)視模式中外,通過(guò)程序在所述非安全模式和所述安全模式間的切換的任何嘗試設(shè)中斷并觸發(fā)調(diào)用所述監(jiān)視程序中的固定點(diǎn)。
10.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,當(dāng)從所述非安全模式啟動(dòng)進(jìn)入所述監(jiān)視模式時(shí),所述處理器存儲(chǔ)在停止所述非安全模式中的處理時(shí)的點(diǎn),用在重啟所述非安全模式中的處理的程序計(jì)數(shù)器值。
11.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,當(dāng)從所述非安全模式啟動(dòng)進(jìn)入所述監(jiān)視模式時(shí),所述處理器存儲(chǔ)用在使所述處理器恢復(fù)到與在停止所述非安全模式中的處理時(shí)的點(diǎn)匹配的狀態(tài)的處理器狀態(tài)值。
12.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,當(dāng)停止所述安全模式中的處理以便能進(jìn)行所述非安全模式中的異常處理時(shí),經(jīng)所述監(jiān)視模式,切換到所述非安全模式以及當(dāng)結(jié)束時(shí),所述異常處理能使控制返回到所述監(jiān)視模式。
13.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,所述處理器包括表示所述處理器正在所述安全域還是所述非安全域中操作的安全狀態(tài)標(biāo)記,當(dāng)所述處理器正在所述監(jiān)視模式中操作時(shí),所述安全狀態(tài)標(biāo)記可寫(xiě),以及當(dāng)所述處理器正在除所述監(jiān)視模式外的模式中操作時(shí),所述安全狀態(tài)標(biāo)記不可寫(xiě)。
14.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,當(dāng)正在所述至少一個(gè)非安全模式中操作時(shí),非安全操作系統(tǒng)控制所述處理器。
15.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,當(dāng)正在所述至少一個(gè)安全模式中操作時(shí),安全操作系統(tǒng)控制所述處理器。
16.如權(quán)利要求15所述的裝置,其特征在于,所述監(jiān)視程序是所述安全操作系統(tǒng)的一部分。
17.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,所述處理器響應(yīng)用于觸發(fā)異常處理的一個(gè)或多個(gè)異常條件。
18.如權(quán)利要求17所述的裝置,其特征在于,在所述監(jiān)視模式中,禁止所述異常條件的至少一個(gè)。
19.如權(quán)利要求2和權(quán)利要求18所述的裝置,其特征在于,所述處理器具有多個(gè)專用寄存器,當(dāng)進(jìn)入所述監(jiān)視模式時(shí),代替所述寄存器組內(nèi)的相應(yīng)的通用寄存器,以便所述多個(gè)專用寄存器可用于由所述監(jiān)視程序使用,而不覆蓋所述相應(yīng)通用寄存器內(nèi)的數(shù)據(jù)。
20.如權(quán)利要求17、18和19的任何一個(gè)所述的裝置,其特征在于,異常中斷屏蔽寄存器存儲(chǔ)當(dāng)異常發(fā)生時(shí),指定所述異常的哪一個(gè)應(yīng)當(dāng)由正在所述監(jiān)視模式中執(zhí)行的異常處理程序處理以及所述異常的哪一個(gè)應(yīng)當(dāng)由正在所述安全域和所述非安全域的當(dāng)前一個(gè)內(nèi)的模式中執(zhí)行的異常處理程序處理的一個(gè)或多個(gè)參數(shù)。
21.如權(quán)利要求17至20的任何一個(gè)所述的裝置,其特征在于,所述處理器響應(yīng)可用來(lái)觸發(fā)進(jìn)入所述監(jiān)視模式和執(zhí)行所述監(jiān)視程序的安全異常條件。
22.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,所述處理器響應(yīng)進(jìn)入所述監(jiān)視模式和以預(yù)定位置,開(kāi)始執(zhí)行所述監(jiān)視程序的監(jiān)視模式進(jìn)入指令。
23.如權(quán)利要求22所述的裝置,其特征在于,所述監(jiān)視模式進(jìn)入指令是模式切換軟件中斷指令以及所述預(yù)定位置是與所述模式切換軟件中斷指令有關(guān)的模式切換軟件中斷矢量。
24.如權(quán)利要求23所述的裝置,其特征在于,根據(jù)所述處理器是在安全模式還是在非安全模式中,不同模式切換軟件中斷矢量與所述模式切換軟件中斷指令有關(guān)。
25.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,所述至少一個(gè)安全模式包括下述的一個(gè)或多個(gè)安全監(jiān)督模式;安全系統(tǒng)模式;安全中止異常模式;安全未定義異常模式;安全中斷模式;安全快速中斷模式;以及安全用戶模式。
26.如前述權(quán)利要求的任何一個(gè)所述的裝置,其特征在于,所述至少一個(gè)非模式包括下述的一個(gè)或多個(gè)非安全監(jiān)督模式;非安全系統(tǒng)模式;非安全中止異常模式;非安全未定義異常模式;非安全中斷模式;非安全快速中斷模式;以及非安全用戶模式。
27.如權(quán)利要求1所述的裝置,其特征在于,所述處理器可在所述安全域內(nèi)的至少一個(gè)特許安全模式中操作,該安全模式不能從所述安全域改變到所述非安全域,所述特許安全模式具有允許從所述特許安全模式改變成所述監(jiān)視模式的特權(quán),不必重定向程序執(zhí)行點(diǎn)。
28.如權(quán)利要求27所述的裝置,其特征在于,當(dāng)在所述監(jiān)視模式中時(shí),所述處理器負(fù)責(zé)改變安全標(biāo)記以便在所述安全域和所述非安全域中改變,所述安全域標(biāo)記除所述監(jiān)視模式外,不能訪問(wèn)寫(xiě)入。
29.如權(quán)利要求27和28的任何一個(gè)所述的裝置,其特征在于,所述處理器響應(yīng)軟件中斷指令來(lái)通過(guò)重定向如由與所述軟件中斷指令有關(guān)的中斷矢量指定的程序執(zhí)行點(diǎn),執(zhí)行切換到所述監(jiān)視模式。
30.如權(quán)利要求27、28和29的任何一個(gè)所述的裝置,其特征在于,所述非安全域包括至少一個(gè)特許非安全模式,不能執(zhí)行在沒(méi)有重定向程序執(zhí)行點(diǎn)的情況下,從所述至少一個(gè)特許非安全模式改變成所述監(jiān)視模式。
31.如權(quán)利要求27至30的任何一個(gè)所述的裝置,其特征在于,在復(fù)位時(shí),所述處理器進(jìn)入所述特許安全模式。
32.如權(quán)利要求27至31的任何一個(gè)所述的裝置,其特征在于,在從所述安全域改變到所述非安全域前,正在所述監(jiān)視模式中執(zhí)行的監(jiān)視程序切換到所述安全特許模式以允許保存在所述安全特許模式切換到所述監(jiān)視模式前,從所述監(jiān)視模式內(nèi)不能訪問(wèn)的數(shù)據(jù),用于到所述非安全域的所述改變。
33.如權(quán)利要求27至32的任何一個(gè)所述的裝置,其特征在于,在所述監(jiān)視模式中能訪問(wèn)的存儲(chǔ)區(qū)也能在所述特許安全模式中訪問(wèn)。
34.一種處理數(shù)據(jù)的方法,所述方法包括步驟通過(guò)可在多種模式和多個(gè)域中操作的處理器執(zhí)行程序,所述多個(gè)域包括安全域或非安全域,所述多種模式包括為所述安全域中的模式的至少一個(gè)安全模式;為所述非安全域中的模式的至少一個(gè)非安全模式;以及監(jiān)視模式,其特征在于,當(dāng)所述處理器正在執(zhí)行安全模式中的程序時(shí),所述程序訪問(wèn)當(dāng)所述處理器正在非安全模式中操作時(shí)不能訪問(wèn)的安全數(shù)據(jù);以及經(jīng)所述監(jiān)視模式,作所述安全模式和所述非安全模式間的切換,所述處理器執(zhí)行至少部分在所述監(jiān)視模式的監(jiān)視程序來(lái)管理所述安全模式和所述非安全模式間的切換。
35.如權(quán)利要求34所述的方法,其特征在于,所述處理器包括寄存器組以及當(dāng)從所述安全模式切換到所述非安全模式時(shí),所述監(jiān)視程序至少刷新在所述安全模式和所述非安全模式間共享的所述寄存器組部分,以便除了所述監(jiān)視程序所允許的,保存在所述寄存器組中的安全數(shù)據(jù)不會(huì)從所述安全模式傳遞到所述非安全模式。
36.如權(quán)利要求34所述的方法,其特征在于,所述處理器包括當(dāng)所述處理器正在所述非安全模式中操作時(shí)使用的非安全寄存器組和所述處理器正在所述安全模式中操作時(shí)使用的安全寄存器組。
37.如權(quán)利要求34、35和36的任何一個(gè)所述的方法,其特征在于,當(dāng)在所述非安全模式中操作時(shí),通過(guò)切換到所述監(jiān)視程序內(nèi)的一個(gè)或多個(gè)固定點(diǎn)的一個(gè)來(lái)切換到所述安全模式。
38.如權(quán)利要求34至37的任何一個(gè)所述的方法,其特征在于,所述安全域提供至少一個(gè)安全特許模式和至少一個(gè)安全用戶模式,以及當(dāng)在所述安全特許模式中操作時(shí),使用與切換到安全用戶模式相同的機(jī)制,可以切換到所述監(jiān)視模式。
39.如權(quán)利要求37所述的方法,其特征在于,所述切換使用由正在所述非安全模式中執(zhí)行的程序產(chǎn)生的調(diào)用。
40.如權(quán)利要求39所述的方法,其特征在于,執(zhí)行對(duì)所述監(jiān)視程序中的固定點(diǎn)的所述調(diào)用。
41.如權(quán)利要求37所述的方法,其特征在于,除在所述監(jiān)視模式中外,由程序嘗試觸發(fā)所述切換以便在所述非安全模式和所述安全模式之間切換。
42.如權(quán)利要求41所述的方法,其特征在于,對(duì)除在所述監(jiān)視模式中外,通過(guò)程序在所述非安全模式和所述安全模式間的切換的任何嘗試設(shè)中斷并觸發(fā)調(diào)用所述監(jiān)視程序中的固定點(diǎn)。
43.如權(quán)利要求34至42的任何一個(gè)所述的方法,其特征在于,當(dāng)從所述非安全模式啟動(dòng)進(jìn)入所述監(jiān)視模式時(shí),所述處理器存儲(chǔ)在停止所述非安全模式中的處理時(shí)的點(diǎn),用在重啟所述非安全模式中的處理的程序計(jì)數(shù)器值。
44.如權(quán)利要求34至43的任何一個(gè)所述的方法,其特征在于,當(dāng)從所述非安全模式啟動(dòng)進(jìn)入所述監(jiān)視模式時(shí),所述處理器存儲(chǔ)用在使所述處理器恢復(fù)到與在停止所述非安全模式中的處理時(shí)的點(diǎn)匹配的狀態(tài)的處理器狀態(tài)值。
45.如權(quán)利要求34至44的任何一個(gè)所述的方法,其特征在于,當(dāng)停止所述安全模式中的處理以便能進(jìn)行所述非安全模式中的異常處理時(shí),經(jīng)所述監(jiān)視模式,切換到所述非安全模式以及當(dāng)結(jié)束時(shí),所述異常處理能使控制返回到所述監(jiān)視模式。
46.如權(quán)利要求34至46的任何一個(gè)所述的方法,其特征在于,所述處理器包括一個(gè)表示所述處理器正在所述安全域還是所述非安全域中操作的安全狀態(tài)標(biāo)記,當(dāng)所述處理器正在所述監(jiān)視模式中操作時(shí),所述安全狀態(tài)標(biāo)記可寫(xiě),以及當(dāng)所述處理器正在除所述監(jiān)視模式外的模式中操作時(shí),所述安全狀態(tài)標(biāo)記不可寫(xiě)。
47.如權(quán)利要求34至46的任何一個(gè)所述的方法,其特征在于,當(dāng)在所述至少一個(gè)非安全模式中操作時(shí),非安全操作系統(tǒng)控制所述處理器。
48.如權(quán)利要求34至47的任何一個(gè)所述的方法,其特征在于,當(dāng)在所述至少一個(gè)安全模式中操作時(shí),安全操作系統(tǒng)控制所述處理器。
49.如權(quán)利要求48所述的方法,其特征在于,所述監(jiān)視程序是所述安全操作系統(tǒng)的一部分。
50.如權(quán)利要求34至49的任何一個(gè)所述的方法,其特征在于,所述處理器響應(yīng)用于觸發(fā)異常處理的一個(gè)或多個(gè)異常條件。
51.如權(quán)利要求50所述的方法,其特征在于,在所述監(jiān)視模式中,禁止所述異常條件的至少一個(gè)。
52.如權(quán)利要求35和權(quán)利要求51所述的方法,其特征在于,所述處理器具有多個(gè)專用寄存器,當(dāng)進(jìn)入所述監(jiān)視模式時(shí),代替所述寄存器組內(nèi)的相應(yīng)的通用寄存器,以便所述多個(gè)專用寄存器可用于由所述監(jiān)視程序使用,而不覆蓋所述相應(yīng)通用寄存器內(nèi)的數(shù)據(jù)。
53.如權(quán)利要求50、51和52的任何一個(gè)所述的方法,其特征在于,異常中斷屏蔽寄存器存儲(chǔ)當(dāng)異常發(fā)生時(shí),指定所述異常的哪一個(gè)應(yīng)當(dāng)由正在所述監(jiān)視模式中執(zhí)行的異常處理程序處理以及所述異常的哪一個(gè)應(yīng)當(dāng)由正在所述安全域和所述非安全域的當(dāng)前一個(gè)內(nèi)的模式中執(zhí)行的異常處理程序處理的一個(gè)或多個(gè)參數(shù)。
54.如權(quán)利要求50至53的任何一個(gè)所述的方法,其特征在于,所述處理器響應(yīng)可用來(lái)觸發(fā)進(jìn)入所述監(jiān)視模式和執(zhí)行所述監(jiān)視程序的安全異常條件。
55.如權(quán)利要求34至54的任何一個(gè)所述的方法,其特征在于,所述處理器響應(yīng)進(jìn)入所述監(jiān)視模式并且以預(yù)定位置,開(kāi)始執(zhí)行所述監(jiān)視程序的監(jiān)視模式進(jìn)入指令。
56.如權(quán)利要求55所述的方法,其特征在于,所述監(jiān)視模式進(jìn)入指令是模式切換軟件中斷指令,而所述預(yù)定位置是與所述模式切換軟件中斷指令有關(guān)的模式切換軟件中斷矢量。
57.如權(quán)利要求56所述的方法,其特征在于,根據(jù)所述處理器是在安全模式還是在非安全模式中,不同模式切換軟件中斷矢量與所述模式切換軟件中斷指令有關(guān)。
58.如權(quán)利要求34至57的任何一個(gè)所述的方法,其特征在于,所述至少一個(gè)安全模式包括下述的一個(gè)或多個(gè)安全監(jiān)督模式;安全系統(tǒng)模式;安全中止異常模式;安全未定義異常模式;安全中斷模式;安全快速中斷模式;以及安全用戶模式。
59.如權(quán)利要求34至58的任何一個(gè)所述的方法,其特征在于,所述至少一個(gè)非模式包括下述的一個(gè)或多個(gè)非安全監(jiān)督模式;非安全系統(tǒng)模式;非安全中止異常模式;非安全未定義異常模式;非安全中斷模式;非安全快速中斷模式;以及非安全用戶模式。
60.如權(quán)利要求34所述的方法,其特征在于,所述處理器可在所述安全域內(nèi)的至少一個(gè)特許安全模式中操作,該特許安全模式不能從所述安全域改變到所述非安全域,所述特許安全模式具有允許從所述特許安全模式改變成所述監(jiān)視模式的特權(quán),不必重定向程序執(zhí)行點(diǎn)。
61.如權(quán)利要求60所述的方法,其特征在于,當(dāng)在所述監(jiān)視模式中時(shí),所述處理器可用來(lái)改變安全標(biāo)記以便在所述安全域和所述非安全域中改變,所述安全域標(biāo)記除所述監(jiān)視模式外,不能訪問(wèn)寫(xiě)入。
62.如權(quán)利要求60和61的任何一個(gè)所述的方法,其特征在于,所述處理器響應(yīng)軟件中斷指令來(lái)通過(guò)重定向如由與所述軟件中斷指令有關(guān)的中斷矢量指定的程序執(zhí)行點(diǎn),執(zhí)行切換到所述監(jiān)視模式。
63.如權(quán)利要求60、61和62的任何一個(gè)所述的方法,其特征在于,所述非安全域包括至少一個(gè)特許非安全模式,不能執(zhí)行在沒(méi)有重定向程序執(zhí)行點(diǎn)的情況下,從所述至少一個(gè)特許非安全模式改變成所述監(jiān)視模式。
64.如權(quán)利要求60至63的任何一個(gè)所述的方法,其特征在于,在復(fù)位時(shí),所述處理器進(jìn)入所述特許安全模式。
65.如權(quán)利要求60至64的任何一個(gè)所述的方法,其特征在于,在從所述安全域改變到所述非安全域前,正在所述監(jiān)視模式中執(zhí)行的監(jiān)視程序切換到所述安全特許模式以允許保存在所述安全特許模式切換到所述監(jiān)視模式前,從所述監(jiān)視模式內(nèi)不能訪問(wèn)的數(shù)據(jù),用于到所述非安全域的所述改變。
66.如權(quán)利要求60至65的任何一個(gè)所述的方法,其特征在于,在所述監(jiān)視模式中能訪問(wèn)的存儲(chǔ)區(qū)也能在所述特許安全模式中訪問(wèn)。
67.一種具有計(jì)算機(jī)程序的計(jì)算機(jī)程序產(chǎn)品,用來(lái)根據(jù)權(quán)利要求34至66的任何一個(gè)的方法,控制數(shù)據(jù)處理裝置。
全文摘要
提供一種數(shù)據(jù)處理系統(tǒng),包括可在多種模式和安全域或非安全域中操作的處理器,包括為所述域中的模式的至少一個(gè)安全模式;為所述非安全域中的模式的至少一個(gè)非安全模式;以及監(jiān)視模式,其中當(dāng)所述處理器正在執(zhí)行安全模式中的程序時(shí),所述程序訪問(wèn)當(dāng)所述處理器正在非安全模式中操作時(shí)不能訪問(wèn)的安全數(shù)據(jù);以及經(jīng)所述監(jiān)視模式,發(fā)生所述安全模式和所述非安全模式間的切換,所述處理器至少部分在所述監(jiān)視模式中操作來(lái)執(zhí)行監(jiān)視程序以便管理所述安全模式和所述非安全模式間的切換。
文檔編號(hào)G06F9/46GK1711524SQ200380103508
公開(kāi)日2005年12月21日 申請(qǐng)日期2003年10月27日 優(yōu)先權(quán)日2002年11月18日
發(fā)明者S·C·瓦特, C·B·多爾南, L·奧里安, N·朝斯薩德, L·貝內(nèi)特, S·E·S·布羅奇爾 申請(qǐng)人:Arm有限公司