虚拟地址

虚拟地址

虚拟地址是程序运行在保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址。

那为什么需要虚拟地址呢

我们要说到寻址方式
寻址:根据指令内容确定操作数地址的过程,称为寻址

在16位的cup或者8086cpu的时候,他寻址方式的模式为:实模式
而在32位或者64位,寻址方式的模式为:保护模式

实模式

我们先来看一下实模式下程序的运行
例:

虚拟地址_第1张图片
如图,在实模式中,A程序和B程序从磁盘直接加载进内存中运行,我们所看到或者得到的就是物理地址,我们都知道内存是连续的,现在假设A程序是恶意程序,他现在可以通过自己运行时所获取的物理地址加上偏移就可以进入B程序中,可以篡改B程序的指令或者数据,导致B程序崩溃或者出错

保护模式

我们继续来看一下保护模式下程序的运行
例:

虚拟地址_第2张图片
在保护模式中,在程序从磁盘加载进内存的中间加了一个中间层,即就是虚拟地址,在程序编译,链接的时候先映射进虚拟地址,在运行的时候会在映射进物理地址

这样的模式好处在于,在虚拟地址中,如图B程序的虚拟地址,不管通过如何偏移,他都在虚拟地址中,最后映射进物理地址也在B程序内,不会影响到其他的程序,起到了进程隔离,保护了其他的进程

所以如今的寻址方式的模式大都是以保护模式为主,也就是虚拟地址空间,因为其更能保证进程的安全和跟合理的安排程序运行

虚拟地址空间

在32位操作系统中虚拟地址空间大小为4G
而在虚拟地址里用户空间和内核空间的比例划分为
Windows是2:2划分的
Linux是3:1划分的

linux虚拟地址空间图如下

虚拟地址_第3张图片

你可能感兴趣的:(虚拟地址)