【linux】頁表的簡單理解!!!

在使用的計算機內存(4G)上面用戶可以使用的內存只有0~3G,3~4G是系統內核使用的區域。
這裏寫圖片描述

但是在物理內存上面,任何的區域和位置都是可讀可寫操作的,假如進程直接訪問的是物理內存,那麼系統就會存在很大的不安全性。

頁表
頁表的存在很好的協調了物理內存和虛擬內存,從而很好的提高系統的安全性。
在一個進程裏面使用的內存可能是很少的一部分,但是存在的實際內存確實很大的,所以在使用頁表的時候可能會映射很小的一部分。

這裏寫圖片描述

由於每個進程都存在自己的頁表數據結構,那麼很有可能在相同的虛擬內存上面看到不一樣的數據,那時候因爲在用戶看到的內存地址都是虛擬地址,而數據存儲是在物理內存,物理地址的不同則數據就會不同。

多級頁表

假如在系統裏面,物理內存和虛擬內存是一一對應的,那麼在進程空間裏面就會存在很多的頁表,同時也會佔據很多的空間,那麼解決這個問題就出現了多級頁表。

liunx裏面使用的4級頁表:
這裏寫圖片描述

在計算機系統體系結構裏面,將頁表劃分成不同的項,從而不同的項保存地址的不同位。
- cr3裏面保存的是進程的PID

地址的翻譯過程:
- bit22~bit31作爲頁目錄索引項,在cr3裏面找到相應的頁目錄項
- bit12~bit21作爲尋找到的頁目錄項的頁表索引,在頁表項裏面找到相應的頁表
- bit0~bit11作爲頁表索引項,在頁內找到也得偏移量和頁得到相應的物理地址

所以在進程進行替換的時候只需要將cr3的指向替換即可

發佈了89 篇原創文章 · 獲贊 75 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章