内存虚拟化之全虚拟化影子页面法(1)

在没有虚拟化的时候,进程在线性地址内存空间当中是以连续的页框进行存在的,注意,它是一片连续的地址空间。线性地址内存空间是以连续的地址空间被进程使用,但是它的底层是真正的物理内存存储单元,物理内存存储单元并不是连续的空间,当内核掌控所有的硬件之间,内核就是在物理内存基础上抽象出线性地址空间分配给进程使用,当然,在线性地址空间和物理内存之间是有对照关系的,有一种对应保存机制,保存了线性地址空间与物理内存的对应关系。

而用了虚拟化之后,OS也有自己的虚拟内存空间和物理内存空间,只不过是OS它自己不知道,它不知道不要紧,关键VMM得知道呀!不然OS也没法工作,OS上的进程占用的空间最终还是要落在真正物理机的内存当中的,这是怎么实现的呢?VMM会把自己的内存空间一一映射到OS的物理内存空间当中,就像下图:

image.png

VA虚拟机逻辑内存,OS进程使用的地址

PV虚拟机的物理内存

MA物理机的内存

VMM会把一一映射的对应关系对应起来,就是MVPV的映射。

VMM为每个OS都维护一个影子页表,影子页表维护虚拟地址(VA)到机器地址(MA)的映射关系,下面是关系图:

image.png

VMM捕获到OS页表修改后,VMM会查找负责PVMA映射的P2M页表或者哈希函数,找到与该PV对应的MA,再将MA填充到真正在硬件上起作用的影子页表,从而形成VAMA的映射关系,而OS的页表无需变动。


猜你喜欢

转载自blog.51cto.com/13778749/2162133