Linux 內存尋址 - 常規分頁
從80386開始,Intel 處理器處理 4KB的頁。32位線性地址分為 10 10 12 三部分。 directory table offset
cr3控制寄存器中存放正使用的頁目錄的物理地址。
一個頁目錄項與頁表項結構相同。 其中有20位Field 包含頁框的物理地址。
當從cr3 中獲取到頁目錄地址時,取線性地址的高10位取頁目錄(4KB,每一個32位占4字節,共1024個頁表)中指向的頁表項地址(20位的Field)
使用取出來的物理地址得到頁表地址,線性地址的中間10位,取頁表內偏移量,取含有數據的頁的物理地址。
最終使用線性地址的12位取頁內數據偏移量。
頁目錄項指向的頁表中有4096的物理地址,也就是對應1024個頁表項,剛好與線性地址的10位相符。
而頁表項指向的項含有4096的物理地址,偏移量需要線性地址的12來取offset
cr4寄存器,PSE標記,可使得擴展分頁與常規分頁共存。
cr0 的PG = 0時,線性地址被解析為物理地址。