设备模型

qemu作为一个虚拟机的软件,其重要功能之一就是模拟设备。说实话,这个设备模拟的模型还挺复杂的。

看过好几次都没有记清楚,这次重新梳理一遍,并记录在此。

设备类型注册

qemu中模拟的每一种设备都在代码中对应了一个类型,这个类型在使用之前需要注册到系统中。这样的好处是后续增添设备的流程变得简单化了。

这一节就来看看设备类型注册的流程。

设备类型注册

设备类型初始化

设备类型注册后,在需要使用之前得初始化该类型,并生成对应得ObjectClass对象。

设备类型初始化

设备实例化

接着就是实例化设备类型,也就是真的生成一个设备给虚拟机使用。

设备实例化

DeviceClass实例化细节

对于qemu中一个"device"设备,除了实例化中instance_init函数之外,还隐藏了很多实现的细节。

DeviceClass实例化细节

面向对象的设备模型

在整理了一遍设备类型和实例的初始化过程后,发现qemu的整个设备模型是完整的面向对象模型。

小生斗胆在这里总结一下整个面向对象的模型架构

面向对象的设备模型

接口

随着系统的复杂,设备模型中又提出了接口的概念。没怎么用过java,也不知道概念是不是类似。

原本不想看这个部分,谁想到代码中使用到接口的地方还挺多。所以只好硬着头皮看了一遍。

接口

类型、对象和接口之间的转换

在设备模型中我们涉及了三个概念:

  • 类型

  • 对象

  • 接口

三者之间相互独立又互有关联,在代码中我们也通常会在这几个成员之间转换。

我们单独列出一节总结一下他们之间转换的故事。

类型、对象和接口之间的转换

PCDIMM设备

最后我们以PCDIMM设备为例,详细剖析一下该设备初始化并加入系统的过程。

PCDIMM

Last updated