天天看點

虛拟位址空間

當處理器讀或寫入記憶體位置時,它會使用虛拟位址。作為讀或寫操作的一部分,處理器将虛拟位址轉換為實體位址。通過虛拟位址通路記憶體有以下優勢:

程式可以使用一系列相鄰的虛拟位址來通路實體記憶體中不相鄰的大記憶體緩沖區。

程式可以使用一系列虛拟位址來通路大于可用實體記憶體的記憶體緩沖區。當實體記憶體的供應量變小時,記憶體管理器會将實體記憶體頁(通常大小為 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 百億億位元組),但實際上僅使用 16 百億億位元組範圍的一小部分。範圍從 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。

在頁面緩存池中配置設定的記憶體可以根據需要分頁至磁盤檔案。在非頁面緩沖池中配置設定的記憶體永遠無法分頁至磁盤檔案。

------------------越是喧嚣的世界,越需要甯靜的思考------------------ 合抱之木,生于毫末;九層之台,起于壘土;千裡之行,始于足下。 積土成山,風雨興焉;積水成淵,蛟龍生焉;積善成德,而神明自得,聖心備焉。故不積跬步,無以至千裡;不積小流,無以成江海。骐骥一躍,不能十步;驽馬十駕,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇鳝之穴無可寄托者,用心躁也。