引子:
這是邏輯地址(虛擬地址),包括程序中打印的變量地址顯示的都是邏輯地址,並不是內存空間上的物理地址。
每條指令在被執行時,讀取操作數時需要給出操作數所在的內存地址,這個地址不能是物理主存地址,因為該程序在哪種硬件設置的機器上運行並不能事前確定,那操作系統就不能在此給出對應於某台機器的物理地址。
一、物理內存和虛擬內存
我們先來了解一下,什么是物理內存,什么又是虛擬內存?
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