作業系統 物理記憶體與虛擬記憶體

2021-08-21 11:26:04 字數 1982 閱讀 9258

概念解析

物理記憶體,在應用中,自然是顧名思義,物理上,真實的插在板子上的記憶體是多大就是多大了。而在cpu中的概念,物理記憶體就是cpu的位址線可以直接進行定址的記憶體空間大小。比如8086只有20根位址線,那麼它的定址空間就是1mb,我們就說8086能支援1mb的物理記憶體,及時我們安裝了128m的記憶體條在板子上,我們也只能說8086擁有1mb的物理記憶體空間。同理我們現在大部分使用的是32位的機子,32位的386以上cpu就可以支援最大4gb的物理記憶體空間了。

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

早期沒有虛擬記憶體的時候出現的問題:
1.現在有多個程式需要執行,但是記憶體空間不足了,就需要將其他程式暫時拷貝到硬碟當中,然後將新的程式裝入記憶體執行.由於大量的資料裝入裝出,記憶體的使用效率會十分low。

2.由於程式都是直接訪問物理記憶體的,所以乙個程序可以修改其他程序的記憶體資料,甚至修改核心位址空間中的資料。

3.因為記憶體位址是隨機分配的,所以程式執行的位址也是不正確的。

linux下虛擬記憶體的結構圖:

以32位機為例,我們上圖看到的程序虛擬儲存器占用3g虛擬記憶體空間,核心虛擬儲存器占用1g的虛擬記憶體空間

什麼是虛擬記憶體位址和物理記憶體位址呢?

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

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

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

作業系統 物理記憶體和虛擬記憶體

正在執行的乙個程序,他所需的記憶體是有可能大於記憶體條容量之和的,比如你的記憶體條是256m,你的程式卻要建立乙個2g的資料區,那麼不是所有資料都能一起載入到記憶體 物理記憶體 中,勢必有一部分資料要放到其他介質中 比如硬碟 待程序需要訪問那部分資料時,在通過排程進入物理記憶體。所以,虛擬記憶體是程...

計算機作業系統 虛擬記憶體與物理記憶體

當多個程式同時執行時,如何讓多個應用程式共同使用物理記憶體資源?有兩種簡單的方法 使某乙個應用程式獨佔所有的記憶體資源。乙個程式要執行就將另乙個程式的記憶體資料轉存到硬碟中,使要執行的程式獨佔所有記憶體資源。讓每乙個應用程式獨佔一部分記憶體資源。多個應用程式的資料,可以一直儲存在記憶體中,避免了硬碟...

虛擬記憶體與物理記憶體

作業系統有虛擬記憶體與物理記憶體的概念。問題 32位的作業系統中,每個程序有4gb 不是一定 的記憶體是真實存在的嗎?答 不是,是虛擬記憶體 問題 32位的作業系統中,每個程序有4gb 不是一定 的記憶體是物理記憶體嗎?答 不是,如果每個程序都存在4gb的話,作業系統根本處理不過來 問題 虛擬記憶體...