Linux

為什麼虛擬地址只有 48 位而不是 64 位?

  • September 20, 2020

我正在讀一本關於虛擬記憶體的書:

Intel Core i7 支持 48 位 (256 TB) 虛擬地址空間和 52 位 (4 PB) 物理地址空間 在此處輸入圖像描述

下面是我的問題

Q1-既然我們主要使用64位機器,為什麼虛擬地址只有48位?不應該是64位虛擬記憶體嗎?

Q2-為什麼物理記憶體(52位)的地址空間大於虛擬記憶體(48位),虛擬記憶體的地址空間不應該大於物理記憶體的嗎?

Q3-我的理解是:所有儲存在核心記憶體中的頁表對使用者是不可見的,我的理解是否正確?

據我所知,沒有 64 位處理器完全支持 64 位地址。寄存器為 64 位寬,8 字節用於儲存指針,但指針值通常通過強制最高有效位全為零或全一來限制為有效的 48 位。

這樣做的原因是(還)不需要完整的 64 位地址空間,支持不需要的東西會浪費矽。支持完整的 64 位地址空間會使虛擬到物理的映射變得複雜,這沒有好處。

記憶體地址空間的指數增長意味著在給定時間內添加恆定數量的地址位,而不是增加一倍的位數。因此,如果一個進化步驟是從 16 位地址位到 32 位,那麼從 32 位升級的下一步是 32+16 = 48 位,而不是 64 位。將地址寄存器擴展為 64 位是有意義的,因為 48 位處理起來有些笨拙,並且提供了一種架構,可以在需要時為“真正的”64 位地址做好準備。

Q2:為什麼不呢?更大的物理地址空間使您可以擁有多個程序,每個程序的虛擬地址空間最多為 2^48 限制。過去十年(二十年?)中的大多數 32 位 x86 處理器都支持物理地址擴展 (PAE),它支持 64 GB 物理記憶體,儘管虛擬地址空間限制為原始 80386 指令集定義的 4 GB建築學。

Q3:是的,頁表是由核心管理的,儲存在核心記憶體中。

引用自:https://unix.stackexchange.com/questions/610309