分頁記憶體管理 虛擬位址到實體地址的轉換

2021-08-09 23:14:48 字數 3424 閱讀 6972

引子:

這是邏輯位址(虛擬位址),包括程式中列印的變數位址顯示的都是邏輯位址,並不是記憶體空間上的實體地址。

每條指令在被執行時,讀取運算元時需要給出運算元所在的記憶體位址,這個位址不能是物理主存位址,因為該程式在哪種硬體設定的機器上執行並不能事前確定,那作業系統就不能在此給出對應於某台機器的實體地址

一、物理記憶體和虛擬記憶體

我們先來了解一下,什麼是物理記憶體,什麼又是虛擬記憶體?

1.物理記憶體:指通過物理記憶體條而獲得的記憶體空間,主要作用是在計算機執行時為作業系統和各種程式提供臨時儲存。

2.虛擬記憶體:對記憶體架構(記憶體、快取、硬碟)進行管理(記憶體管理系統)的一種手段。簡單理解就是在硬碟上劃分出一塊區域作為記憶體使用。

2.1 對於使用者:

計算機主要面向的是對作業系統等計算機知識幾乎沒有了解的普通大眾,他們大多是不了解什麼主存外存的,所以為了方便使用者的使用,就有必要使得程式不管是位於記憶體架構的哪個層次,對於使用者來說都是一樣的。虛擬記憶體就是讓記憶體管理實現媒介透明的手段

2.2 對於主存:

眾所周知,乙個程式要想執行,就必須載入到物理主存(記憶體)中,但是物理主存的容量是非常有限的,我們當然可以選擇購買更大的物理主存,可是很費錢,那麼還有沒有什麼辦法可以在不明顯增加成本的基礎上擴大記憶體容量的呢?

虛擬記憶體就可以做到,它的手段就是將物理主存擴大到便宜、容量大的磁碟上,即將磁碟空間也看作是主存空間的一部分

使用者程式可以存放在主存,也可以部分存放在主存、部分存放在磁碟,那麼程式發出的位址到底是在**是由作業系統的記憶體管理模組負責的。

虛擬記憶體讓使用者「感覺」記憶體容量大大增加了,記憶體速度也加快了,就像魔法師一樣,讓觀眾覺得小箱子能夠「裝下」乙隻巨大的雄獅。

二、記憶體管理——分頁記憶體管理

1.記憶體管理使用的方法

記憶體管理的方法有許多種,固定載入位址的、固定分割槽的、非固定分割槽的和交換記憶體管理,其中只有第一種固定載入位址的記憶體管理適用於單道程式設計,其餘三種則適合多道程式設計。與此同時,它們的共同實現機制是——基址和極限

2.交換記憶體管理中的機制——基址和極限

交換記憶體管理是這些方法中最靈活的。它使用的基址和極限機制實際上就是「將程式發出的虛擬位址加上基址得到實體地址」。

見下圖:

3.交換記憶體管理的兩大問題

3.1 空間浪費:程式不斷的執行並釋放的過程中,造成了記憶體空間中的可用空間不連續就,難以加以應用,這種現象也稱為「外部碎片化」。

見下圖:

3.2 程式大小受限

當程式需要更多的記憶體空間時,需要將其全部從物理記憶體中「倒出」到磁碟上,再在記憶體中找到更大的一片區域去存放增長了的程式,這樣使得程式的增長效率低下。同時,乙個程式的大小還不能超過物理記憶體空間的大小。

4. 解決方法——分頁記憶體管理

4.1 分頁記憶體管理

將虛擬記憶體空間和物理記憶體空間皆劃分成大小相同的頁面,例如4kb、8kb和16kb等。並將頁作為記憶體空間的最小分配單位,乙個程式的乙個頁面(虛擬頁面)可以存放在任何乙個物理頁面中。

乙個程式發出的虛擬位址由虛擬頁面號頁內偏移值兩部分組成,組成見下:

4.2 分頁記憶體管理是如何解決交換記憶體管理中的兩個問題的?

1.空間浪費:通過將記憶體空間劃分成大小一樣的頁面,並且將其作為記憶體分配的基本單位,這樣就避免了大量外部碎片的積累,讓記憶體空間得到有效利用。

2.程式受限:分頁記憶體管理下,允許乙個程序的部分虛擬頁面存放在物理壓麵(物理記憶體)中,另一部分存放在磁碟上,等到需要使用時再將其從磁碟中載入到物理記憶體中。也就是說,當程式需要額外的空間時,只需要對其分配新的頁即可,這樣做使得程式的增長效率較高。

4.3 虛擬位址->實體地址的轉化(位址翻譯)

翻譯工作則是交給mmu(記憶體管理單元),它只對虛擬位址的頁面號進行翻譯,而不處理頁內偏移值

mmu為每乙個程式都配備了乙個頁表,裡面存放的是虛擬頁面到物理頁面的對映,如果mmu接收到了程式發出的虛擬位址,在查詢相對應的物理頁面號時,沒有找到,那麼將會通過缺頁中斷來將需要的虛擬頁面從磁碟中載入到物理記憶體的頁面中。

並且隨著虛擬頁面的進出記憶體,頁表的內容也是不斷地變化的。

4.4 頁表中的具體資訊

mmu為每乙個程式配備的頁表除了有虛擬位址到實體地址的對映(虛擬頁面號到物理頁面號),還有其他的與頁面的管理活動有關的資訊,因為mmu要依賴頁表來進行與頁面相關的管理活動。

例如,頁表如何知道需要的虛擬頁面是否在物理頁面中?那麼頁表中就有一項資訊記錄的是該虛擬頁面是否在當前的物理頁面中——在記憶體否

再說,有一些虛擬頁面是受到保護的,對它的讀、寫和執行操作是有限制的,記錄該頁面的保護資訊的則是——保護標識區。

等等。

分頁記憶體管理 虛擬位址到實體地址的轉換

此篇部落格內容在於著重幫助讀者明白在分頁記憶體管理下,虛擬位址和實體地址轉換計算是怎麼進行的。有關分頁記憶體管理的其他知識請事先參閱有關資料。1.對每個程式而言,就好像自己獨佔了記憶體空間從0到極限的計算機。虛擬位址都是以0開始到某個上限結束。這是因為某個程式在何種硬體裝置的機器上執行並不能事先確定...

分頁記憶體管理 虛擬位址到實體地址的轉換

這裡看這篇文章讀懂什麼時分頁記憶體管理 摘抄一部分 4.1 分頁記憶體管理 將虛擬記憶體空間和物理記憶體空間皆劃分成大小相同的頁面,例如4kb 8kb和16kb等。並將頁作為記憶體空間的最小分配單位,乙個程式的乙個頁面 虛擬頁面 可以存放在任何乙個物理頁面中。乙個程式發出的虛擬位址由虛擬頁面號和頁內...

虛擬位址和實體地址,共享記憶體

32位作業系統,定址空間為2 32次方個byte,注意儲存單位是位元組byte 即物理記憶體為4gb 記憶體分布圖 邏輯位址 段表,段偏移量 線性位址 頁表 實體地址 1.每個程序的4g記憶體空間只是虛擬記憶體空間,每次訪問記憶體空間的某個位址,都需要把位址翻譯為實際物理記憶體位址 2.所有程序共享...