首先阅读qemu的memory.txt文档, 大概有如下信息可知
1 首先AddressSpace是cpu可以看到的地址空间,一般就是cpu地址总线宽度的可寻址范围
主要包括两个地址空间
1 ram 空间 , 通过mov等指令直接访问
2 I/O空间, 通过out in等io指令访问
2 MemoryRegion 用于记录连续内存/io空间和host 虚拟地址的关系, 和这段连续空间的设备属性
1 ram 比较简单的内存空间,读写对应直接修改 hva, 初始memory_region_init_ram, memory_region_init_resizeable_ram, memory_region_init_ram_from_file, memory_region_init_ram_ptr 函数用于初始化
2 mmio 这些空间对应于设备的地址空间映射到内存地址空间的空间(也就是mmio), 读写这些地址空间都会触发对应模拟设备的回调操作 memory_region_init_io 初始化
3 ROM 只读空间, 读直接访问hva, 写则拒绝,使用memory_region_init_rom() 初始化
4 rom device 这类空间读直接访问hva, 写则回调设备注册的函数(设备可能进行出错处理)
5 IOMMU 用于iommu建模型,也就是支持iommu的设备模拟 memory_region_init_iommu()
订阅专栏 解锁全文
753

被折叠的 条评论
为什么被折叠?



