实模式和保护模式

 

段寄存器

段寄存器的产生源于Intel 8086 CPU体系结构中数据总线与地址总线的宽度不一致。8086数据总线为16位,地址总线为20位(1M)。为了访问1M的地址空间,通过段基址+段偏移的方式完成,如图。

Real Addressing

保护模式

保护模式与实模式相对应。

在80286及以后,内存地址改为16位或32位,至少可以访问到2^32=4G的内存空间。但为了保证后续的CPU能够运行旧的CPU,只能保持向下兼容。因此,80286及以后的CPU首先进入实模式,然后通过切换机制再进入到保护模式。

在实模式下,所有的段都是可以读、写和可执行的。

保护模式下主要有两个特点,一是如名,提供了段间的保护机制,二是寻址空间变大,达到4G。

描述符

8字节,描述段基址,段限等。

Descriptor

段选择子

2字节,描述段在描述符表中的索引。

Selector

描述符表

所谓描述符表的基址也就是此描述符表在内存中的起始地址,也即表中第一个描述符 所在的内存地址,系统中用两个特殊的寄存器来存放,一个用于存放全局描述符表的基址, 称之为“全局描述符表寄存器(GDTR)”,另一个用来存放局部描述符表的基址,称之为“局部描述符表寄存器(LDTR)”,它们的结构如下图所示:

Table

保护模式寻址

在保护模式下,以前实模式下的段寄存器还是有用的,不过它不再用来存放段的基址, 而是用来存放“段选择子”,它的名字也变成了“段选择子寄存器”,在访问内存的时候,我们需要给出的是“段选择子”,而不是段基址。

保护模式下的寻址,通过段选择子寄存器(段寄存器)、描述符表、描述符共同完成,如图所示:

Protect Addressing