linux核心初始化的時候要啟動分頁,既然要啟動分頁就要有相應的頁表,有頁表就要有頁目錄,很多人都知道系統啟動的時候要把實體位址的0-8m映射到虛拟位址的0-8m還要再映射到768m-768m+8m,這到底是為什麼呢?
頁目錄的一個目錄項映射4m的記憶體,為了映射8m的記憶體就要兩個目錄項,具體就是第一個和第768個目錄項映射前8m的實體記憶體,而第二個和第769個目 錄項映射第4到8m的實體記憶體,在核心啟動到startup_32的時候分頁還沒有開啟,但是已經進入保護模式了,也就是說,指令和資料的尋址已經成了從 段選擇子裡面取索引值然後查gdt而得到的線性位址了,又因為linux采用平坦模式,事實上避開了硬體分段,那麼尋址的每一個位址就直接是實體位址了,但是一旦開啟分頁,也就是cr0的pg位被置位,那麼位址就變為虛拟位址了,就要通過而且必須通過頁目錄頁表映射了,那麼考慮下面的代碼:
/*
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274045