ask*_*ask 2 linux virtualization qemu
Qemu源代码中有一个翻译块的定义(cpu-exec.c)
第127行说
static TranslationBlock*tb_find_slow(target_ulong pc,target_ulong cs_base,uint64_t flags)
这是什么意思?
这不是翻译块的定义,这是一个被调用的函数tb_find_slow(),它返回一个指向翻译块的指针.翻译块结构定义于exec-all.h.
至于它们是什么,这个页面有一个简洁的描述:
QEMU将原生指令转换为"微操作"并将其构建为"翻译块".执行时,首先发生的事情之一是进行查找以查找已创建的转换块.
换句话说,它是一种即时编译器.
有一个tb_find_fast()函数使用基于CPU状态(程序计数器,代码选择器和标志)的散列,这对于每个转换块应该是唯一的.如果该散列不起作用(结果转换块具有不同的PC/CS /标志),则它恢复为慢速方法,即对转换块列表的顺序扫描.