需要对Qemu源代码行发表评论

ask*_*ask 2 linux virtualization qemu

Qemu源代码中有一个翻译块的定义(cpu-exec.c)

/qemu-0.14.0/cpu-exec.c

第127行说

static TranslationBlock*tb_find_slow(target_ulong pc,target_ulong cs_base,uint64_t flags)

这是什么意思?

pax*_*blo 5

这不是翻译块的定义,这是一个被调用的函数tb_find_slow(),它返回一个指向翻译块的指针.翻译块结构定义于exec-all.h.

至于它们是什么,这个页面有一个简洁的描述:

QEMU将原生指令转换为"微操作"并将其构建为"翻译块".执行时,首先发生的事情之一是进行查找以查找已创建的转换块.

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

有一个tb_find_fast()函数使用基于CPU状态(程序计数器,代码选择器和标志)的散列,这对于每个转换块应该是唯一的.如果该散列不起作用(结果转换块具有不同的PC/CS /标志),则它恢复为慢速方法,即对转换块列表的顺序扫描.

  • @user,基本块只是代码的一部分,没有任何控制转移指令(例如`jmp`).它是成为翻译块的基本块,几乎可以肯定是为了最小化复杂性.如果你可以确定一个块遵循某些规则,它可以大大简化你需要做的翻译工作:"翻译单元只包含一个基本块(由跳转或虚拟CPU终止的x86指令块)翻译不能静态推断的状态变化",来自http://qemu.weilnetz.de/qemu-tech.html. (2认同)