天天看點

計算機記憶體的分頁

當計算機運作時,某個時間段内,它隻是使用了一小部分的資料。其他資料在一個時間段内并不會被使用。

​如果以整個程式為機關進行映射,會把不需要的資料讀取到記憶體中,也會把過多的資料寫入到磁盤,這種情況會降低程式的運作效率。

​為解決這個問題,就有了記憶體的分頁機制,使用分頁的方式來對虛拟空間和實體空間進行分割和映射,提高程式的運作效率。

​分頁的思想是指把位址空間人為地分成大小相等的若幹份,一份稱為一頁,就像一本書由很多頁面組成,每個頁面大小相等。也就是說記憶體條可以看為一本書,裡面的實體記憶體被分為一頁一頁來管理,以頁為機關對記憶體進行換入換出。即:

  • 當程式運作時,隻需要将必要的資料從磁盤讀取到記憶體,暫時用不到的資料先留在磁盤中,什麼時候用到什麼時候讀取。
  • 當實體記憶體不足時,隻需要将原來程式的部分資料寫入磁盤,騰出足夠的空間即可,不用把整個程式都寫入磁盤。

頁的大小

​ 頁的大小是固定的,由硬體決定,或硬體支援多種大小的頁,由作業系統選擇決定頁的大小。比如 Intel Pentium 系列處理器支援 4KB 或 4MB 的頁大小,那麼作業系統可以選擇每頁大小為 4KB,也可以選擇每頁大小為 4MB,但是在同一時刻隻能選擇一種大小,是以對整個系統來說,也就是固定大小的。

​ 例如:假設我們使用的PC機是32位的,那麼虛拟位址空間總共有 4GB,按照 4KB 每頁分的話,總共有 **2^32 / 2^12 = 2^20 = 1M = 1048576 個頁(1G為2^30);**實體記憶體也是同樣的分法。

根據頁進行映射

​ 通過一個簡單的例子來說明虛拟位址是如何根據頁來映射到實體位址的

​ 如圖所示:

計算機記憶體的分頁

​ ·  Program1和Program2的虛拟空間都有8個頁(VP0----VP7),為了友善說明問題,我們假設每頁大小為 1KB,那麼虛拟位址空間就是 8KB。假設計算機有13條位址線,即擁有 2^13 的實體尋址能力,那麼理論上實體空間可以多達 8KB(1kB=2^10)。但是出于種種原因,購買記憶體的資金不夠,隻買得起 6KB 的記憶體,是以實體空間真正有效的隻是前 6KB。

​ ·  當我們把程式的虛拟空間按頁分隔後,把常用的資料和代碼頁加載到記憶體中,把不常用的暫時留在磁盤中,當需要用到的時候再從磁盤中讀取。上圖中,我們假設有兩個程式 Program 1 和 Program 2,它們的部分虛拟頁面被映射到實體頁面,比如 Program 1 的 VP0、VP1 和 VP7 分别被映射到 實體記憶體PP0、PP2 和 PP3;而有部分卻留在磁盤中,比如 VP2、VP3 分别位于磁盤的 DP0、DP1中;另外還有一些頁面如 VP4、VP5、VP6 可能尚未被用到或者通路到,它們暫時處于未使用狀态。圖中的線表示映射關系,可以看到,Program 1 和 Program 2 中的有些虛拟頁被映射到同一個實體頁,這樣可以實作記憶體共享。

​ ·  這裡,我們把虛拟空間的頁叫做虛拟頁(VP,Virtual Page),把實體記憶體中的頁叫做實體頁(PP,Physical Page),把磁盤中的頁叫做磁盤頁(DP,Disk Page)。

​ ·  Program 1 的 VP2、VP3 不在記憶體中,但是當程序需要用到這兩個頁的時候,硬體會捕獲到這個消息,然後作業系統接管程序,負責将 VP2 和 PV3 從磁盤中讀取出來并且裝入記憶體,然後将記憶體中的這兩個頁與 VP2、VP3 之間建立映射關系。

參考連結:

https://blog.csdn.net/sinat_38104725/article/details/97619861

Code your future.

繼續閱讀