虚拟化:gva、gpa、hva、hpa转化

本文探讨了在虚拟化环境中gva到gpa以及hva到hpa的转换过程,重点解析了qemu-kvm中gpa转化为hva的实现,涉及kvm_memory_slot结构体和__gfn_to_hva_many函数。通过(gfn - slot->base_gfn) * PAGE_SIZE计算gpa在内存slot中的偏移,结合起始hva地址获取hva。
摘要由CSDN通过智能技术生成

gva -> gpa和hva -> hpa转化较为简单,分别去查guest和host页表即可。

gpa -> hva:

由于我所接触的虚拟化方式是采用qemu-kvm的方式。kvm负责cpu和内存的虚拟化,qemu负责io的虚拟化,且gpa->hva都是由qemu维护的,提供给kvm管理借口。具体代码实现见:

kvm_pfn_t __gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn, 
                   bool atomic, bool *async, bool write_fault,
                   bool *writable)
{
    unsigned long addr = __gfn_to_hva_many(slot, gfn, NULL, write_fault);

    if (addr == KVM_HVA_ERR_RO_BAD)
        return KVM_PFN_ERR_RO_FAULT;

    if (kvm_is_error_hva(addr))
        return KVM_PFN_NOSLOT;

    /* Do not map writable pfn in the readonly memslot. */
    if (writable && memslot_is_readonly(slot)) {
        *writable = false;
        writable = NULL;
    }    

    return hva_to_pfn(addr, atomic, async, write_fault,
              writable);
}

里面的第一句话就是完成gpa->hva的转化:__gf

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
虚拟化环境中,gva代表客户机虚拟地址(Guest Virtual Address),gpa代表客户机物理地址(Guest Physical Address),hva代表宿主机虚拟地址(Host Virtual Address),hpa代表宿主机物理地址(Host Physical Address)。 转换gvagpa较为简单,只需要查询guest页表即可找到对应的物理地址。 而要将gpa转换为hva,则需要使用公式(gfn - slot-&gt;base_gfn) * PAGE_SIZE计算gpa在当前slot中的地址偏移,并加上起始hva,即可得到当前gpa对应的hva。 最后,将hva转换为hpa,需要通过宿主机操作系统所维护的页表实现。宿主机操作系统负责将hva转换为hpa,以便在系统总线上进行访问。 综上所述,gvagpahvahpa之间的转换关系如下: - gva转换为gpa:查询guest页表 - gpa转换为hva:使用公式(gfn - slot-&gt;base_gfn) * PAGE_SIZE计算偏移并加上起始hva - hva转换为hpa:依赖宿主机操作系统维护的页表实现转换<span class="em"&gt;1</span&gt;<span class="em"&gt;2</span&gt;<span class="em"&gt;3</span&gt; #### 引用[.reference_title] - *1* *2* [虚拟化gvagpahvahpa转化](https://blog.csdn.net/GlowChar/article/details/100578401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [虚拟化——影子页表](https://blog.csdn.net/ShenlanIdea/article/details/52512648)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值