物理內存、頁面文件、交換區和虛擬內存


物理內存,顧名思義,就是實實在在存在的那個東西,插在你電腦主板上的內存條所提供的空間。

    頁面文件,這個是硬盤上的一塊空間,在Windows下表現為一個文件。這個頁面文件存在的意義就是在物理內存被占用滿以后,將物理內存中的東西移動到硬盤上的這個空間,騰出物理內存給需要的應用程序來使用。

    交換區,這個是物理內存和頁面文件空間的總和,“交換”的含義,則是指在硬盤文件、CPU和其它IO之間進行數據的傳遞和暫存(這句話對於了解計算機運行基本流程的人來說應該可以理解)。

    虛擬內存,這個概念恐怕是目前為止最為含混不清的一個東西了,會有很多種不同的含義。在這里,我先說一下在一個程序猿眼中的虛擬內存是個啥。

    很顯然,這個世界上的電腦配置是五花八門,可用的物理內存數量也是分為很多等級的。作為一個苦逼的程序猿,我們不可能在考慮程序邏輯的時候還要去 考慮客戶的機器有多少內存可以用,也不可能去詳細調查實際的物理內存地址是多少到多少,好在OS會為我們完成這些工作。每一個運行的進程,都會獲得一個 4G的內存地址空間,這就是所謂的虛擬內存,這里面的所有地址都是虛擬的,和物理內存啥的並不直接掛鈎。而在操作系統那頭,這些虛擬地址所映射到的實際地 址,可以是物理內存地址,也可以是頁面文件的地址。如果是物理內存小於這個虛擬地址的范圍的話,映射的物理內存還可能是重復的物理內存地址片段,使用的時 候可以通過清空內存數據,將內存數據寫入頁面文件這樣的方式進行物理內存的重新利用,以提高物理內存的利用效率。

    而不少人,尤其是對Windows剛有所了解的人,所理解的虛擬內存,往往是指頁面文件。這也是微軟的意見,他們在自己的操作系統中就是這么寫的,見下圖:



    而在Aida64,或者說是曾經的Everest中,虛擬內存是交換區 + 物理內存 = 物理內存 * 2 + 頁面文件。老實說,我並沒有理解這個的概念是什么。

 

 

 其實上述虛擬內存的說法都沒有什么問題,都是約定俗成的說法,關鍵是要搞清楚什么時候的“虛擬內存”是指什么,概念不混淆就可以。

    順便吐個槽,我發現Win7的內存調度很詭異,物理內存不是邊占用邊釋放的,總是等到占用率很高(接近滿)的時候,來個集中釋放,也就是寫入頁面 文件。我的筆記本硬盤硬盤性能不咋樣,給這么一搞整個就會卡死半天,而下載軟件開時間長一點的話很容易就把物理內存占滿。據說是這 Superfetch(拼錯沒?)的效果,關了以后內存占用率確實上升的慢了一點,不過占用率感覺還是偏高,看着真不爽。

 

 

 

 

幾個概念

 

 

1、交換空間swap
交換空間是專門用於臨時存儲內存的一塊磁盤空間,通常在頁面調度和交換進程數據時使用,通常推薦交換空間的大小應該是物理內存的二到四倍。
2、頁面調度
頁面調度是指從磁盤向內存傳輸數據,以及相反的過程,這個過程之所以被稱為頁面調度,是因為Unix內存被平均划分成大小相等的頁面;

通常頁面大小為4KB和8KB(在Solaris中可以用pagesize命令查看)。

當可執行程序開始運行時,它的映象會一頁一頁地從磁盤中換入,與此類似,當某些內存在一段時間內空閑,就可以把它們換出到交換空間中,這樣就可以把空閑的RAM交給其他需要它的程序使用。
3、交換
頁面調度通常容易和交換的概念混淆,頁面調度是指把一個進程所占內存的空閑部分傳輸到磁盤上,而交換是指當系統中實際的內存已不夠滿足新的分配需求時,把整個進程傳輸到磁盤上,交換活動通常意味着內存不足。

UNIX內存管理:UNIX系統通過2種方法進行內存管理,“調頁算法”,“交換技術”。
調頁算法是將內存中最近不常使用的頁面換到磁盤上,把常使用的頁面(活動頁面)保留在內存中供進程使用。
交換技術是系統將整個進程,而不是部分頁面,全部換到磁盤上。正常情況下,系統會發生一些交換過程。

當內存嚴重不足時,系統會頻繁使用調頁和交換,這增加了磁盤I/O的負載。進一步降低了系統對作業的執行速度,即系統I/O資源問題又會影響到內存資源的分配。


免責聲明!

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



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