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