回顧我的裸機代碼,在通過多引導符合加載程序加載後切換到長模式我意識到一些CPU不支持1G頁,所以我不能簡單地使用PML4表+ 1 PDP表條目來映射1:1 1G頁。我可以確定使用PML4 + PDP表+ 1個PD條目來映射1:1首2M頁的代碼是否適用於每個AMD64兼容CPU?是否有兼容AMD64的CPU不支持2M頁?
換句話說,所有AMD64 CPU都支持2-M頁嗎?謝謝。
回顧我的裸機代碼,在通過多引導符合加載程序加載後切換到長模式我意識到一些CPU不支持1G頁,所以我不能簡單地使用PML4表+ 1 PDP表條目來映射1:1 1G頁。我可以確定使用PML4 + PDP表+ 1個PD條目來映射1:1首2M頁的代碼是否適用於每個AMD64兼容CPU?是否有兼容AMD64的CPU不支持2M頁?
換句話說,所有AMD64 CPU都支持2-M頁嗎?謝謝。
是的。
長模式需要(或者說,是PAE的擴展),因此它可以映射64位物理地址,並且PAE始終支持PS位來短路翻譯以生成2MiB頁面。 (正如你注意到的,英特爾CPU不支持這種短路來生成1GiB頁。)
您可能正在考慮PSE,在https://en.wikipedia.org/wiki/Page_Size_Extension中描述,您可以看到可以追溯到奔騰,儘管有些中基於奔騰時代設計的-2000s嵌入式CPU也缺乏PSE支持。這些CPU都不支持x86-64擴展。
有引經據典的沒有簡單的引用,但在卷3A整個第4章英特爾®64和IA-32架構軟件開發人員手冊涵蓋尋呼和全部深度各種標誌。 AMD有類似的參考資料,但在這裏可以被認爲是Intel的超集(例如1GiB頁面支持)。
假設的不正確的CPU可以提供長模式,但不提供PSE,但缺乏PSE只會影響32位頁表中PS位的解釋,這僅僅意味着不能在32位創建4MiB頁bit模式,但可以在長時間模式下創建2MiB頁面。
CPUID Fn0000_0001_EDX位3(頁面大小擴展名)指示支持2 MB頁面。看起來AMD64兼容的CPU可能不支持這個,因爲這種檢查存在。
實際上發現在長模式下自動支持2 MB頁面。 PSE僅支持32位模式下的4 MB頁面支持。從AMD64 Architecture Programmer’s Manual Volume 2:
頁面大小擴展(PSE)。頁模式擴展名(CR4.PSE)在長模式下被忽略爲 。長模式不支持按頁面大小的擴展名啓用的4 MB頁面大小 。不過,長模式支持4 KB和2 MB頁面大小。
PSE位表示支持32位模式下的4MB頁面,它與64位模式下的2MB頁面無關(始終支持)。 – harold 2014-12-19 12:28:06
@harold確定嗎?根據我的理解,PSE適用於32位模式下的4 MB頁面和64位模式下的2 MB頁面。 – 2014-12-19 12:31:12
我確定。我現在仔細閱讀手冊以找到需要引用的內容,但到目前爲止它僅存在「通過省略」(例如,您必須檢查1GB頁面支持,它沒有提供任何關於2MB頁面支持的內容)編輯:其他指示,您不必觸摸CR4.PSE即可使用2MB頁面。迄今爲止最好的; 「如果CPUID.01H:EDX.PSE [bit 3] = 1,則可以將CR4.PSE設置爲1,從而支持使用32位分頁的4 MB頁面(請參閱第4.3節)。」 – harold 2014-12-19 12:38:44