virtualizador virtualizacion usados tipos technology sirve que procesador para mas hipervisores desactivado activado x86 arm emulation virtual-machine

x86 - usados - virtualizacion



La arquitectura más simple posible que se puede virtualizar y ejecutar el kernel de Linux (4)

Me inspiré en la implementación de Fabrice Bellard de una máquina virtual x86 en Javascript , y me gustaría intentar escribir la máquina virtual más simple posible que sea capaz de ejecutar el kernel de Linux. Este es un esfuerzo puramente educativo, sin otro propósito que no sea comprender y compartir el código que hace esto posible.

Habiendo echado un vistazo a la especificación x86 , sospecho que podría lanzarme al extremo profundo al intentar escribir una máquina virtual que sea capaz de emular el conjunto completo de instrucciones x86. En su lugar, estoy buscando una arquitectura más simple que pueda intentar emular.

He leído esta pregunta que pregunta cómo emular la arquitectura x86, y la respuesta sugiere comenzar con algo más simple, como la arquitectura ARM. Mi pregunta es más específica: ¿cuál es la arquitectura más simple posible que puedo intentar emular y que será capaz de ejecutar el kernel de Linux?

Me interesa emular por completo la máquina completa, no simplemente pasar las instrucciones de vuelta a la máquina host (lo que, por ejemplo, sería posible si estuviera escribiendo un emulador x86). Tengo una cantidad decente de conocimientos de ensamblaje de 16 bits y algunos antecedentes de teoría de sistemas operativos, por lo que esto debería estar al alcance de la mano con suficiente trabajo.


Como dije en los comentarios, me gustaría equilibrar tres aspectos:

  • conjunto de instrucciones simples (pocos formatos de instrucciones, pocos códigos de operación: cualquier cosa NO como x86)
  • Documentación: ampliamente disponible. Esto significa que es posible descartar algunas arquitecturas simples para concentrarse en las que son ampliamente compatibles (por ejemplo, x86 gana aquí, pero también encontrará una gran cantidad de material sobre RISC y especialmente MIPS de la academia). O ir por algo abierto, como OpenRisc
  • Facilidad de uso en "modo kernel". En el modo de kernel privilegiado, hay todo un nuevo mundo de registros, instrucciones y elementos internos a considerar. ¡Y no olvide que un procesador también viene con un bus, y los procesadores simples pueden tener buses muy complejos! Y necesitarás emular eso también. O, puedes optar por el modo Usuario de Linux , si estás contento con él.

Al final, sugeriría algo "antiguo": razonablemente simple, especialmente en modo privilegiado, bien estudiado y documentado. Por ejemplo, el MIPS original, la familia Motorola 68k o algo parecido al RISC original ( http://en.wikipedia.org/wiki/Berkeley_RISC ), si hay una variante de Linux para ello.


La arquitectura más simple posible será desde el punto de vista de la facilidad de implementación. Ya que está construyendo un emulador que emula completamente la máquina, lo que tenga el Diseño / Arquitectura del Conjunto de Instrucciones más simple será adecuado. Las arquitecturas RISC sin duda son mejores. Pero elegir una arquitectura que no se use ampliamente tampoco es bueno, si necesita asistencia, pocos podrían ayudarle. Escribir un simulador no es un pedazo de pastel. Yo diría que ya sea para ARM o MIPS, ambos son populares:

También debe saber que la máquina virtual javascript de Fabrice Bellard utiliza una CPU compatible con x86 de 32 bits, algo que es compatible con Linux de forma nativa. Tendría que portar el kernel de Linux (usar cadenas de herramientas) para ARM o MIPS usted mismo. Vea los enlaces sobre cómo usar el kernel de Linux

Para MIPS:

Para ARM:



Puede ver el microBlaze, un procesador diseñado para una implementación eficiente en FPGA. Tiene solo dos formatos de instrucción y 32 valores de código de operación primarios.

Xilinx lo define y es compatible con su línea de FPGA. El documento de referencia se encuentra en: http://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf