linux 頁表的簡單理解!!!

2021-08-16 20:19:08 字數 979 閱讀 7590

在使用的計算機記憶體(4g)上面使用者可以使用的記憶體只有0~3g,3~4g是系統核心使用的區域。

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

頁表

頁表的存在很好的協調了物理記憶體和虛擬記憶體,從而很好的提高系統的安全性。

在乙個程序裡面使用的記憶體可能是很少的一部分,但是存在的實際記憶體確實很大的,所以在使用頁表的時候可能會對映很小的一部分。

由於每個程序都存在自己的頁表資料結構,那麼很有可能在相同的虛擬記憶體上面看到不一樣的資料,那時候因為在使用者看到的記憶體位址都是虛擬位址,而資料儲存是在物理記憶體,實體地址的不同則資料就會不同。

多級頁表

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

liunx裡面使用的4級頁表:

在計算機系統體系結構裡面,將頁表劃分成不同的項,從而不同的項儲存位址的不同位。

- cr3裡面儲存的是程序的pid

位址的翻譯過程:

- bit22~bit31作為頁目錄索引項,在cr3裡面找到相應的頁目錄項

- bit12~bit21作為尋找到的頁目錄項的頁表索引,在頁表項裡面找到相應的頁表

- bit0~bit11作為頁表索引項,在頁內找到也得偏移量和頁得到相應的實體地址

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

頁表項和頁表的關係 Linux中的頁表實現

頁表是軟體實現的,但是頁表的查詢是mmu完成的,所以硬體定義了頁表的實現規則,軟體可以做的只有選擇頁表的級數,是否使用huge page以及填充對應的許可權標誌位。前面的文章主要介紹了頁表的實現規則,本文將討論linux系統中頁表的具體實現。相關資料結構 還是那個 頁表,但增加了很多內容。頁表pgd...

Linux核心頁表

一 linux位址空間 arm的32位系統共支援4g的記憶體空間,其中0 3g為使用者空間,3g 4g是核心空間,arm採用2級頁表,32位位址空間address分別為 pgd pte 12bits,在核心 中分別為pgd 11位,pte 9 位,頁內位址12位 但是在mmu系統中對於arm的二級分...

linux頁表問題

1.核心頁表問題 kmalloc與kmem cache alloc之後的頁表 就比如說誰也沒有規定你不能在中斷處理裡面呼叫schedule,而且 你完全可以在沒有呼叫spin lock的情況下調spin unlock,會出問題嗎?出問題的是你自己,這個世界不會因為刀可以殺人就不用刀切菜了。啟動之後,...