分頁機制圖文詳解

weixin_34402408發表於2018-03-11

分頁儲存管理方式:

將使用者程式(程式)的 邏輯地址 空間分成若干個 (4KB)並編號,同時將記憶體的 實體地址 也分成若干個 塊或頁框 (4KB)並編號

目的:

將程式的各個頁離散地儲存在記憶體的任一物理塊中,使得從程式的角度看,認為它有一段連續的記憶體,程式總是從0號單元開始編址

5750276-0619159fdedb77ff..png
image

因此需要建立一個由頁到頁框的一一對映的關係,這就是頁表

5750276-694f906c0a8145ea..png
image

系統會為每一個程式建立一張頁表,程式執行時,通過查詢程式自己的頁表,找到每頁在記憶體中的物理塊號,從而保證每個程式都能正確執行

由於頁表實現了邏輯地址到實體地址的變換,執行的頻率非常高,因此頁表大多駐留在記憶體中 ,且需要採用硬體實現。在系統中設定一個頁表暫存器(PTR) ,在其中存放頁表在記憶體中的起始地址和頁表的長度,平時頁表始址和長度存放在各程式的PCB中,當排程到某程式時,才將這兩個資料裝入頁表暫存器中。

頁表項結構:

5750276-b8a07566bdab0bbb..png
image

前20位即為塊號,指示實體記憶體中的塊(也稱頁框)

P - 存在(Present)標誌,用於指明表項對地址轉換是否有效。P=1表示有效;P=0表示無效。在頁轉換過程中,如果說涉及的頁目錄或頁表的表項無效,則會導致一個異常。

R/W - 讀/寫(Read/Write)標誌。如果等於1,表示頁面可以被讀、寫或執行。如果為0,表示頁面只讀或可執行。

地址變換過程:

1、程式訪問某個邏輯地址的資料

2、由邏輯地址的頁號(3),以及頁表暫存器中的始址,找到頁表並找到對應的頁表項(3)

3、由頁表項上的塊號,找到實體記憶體中的塊號

4、由塊號,加上邏輯地址的頁內地址,實現了對實體地址資料的定位

5、程式訪問該邏輯地址對應的實體地址的資料

5750276-5f31976efdb1b2e4..png
image

由上可知,每存取一個資料,需兩次訪問記憶體,第一次訪問記憶體中的頁表,第二次訪問記憶體中的資料,效率較低

改進

增設一個具有並行查尋能力的特殊高速緩衝暫存器,稱為“聯想暫存器”或“快表”,IBM中稱為TLB,用於存放當前訪問的那些頁表項

改進後的地址變換過程:

1、程式訪問某個邏輯地址的資料

2、由邏輯地址的頁號(3),先與高速緩衝暫存器中的所有頁號比較,若匹配則直接讀出塊號,若不匹配則再由上面的2、3步驟執行

3、找到頁表項後,將此頁表項存入快表中,若快表已滿,則系統找出一個認為不再需要的頁表項將其換出

4、5步驟相同

5750276-6268e8902e3f7b96..png
image

分級頁表

原因:

IA-32體系結構中,處理器為32位,可定址232=4GB的虛擬地址空間,若每頁大小為4KB,則共分為4GB/4KB=220=1048576頁,因此頁表中應有1048576項,每個頁表項為4B,則一個頁表需要4MB的連續的實體記憶體,每個程式都需要自身的頁表佔4MB,將導致大量記憶體用於儲存程式的頁表

PS:80386處理器為32位,可定址4GB邏輯地址,而當時實體記憶體只有4MB,採用單級頁表明顯不行

採用兩級頁表:每頁中存210項,共分為210頁,並新增一個頁目錄表來記錄這210頁表的地址與資訊,因此頁目錄表大小為210*4B=4KB放在記憶體中,需要具體的表再由此讀入

解決方法:

1、採用離散分配方式代替原來頁表需要的連續實體記憶體

2、將當前需要的部分頁表項調入記憶體,其餘頁表項仍駐留在磁碟上,需要時再調入

兩級頁表:

指向原頁表項邏輯地址結構

5750276-e4b6eb77f345b361..png
image

PS:位移量W也稱為頁內地址 頁大小4k 所以頁內地址需要12位(212=4k)

VS

指向兩級頁表項邏輯地址結構

5750276-92dbdb767a846698..png
image

PS:外層頁號也稱頁目錄表(Directory),外層頁內地址也稱頁表地址(Table)

5750276-a4c594073a39d760..png
image

與頁表暫存器(PTR)相同,增設一個外層頁表暫存器(CR3),用於存放外層頁表的地址

頁目錄項結構

5750276-053b5c7746195b01..png
image

與頁表項結構類似。

分級後的地址變換過程:

1、程式訪問某個邏輯地址的資料

2、由邏輯地址中的外層頁號(Directory),以及外層頁表暫存器(CR3)中的外層頁表始址,找到二級頁表的始址

3、由二級頁表的始址,加上邏輯地址中的外層頁內地址(Table),找到對應的二級頁表中的頁表項

4、由頁表項中的物理塊號,加上邏輯地址中的頁內地址(偏移量),實現了對實體地址資料的定位

5、程式訪問該邏輯地址對應的實體地址的資料

5750276-e87685d25f079735..jpg
image
5750276-110d64a74acc36d8..png
image

以上分級解決了原來頁表需要連續實體記憶體空間的問題,接下來解決用較少的記憶體空間去存放大頁表的問題

解決方法:

僅把當前需要的一批頁表項調入記憶體,以後再根據需要陸續調入。因此頁目錄表常駐記憶體(大小為4KB,地址存在CR3暫存器中),而 程式的頁表存於磁碟中,對於頁表只需調入一頁或幾頁。由頁目錄項中的P標記該頁表是否在記憶體中,若不在則產生缺頁異常,產生異常中斷,請求系統將該頁表調入記憶體

相關文章