逻辑地址(Logical Address)
是指应用程序角度产生的cs:ip。实模式时,cs作为段地址,ip作为段内相对偏移地址,cs<<4+ip=物理地址;保护模式未开启分页时,cs作为段选择子,以此获取全局描述符表gdt中段描述符中的段地址,段地址+段内相对偏移地址=物理地址;保护模式开启分页时,段地址+段内相对偏移地址=线性地址。应用程序仅需和逻辑地址打交道,而分段和分页机制是完全透明的,仅由系统程序涉及。应用程序虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。
线性地址(Linear Address)
是指逻辑地址到物理地址变换之间的中间层。如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址等同于物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。
物理地址(Physical Address)
是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。
虚拟内存(Virtual Memory)
是指计算机呈现出要比实际拥有的内存大得多的内存量。因此他允许编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在有限内存资源的系统上实现。一个非常恰当的比喻是:你不必非常长的轨道就能让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就能完成这个任务。采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux0.11内核中,给每个程式(进程)都划分了总容量为64MB的虚拟内存空间。因此程式的逻辑地址范围是0x0000000到0x4000000。有时我们也把逻辑地址称为虚拟地址。因为和虚拟内存空间的概念类似,逻辑地址也是和实际物理内存容量无关的。逻辑地址和物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。机理 逻辑地址(或称为虚拟地址)到线性地址是由CPU的段机制自动转换的。如果没有开启分页管理,则线性地址就是物理地址。如果开启了分页管理,那么系统程式需要参和线性地址到物理地址的转换过程。具体是通过设置页目录表和页表项进行的。