虛擬儲存器(虛擬記憶體Vitual Memory)

2021-10-24 22:05:16 字數 1126 閱讀 2264

因為redis 是基於記憶體的操作,我們先從記憶體開始說起。

虛擬儲存器(虛擬記憶體vitual memory)

名詞解釋:主存:記憶體;輔存:磁碟(硬碟)

計算機主存(記憶體)可看作乙個由m 個連續的位元組大小的單元組成的陣列,每個位元組有乙個唯一的位址,這個位址叫做實體地址(pa)。早期的計算機中,如果cpu 需要記憶體,使用物理定址,直接訪問主儲存器。

這種方式有幾個弊端:

1、在多使用者多工作業系統中,所有的程序共享主存,如果每個程序都獨佔一塊實體地址空間,主存很快就會被用完。我們希望在不同的時刻,不同的程序可以共用同一塊實體地址空間。

2、如果所有程序都是直接訪問物理記憶體,那麼乙個程序就可以修改其他程序的記憶體資料,導致實體地址空間被破壞,程式執行就會出現異常。

為了解決這些問題,我們就想了乙個辦法,在cpu 和主存之間增加乙個中間層。cpu不再使用實體地址訪問,而是訪問乙個虛擬位址,由這個中間層把位址轉換成實體地址,最終獲得資料。這個中間層就叫做虛擬儲存器(virtual memory)。

具體的操作如下所示:

在每乙個程序開始建立的時候,都會分配一段虛擬位址,然後通過虛擬位址和實體地址的對映來獲取真實資料,這樣程序就不會直接接觸到實體地址,甚至不知道自己呼叫的哪塊實體地址的資料。

目前,大多數作業系統都使用了虛擬記憶體,如windows 系統的虛擬記憶體、linux 系統的交換空間等等。windows 的虛擬記憶體(pagefile.sys)是磁碟空間的一部分。

在32 位的系統上,虛擬位址空間大小是2^32bit=4g。在64 位系統上,最大虛擬位址空間大小是多少?是不是2^64bit=1024*1014tb=1024pb=16eb?實際上沒有用到64 位,因為用不到這麼大的空間,而且會造成很大的系統開銷。linux 一般用低48 位來表示虛擬位址空間,也就是2^48bit=256t。

cat /proc/cpuinfo
address sizes : 40 bits physical, 48 bits virtual

實際的物理記憶體可能遠遠小於虛擬記憶體的大小。

總結:引入虛擬記憶體,可以提供更大的位址空間,並且位址空間是連續的,使得程式編寫、鏈結更加簡單。並且可以對物理記憶體進行隔離,不同的程序操作互不影響。還可以通過把同一塊物理記憶體對映到不同的虛擬位址空間實現記憶體共享。

儲存管理 虛擬記憶體

儲存管理中虛擬記憶體是當記憶體容量不足時需要考慮的乙個問題。那麼 接下來看看,怎麼記憶體是通過外存來擴充套件的。為什麼提出這個問題,實際上問的是這個問題 程式真的可以劃分成很多塊,取部分程式塊裝入較小的記憶體中,然後還能正確執行麼?面對後者提問,可以將程式的邏輯位址正確轉化實體地址,實現程式的分塊 ...

虛擬記憶體的儲存概念

1.一次性 作業資料必須一次全部調入記憶體 2.駐留性 作業資料在整個執行期間都會常駐記憶體 在傳統的儲存管理方式連續分配 單一連續分配 固定分割槽分配 動態分割槽分配 和非連續分配 基本分頁式儲存管理 基本分段式管理和基本段頁式儲存管理 中,都是 一次性裝入 作業必須一次性全部裝入記憶體後才能開始...

虛擬記憶體 虛擬光碟機

應用場景 我們開發板記憶體可用1000m左右,我的程式使用malloc分配576m,執行沒問題 分配768m 記憶體使用會達到850m 時,會發生oom,我的程式會被系統殺死。有啥辦法讓我能夠分配大致900m的記憶體呢?方案 zram 也稱為 zram,先前稱為 compcache 是linux核心...