ITPub博客

首页 > Linux操作系统 > Linux操作系统 > KVM 内存虚拟化及其实现 (2)

KVM 内存虚拟化及其实现 (2)

Linux操作系统 作者:cong_lan 时间:2016-03-01 14:59:23 0 删除 编辑

由于客户机物理地址不能直接用于宿主机物理 MMU 进行寻址,所以需要把客户机物理地址转换成宿主机虚拟地址 (Host Virtual 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 上的具体实现。

详细:http://www.51rhca.com/archives/606

15.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30939963/viewspace-2020050/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-03-01

  • 博文量
    3
  • 访问量
    411