Simuladores de sistemas informáticos: ¿se parecen a la realidad?

En un lenguaje simple y accesible sobre términos básicos del campo de simuladores, así como tipos y niveles de detalle de modelos. Material para un fácil y rápido conocimiento de esta área.

imagen

Si me hubieran preguntado sobre la simulación hace un tiempo, lo primero que se me habría ocurrido es mi hijo, que habla sobre su estómago enfermo en la víspera del control en la escuela. Sin embargo, durante los últimos diez años he estado trabajando con simuladores de varios sistemas informáticos, desde teléfonos hasta servidores basados ​​en microprocesadores, SOC (System-On-Chip) y conjuntos de chips de uno de los fabricantes más grandes (desafortunadamente, el nombre está bajo NDA), y mi idea de La simulación ha cambiado. Pero lo primero es lo primero.

Estoy seguro de que muchos de ustedes se han encontrado con simuladores, que a menudo se denominan máquinas virtuales, hipervisores. Alguien instala Parallels Studio en su Mac para ejecutar Windows desde MacOS, alguien usa un producto de VmWare - Workstation para tener otro sistema operativo (SO) ejecutándose dentro ya instalado. Aquellos familiarizados con Linux prefieren KVM y QEMU. También popular entre la gente es VirtualBox. Las personas que desarrollan profesionalmente hardware basado en FPGA (Circuitos integrados de lógica programable) conocen VCS de Synopsys y Mentor Graphics Questa. Y, sin embargo, esto es solo una pequeña parte de lo que se puede llamar simuladores.

¿Qué es un simulador?


Un simulador es un modelo, generalmente un software, un dispositivo real. En consecuencia, la simulación es un proceso de dicho modelo que repite la operación del dispositivo.

En principio, puede hacer un modelo de cualquier dispositivo, pero los más comunes son simuladores de dispositivos de microprocesador, es decir, dispositivos cuyo componente central es un microprocesador, y el resto de la lógica ya se está construyendo alrededor de él. Uno de los principales usos del simulador es lanzar programas diseñados para este microprocesador. Al mismo tiempo, usar un dispositivo real es difícil por una razón u otra, por ejemplo, puede que todavía no exista, si estamos hablando de modelar la futura generación de microprocesadores.

Airbnb en simulación - invitado y anfitrión


El código que se ejecuta dentro del simulador se llama "código invitado", puede ser un "programa invitado" o todo el "sistema operativo invitado". El sistema simulado en sí mismo simplemente se llama un "invitado". A su vez, el sistema, la computadora donde se ejecuta el simulador, se denomina "host" (host en inglés), y el sistema operativo que se ejecuta en el host en el que se ejecuta el simulador se denomina "sistema operativo host".

imagen

Por lo tanto, podemos decir que un simulador que implementa un cierto conjunto de instrucciones del sistema invitado las simula utilizando las herramientas del sistema host disponibles.

Simulación y emulación: ¿qué nombre es correcto?


El modelo puede repetir el dispositivo con diversos grados de precisión y detalle. A menudo, esto es una simulación de solo el comportamiento externo del sistema disponible para el código del programa. El código no "importa" cómo se implementa exactamente esta o aquella instrucción del procesador en su interior; lo principal es que funciona. Esta versión de la simulación es común, no es difícil de desarrollar y bastante rápida, no se ralentiza ni siquiera en las computadoras de los usuarios comunes.

Sin embargo, esto no es suficiente si queremos saber, por ejemplo, cuánto tiempo se ejecutará el programa en hardware real. Esto requiere modelar no solo el comportamiento externo, sino también una repetición de la estructura interna y la lógica del trabajo. Esto también se puede hacer con diversos grados de detalle y precisión. Es más correcto llamar a esos modelos de emuladores, que realmente emulan el dispositivo, y no "simulan" los resultados.

Crear emuladores es mucho más complicado debido a la mayor cantidad de funcionalidad que debe implementarse en el modelo. También funcionan mucho más lentamente en comparación con los simuladores del comportamiento externo del dispositivo. Con los emuladores, no estamos hablando de iniciar Windows en absoluto: puede llevar años. Nadie se dedica a la creación de un emulador de software de toda la plataforma; es muy largo y costoso. En cambio, los componentes individuales del sistema se emulan, como el mismo procesador central, y solo se inicia una parte del proceso de simulación. Son posibles varios esquemas híbridos, cuando parte del simulador es un modelo de alto nivel, parte es un modelo de bajo nivel, parte está en un FPGA y parte es en realidad una pieza de hierro real.

imagen

4 niveles de simulación detallada


Como escribí anteriormente, la opción más común es la simulación a nivel de las instrucciones del procesador, la llamada ISA (Arquitectura de conjunto de instrucciones) o, más precisamente, el resultado de su ejecución, es decir. sin emular toda la lógica interna de cómo sucede esto en un procesador real, y sin tener en cuenta el tiempo de ejecución de varias instrucciones. Estos simuladores también se denominan funcionales. Así es como funcionan VirtualBox, Vmware Workstation, Wind River Simics, KVM y QEMU. Esto le permite, convenientemente, sin acciones adicionales innecesarias, ejecutar programas diseñados para el dispositivo simulado. En otras palabras, no se requiere recompilación ni ninguna otra manipulación con programas en ejecución. En tales casos, dicen que es posible ejecutar código binario no modificado.

Si hablamos de un mayor nivel de abstracción, esta será la implementación de un cierto ABI (interfaz binaria de aplicación). En pocas palabras, ABI describe una interfaz binaria para la interacción de dos programas, generalmente un programa de usuario y una biblioteca o sistema operativo. ABI cubre convenciones de llamadas (cómo pasar parámetros y devolver valores), tamaños de tipos de datos, hacer llamadas al sistema. ¿Cómo funciona? Por ejemplo, si un programa escrito para Linux necesita crear un hilo adicional (del hilo inglés) para su ejecución, entonces se llama a la función pthread_create (). Pero, ¿qué sucede si crea una biblioteca con dicha función en Windows e implementa los mecanismos necesarios para vincular la aplicación y la biblioteca (vinculación dinámica)? En este caso, puede ejecutar aplicaciones Linux desde Windows. Windows "simulará" Linux.Esto es exactamente lo que se hizo en el subsistema de Windows para Linux en Windows 10, que le permite ejecutar aplicaciones Linux binarias no modificadas en Windows.

Ahora veamos cómo se ven los niveles más bajos y detallados de simulación. Este será el nivel de microarquitectura en el que se simulan algoritmos internos reales y bloques de procesador, como un decodificador de instrucciones, colas, una unidad de procesamiento extraordinaria, un predictor de transición, un caché, un programador y dispositivos de conteo. Tal modelado nos permite analizar la velocidad real de ejecución del programa y, por ejemplo, optimizarlos para las arquitecturas existentes. Y en el caso de simular prototipos de futuros microprocesadores, es posible predecir y evaluar el rendimiento de estos dispositivos.

Por debajo del nivel de simulación microarquitectónica se encuentra el nivel de emulación de los elementos lógicos de los que están hechos los chips modernos. Dichos emuladores son software y hardware que utilizan FPGA. La lógica FPGA se describe utilizando RTL (Registro de nivel de transferencia) en los idiomas Verilog, VHDL, etc. Después de la compilación, se obtiene una imagen (flujo de bits), que luego se muestra en el FPGA. Y para esto, no es necesario usar un soldador y comprender la ingeniería eléctrica. La placa está conectada a una computadora, por ejemplo, a través de una interfaz USB o JTAG, y un software especial del fabricante de la tarjeta FPGA realiza la grabación. El costo de estos tableros comienza desde diez dólares para las opciones más simples hasta millones de dólares para tableros FPGA grandes del tamaño de un gabinete utilizado en grandes empresas de fabricación de chips.En tales empresas, la simulación FPGA es la etapa final antes de que RTL se ponga en producción.

Si hablamos de dispositivos simples, entonces, teniendo la imagen FPGA a mano, puede contactar a compañías especializadas que harán un dispositivo real (no FPGA) con lógica programada.

La siguiente figura muestra los niveles de simulación descritos.

imagen

Además de estos niveles de simulación, también tuve que lidiar con simuladores híbridos. De hecho, son simuladores conectados entre sí, que modelan diferentes partes del sistema en diferentes niveles. Por ejemplo, debe analizar el ancho de banda de una nueva tarjeta de red que funciona junto con el controlador que se está desarrollando para un sistema operativo particular. Tal dispositivo de red, así como una serie de dispositivos relacionados, se pueden implementar primero en el nivel microarquitectura para el análisis preliminar, y luego en el FPGA, en el nivel de los elementos lógicos, para las verificaciones finales. Al mismo tiempo, el resto del sistema, que solo está parcialmente involucrado, se implementa en el nivel de instrucción. No puede prescindir de él, ya que es necesario, por ejemplo, cargar el sistema operativo, y no tiene sentido implementarlo en un nivel inferior y más complejo.

Entonces, ¿qué hay de comparar simuladores y realidad?

Como ahora está claro, no hay tarea de hacer que este o aquel simulador sea lo más similar posible a la realidad. El negocio plantea una tarea, y la simulación se realiza con el grado de "similitud" con la realidad, que es mínimamente suficiente para resolver este problema, sin perder dinero y tiempo extra. En un caso, puede ser una biblioteca simple que implementa la interfaz binaria (ABI) necesaria, y en el otro, no se puede prescindir de un simulador microarquitectural detallado.

Esta es la información más básica sobre qué son los simuladores y qué son. En el próximo artículo describiré los detalles de la implementación de simuladores de plataforma completa, modelos de ritmo y trabajo con pistas.

All Articles