《軟件調試》讀書筆記一

一、分頁機制
關鍵詞:CR0、CR2、CR3、CR4、頁目錄、頁目錄表項、頁表、頁表項、內存頁(物理內存被分成若干個特定大小的頁,也叫物理頁)


CR0:該寄存器中的PG標誌用於是否啓用分頁分頁機制


CR2:該寄存器中保存的是一個線性地址


CR3:該寄存器中保存的是頁目錄的物理地址(指基地址)


CR4:該寄存器中的PAE(Physical Address Extension)標誌用來是否啓用物理地址擴展,啓用的話,可以尋址高達64GB的物理內存,不啓用的話,最多尋址4GB的物理內存。該寄存器中的PSE(Page Size Extension)標誌位用於啓用大頁面支持,PAE=1時大頁面爲2M或4M,PAE爲0時,大頁面爲4KB。




頁目錄:頁目錄用來存放頁目錄表項,它是一個線性表,簡稱PDE;一個頁目錄大小最大爲4K,最多有1024個表項,


頁目錄項:“頁目錄項”就是“頁目錄”裏存放的項,因爲一個“頁目錄項”大小爲4byte(32b);當沒有啓用PAE時,一共有兩種PDE格式,分別用於指向4kb的“頁表”和4MB的“內存頁”。其中前者PDE格式中高20位代表4k大小頁表的基地址的高20位,該基地址的低12位固定爲0,所以頁表一定是4KB邊界對齊的(這種PDE格式中的內存頁大小是4KB,因爲它通過頁表尋找內存頁,頁表中高20位表示內存頁的高20位,低12位爲內存頁的大小)。後者PDE格式中高10位代表4MB“內存頁”的基地址的高10位,該4MB的內存頁一定是按4MB對齊的。


頁表:“頁表”用來存放"頁表項",每個"頁表"大小4KB,有1024個"頁表項"。


頁表項:"頁表項"就是"頁表"存放的項,佔4個字節。頁表項中高20位存儲“內存頁”的基地址,後12位爲標誌位。


注:爲什麼要用二級索引,(X86中)因爲頁大小爲4KB,而內存4GB,要索引這4GB,就要1M個頁,而要索引這1M個頁就要1M個索引,一個索引要4byte內存(32位系統),所以要1M乘以4Byte=4MB的連續物理內存才能建立這個索引。爲了避免佔用如此巨大的內存空間,所以有了二級頁表機制(頁目錄表和頁表)。
注:2MB和4MB的大內存頁直接映射到"頁目錄項",不需要使用"頁表"。
疑問:CR4中PAE(Physical Address Extension)和PSE的作用,PDE中PS的作用。


一、未開啓PAE
線性地址轉換成物理地址步驟:
情況一(內存頁大小爲4KB):
首先CR2中得到“線性地址”,然後CR3中得到“頁目錄”的基地址,然後"線性地址"中的高10位爲偏移(偏移指的是頁目錄項中的第幾個,好比數組中的下標)找到目標“頁目錄項”,然後從“頁目錄項”中得到“頁表”的基地址,然後在“線性地址”中的中10位得到“頁表項”的偏移,然後在“頁表項”中得到“內存頁”的基地址,然後在“線性地址”中的後12位得到“物理內存”的偏移。


情況二(內存頁大小爲4MB):
首先CR2中得到“線性地址”,然後CR3中得到“頁目錄”的基地址,然後“線性地址”中的高10位得到“頁目錄項”的偏移,然後從“頁目錄項”的高10位得到“內存頁”的基地址,然後從“線性地址”中的後22位得到“物理地址”的偏移。
二、開啓PAE


cr4寄存器中的PAE標誌激活,頁目錄項中的頁大小標誌PS啓用大尺寸(PAE啓動時爲2MB)
Intel的尋址能力達到2^36=64GB,因此Intel改變了分頁機制。64GB的RAM被分爲2^24個內存頁,而頁表項的內存頁基地址段字段從20位擴展到24位,然後加上它的12位標誌位,總和爲36位,根據內存對齊,所以你頁表大小爲64位(8byte),結果一個大小4KB的頁表含有512個頁表項。“頁目錄表項”大小也有64bit,4KB的“頁目錄表”有512個“頁目錄表項”,Intel還引入一個叫做頁目錄指針表的新表,它有4個表項,表項的作用是指向“頁目錄表”的基地址,由此可知,“頁目錄指針表項”的大小也爲64bit,然後就是cr3包含一個27bit的頁目錄指針表的基地址段。因爲它存放在RAM的前4GB中,並在32字節(2^5)的倍數上對齊,因此27bit足以表示這種表的基地址。


當把線性地址映射到4KB的頁時(頁目錄項中PS標誌清零),32位線性地址按下列方式解釋
cr3  指向一個頁目錄指針
線性地址位31-30  指向頁目錄指針中的一個
線性地址位29-21  指向頁目錄中的512個項中的一個
線性地址位20-12  指向頁表中的512個項中的一個
線性地址位11-0   指向4KB內存頁中的偏移量






當把線性地址映射到2MB的頁時(頁目錄項中PS標誌置爲1),32位線性地址按下列方式解釋


cr3 指向一個PDPT
線性地址位31-30  指向頁目錄指針中的一個
線性地址位29-21  指向頁目錄中的512個項中的一個
線性地址位20-0   指向2MB內存頁中的偏移量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章