Pregunta

Hay una definición para el bloque de traducción en el código fuente QEMU (CPU-EXEC.C)

/qemu-0.14.0/cpu-exec.c

La línea 127 dice

Traducción estática BLOCK *TB_FIND_SLOW (Target_ulong PC, Target_ulong CS_Base, Flags UINT64_T)

¿Qué significa eso?

¿Fue útil?

Solución

Esa no es una definición para un bloque de traducción, esa es una función llamada tb_find_slow() que devuelve un puntero a un bloque de traducción. La estructura del bloque de traducción se define en exec-all.h.

En cuanto a lo que son, esta página tiene una descripción sucinta:

QEMU traduce las instrucciones nativas en 'micro operaciones' y las construye como 'bloques de traducción'. Cuando se produce la ejecución, una de las primeras cosas que suceden es que se hace una búsqueda para encontrar un bloque de traducción que ya se ha creado.

En otras palabras, es una especie de compilador justo a tiempo.

Hay una tb_find_fast() función que utiliza un hash basado en un poco de estado de la CPU (contador de programa, selector de códigos y banderas) que debería ser único para cada bloque de traducción. Si ese hash no funciona (el bloque de traducción resultante tiene una PC/CS/Bands diferente), entonces vuelve al método lento, que es un escaneo secuencial de la lista de bloques de traducción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top