文章主要分析qemu在guest内存管理中用到的主要结构体MemoryRegion、AddressSpace、FlatView、MemoryListener
一、简介
1. Multiple types of MemoryRegion (MemoryRegion直接操作内存,每一棵MR树的树根对应一个RAMBlock,其host即为通过mmap()分配的HVA)
- RAM: a range of host memory that can be made available to the guest. e.g.
“pc.ram”, “pc.bios”, “pc.rom”, ram/rom for devices like “vga.ram”, “vga.rom”, etc.
- IOMMU region: translate addresses esp. for each PCI device for DMA usage
- container: includes other memory regions, each at a different offset. Use
memory_region_init() to initialize.
- alias: a subsection of another region. Initialize with memory_region_init_alias().
2. AddressSpace (代表某种用途的内存,比如"memory", "I/O", "cpu-memory"等,将其他几个内存相关的结构体联系到一起)
- Links all important structures together: MemoryRegion, MemoryRegionListener,
FlatView, AddressSpaceDispatch, MemoryRegionIoeven