處理器資源和執(zhí)行保護(hù)方法及裝置制造方法
【專利摘要】實(shí)施例包括處理系統(tǒng)(110),其基于存儲(chǔ)在第一寄存器(132,212)中的指令地址范圍指示器確定下一個(gè)指令提取地址是對(duì)應(yīng)于位于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的第一存儲(chǔ)器區(qū)域(216,218)內(nèi)的位置還是位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的第二存儲(chǔ)器區(qū)域(216,218)內(nèi)的位置。當(dāng)下一個(gè)指令提取地址不位于第一存儲(chǔ)器區(qū)域內(nèi)(216,218)時(shí),僅僅在到不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法的時(shí)候,允許提取下一個(gè)指令。在另一個(gè)實(shí)施例中,在為指令生成數(shù)據(jù)訪問地址(316)時(shí),基于存儲(chǔ)在第二寄存器(133,222)中的數(shù)據(jù)地址范圍指示器,確定是否允許訪問與數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置。當(dāng)當(dāng)前權(quán)限狀態(tài)是允許訪問存儲(chǔ)器位置的權(quán)限狀態(tài)時(shí),訪問被允許(318)。
【專利說明】處理器資源和執(zhí)行保護(hù)方法及裝置
【技術(shù)領(lǐng)域】
[0001]實(shí)施例通常涉及處理器資源和執(zhí)行保護(hù)方法及裝置。
【背景技術(shù)】
[0002]典型的計(jì)算機(jī)系統(tǒng)可以向在處理器上執(zhí)行的代碼提供不同級(jí)別的系統(tǒng)資源訪問。這常常是通過例如將多個(gè)分層級(jí)的權(quán)限級(jí)別中的一個(gè)與可以在系統(tǒng)上運(yùn)行的每一類型的代碼相關(guān)聯(lián)來實(shí)現(xiàn)。在這樣系統(tǒng)中,最受新任的代碼(例如,內(nèi)核(kernel)代碼)被授予最高級(jí)別的權(quán)限,并且不太受信任的代碼(例如,裝置驅(qū)動(dòng)程序、應(yīng)用程序和其它用戶代碼)被授予較低級(jí)別的權(quán)限。權(quán)限級(jí)別越高,代碼就具有越多的對(duì)系統(tǒng)資源的訪問。相反,權(quán)限級(jí)別越低,代碼就具有越少的對(duì)系統(tǒng)資源的訪問。例如,內(nèi)核代碼可能實(shí)際上不受限定地訪問系統(tǒng)資源,而應(yīng)用程序代碼可能會(huì)被限定訪問某些存儲(chǔ)區(qū)域、輸入/輸出(I/O)等等。
[0003]為了減少惡意代碼或錯(cuò)誤代碼可能會(huì)影響系統(tǒng)的功能和/或數(shù)據(jù)的風(fēng)險(xiǎn),分層級(jí)的權(quán)限方案通常是硬件實(shí)施的。例如,處理器可以實(shí)現(xiàn)“管理者”和“用戶”操作模式以實(shí)現(xiàn)分層級(jí)的權(quán)限方案。在這樣系統(tǒng)中,可以實(shí)現(xiàn)以硬件為媒介的標(biāo)志,其中所述標(biāo)志的狀態(tài)用于確定是否允許各種資源影響操作的執(zhí)行。當(dāng)系統(tǒng)處于管理者模式的時(shí)候所述標(biāo)志可以被設(shè)置,例如,允許高權(quán)限代碼廣泛訪問系統(tǒng)資源。相反,當(dāng)系統(tǒng)處于用戶模式的時(shí)候所述標(biāo)志可以被清除,從而限定較低權(quán)限的代碼對(duì)某些資源的訪問。
[0004]在處理器上以各種不同權(quán)限級(jí)別執(zhí)行代碼的能力通過利用這些權(quán)限級(jí)別允許構(gòu)建軟件,以使得兩個(gè)或兩個(gè)以上級(jí)別的軟件可以共存,同時(shí)保持硬件實(shí)現(xiàn)的隔離。然而,這種能力通常的代價(jià)是大量處理器邏輯跟蹤權(quán)限狀態(tài)和控制狀態(tài)變化。通常,提供分層級(jí)的權(quán)限方案的硬件實(shí)施的邏輯是處理器設(shè)計(jì)的組成部分,并且就硬件開發(fā)和周期時(shí)間而言,將這種功能添加到現(xiàn)有處理器架構(gòu)可能是成本高昂的。
[0005]概述
[0006]根據(jù)本公開的一個(gè)方面,提供了一種處理系統(tǒng),包括:第一模塊,被配置為基于取自存儲(chǔ)器的指令的地址保持當(dāng)前權(quán)限狀態(tài)是第一權(quán)限狀態(tài)還是第二權(quán)限狀態(tài)的知識(shí);以及第二模塊,被配置為:通過將下一個(gè)指令提取地址和至少一個(gè)指令地址范圍指示器進(jìn)行比較確定所述下一個(gè)指令提取地址是否對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的第一存儲(chǔ)器區(qū)域內(nèi)的位置或與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的第二存儲(chǔ)器區(qū)域內(nèi)的位置,并且當(dāng)所述下一個(gè)指令提取地址不位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的所述第一存儲(chǔ)器區(qū)域內(nèi)時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí)允許提取下一個(gè)計(jì)算機(jī)指令。
[0007]根據(jù)本公開的另一方面,提供了一種處理方法,包括:存儲(chǔ)至少一個(gè)指令地址范圍指示器,所述至少一個(gè)指令地址范圍指示器定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與第一權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第一存儲(chǔ)器區(qū)域,并且定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與第二權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第二存儲(chǔ)器區(qū)域;基于取自存儲(chǔ)器的指令的地址將當(dāng)前權(quán)限狀態(tài)定義為所述第一權(quán)限狀態(tài)或所述第二權(quán)限狀態(tài);通過將下一個(gè)指令提取地址與所述至少一個(gè)指令地址范圍指示器進(jìn)行比較,確定所述下一個(gè)指令提取地址是對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置還是位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置;以及當(dāng)所述下一個(gè)指令提取地址不對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí),允許提取所述下一個(gè)計(jì)算機(jī)指令。
[0008]根據(jù)本公開的又一方面,提供了一種處理方法,包括:將當(dāng)前權(quán)限狀態(tài)定義為管理者狀態(tài)或用戶狀態(tài);通過將下一個(gè)指令提取地址與指令地址范圍指示器進(jìn)行比較,確定所述下一個(gè)指令提取地址是對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置還是位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置,其中所述指令地址范圍指示器定義被分配用于存儲(chǔ)管理者代碼的管理者代碼存儲(chǔ)器區(qū)域和被分配用于存儲(chǔ)用戶代碼的用戶代碼存儲(chǔ)器區(qū)域;以及
[0009]當(dāng)所述下一個(gè)指令提取地址不對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí),允許提取所述下一個(gè)計(jì)算機(jī)指令。
【專利附圖】
【附圖說明】
[0010]圖1是根據(jù)一個(gè)示例實(shí)施例的處理系統(tǒng)的簡化框圖;
[0011]圖2是根據(jù)一個(gè)示例實(shí)施例的劃分的代碼和數(shù)據(jù)存儲(chǔ)器的簡化例子;
[0012]圖3是根據(jù)一個(gè)示例實(shí)施例的操作實(shí)現(xiàn)資源和執(zhí)行保護(hù)的系統(tǒng)的方法的流程圖;
[0013]圖4是說明了根據(jù)一個(gè)示例實(shí)施例的管理者狀態(tài)和用戶狀態(tài)以及它們之間的轉(zhuǎn)換的簡化狀態(tài)圖。
【具體實(shí)施方式】
[0014]本發(fā)明描述的實(shí)施例包括可以在處理系統(tǒng)中實(shí)施的資源和執(zhí)行保護(hù)方法以及裝置。實(shí)質(zhì)上,實(shí)施例使得資源和執(zhí)行保護(hù)在硬件方面以很低的成本實(shí)現(xiàn)。例如,可以通過使用在處理器中實(shí)現(xiàn)的相對(duì)簡單的邏輯,連同一組被用于存儲(chǔ)可以被具有不同權(quán)限級(jí)別的代碼訪問的資源的指示的寄存器,在系統(tǒng)中實(shí)現(xiàn)資源和執(zhí)行保護(hù)。現(xiàn)在將描述其中已經(jīng)整合了資源和執(zhí)行保護(hù)的實(shí)施例的處理系統(tǒng)的例子。如將在后面解釋的,圖1的示例系統(tǒng)并不是限制性的,并且這些實(shí)施例也可以在顯著不同的架構(gòu)中實(shí)現(xiàn)。
[0015]圖1是根據(jù)一個(gè)示例實(shí)施例的處理系統(tǒng)100的簡化框圖。至少,系統(tǒng)100包括一個(gè)或多個(gè)處理器核心110、存儲(chǔ)器資源(例如,非易失性閃存存儲(chǔ)器160和易失性隨機(jī)存取存儲(chǔ)器(RAM) 164)、以及一組“保護(hù)”寄存器130 (或其它數(shù)據(jù)存儲(chǔ)結(jié)構(gòu));與資源和執(zhí)行保護(hù)相關(guān)的信息可以被存儲(chǔ)在所述寄存器中。此外,系統(tǒng)100可以包括一個(gè)或多個(gè)外圍模塊140、142。例如,根據(jù)更加具體的實(shí)施例,該組保護(hù)寄存器130被實(shí)現(xiàn)為外圍模塊140的一部分,其對(duì)于核心110可通過系統(tǒng)總線150訪問。此外或替代地,在核心110和外圍模塊140之間可以存在直接信令連接152(例如,以有助于核心110和保護(hù)寄存器130之間的值的交換)。在其它實(shí)施例中,一個(gè)或多個(gè)保護(hù)寄存器130可以位于其它位置(例如,在核心110中或某些其它位置)。如在后面將更詳細(xì)地解釋的,保護(hù)寄存器130被用于實(shí)現(xiàn)由系統(tǒng)100進(jìn)行的資源和執(zhí)行保護(hù)機(jī)制的實(shí)施例。
[0016]閃存存儲(chǔ)器160和RAM164還可以分別地通過閃存控制器162和RAM控制器166經(jīng)過系統(tǒng)總線150訪問核心110。系統(tǒng)100可以也包括一個(gè)或多個(gè)其它處理器核心、總線、外圍模塊、代碼以及數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)、輸入/輸出(I/o)、以及其它組件。在不同實(shí)施例中,系統(tǒng)100可以在單一的集成電路(例如,作為片上系統(tǒng))或在多個(gè)集成電路(例如,作為封裝中系統(tǒng)或包括多個(gè)單獨(dú)封裝的集成電路的系統(tǒng))上實(shí)施。
[0017]在一個(gè)實(shí)施例中,核心110包括地址生成單元112、程序控制單元114、數(shù)據(jù)運(yùn)算單元116、指令提取地址寄存器(IFAR) 117、程序計(jì)數(shù)器(PC)寄存器118、堆棧指針(SP)寄存器120、以及各種模塊122、124、126、128。在其它實(shí)施例中,核心110可以包括附加的或不同的組件。雖然IFARl 17、PC寄存器118、SP寄存器120、以及模塊122、124、126、128被顯示為與地址生成單元112、程序控制單元114、以及數(shù)據(jù)運(yùn)算單元116不同,但這僅僅是為了描述的方便和清晰。在各種實(shí)施例中,IFARl 17,PC寄存器118、SP寄存器120、和/或模塊122、124、126、128可以被結(jié)合到下列中的任何一個(gè)或多個(gè)中:地址生成單元112、程序控制單元114、以及數(shù)據(jù)運(yùn)算單元116。
[0018]實(shí)質(zhì)上,核心110被配置來提取、譯碼和執(zhí)行計(jì)算機(jī)指令形式的代碼。例如,但不是限制的方式,核心110可以提取存儲(chǔ)在核心110外部的存儲(chǔ)器內(nèi)的代碼(例如,存儲(chǔ)在閃存存儲(chǔ)器160內(nèi)的代碼)。在代碼執(zhí)行期間,核心110可以執(zhí)行各種運(yùn)算操作、邏輯操作以及I/o操作,連同通過系統(tǒng)總線150對(duì)存儲(chǔ)器(例如,RAM164)以及各種外圍裝置(例如,夕卜圍模塊140、142和其它的外圍模塊(未顯示))的訪問(例如,讀取/寫入)。核心110執(zhí)行的大多數(shù)指令指定一個(gè)或多個(gè)操作對(duì)象(operand)。此外,在某些情況下,指令可以包括或指定位于存儲(chǔ)器中或其它地方(例如,閃存存儲(chǔ)器160、RAM164、外圍模塊140、142、或某些其它位置)的地址。例如,指令可以包括閃存存儲(chǔ)器160內(nèi)的地址,該地址表示執(zhí)行線程應(yīng)該跳轉(zhuǎn)到的指令的位置。替代地,指令可以包括或指定從中提取數(shù)據(jù)值或數(shù)據(jù)值應(yīng)當(dāng)要被存儲(chǔ)的位于RAM164、外圍設(shè)備140、142、或一些其它位置的地址。這樣指令的執(zhí)行被認(rèn)為是生成數(shù)據(jù)訪問事件(例如,讀或?qū)懯录?。
[0019]如在下面將更詳細(xì)地描述的,并且根據(jù)不同實(shí)施例,核心110被配置為使用模塊122、124、126、128以及存儲(chǔ)在保護(hù)寄存器130中的信息,來實(shí)現(xiàn)資源和執(zhí)行保護(hù)機(jī)制。實(shí)質(zhì)上,模塊122、124、126、128包括硬件(例如,邏輯和其它電路)以使得能夠執(zhí)行下面描述的功能。在一些實(shí)施例中,用于執(zhí)行下面描述的功能的“模塊”可以使用硬件和軟件實(shí)現(xiàn)。因此,術(shù)語“模塊”意指包括僅僅使用硬件(例如,邏輯門配置以及其它相關(guān)聯(lián)的電路)實(shí)現(xiàn)的以及使用硬件和軟件的組合實(shí)現(xiàn)的實(shí)施例。此外,雖然模塊122、124、126、128被顯示為彼此不同,并且與核心110的其它部分不同,但是模塊122、124、126、128中的部分或全部可以完全地或部分地相互集成和/或與核心110的其它部分集成?;诒景l(fā)明的描述,本領(lǐng)域技術(shù)人員將理解如何實(shí)現(xiàn)模塊122、124、126、128,并且因此,在此不詳細(xì)討論模塊122、124、126、128的特定配置。
[0020]本發(fā)明描述的資源和執(zhí)行保護(hù)機(jī)制的實(shí)施例支持具有相對(duì)高的權(quán)限級(jí)別的代碼和數(shù)據(jù)與具有相對(duì)低的權(quán)限級(jí)別的代碼和數(shù)據(jù)的硬件實(shí)施的分離。如在此所使用的,術(shù)語“管理者權(quán)限級(jí)別”指在系統(tǒng)100中實(shí)現(xiàn)的最高權(quán)限級(jí)別,而“用戶權(quán)限級(jí)另Ij”指較低的權(quán)限級(jí)別。同樣地,術(shù)語“管理者代碼”指指定具有管理者權(quán)限級(jí)別的代碼(例如,操作系統(tǒng)內(nèi)核代碼和其它高度受信任的代碼),而“用戶代碼”指指定具有用戶權(quán)限級(jí)別的代碼(例如,其執(zhí)行是由內(nèi)核代碼管理的應(yīng)用程序代碼)。雖然在此詳細(xì)討論的實(shí)施例僅僅涉及兩個(gè)權(quán)限級(jí)別(即,管理者權(quán)限級(jí)別和用戶權(quán)限級(jí)別),然而其它實(shí)施例可以實(shí)現(xiàn)具有兩個(gè)以上權(quán)限級(jí)別的代碼的硬件實(shí)現(xiàn)的分離,并且意圖將這些實(shí)施例包括在本發(fā)明的主題范圍內(nèi)。在詳細(xì)討論資源和執(zhí)行保護(hù)機(jī)制的實(shí)施例之前,將首先討論核心110的基本操作。
[0021]核心110可以有流水線架構(gòu),其中指令被作為在連續(xù)時(shí)鐘周期期間執(zhí)行的步驟序列而執(zhí)行。例如,對(duì)于任何特定指令,核心110可以執(zhí)行以下的步驟:指令提取,譯碼指令,執(zhí)行指令,執(zhí)行存儲(chǔ)器訪問(當(dāng)指令指定了位于閃存存儲(chǔ)器160、RAM164、或其它地方中的地址時(shí)),以及在某些情況下,指令執(zhí)行結(jié)果的寄存器回寫。在一個(gè)實(shí)施例中,核心110包括兩個(gè)指令地址寄存器以便于流水線架構(gòu)的實(shí)現(xiàn)。這些指令地址寄存器包括IFAR117和PC寄存器118。
[0022]IFARl 17被用于定義當(dāng)前位于指令提取流水線頂部的指令的存儲(chǔ)器地址,在此稱為“指令提取地址”。IFARl 17可以加載有關(guān)于每個(gè)指令流“不連續(xù)”(例如,不包括對(duì)存儲(chǔ)在存儲(chǔ)器內(nèi)的連續(xù)地址中的指令的訪問,但相反包括對(duì)存儲(chǔ)在非連續(xù)地址中的指令的訪問的指令流轉(zhuǎn)換)的指令提取地址。例如,由于所采取的分支指令,響應(yīng)于特定指令(例如,軟件中斷、陷阱指令,等等)的執(zhí)行,或響應(yīng)于異常情況的發(fā)生,可能出現(xiàn)指令流不連續(xù)。一旦加載以指令提取地址,則發(fā)起相應(yīng)的指令提取。更具體地,指令提取地址進(jìn)行到系統(tǒng)總線150上,并且到存儲(chǔ)器(例如,閃存存儲(chǔ)器160)中的目標(biāo)目的地。隨后,目的地存儲(chǔ)器將提取的指令返回到核心110。隨著這個(gè)以及每個(gè)后續(xù)提取周期的完成,IFAR117中的地址被增加以指令提取的寬度(或“提取寬度”),除非出現(xiàn)另一指令提取不連續(xù)。如果不存在指令提取不連續(xù),則指令提取流水線繼續(xù)連續(xù)地生成地址并訪問適當(dāng)?shù)哪康牡卮鎯?chǔ)器。當(dāng)發(fā)生重新定向提取流的指令提取不連續(xù)的時(shí)候,IFAR117被重新加載新的、非連續(xù)的指令提取地址,目標(biāo)目的地存儲(chǔ)器被訪問,并且指令提取流水線恢復(fù)其連續(xù)地址生成和目的地存儲(chǔ)器訪問過程。
[0023]隨著提取的指令返回到核心110,該指令被加載到執(zhí)行流水線中。PC寄存器118被用于定義當(dāng)前駐留在執(zhí)行流水線頂部的指令的存儲(chǔ)器地址,在此被稱為“PC地址”。一旦指令通過執(zhí)行流水線開始進(jìn)行,則基于指令長度,與下一個(gè)指令到達(dá)執(zhí)行流水線的頂部(來自內(nèi)部指令緩沖器或來自系統(tǒng)總線150上的提取周期)同時(shí)地使PC寄存器118內(nèi)的PC地址遞增。在某些情況下,指令提取寬度(例如,指令提取總線的寬度)以及指令長度可以相等(例如,兩者都是2字節(jié),或一些其它長度),在這種情況下,IFARl 17和PC寄存器118內(nèi)的地址以相同的值(即,指令長度)遞增。在其它情況下,指令提取寬度可以與指令長度不同(例如,比指令長度寬)。例如,指令提取寬度可以是指令長度的兩倍(例如,分別是4字節(jié)和2字節(jié),或一些其它長度),在這種情況下,每個(gè)指令提取可以導(dǎo)致同時(shí)將兩個(gè)指令提取到核心110。在這樣的實(shí)施例中,直到遇到指令流不連續(xù),IFARl 17內(nèi)的地址將以指令提取寬度(例如,2x字節(jié))遞增,而PC寄存器118內(nèi)的地址以FARl 17遞增速率兩倍的速率以指令長度(例如,X字節(jié))遞增。為了便于解釋,下面的討論可能涉及基于IFAR117內(nèi)的地址提取“指令”?;诒景l(fā)明的描述,本領(lǐng)域技術(shù)人員將理解,當(dāng)基于IFAR117內(nèi)的地址提取多個(gè)指令的時(shí)候(例如,當(dāng)指令提取寬度比指令長度寬的時(shí)候),可以如何修改本發(fā)明主題的實(shí)施例。
[0024]一旦系統(tǒng)啟動(dòng)(例如,通電),地址生成單元112將第一指令提取地址(例如,復(fù)位向量)加載到IFAR117。第一指令提取地址對(duì)應(yīng)于系統(tǒng)的初始化代碼(例如,包括基本輸入輸出系統(tǒng)(BIOS)和核心初始化代碼)的在存儲(chǔ)器內(nèi)(例如,閃存存儲(chǔ)器160內(nèi))的起始地址。然后核心110從與IFAR117內(nèi)指定的指令提取地址對(duì)應(yīng)的一個(gè)或多個(gè)存儲(chǔ)器位置(例如,閃存160內(nèi))提取一個(gè)或多個(gè)第一指令(取決于指令提取寬度)。使用第一提取指令初始化PC寄存器118,并且相應(yīng)的,提取的指令然后進(jìn)入執(zhí)行流水線。在進(jìn)入到執(zhí)行流水線中時(shí),程序控制單元114對(duì)指令進(jìn)行譯碼并且控制其執(zhí)行。隨著每個(gè)指令提取被發(fā)起,地址生成單元112確定IFAR117內(nèi)的指令提取地址是否要遞增,或者,當(dāng)指令中指示有指令流不連續(xù)的時(shí)候,地址生成單元112確定提取與下一個(gè)指令對(duì)應(yīng)的指令提取地址。無論哪種方式,IFARl 17內(nèi)的指令提取地址可以根據(jù)所述確定而被修改。
[0025]如前面所示的,除了執(zhí)行管理者代碼(例如,內(nèi)核代碼),核心110還可以執(zhí)行具有相對(duì)低的權(quán)限級(jí)別的用戶代碼(與管理者代碼的權(quán)限級(jí)別相比時(shí))。多種實(shí)施例構(gòu)思核心110執(zhí)行管理者代碼和用戶代碼之間有序轉(zhuǎn)換。更具體地,在一個(gè)實(shí)施例中,核心110實(shí)現(xiàn)了至少包括“管理者狀態(tài)”(例如,圖4的管理者狀態(tài)410)和“用戶狀態(tài)”(例如,圖4的用戶狀態(tài)420)的狀態(tài)機(jī)。如后面將結(jié)合圖3和圖4更詳細(xì)地描述的,基于核心110已經(jīng)允許從存儲(chǔ)器提取(例如,基于IFAR117內(nèi)的指令提取地址)的最新近指令的地址確定所述狀態(tài)。例如,當(dāng)核心110已經(jīng)允許提取的最新近指令是來自分配給管理者代碼的存儲(chǔ)器部分(例如,圖2的管理者代碼存儲(chǔ)區(qū)216)的時(shí)候,核心110處于管理者狀態(tài)。相反,當(dāng)核心110已經(jīng)允許提取的最新近指令是來自分配給用戶代碼的存儲(chǔ)器部分(例如,圖2的用戶代碼存儲(chǔ)區(qū)218)的時(shí)候,核心110處于用戶狀態(tài)。在一個(gè)實(shí)施例中,核心110最新近允許提取的指令的權(quán)限級(jí)別定義“當(dāng)前權(quán)限狀態(tài)”。如在后面將更詳細(xì)地描述的,核心110包括被配置用于確定和保持當(dāng)前權(quán)限狀態(tài)的知識(shí)的模塊(在圖1被示出為狀態(tài)模塊122)。更具體地,在一個(gè)實(shí)施例中,核心110包括被配置用于通過將至少一個(gè)指令地址范圍指示器(例如,后面討論的存儲(chǔ)在圖1和圖2的用戶代碼基址寄存器(BAR) 132,212中的值)和最新近允許的指令提取的地址(例如,基于IFARl 17內(nèi)的當(dāng)前指令提取地址的地址)進(jìn)行比較,確定當(dāng)前權(quán)限狀態(tài)是管理態(tài)還是用戶狀態(tài)的模塊(例如,狀態(tài)模塊122)。在一個(gè)實(shí)施例中,狀態(tài)模塊122可以形成程序控制單元114的一部分。在其它實(shí)施例中,用于執(zhí)行此功能的硬件可以位于其它位置。
[0026]在一個(gè)實(shí)施例中,一旦IFAR117內(nèi)的值被更新,則基于當(dāng)前權(quán)限狀態(tài)、提取下一個(gè)指令的地址(例如,基于IFAR117內(nèi)的指令提取地址的地址)、以及存儲(chǔ)在保護(hù)寄存器130內(nèi)的指令地址范圍指示器,核心110可以允許或禁止下一個(gè)指令被提取。如在后面將更詳細(xì)地描述的,核心110包括被配置來確定是否允許或禁止指令的提取的模塊(在圖1被示出為提取模塊124)。更具體地,在一個(gè)實(shí)施例中,核心110包括被配置來通過將下一個(gè)指令提取地址和至少一個(gè)指令地址范圍指示器(例如,后面討論的存儲(chǔ)在用戶代碼BAR132中的值)進(jìn)行比較,確定下一個(gè)要提取的指令的地址(例如,基于IFAR117內(nèi)的指令提取地址的地址)是否位于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域(例如,閃存存儲(chǔ)器160)內(nèi)或位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的模塊(例如,提取模塊124)。當(dāng)下一個(gè)指令提取地址不位于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的時(shí)候,核心110被配置為僅僅在特定條件下允許下一個(gè)計(jì)算機(jī)指令被提取、解碼、以及執(zhí)行,如后面將要討論的。在一個(gè)實(shí)施例中,提取模塊124可以形成程序控制單元114的一部分。在其它實(shí)施例中,用于執(zhí)行此功能的硬件可以位于其它位置。假定允許提取指令,程序控制單元114控制指令譯碼和執(zhí)行過程。例如,在程序控制單元114的控制下,數(shù)據(jù)運(yùn)算單元116 (或核心110的其它部分)可以執(zhí)行對(duì)運(yùn)行(例如,執(zhí)行)指令來說必要的任何各種運(yùn)算和邏輯操作。
[0027]如前面所示的,指令可以定義數(shù)據(jù)引用(例如,地址),其又可以發(fā)起對(duì)系統(tǒng)資源(例如,對(duì)RAM164,外圍模塊140、142,或其它地方中的位置)的訪問。在一個(gè)實(shí)施例中,關(guān)于在系統(tǒng)100內(nèi)實(shí)現(xiàn)的資源保護(hù),核心110可以基于指令的權(quán)限級(jí)別(或者,當(dāng)前權(quán)限狀態(tài)或從其指令提取的地址),以及存儲(chǔ)在保護(hù)寄存器130中的數(shù)據(jù)地址范圍指示器,允許或拒絕對(duì)資源的訪問。如在后面將更詳細(xì)地描述的,核心110包括被配置來確定是否允許或拒絕對(duì)特定系統(tǒng)資源的訪問的模塊(在圖1被示出為訪問模塊126)。更具體地,在一個(gè)實(shí)施例中,核心110包括被配置來確定在執(zhí)行指令時(shí)是否生成數(shù)據(jù)訪問地址(例如,引用RAM164的地址),并且通過將所述數(shù)據(jù)訪問地址與至少一個(gè)數(shù)據(jù)地址范圍指示器(例如,存儲(chǔ)在圖1和圖2的用戶代碼BAR133、222的值,稍后將討論)進(jìn)行比較,以確定所述數(shù)據(jù)訪問地址是否與管理者狀態(tài)或用戶狀態(tài)相關(guān)聯(lián)的模塊(例如,訪問模塊126)。在當(dāng)前權(quán)限狀態(tài)是允許訪問存儲(chǔ)器位置(例如,RAM164中的位置)的權(quán)限狀態(tài)時(shí),核心110被配置為允許對(duì)與數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置的訪問。在一個(gè)實(shí)施例中,訪問模塊126可以形成程序控制單元114的一部分。在其它實(shí)施例中,用于執(zhí)行此功能的硬件可以位于其它位置。
[0028]如前面所示的,保護(hù)寄存器130內(nèi)的信息可以由核心110結(jié)合提供資源和執(zhí)行保護(hù)功能而訪問。除了別的之外,系統(tǒng)初始化代碼可以包括這樣的指令,該指令在被執(zhí)行時(shí)在保護(hù)寄存器130中建立各種設(shè)置或值。例如,保護(hù)寄存器130可以包括控制寄存器131、用戶代碼BAR132、用戶數(shù)據(jù)BAR133、用戶外圍BAR134、替代SP寄存器135、非法PC寄存器136、以及故障PC寄存器137。
[0029]現(xiàn)在簡要描述控制寄存器131,而每個(gè)其它寄存器132-137的描述將在下面適當(dāng)?shù)牟糠直幻枋?。在一個(gè)實(shí)施例中,控制寄存器131包括一個(gè)或多個(gè)寄存器鎖定標(biāo)志和使能標(biāo)志。當(dāng)包括單一寄存器鎖定標(biāo)志時(shí),當(dāng)寄存器鎖定標(biāo)志被清除時(shí),向核心110指示保護(hù)寄存器130內(nèi)的值可以被在核心110 (假定代碼有適當(dāng)?shù)臋?quán)限級(jí)別)上執(zhí)行的代碼改變。相反,當(dāng)寄存器鎖定標(biāo)志被設(shè)置時(shí),保護(hù)寄存器130內(nèi)的值不可以被修改(例如,外圍模塊140或保護(hù)寄存器130將不允許任何代碼修改保護(hù)寄存器130中的值)。在替代實(shí)施例中,控制寄存器131可以包括多個(gè)寄存器鎖定標(biāo)志以提供更細(xì)粒度的對(duì)保護(hù)寄存器130的訪問(例如,所述多個(gè)寄存器鎖定標(biāo)志中的每一個(gè)可以被用于控制對(duì)一個(gè)或多個(gè)保護(hù)寄存器130的組)。使能標(biāo)志當(dāng)被設(shè)置時(shí),表示系統(tǒng)的資源和執(zhí)行保護(hù)機(jī)制被使能,并且核心110應(yīng)該實(shí)現(xiàn)這些機(jī)制。當(dāng)使能標(biāo)志被清除時(shí),核心110將禁用與資源和執(zhí)行保護(hù)機(jī)制相關(guān)聯(lián)的操作。在另一個(gè)實(shí)施例中,核心可以選擇性地繞過(bypass)與資源和執(zhí)行保護(hù)機(jī)制相關(guān)聯(lián)的操作。
[0030]在一個(gè)實(shí)施例中,在系統(tǒng)啟動(dòng)或復(fù)位時(shí),核心110確定資源和執(zhí)行保護(hù)使能信號(hào)是否已被提供給系統(tǒng)(例如,通過使能輸入)。如果是,則核心110允許初始化代碼設(shè)置使能標(biāo)志。此外,在系統(tǒng)復(fù)位時(shí),寄存器鎖定標(biāo)志(或若干寄存器鎖定標(biāo)志)被清除,從而使得初始化代碼可以隨后在寄存器132-137內(nèi)建立各種值。一旦這些值已在寄存器132-137內(nèi)建立,初始化代碼可以設(shè)置寄存器鎖定標(biāo)志(一個(gè)或多個(gè))以使得其它代碼不可以改變與所設(shè)置的標(biāo)志對(duì)應(yīng)的寄存器132-137內(nèi)的值。這里的描述假定保護(hù)寄存器130(特別是,寄存器132-134)中的值在系統(tǒng)100的正常操作期間(例如,在系統(tǒng)初始化之后)不被改變。在其它實(shí)施例中,一些或全部保護(hù)寄存器132-134內(nèi)的值也可以在系統(tǒng)初始化之后(例如,在某些情況下和/或在不同的時(shí)間)被重新加載或改變。例如,保護(hù)寄存器132-134內(nèi)的值可以被改變以增加和/或減少對(duì)于管理者代碼或用戶代碼可訪問的資源的量。作為另一示例,某些保護(hù)寄存器132-134內(nèi)的值可以在每當(dāng)用戶進(jìn)程(例如,任務(wù))開始執(zhí)行時(shí)加載(或重新加載)。保護(hù)寄存器132-134內(nèi)的值也可以在其它時(shí)間改變。雖然在此沒有詳細(xì)討論這些實(shí)施例,但仍意圖將它們包括在本發(fā)明主題的范圍內(nèi)。
[0031]如在后面將更詳細(xì)地討論的,寄存器132-134被用于定義與管理者狀態(tài)相關(guān)聯(lián)的各種資源部分(例如,閃存存儲(chǔ)器160、RAM164、外圍裝置等等)以及與用戶狀態(tài)相關(guān)聯(lián)的資源部分。在一個(gè)實(shí)施例中,保護(hù)寄存器130可以只被管理者代碼(例如,內(nèi)核代碼)訪問,而外圍模塊140被認(rèn)為是管理級(jí)別資源。
[0032]除了在至少一些保護(hù)寄存器130內(nèi)建立值之外,初始化代碼還可以建立堆棧以供管理者代碼使用(在此稱為“管理堆?!?例如,圖2的管理者堆棧227))。例如,管理者堆??梢酝ㄟ^將“管理者堆棧指針”加載到SP寄存器120中而建立。最初,管理者堆棧指針可以指定管理者堆棧的初始在存儲(chǔ)器(例如,RAM164)中的地址(B卩,管理者堆棧的基址)。在執(zhí)行管理者代碼期間,管理者堆棧指針由核心110保持。更具體地,在管理者代碼將數(shù)據(jù)推入(push)管理者堆棧以及將數(shù)據(jù)從管理者堆棧彈出時(shí),SP寄存器120中的管理者堆棧指針相應(yīng)地遞增和遞減。在其它實(shí)施例中,核心110可以使用以不同方式操作的硬件堆棧。無論哪種方式,SP寄存器120中的管理者堆棧指針總是應(yīng)該指向管理者堆棧上的頂部元素。
[0033]核心110還可以建立至少一個(gè)其它堆棧以供用戶代碼(例如,RAM164中的)使用。這樣堆棧在此稱為“用戶堆棧”(例如,圖2的用戶堆棧229),并且當(dāng)核心110在執(zhí)行用戶代碼時(shí),核心110也保持用于用戶堆棧的堆棧指針(在此稱為“用戶堆棧指針”)。為了便于描述,在此討論單一用戶堆棧,然而其它實(shí)施例可以實(shí)現(xiàn)多個(gè)用戶堆棧。
[0034]因?yàn)楹诵?10可以在執(zhí)行管理者代碼和用戶代碼之間轉(zhuǎn)換,并且因?yàn)榇嬖谂c管理者代碼和用戶代碼兩者都關(guān)聯(lián)的堆棧(并因此,存在與管理者代碼和用戶代碼兩者都相關(guān)聯(lián)的堆棧指針),所以多種不同實(shí)施例都包括用于在管理者狀態(tài)和用戶態(tài)之間的轉(zhuǎn)換期間交換管理者堆棧指針和用戶堆棧指針的機(jī)構(gòu)。在一個(gè)實(shí)施例中,系統(tǒng)100包括“替代”SP寄存器135,該“替代” SP寄存器135可以被用于當(dāng)核心110處于不同的狀態(tài)時(shí)存儲(chǔ)管理者堆棧指針或用戶堆棧指針。換句話說,當(dāng)核心110處于管理者狀態(tài)時(shí),管理者堆棧指針被保持在核心的SP寄存器120中,而用戶堆棧指針被保持在替代SP寄存器135中。在核心110從管理者狀態(tài)轉(zhuǎn)換到用戶狀態(tài)時(shí),SP寄存器120中的管理者堆棧指針的值與替代SP寄存器135中的用戶堆棧指針的值交換。當(dāng)核心110處于用戶狀態(tài)時(shí),用戶堆棧指針被保持在核心的SP寄存器120中,而管理者堆棧指針被保留在替代SP寄存器135中。在核心110從用戶狀態(tài)轉(zhuǎn)換到管理者狀態(tài)時(shí),SP寄存器120中的用戶堆棧指針的值與替代SP寄存器135中的管理者堆棧指針的值進(jìn)行交換。換句話說,在任何給定時(shí)間,存儲(chǔ)在SP寄存器120中的堆棧指針對(duì)應(yīng)于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的堆棧。
[0035]在一個(gè)實(shí)施例中,核心110包括被配置來在管理者狀態(tài)和用戶狀態(tài)之間的轉(zhuǎn)換期間將存儲(chǔ)在SP寄存器120和替代SP寄存器135中的堆棧指針進(jìn)行交換的模塊(在圖1示出為SP交換模塊128)。更具體地,在一個(gè)實(shí)施例中,核心110包括這樣的模塊(例如,SP交換模塊128),其被配置為在進(jìn)行當(dāng)前權(quán)限級(jí)別和不同的權(quán)限級(jí)別之間的轉(zhuǎn)換時(shí)將堆棧指針從SP寄存器120移入到替代SP寄存器135中,并且同時(shí)將堆棧指針從替代SP寄存器135移入到SP寄存器120中。根據(jù)一個(gè)實(shí)施例,SP寄存器120和替代SP寄存器135中的堆棧指針可以被調(diào)換(或“交換”),例如,通過直接信號(hào)連接152。在一個(gè)實(shí)施例中,SP交換模塊128可以形成程序控制單元114的一部分。在其它實(shí)施例中,用于執(zhí)行此功能的硬件可以位于其它位置。
[0036]在一個(gè)實(shí)施例中,為了實(shí)現(xiàn)執(zhí)行保護(hù),存儲(chǔ)指令的存儲(chǔ)器(例如,閃存存儲(chǔ)器160或代碼存儲(chǔ)器210)被劃分成多個(gè)區(qū)域,其中每個(gè)區(qū)域?qū)?yīng)于一權(quán)限級(jí)別(例如,一個(gè)或多個(gè)區(qū)域?qū)?yīng)于管理權(quán)限級(jí)別,以及一個(gè)或多個(gè)不同的區(qū)域?qū)?yīng)于用戶權(quán)限級(jí)別)。相應(yīng)地,核心110可以基于指令存儲(chǔ)在存儲(chǔ)器中(S卩,指令存儲(chǔ)的區(qū)域中)的地址,確定每個(gè)指令的權(quán)限級(jí)別。
[0037]在一個(gè)實(shí)施例中,通過使用至少一個(gè)“指令地址范圍指示器”定義代碼存儲(chǔ)器區(qū)域(被一個(gè)或多個(gè)分隔分開)。地址范圍指示器定義被分配用于存儲(chǔ)與管理者狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令(“管理者代碼”)的一個(gè)或多個(gè)第一存儲(chǔ)器區(qū)域,并且定義被分配用于存儲(chǔ)與用戶狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令(“用戶代碼”)的一個(gè)或多個(gè)第二存儲(chǔ)器區(qū)域。在更具體的實(shí)施例中,指令地址范圍指示器包括定義與管理者代碼相關(guān)聯(lián)的存儲(chǔ)器的第一區(qū)域和與用戶代碼相關(guān)聯(lián)的存儲(chǔ)器的第二區(qū)域之間的邊界(例如,在閃存存儲(chǔ)器160或代碼存儲(chǔ)器210中)的地址。存儲(chǔ)在小于(或者,在另一個(gè)實(shí)施例中,等于或小于)指令地址范圍指示器的地址中的任何指令對(duì)應(yīng)于管理者代碼,而存儲(chǔ)在等于或大于(或者,在另一個(gè)實(shí)施例中,大于)指令地址范圍指示器的地址中的任何指令對(duì)應(yīng)于用戶代碼。在替代實(shí)施例中,也可以是相反的情況。無論哪種方式,在一個(gè)實(shí)施例中,提取模塊124 (或其它電路)被配置為:當(dāng)下一個(gè)指令提取地址落入分配給管理者代碼的存儲(chǔ)器區(qū)域的其中一個(gè)時(shí),確定下一個(gè)指令提取地址(例如,基于IFAR117中的值的地址)處于與管理者狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域(例如,閃存存儲(chǔ)器160或代碼存儲(chǔ)器210中的區(qū)域),或者,當(dāng)下一個(gè)指令提取地址落入分配給用戶代碼的存儲(chǔ)器區(qū)域的其中一個(gè)時(shí),確定下一個(gè)指令提取地址與用戶狀態(tài)相關(guān)聯(lián)。
[0038]在一個(gè)實(shí)施例中,指令地址范圍指示器指定用于用戶代碼在代碼存儲(chǔ)器(例如,閃存存儲(chǔ)器160或代碼存儲(chǔ)器210)中存儲(chǔ)的基址。替代地,指令地址范圍指示器可以指定用于管理者代碼在代碼存儲(chǔ)器中存儲(chǔ)的最高地址(上邊界)。無論哪種方式,指令地址范圍指示器都定義了存儲(chǔ)器中在管理者代碼區(qū)域和用戶代碼區(qū)域之間的邊界。以下的描述討論了一個(gè)實(shí)施例,在該實(shí)施例中,指令地址范圍指示器包括指定用于用戶代碼在代碼存儲(chǔ)器內(nèi)(例如,閃存存儲(chǔ)器160或代碼存儲(chǔ)器210內(nèi))的存儲(chǔ)的基址的地址,并且該地址在此被稱為“用戶代碼基址”。在一個(gè)實(shí)施例中,在系統(tǒng)的初始化代碼的執(zhí)行期間,在用戶代碼BAR132內(nèi)建立(存儲(chǔ))用戶代碼基址。在其中多個(gè)不連續(xù)的存儲(chǔ)器區(qū)域被分配給管理者代碼和/或用戶代碼的實(shí)施例中,多個(gè)指令地址范圍指示器可以存儲(chǔ)在系統(tǒng)100中(例如,在多個(gè)寄存器中)。這樣的實(shí)施例也被包括在本發(fā)明主題的范圍中,但在此中不作詳細(xì)討論。
[0039]在一個(gè)實(shí)施例中,為了實(shí)現(xiàn)資源保護(hù),將核心110可以訪問的資源(例如,RAM164、外圍模塊140、142等等)劃分成組,每組都與權(quán)限等級(jí)對(duì)應(yīng)(例如,一個(gè)或多個(gè)組對(duì)應(yīng)于管理權(quán)限級(jí)別,并且一個(gè)或多個(gè)組對(duì)應(yīng)于用戶權(quán)限級(jí)別)。相應(yīng)地,核心110 (或者更具體地,訪問模塊126)可以確定與一權(quán)限級(jí)別相關(guān)聯(lián)的指令是否在試圖訪問具有與該指令相同或不同的權(quán)限級(jí)別的資源(例如,生成數(shù)據(jù)引用)。
[0040]在一個(gè)實(shí)施例中,存儲(chǔ)器類型資源(例如,RAM164或數(shù)據(jù)存儲(chǔ)器220)可以被劃分成一個(gè)或多個(gè)管理者數(shù)據(jù)區(qū)域以及劃分成一個(gè)或多個(gè)用戶數(shù)據(jù)區(qū)域,并且通過使用至少一個(gè)“數(shù)據(jù)地址范圍指示器”來定義這些區(qū)域。數(shù)據(jù)地址范圍指示器定義被分配用于存儲(chǔ)與管理者狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)(“管理者數(shù)據(jù)”)的一個(gè)或多個(gè)第一存儲(chǔ)器區(qū)域,以及定義被分配用于存儲(chǔ)與用戶狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)(“用戶數(shù)據(jù)“)的一個(gè)或多個(gè)第二存儲(chǔ)器區(qū)域。在更具體的實(shí)施例中,數(shù)據(jù)地址范圍指示器包括定義在與管理者數(shù)據(jù)相關(guān)聯(lián)的第一存儲(chǔ)器區(qū)域和與用戶數(shù)據(jù)相關(guān)聯(lián)的第二存儲(chǔ)器區(qū)域之間的邊界(例如,在RAM164或數(shù)據(jù)存儲(chǔ)器220中)的地址。核心110可以允許管理者代碼訪問存儲(chǔ)在任一存儲(chǔ)器區(qū)域中的任何數(shù)據(jù)(例如,管理者數(shù)據(jù)和用戶數(shù)據(jù)兩者),但核心110也可以僅允許用戶代碼訪問存儲(chǔ)在等于或大于(或者,在另一個(gè)實(shí)施例中,大于)地址范圍指示器的地址中的數(shù)據(jù)(例如,僅用戶數(shù)據(jù))。在替代實(shí)施例中,核心110可以允許用戶代碼僅訪問存儲(chǔ)在小于(或者,在另一個(gè)實(shí)施例中,小于或等于)地址范圍指示器的地址中的數(shù)據(jù)。無論哪種方式,在一個(gè)實(shí)施例中,訪問模塊126(或其它電路)被配置為:當(dāng)數(shù)據(jù)訪問地址落入分配給管理者數(shù)據(jù)的存儲(chǔ)器區(qū)域中的一個(gè)時(shí),確定數(shù)據(jù)訪問地址與管理者狀態(tài)相關(guān)聯(lián),以及當(dāng)數(shù)據(jù)訪問地址落入分配給用戶數(shù)據(jù)的存儲(chǔ)器區(qū)域中的一個(gè)時(shí),確定數(shù)據(jù)訪問地址與用戶狀態(tài)相關(guān)聯(lián)。
[0041]在一個(gè)實(shí)施例中,數(shù)據(jù)地址范圍指示器指定用于用戶數(shù)據(jù)在存儲(chǔ)器資源(例如,在RAM164或數(shù)據(jù)存儲(chǔ)器220內(nèi))內(nèi)存儲(chǔ)的基址。替代地,數(shù)據(jù)地址范圍指示器可以指定用于管理者數(shù)據(jù)在存儲(chǔ)器資源內(nèi)存儲(chǔ)的最高地址(上邊界)。無論哪種方式,數(shù)據(jù)地址范圍指示器定義了在存儲(chǔ)器中在管理者數(shù)據(jù)空間和用戶數(shù)據(jù)空間之間的邊界。以下的描述討論了一個(gè)實(shí)施例,在該實(shí)施例中,數(shù)據(jù)地址范圍指示器包括指定用于用戶代碼在存儲(chǔ)器資源內(nèi)(例如,RAM164內(nèi))的存儲(chǔ)的基址的地址,并且該地址在此被稱為“用戶數(shù)據(jù)基址”。在一個(gè)實(shí)施例中,在系統(tǒng)的初始化代碼的執(zhí)行期間在用戶數(shù)據(jù)BAR133內(nèi)建立(存儲(chǔ))用戶數(shù)據(jù)基址。在其中多個(gè)不連續(xù)存儲(chǔ)器區(qū)域被分配給管理者數(shù)據(jù)和/或用戶數(shù)據(jù)的實(shí)施例中,多個(gè)數(shù)據(jù)地址范圍指示器可以被存儲(chǔ)在系統(tǒng)100中(例如,在多個(gè)寄存器中)。這樣的實(shí)施例被包括在本發(fā)明主題的范圍內(nèi),但在此不再詳細(xì)討論。
[0042]在一個(gè)實(shí)施例中,外圍資源(例如,外圍模塊140、142,以及其它外圍裝置(未說明))可以被劃分成一個(gè)或多個(gè)管理外圍組或劃分成一個(gè)或多個(gè)用戶外圍組,并且通過使用至少一個(gè)“外圍地址范圍指示器”來定義這些組。在更具體的實(shí)施例中,外圍地址范圍指示器包括定義在對(duì)于管理者代碼可以訪問的第一組外圍裝置(例如,外圍模塊140是其一部分)和對(duì)于管理者代碼和用戶代碼兩者可以訪問的第二組外圍裝置之間的邊界的地址。核心110可以允許管理者代碼訪問任意外圍裝置(例如,對(duì)管理者代碼可訪問的外圍裝置沒有限制),但核心110可以僅允許用戶代碼訪問具有等于或大于(或者,在另一個(gè)實(shí)施例中,大于)外圍地址范圍指示器的地址的外圍裝置。在替代實(shí)施例中,核心110可以僅允許用戶代碼訪問具有小于(或者,在另一個(gè)實(shí)施例中,等于或小于)地址范圍指示器的地址的外圍裝置。
[0043]在一個(gè)實(shí)施例中,外圍地址范圍指示器指定用戶代碼可以訪問的外圍裝置的最小地址。替代地,外圍地址范圍指示器可以指定僅僅管理者代碼可以訪問的外圍裝置的最大地址。替代地,可以使用多個(gè)外圍地址范圍指示器來標(biāo)識(shí)對(duì)于用戶代碼、管理者代碼或這兩者可以訪問的多組外圍裝置的地址。無論哪種方式,外圍地址范圍指示器定義了僅僅對(duì)于管理者代碼可訪問的一組外圍裝置,以及對(duì)于管理者代碼和用戶代碼兩者可訪問的一組外圍裝置。下面的描述說明了一個(gè)實(shí)施例,在該實(shí)施例中,外圍地址范圍指示器包括指定了特定外圍裝置地址的地址,并且該地址在此被稱為“用戶外圍基址。”在一個(gè)實(shí)施例中,用戶外圍基址在系統(tǒng)的初始化代碼的執(zhí)行期間被建立(被存儲(chǔ))在用戶外圍BAR134內(nèi)。
[0044]提供圖2以使用保護(hù)寄存器130更全面地說明資源劃分的概念。圖2是根據(jù)一個(gè)示例實(shí)施例的劃分的代碼存儲(chǔ)器210 (例如,閃存存儲(chǔ)器160)和劃分的數(shù)據(jù)存儲(chǔ)器220 (例如,RAM164)的簡化的例子。圖2還示出了用戶代碼BAR212 (例如,用戶代碼BAR132)和用戶數(shù)據(jù)BAR222 (例如,用戶數(shù)據(jù)BAR133)。雖然在圖2中未示出外圍裝置被劃分成與管理者狀態(tài)和用戶狀態(tài)相關(guān)聯(lián)的組,但是通過本文中其它地方的描述應(yīng)理解外圍裝置劃分。
[0045]在一個(gè)實(shí)施例中,結(jié)合資源保護(hù),指令地址范圍指示器被存儲(chǔ)在用戶代碼BAR212中(例如,在系統(tǒng)初始化期間或在其它時(shí)間),并且指令地址范圍指示器定義在被分配用于存儲(chǔ)管理者代碼的第一存儲(chǔ)器區(qū)域216 (“管理者代碼存儲(chǔ)器區(qū)域)和被分配用于存儲(chǔ)用戶代碼的第二存儲(chǔ)器區(qū)域218 (“用戶代碼存儲(chǔ)器區(qū)域”)之間的分隔214。在系統(tǒng)運(yùn)行期間,核心(例如,核心110)將要提取的每個(gè)下一個(gè)指令的地址(例如,基于IFAR117中的值的地址)和指令地址范圍指示器進(jìn)行比較。當(dāng)比較表明要提取的下一個(gè)指令地址落入第一存儲(chǔ)器區(qū)域216內(nèi)時(shí),核心確定要提取的下一個(gè)指令地址是管理者代碼。相反,當(dāng)比較表明要提取的下一個(gè)指令地址落入第二存儲(chǔ)器區(qū)域218內(nèi)時(shí),核心確定要提取的下一個(gè)指令地址是用戶代碼。
[0046]然后,核心可以確定是否允許提取下一個(gè)指令和/或是否允許提取所需的狀態(tài)變化。如前面所提到的,當(dāng)下一個(gè)指令提取地址(例如,基于IFAR117中的值的地址)不處于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的時(shí)候,核心可以被配置為僅僅當(dāng)從當(dāng)前權(quán)限狀態(tài)到不同的權(quán)限狀態(tài)的轉(zhuǎn)換被允許時(shí)允許發(fā)生狀態(tài)變化以及提取下一個(gè)計(jì)算機(jī)指令。更具體地,在一個(gè)實(shí)施例中,用戶狀態(tài)和管理者狀態(tài)之間的狀態(tài)變化僅僅在特定條件下被允許。
[0047]在一個(gè)實(shí)施例中,在當(dāng)前權(quán)限狀態(tài)是管理者狀態(tài),并且下一個(gè)指令提取地址處于用戶代碼存儲(chǔ)器區(qū)域218內(nèi)時(shí),核心可以僅響應(yīng)于“合法的管理者-到-用戶狀態(tài)轉(zhuǎn)換事件”允許從管理者狀態(tài)到用戶狀態(tài)的“正常”轉(zhuǎn)換(以及可以允許提取下一個(gè)指令)。例如,合法的管理者-到-用戶狀態(tài)轉(zhuǎn)換事件可以包括第一組指令(例如,包括從中斷返回指令(areturn from interrupt instruction))的一個(gè)的核心的執(zhí)行,這導(dǎo)致下一個(gè)指令提取地址(例如,基于IFAR117中的值的地址)被更新。相反,當(dāng)下一個(gè)指令提地址被響應(yīng)于合法的管理者-到-用戶狀態(tài)轉(zhuǎn)換事件以外的任何事情(例如,不在所述第一組指令中的指令的核心的執(zhí)行)而更新時(shí),核心可以不允許狀態(tài)變化(并且不允許提取下一個(gè)指令)。
[0048]根據(jù)另一個(gè)實(shí)施例,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài),并且下一個(gè)指令提取地址處于用戶代碼存儲(chǔ)器區(qū)域216內(nèi)時(shí),核心可以僅響應(yīng)于“合法的用戶-到-管理者狀態(tài)轉(zhuǎn)換事件”允許從用戶狀態(tài)到管理者狀態(tài)的“正?!鞭D(zhuǎn)換(以及可以允許提取下一個(gè)指令)。例如,合法的用戶-到-管理者狀態(tài)轉(zhuǎn)換事件可以包括:I)第二組指令(例如,包括軟件中斷指令、陷阱指令等等)中的一個(gè)的核心的執(zhí)行,這導(dǎo)致下一個(gè)指令提取地址被更新;和/或2)檢測(cè)到導(dǎo)致核心放棄(至少暫時(shí)地)其當(dāng)前執(zhí)行線程并且使控制返回到管理者代碼(例如,到被配置來處理異常情況的內(nèi)核的中斷服務(wù)例程)的異常情況。例如,異常情況可以包括I/O中斷信號(hào)的斷言(assertion)或某些其它事件。除了從用戶狀態(tài)到管理者狀態(tài)的“正常”轉(zhuǎn)換之外,核心也可以實(shí)現(xiàn)“基于故障的”從用戶狀態(tài)到管理者狀態(tài)的轉(zhuǎn)換(例如,響應(yīng)于錯(cuò)誤或故障情形的檢測(cè),如稍后將結(jié)合圖3的框313、322討論)。[0049]結(jié)合資源保護(hù),在一個(gè)實(shí)施例中,數(shù)據(jù)地址范圍指示器被存儲(chǔ)在用戶數(shù)據(jù)BAR222(例如,在系統(tǒng)初始化期間或在其它時(shí)間),并且數(shù)據(jù)地址范圍指示器定義在被分配用于存儲(chǔ)管理者數(shù)據(jù)226的第一存儲(chǔ)器區(qū)域(“管理者數(shù)據(jù)存儲(chǔ)器區(qū)域”)和被分配用于存儲(chǔ)用戶數(shù)據(jù)228的第二存儲(chǔ)器區(qū)域(“用戶數(shù)據(jù)存儲(chǔ)器區(qū)域”)之間的分隔224。在系統(tǒng)運(yùn)行期間,核心(例如,核心110)將每個(gè)所請(qǐng)求的數(shù)據(jù)地址的地址與數(shù)據(jù)地址范圍指示器進(jìn)行比較。當(dāng)比較表明要訪問的數(shù)據(jù)落入第一存儲(chǔ)器區(qū)域226內(nèi)時(shí),核心確定要訪問的數(shù)據(jù)是管理者數(shù)據(jù)。相反,當(dāng)比較表明要訪問的數(shù)據(jù)地址范圍指示器落入第二存儲(chǔ)器區(qū)域228內(nèi)時(shí),核心確定要訪問的數(shù)據(jù)是用戶數(shù)據(jù)。
[0050]然后核心可以確定是否允許或拒絕數(shù)據(jù)訪問。如前面所述的,管理者代碼可以訪問存儲(chǔ)在任一類型存儲(chǔ)器區(qū)域的數(shù)據(jù)(例如,存儲(chǔ)在兩個(gè)存儲(chǔ)區(qū)域226、228中的管理者數(shù)據(jù)和用戶數(shù)據(jù)),但用戶代碼僅可以訪問存儲(chǔ)在用戶數(shù)據(jù)存儲(chǔ)器區(qū)域中的數(shù)據(jù)(例如,僅僅存儲(chǔ)在存儲(chǔ)器區(qū)域228中的用戶數(shù)據(jù))。因此,在當(dāng)前權(quán)限狀態(tài)是管理者狀態(tài)時(shí),核心可以允許執(zhí)行任何請(qǐng)求的數(shù)據(jù)訪問。相反,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)并且指令包括對(duì)管理者數(shù)據(jù)存儲(chǔ)器區(qū)域226內(nèi)的數(shù)據(jù)的引用時(shí),核心將不允許數(shù)據(jù)訪問。在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)并且指令包括對(duì)用戶數(shù)據(jù)存儲(chǔ)器區(qū)域228內(nèi)的數(shù)據(jù)的引用時(shí),核心將允許數(shù)據(jù)訪問。
[0051]在一個(gè)實(shí)施例中,管理者數(shù)據(jù)存儲(chǔ)器區(qū)域226的一部分被分配給管理者堆棧227,而數(shù)據(jù)存儲(chǔ)器區(qū)域228的一部分被分配給用戶堆棧229。換句話說,管理者數(shù)據(jù)存儲(chǔ)器區(qū)域226包括管理者堆棧227,而數(shù)據(jù)存儲(chǔ)器區(qū)域228包括用戶堆棧229。如前面所討論的,系統(tǒng)保持管理者堆棧指針以指示管理者堆棧的頂部的地址,以及用戶堆棧指針以指示用戶堆棧的頂部的地址。當(dāng)核心處于管理者狀態(tài)時(shí),管理者堆棧指針被存儲(chǔ)在核心的堆棧指針寄存器(例如,圖1的SP寄存器120)中,而當(dāng)核心處于用戶狀態(tài)時(shí),用戶堆棧指針被存儲(chǔ)在核心的堆棧指針寄存器中。對(duì)應(yīng)于不是當(dāng)前狀態(tài)的任何狀態(tài)的堆棧指針被保持在替代堆棧指針寄存器(例如,圖1的替代SP寄存器135)中。
[0052]圖3是根據(jù)一個(gè)示例實(shí)施例的操作實(shí)現(xiàn)資源和執(zhí)行保護(hù)的系統(tǒng)的方法的流程圖。為了進(jìn)一步理解,圖3應(yīng)結(jié)合圖4觀看;圖4是示出了根據(jù)示例性實(shí)施例的管理者狀態(tài)410態(tài)和用戶狀態(tài)420以及它們之間的轉(zhuǎn)換的簡化狀態(tài)圖。在圖3所示的操作流程的描述中,將參考圖4的管理者狀態(tài)410態(tài)和用戶狀態(tài)420。為了便于理解,圖3的流程圖并未示出可以在實(shí)現(xiàn)流水線架構(gòu)的系統(tǒng)中采用的并行性。例如,雖然流程圖示出了更新IFAR(塊306)、提取和譯碼指令(塊314)、以及以連續(xù)的方式執(zhí)行指令(塊318)的步驟,但是應(yīng)理解,一旦第一指令通過指令流水線開始進(jìn)行,這些處理中的某些處理可以結(jié)合執(zhí)行指令序列并行地進(jìn)行。本領(lǐng)域技術(shù)人員將理解如何在包括流水線架構(gòu)的系統(tǒng)中實(shí)現(xiàn)圖3流程圖中內(nèi)涵的概念。
[0053]在塊302中,所述方法可以例如在核心(例如,圖1的核心110)被加電(或復(fù)位)時(shí)開始,并且系統(tǒng)通過執(zhí)行初始化代碼而被初始化。如在此所使用的,“初始化代碼”是指任何由核心執(zhí)行以初始化系統(tǒng)直到當(dāng)系統(tǒng)準(zhǔn)備好執(zhí)行正常的操作(例如,包括執(zhí)行用戶代碼)的時(shí)間點(diǎn)的代碼。例如,系統(tǒng)初始化可以包括執(zhí)行BIOS代碼、開機(jī)實(shí)時(shí)測(cè)試(POST)代碼、引導(dǎo)程序(bootstrap)代碼、以及負(fù)責(zé)引導(dǎo)操作系統(tǒng)的內(nèi)核代碼。更具體地,在加電時(shí),在IFAR和PC寄存器中建立第一指令的地址(對(duì)應(yīng)于復(fù)位向量的地址被加載到IFAR117中,并且相應(yīng)的地址被加載到PC寄存器118中,見圖1),并且相應(yīng)的指令被從存儲(chǔ)器中提取、譯碼和執(zhí)行。隨著每個(gè)指令通過執(zhí)行流水線進(jìn)行,IFAR和PC寄存器中的地址被更新,并且下一個(gè)指令被提取、譯碼和執(zhí)行。最終,在初始化期間,核心開始執(zhí)行內(nèi)核。在一個(gè)實(shí)施例中,初始化代碼被認(rèn)為是管理者代碼,并且核心初始將當(dāng)前權(quán)限狀態(tài)定義為管理者狀態(tài)410。稍后,如在下面將要討論的,核心基于地址范圍指示器(一個(gè)或多個(gè))以及從存儲(chǔ)器中從其提取當(dāng)前在執(zhí)行的指令的指令地址,定義當(dāng)前權(quán)限狀態(tài)為管理者狀態(tài)410或用戶狀態(tài)420。
[0054]在一個(gè)實(shí)施例中,通過初始化代碼執(zhí)行的一個(gè)處理過程被配置為通過如下來實(shí)現(xiàn)資源和執(zhí)行保護(hù):初始化被用于這些目的的寄存器(例如,圖1的保護(hù)寄存器130)中的值。因此,如下面所描述的,初始化代碼將值存儲(chǔ)在這些寄存器值中。更特別的,以及如前面所討論的,保護(hù)寄存器之一包括控制寄存器(例如,圖1的控制寄存器131),其包括一個(gè)或多個(gè)寄存器鎖定標(biāo)志和使能標(biāo)志。在一個(gè)實(shí)施例中,在復(fù)位時(shí),使能標(biāo)志被設(shè)置(假定資源和執(zhí)行保護(hù)使能信號(hào)已被提供給系統(tǒng)),并且寄存器鎖定標(biāo)志(或多個(gè)寄存器鎖標(biāo)志)被清除。然后初始化代碼可以將值寫入到各種保護(hù)寄存器(例如,圖1的寄存器132-134)中。根據(jù)多種實(shí)施例,利用設(shè)置的使能標(biāo)志,核心將實(shí)現(xiàn)資源和執(zhí)行保護(hù)。
[0055]為了配置系統(tǒng)的資源和執(zhí)行保護(hù)能力,初始化代碼在保護(hù)指標(biāo)寄存器中存儲(chǔ)至少一個(gè)指令地址范圍指示器和至少一個(gè)數(shù)據(jù)地址范圍指示器。例如,在一個(gè)實(shí)施例中,初始化代碼可以在用戶代碼基址寄存器(例如,圖1的用戶代碼BAR132)中存儲(chǔ)指令地址范圍指示器(例如,引用圖1的閃存存儲(chǔ)器160的地址),所述指令地址范圍指示器定義在存儲(chǔ)器(例如,圖1的閃存存儲(chǔ)器160)中在管理者代碼區(qū)域和用戶代碼區(qū)域之間的分隔。更具體地,以及如前面所討論的,指令地址范圍指示器定義被分配用于存儲(chǔ)與管理者狀態(tài)(例如,管理者狀態(tài)410)相關(guān)聯(lián)的計(jì)算機(jī)指令的存儲(chǔ)器區(qū)域,并且定義被分配用于存儲(chǔ)與用戶狀態(tài)(例如,用戶狀態(tài)420)相關(guān)聯(lián)的計(jì)算機(jī)指令的存儲(chǔ)器區(qū)域。此外,初始化代碼可以在數(shù)據(jù)代碼基址寄存器(例如,圖1的用戶數(shù)據(jù)BAR133)中存儲(chǔ)數(shù)據(jù)地址范圍指示器(例如,引用圖1的RAM164的地址),所述數(shù)據(jù)地址范圍指示器定義存儲(chǔ)器(例如,圖1的RAM164)中在管理者代碼區(qū)域和用戶代碼區(qū)域之間的分隔。更具體地,以及如前面所討論的,數(shù)據(jù)地址范圍指示器定義被分配用于存儲(chǔ)與管理者狀態(tài)(例如,管理者狀態(tài)410)相關(guān)聯(lián)的數(shù)據(jù)的存儲(chǔ)器區(qū)域,并且定義被分配用于存儲(chǔ)與用戶狀態(tài)(例如,用戶狀態(tài)420)相關(guān)聯(lián)的數(shù)據(jù)的存儲(chǔ)器區(qū)域。最后,初始化代碼可以將外圍地址范圍指示器(例如,外圍地址)寫入到外圍代碼基址寄存器(例如,圖1的用戶外圍BAR134),所述外圍地址范圍指示器定義了對(duì)于管理者代碼可以訪問的一組外圍裝置和對(duì)于用戶代碼可以訪問的一組外圍裝置。
[0056]在一個(gè)實(shí)施例中,系統(tǒng)被配置為使得管理者代碼可以訪問管理者和用戶數(shù)據(jù)區(qū)域及外圍裝置,而用戶代碼僅可以訪問用戶數(shù)據(jù)區(qū)域及外圍裝置。一旦定義了管理者和用戶代碼區(qū)域、數(shù)據(jù)區(qū)域、以及外圍裝置的保護(hù)寄存器被初始化,初始化代碼可以設(shè)置相應(yīng)的寄存器鎖定標(biāo)志(一個(gè)或多個(gè))(例如,在圖1的控制寄存器131中),以使得保護(hù)寄存器中的值不被無意地重寫。在一個(gè)實(shí)施例中,保護(hù)寄存器處于被指定為僅僅對(duì)管理者代碼可訪問的外圍裝置中(例如,外圍地址范圍指示器使得用于保護(hù)寄存器的外圍裝置在僅僅對(duì)于管理者代碼可訪問的外圍裝置的組中)。因此,保護(hù)寄存器對(duì)于用戶代碼不是可訪問的。
[0057]在塊304,初始化代碼還通過將管理者堆棧指針寫入到堆棧指針寄存器(例如,圖1的SP寄存器120)中來建立管理者堆棧(例如,圖2的管理者堆棧227)。如前面所討論的,初始的管理者堆棧指針可以指定存儲(chǔ)器中(例如,在RAM164中)與管理者堆棧的初始對(duì)應(yīng)的地址(例如,圖2的管理者堆棧的基址227)。在一個(gè)實(shí)施例中,初始化代碼也可以在該點(diǎn)建立用戶堆棧(例如,圖2的用戶堆棧229),然而用戶堆棧也可以稍后(例如,在初始化代碼已經(jīng)執(zhí)行之后,諸如就在用戶代碼的第一實(shí)例執(zhí)行之前)建立。無論哪種方式,在核心上執(zhí)行的管理者代碼可以通過將與用戶堆棧的初始對(duì)應(yīng)的地址(例如,圖2的用戶堆棧229的基址)存儲(chǔ)在替代堆棧指針寄存器(例如,圖1的替代SP寄存器135)中來建立用戶堆棧。如在下面的討論中將要闡明的,在核心堆棧指針寄存器(例如,圖1的SP寄存器120)中的堆棧指針對(duì)應(yīng)于用于當(dāng)前權(quán)限狀態(tài)的堆棧,而替代堆棧指針寄存器(例如,圖1的替代SP寄存器135)中的堆棧指針對(duì)應(yīng)于當(dāng)前權(quán)限狀態(tài)以外的權(quán)限狀態(tài)的堆棧。換句話說,例如,在當(dāng)前權(quán)限狀態(tài)是管理者狀態(tài)時(shí),核心的堆棧指針寄存器包含用于管理者堆棧的堆棧指針,而替代堆棧指針寄存器可以包含用于用戶堆棧的堆棧指針。相反,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)時(shí),核心的堆棧指針寄存器包含用于用戶堆棧的堆棧指針,而替代堆棧指針寄存器包含用于管理者堆棧的堆棧指針。
[0058]一旦系統(tǒng)初始化完成,核心可以進(jìn)入正常操作模式,在該模式下,核心根據(jù)程序流提取、譯碼、以及執(zhí)行指令。更具體地,在塊306,當(dāng)指令進(jìn)行執(zhí)行流水線時(shí),在每個(gè)指令提取之前,核心更新IFAR (例如,圖1的IFAR117)中的地址以對(duì)應(yīng)于下一個(gè)指令提取地址,并且稍后更新PC寄存器(例如,圖1的PC寄存器118)中的地址。如果先前指令中沒有指定分支或跳轉(zhuǎn),則在適當(dāng)時(shí)間,核心分別以指令提取寬度和指令長度遞增IFAR和PC寄存器中的地址。否則,如果先前指令指定了分支或跳轉(zhuǎn)到存儲(chǔ)器中的處于非連續(xù)地址的位置,則核心更新IFAR中的地址以對(duì)應(yīng)于指定的地址。一旦IFAR中的地址已被更新,核心估算下一個(gè)指令提取地址。
[0059]在塊308,作為所述估算的一部分,核心確定下一個(gè)指令提取地址是否指示應(yīng)當(dāng)從與當(dāng)前權(quán)限狀態(tài)對(duì)應(yīng)的代碼存儲(chǔ)器的區(qū)域,還是從與不同的權(quán)限狀態(tài)對(duì)應(yīng)的代碼存儲(chǔ)器的區(qū)域,來訪問下一個(gè)指令。這可以通過如下(例如,通過圖1的提取模塊124)來實(shí)現(xiàn):將下一個(gè)指令提取地址與指令地址范圍指示器(例如,在圖1的用戶代碼BAR132中)進(jìn)行比較以確定要提取的下一個(gè)指令被存儲(chǔ)的區(qū)域,并然后確定該區(qū)域是否與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)。例如,在當(dāng)前權(quán)限狀態(tài)是管理者狀態(tài)410,并且下一個(gè)指令提取地址處于分配給用戶代碼的代碼存儲(chǔ)器的區(qū)域(例如,圖2的區(qū)域218)中時(shí),核心確定下一個(gè)指令提取地址不對(duì)應(yīng)于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的代碼存儲(chǔ)器的區(qū)域。同樣地,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)420,并且下一個(gè)指令提取地址處于分配給管理者代碼的代碼存儲(chǔ)器的區(qū)域(例如,圖2的區(qū)域216)中時(shí),核心確定下一個(gè)指令提取地址不對(duì)應(yīng)于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的代碼存儲(chǔ)器的區(qū)域。
[0060]當(dāng)下一個(gè)指令提取地址指示下一個(gè)指令應(yīng)該從與不同的權(quán)限狀態(tài)對(duì)應(yīng)的代碼存儲(chǔ)器的區(qū)域取得時(shí),在塊310中,進(jìn)一步確定(例如,通過圖1的提取模塊124)狀態(tài)轉(zhuǎn)換是否是合法的狀態(tài)轉(zhuǎn)換。如前面所討論的,例如,當(dāng)合法的管理者到用戶狀態(tài)轉(zhuǎn)換事件已經(jīng)發(fā)生(例如,核心執(zhí)行了第一組指令中的一個(gè),包括從中斷返回指令)時(shí),核心可以確定從管理者狀態(tài)410到用戶狀態(tài)420的轉(zhuǎn)換被允許。同樣地,當(dāng)合法的用戶到管理者狀態(tài)轉(zhuǎn)換事件已經(jīng)發(fā)生(例如,核心執(zhí)行了第二組指令中的一個(gè),包括軟件中斷指令、陷阱指令等等),和/或檢測(cè)到導(dǎo)致核心放棄其當(dāng)前執(zhí)行線程并且將控制傳回到管理者代碼(例如,I/O中斷信號(hào)的斷言)的異常情況時(shí),核心可以確定從用戶狀態(tài)420到管理者狀態(tài)410的轉(zhuǎn)換被允許。在圖4中通過箭頭430、432指示出合法的管理者到用戶以及用戶到管理者的狀態(tài)轉(zhuǎn)換。[0061]當(dāng)核心確定狀態(tài)轉(zhuǎn)換是合法的(如在塊310確定的)時(shí),在塊312中,通過(例如,由圖1的狀態(tài)模塊122)將當(dāng)前權(quán)限狀態(tài)改變?yōu)榕c要提取的下一個(gè)指令(例如,結(jié)合塊310估算的指令)相關(guān)聯(lián)的權(quán)限狀態(tài),來執(zhí)行狀態(tài)轉(zhuǎn)換。此外,存儲(chǔ)在核心的堆棧指針寄存器(例如,圖1的SP寄存器120)中的堆棧指針與存儲(chǔ)在替代堆棧指針寄存器(例如,圖1的替代SP寄存器135)中的堆棧指針進(jìn)行交換(例如,通過圖1的SP交換模塊128)。
[0062]當(dāng)在塊310確定狀態(tài)轉(zhuǎn)換是不合法的時(shí),核心迫使當(dāng)前權(quán)限狀態(tài)變?yōu)楣芾碚郀顟B(tài)(如果它不是已經(jīng)是的話),并且在塊313,故障處理管理者代碼產(chǎn)生異常故障。例如,在當(dāng)前權(quán)限狀態(tài)是管理者狀態(tài)410并且管理者代碼試圖使用非法指令(例如,指令不是從中斷返回類型的指令)跳轉(zhuǎn)到用戶代碼時(shí),核心保持處于管理者狀態(tài)410 (如圖4中箭頭434所示),并且產(chǎn)生執(zhí)行故障。相反,例如,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)420并且用戶代碼試圖使用非法指令(例如,指令不是軟件中斷類型的指令)跳轉(zhuǎn)到管理者代碼時(shí),核心執(zhí)行從用戶狀態(tài)420到管理者狀態(tài)410的轉(zhuǎn)換(如圖4中箭頭436所示),并且產(chǎn)生執(zhí)行故障。結(jié)合狀態(tài)轉(zhuǎn)換,核心的堆棧指針寄存器(例如,圖1的SP寄存器120)中的堆棧指針與替代堆棧指針寄存器(例如,圖1的替代SP寄存器135)中的堆棧指針交換。
[0063]在一個(gè)實(shí)施例中,執(zhí)行故障的產(chǎn)生包括執(zhí)行存儲(chǔ)與非法指令相關(guān)聯(lián)的地址(例如,PC寄存器118中與非法指令對(duì)應(yīng)的地址)的管理者代碼(例如,內(nèi)核故障處理例程)。例如,所述地址,連同可能與故障報(bào)告或處理相關(guān)的其它信息,可以存儲(chǔ)在保護(hù)寄存器(例如,圖1的非法PC寄存器136)中。假定故障可以被處理而沒有顯著地中斷程序流,則方法可以返回到塊306以更新IFAR中的地址,并且繼續(xù)執(zhí)行與所述程序流相關(guān)聯(lián)的指令。否則,方法可以結(jié)束。
[0064]再次參照塊308,在當(dāng)前權(quán)限狀態(tài)是管理者狀態(tài)410,并且下一個(gè)指令地址處于分配給管理者代碼的核心存儲(chǔ)器的區(qū)域(例如,圖2的區(qū)域216)中時(shí),核心確定下一個(gè)指令地址對(duì)應(yīng)于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的代碼存儲(chǔ)器的區(qū)域,并且方法進(jìn)行到塊314。同樣,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)420,并且下一個(gè)指令地址處于分配給用戶代碼的核心存儲(chǔ)器的區(qū)域(例如,圖2的區(qū)域218)中時(shí),核心確定下一個(gè)指令地址對(duì)應(yīng)于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的代碼存儲(chǔ)器的區(qū)域,并且方法進(jìn)行到塊314。在無論哪種情況下,如圖4的箭頭438、440所示的,當(dāng)前權(quán)限狀態(tài)沒有被改變。
[0065]當(dāng)核心已確定(在塊308)下一個(gè)指令地址對(duì)應(yīng)于與當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的代碼區(qū)域時(shí),或者,當(dāng)已經(jīng)進(jìn)行了合法的狀態(tài)轉(zhuǎn)換(在塊312)時(shí),在塊314,核心可以提取與IFAR中的下一個(gè)指令提取地址對(duì)應(yīng)的指令,并且可以譯碼所述指令。
[0066]在塊316,核心然后可以確定該指令的執(zhí)行是否將產(chǎn)生數(shù)據(jù)訪問。例如,指令可以包括對(duì)數(shù)據(jù)在數(shù)據(jù)存儲(chǔ)器中(例如,在圖1的RAM164中)存儲(chǔ)的位置的引用。當(dāng)指令的執(zhí)行將不產(chǎn)生數(shù)據(jù)訪問時(shí),在塊318,核心執(zhí)行指令,并且方法如所示地重復(fù)(例如,以繼續(xù)執(zhí)行與程序流相關(guān)聯(lián)的指令)。
[0067]當(dāng)指令的執(zhí)行產(chǎn)生數(shù)據(jù)訪問時(shí),核心(例如,圖1的訪問模塊126)確定數(shù)據(jù)訪問地址是否處于在當(dāng)前權(quán)限狀態(tài)下允許訪問的數(shù)據(jù)存儲(chǔ)器中(例如,圖1的RAM164)的區(qū)域。例如,如前面所討論的,管理者代碼可以被允許訪問管理者和用戶數(shù)據(jù)區(qū)域(例如,圖2的區(qū)域226、228)兩者中的數(shù)據(jù),而用戶代碼可以被允許僅僅訪問在用戶數(shù)據(jù)區(qū)域(例如,圖2的區(qū)域228)中的數(shù)據(jù)。因此,在當(dāng)前權(quán)限狀態(tài)是管理者狀態(tài)時(shí),核心可以允許任何數(shù)據(jù)訪問。相反,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)時(shí),核心可以僅在數(shù)據(jù)訪問地址處于用戶數(shù)據(jù)區(qū)域中而不是在管理者數(shù)據(jù)區(qū)域中(例如,圖2的區(qū)域228)時(shí),允許數(shù)據(jù)訪問。
[0068]在一個(gè)實(shí)施例,在數(shù)據(jù)訪問地址和數(shù)據(jù)地址范圍指示器(例如,在圖1的用戶數(shù)據(jù)BAR133中)之間進(jìn)行比較(例如,通過圖1的訪問模塊126),以確定數(shù)據(jù)訪問地址所處的區(qū)域。然后,確定當(dāng)核心處于當(dāng)前權(quán)限狀態(tài)(例如,處于與譯碼的指令對(duì)應(yīng)的權(quán)限狀態(tài))時(shí),是否允許該區(qū)域中的數(shù)據(jù)訪問。當(dāng)數(shù)據(jù)訪問被允許時(shí),在塊318,核心執(zhí)行指令(包括執(zhí)行數(shù)據(jù)訪問),并且方法如所示地迭代重復(fù)(例如,程序計(jì)數(shù)器在塊306被更新,并且方法繼續(xù)進(jìn)行)。
[0069]在塊320確定當(dāng)數(shù)據(jù)訪問地址處于在當(dāng)前權(quán)限狀態(tài)下不允許訪問的數(shù)據(jù)存儲(chǔ)器(例如,圖1的RAM164)中的區(qū)域時(shí),在塊322,核心迫使當(dāng)前權(quán)限狀態(tài)變?yōu)楣芾碚郀顟B(tài)(如果它不是已經(jīng)是的話),并且故障處理管理者代碼產(chǎn)生訪問故障。例如,在當(dāng)前權(quán)限狀態(tài)是用戶狀態(tài)420,并且用戶代碼試圖訪問管理者數(shù)據(jù)區(qū)域(例如,圖2的區(qū)域226)中的數(shù)據(jù)時(shí),核心執(zhí)行從用戶狀態(tài)420到管理者狀態(tài)410的轉(zhuǎn)換(如圖4中箭頭436所示的),數(shù)據(jù)訪問被禁止,并且產(chǎn)生訪問故障。結(jié)合狀態(tài)轉(zhuǎn)換,核心的堆棧指針寄存器(例如,圖1的SP寄存器120)中的堆棧指針與替代堆棧指針寄存器(例如,圖1的替代SP寄存器135)中的堆棧指針交換。
[0070]在一個(gè)實(shí)施例中,訪問故障的產(chǎn)生包括執(zhí)行存儲(chǔ)與非法指令相關(guān)聯(lián)的地址的管理者代碼(例如,內(nèi)核故障處理例程)。例如,所述地址,連同可能與故障報(bào)告或處理相關(guān)的其它信息,可以被存儲(chǔ)在保護(hù)寄存器(例如,圖1的故障PC寄存器137)中。在一個(gè)替代實(shí)施例中,故障數(shù)據(jù)地址可以被存儲(chǔ)在寄存器137 (例如,寄存器137可以是“非法數(shù)據(jù)地址”寄存器)中。假定故障可以被處理而沒有顯著地中斷程序流,則方法可以返回到塊306以繼續(xù)執(zhí)行與所述程序流相關(guān)聯(lián)的指令。否則,方法可以結(jié)束。
[0071]應(yīng)理解,圖3中描述的過程塊中的一些可以彼此并行地或者與其它處理過程的執(zhí)行并行地被進(jìn)行。此外,應(yīng)理解,圖3中描述的處理塊的特定順序可以被修改,同時(shí)基本上實(shí)現(xiàn)相同的結(jié)果。因此,這樣的修改應(yīng)被包括在本發(fā)明主題的范圍內(nèi)。
[0072]雖然上面討論的實(shí)施例主要集中于其中實(shí)現(xiàn)兩個(gè)權(quán)限級(jí)別(例如,管理者級(jí)別和用戶級(jí)別)的系統(tǒng),但是應(yīng)理解,這些實(shí)施例也可以在其中實(shí)現(xiàn)多于兩個(gè)權(quán)限級(jí)別的系統(tǒng)(例如,實(shí)現(xiàn)了具有三個(gè)或更多個(gè)權(quán)限環(huán)的基于環(huán)的安全方案的系統(tǒng))中實(shí)現(xiàn)?;谶@里的描述,本領(lǐng)域技術(shù)人員將理解如何修改各種描述的實(shí)施例以在支持多于兩個(gè)的權(quán)限級(jí)別的系統(tǒng)中實(shí)現(xiàn)實(shí)施例。此外,雖然上面結(jié)合圖1描述了特定的系統(tǒng)配置,然而實(shí)施例也可以在具有其它架構(gòu)的系統(tǒng)中實(shí)現(xiàn)。例如,雖然系統(tǒng)100包括用于存儲(chǔ)結(jié)合資源和執(zhí)行保護(hù)使用的值的各種保護(hù)寄存器130,并且保護(hù)寄存器130是與核心110分離并且是對(duì)于核心110可通過總線150和/或其它連接152訪問的模塊140的一部分,但是其它實(shí)施例可以被配置為在其它地方存儲(chǔ)這些值,包括核心110本身中。此外,實(shí)施例可以在多處理器系統(tǒng)和/或具有與圖1的架構(gòu)明顯不同的架構(gòu)的系統(tǒng)中實(shí)現(xiàn)。這些和其它變體被包括在本發(fā)明主題的范圍中。
[0073]如此,已經(jīng)描述了資源和執(zhí)行保護(hù)方法及裝置的多種實(shí)施例。處理系統(tǒng)的一個(gè)實(shí)施例包括第一模塊和第二模塊。所述第一模塊被配置為:基于取自存儲(chǔ)器的指令的地址保持當(dāng)前權(quán)限狀態(tài)是第一權(quán)限狀態(tài)還是第二權(quán)限狀態(tài)的知識(shí)。所述第二模塊被配置為:通過將下一個(gè)指令提取地址和至少一個(gè)指令地址范圍指示器進(jìn)行比較確定所述下一個(gè)指令提取地址是否對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的第一存儲(chǔ)器區(qū)域內(nèi)的位置或與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的第二存儲(chǔ)器區(qū)域內(nèi)的位置。當(dāng)所述下一個(gè)指令提取地址不位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的所述第一存儲(chǔ)器區(qū)域內(nèi)時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí)允許提取下一個(gè)計(jì)算機(jī)指令。
[0074]在另一個(gè)實(shí)施例中,所述處理系統(tǒng)包括第三模塊,被配置為:確定為計(jì)算機(jī)指令生成數(shù)據(jù)訪問地址,通過將所述數(shù)據(jù)訪問地址與至少一個(gè)數(shù)據(jù)地址范圍指示器進(jìn)行比較確定所述數(shù)據(jù)訪問地址是與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)還是與所述第二權(quán)限狀態(tài)相關(guān)聯(lián),以及當(dāng)所述當(dāng)前權(quán)限狀態(tài)是允許訪問所述存儲(chǔ)器位置的權(quán)限狀態(tài)時(shí)允許訪問與所述數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置。
[0075]處理方法的一個(gè)實(shí)施例包括:存儲(chǔ)至少一個(gè)指令地址范圍指示器,所述至少一個(gè)指令地址范圍指示器定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與第一權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第一存儲(chǔ)器區(qū)域,并且定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與第二權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第二存儲(chǔ)器區(qū)域。所述方法還包括:基于取自存儲(chǔ)器的指令的地址將當(dāng)前權(quán)限狀態(tài)定義為所述第一權(quán)限狀態(tài)或所述第二權(quán)限狀態(tài);以及通過將下一個(gè)指令提取地址與所述至少一個(gè)指令地址范圍指示器進(jìn)行比較,確定所述下一個(gè)指令提取地址是對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置還是位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置。當(dāng)所述下一個(gè)指令提取地址不對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí),允許提取所述下一個(gè)計(jì)算機(jī)指令。
[0076]在另一個(gè)實(shí)施例中,所述處理方法包括存儲(chǔ)定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第三存儲(chǔ)器區(qū)域并且定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第四存儲(chǔ)器區(qū)域的至少一個(gè)數(shù)據(jù)地址范圍指示器。所述方法還包括確定確定計(jì)算機(jī)指令生成數(shù)據(jù)訪問地址。當(dāng)生成所述數(shù)據(jù)訪問時(shí),通過將所述數(shù)據(jù)訪問地址與所述至少一個(gè)數(shù)據(jù)地址范圍指示器進(jìn)行比較,確定所述數(shù)據(jù)訪問地址是用于與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置還是用于與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置。當(dāng)所述當(dāng)前權(quán)限狀態(tài)是允許訪問與所述數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置的權(quán)限狀態(tài)時(shí),允許訪問所述存儲(chǔ)器位置。
[0077]—種處理方法的另一個(gè)實(shí)施例包括:將當(dāng)前權(quán)限狀態(tài)定義為管理者狀態(tài)或用戶狀態(tài);以及通過將下一個(gè)指令提取地址與指令地址范圍指示器進(jìn)行比較,確定所述下一個(gè)指令提取地址是對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置還是位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置。所述指令地址范圍指示器定義被分配用于存儲(chǔ)管理者代碼的管理者代碼存儲(chǔ)器區(qū)域和被分配用于存儲(chǔ)用戶代碼的用戶代碼存儲(chǔ)器區(qū)域。當(dāng)所述下一個(gè)指令提取地址不對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí),允許提取所述下一個(gè)計(jì)算機(jī)指令。
[0078]在另一個(gè)實(shí)施例中,所述處理方法還包括:確定計(jì)算機(jī)指令生成數(shù)據(jù)訪問地址,以及當(dāng)生成所述數(shù)據(jù)訪問時(shí),通過將所述數(shù)據(jù)訪問地址與數(shù)據(jù)地址范圍指示器進(jìn)行比較,確定所述數(shù)據(jù)訪問地址是用于與所述管理者狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置還是用于與所述用戶狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置。所述數(shù)據(jù)地址范圍指示器定義被分配用于存儲(chǔ)與所述管理者狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第三存儲(chǔ)器區(qū)域,并且定義被分配用于存儲(chǔ)與所述用戶狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第四存儲(chǔ)器區(qū)域。當(dāng)所述當(dāng)前權(quán)限狀態(tài)是所述管理者狀態(tài)時(shí),允許訪問所述存儲(chǔ)器位置。以及當(dāng)所述當(dāng)前權(quán)限狀態(tài)是所述用戶狀態(tài)時(shí),僅僅當(dāng)所述數(shù)據(jù)訪問地址是用于位于所述第四存儲(chǔ)器區(qū)域內(nèi)的存儲(chǔ)器位置時(shí),允許訪問所述存儲(chǔ)器位置。
[0079]雖然上面已經(jīng)結(jié)合特定系統(tǒng)、裝置、以及方法對(duì)本發(fā)明主題的原則進(jìn)行了描述,但應(yīng)清楚理解,該描述僅僅是通過例子進(jìn)行的,而不是對(duì)本發(fā)明主題范圍的限制。在此所描述的以及附圖中所示出的各種功能或處理塊可以以硬件、固件、軟件或由其任意組合來實(shí)現(xiàn)。此外,這里所采用的措辭或術(shù)語用于描述的目的而不是限制性的目的。
[0080]對(duì)特定實(shí)施例的上述描述充分揭示了本發(fā)明主題的一般特性,其他人可以通過運(yùn)用現(xiàn)有知識(shí)很容易地對(duì)其進(jìn)行修改和/或調(diào)整以適合各種應(yīng)用,而不脫離本發(fā)明的一般概念。因此,這些調(diào)整和修改是在所公開的實(shí)施例的等同物的內(nèi)涵和外延之內(nèi)。本發(fā)明主題涵蓋所有這些落在所附權(quán)利要求的精神和寬泛范圍內(nèi)的替代物、修改、等價(jià)物、以及變化。
【權(quán)利要求】
1.一種處理系統(tǒng),包括: 第一模塊,被配置為基于取自存儲(chǔ)器的指令的地址保持當(dāng)前權(quán)限狀態(tài)是第一權(quán)限狀態(tài)還是第二權(quán)限狀態(tài)的知識(shí);以及 第二模塊,被配置為:通過將下一個(gè)指令提取地址和至少一個(gè)指令地址范圍指示器進(jìn)行比較確定所述下一個(gè)指令提取地址是否對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的第一存儲(chǔ)器區(qū)域內(nèi)的位置或與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的第二存儲(chǔ)器區(qū)域內(nèi)的位置,并且當(dāng)所述下一個(gè)指令提取地址不位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的所述第一存儲(chǔ)器區(qū)域內(nèi)時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí)允許提取下一個(gè)計(jì)算機(jī)指令。
2.根據(jù)權(quán)利要求1所述的處理系統(tǒng),其中所述第一權(quán)限狀態(tài)是具有相對(duì)高的權(quán)限級(jí)別的管理者狀態(tài),以及所述第二權(quán)限狀態(tài)是具有相對(duì)低的權(quán)限級(jí)別的用戶狀態(tài)。
3.根據(jù)權(quán)利要求1所述的處理系統(tǒng),其中: 所述至少一個(gè)指令地址范圍指示器定義了被分配用于存儲(chǔ)與管理者狀態(tài)相關(guān)聯(lián)的管理者代碼的第一存儲(chǔ)器區(qū)域,并且定義了被分配用于存儲(chǔ)與用戶狀態(tài)相關(guān)聯(lián)的用戶代碼的第二存儲(chǔ)器區(qū)域,并且 所述第二模塊被配置為:當(dāng)所述下一個(gè)指令提取地址落入所述第一存儲(chǔ)器區(qū)域內(nèi)時(shí),確定所述下一個(gè)指令提取地址位于與所述管理者狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi);以及當(dāng)所述下一個(gè)指令提取地址落入所述第二存儲(chǔ)器區(qū)域內(nèi)時(shí),確定所述下一個(gè)指令提取地址與所述用戶狀態(tài)相關(guān)聯(lián)。
4.根據(jù)權(quán)利要求1所述的處理系統(tǒng),其中: 所述至少一個(gè)指令地址范圍指示器定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的 第一存儲(chǔ)器區(qū)域,并定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第二存儲(chǔ)器區(qū)域,并且 所述第二模塊被配置為:當(dāng)所述下一個(gè)指令提取地址落入一個(gè)所述第一存儲(chǔ)器區(qū)域內(nèi)時(shí),確定所述下一個(gè)指令提取地址位于與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi);以及當(dāng)所述下一個(gè)指令提取地址落入一個(gè)所述第二存儲(chǔ)器區(qū)域內(nèi)時(shí),確定所述下一個(gè)指令提取地址與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)。
5.根據(jù)權(quán)利要求1所述的處理系統(tǒng),其中: 所述第二模塊還被配置為:當(dāng)從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換不是合法時(shí),產(chǎn)生故障并且不允許提取所述下一個(gè)計(jì)算機(jī)指令。
6.根據(jù)權(quán)利要求1所述的處理系統(tǒng),還包括: 寄存器,被配置為存儲(chǔ)所述至少一個(gè)指令地址范圍指示器。
7.根據(jù)權(quán)利要求1所述的處理系統(tǒng),還包括: 代碼存儲(chǔ)器,其中所述指令地址范圍指示器在所述代碼存儲(chǔ)器內(nèi)定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第一存儲(chǔ)器區(qū)域,并且所述指令地址范圍指示器在所述代碼存儲(chǔ)器內(nèi)定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第二存儲(chǔ)器區(qū)域。
8.根據(jù)權(quán)利要求1所述的處理系統(tǒng),還包括: 第三模塊,被配置為:確定為計(jì)算機(jī)指令生成數(shù)據(jù)訪問地址,通過將所述數(shù)據(jù)訪問地址與至少一個(gè)數(shù)據(jù)地址范圍指示器進(jìn)行比較確定所述數(shù)據(jù)訪問地址是與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)還是與所述第二權(quán)限狀態(tài)相關(guān)聯(lián),以及當(dāng)所述當(dāng)前權(quán)限狀態(tài)是允許訪問所述存儲(chǔ)器位置的權(quán)限狀態(tài)時(shí)允許訪問與所述數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置。
9.根據(jù)權(quán)利要求8所述的處理系統(tǒng),其中: 所述至少一個(gè)數(shù)據(jù)地址范圍指示器定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第一存儲(chǔ)器區(qū)域,并定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第二存儲(chǔ)器區(qū)域,并且 所述第三模塊被配置為:當(dāng)所述數(shù)據(jù)訪問地址落入一個(gè)所述第一存儲(chǔ)器區(qū)域內(nèi)時(shí)確定所述數(shù)據(jù)訪問地址與所述第一權(quán)限狀態(tài)相關(guān)聯(lián),以及當(dāng)所述數(shù)據(jù)訪問地址落入一個(gè)所述第二存儲(chǔ)器區(qū)域內(nèi)時(shí)確定所述數(shù)據(jù)訪問地址與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)。
10.根據(jù)權(quán)利要求8所述的處理系統(tǒng),還包括: 寄存器,被配置用于存儲(chǔ)所述至少一個(gè)數(shù)據(jù)地址范圍指示器。
11.根據(jù)權(quán)利要求8所述的處理系統(tǒng),還包括: 數(shù)據(jù)存儲(chǔ)器,其中所述數(shù)據(jù)地址范圍指示器在所述數(shù)據(jù)存儲(chǔ)器內(nèi)定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第一存儲(chǔ)器區(qū)域,并且所述數(shù)據(jù)地址范圍指示器在所述數(shù)據(jù)存儲(chǔ)器內(nèi)定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第二存儲(chǔ)器區(qū)域。
12.根據(jù)權(quán)利要求8所述的處理系統(tǒng),其中: 所述第三模塊還被配置用于: 當(dāng)所述當(dāng)前權(quán)限狀態(tài)是不允許訪問所述存儲(chǔ)器位置的權(quán)限狀態(tài)時(shí),產(chǎn)生故障并且禁止訪問與所述數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置。
13.—種處理方法,包括: 存儲(chǔ)至少一個(gè)指令地址范圍指示器,所述至少一個(gè)指令地址范圍指示器定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與第一權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第一存儲(chǔ)器區(qū)域,并且定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與第二權(quán)限狀態(tài)相關(guān)聯(lián)的計(jì)算機(jī)指令的第二存儲(chǔ)器區(qū)域; 基于取自存儲(chǔ)器的指令的地址將當(dāng)前權(quán)限狀態(tài)定義為所述第一權(quán)限狀態(tài)或所述第二權(quán)限狀態(tài); 通過將下一個(gè)指令提取地址與所述至少一個(gè)指令地址范圍指示器進(jìn)行比較,確定所述下一個(gè)指令提取地址是對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置還是位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置;以及 當(dāng)所述下一個(gè)指令提取地址不對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置時(shí),僅僅在從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí),允許提取所述下一個(gè)計(jì)算機(jī)指令。
14.根據(jù)權(quán)利要求13所述的方法,其中所述第一權(quán)限狀態(tài)是具有相對(duì)高的權(quán)限級(jí)別的管理者狀態(tài),而所述第二權(quán)限狀態(tài)是具有相對(duì)低的權(quán)限級(jí)別的用戶狀態(tài)。
15.根據(jù)權(quán)利要求13所述的方法,還包括: 當(dāng)從所述當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換不是合法的時(shí)候,產(chǎn)生故障并且不允許提取所述下一個(gè)計(jì)算機(jī)指令。
16.根據(jù)權(quán)利要求13所述的方法,還包括: 存儲(chǔ)定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第三存儲(chǔ)器區(qū)域并且定義一個(gè)或多個(gè)被分配用于存儲(chǔ)與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第四存儲(chǔ)器區(qū)域的至少一個(gè)數(shù)據(jù)地址范圍指示器。
17.根據(jù)權(quán)利要求16所述的方法,還包括: 確定計(jì)算機(jī)指令生成數(shù)據(jù)訪問地址; 當(dāng)生成所述數(shù)據(jù)訪問時(shí),通過將所述數(shù)據(jù)訪問地址與所述至少一個(gè)數(shù)據(jù)地址范圍指示器進(jìn)行比較,確定所述數(shù)據(jù)訪問地址是用于與所述第一權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置還是用于與所述第二權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置;以及 當(dāng)所述當(dāng)前權(quán)限狀態(tài)是允許訪問與所述數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置的權(quán)限狀態(tài)時(shí),允許訪問所述存儲(chǔ)器位置。
18.根據(jù)權(quán)利要求17所述的方法,還包括: 當(dāng)所述當(dāng)前權(quán)限狀態(tài)是不允許訪問所述存儲(chǔ)器位置的權(quán)限狀態(tài)時(shí),產(chǎn)生故障并且禁止訪問與所述數(shù)據(jù)訪問地址對(duì)應(yīng)的存儲(chǔ)器位置。
19.一種處理方法,包括: 將當(dāng)前權(quán)限狀態(tài)定義為管理者狀態(tài)或用戶狀態(tài); 通過將下一個(gè)指令提取地址與指令地址范圍指示器進(jìn)行比較,確定所述下一個(gè)指令提取地址是對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置還是位于與不同的權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置,其中所述指令地址范圍指示器定義被分配用于存儲(chǔ)管理者代碼的管理者代碼存儲(chǔ)器區(qū)域和被分配用于存儲(chǔ)用戶代碼的用戶代碼存儲(chǔ)器區(qū)域;以及 當(dāng)所述下一個(gè)指令提取地址不對(duì)應(yīng)于位于與所述當(dāng)前權(quán)限狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器區(qū)域內(nèi)的位置時(shí),僅僅在從所述 當(dāng)前權(quán)限狀態(tài)到所述不同的權(quán)限狀態(tài)的轉(zhuǎn)換是合法時(shí),允許提取所述下一個(gè)計(jì)算機(jī)指令。
20.根據(jù)權(quán)利要求19所述的方法,其中: 當(dāng)所述當(dāng)前權(quán)限狀態(tài)是所述管理者狀態(tài)而所述不同的權(quán)限狀態(tài)是所述用戶狀態(tài)時(shí),當(dāng)一組指令內(nèi)的指令被執(zhí)行時(shí)從所述管理者狀態(tài)到所述用戶狀態(tài)的轉(zhuǎn)換是合法的,其中該組指令包括從中斷返回指令。
21.根據(jù)權(quán)利要求19所述的方法,其中: 當(dāng)所述當(dāng)前權(quán)限狀態(tài)是所述用戶狀態(tài)而所述不同的權(quán)限狀態(tài)是所述管理者狀態(tài)時(shí),當(dāng)一組指令內(nèi)的指令被執(zhí)行時(shí),其中該組指令包括軟件中斷指令和陷阱指令,或者當(dāng)檢測(cè)到異常情況時(shí),從所述用戶狀態(tài)到所述管理者狀態(tài)的轉(zhuǎn)換是合法的。
22.根據(jù)權(quán)利要求19所述的方法,還包括: 確定計(jì)算機(jī)指令生成數(shù)據(jù)訪問地址; 當(dāng)生成所述數(shù)據(jù)訪問時(shí),通過將所述數(shù)據(jù)訪問地址與數(shù)據(jù)地址范圍指示器進(jìn)行比較,確定所述數(shù)據(jù)訪問地址是用于與所述管理者狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置還是用于與所述用戶狀態(tài)相關(guān)聯(lián)的存儲(chǔ)器位置,其中所述數(shù)據(jù)地址范圍指示器定義被分配用于存儲(chǔ)與所述管理者狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第三存儲(chǔ)器區(qū)域,并且定義被分配用于存儲(chǔ)與所述用戶狀態(tài)相關(guān)聯(lián)的數(shù)據(jù)的第四存儲(chǔ)器區(qū)域; 當(dāng)所述當(dāng)前權(quán)限狀態(tài)是所述管理者狀態(tài)時(shí),允許訪問所述存儲(chǔ)器位置;以及 當(dāng)所述當(dāng)前權(quán)限狀態(tài)是所述用戶狀態(tài)時(shí),僅僅當(dāng)所述數(shù)據(jù)訪問地址是用于位于所述第四存儲(chǔ)器區(qū)域內(nèi)的存儲(chǔ)器位置時(shí) ,允許訪問所述存儲(chǔ)器位置。
【文檔編號(hào)】G06F21/10GK103455733SQ201310206388
【公開日】2013年12月18日 申請(qǐng)日期:2013年5月29日 優(yōu)先權(quán)日:2012年5月31日
【發(fā)明者】D·M·麥卡賽, J·C·西爾賽羅, K·A·豪斯曼 申請(qǐng)人:飛思卡爾半導(dǎo)體公司