虛擬記憶體和頁面檔案

2021-06-16 10:46:36 字數 1612 閱讀 6082

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

那麼到底什麼叫做虛擬記憶體呢?簡而言之,所謂虛擬記憶體就是多路程式程序共享計算機物理記憶體的方法。

我們知道 windows 是乙個所謂「搶先多工系統」,就是說,windows 下同時可以有多個程式在執行,但每次真正執行的所謂「活動程序」卻只有乙個,那些被別人「搶先」的程序則處於一種「掛起」狀態,就是說整個程序及其記憶體空 間的內容都要被保留下來,以便隨時「搶到先手」時再執行。

這樣,系統有限的記憶體空間就必須有乙個分配機制,如果簡單平均分配,則勢必造成本來來就捉襟見肘的記憶體空間的巨大浪費。為解決這個問題,乙個簡單的辦法就 是把記憶體盡量優先分配給「活動程序」。至於那些處於「掛起」狀態的程序的所占用記憶體,如果物理記憶體足夠的話,就維持原狀;一旦出現物理記憶體不足的現象,就 把這些程序的記憶體空間的內容原封不動地存到乙個檔案裡。這就是磁碟交換檔案的來歷。

這樣一來,如果把這些記憶體搬進般出的工作,交給應用程式來做,勢必造成程式之間的對話、協調、以及安全保護等一系列難以解決的問題。所以 windows 開發者設計了一套所謂的「虛擬記憶體系統」,讓所有的應用程式都執行在自己獨佔的私有所謂「虛擬位址空間」裡,這個「虛擬位址空間」對於應用程式的開發者來 說,使用起來就象單一任務作業系統下 dos 下獨自訪問實際實體地址一樣,完全不需要考慮記憶體的排程、共享、安全等等。而這些排程、共享、安全等等的工作,則完全交由 windows 虛擬記憶體系統來完成。

磁碟交換檔案為什麼被稱做「頁面檔案」(pagefile)呢?,這是因為檔案內部的組織方式不同。一般的磁碟檔案在開啟的時候都是由系統一次順序讀入內 存,所以是順序地存放在乙個盡可能連續的磁碟區域。但內寸的使用不同,系統需要隨機地快速訪問每乙個位址,所以window 的(虛擬)記憶體管理系統對記憶體位址採取了「分頁管理」的方法,把記憶體分割成為許多小塊,加上許多用與「定址」的資訊,方便系統迅速地找到每乙個記憶體位址。 windows 磁碟交換檔案內部採用了和記憶體空間完全相同的格式,所以叫做頁面檔案。這當然是為了管理和「搬運」的方便。

磁碟交換檔案採用頁面方式管理,還有乙個好處,就是可以直接當作擴充套件記憶體來使用。可能很多朋友已經知道,windows nt 作業系統分配給每個程序 4 個 g 的虛擬記憶體空間,而多數 pc 機所能提供的全部物理記憶體都是遠遠不夠的。事實上很多大型的應用程式實際上也需要占用越來越多的記憶體空間。遇到這種情況,系統虛擬記憶體管理系統,就會使用 頁面檔案(pagefile)的一部分來充當活動的擴充套件記憶體記憶體空間。

說到磁碟交換檔案的使用方式,再簡單地提一下乙個相關的話題,就是前不久討論過的磁碟「碎片」問題。由於一般的磁碟檔案都是順序使用的,所以訪問效率對於 碎片問題比較敏感;而頁面檔案由於是採用了隨機訪問的方式,所以相對就沒有那麼敏感。但是由於頁面檔案一般都比較大,而且由於受系統保護,一般 defrag 程式又無權對它進行整理。所以頁面檔案一旦產生碎片,就有可能會造成其它檔案產生更多的更難於整理的碎片。

再者,系統為了提高頁面檔案的擴充套件性和和適應某些「大食量」程式的需要,同時也為了照顧早期較小的硬碟的使用者,預設都採用了動態分配頁面檔案的方式,就 是說,一開始分配乙個較小的頁面檔案,需要時系統再自動加大這個檔案的尺寸,因而比較容易造成碎片。所以,如果你的磁碟空間足夠,請把頁面檔案尺寸定義為 乙個固定值。

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

物理記憶體,顧名思義,就是實實在在存在的那個東西,插在你電腦主機板上的記憶體條所提供的空間。頁面檔案,這個是硬碟上的一塊空間,在windows下表現為乙個檔案。這個頁面檔案存在的意義就是在物理記憶體被占用滿以後,將物理記憶體中的東西移動到硬碟上的這個空間,騰出物理記憶體給需要的應用程式來使用。交換區...

虛擬記憶體與頁面快取

作業系統並不直接把記憶體傳給程序,而是現在核心中將記憶體抽象化。這就是虛擬記憶體的機制。這樣可以使程序無需考慮自己使用的記憶體位於什麼位置,可以認為必然從ox000位址開始,這樣處理就能更方便。作業系統會一次性讀出磁碟上的內容,類似的虛擬記憶體機制給程序分配記憶體的時候也不是乙個位元組乙個位元組地訪...

記憶體對映檔案 虛擬記憶體

windows提供了3種進行記憶體管理的方法 虛擬記憶體,最適合用來管理大型物件或結構陣列。記憶體對映檔案,最適合用來管理大型資料流 通常來自檔案 以及在單個計算機上執行的多個程序之間共享資料。記憶體堆疊,最適合用來管理大量的小物件。再通俗點,就是比如 要讀取乙個檔案裡的東西 這時候你就得去硬碟讀,...