windows內存頁默認是多大?

linux內存頁默認大小是4K,如果內存空間很大(8G以上),管理這些頁就很耗費資源。所以,大內存下的linux可以使用hugepage技術,使用2M的內存頁。

那windows(64位)內存頁默認大小是多少呢?可以更改嗎?


題主對Linux的理解不完全正確。

Linux內存頁默認大小是4K的,所以每個4K都有一個對應的page結構體進行管理。Linux有大頁功能,比如2M,1G大頁,但這裡的大頁並不是指Linux管理物理內存的基本單位,而是指MMU頁表項所能描述的最大物理塊空間,使用更大的頁,是為了減少TLB miss造成查頁錶帶來的性能開銷。一個大頁,也是由多個連續的物理頁組成的,每個物理頁也都有page結構體描述。

所以,在Linux裡面4K物理頁,與Hugetlbfs中的大頁是沒有相接關係的。

回到最初的問題,用一個page結構,管理一個4K大小的物理頁,這個內存開銷也不小,對於大內存機器來說,也是一個不小的開銷。所以,在X86_64架構和ARM64架構里,Linux內核支持將物理頁配置成64K頁大小,即一個page結構描一個64K小的物理頁。

綜合起來,Linux的頁是這樣的:

1) 從管理的角度來說,支持4K頁和64K頁

2)從映射單位來說,支持4K/2M/1G,具體看體系架構。


According to Wikipedia:

在X86-64系統下,Huge Page是2MB。不過在Windows下這個Huge Page則被稱作Large Page(容易和另外一個Large Page概念混淆……因為有的Large Page可以達到1G單頁)。


默認的4k頁面跟操作系統沒關係,是x86體系結構要求的。同樣是linux,在arm下說不定就不是4k頁面了(沒研究過arm)。

hugepage,也是體系結構支持的。32bit下,支持4k和4M頁(10/10/12),開啟PAE後,增加了一級頁表(2/9/9/12)支持4k,2M。64bit下,支持4k,2M,1G(9/9/9/9/12,x86-64只支持48bit地址空間)。

所以,這些東西不能脫離體系結構談。因為換個體系結構,可能就是完全不同的樣子了。這部分代碼,也是操作系統針對不同體系結構分別實現的。


推薦閱讀:

能不能一鍵開啟快速訪問工具欄?
如何在 Windows 下訪問 ext4 格式的硬碟?
微軟為什麼不給 Linux 出 Office?
如何從零開始寫一個Edge擴展?
Win + R 能否有辦法直接打開 .url 網址文件?

TAG:軟體 | MicrosoftWindows | Linux | Linux系統管理 | Linux內核 |