启动流程
----------------------------------------

KVM交互
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 获取到 KVM 句柄
- 创建虚拟机,获取到虚拟机句柄
- 为虚拟机映射内存,还有设备/信号处理的初始化
- 创建 vCPU,并为 vCPU 分配内存空间
- 创建 vCPU 个数的线程并运行虚拟机
- 线程进入循环,并捕获虚拟机退出原因,做相应的处理

TCG 模式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 启动
    - main
    - cpu_init
    - qemu_init_vcpu
    - qemu_tcg_init_vcpu
    - qemu_tcg_cpu_thread_fn
- 主函数
    - cpu_exec 处理中断异常,找到代码翻译块,执行
        - tb_find 在Hash表中查找,如果找不到则调用tb_gen_code创建一个TB
            - tb_gen_code 分配一个新的TB
                - gen_intermediate_code
                - tcg_gen_code 将TCG代码转换成主机代码。
        - cpu_loop_exec_tb
            - cpu_tb_exec  执行TB主机代码
            - tcg_qemu_tb_exec

用户态
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
用户态的大部分代码都在 linux-user 目录下

- linux-user/main.c main
    - linux-user/linuxload.c loader_exec
        - linux-user/elfload.c load_elf_binary
            - load_elf_image
            - load_elf_interp
    - linux-user/<arch>/cpu_loop.c cpu_loop
    - accel/tcg/cpu-exec.c cpu_exec