日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

1 《Undocumented Windows 2000 Secrets》翻譯 --- 第四章( 四 )


圖 4-1 給出了 i386 內(nèi)存的分段模型,同時說明了邏輯地址和線性地址的關(guān)系 。為了更清晰些,我將描述符表( descriptor table )和段( segment )畫的比較小 。實際上, 32 位的操作系統(tǒng)通常采用 圖 4-2 所示的分段方案,這就是所謂的平滑內(nèi)存模型( flat memory model ),它采用一個 4GB 大小的段 。這種方案的不足是,描述符表變成了段的一部分,從而可以被有足夠權(quán)限的代碼訪問到 。
typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
typedef union _LARGE_INTEGER
{
struct
{
ULONG LowPart;
LONG HighPart;
};
LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
列表 4-1. PHYSICAL_ADDRESS 和 LARGE_INTEGER 結(jié)構(gòu)的定義
圖 4-1. i386 的內(nèi)存分段
圖 4-2 給出的內(nèi)存模型被 Windows 2000 作為標準的代碼、數(shù)據(jù)和堆棧段,這意味著,所有的邏輯地址將包括 CS 、 DS 、 ES 和 SS 段寄存器 。FS 和 GS 的處理方式有所不同 。Windows 2000 并不使用 GS 寄存器,而 FS 寄存器被專門用來保存位于線性地址空間中的系統(tǒng)數(shù)據(jù)區(qū)域的基地址 。因此, FS 的基地址遠大于 0 ,其大小不會超過 4GB。有趣的是, Windows 2000 為用戶模式和內(nèi)核模式分別維護兩個不同的 FS 段 。稍后我們將詳細討論這一問題 。
圖 4-2. 平滑的 4GB 內(nèi)存段
在 圖 4-1 和 圖 4-2 中,邏輯地址的 selector 指向描述符表,該描述符表由名為 GDTR 的寄存器指定 。這是 CPU 的全局描述符表寄存器,該寄存器可由操作系統(tǒng)設(shè)置為任何適當(dāng)?shù)木€性地址 。GDT (全局描述符表)的第一項是保留的,該項對應(yīng)的 selector 叫做“ null segment selector ” 。Windows 2000 將其 GDT 保存在 0x80036000。GDT 可容納多達 8,19264 位的條目,即其最大值為 64KB。Windows 2000 僅使用開始的 128 個項,并將 GDT 的大小限制為 1,024 字節(jié) 。隨 GDT 一起, i386 CPU 還提供了一個本地描述符表( Local Descriptor Table , LDT )和一個中斷描述符表( Interrupt Descriptor Table , IDT ),這兩個表的起始地址分別保存在 LDTR 和 IDTR 這兩個寄存器中 。GDTR 和 IDTR 的值是唯一的, CPU 執(zhí)行的每個任務(wù)都采用相同的值,而 LDTR 的值則是任務(wù)相關(guān)的, LDTR 可容納一個 16 位的 selector。
圖 4-3 示范了復(fù)雜的線性地址與物理地址的轉(zhuǎn)換機制,如果在 4KB 分頁模式下,并允許請求式分頁, i386 的內(nèi)存管理單元就會采用此種轉(zhuǎn)換機制 。圖中左上角的頁目錄基址寄存器( Page-Directory Base Register , PDBR )包含頁目錄的物理地址 。PDBR 由 i386 的 CR3 寄存器保存 。僅用該寄存器的高 20 位來尋址 。因此,頁目錄也是以頁為邊界的 。PDBR 的剩余位作為標志位或保留以便將來擴展使用 。頁目錄占用一個完整的 4KB 頁,由包含 1024 個頁目錄項( Page-Directory Entry )的數(shù)組構(gòu)成,每個頁目錄項均為 32 位 。和 PDBR 類似,每個 PDE 被劃分為一個 20 位的頁幀計數(shù)器( Page-Frame Number , PFN )和一個標志數(shù)組 。PFN 用來尋址頁表 。每個頁表都是按頁對齊的,包含 1024 個頁表項( Page-Table Entry , PTE ) 。每個 PTE 的高 20 位作為一個指針指向一個 4KB 的數(shù)據(jù)頁 。通過將線性地址分為三段來實現(xiàn)地址轉(zhuǎn)換:高 10 位用來選擇一個 PDE (屬于頁目錄),接下來的 10 個位選擇前面所選的 PDE 中的某個 PTE ,最后剩下的 12 個位用來指定在數(shù)據(jù)頁中的偏移量,該數(shù)據(jù)頁由前面所選的 PTE 確定 。
圖 4-3. 兩層間接模型(采用 4KB 頁)
在 4MB 分頁模式下,事情就變得很簡單了,這是因為消除了一個間接層,如 圖 4-4 所示 。此時, PDBR 仍然指向頁目錄,但僅使用了每個 PDE 的高 10 位,這是因為目標地址采用 4MB 對齊 。因為沒有使用頁表,這個地址同樣也是 4MB 數(shù)據(jù)頁的基地址 。所以,此時的線性地址只包含兩個部分: 10 個位用來選擇 PDE ,其余的 22 位作為偏移量 。4MB 內(nèi)存方案的開銷沒有 4KB 那么大,這是因為僅頁目錄需要附加的內(nèi)存 。這 1024 個 PDE 中的每個都可尋址一個 4MB 頁 。這足夠覆蓋整個 4GB 地址空間了 。所以, 4MB 分頁的優(yōu)勢就是可以降低內(nèi)存管理的開銷,但結(jié)果就是尋址粒度較大 。

推薦閱讀