Qemu中为每一个vcpu创建一个用户线程,完成了vcpu的初始化后,便进入了vcpu的运行,而这是通过kvm_cpu_exec函数来完成的; kvm_cpu_exec函数中,调用kvm_vcpu_ioctl(,KVM_RUN,)来让底层的物理CPU进行运行,并且监测VM的退出,而这个退出原因就是存在放在kvm_run->exit_reason中,也就是上文中提到过的应用层与底层交...
cpu_exec_all(...){/cpus.c} : 它是cpu循环,QEMU能够启动256个cpu核,但是这些核将会分时运行,然后执行qemu_cpu_exec() 。 struct CPUState{/target-xyz/cpu.h} : 它是CPU状态结构体,关于cpu的各种状态,不同架构下面还有不同。 cpu_exec(...){/cpu-exec.c}: 这个函数是主要的执行循环,这里第一次翻...
3.1 进入cpu_arm_int()这里就是进行CPU的初始化 3.2这里不涉及到kvm,具体想了解什么是kvm的可以自行百度 3.3 创建一个cpu线程,且在线程中循环执行tcg_exec_all(),这里就正式步入翻译流程 4.进入tcg_cpu_exec(),这几步都是设置cpu的状态所以就跳过了, tcg_cpu_exec() ——>cpu_exec(). 5.进入正题cpu_e...
#include "exec/address-spaces.h" #include "exec/memory-internal.h" #include "qemu/rcu.h"/* -icount align implementation. */typedef struct SyncClocks { int64_t diff_clk; int64_t last_cpu_icount; int64_t realtime_clock; } SyncClocks;#...
kvm_cpu_exec函数中,调用kvm_vcpu_ioctl(,KVM_RUN,)来让底层的物理CPU进行运行,并且监测VM的退出,而这个退出原因就是存在放在kvm_run->exit_reason中,也就是上文中提到过的应用层与底层交互的机制; 2.2.2 kvm中vcpu的执行 用户层通过KVM_RUN命令,将触发KVM模块中kvm_arch_vcpu_ioctl_run函数的执行: ...
static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, uint8_t *tb_ptr) { CPUArchState *env = cpu->env_ptr; uintptr_t next_tb;#if defined(DEBUG_DISAS) if (qemu_loglevel_mask(CPU_LOG_TB_CPU)) { #if defined(TARGET_I386) ...
kvm_cpu_exec函数中,调用kvm_vcpu_ioctl(,KVM_RUN,)来让底层的物理CPU进行运行,并且监测VM的退出,而这个退出原因就是存在放在kvm_run->exit_reason中,也就是上文中提到过的应用层与底层交互的机制; 2.2.2 kvm中vcpu的执行 用户层通过KVM_RUN命令,将触发KVM模块中kvm_arch_vcpu_ioctl_run函数的执行: ...
实例化一个vcpu就是在hostOS中创建了一个线程,线程里有个while循环,循环里不停的调用kvm_cpu_exec方法,kvm_cpu_exec方法调用通过kvm_vcpu_ioctl(cpu, KVM_RUN, 0)使得kvm切换为no-root模式。在no-root模式下处理特权指令的时候,会退回root模式,然后一步步返回到kvm_cpu_exec中根据不同原因,处理返回异常。
x86 qemu64 QEMU Virtual CPU version 2.5+ x86 phenom AMD Phenom(tm) 9550 Quad-Core Processor x86 core2duo Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz x86 kvm64 Common KVM processor x86 qemu32 QEMU Virtual CPU version 2.5+ x86 kvm32 Common 32-bit KVM processor ...
QEMU的main函数定义在/vl.c中,它也是执行的起点,这个函数的功能主要是建立一个虚拟的硬件环境。它通过参数的解析,将初始化内存,需要的模拟的设备初始化,CPU参数,初始化KVM等等。接着程序就跳转到其他的执行分支文件如:/cpus.c, /exec-all.c, /exec.c, /cpu-exec.c。