【问题标题】:Need comment on a Qemu source code line需要对 Qemu 源代码行进行评论
【发布时间】:2011-03-17 07:16:12
【问题描述】:

Qemu源码(cpu-exec.c)中有Translation Block的定义

/qemu-0.14.0/cpu-exec.c

第 127 行说

静态翻译块 *tb_find_slow(target_ulong pc, target_ulong cs_base, uint64_t 标志)

这是什么意思?

【问题讨论】:

    标签: linux virtualization qemu


    【解决方案1】:

    这不是翻译块的定义,而是一个名为tb_find_slow() 的函数,它返回一个指向翻译块的指针。翻译块结构在exec-all.h中定义。

    至于它们是什么,this page 有一个简洁的描述:

    QEMU 将本机指令翻译成“微操作”,并将它们构建为“翻译块”。当执行发生时,首先发生的事情之一是进行查找以查找已创建的翻译块。

    换句话说,它是一种即时编译器。

    有一个 tb_find_fast() 函数使用基于 CPU 状态位(程序计数器、代码选择器和标志)的哈希值,每个翻译块应该是唯一的。如果该哈希不起作用(生成的翻译块具有不同的 PC/CS/标志),则它会恢复为慢速方法,即对翻译块列表进行顺序扫描。

    【讨论】:

    • 基本块和翻译块有区别吗?
    • @user,基本块只是没有任何控制转移指令的代码位(例如jmp)。基本块变成了翻译块,几乎可以肯定是为了最小化复杂性。如果你可以确定一个块遵循一定的规则,它可以大大简化你翻译它需要做的工作:“一个翻译单元只包含一个基本块(一个由跳转或虚拟 CPU 终止的 x86 指令块)翻译者无法静态推断的状态变化)”,来自qemu.weilnetz.de/qemu-tech.html
    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多