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訪存,之後才執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章