虛擬記憶體為何會有快取作用?

時間 2021-05-30 10:59:51

1樓:Move.L

它(虛擬儲存器)將主存看成是乙個儲存在磁碟上的位址空間的快取記憶體,在主存中只儲存活動區域,並根據需要在磁碟和主存之間來回傳送資料,通過這種方式,它高效地使用了主存。

1.首先回答題主的問題:「虛擬儲存器是否有快取作用?

」,其實書中第一句話就對這個做了明確的表達,虛擬儲存器的存在其實是使得記憶體可以被看作為快取記憶體2.為什麼這麼做,第二句也給了說明:「他在主存中只儲存活動區域」,所以程式的非活動區域就可以儲存在磁碟中,有需要的時候再去取,雖然確實如題主說這個操作很慢,但是由於區域性性的存在:

程式往往在乙個較小的活動頁面(active page)集合上工作。

所以該類操作可以理解為很少進行,記憶體總體的使用率是得到提公升的。

最後一句話總結就是:由於區域性性原理,虛擬儲存器的存在可以使得記憶體僅需儲存程式的較少部分,從而提高記憶體的使用率。

2樓:Sinaean Dean

虛擬記憶體本身沒有這個作用,但利用它可以實現快取的功能。

原理在於缺頁異常處理函式中可以做很多事,比如說把某個物理記憶體頁儲存的硬碟裡,同時把硬碟裡另乙個頁的內容存到這個物理頁裡面來。

3樓:

先不談虛擬記憶體,說個類似的。

從 Windows XP 開始,微軟引入了一項叫做 Prefetch 的技術,目的是用來加速程式和系統的啟動速度。Windows 會把一些檔案寫到 C:\Windows\Prefetch 下,來加速下次的應用啟動。

這裡和問題很相似的一點是,同樣是讀取磁碟,Prefetch 是如何加速應用啟動的?

分析一下乙個程式開始執行的過程,能夠發現,除了這個程式的主程式之外,還需要載入相關的鏈結庫和資源等,Windows 下乙個 exe 往往依賴於至少十幾個 dll(當然這些其中的一部分通用的已經載入在記憶體了),在載入這些檔案的時候,不同的檔案存在於磁碟的各個地方,需要尋道,乙個檔案可能是分散在磁碟的各個地方的,也需要尋道,現代高階機械硬碟一次尋道時間平均 4ms,20個檔案最好的情況下只尋道就需要 80ms,尋道的時間已經大大超過讀取檔案的時間了。

那麼根據分析,化零為整,把需要的資料盡量儲存在一起,可以極大的減少尋道時間,加快應用和系統的啟動速度。

順帶,如果 Windows 發現你用不是特別慢的固態硬碟的話,會禁用 Prefetch。

Windows 上的虛擬記憶體檔案會盡量分配成硬碟上連續的一大段檔案,我估計你說的虛擬記憶體的快取,應該和這個類似。

問題修改了

看了書中的表述,意思是和某匿名使用者(匿名都沒法 At)說的一樣,虛擬記憶體系統應該是存放在磁碟上,同時把物理記憶體作為快取來高效的運作。

和這一大章開頭時候說的虛擬記憶體的三個 capabilities 的第乙個是對應的。

4樓:

你理解的虛擬記憶體的概念非常粗糙,既包括磁碟取代記憶體的概念,又包括虛實位址對映的概念。而你最後問的問題,估計又引入了磁碟緩衝的概念。

也就是說,你最後說的,是把磁碟資料臨時放在記憶體中,以便應用可以讀到它。

malloc 的實現涉及物理記憶體,虛擬記憶體?

jiajiangfei 最近也看了一些記憶體管理的文章。malloc的實現我覺的題主不妨可以這樣理解。對於32位作業系統,每乙個程序都有32bit的虛擬位址空間。當malloc的時候,隨便從自己的4G的虛擬位址空間裡面拿出來一塊這時候並沒有真的實體地址給分配出來,從上面Target的驗證結果來看也是...

虛擬記憶體要放到固態硬碟還是機械硬碟?

Orange peel 這個可以放到固態裡,也可以放到機械裡,虛擬記憶體在電腦極限狀態下才會有效發揮作用,可以多設定幾個,如果只設定乙個建議放固態裡,如果設定多個可以放機械裡面,但是有乙個結果得接受,虛擬記憶體會損耗機械盤,減少機械盤的壽命。 愛宕洋榎 當然放固態裡.不過你的記憶體盡量大點,而且少放...

Win10為什麼會占用大量虛擬記憶體?

大哈巴犬 虛擬記憶體的存在意義並不只是記憶體不足後,作為備用記憶體的。首先記憶體雖然速度非常快但有個硬傷,就是斷電後無法儲存任何資料。但虛擬記憶體是會儲存內容裡的一些重要資料,如果你曾經把win的虛擬記憶體設為0的話,就會看到系統警告,說無法儲存的日誌一類的資訊。所以win只有遠行,為了穩定,肯定是...