Windows保護模式學習筆記(十二)—— 控制寄存器
-
- 控制寄存器
- Cr0寄存器
- Cr2寄存器
- Cr4寄存器
控制寄存器
描述:
控制寄存器有五個,分别是: Cr0 Cr1 Cr2 Cr3 Cr4
Cr1:保留
Cr3:頁目錄表基址
Cr0寄存器
結構圖:
PE位
:啟用保護(Protecction Enable)标志
PE=1:保護模式
PE=0:實位址模式
這個标志僅開啟段級保護,而沒有啟用分頁機制
若要啟用分頁機制,那麼PE和PG标志都要置位
PG位
:分頁機制标志
PG=1:開啟了分頁機制
PG=0:未開啟分頁機制
在開啟這個标志位之前必須已經或者同時開啟
PE
标志
PG=0且PE=0:處理器工作狀态為實位址模式
PG=0且PE=1:處理器工作狀态為沒有開啟分頁機制的保護模式
PG=1且PE=0:不存在。在PE沒有開啟的情況下無法開啟PG
PG=1且PE=1:處理器工作狀态為開啟了分頁機制的保護模式
WP位
:寫保護(Write Proctect)标志
對于Intel 80486或以上的CPU,CR0的16位是寫保護标志
當設定該标志時,處理器會禁止超級使用者程式(例如特權級0的程式)向使用者級隻讀頁面執行寫操作
當CPL<3的時候:
- 如果 WP=0 可以讀寫任意使用者級實體頁,隻要線性位址有效
- 如果 WP=1 可以讀取任意使用者級實體頁,但對于隻讀的實體頁,則不能寫
Cr2寄存器
描述:
當CPU通路某個無效頁面時,會産生缺頁異常,此時,CPU會将引起異常的線性位址存放在CR2中
結構圖:
舉例:
- 當CPU通路某個實體頁,但PDE/PTE的P位為0時,會産生缺頁異常
- 缺頁異常一旦發生,CPU會将引起缺頁異常的線性位址存儲到Cr2中
- 此時,作業系統的處理程式開始對異常進行處理
- 若處理結束後,雖然PDE/PTE的P位為0,但實際上它被寫進了頁面
- 這時,處理程式會将資料從頁面中讀出,再挂上一個有效的實體頁,讓程式接着往下跑
- 程式往下跑時,作業系統必須要記錄程式原先已經跑到了哪裡
- 此時,Cr2便派上了用場,因為産生異常時的線性位址存在了Cr2中
- 但如果異常處理程式檢測到使用者通路的頁面是一個未配置設定的頁面
- 這時,作業系統會報告一個異常,告訴我們在哪裡發生了錯誤
- 若沒有Cr2寄存器,當進入異常處理程式時,将找不到回去的線性位址
Cr4寄存器
結構圖:
PAE
:
PAE=1:2-9-9-12分頁
PAE=0:10-10-12分頁
PSE
:
注意:關于控制寄存器的更多細節,請參考Intel白皮書第三卷