虛擬內存和物理內存如何映射?


以X86處理器為例,進程被創建時有4G的尋址空間,至於為什么是4G,這個又和CPU地址總線有關。當我們開啟計算機時,明明只有4G物理內存的,為什么開啟的進程數量有幾百個。進程4G的進程關系一定時和物理內存保持了某種映射關系。而不是獨占。

1、用戶編制程序時使用的地址稱為虛地址或邏輯地址,其對應的存儲空間稱為虛存空間或邏輯地址空間;而計算機物理內存的訪問地址則稱為實地址或物理地址,其對應的存儲空間稱為物理存儲空間或主存空間。

 

4、虛擬內存:使程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。
若計算機運行程序或操作所需的隨機存儲器(RAM)不足時,則 Windows 會用虛擬存儲器進行補償,即拿出一部分硬盤空間來充當內存使用,這部分空間即稱為虛擬內存,虛擬內存在硬盤上的存在形式就是 PAGEFILE.SYS這個頁面文件。它將計算機的RAM和硬盤上的臨時空間組合。將數據移入分頁文件可釋放RAM,以便完成工作。
若計算機的速率由於RAM可用空間匱乏而減緩,則可嘗試通過增加虛擬內存來進行補償。但是,計算機從RAM讀取數據的速率要比從硬盤讀取數據的速率快,因而擴增RAM容量(可加內存條)是最佳選擇。

分頁文件:硬盤上一個或者多個隱藏文件pagefile.sys,Windows用於存儲未存入內存的部分程序和數據文件。頁面文件和物理內存或隨機存取內存(RAM)構成了虛擬內存。Windows會根據需要將數據從頁面文件移至內存,或將數據從內存移至頁面文件以便為新數據釋放內存。也叫“交換文件”。

 

使用了分頁機制之后,4G的地址空間被分成了固定大小的頁,每一頁或者被映射到物理內存,或者被映射到硬盤上的交換文件中,或者沒有映射任何東西。對於一般程序來說,4G的地址空間,只有一小部分映射了物理內存,大片大片的部分是沒有映射任何東西。物理內存也被分頁,來映射地址空間。對於32bit的Win2k,頁的大小是4K字節。CPU用來把虛擬地址轉換成物理地址的信息存放在叫做頁目錄和頁表的結構里。

 

虛擬內存: 
1.每個進程都有各自獨立的4G 字節的虛擬地址空間。4G的進程空間分為兩部分,0~3G-1 為用戶空間,3G~ 4G-1 為內核空間。
2.用戶程序中使用的都是虛擬地址空間中的地址,永遠無法直接訪問實際物理地址。
3.虛擬內存到物理內存的映射由操作系統動態維護。
4.虛擬內存一方面保護了操作系統的安全,另一方面允許應用程序使用比實際物理內存更大的地址空間。
5.用戶空間中的代碼不能直接訪問內核空間中的代碼和數據,但是可以通過系統調用進入內核態,間接地與內核交互。 
6.對內存的越權訪問,或訪問未建立映射的虛擬內存(野指針、不在映射表中),將會導致段錯誤。

7. 用戶空間對應進程,進程一切換,用戶空間隨即變換。
內核空間由操作系統內核使用,不會隨進程切換而變化。
內核空間由內核根據獨立且唯一的頁表init_mm.pgd 進行映射,而用戶空間的頁表則每個進程一份。
8. 每個進程的內存空間完全獨立,因此在不同進程之間交換虛擬地址毫無意義。
9.虛擬內存到物理內存的映射,以頁(4096字節)為單位。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM