天天看点

浅谈物理地址、虚拟地址和逻辑地址

从最根本的角度来看,地址只分为两类:物理地址、虚拟地址。 

1、物理地址

CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。

物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x86处理器中,物理地址空间是2的32次方,即4GB,但物理RAM一般不能上到4GB,因为还有一部分要给总线用(总线上还挂着别的 许多设备)。在PC机中,一般是把低端物理地址给RAM用,高端物理地址给总线用。

2、虚拟地址

现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要MMU(Memory Management Unit)的支持。MMU通常是CPU的一部分,如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(物理内存)接收,这称为物理地址(Physical Address),如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址。

3、逻辑地址

逻辑地址是指由程序产生的与段相关的偏移地址部分。

4、逻辑地址与物理地址的关系

逻辑地址的形式——段地址:段内偏移地址。

物理地址=段地址 * 10H+段内偏移地址

问:

一个含有16个字节数据的变量,它的逻辑地址为1000H:0100H,那么该变量的最后一个字节数据的物理地址是多少?

答:

逻辑地址1000H:0100H对应的物理地址是10100H;

第1个字节是首地址+0;

第16个字节就是首地址+0FH,即1010FH。