4.多級頁表及反向頁表
現代計算機系統都支持非常大的邏輯地址空間,致使頁表很大,用連續空間存放頁表顯然不現實。
如邏輯地址32位,頁面大小4KB,則頁表項爲1M,若每個頁表項佔4字節,則頁表共需要4MB內存空間。
解決方案:
用離散方式存儲 頁表
僅將當前需要的部分頁表項放在內存,其餘放在磁盤上,需要時調入。
兩級頁表及多級頁表
將頁表再分頁,使每頁與內存物理塊大小相同,併爲它們進行編號0、1、…,同時還爲離散存放的頁表建立一張頁表。
例如:32位地址可以劃分爲
兩級頁表結構
具有兩級頁表的地址變換過程
利用邏輯地址中的一級頁號作爲索引訪問一級頁表,找到第二級頁表的起始地址,
再利用第二級頁號找到指定頁表項,從中取出塊號與頁內地址拼接形成物理地址。
具有兩級頁表的地址變換機構
多級頁表
對兩級頁表進行擴充,便可得到三級、四級或更多級的頁表。
多級頁表的實現方式與兩級頁表類似。
反向頁表
現代操作系統 一般允許大邏輯地址空間,如232,這使得頁表太大,爲解決頁表佔用大量存儲空間的問題,引入了反向頁表。
反向頁表爲每個物理塊設置一個頁表項,並將它們按物理塊號大小排序,表項內容爲頁號及其隸屬進程的標識號。
反向頁表地址變換過程
利用進程標識號及頁號檢索反向頁表,若找到相應的頁表項,則將其物理塊號與頁內地址拼接;否則請求調入該進程相應頁,在無調頁功能的系統中則出錯。
由於反向頁表中沒有存放進程中尚未調入頁,因此必須爲每個進程建立一張傳統頁表並存放在外存中,當所訪問頁不在內存時使用這張頁表。頁表中包含各頁在外存的地址。
反向頁表的地址變換
反向頁表的不足
反向頁表查找慢:因爲進程號及頁號不能作爲索引,查找時必須在整個反向頁表中進行。
解決辦法:
將常用頁表項存入快表
用散列函數存放反向頁表
5.存儲保護
分頁存儲管理採用兩種方式保護內存:
地址越界保護:頁表長度與邏輯地址中的頁號比較
存取控制保護:在頁表中增加保護位
7.5 分段管理
由於分頁按物理單位進行,沒有考慮程序段的邏輯完整性,給程序段的共享和保護帶來不便,另外動態鏈接及段的動態增長也要求以邏輯上完整的程序段爲單位管理。
1. 分段管理的原理
在分段存儲管理系統中,作業的地址空間由若干個邏輯分段組成,每個分段是一組邏輯意義相對完整的信息集合,每個分段都有自己的名字,每個分段都從0開始編址並採用一段連續的地址空間。
在進行存儲分配時,以段爲單位分配內存,每段分配一個連續的內存區,但各段之間不要求連續。
作業的地址空間是二維的
作業的地址空間分爲多段,每段都從0開始編址,故地址是二維的。
分段系統的邏輯地址結構
該地址結構最多允許多少分段?每段最大長度爲多少?
該地址結構允許作業最多有64K個段,每段的最大長度爲64KB。
轉自 http://www.csaiky.com/rjxy/200804281009101332.htm