操作系统将物理内存虚拟化,从而管理内存,将每个进程的运行空间隔离,形成多任务的操作系统。
物理内存虚拟化后,在操作系统的基础上有以下几个名词概念,需要深刻理解,网络上很多博客和帖子常常对此解释出现误差、混淆。我在这里澄清一下(献丑):
1.物理地址
物理地址就是物理内存的真实地址,它是在硬件上真实存在的。由于操作系统的管理,在操作系统之上,用户是感觉不到物理内存的存在的。一个进程在操作系统中运行(32位下),它的地址范围总是4GB,这就是将物理地址虚拟化了,也即是管理物理内存,这是操作系统的核心功能之一。
2.线性地址
线性地址是操作系统采用段机制管理内存,最终形成的一个连续的内存空间,这个连续的地址,也即是0~4GB大小的地址。在不采用分页机制的情况下,由段描述符得到段基址,然后根据32位的偏移(4GB)来确定物理地址的位置。
3.虚拟地址
虚拟地址,通俗的来说,程序员在调试程序的时候看到的地址便是虚拟地址,也是操作系统最终呈现给用户的。
虚拟地址是在线性地址的基础上得来的。不采用分页模式,虚拟地址也即是线性地址。
如果采用了分页模式来管理内存的话,那么将根据虚拟地址解析到页目录、页表、页偏移来确定物理地址的位置。
我们可以理解为,线性地址是采用分段机制,虚拟地址是采用分页模式。分段机制下线性地址也是虚拟地址(这很好理解,大家都把我们调试看到的地址称之为虚拟地址)。
最后还想提一下分页模式与分段机制的优缺点,很明显,分页模式更加灵活,分页模式下,物理地址可以不是连续的。