5.2.2 几个重要的概念
在上面的介绍中,涉及逻辑地址等几个重要的概念,这几个概念在IA32的内存管理体系中,十分重要,因此在本节中再次强调一下:
● 逻辑地址,段选择符和段内偏移一起组成逻辑地址。逻辑地址是CPU内的“第一层”地址,任何内存的访问,都是以逻辑地址的形式给出来的,比如,内存中的代码,其逻辑地址是由CS寄存器存储的代码段选择符,跟EIP寄存器存储的指令指针(位置)共同组成的。CPU在读取内存中的指令时,首先通过CS寄存器的影子部分获得段基址,然后跟EIP寄存器的指令偏移组合,形成逻辑地址,可以看出,逻辑地址是48位的(16位的段选择符和32位的段内偏移)。
● 有效地址(Effective address),在IA32构架的内存管理机制中,把段内偏移称为有效地址。LEA指令,操作的就是有效地址。
● 线性地址,段选择符跟段内偏移共同组成了逻辑地址,由段选择符可以唯一确定一个段描述符,进而确定一个特定的段,在段描述符内,存储了该段的基址,线性地址就是段基址跟段偏移相加形成的地址。线性地址是32位的,线性地址跟逻辑地址的关系,并不是一对一的关系,一个逻辑地址,唯一地对应一个线性地址,而一个线性地址,却可能对应多个逻辑地址。需要注意的是,线性地址是CPU内部的第二层地址,也可以理解为CPU的地址空间。
● 物理地址,物理地址就是CPU可以通过地址总线直接寻址的地址。需要注意的是,线性地址并不是物理地址,CPU根据逻辑地址获得线性地址后,并不是根据线性地址直接通过地址总线进行寻址的,而是把线性地址再次变换成物理地址,然后通过地址总线寻址。这个线性地址到物理地址的变换,就是分页机制,因此,在不启用分页机制的情况下,线性地址跟物理地址是一一对应的,即线性地址就是物理地址;但若启用了分页机制,则CPU根据线性地址查找页目录和页表,获得物理地址,再通过地址总线进行寻址。
图5-4示意了上述各地址之间的关系。
图5-4 各地址概念之间的关系
还存在一种“虚拟地址”的概念,在IA32构架的CPU中并没有引入该概念,但虚拟地址的概念却经常出现,在本文中,我们也把线性地址叫做虚拟地址。