引用:
Originally posted by RogerShih
GDT、LDT跟IDT就是 selector, 這部份中文的參考資料可以參考侯俊傑(侯捷)早期的著作. 保護模式中的定址是非線性的, 必須透過 GDT、LDT或IDT 以及 MMS 記體體映射來達成存取.
或者可以參考原文資料中 GDT、LDT 如何達成 selector : offset 到實體記憶體的轉換, 你就知道為什麼我說 386 以後 CPU 定址能力可以超過 4GB 了.
VM 那是另一回事.
說到這, 我去找找有沒有侯俊傑當年著作的 PDF 檔, 看中文比較容易理解.
|
既然都聊到這了,那小弟我就講詳細點好了,免的有說跟沒說一樣

在Intel的保護模式下的定址分為兩階段,其中一個是Linear Address一個是Physical Address
若沒有開啟分頁功能(即cr0的第31bit設定為0),則Linear Address即為Physical Address
這時候,CPU能使用的MEM就是機器上面所擁有的MEM了.
若是開啟分頁模式,則進入保護模式以後,若要存取某個segment的位置,先透過Sector內的內容,再由GDT或是LDT中定義的segment位置取出其Linear Address
在取出之後,則會參考cr3的內容找到分頁目錄(PDE),再由分頁目錄中找到對應的分頁表(PGE)
將Linear Address對應的physical Address取出,這個才是真正要放入在真實記憶體的位置.
Pentinum pro中可以設定cr0,cr4這兩個register設定成Page始可定址36bit的Physical Address,可惜386並沒有cr4(pentinum以後才有),請問如何定址超過4G?(參考IA 32的pdf,第3-20頁,
PAGE TRANSLATION USING 32-BIT PHYSICAL ADDRESSING)
保護模式的部分參考,80486/Pentinum 保護模式原理與實務(施威銘研究室 著)