虛擬位址空間

來源:互聯網
上載者:User

http://technet.microsoft.com/zh-cn/library/hh439648(v=vs.85).aspx

當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為物理地址。通過虛擬位址訪問記憶體有以下優勢:

  • 程式可以使用一系列相鄰的虛擬位址來訪問實體記憶體中不相鄰的大記憶體緩衝區。

  • 程式可以使用一系列虛擬位址來訪問大於可用實體記憶體的記憶體緩衝區。當實體記憶體的供應量變小時,記憶體管理器會將實體記憶體頁(通常大小為 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. 使用者模式程式發起從裝置讀取某些資料的請求。程式提供緩衝區的起始地址以接收資料。

  2. 在核心模式下啟動並執行裝置驅動程式常式啟動讀取操作並將控制權返回到其調用程式。

  3. 然後,裝置中斷了當前啟動並執行任何線程以顯示讀取操作完成。 中斷由在此任意線程上啟動並執行核心模式驅動程式常式進行處理,該常式屬於任意進程。
  4. 此時,驅動程式不得將資料寫入使用者模式程式在步驟 1 中提供的開始地址。此地址位於發起請求的進程的虛擬位址空間,該進程可能很大程度上不同於當前進程。
頁面緩衝池和非頁面緩衝池

在使用者空間中,所有實體記憶體頁面都可以根據需要進行分頁至磁碟檔案。在系統空間中,某些物理頁面可以分頁,而其他頁面不能。系統空間具有用於動態分配記憶體的兩個地區:頁面緩衝池和非頁面緩衝池。在 64 位元 Windows 中,頁面緩衝池為 128 GB 的虛擬位址,範圍從 0xFFFFA800'00000000 至 0xFFFFA81F'FFFFFFFF。非頁面緩衝池為 128 GB 的虛擬位址,範圍從 0xFFFFAC00'00000000 至 0xFFFFAC1F'FFFFFFFF。

在頁面緩衝池中分配的記憶體可以根據需要分頁至磁碟檔案。在非頁面緩衝池中分配的記憶體永遠無法分頁至磁碟檔案。

相關主題
使用者模式和核心模式

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.