## 10.4 保護模式初始化(Software Initialization for Protected Mode)
許多保護模式所需要的初始化即可以在進入保護模式之前做,也可以在進入保護模式以后做。如果在進入保護模式以后做,那么軟件就不應該使用還沒有初始化的保護模式特性。
### 10.4.1 中斷描述符表(Interrupt Descriptor Table)
IDTR即可以在實模式也可以在保護模式加載。保護模式的中斷表和實模式的中斷表的格式是不相同的。改變到保護模式的同時也改變中斷表的格式是不可能的。所以,如果IDTR指向了一個中斷表,在某些時候表的格式是錯誤的,這種情況不可避免。在這個時候發生的中斷或異常將會導致不可預測的結果。為了防止這種不可預測性,應該把保護模式的中斷處理程放到IDT中后,才開啟中斷。
### 10.4.2 堆棧(Stack)
SS寄存器可以在保護模式加載,也可以在實模式加載。如果在實模式加載,當切換到了保護模式以后SS將繼續指向相同的線性地址基址處。
### 10.4.3 全局描述符表(Global Descriptor Table)
在保護模式下,在任何段寄存器改變前,GDT寄存器必須指向一個有效的GDT。GDT和GDTR的初始化可以在實模式下完成。GDT(還有所有的LDT)應該要在RAM內,因為處理器將修改描述符表的已訪問位(accessed bit)。
### 10.4.4 頁表(Page Tables)
頁表和頁目錄基址寄存器(CR3中)可以在實模式初始化,也可以在保護模式中。但是,CR0中的允許分頁位(PG位)不能在處理器未處于保護模式時設置。PG可以和PE同時設置,或者更后。當PG設置時,CR3中的PDBR應該已經過有效的初始化,指向物理內存中的有效的頁目錄。初始化子程可以使用以下的方針來何證分頁前后的地址的一致性:
+ 在分頁前后,當前被執行的代碼頁應該被映射到相同的物理地址。
+ 當設置了PG位后,立即執行一條JMP指令。
### 10.4.5 第一個任務(First Task)
初始化子程可以在沒有初始化任務寄存器前,在保護模式下運行一段時間。但是,當第一個任務切換發生時,以下條件必須要滿足:
+ 新任務必須要有一個有效的任務狀態段(TSS)。在這個TSS中的比當前任務特權級高或相等的特權級的堆棧指針必須要指向有效的堆棧區。
+ 任務寄存器必須指向一個區域以保存當前任務的狀態。第一個任務切換以后,這些轉存的信息可以不需要,這片區域也可以用作別的目的。
- 第一章 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實地址模式的不同