從頭開始寫作業系統系列 頁表以及相關的描述符詳解

2021-07-09 04:20:20 字數 1278 閱讀 5620

在之前的文章中,我們介紹過 gdt(全域性描述符表)以及一致**段和非一致**段,這篇文章我們再回到描述符,這次我們來以 arm 架構為例了解一下頁表描述符。

通俗的來講,頁表的內容就是乙個描述符(關於描述符的介紹請參看該系列文章中的《實現乙個 gdt》),我們可以將 gdt 理解成為乙個一級描述符表,將 ldt 理解為乙個二級描述符表。這篇文章我將以 arm 體系結構為例,介紹一級頁表的位址變換過程以及根據一級頁表的型別來獲取二級描述符表或者段的實體地址。

arm 系統中的虛擬空間到物理儲存空間的對映是以記憶體塊為單位進行的,即虛擬記憶體中的一塊連續的空間被對映到物理儲存空間一段連續的位址空間。

arm 支援以下幾種大小的儲存塊:

在頁表中,每乙個位址變換條目實際上記錄了乙個虛擬空間的儲存塊的基位址與物理空間儲存塊的對應關係,根據儲存塊的大小,會有多種不同的位址變換。

在 arm 中,mmu 實現虛擬位址到實體地址的對映是通過兩級頁表來實現的(以段為單位的位址變換是通過一級頁表實現的)

暫存器作用

c1配置 mmu 中的一些操作

c2儲存頁表的基位址

c3設定域的訪問控制屬性

c4保留

c5記憶體訪問失效狀態指示

c6記憶體訪問失效時失效的位址

c8控制與清除 tlb 內容相關操作

c10控制與鎖定 tlb 內容相關操作

一級頁表位址 = c2暫存器的高18位 + 虛擬位址的高22位 + 00 (共32位)

我們得到了一級頁表的位址,對應位址空間的內容就是一級描述符。

一級描述符分為以下型別:

從以上三幅圖中我們可以看到,不同型別的描述符是由描述符的最低2位決定的,分別為:

型別低1位

低0位粗粒度頁表描述符01

段描述符10

細粒度頁表描述符11

無效00二級描述符表位址 = 粗粒度描述符表高22位 + 虛擬位址[19:12]位 + 00 (共32位)

二級描述符表位址 = 粗粒度描述符表高20位 + 虛擬位址[19:10]位 + 00 (共32位)

段實體地址 = 段描述符高12位 + 虛擬位址低20位

在這篇文章中,我們加深了之前對描述符的理解,同時對描述符的作用做了更直接的解釋,對於頁表也進行了介紹。這篇文章中我們以 arm 體系結構為例講解了二級頁表的工作,其實,按照同樣的道理我們也可以設計出**頁表以及更多級的頁表。

作業系統 頁式儲存方式,頁,頁表,頁表項

作業系統和計算機組成原理裡都講到記憶體管理的頁式管理,但是本人以及很多初次學習分頁的時候,都會迷茫頁表大小和頁表項大小之間的關係,本人仔細分析了後寫了這篇blog,僅當學習交流,個人理解之用,如果有錯或者分析不夠嚴謹,歡迎指正。按字 圖結合起來分析,相信還是比較容易看懂。頁 將程序劃分的塊,對應的大...

作業系統 加速分頁過程 多級頁表

以下是我在看 現代作業系統 時的知識的記錄 加速分頁過程 1 32位虛擬位址,需要更大的頁面和頁表 由於頁面和頁表是相對應的 因此計算機為32位位址空間,而頁面大小為4kb,則需要頁面個數 此時頁表就得有100萬條表項,並且每個程序都需要自己的頁表,從而占用的儲存空間也很大 由於在訪問頁表時需要訪問...

(7)從1開始寫乙個作業系統

時間片輪轉排程是一種最古老,最簡單,最公平且使用最廣的演算法。每個任務被分配乙個時間段,稱作它的時間片,即該任務允許執行的時間。如果在時間片結束時程序還在執行,則cpu將被剝奪並分配給另乙個任務。如果任務在時間片結束前阻塞或結束,則cpu當即進行切換。排程程式所要做的就是維護一張任務先後執行的列表,...