天天看點

保護模式及其程式設計——分頁機制1.頁表結構2.頁表項格式

摘要:分頁機制是實作虛拟存儲的關鍵,但是它的實作比較簡單。傳統的頁都是4K大小,當然,在最近的核心中,分頁機制因為一些原因而比較繁瑣。在這裡,我們僅僅淺談最簡單的分頁機制,在其他的文章中,我們将講解現代新linux核心中的分頁機制。

我們通過設定cr0的PG位來開啟分頁機制。頁大小是4K,并且是4K對齊的。線性位址到實體位址的轉換中,可能某些線性位址是無效的。如果某個線性位址對應的頁不存在,那麼通路的時候将産生一個異常。分頁和分段最大的不同就是分頁是固定大小的。為了減少位址轉化需要的總線周期數量,我們使用TLB緩存最近使用的頁表。

        

1.頁表結構

1.1兩級頁表結構

頁表中,每項的大小是32b,其中20b用來存放頁面的實體位址,12b用于存放屬性資訊。 頁表含有1M個表項,每項4B.第一級表是頁目錄,存放在1頁4k頁面中,含有1K個表項。第二級是頁表,也是1K個表項。二級頁表的查找過程如下圖
保護模式及其程式設計——分頁機制1.頁表結構2.頁表項格式

1.2.不存在的頁表

頁目錄表的每個表項都有一個present屬性,這個屬性可以節省存放頁表所需要的空間。另外,這個屬性還可以用于在虛拟記憶體中存放二級頁表。這意味着,任何時候隻有部分二級頁表在實體記憶體中,其餘可以儲存在磁盤上。

2.頁表項格式

頁表項格式如下圖:
保護模式及其程式設計——分頁機制1.頁表結構2.頁表項格式
其中屬性位包含如下資訊: P——b0,存在位标志 R/W——b1,讀寫位标志 U/S——b2,使用者/超級使用者标志 A——b5,已經通路标志 D——b6,髒位标志 AVL——保留字段
G:第8b,表示全局頁      
保護模式是否開啟,取決于cr0的第0位PG。      
有關資料結構;一個頁表或者頁目錄項大小是4B;而開啟分頁機制以後,存儲單元變成了頁(不存在說,一部分存儲開啟了分頁機制,另外一部分沒有開啟分頁機制(除非這部分不能通過作業系統通路到))。是以,一個頁上含有1024個頁表項;一個頁目錄,對應1K*4K=4M的空間;一個程式有4G的線性位址空間,正好需要1K個頁目錄來存儲,它占用的頁表是4M.      
另外,頁表和頁目錄表都表項都是32b的,其中位址對應的是20b(第12b清零)。      
當頁目錄或者頁表項被修改的時候,對應TLB中的項目也就失效了;當cr3重新加載的時候,所有的TLB都失效了(G标志為1的除外)      
因為頁目錄基位址是4K對齊的,是以CR3中僅用20b來存儲它的基位址。      

繼續閱讀