美文网首页
Qemu内存虚拟化

Qemu内存虚拟化

作者: mqddb | 来源:发表于2017-06-29 19:39 被阅读0次

    内存虚拟化源码分析1

    内存虚拟化源码分析2

    内存虚拟化原理很难懂,我要是搞清楚了就牛逼大发了!

    首先要找到一个切入点,我觉得KVM_SET_USER_MEMORY_REGION这个ioctl就很好,这个是用来修改Guest的内存空间的,以这个为基点,往上看Qemu的代码,可以看到整个内存的刷新机制,往下可以看看kernel里面的内存虚拟化机制。

    首先往上看Qemu的代码:

    可以看到ioctl的触发函数:kvm_set_user_memory_region最终由结构体MemoryListener的回调函数触发,这个结构体的实例化是在函数:kvm_memory_listener_register中。

    可以看到Qemu就虚拟了两个地址空间:address_space_memory,address_space_io。

    下一步,Qemu是如何通知这个MemoryListener调用回调函数的呢?

    memory.txt说了什么?

    经过多天的代码阅读,现在对Qemu的Memory机制有了一个大体的框架认识,首先是几个关键的结构体:

    AddressSpace,故名思议就是Qemu用来虚拟地址空间用的比较主要的就是上面提到的两个地址空间:address_space_memory,address_space_io。MemoryRegion都会映射在这个地址空间上,地址空间上的地址就是GPA(Guest Physic Address)。

    MemoryRegion,是对地址空间上不同功能的内存块的抽象,有好几种不同类型的MemoryRegion,具体可以看memory.txt。

    ioctl往下做了什么?

    相关文章

      网友评论

          本文标题:Qemu内存虚拟化

          本文链接:https://www.haomeiwen.com/subject/jqrvcxtx.html