分頁內存管理——虛擬地址到物理地址的轉換

引子:web

這裏寫圖片描述

這是邏輯地址(虛擬地址),包括程序中打印的變量地址顯示的都是邏輯地址,並非內存空間上的物理地址。編程

每條指令在被執行時,讀取操做數時須要給出操做數所在的內存地址,這個地址不能是物理主存地址,由於該程序在哪一種硬件設置的機器上運行並不能事前肯定,那操做系統就不能在此給出對應於某臺機器的物理地址緩存

1、物理內存和虛擬內存架構

咱們先來了解一下,什麼是物理內存,什麼又是虛擬內存?
1.物理內存:指經過物理內存條而得到的內存空間,主要做用是在計算機運行時爲操做系統和各類程序提供臨時儲存。
2.虛擬內存:對內存架構(內存、緩存、硬盤)進行管理(內存管理系統)的一種手段。簡單理解就是在硬盤上劃分出一塊區域做爲內存使用。svg

2.1 對於用戶:
計算機主要面向的是對操做系統等計算機知識幾乎沒有瞭解的普通大衆,他們大可能是不瞭解什麼主存外存的,因此爲了方便用戶的使用,就有必要使得程序不論是位於內存架構的哪一個層次,對於用戶來講都是同樣的。虛擬內存就是讓內存管理實現媒介透明的手段操作系統

2.2 對於主存:
衆所周知,一個程序要想運行,就必須加載到物理主存(內存)中,可是物理主存的容量是很是有限的,咱們固然能夠選擇購買更大的物理主存,但是很費錢,那麼還有沒有什麼辦法能夠在不明顯增長成本的基礎上擴大內存容量的呢?
虛擬內存就能夠作到,它的手段就是將物理主存擴大到便宜、容量大的磁盤上,即將磁盤空間也看做是主存空間的一部分翻譯

這裏寫圖片描述

用戶程序能夠存放在主存,也能夠部分存放在主存、部分存放在磁盤,那麼程序發出的地址究竟是在哪裏是由操做系統的內存管理模塊負責的。3d

虛擬內存讓用戶「感受」內存容量大大增長了,內存速度也加快了,就像魔法師同樣,讓觀衆以爲小箱子可以「裝下」一隻巨大的雄獅。xml

2、內存管理——分頁內存管理blog

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要依賴頁表來進行與頁面相關的管理活動。

例如,頁表如何知道須要的虛擬頁面是否在物理頁面中?那麼頁表中就有一項信息記錄的是該虛擬頁面是否在當前的物理頁面中——在內存否
再說,有一些虛擬頁面是受到保護的,對它的讀、寫和執行操做是有限制的,記錄該頁面的保護信息的則是——保護標識區。
等等。

能夠參考下圖中,頁表中存儲的具體內容:

這裏寫圖片描述