理解虛擬記憶體

2021-09-01 14:06:06 字數 1284 閱讀 7983

參考:

理解虛擬記憶體

linux之旅——關於虛擬記憶體

linux中關於swap、虛擬記憶體和page的區別

在解釋第乙個問題之前,先說明一下計算機記憶體管理的中的四個名詞:虛擬記憶體,虛擬記憶體位址,物理記憶體,物理記憶體位址。

先說說為什麼會有虛 擬記憶體和物理記憶體的區別。正在執行的乙個程序,他所需的記憶體是有可能大於記憶體條容量之和的,比如你的記憶體條是256m,你的程式卻要建立乙個2g的資料 區,那麼不是所有資料都能一起載入到記憶體(物理記憶體)中,勢必有一部分資料要放到其他介質中(比如硬碟),待程序需要訪問那部分資料時,在通過排程進入物 理記憶體。所以,虛擬記憶體是程序執行時所有記憶體空間的總和,並且可能有一部分不在物理記憶體中,而物理記憶體就是我們平時所了解的記憶體條。有的地方呢,也叫這個 虛擬記憶體為記憶體交換區。

那麼,什麼是虛擬記憶體位址和物理記憶體位址呢。假設你的計算機是32位,那麼它的位址匯流排是32位的,也就是它可以 定址0~0xffffffff(4g)的位址空間,但如果你的計算機只有256m的物理記憶體0x~0x0fffffff(256m),同時你的程序產生了 乙個不在這256m位址空間中的位址,那麼計算機該如何處理呢?回答這個問題前,先說明計算機的記憶體分頁機制。

計算機會對虛擬記憶體位址空 間(32位為4g)分頁產生頁(page),對物理記憶體位址空間(假設256m)分頁產生頁幀(page frame),這個頁和頁幀的大小是一樣大的,所以呢,在這裡,虛擬記憶體頁的個數勢必要大於物理記憶體頁幀的個數。在計算機上有乙個頁表(page table),就是對映虛擬記憶體頁到物理記憶體頁的,更確切的說是頁號到頁幀號的對映,而且是一對一的對映。但是問題來了,虛擬記憶體頁的個數 > 物理記憶體頁幀的個數,豈不是有些虛擬記憶體頁的位址永遠沒有對應的物理記憶體位址空間?不是的,作業系統是這樣處理的。作業系統有個頁面失效(page fault)功能。作業系統找到乙個最少使用的頁幀,讓他失效,並把它寫入磁碟,隨後把需要訪問的頁放到頁幀中,並修改頁表中的對映,這樣就保證所有的頁 都有被排程的可能了。這就是處理虛擬記憶體位址到物理記憶體的步驟。

現在來回答什麼是虛擬記憶體位址和物理記憶體位址。虛擬記憶體位址由頁號(與頁 表中的頁號關聯)和偏移量組成。頁號就不必解釋了,上面已經說了,頁號對應的對映到乙個頁幀。那麼,說說偏移量。偏移量就是我上面說的頁(或者頁幀)的大 小,即這個頁(或者頁幀)到底能存多少資料。舉個例子,有乙個虛擬位址它的頁號是4,偏移量是20,那麼他的定址過程是這樣的:首先到頁表中找到頁號4對 應的頁幀號(比如為8),如果頁不在記憶體中,則用失效機制調入頁,否則把頁幀號和偏移量傳給mmc(cpu的記憶體管理單元)組成乙個物理上真正存在的地 址,接著就是訪問物理記憶體中的資料了。總結起來說,虛擬記憶體位址的大小是與位址匯流排位數相關,物理記憶體位址的大小跟物理記憶體條的容量相關。

物理記憶體和虛擬記憶體的理解

說到記憶體不得不提一下cpu,cpu分為32位和64位,32位的最大定址空間是4g。程序如果直接使用物理記憶體,會出現三個問題 1.安全性,惡意程式會破壞其他程序。2.效率,如果有新的程序產生,而物理記憶體不夠,則必須將記憶體中一些舊的程式中的資料拷貝到硬碟,將新的程序所需要的資料從硬碟拷貝到記憶體...

深入理解虛擬記憶體管理

訪問虛擬記憶體時的處理流程 一張流程圖,看明白了,一切ok。虛擬位址到實體地址的轉換 win32 中的 指標 意味著虛擬位址。將 32位氛圍 10位 10位 12位,第乙個 10位用來定位頁目錄中的頁目錄項,左移兩位,此頁目錄項指向乙個頁表 第二個 10位定位也表中的頁表項,指向真正的物理記憶體 最...

深入理解虛擬記憶體管理

訪問虛擬記憶體時的處理流程 一張流程圖,看明白了,一切ok。虛擬位址到實體地址的轉換 win32 中的 指標 意味著虛擬位址。將 32位氛圍 10位 10位 12位,第乙個 10位用來定位頁目錄中的頁目錄項,左移兩位,此頁目錄項指向乙個頁表 第二個 10位定位也表中的頁表項,指向真正的物理記憶體 最...