QEMU 中 x86_cpu_realizefn 到 ept_emulation_fault 的调用流程解析
在 QEMU 的 x86 虚拟化实现中,CPU 的初始化与执行流程涉及多个关键函数,从 CPU 设备的最终初始化(x86_cpu_realizefn)到虚拟机监控程序(HVF)中处理 EPT(扩展页表)缺页异常(ept_emulation_fault),以下是完整调用链的详细分析:
1. x86_cpu_realizefn: x86 CPU 设备的 Realize 函数
作用:
x86_cpu_realizefn 是 x86 CPU 设备的 realize 方法,负责完成 CPU 的最终初始化(如设置 CPU 型号、检查特性兼容性、注册热插拔逻辑等)。
关键步骤:
- CPU 特性验证:检查 CPU 型号支持的指令集与用户配置是否兼容。
- APIC 初始化:配置本地 APIC 和 IOAPIC(中断控制器)。
- 调用
qemu_init_vcpu:触发虚拟 CPU(vCPU)线程的初始化。
// 代码路径:target/i386/cpu.c
static void x86_cpu_realizefn(DeviceState *dev, Error **errp) {
X86CPU *cpu = X86_CPU(dev);
// ... 配置 CPU 特性、APIC 等
qemu_init_vcpu(&cpu->parent); // 初始化 vCPU 线程
}
2. qemu_init_vcpu: 初始化 vCPU 线程
作用:
为每个虚拟 CPU 创建执行线程,并绑定到加速器(如 HVF/KVM)的后端操作。
关键流程:
- 分配 CPU 状态:初始化
CPUState结构体。 - 绑定加速器操作:通过
accel_ops调用加速器特定的 vCPU 初始化函数。 - 创建线程:调用加速器的
create

最低0.47元/天 解锁文章
3124

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



