x86中的页表结构和页表项格式
生活随笔
收集整理的這篇文章主要介紹了
x86中的页表结构和页表项格式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文鏈接:https://www.cnblogs.com/vinozly/p/5703215.html
一、頁表結構 分頁轉換功能由駐留在內存中的表來描述,該表稱為頁表(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? 線性地址和物理地址之間的變換 |
| ? |
| (點擊查看大圖)圖4-18? 頁目錄和頁表的表項格式 |
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的x86中的页表结构和页表项格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 目标代码文件、可执行文件和库
- 下一篇: 二值信号量和互斥锁到底有什么区别?