x86中的頁表結構和頁表項格式

來源:互聯網
上載者:User

一、頁表結構

分頁轉換功能由駐留在記憶體中的表來描述,該表稱為頁表(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步將同如上描述繼續下去。如果存在位表明對應的二級表不存在,那麼處理器就會產生一個異常來通知作業系統。頁目錄表項中的存在屬性使得作業系統可以根據實際使用的線性位址範圍來分配二級頁表頁面。

目錄表項中的存在位還可以用於在虛擬記憶體中存放二級頁表。這意味著在任何時候只有部分二級頁表需要存放在實體記憶體中,而其餘的可儲存在磁碟上。處於實體記憶體中頁表對應的頁目錄項將被標註為存在,以表明可用它們進行分頁轉換。處於磁碟上的頁表對應的頁目錄項將被標註為不存在。由於二級頁表不存在而引發的異常會通知作業系統把缺少的頁表從磁碟上載入進實體記憶體。把頁表格儲存體在虛擬記憶體中減少了儲存分頁轉換表所需要的實體記憶體量。

二、頁表項格式

頁目錄和頁表的表項格式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--該欄位保留專供程式使用。處理器不會修改這幾位,以後的升級處理器也不會。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.