分頁記憶體管理——虛擬地址到實體地址的轉換
引子:
這是邏輯地址(虛擬地址),包括程式中列印的變數地址顯示的都是邏輯地址,並不是記憶體空間上的實體地址。
每條指令在被執行時,讀取運算元時需要給出運算元所在的記憶體地址,這個地址不能是物理主存地址,因為該程式在哪種硬體設定的機器上執行並不能事前確定,那作業系統就不能在此給出對應於某臺機器的實體地址。
一、實體記憶體和虛擬記憶體
我們先來了解一下,什麼是實體記憶體,什麼又是虛擬記憶體?
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要依賴頁表來進行與頁面相關的管理活動。
例如,頁表如何知道需要的虛擬頁面是否在物理頁面中?那麼頁表中就有一項資訊記錄的是該虛擬頁面是否在當前的物理頁面中——在記憶體否。
再說,有一些虛擬頁面是受到保護的,對它的讀、寫和執行操作是有限制的,記錄該頁面的保護資訊的則是——保護標識區。
等等。
可以參考下圖中,頁表中儲存的具體內容:
————————————————
版權宣告:本文為CSDN博主「帥氣的羊羊楊」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_39755395/article/details/78380942