QEMU执行流程

之前读了一些QEMU的源码,跟踪了一下QEMU的执行流程,记录下来了,现在将流程记录如下:
main()[vl.c] --> cpu_signal()[cpus.c] --> cpu_exit()[exec.c] -->tb_reset_jump() --> tb_se_jmp_target()[exec-all.h]

-->tb_reset_jump_recursive()[exec.c] -->cpu_exec()[cpu-exec.c] --> qemu_tcg_cpu_thread_fn()[cpus.c] -->  cpu_exec()[cpu-exec.c]

-->tb_find_fast() --> tb_gen_code()[exec.c] --> cpu_gen_code()[translate-all.c] --> tcg_gen_code()[tcg/tcg.c] --> 

tcg_gen_code_common()[tcg/tcg.c] --> tcg_reg_alloc_op()[tcg/tcg.c] --> all_cpu_threads_idle()[cpus.c] --> qemu_tcg_wait_io_event()[cpus.c]

--> qemu_cond_wait()[qemu_thread_posix.c]


user mode 和 system mode 不同的是
user mode在执行到cputlb.c的 get_page_addr_code() 的时候直接return addr, 没有访存模拟。
system mode 在执行到cputlb.c的get_page_addr_code()的时候,需要进一步模拟访存,然后转到host访存,之后才执行。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值