其创建流程如下图所示:
ppc架构的处理器的在mac_newworld.c文件中ppc_core99_init函数中调用memory_region_allocate_system_memory函数创建ram,ram属于实体MemoryRegion,有自己的内存(从QEMU进程的中分配内存空间)。源代码分析如下:
memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
const char *name,
uint64_t ram_size)
{
uint64_t addr = 0;
int i;
if (nb_numa_nodes == 0 || !have_memdevs) {
allocate_system_memory_nonnuma(mr, owner, name, ram_size);//hva内存的创建通过该函数完
//成,对于其它代码不做解析
return;
}
……
}
在下面函数中可以从文件恢复hva内存,也可以直接分配hva内存,memory_region_init_ram_from_file函数用于从文件恢复,而memory_region_init_ram_nomigrate用于分配内存。
static void allocate_system_memory_nonnuma(MemoryRegion *mr, Object *owner,
const char *name,
uint64_t ram_size)
{
if (mem_path) {
#ifdef __linux__
Error *err = NULL;