標籤:地址空間 一個 直接 並且 virtual sdk 緩衝池 post 需要
1. 公司的產品有一個檢查windows作業系統的功能,驗證是否滿足 只能用戶端 的運行需求:
這裡面的可用虛擬記憶體是128T 感覺非常奇怪了.
然後自己想了下128T 是 2的 47次方
猜想是不是windows10 採取了47位的地址匯流排位寬來進行VAS虛擬記憶體定址.
然後查了下winserver 2016的參數限制:
單個機器支援24T記憶體,應該是小於2的45次方的定址空間.
intel最新的8180M CPU 單價13k刀 能夠使用1.5T的記憶體,8 socket下使用12T的記憶體
看樣子是win2016 是完全可以跑8路的intel的伺服器 並且把記憶體完全管理起來的.
不過看到這個參數,感覺還是非常嚇人了
畢竟8180滿配的話是 448個超執行緒後的core數..
理解的很簡單, 不知道對不對..
微軟官方的解釋:
https://technet.microsoft.com/zh-cn/library/hh439648
虛擬位址空間
當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為物理地址。通過虛擬位址訪問記憶體有以下優勢:
程式可以使用一系列相鄰的虛擬位址來訪問實體記憶體中不相鄰的大記憶體緩衝區。
程式可以使用一系列虛擬位址來訪問大於可用實體記憶體的記憶體緩衝區。當實體記憶體的供應量變小時,記憶體管理器會將實體記憶體頁(通常大小為 4 KB)儲存到磁碟檔案。資料或字碼頁會根據需要在實體記憶體與磁碟之間移動。
不同進程使用的虛擬位址彼此隔離。一個進程中的代碼無法更改正在由另一進程或作業系統使用的實體記憶體。
進程可用的虛擬位址範圍稱為該進程的“虛擬位址空間”。每個使用者模式進程都有其各自的專用虛擬位址空間。 對於 32 位進程,虛擬位址空間通常為 2 GB,範圍從 0x00000000 至 0x7FFFFFFF。對於 64 位元進程,虛擬位址空間為 8 TB,範圍從 0x000‘00000000 至 0x7FF‘FFFFFFFF。一系列虛擬位址有時稱為一系列“虛擬記憶體”。
此圖說明了虛擬位址空間的一些重要功能。
該圖顯示了兩個 64 位元進程的虛擬位址空間:Notepad.exe 和 MyApp.exe。每個進程都有其各自的虛擬位址空間,範圍從 0x000‘0000000 至 0x7FF‘FFFFFFFF。每個陰影框都表示虛擬記憶體或實體記憶體的一個頁面(大小為 4 KB)。注意,Notepad 進程使用從 0x7F7‘93950000 開始的虛擬位址的三個相鄰頁面。但虛擬位址的這三個相鄰頁面會映射到實體記憶體中的非相鄰頁面。而且還注意,兩個進程都使用從 0x7F7‘93950000 開始的虛擬記憶體頁面,但這些虛擬頁面都映射到實體記憶體的不同頁面。
使用者空間和系統空間
諸如 Notepad.exe 和 MyApp.exe 的進程在使用者模式下運行。核心作業系統組件和多個驅動程式在更有特權的核心模式下運行。有關處理器模式的詳細資料,請參閱使用者模式和核心模式。每個使用者模式進程都有其各自的專用虛擬位址空間,但在核心模式下啟動並執行所有代碼都共用稱為“系統空間”的單個虛擬位址空間。目前使用者模式進程的虛擬位址空間稱為“使用者空間”。
在 32 位 Windows 中,可用的虛擬位址空間共計為 2^32 位元組(4 GB)。通常較下的 2 GB 用於使用者空間,較上的 2 GB 用於系統空間。
在 32 位 Windows 中,你可以指定(在啟動時)超過 2 GB 用於使用者空間。結果是系統空間可用的虛擬位址更少。可以將使用者空間的大小增至 3 GB,在這種情形下系統空間僅有 1 GB。若要增大使用者空間的大小,請使用 BCDEdit /set increaseuserva。
在 64 位元 Windows 中,虛擬位址空間的理論大小為 2^64 位元組(16 Exabyte),但實際上僅使用 16 Exabyte範圍的一小部分。範圍從 0x000‘00000000 至 0x7FF‘FFFFFFFF 的 8 TB 用於使用者空間,範圍從 0xFFFF0800‘00000000 至 0xFFFFFFFF‘FFFFFFFF 的 248 TB 的部分用於系統空間。
使用者模式下啟動並執行代碼可以訪問使用者空間,但不能訪問系統空間。此限制可防止使用者模式代碼讀或更改受保護的作業系統資料結構。核心模式下啟動並執行代碼既可以訪問使用者空間,也可以訪問系統空間。即,在核心模式下啟動並執行代碼可以訪問系統空間和目前使用者模式進程的虛擬位址空間。
在核心模式下啟動並執行驅動程式必須在直接從使用者空間地址中讀取或寫入這些地址時非常小心。此方案說明了原因。
使用者模式程式發起從裝置讀取某些資料的請求。程式提供緩衝區的起始地址以接收資料。
在核心模式下啟動並執行裝置驅動程式常式啟動讀取操作並將控制權返回到其調用程式。
- 然後,裝置中斷了當前啟動並執行任何線程以顯示讀取操作完成。 中斷由在此任意線程上啟動並執行核心模式驅動程式常式進行處理,該常式屬於任意進程。
- 此時,驅動程式不得將資料寫入使用者模式程式在步驟 1 中提供的開始地址。此地址位於發起請求的進程的虛擬位址空間,該進程可能很大程度上不同於當前進程。
頁面緩衝池和非頁面緩衝池
在使用者空間中,所有實體記憶體頁面都可以根據需要進行分頁至磁碟檔案。在系統空間中,某些物理頁面可以分頁,而其他頁面不能。系統空間具有用於動態分配記憶體的兩個地區:頁面緩衝池和非頁面緩衝池。在 64 位元 Windows 中,頁面緩衝池為 128 GB 的虛擬位址,範圍從 0xFFFFA800‘00000000 至 0xFFFFA81F‘FFFFFFFF。非頁面緩衝池為 128 GB 的虛擬位址,範圍從 0xFFFFAC00‘00000000 至 0xFFFFAC1F‘FFFFFFFF。
在頁面緩衝池中分配的記憶體可以根據需要分頁至磁碟檔案。在非頁面緩衝池中分配的記憶體永遠無法分頁至磁碟檔案。
私人工作集 是工作集的一個子集,它是描述每個進程所使用的記憶體數量的技術術語。私人工作集專門描述了某個進程正在使用的且無法與其他進程共用的記憶體數量
記憶體 - 工作集 是私人工作集中的記憶體數量與進程正在使用且可以由其他進程共用的記憶體數量的總和。
記憶體 - 峰值工作集 是進程所使用的工作集記憶體的最大數量。
記憶體 - 工作集增量 是進程所使用的工作集記憶體中的更改量。
記憶體 - 提交大小 是為某進程使用而保留的虛擬記憶體的數量。
記憶體 - 頁面緩衝池 是可以寫入其他儲存媒體(例如硬碟)的某個進程的認可虛擬記憶體數量。
記憶體 - 非頁面緩衝池 是無法寫入其他儲存媒體的某個進程的認可虛擬記憶體數量。
關於windows記憶體的一些簡單看法