1. 程式人生 > >計算機系統記憶體管理

計算機系統記憶體管理

計算機系統記憶體管理

虛擬記憶體與實體記憶體

在計算機系統中程序之間是共享實體記憶體和其他系統資源的。為了更加有效管理記憶體和減少出錯,現代系統提供了一種對主存的抽象概念,叫做虛擬記憶體,它為每個程序提供了一個大的、私有的和一致的記憶體空間。實體記憶體通常是具有掉電就丟失的高速RAM構成,而虛擬記憶體通常是指在硬碟上開闢的一塊區域。虛擬記憶體有三個主要的作用:

1.它將主存看成是一個儲存磁碟上的地址空間資料的快取記憶體,在主存中只儲存活動區域,根據需要在主存和磁碟之間來回交換資料,這樣可以高效利用記憶體。
2.它為每個程序提供了一致的地址空間,這樣便於記憶體管理,以及便於連結器連結和載入器載入程式碼到記憶體中執行。
3.虛擬記憶體還可以保證每一個程序的地址空間不被其他的程序破壞。

物理定址和虛擬定址

物理定址
在這裡插入圖片描述
CPU通過直接傳送實體地址到主存讀取所在地址的資料內容的方式稱為物理定址,物理定址速度快,簡單直接,在大多數嵌入式處理器中都採用的是這種方式定址。

虛擬定址
在這裡插入圖片描述
在虛擬定址系統中,CPU將虛擬地址傳遞給記憶體管理單元MMU,MMU將虛擬地址翻譯成實體地址傳遞給主存來讀取對應實體地址的資料內容到CPU。這種定址方式常用於比較複雜的系統中,CPU中必須具有硬體MMU才能使用這種定址方式。一般能夠跑作業系統的CPU都具有硬體MMU並且採用這種定址方式。

虛擬定址過程

虛擬頁面
在這裡插入圖片描述
虛擬定址過程實際上是一個從虛擬地址空間到實體地址空間的對映。虛擬地址空間對應的是磁碟上一塊連續的地址空間。實體地址空間對應的是主存的地址空間。通常將一塊大的虛擬空間分割成一個個等大小稱為虛擬頁面(VP)的塊,將物理空間也分割成和VP等大小的物理頁(PP)。
VP有三種狀態:

  • 未分配:表明該虛擬頁並沒有存放資料內容,即它是空閒的並且不佔磁碟空間。
  • 未快取:表明該虛擬頁已經存放了資料內容,但是沒有快取到主存中。
  • 已快取:表明該虛擬頁已經存放了資料內容,並且資料已經快取到主存中了。

物理頁面
為了使系統判定一個虛擬頁面是否已經快取到記憶體中,在實體記憶體上開闢了一塊區域稱為頁表(Page table)用來存放一組頁表條目(PTE),PTE實際上反映的是虛擬地址到實體地址的對映以及訪問物理頁面的一組狀態控制。
在這裡插入圖片描述
每個PTE條目由有效位和一個地址域構成,有效位表明該位置對應虛擬頁面是否已經快取到記憶體中,如果快取了即為1,並且地址域存放的即為該虛擬頁面對應的物理頁面地址。如果沒有快取即為0,此時地址域存放的是虛擬頁面地址或者為空(虛擬頁面未分配時)。

頁命中在這裡插入圖片描述
如上圖,當CPU給出一個虛擬地址準備訪問VP2中的一段區域時,首先會根據虛擬地址到主存的頁表中找到對應的PTE,然後查閱有效位為1,表明該虛擬頁面已經快取到主存中了,此時讀出地址域的實體地址。即所需的資料在主存中稱為頁命中。

缺頁
在這裡插入圖片描述
當CPU給出一個虛擬地址準備訪問VP3中的一段資料時,首先在主存的頁表中找到對應的PTE,然後查閱該PTE的有效位為0,即VP3並沒有快取到主存中,此時核心會觸發缺頁異常,然後核心在主存中找出一個犧牲頁(頁中資料已經被更改)將它複製回磁碟,然後空出該犧牲頁的位置。在上圖中即為物理頁面PP3。然後核心將虛擬頁面VP3複製到記憶體中並且修改PTE3的狀態和實體地址域,此時再重新通過虛擬地址訪問即可頁命中。

地址翻譯
MMU將虛擬地址對映到實體地址的過程稱為地址翻譯。
在這裡插入圖片描述
虛擬地址由虛擬頁號(VPN)以及虛擬頁偏移(VPO)構成。根據VPN可以在主存的頁表中找到對應的PTE,然後查閱該PTE的狀態控制字以及地址域,可以獲取到對應物理頁的實體地址,將得到的實體地址加上虛擬頁偏移(也是物理頁偏移)即可得到完整的實體地址。然後通過該實體地址來讀取資料。

訪問效率優化

  • 採用多級頁表可以減小頁表佔據的主存大小,因為虛擬地址的大部分都是空的,因此不需要給它們分配PTE,只有等到需要分配的時候才給它們分配。
  • 在主存和MMU之間增加快取記憶體,將最活躍的資料放在快取記憶體中,可以加快訪問效率,當快取記憶體沒有命中的時候再去主存中訪問並且將資料複製到快取記憶體中,充分利用區域性性原則。
  • 在MMU中增加TLB快取存放最近訪問的PTE,可以加快地址的翻譯。