控制寄存器 CR*

  控制寄存器(CR0~CR3)用於控制和肯定處理器的操做模式以及當前執行任務的特性,如圖4-3所示。CR0中含有控制處理器操做模式和狀態的系統控制標誌;CR1保留不用;CR2含有致使頁錯誤的 線性地址;CR3中含有頁目錄表 物理內存基地址,所以該寄存器也被稱爲頁目錄基 地址寄存器PDBR(Page-Directory Base address Register)。
 
控制寄存器
1 CR0 中協處理器控制位
CR0的4個位:擴展類型位ET、任務切換位TS、仿真位EM和數學存在位MP用於控制80x86浮點(數學) 協處理器的操做。有關 協處理器的詳細說明請參見第11章內容。CR0的ET位(標誌)用於選擇與 協處理器進行通訊所使用的協議,即指明系統中使用的是80387仍是80287 協處理器。TS、MP和EM位用於肯定浮點指令或WAIT指令是否應該產生一個設備不存在(Device Not Available,DNA)異常。這個異常可用來僅爲使用 浮點運算的任務保存和恢復 浮點寄存器。對於沒有使用 浮點運算的任務,這樣作能夠加快它們之間的切換操做。
(1)ET:CR0的位4是擴展類型(Extension Type)標誌。當該標誌爲1時,表示指明系統中有80387 協處理器,並使用32位協處理器協議。ET=0指明使用80287協處理器。若是仿真位EM=1,則該位將被忽略。在處理器復位操做時,ET位會被初始化指明系統中使用的 協處理器類型。若是系統中有80387,則ET被設置成1,不然如有一個80287或者沒有協處理器,則ET被設置成0。
(2)TS:CR0的位3是任務已切換(Task Switched)標誌。該標誌用於推遲保存任務切換時的協處理器內容,直到新任務開始實際執行協處理器指令。處理器在每次任務切換時都會設置該標誌,而且在執行協處理器指令時測試該標誌。
若是設置了TS標誌而且CR0的EM標誌爲0,那麼在執行任何協處理器指令以前會產生一個設備不存在異常。若是設置了TS標誌但沒有設置CR0的MP和EM標誌,那麼在執行協處理器指令WAIT/FWAIT以前不會產生設備不存在異常。若是設置了EM標誌,那麼TS標誌對 協處理器指令的執行無影響,見表4-1。
表4-1 CR0中標誌EM、MP和TS的不一樣組合對協處理器指令動做的影響
CR0中的標誌
指令類型
     
EM
MP
TS
浮點
WAIT/FWAIT
0
0
0
執行
執行
0
0
1
設備不存在(DNA)異常
執行
0
1
0
執行
執行
0
1
1
DNA異常
DNA異常
1
0
0
DNA異常
執行
1
0
1
DNA異常
執行
1
1
0
DNA異常
執行
1
1
1
DNA異常
DNA異常
在任務切換時,處理器並不自動保存 協處理器的上下文,而是會設置TS標誌。這個標誌會使得處理器在執行新任務 指令流的任什麼時候候遇到一條 協處理器指令時產生設備不存在異常。設備不存在異常的處理程序可以使用CLTS指令清除TS標誌,而且保存 協處理器的上下文。若是任務從沒有使用過 協處理器,那麼相應協處理器上下文就不用保存。
(3)EM:CR0的位2是仿真(EMulation)標誌。當該位設置時,表示處理器沒有內部或外部 協處理器,執行協處理器指令時會引發設備不存在異常;當清除時,表示系統有協處理器。設置這個標誌能夠迫使全部浮點指令使用軟件來模擬。
(4)MP:CR0的位1是監控協處理器(Monitor coProcessor或Math Present)標誌。用於控制WAIT/FWAIT指令與TS標誌的交互做用。若是MP=一、TS=1,那麼執行WAIT指令將產生一個設備不存在異 常;若是MP=0,則TS標誌不會影響WAIT的執行。
2 CR0 中保護控制位
(1)PE:CR0的位0是啓用保護(Protection Enable)標誌。當設置該位時即開啓了保護模式;當復位時即進入實地址模式。這個標誌僅開啓段級保護,而並無啓用 分頁機制。若要啓用 分頁機制,那麼PE和PG標誌都要置位。
(2)PG:CR0的位31是分頁(Paging)標誌。當設置該位時即開啓了分頁機制;當復位時則禁止分頁機制,此時全部 線性地址等同於 物理地址。在開啓這個標誌以前必須已經或者同時開啓PE標誌。即若要啓用分頁機制,那麼PE和PG標誌都要置位。
(3)WP:對於Intel 80486或以上的CPU,CR0的位16是 寫保護(Write Proctect)標誌。當設置該標誌時,處理器會禁止 超級用戶程序(例如 特權級0的程序)向用戶級只讀頁面執行寫操做;當該位復位時則反之。該標誌有利於UNIX類操做系統在建立進程時實現寫時複製(Copy on Write)技術。
(4)NE:對於Intel 80486或以上的CPU,CR0的位5是 協處理器錯誤(Numeric Error)標誌。當設置該標誌時,就啓用了x87 協處理器錯誤的內部報告機制;若復位該標誌,那麼就使用PC形式的x87協處理器 錯誤報告機 制。當NE爲復位狀態而且CPU的IGNNE輸入引腳有信號時,那麼數學協處理器x87錯誤將被忽略。當NE爲復位狀態而且CPU的IGNNE輸入引腳無 信號時,那麼非屏蔽的數學協處理器x87錯誤將致使處理器經過FERR引腳在外部產生一箇中斷,而且在執行下一個等待形式浮點指令或WAIT/FWAIT 指令以前馬上中止指令執行。CPU的FERR引腳用於仿真外部 協處理器80387的ERROR引腳,所以一般鏈接到中斷控制器輸入請求引腳上。NE標誌、IGNNE引腳和FERR引腳用於利用外部邏輯來實現PC形式的外部 錯誤報告機制。
啓用保護模式PE(Protected Enable)位(位0)和開啓 分頁PG(Paging)位(位31)分別用於控制分段和分頁機制。PE用於控制分段機制。若是PE=1,處理器就工做在開啓分段機制環境下,即運行在保護模式下。若是PE=0,則處理器關閉了分段機制,並如同8086工做於實地址模式下。PG用於控制 分頁機制。若是PG=1,則開啓了 分頁機制。若是PG=0, 分頁機制被禁止,此時 線性地址被直接做爲 物理地址使用。
若是PE=0、PG=0,處理器工做在實地址模式下;若是PG=0、PE=1,處理器工做在沒有開啓 分頁機制的保護模式下;若是PG=一、PE=0,此時因爲不在保護模式下不能啓用分頁機制,所以處理器會產生一個通常保護異常,即這種標誌組合無效;若是PG=一、PE=1,則處理器工做在開啓了分頁機制的保護模式下。
當改變PE和PG位時,必須當心。只有當執行程序至少有部分代碼和數據在線性地址空間和物理地址空間中具備相同地址時,咱們才能改變PG位的設置。此時這部分具備相同地址的代碼在 分頁和未分頁世界之間起着橋樑的做用。不管是否開啓分頁機制,這部分代碼都具備相同的地址。另外,在開啓分頁(PG=1)以前必須先刷新頁高速緩衝TLB。
在修改該了PE位以後程序必須馬上使用一條跳轉指令,以刷新處理器執行管道中已經獲取的不一樣模式下的任何指令。在設 置PE位以前,程序必須初始化幾個系統段和控制寄存器。在系統剛上電時,處理器被複位成PE=0和PG=0(即實模式狀態),以容許引導代碼在啓用分段和 分頁機制以前可以初始化這些寄存器和數據結構。
3 CR2 CR3
CR2和CR3用於分頁機制。CR3含有存放頁目錄表頁面的物理地址,所以CR3也被稱爲PDBR。由於頁目錄表頁面是頁對齊的,因此該寄存器只有高20位是有效的。而低12位保留供更高級處理器使用,所以在往CR3中加載一個新值時低12位必須設置爲0。
使用MOV指令加載CR3時具備讓頁高速緩衝無效的反作用。爲了減小地址轉換所要求的 總線週期數量,近幾天訪問的頁目錄和 頁表會被存放在處理器的頁高速緩衝器件中,該緩衝器件被稱爲轉換查找緩衝區(Translation Lookaside Buffer,TLB)。只有當TLB中不包含要求的 頁表項時纔會使用額外的 總線週期從內存中讀取頁表項。
即便CR0中的PG位處於復位狀態(PG=0),咱們也能先加載CR3。以容許對 分頁機制進行初始化。當切換任務時,CR3的內容也會隨之改變。可是若是新任務的CR3值與原任務的同樣,處理器就無需刷新頁高速緩衝。這樣共享 頁表的任務能夠執行得更快。
CR2用於出現頁異常時報告出錯信息。在報告頁異常時,處理器會把引發異常的 線性地址存放在CR2中。所以操做系統中的頁 異常處理程序能夠經過檢查CR2的內容來肯定 線性地址空間中哪個頁面引起了異常。
相關文章
相關標籤/搜索