地址映射過程中,通過分段管理部件將虛擬地址空間轉(zhuǎn)換成線性地址,這一步是必然存在的。如果在程序中啟用了分頁管理機制,那么線性地址還要經(jīng)過分頁管理部件的處理才得到最后的物理地址。如果沒有采用分頁管理機制,那么得到的線性地址就是物理地址。分頁管理部件的主要的工作機制在于將線性地址和物理地址劃分成大小相同的塊,通過在建立兩者之間的頁表來建立對應(yīng)關(guān)系。分段管理機制使用大小可變的存儲塊,使用分段管理機制適合處理復雜系統(tǒng)的邏輯分段。分頁管理機制使用固定大小的塊,所以它適合管理物理存儲器,分頁管理機制能夠更有效地使用虛擬地址空間。
80386支持多任務(wù),因此對各個任務(wù)進行保護是非常必要的,對任務(wù)的保護可分為:同一任務(wù)內(nèi)的保護,不同任務(wù)之間的保護。
a.同一任務(wù)內(nèi)的保護,在同一任務(wù)內(nèi)定義有四種特權(quán)級別(Previlege Level),將這些特權(quán)級別分配給段中的代碼和數(shù)據(jù),把最高的特權(quán)級別分配給最重要的數(shù)據(jù)和最可信任的代碼,將較低級別的特權(quán)分給一般的代碼和不重要的數(shù)據(jù)。特權(quán)級別用0~3來表示,用數(shù)字0表示最高特權(quán)級別,用數(shù)字3表示最低特權(quán)級別,在比較特權(quán)級別時不使用大于或小于,而是使用外層或里層來比較,很明顯特權(quán)級別為0表示最里層,特別級別為3表示最外層。任何一個存儲段(程序直接進行訪問的代碼段和數(shù)據(jù)段)都有一個特權(quán)級別,在一個程序試圖訪問這個存儲時,就會進行特權(quán)級別的比較,如果小于或等于(如果等于表明同級,小于則表明是內(nèi)層)處該存儲段的特權(quán)級別就可以對該存儲段進行訪問。任務(wù)在特定時刻下的特權(quán)級別稱為CPL(Current Previlege Level),看一簡單的結(jié)構(gòu)示意圖:
|---------|-------|
| CodeA | DataA | 特權(quán)級別為0
|---------|-------|
|---------|-------|
| CodeB | DataB | 特權(quán)級別為1
|---------|-------|
|---------|-------|
| CodeC | DataC | 特權(quán)級別為2
|---------|-------|
|---------|-------|
| CodeD | DataD | 特權(quán)級別為3
|---------|-------|
CodeA可以訪問DataA,CodeB,DataB,CodeC,DataC,CodeD,DataD
CodeB可以訪問Datab,CodeC,DataC,CodeD,DataD,但不可以訪問CodeA,DataA
CodeC可以訪問DataC,CodeD,DataD,但不可以訪問CodeA,DataA,CodeB,DataB
CodeD處在最外層,只能訪問同級的DataD,不可以訪問CodeA,DataA,CodeB,DataB,CodeC,DataC
通常應(yīng)用程序放在最外層,但由于每個應(yīng)用程序的虛擬地址空間不同,因此它們被隔離保護。這種特權(quán)級別的典型用法就是:將操作系統(tǒng)的核心放在0層,操作系統(tǒng)的其余部分放在1級,2級留給中間軟件使用,3級放應(yīng)用程序,這樣的安排的好處在于:操作系統(tǒng)的核心因為放在0層,因此它可以訪問任務(wù)中所有的存儲段,而1級的部分操作系統(tǒng)可以訪問除0級以外的所有存儲段,應(yīng)用程序只能訪問自身的存儲段。
b.不同任務(wù)間的保護,通過把每個任務(wù)放在不同的虛擬地址空間來實現(xiàn)隔離保護,虛擬地址到物理地址之間的映射由每個任務(wù)中的映射函數(shù)來決定,隨著任務(wù)切換,映射函數(shù)也跟著切換,這樣可以保證任務(wù)A映射到物理內(nèi)存中的區(qū)域與任務(wù)B映射到內(nèi)存中的區(qū)域是不同的,盡管有可能它們的虛擬地址空間相同,但它們最終在物理內(nèi)存中的位置是不同的,從而起到了保護作用。