物理記憶體 頁面檔案 交換區和虛擬記憶體

2022-08-19 08:36:08 字數 1821 閱讀 3116

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

頁面檔案,這個是硬碟上的一塊空間,在windows下表現為乙個檔案。這個頁面檔案存在的意義就是在物理記憶體被占用滿以後,將物理記憶體中的東西移動到硬碟上的這個空間,騰出物理記憶體給需要的應用程式來使用。

交換區,這個是物理記憶體和頁面檔案空間的總和,「交換」的含義,則是指在硬碟檔案、cpu和其它io之間進行資料的傳遞和暫存(這句話對於了解計算機執行基本流程的人來說應該可以理解)。

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

很顯然,這個世界上的電腦配置是五花八門,可用的物理記憶體數量也是分為很多等級的。作為乙個苦逼的程式猿,我們不可能在考慮程式邏輯的時候還要去 考慮客戶的機器有多少記憶體可以用,也不可能去詳細調查實際的物理記憶體位址是多少到多少,好在os會為我們完成這些工作。每乙個執行的程序,都會獲得乙個 4g的記憶體位址空間,這就是所謂的虛擬記憶體,這裡面的所有位址都是虛擬的,和物理記憶體啥的並不直接掛鉤。而在作業系統那頭,這些虛擬位址所對映到的實際地 址,可以是物理記憶體位址,也可以是頁面檔案的位址。如果是物理記憶體小於這個虛擬位址的範圍的話,對映的物理記憶體還可能是重複的物理記憶體位址片段,使用的時 候可以通過清空記憶體資料,將記憶體資料寫入頁面檔案這樣的方式進行物理記憶體的重新利用,以提高物理記憶體的利用效率。

而不少人,尤其是對windows剛有所了解的人,所理解的虛擬記憶體,往往是指頁面檔案。這也是微軟的意見,他們在自己的作業系統中就是這麼寫的,見下圖:

而在aida64,或者說是曾經的everest中,虛擬記憶體是交換區 + 物理記憶體 = 物理記憶體 * 2 + 頁面檔案。老實說,我並沒有理解這個的概念是什麼。

其實上述虛擬記憶體的說法都沒有什麼問題,都是約定俗成的說法,關鍵是要搞清楚什麼時候的「虛擬記憶體」是指什麼,概念不混淆就可以。

幾個概念

1、交換空間swap

交換空間是專門用於臨時儲存記憶體的一塊磁碟空間,通常在頁面排程和交換程序資料時使用,通常推薦交換空間的大小應該是物理記憶體的二到四倍。

2、頁面排程

頁面排程是指從磁碟向記憶體傳輸資料,以及相反的過程,這個過程之所以被稱為頁面排程,是因為unix記憶體被平均劃分成大小相等的頁面;

通常頁面大小為4kb和8kb(在solaris中可以用pagesize命令檢視)。

當可執行程式開始執行時,它的映象會一頁一頁地從磁碟中換入,與此類似,當某些內存在一段時間內空閒,就可以把它們換出到交換空間中,這樣就可以把空閒的ram交給其他需要它的程式使用。

3、交換

頁面排程通常容易和交換的概念混淆,頁面排程是指把乙個程序所佔記憶體的空閒部分傳輸到磁碟上,而交換是指當系統中實際的記憶體已不夠滿足新的分配需求時,把整個程序傳輸到磁碟上,交換活動通常意味著記憶體不足。

unix記憶體管理:unix系統通過2種方法進行記憶體管理,「調頁演算法」,「交換技術」。

調頁演算法是將記憶體中最近不常使用的頁面換到磁碟上,把常使用的頁面(活動頁面)保留在記憶體中供程序使用。

交換技術是系統將整個程序,而不是部分頁面,全部換到磁碟上。正常情況下,系統會發生一些交換過程。

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

虛擬記憶體和頁面檔案

什麼叫做虛擬記憶體呢?有很多朋友會從 虛擬磁碟 虛擬光碟機 等概念簡單推廣到記憶體方面,認為用做記憶體交換和擴充套件空間的 磁碟頁面檔案 就是 虛擬記憶體 因為不是記憶體晶元,卻要做記憶體的用途,所以是 虛擬 的記憶體。其實這種觀點是錯誤的!那麼到底什麼叫做虛擬記憶體呢?簡而言之,所謂虛擬記憶體就是...

物理記憶體和虛擬記憶體

1.物理記憶體和虛擬記憶體 直接從物理記憶體讀取資料比從硬碟讀寫資料要快得多,因此,我們希望所有的資料的讀寫在記憶體中完成,但是記憶體是有限的,這樣就引出了物理記憶體與虛擬記憶體的概念。物理記憶體是系統硬體提供的記憶體大小,是真正的記憶體。虛擬記憶體是為了滿足物理記憶體不足而提出的策略,利用磁碟空間...

虛擬記憶體和物理記憶體

虛擬記憶體 物理記憶體 物理記憶體,在應用中,物理上,真實的插在板子上的記憶體是多大就是多大了。而在cpu中的概念,物理記憶體就是cpu的位址線可以直接進行定址的記憶體空間大小。比如8086只有20根位址線,那麼它的定址空間就是1mb,我們就說8086能支援1mb的物理記憶體,及時我們安裝了128m...