linux的臨時頁表對映問題

2021-09-21 05:19:35 字數 434 閱讀 8231

linux核心初始化的時候要啟動分頁,既然要啟動分頁就要有相應的頁表,有頁表就要有頁目錄,很多人都知道系統啟動的時候要把實體地址的0-8m對映到虛擬位址的0-8m還要再對映到768m-768m+8m,這到底是為什麼呢? 

頁目錄的乙個目錄項對映4m的記憶體,為了對映8m的記憶體就要兩個目錄項,具體就是第乙個和第768個目錄項對映前8m的物理記憶體,而第二個和第769個目 錄項對映第4到8m的物理記憶體,在核心啟動到startup_32的時候分頁還沒有開啟,但是已經進入保護模式了,也就是說,指令和資料的定址已經成了從 段選擇子裡面取索引值然後查gdt而得到的線性位址了,又因為linux採用平坦模式,事實上避開了硬體分段,那麼定址的每乙個位址就直接是實體地址了,但是一旦開啟分頁,也就是cr0的pg位被置位,那麼位址就變為虛擬位址了,就要通過而且必須通過頁目錄頁表映**,那麼考慮下面的**:

/*

linux 臨時頁表

armv8 linux4.9 檢視dma map前後mmu page table的變化的時候,有看到有的page table entry映 2m的size,這個2m的entry是何時建立的,目的是什麼是這邊部落格要弄清楚的問題。arm64 定義頁框大小的define位置如下,每乙個頁表項對映乙個頁框...

頁表自對映

今天查詢頁表對映資料時,無意發現乙個有趣的概念,就是頁表自對映。頁目錄基址記為pdt,頁目錄項記為pde,頁表項記為pte。bits m,n,value 表示取value從高m位到高n位的值。32位系統下,所有的pte所佔的空間剛好是4mb。如果將這些pte連續地放在記憶體中,那麼這4mb記憶體空間...

linux頁表問題

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