虛擬記憶體管理

2021-10-08 10:48:38 字數 880 閱讀 3902

定義

虛擬記憶體是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續的可用的記憶體(乙個連續完整的位址空間),而實際上,它通常是被分隔成多個物理記憶體碎片,還有部分暫時儲存在外部磁碟儲存器上,在需要時進行資料交換。

我的理解

程序例項在使用者態並不直接操作物理記憶體位址,實際物理記憶體是可能是零散的,使用者管理起來絕對要瘋,所以,使用者可見的實際上是一段連續的虛擬位址空間。

並且,虛擬記憶體遵循用到時才申請的原則,不會說你開闢了g級空間,就需要分配g級物理記憶體。

int

main()

可以看到實際使用的物理記憶體才1092個位元組

虛擬記憶體段式管理

下圖是程序例項中各段記憶體布局。

這張圖其實還少了一部分,就是位址隨機化

配置在 /proc/sys/kernel/randomize_va_space

0:不開啟aslr

1:執行棧和共享庫以及部分堆的隨機化

2:在1的基礎上包括所有堆的隨機化

開啟klaslr後,.text/.rodata/.init/.data/.bss這些段相對於基位址都加上了乙個offset

虛擬記憶體頁式管理

一般一頁4k,由記憶體管理部件mmu負責統一管理。

有幾點需要注意

1 程序開闢的虛擬記憶體並不全部載入進來,就像課本一樣,用到哪一頁就載入哪一頁。

2 當發現需要用到的頁不在記憶體時,會觸發缺頁中斷,執行載入

3 當發現物理記憶體不夠用時,會觸發頁面置換,通過一些演算法,淘汰乙個頁進入swap,然後載入需要的頁。

可參考:

3 2 虛擬記憶體管理

3.2.1 虛擬記憶體的基本概念 1 傳統儲存管理方式的特徵 各種記憶體管理策略都是為了同時將多個程序保證在記憶體中以便允許多道程式設計。它們都具有以下兩個共同的特徵 1 一次性 作業必須一次性全部裝入記憶體後,方能開始執行。這會導致兩種情況發生 當作業很大,不能全部被裝入記憶體時,將使該作業無法執...

儲存管理 虛擬記憶體

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

OS虛擬記憶體管理

說在前面的話 os記憶體管理 os的中斷 異常 系統呼叫 計算機記憶體越來越大,但是軟體的記憶體開銷也是隨之增加的,計算機系統總是會出現記憶體不夠的問題,於是出現了以下幾種辦法來解決記憶體空間不夠的問題 覆蓋 overlay 應用程式手動把需要的指令和資料儲存在記憶體中,這項技術的關鍵代表就是ms ...