内存管理系统之虚拟内存概念剖析
虚拟内存
物理地址与线性地址
物理地址就是物理内存真正的地址。在实模式下,“段基址+段内偏移地址”经过段部件的处理,直接输出的就是物理地址,CPU直接用此地址访问内存。而在保护模式下,“段基址+段内偏移地址”称为线性地址。不过,此时的段基址不是真正的地址,是一个叫做选择子的东西。它本质是个索引,类似于数组下标,通过这个索引就能在GDT中找到相应的段描述符,在该描述符中记录了该段的起始,大小等消息,这样就得到了段基址,若没有开启地址分页功能,此线性地址就被当作物理地址来用,可直接访问内存。若开启了分页功能,此线性地址又多了一个名字,就是虚拟地址(虚拟地址,线性地址在分页机制下都是一回事)。虚拟地址要经过CPU页部件转换成具体的物理地址,这样CPU才能将其送上地址总线去访问内存。
虚拟地址
在开启了分页功能的情况下,线性地址就叫做虚拟地址。32位保护模式下寻址空间是4GB,虚拟地址寻址范围就是[0,4GB)
在分页机制下程序中的地址都是虚拟地址,虚拟地址的范围取决于地址总线的宽度,32位环境下虚拟地址空间就为4GB。除了地址空间比较大以外,分页机制的另一个好处是每个任务都有自己的4GB虚拟地址空间,也就是各程序中的虚拟地址不会与其他程序冲突,都可以为相同的虚拟地址,不仅用户进程是这样,内核也是。程序中的地址是由链接器在链接过程中分配的,分配之后就不会再变了,运行时按部就班地送上处理器的CS和EIP即可。

浙公网安备 33010602011771号