1、頁表結構
分頁轉換功能由駐留在內存中的表來描述,該表稱爲頁表(page table),存放在物理地址空間中。頁表可看作簡單的220個物理地址數組。線性到物理地址的映射功能能夠簡單地看作進行數組查找。線性地址的高20位構成這個數組的索引值,用於選擇對應頁面的物理(基)地址。線性地址的低12位給出了頁面中的偏移量,加上頁面的基地址最終造成對應的物理地址。因爲頁面基地址對齊在4K邊界上,所以頁面基地址的低12位確定是0。這意味着高20位的頁面基地址和12位偏移量鏈接組合在一塊兒就能獲得對應的物理地址。
頁表中每一個頁表項的大小爲32位。因爲只須要其中的20位來存放頁面的物理基地址,所以剩下的12位可用於存放諸如頁面是否存在等的屬性信息。若是線性地址索引的頁表項被標註爲存在的,則表示該項有效,咱們能夠從中取得頁面的物理地址。若是頁表項中信息代表(說明、指明)頁不存在,那麼當訪問對應物理頁面時就會產生一個異常。
1.兩級頁表結構
頁表含有220(1M)個表項,而每項佔用4B。若是做爲一個表來存放的話,它們最多將佔用4MB的內存。所以爲了減小內存佔用量,80x86使用了兩級表。由此,高20位線性地址到物理地址的轉換也被分紅兩步來進行,每步使用(轉換)其中的10bit。
第一級表稱爲頁目錄(page directory)。它被存放在1頁4K頁面中,具備210(1K)個4B長度的表項。這些表項指向對應的二級表。線性地址的最高10位(位31~22)用做一級表(頁目錄)中的索引值來選擇210個二級表之一。
第二級表稱爲頁表(page table),它的長度也是1個頁面,最多含有1K個4B的表項。每一個4B表項含有相關頁面的20位物理基地址。二級頁表使用線性地址中間10位(位21~12)做爲表項索引值,以獲取含有頁面20位物理基地址的表項。該20位頁面物理基地址和線性地址中的低12位(頁內偏移)組合在一塊兒就獲得了分頁轉換過程的輸出值,即對應的最終物理地址。
圖4-17給出了二級表的查找過程。其中CR3寄存器指定頁目錄表的基地址。線性地址的高10位用於索引這個頁目錄表,以得到指向相關第二級頁表的指針。線性地址中間10位用於索引二級頁表,以得到物理地址的高20位。線性地址的低12位直接做爲物理地址低12位,從而組成一個完整的32位物理地址。
|
(點擊查看大圖)圖4-17 線性地址和物理地址之間的變換 |
2.不存在的頁表
使用二級表結構,並無解決須要使用4MB內存來存放頁表的問題。實際上,咱們把問題搞得有些複雜了。由於咱們須要另增一個頁面來存放目錄表。然而,二級表結構容許頁表被分散在內存各個頁面中,而不須要保存在連續的4MB內存塊中。另外,並不須要爲不存在的或線性地址空間未使用部分分配二級頁表。雖然目錄表頁面必須老是存在於物理內存中,可是二級頁表能夠在須要時再分配。這使得頁表結構的大小對應於實際使用的線性地址空間大小。
頁目錄表中每一個表項也有一個存在(present)屬性,相似於頁表中的表項。頁目錄表項中的存在屬性指明對應的二級頁表是否存在。若是目錄表項指明對應的二級頁表存在,那麼經過訪問二級表,表查找過程第2步將同如上描述繼續下去。若是存在位代表對應的二級表不存在,那麼處理器就會產生一個異常來通知操做系統。頁目錄表項中的存在屬性使得操做系統能夠根據實際使用的線性地址範圍來分配二級頁表頁面。
目錄表項中的存在位還能夠用於在虛擬內存中存放二級頁表。這意味着在任什麼時候候只有部分二級頁表須要存放在物理內存中,而其他的可保存在磁盤上。處於物理內存中頁表對應的頁目錄項將被標註爲存在,以代表可用它們進行分頁轉換。處於磁盤上的頁表對應的頁目錄項將被標註爲不存在。因爲二級頁表不存在而引起的異常會通知操做系統把缺乏的頁表從磁盤上加載進物理內存。把頁表存儲在虛擬內存中減小了保存分頁轉換表所須要的物理內存量。
2、頁表項格式
頁目錄和頁表的表項格式如圖4-18所示。其中位31~12含有物理地址的高20位,用於定位物理地址空間中一個頁面(也稱爲頁幀)的物理基地址。表項的低12位含有頁屬性信息。前文已經討論過存在屬性,這裏簡要說明其他屬性的功能和用途。
|
(點擊查看大圖)圖4-18 頁目錄和頁表的表項格式 |
P--位0是存在(Present)標誌,用於指明表項對地址轉換是否有效。P=1表示有效;P=0表示無效。在頁轉換過程當中,若是說涉及的頁目錄或頁表的表項無效,則會致使一個異常。若是P=0,那麼除表示表項無效外,其他位可供程序自由使用,如圖4-18b所示。例如,操做系統可使用這些位來保存已存儲在磁盤上的頁面的序號。
R/W--位1是讀/寫(Read/Write)標誌。若是等於1,表示頁面能夠被讀、寫或執行。若是爲0,表示頁面只讀或可執行。當處理器運行在超級用戶特權級(級別0、1或2)時,則R/W位不起做用。頁目錄項中的R/W位對其所映射的全部頁面起做用。
U/S--位2是用戶/超級用戶(User/Supervisor)標誌。若是爲1,那麼運行在任何特權級上的程序均可以訪問該頁面。若是爲0,那麼頁面只能被運行在超級用戶特權級(0、1或2)上的程序訪問。頁目錄項中的U/S位對其所映射的全部頁面起做用。
A--位5是已訪問(Accessed)標誌。當處理器訪問頁表項映射的頁面時,頁表表項的這個標誌就會被置爲1。當處理器訪問頁目錄表項映射的任何頁面時,頁目錄表項的這個標誌就會被置爲1。處理器只負責設置該標誌,操做系統可經過按期地復位該標誌來統計頁面的使用狀況。
D--位6是頁面已被修改(Dirty)標誌。當處理器對一個頁面執行寫操做時,就會設置對應頁表表項的D標誌。處理器並不會修改頁目錄項中的D標誌。
AVL--該字段保留專供程序使用。處理器不會修改這幾位,之後的升級處理器也不會。