QEMU中TCG翻译流程

本文深入探讨QEMU的翻译流程,从创建单板到CPU初始化,详细解析了Vcpu线程创建、TCG如何在qemu_init_vcpu中启动,并通过cpu_exec函数执行翻译后的host代码,涉及tb_lookup__cpu_state的缓存查找和tb_gen_code的主机代码生成过程。
摘要由CSDN通过智能技术生成

声明:本文使用的qemu源码版本为qemu-3.1.0-rc0

前言:qemu中采用事件驱动架构和并行架构相结合的方式来工作的。qemu中的线程主要有Vcpu线程,main_loop线程、I/O线程和workthread线程,其中main_loop属于主线程。

1. 翻译流程总体框架

2. 具体流程

  1> 在vl.c的main函数中创建单板machine

​
current_machine = MACHINE(object_new(object_class_get_name(OBJECT_CLASS(machine_class))));

2>  在启动单板的过程中选择了单板的参数如:

​
./qemu-system-ppc -M mac99

此时会调用mac99单板对应的模型,其建模过程对应qemu源码中的hw\ppc\mac_newworld.c文件

3> 初始化CPU(mac_newworld.c中调用)

​
core99_machine_class_init->(mc->init=ppc_core99_init)

  mac_newworld.c函数中ppc_core_init函数创建CPU具体过程如下:

​
for (i = 0; i < smp_cpus; i++) {
        cpu = POWERPC_CPU(cpu_create(machine->cpu_type));
        env = &cpu->env;

        /* Set time-base frequency to 100 Mhz */
        cpu_ppc_tb_init(env, TBFREQ);
        qemu_register_reset(ppc_core99_reset, cpu);
    }

 其中其中 cpu = POWERPC_CPU(cpu_create(machine->cpu_type))实现对于CPU的创建,其函数调用具体如下:(该函数原型位于cpu.c文件中)

​
CPUState *cpu_create(const char *typename)
{
    Error 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值