虛擬內(nèi)存的意義
使用虛擬內(nèi)存主要是基于下面三個考慮:
- 可以更有效率的使用內(nèi)存:使用 DRAM 當做部分的虛擬地址空間的緩存
- 簡化內(nèi)存管理:每個進程都有統(tǒng)一的線性地址空間
- 隔離地址控件:進程之間不會相互影響坛掠;用戶程序不能訪問內(nèi)核信息和代碼
物理和虛擬尋址
- 物理尋址:內(nèi)存可以看做是一個字節(jié)數(shù)組讹躯,每個字節(jié)都有一個唯一的物理地址役电。從0開始遞增。CPU使用物理地址訪問內(nèi)存庶柿,這種方式就是物理尋址村怪。
- 虛擬尋址:CPU通過生成一個虛擬地址來訪問主存秽浇,虛擬地址在被送到主存之前先轉換成適當?shù)奈锢淼刂犯÷@個轉換任務叫做地址翻譯。
地址空間
- 地址空間是非負整數(shù)地址的有序集合柬焕。
- CPU從一個有N=2^n個地址的地址空間中生成虛擬地址审残。這個地址空間稱為虛擬地址空間。
- 物理地址對應物理內(nèi)存的M個字節(jié)斑举。M不要求是2的冪搅轿。
- 內(nèi)存中的每個字節(jié)都對應一個物理地址和一個虛擬地址。
垃圾收集器
- 垃圾收集器(garbage collector)是一種動態(tài)內(nèi)存分配器富玷,它自動釋放程序不再需要的已分配塊璧坟。這些塊被稱為垃圾(garbage)。
- 自動回收堆存儲的過程叫做垃圾收集(garbage)赎懦。在一個支持垃圾收集的系統(tǒng)中雀鹃,應用顯示分配堆塊,但是從不顯示地釋放它們励两。
- 垃圾收集器將內(nèi)存視為一張有向可達圖(reachability graph)黎茎,該圖的節(jié)點被分成一組根節(jié)點(root node)和一組堆節(jié)點(heap node),每個堆節(jié)點對應于堆中的一個已分配塊当悔。