Virtualbox源码分析3:VMM内存虚拟化概述

VMM虚拟化一: 基于VT的虚拟化框架

一: 什么是VT

VT,就是虚拟化技术(Virtualization Technology)的缩写。Intel VT就是指Intel的虚拟化技术。这种技术简单来说就是让可以让一个CPU工作起来就像多个CPU并行运行,从而使得在一台电脑内可以同时运行多个操作系统。只有部份Intel 的CPU才支持这种技术。
AMD平台对应的是SVM
基于VT框架,可以实现 内存虚拟化/设备虚拟化/CPU虚拟化,下面一个系列文章将围绕内存虚拟化展开。

二: 内存虚拟化原理介绍

虚拟化OS中一个比较重要的点是guest OS和host OS内存隔离
32位利用ds段做内存隔离,但是64位CPU弱化了ds段,所以只能使用EPT技术实现内存隔离

提到页表,首先介绍一下操作系统的内存管理:页表

TODO:加上Intel手册里的图

虚拟机为了实现GuestOS 和 Host OS 内存隔离,引入了两级页表,具体如下图所示:
在这里插入图片描述
这样做得目的有两个:
1。 提供给虚拟机一个从零开始的连续的物理内存空间。
2。在各虚拟机之间有效隔离、调度以及共享内存资源。
从上图可以看到,传统的内存虚拟化方式,虚拟机的每次内存访问都需要 VMM 介入,并由软件进行多次地址转换,其效率是非常低的。因此才有了影子页表技术(软件实现)和 EPT 技术(硬件实现),本文主要介绍EPT技术。
EPT 在原有 CR3 页表地址映射的基础上,引入了 EPT 页表来实现另一层映射:
在这里插入图片描述
当EPT开启当时候,虚拟机的每次内存访问,首先访问 Guest 中的 CR3 页表来完成 GVA 到 GPA 的转换,如果 GPA 不为空,则 CPU 接着通过 EPT 页表来实现 GPA 到 HPA 的转换(实际上,CPU 会首先查看硬件 EPT TLB 或者缓存,如果没有对应的转换,才会进一步查看 EPT 页表),整个步骤全部由硬件完成,大大加速了虚拟机效率。

三 VirtualBox的实现

当Guest OS启动之后,host driver在系统中reserve 一块物理内存(这块物理内存大小是创建虚拟机时配置的大小)然后通过host page table,映射成Guest OS的物理地址。
Guest OS启动之后,看到的物理地址就是如图所示的 host virtual address,Guest OS利用这些物理地址,在通过系统进程的页表机制转化成Guest virtual address。

多虚拟机:
虚拟机启动之后都会创建一个独立的EPT页表,都有一个对应的EPTBasePointer,当一个虚拟机线程运行GuestOS代码之前,会吧当前虚拟机的EPTBasePointer赋值给当前CPU,然后进入VMM模式,这样一个虚拟机的GuestOS代码就运行起来了。同样另一个虚拟机线程运行GuestOS之前,会吧自己的EPTBasePoint赋值给当前CPU。这样两个独立的CPU就在同一个Host上运行起来了,而且互相独立。

思考:
VirtualBox会在Guest OS启动的时候就申请所有虚拟机配置大小的物理内存(配置里设置2G物理内存,启动的时候就分配2G物理内存),也不管Guest OS是否真的使用了这些物理内存。
但其实是可以利用EPT的EPT violation实现动态分配真机物理地址,具体实现是在Guest OS启动的时候EPT Table是空,访问未命中的时候引发EXIT_REASON_EPT_VIOLATION的vmexit,在对应的中断处理程序里申请物理地址,然后构建对应的EPT页表,返回GuestOS继续执行。
VirtualBox没有这样做,原因可能是: 1. 担心后续申请物理地址无法申请成功。2 多次发现Vmexit导致性能变慢

内存虚拟化代码在VMM/VMMR0目录和VMM/VMMR3目录里都有,下一个blog会详细介绍这部分代码

参考文章”
https://www.cnblogs.com/ck1020/p/6043054.html
https://www.cnblogs.com/bakari/p/7966707.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值