386處理器的64TB的虛擬定址空間,對我們的使用,有什麼現實意義嗎?
但是你要考慮到一個問題是,lgdt是特權指令,而且現在的32位核心都是使用某個特殊的gdt遮蔽掉分段機制的
所以如果你只打算在裸機上執行你的程式,那麼你倒是可以充分利用這個機制,但是,
你不覺得頁表比這個更好用麼?
沒有現實意義。
1995 年的 P6 才透過
Physical Address Extension
支援 64G 物理記憶體,你說1985年的386支援64T虛擬地址有意義麼?
我最近只看知乎不怎麼回答了,不過看到這個問題還是想簡要的回答下。
建議瞭解瞭解作業系統的虛擬記憶體機制,這玩意可以抽象記憶體空間,給上層使用者程式的編寫提供簡單的記憶體模型。
AMD64 出現後就沒用了。當然其實當前 x86 的 64 位記憶體也沒有真正到達 64 位的長度。也難說以後 64 位會不會依然不夠用。
但是 32 位時代,4G 記憶體在“某些情況下”不夠用。就需要擴充套件或者以某種方式來實現更大記憶體的管理。尤其是引入了保護模式後,每個程式都有自己“獨立”的4G記憶體可以糟盡。對於系統來說,增加擴充套件的 32 位,可以很方便的來切換真實的記憶體和虛擬記憶體讓不同的程式充分享受記憶體。對於應用來說,也可以靠透過呼叫不同的虛擬記憶體,來實現更多記憶體的“動態切換”工作便於自己的程式執行。實現一種類似快取的機制。
所以我覺得,這個多出來的定址能力,是保護模式的充分引申利用。
沒意義,或者說書是錯的。
書的意思是想表達【段:地址】的總組合數是64TB,但這個組合數對實際程式設計而言沒有任何意義。
因為對於CPU來說,CS:EIP或者SS:ESP這種邏輯地址的形式,最終都要翻譯成線性地址的,不管前面的組合有多少種,32位模式下線性地址的地址空間只有4G,在這裡就限制死了,根本不存在64TB一說。
或者更直觀的說FFF0:FFFFFFFF和0008:00000000看著差別很大,但永遠都限制在4G線性地址空間內,不管這種組合有多少種。寫書的人是從16位時代過來的,16位時代【段:地址】的組合還有點意義,到32位時代就完全變了。
而且,書上用“虛擬空間”的說法也明顯不妥,應該是作者自己生造的概念,如果是指虛地址的話,虛地址空間也只有4G(32位模式下)。
另外,有沒有特權指令許可權也是沒有用的,不管怎麼改變GDTR或者LDTR,線性地址只有4G,訪問超過4G物理地址是透過擴充套件頁表實現的,不是透過段實現的。