1、CPU工作模式
1)实模式:8086的寄存器只有16位,我们也习惯于称8086的工作模式为1·6位模式。后续的CPU为了保持兼容性,在芯片上了电以后,还必须运行于16位模式之下。这种模式还有个正式的名字叫做实模式。在实模式下,程序是不能通过内存管理单元间接访问物理内存的,而是直接访问物理内存。访问方式是通过“段寄存器:段内偏移”这种形式,计算方式为:
物理地址 = 段寄存器 << 4 + 段内偏移
实模式的特点是直接操作物理内存,但是内存管理容易出错,要十分小心,代码编写和调试都很困难。
2)保护模式:经过十年的发展,X86 CPU 迎来了历史上使用最广泛、影响力最大的 32 位 CPU,这就是 i386 芯片。i386 与 8086 的一个很大的不同,就是它采用了全新的保护模式。这个体现在,i386 中的段式管理机制,相比 8086 发生了重大变化;同时,i386 芯片在段式管理的 基础上,还引入了页式管理。i386 在完成各种初始化动作以后,就会开启页表,从此程序员就不必再直接操作物理内存 的地址空间了,代替它的是线性地址空间。而且由于段和页都能提供对内存的保护,安全 性也得到了提升,所以这种工作模式被称为保护模式(Protection Mode)。i386 的保护 模式是一种段式管理和页式管理混合使用的模式。比实模式,i386 中的保护模式, 采用了页式管理,但它没有彻底放弃 8086 的段式管理,而是将段寄存器中的值由段基址 变成了段选择子。段选择子本质是 GDT 表的下标值,段基址都转移到 GDT 中去了。


2、GDT和LDT
TSS(见图2-1)定义了任务执行环境的状态。它包括通用寄存器、段寄存器、EFLAGS 寄存器、EIP 寄存器以及带有三个堆栈段(每个特权级别一个堆栈)的堆栈指针的段选择器的状态。 TSS 还包括与任务关联的 LDT 的段选择器以及分页结构层次结构的基地址。
保护模式下的所有程序执行都发生在任务(称为当前任务)的上下文中。当前任务的 TSS 的段选择器存储在任务寄存器中。切换到任务最简单的方法是调用或跳转到新任务。这里,新任务的 TSS 的段选择器在 CALL 或 JMP 指令中给出。在切换任务时,处理器执行以下操作:
1) 将当前任务的状态存储在当前TSS中。
2) 将新任务的段选择器加载到任务寄存器中。
3.)通过GDT 中的段描述符访问新的TSS。
4)将新任务的状态从新 TSS 加载到通用寄存器、段寄存器、LDTR、控制寄存器 CR3(分页结构层次结构的基地址)、EFLAGS 寄存器和 EIP 寄存器中。
5)开始执行新任务。
还可以通过任务门访问任务。任务门与调用门类似,不同之处在于它提供(通过段选择器)对 TSS 而不是代码段的访问。
外部中断、软件中断和异常都是通过中断描述符表(IDT)来处理的。IDT 存储门描述符的集合,提供对中断和异常