虚拟地址
虚拟地址是程序运行在保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址。
那为什么需要虚拟地址呢
我们要说到寻址方式
寻址:根据指令内容确定操作数地址的过程,称为寻址
在16位的cup或者8086cpu的时候,他寻址方式的模式为:实模式
而在32位或者64位,寻址方式的模式为:保护模式
实模式
我们先来看一下实模式下程序的运行
例:
如图,在实模式中,A程序和B程序从磁盘直接加载进内存中运行,我们所看到或者得到的就是物理地址,我们都知道内存是连续的,现在假设A程序是恶意程序,他现在可以通过自己运行时所获取的物理地址加上偏移就可以进入B程序中,可以篡改B程序的指令或者数据,导致B程序崩溃或者出错
保护模式
我们继续来看一下保护模式下程序的运行
例:
在保护模式中,在程序从磁盘加载进内存的中间加了一个中间层,即就是虚拟地址,在程序编译,链接的时候先映射进虚拟地址,在运行的时候会在映射进物理地址
这样的模式好处在于,在虚拟地址中,如图B程序的虚拟地址,不管通过如何偏移,他都在虚拟地址中,最后映射进物理地址也在B程序内,不会影响到其他的程序,起到了进程隔离,保护了其他的进程
所以如今的寻址方式的模式大都是以保护模式为主,也就是虚拟地址空间,因为其更能保证进程的安全和跟合理的安排程序运行
虚拟地址空间
在32位操作系统中虚拟地址空间大小为4G
而在虚拟地址里用户空间和内核空间的比例划分为
Windows是2:2划分的
Linux是3:1划分的