设为首页收藏本站language 语言切换
查看: 1937|回复: 1
收起左侧

[分享] KVM 内存虚拟化及其实现 (2)

[复制链接]
发表于 2012-11-2 18:12:28 | 显示全部楼层 |阅读模式
由于客户机物理地址不能直接用于宿主机物理 MMU 进行寻址,所以需要把客户机物理地址转换成宿主机虚拟地址 (HostVirtual Address, HVA),为此,KVM 用一个 kvm_memory_slot 数据结构来记录每一个地址区间的映射关系,此数据结构包含了对应此映射区间的起始客户机页帧号 (Guest Frame Number, GFN),映射的内存页数目以及起始宿主机虚拟地址。
于是 KVM 就可以实现对客户机物理地址到宿主机虚拟地址之间的转换,也即首先根据客户机物理地址找到对应的映射区间,然后根据此客户机物理地址在此映射区间的偏移量就可以得到其对应的宿主机虚拟地址。进而再通过宿主机的页表也可实现客户机物理地址到宿主机物理地址之间的转换,也即 GPA 到 HPA 的转换。
实现内存虚拟化,最主要的是实现客户机虚拟地址 (Guest Virtual Address, GVA) 到宿主机物理地址之间的转换。根据上述客户机物理地址到宿主机物理地址之间的转换以及客户机页表,即可实现客户机虚拟地址空间到客户机物理地址空间之间的映射,也即 GVA 到 HPA 的转换。显然通过这种映射方式,客户机的每次内存访问都需要 KVM 介入,并由软件进行多次地址转换,其效率是非常低的。因此,为了提高 GVA 到 HPA 转换的效率,KVM 提供了两种实现方式来进行客户机虚拟地址到宿主机物理地址之间的直接转换。
其一是基于纯软件的实现方式,也即通过影子页表 (Shadow Page Table) 来实现客户虚拟地址到宿主机物理地址之间的直接转换。
其二是基于硬件对虚拟化的支持,来实现两者之间的转换。下面就详细阐述一下两种方法在 KVM 上的具体实现。

 楼主| 发表于 2012-11-5 10:21:08 | 显示全部楼层
好的,
沙发 2012-11-5 10:21:08 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-9 10:46 , Processed in 0.064358 second(s), 16 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表