## 10.6 TLB測試
80386提供了一種機制來測試轉換后備緩沖區(TLB),該緩沖區用來把線性地址轉換成物理地址。盡管TLB硬件錯誤的機會非常小,但用戶可能在上電信心測試的時候把TLB信心測試包含進來。
注意:
TLB測試機制是80386獨有的,可能不會在將來的處理器中包含它。使用這種機制的軟件可能會與將來的處理器不兼容。
當測試TLB的時候,建議您關閉頁(CR0中的PG=0)以避免在正在寫入TLB的數據引起沖突。
### 10.6.1 TLB結構
TLB是一個4路關聯接收機。圖10-3說明了TLB的結構。它有4個裝置,每個包含8項。每項包含標簽和數據。標簽24位寬,它們包含高階20位線性地址,檢查位,以及3個屬性位。數據域包含高階20位物理地址。
### 10.6.2 測試寄存器
兩個寄存器,如圖10-4,用來測試。TR6是測試命令寄存器,TR7是測試數據寄存器。這些寄存器可以用MOV命令來訪問。測試命令寄存器可以是源操作數,也可以是目的操作數。MOV在實地址模式和保護模式下都有定義。測試寄存器是特權資源;在保護模式下,只能在特權級0用MOV訪問它們。在其他特權級的訪問將導致通用保護異常。
測試命令寄存器(TR6)包含一個命令位和地址標簽:
C
命令位。有兩個TLB測試命令:向TLB寫,和TLB檢查。為了向TLB寫數據,可以將雙字用MOV寫入TR6,并將該標志清零。為了TLB檢查,可以將雙字用MOV寫入TR6,并且置位該標志位。
Linear Address
當執行TLB寫后,一個TLB項被定位到這個線性地址;這個TLB項的其他部分由TR7和剛剛被寫入的TR6來決定。當執行TLB檢查時,通過這個值來審查TLB;如果有且僅有一項匹配,TR6和TR7的其他部分由該匹配項來設置。
V
TLB項的檢查位。TLB用這項來檢查TLB項是否含有合法數據。沒有被分配數據的TLB項該標志位為零。所有的檢查位可以通過寫CR3來清除。
D, D#
臟標志(和它的補)來設置/讀取TLB項。
U, U#
U/S標志(和它的補)來設置/讀取TLB項。
W, W#
R/W標志(和它的補)來設置/讀取TLB項。
這些標志對的含義見表10-1,X代表D, U, 或者W。
測試寄存器(TR7)用保存從TLB讀取的數據,或要寫入TLB的數據。
physical Address
TLB的數據域。當TLB寫后,被分配給TR6中線性地址的TLB項被設置成這個值。當執行TLB檢查時,如果設置了HT,TLB的數據域(物理地址)被讀到這里。如果沒有設置HT,該域未定義。
HT
對于TLB檢查,HT決定檢查被觸發(HT<-1)或忽略(HT<-0)。對于TLB寫,HT必須為1。
REP
對于TLB寫,選擇4個通道中的一個來寫入。對于TLB讀,如果設置了HT,REP報告出哪個通道找到了標簽;如果沒有設置HT,REP未定義。
Table 10-1. Meaning of D, U, and W Bit Pairs
```
X X# Effect during Value of bit X
TLB Lookup after TLB Write
0 0 (undefined) (undefined)
0 1 Match if X=0 Bit X becomes 0
1 0 Match if X=1 Bit X becomes 1
1 1 (undefined) (undefined)
```


### 10.6.3 測試操作
寫TLB項:
1,向TR7中寫入雙字,包含需要的物理地址,HT,和REP值。HT必須為1。REP必須指向要放置該項的通道。
2,向TR6寫入雙字,包含合適的線性地址,以及V, D, U和W值。確保C=0。
要當心,不要寫入重復的標簽;這樣做的結果未定義。
檢查(讀)TLB項:
1,向TR6寫入雙字,包含適當的線性地址和屬性。確保C=1。
2,保存TR7。如果設置了HT,則其他值表示讀到的TLB項的內容。如果沒有設置HT,則其他值無法確定。
對于測試而言,V標志的作用類似于地址標志位。通常在檢查的時候置位此標志位,使沒有初始化的標簽不參加匹配。如果不設置,則未初始化的標簽會導致不可預料的結果。
- 第一章 80386介紹
- 1.1 該手冊的組織結構
- 1.2 其他文獻
- 第二章 編程基本模型
- 2.1 存儲器組織和段
- 2.2 數據類型
- 2.3 寄存器
- 2.4 指令格式
- 2.5 操作數選擇
- 2.6 中斷和異常
- 第4章 系統寄存器
- 4.1 系統寄存器 (System Registers)
- 4.2 系統指令 (System Instructions)
- 第五章 內存管理
- 5.1 分段地址轉換(Segment Translation)
- 5.2 分頁地址轉換(Page Translation)
- 5.3 混合分段和分頁地址轉換(Combining Segment and Page Translation)
- 第六章 內存管理
- 6.1 為什么要保護(Why Protection?)
- 6.2 80386保護機制概述(Overview of 80386 Protection Mechnaisms)
- 6.3 段級保護(Segment-Level Protection)
- 6.4 頁級保護(Page-Level Protection)
- 6.5 混合分頁和分段保護(Combining Page and Segment Protection)
- 第7章 多任務(Multitasking)
- 8.1 I/O 尋址(I/O Addressing)
- 7.1 任務狀態段(Task State Segment)
- 7.3 任務寄存器(Task Register)
- 7.4 任務門描述符(Task Gate Descriptor)
- 7.5 任務切換(Task Switching)
- 7.6 任務鏈(Task Linking)
- 7.7 任務尋址空間(Task Address Space)
- 第8章 輸入 輸出
- 8.2 I/O 指令(I/O Instructions)
- 8.3 保護和I/O(Protection and I/O)
- 第9章 異常和中斷(Exceptions and Interrupts)
- 9.1 識別中斷(Identifying Interrupts)
- 9.2 允許和禁止中斷(Enabling and Disabling Interrupts)
- 9.3 同時發生的中斷和異常的優先級(Priority Among Simultaneous Interrupts and Exceptions)
- 9.4 中斷描述符表(Interrupt Descriptor Table)
- 9.5 IDT 描述符(IDT Descriptors)
- 9.6 中斷任務和中斷子程序(Interrupt Tasks and Interrupt Procedures)
- 9.7 出錯碼(Error Code)
- 9.8 異常條件(Exception Conditions)
- 9.9 異常總結(Exception Summary)
- 9.10 出錯碼總結(Error Code Summary)
- 第10章 初始化(Initialization)
- 10.1 復位后處理器狀態(Processor State After Reset)
- 10.2 實模式初始化(Software Initialization for Real-Address Mode)
- 10.3 切換到保護模式(Switching to Protected Mode)
- 10.4 保護模式初始化(Software Initialization for Protected Mode)
- 10.5 初始化示例
- 10.6 TLB測試
- 第十四章 80386實地址模式
- 14.1 物理地址構成
- 14.2 寄存器和指令
- 14.3 中斷和異常處理
- 14.4 進入和離開實地址模式
- 14.6 實地址模式異常
- 14.7 與8086的不同
- 14.8 與80286實地址模式的不同