【发布时间】:2011-03-17 07:16:12
【问题描述】:
Qemu源码(cpu-exec.c)中有Translation Block的定义
第 127 行说
静态翻译块 *tb_find_slow(target_ulong pc, target_ulong cs_base, uint64_t 标志)
这是什么意思?
【问题讨论】:
标签: linux virtualization qemu
Qemu源码(cpu-exec.c)中有Translation Block的定义
第 127 行说
静态翻译块 *tb_find_slow(target_ulong pc, target_ulong cs_base, uint64_t 标志)
这是什么意思?
【问题讨论】:
标签: linux virtualization qemu
这不是翻译块的定义,而是一个名为tb_find_slow() 的函数,它返回一个指向翻译块的指针。翻译块结构在exec-all.h中定义。
至于它们是什么,this page 有一个简洁的描述:
QEMU 将本机指令翻译成“微操作”,并将它们构建为“翻译块”。当执行发生时,首先发生的事情之一是进行查找以查找已创建的翻译块。
换句话说,它是一种即时编译器。
有一个 tb_find_fast() 函数使用基于 CPU 状态位(程序计数器、代码选择器和标志)的哈希值,每个翻译块应该是唯一的。如果该哈希不起作用(生成的翻译块具有不同的 PC/CS/标志),则它会恢复为慢速方法,即对翻译块列表进行顺序扫描。
【讨论】:
jmp)。基本块变成了翻译块,几乎可以肯定是为了最小化复杂性。如果你可以确定一个块遵循一定的规则,它可以大大简化你翻译它需要做的工作:“一个翻译单元只包含一个基本块(一个由跳转或虚拟 CPU 终止的 x86 指令块)翻译者无法静态推断的状态变化)”,来自qemu.weilnetz.de/qemu-tech.html。