内存虚拟化相关的几个重要结构体如下图所示:
这里介绍几个结构体以及相互之间有关系。
(1)AddressSpace结构体
它用于表示一个虚拟机或虚拟CPU能够访问的所有物理地址。其中:
root:指向根MR
Current_map:指向MR平坦化后的flatview
Listeners:指向所有监听当前address space内存变化的listenner
address_space_link: 通过该域链到全局address space链中
(2)MemoryRegion结构体
它表示虚拟机中一段内存区域。常见的MemoryRegion有如下几类:
- RAM:host的一段实际分配给虚拟机作为物理内存的虚拟内存
- MMIO:guest的一段内存,但在host上没有对应的虚拟内存,需要截获这个区域的访问,调用对应的读写函数用于设备的模拟
- ROM:与RAM类似,只是该类型内存为只读属性,无法写入
- Container:包含若干MemoryRegion,每个MemoryRegion在这个container中偏移不一样。
- Alias:region的另一部分,可以使一个region被分成几个不连续的部分
其中各域定义如下:
memory Region结构体各域介绍:
ram_block:当为RAM MR,分配host的虚拟地址到该结构体对应的host域中,否则为NULL
ops:MR的操作函数,如读,写
container:指向该MR的container
size:大小
addr:guest上物理地址
Terminates:是否为叶子结点
Subregions:属于当前MR的子MR链表
Subregions_link:联入到父MR中
(3)FlatView结构体
待补充(平坦化)