做亚马逊网站的账务处理,小学教学活动设计方案模板,网络营销成功的品牌,门户网站开发视频教学文章目录 QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)MemoryRegion gpa-hpaFlatView#xff1a;表示MR 树对应的地址空间FlatRange#xff1a;存储不同MR对应的地址信息AddressSpace#xff1a;不同类型的 MemoryRegion树RAMBlock总体简化图 QEMU 设备模拟 #x… 文章目录 QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)MemoryRegion gpa-hpaFlatView表示MR 树对应的地址空间FlatRange存储不同MR对应的地址信息AddressSpace不同类型的 MemoryRegion树RAMBlock总体简化图 QEMU 设备模拟 QEMU的模拟IO设备如何与VM交互QEMU 设备 IO 处理 QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)
QEMU能够完成gva-gpahva-hpa地址的转换
MemoryRegion gpa-hpa
QEMU通过MemoryRegion管理虚拟机内存每个MemoryRegion对应虚拟机一部分内存同时还有相关对应Host的虚拟内存相关信息。不同MemoryRegion通过树状组织连接起来连接到根MemoryRegion下不同MemoyRegion树代表不同作用的内存如系统内存空间system_memorry或IO内存空间system_io
MemoryRegion可以分为以下三种类型
根级MemoryRegion通过memory_region_init初始化只是个管理用的如system_memory没有自已对应的部分内存实体MemoryRegion通过memory_region_init_ram初始化有对应的内存大小为size别名 MemoryRegion通过 memory_region_init_alias 初始化没有自己对应的内存作为一个实体的别名存在通过alias成员指向对应的实体alias_offset代表该别名MemoryRegion所代表内存起始GPA相对于实体 MemoryRegion 所代表内存起始GPA的偏移量
FlatView表示MR 树对应的地址空间
struct FlatView {struct rcu_head rcu;unsigned ref;FlatRange *ranges;unsigned nr;unsigned nr_allocated;struct AddressSpaceDispatch *dispatch;MemoryRegion *root;
};FlatRange存储不同MR对应的地址信息
struct FlatRange {MemoryRegion *mr;hwaddr offset_in_region;AddrRange addr;uint8_t dirty_log_mask;bool romd_mode;bool readonly;bool nonvolatile;
};AddressSpace不同类型的 MemoryRegion树
两种为address_space_memory 与 address_space_io
/*** struct AddressSpace: describes a mapping of addresses to #MemoryRegion objects*/
struct AddressSpace {/* private: */struct rcu_head rcu;char *name;MemoryRegion *root; //是对应树的根/* Accessed via RCU. */struct FlatView *current_map; //对对应树的地址空间表示int ioeventfd_nb;struct MemoryRegionIoeventfd *ioeventfds;QTAILQ_HEAD(, MemoryListener) listeners;QTAILQ_ENTRY(AddressSpace) address_spaces_link;
};RAMBlock
MR 对应的 Host 虚拟内存每个RAMBlock表示单个实体MemoryRegion所占的Host虚拟内存信息多个RAMBlock构成RAMList 每个RAMBlock都有一个唯一的MemoryRegion对应
总体简化图
大佬勿喷后续学的更深会完善
QEMU 设备模拟 QEMU的模拟IO设备如何与VM交互
QEMU 在用户空间中独立进行设备模拟虚拟设备被其他的 VM 通过 VMM 提供的接口进行调用。并且设备的模拟是独立于VMM
QEMU 设备 IO 处理
当VM访问某虚拟设备的物理内存/端口时候控制权由VM转交到VMM此时QEMU会根据触发VM-exit的事件类型进行不同的处理即MMIO还是PMIO。 MMIO对address_space_memory类的地址空间读写 PMIO 对address_space_io类的地址空间进行读写