【QEMU开发】内存
1、MemoryRegion 类型
QEMU 定义了多种类型的内存区域 memory.rst:30-31 :
- RAM 区域:简单的主机内存范围,可供客户机使用,memory_region_init_ram() 初始化
- MMIO 区域:通过主机回调实现的客户机内存范围 ,memory_region_init_io() 初始化,其中MemoryRegionOps包含了这些回调函数
- ROM 区域:读取时像 RAM,但禁止写入,memory_region_init_rom()初始化
- 容器区域:包含其他内存区域的容器,memory_region_init()来初始化
- Alias 区域:用来把同一块内存添加到不同父节点。比如一块外设的内存会被不同的cpu访问,那就需要给这块内存创建alias,然后添加到这些cpu所在的container中。使用memory_region_init_alias()来初始化
2、QEMU 中有两个主要的全局地址空间:
address_space_memory:用于内存访问address_space_io:用于 I/O 端口访问
3、AS与MR关系
AddressSpace 和 MemoryRegion 是 QEMU 内存管理系统中的两个核心概念,它们之间存在层次化的包含关系。
AddressSpace 表示一个完整的地址空间视图,它包含一个根 MemoryRegion。
每个 AddressSpace 通过其 root 字段指向一个 MemoryRegion,这个根区域定义了整个地址空间的布局。
MemoryRegion 可以包含子区域,形成树状结构 。
每个 MemoryRegion 都有一个 container 字段指向其父区域 ,以及一个 subregions 队列包含所有子区域
4、FlatView概念
FlatView 是另一个重要概念,它是 AddressSpace 的扁平化视图,用于优化内存访问性能 。
MemoryRegionSection 则描述了 MemoryRegion 的一个片段,包含了在地址空间中的具体位置信
5、AS,MR,FV
AS: AddressSpace,表示一个完整的地址空间视图,包含MemoryRegion空间
MR: MemoryRegion,构成整个内存空间的基本内存区域单元
FV:FlatView,是 AddressSpace 的扁平化视图,用于优化内存访问性能**#
QEMU开发 文章被收录于专栏
qemu开发总结