## 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实地址模式的不同