操作系統的內存管理

介紹操作系統內存管理首先要認識三個地址,邏輯地址、虛擬地址、物理地址。

邏輯地址:指由程序產生的段內偏移地址。

虛擬地址:是邏輯地址到物理地址變換的中間層。

物理地址:是指出目前CPU外部地址總線上的尋址物理內存的地址信號,是地址變換的最終結果地址。

下面一步步介紹操作系統是如何實現內存管理的。

重定位

由於程序中的邏輯地址和實際分配後主存儲器的絕對地址不一致,為使處理器能按實際地址正確地訪問主存,必須進行地址轉換。邏輯地址轉換成絕對地址的過程稱為重定位,也稱為地址轉換。

在沒有分頁機制的場景下,基地址+邏輯地址就是物理地址。

操作系統的內存管理

由於程序運行會存在換入換出機制,因此一般在運行時執行重定位。

操作系統的內存管理

分段

分段的思想很簡單,之前不是一大塊都是連在一起的麼,現在要把你們都分開,code / stack / heap 各自成為一段,段內的空間是連續的,段與段之間不必連續,這樣空間利用率上就更高了。

操作系統的內存管理

分頁

分段的內存碎片太大,為了減少內存碎片勢必要劃分更小的單元。將虛擬地址空間分割成很小的單元例如4k稱為頁,相應地,內存空間分成若干個物理塊,頁和塊的大小相等。然後將虛擬空間將虛擬地址映射到物理地址,映射的關係是通過一張表實現的,也就是頁表。

操作系統的內存管理

段頁結合的重定位如下圖

操作系統的內存管理


為什麼要使用多級頁表

操作系統的內存管理

每個進程1M個頁表,每個4字節,即每個進程需要4M的空間來存放頁表,進程多了佔用的內存還是很多的。

一般進程使用的內存是遠低於全部虛擬內存的。二級模式只為進程實際使用的那些虛擬內存區分配頁表,既提升了效率,也減少了內存的使用量。

操作系統的內存管理



分享到:


相關文章: