stringtranslate.com

Simulador de conjunto de instrucciones

Un simulador de conjunto de instrucciones (ISS) es un modelo de simulación , generalmente codificado en un lenguaje de programación de alto nivel , que imita el comportamiento de una computadora central o microprocesador "leyendo" instrucciones y manteniendo variables internas que representan los registros del procesador .

La simulación de instrucción es una metodología empleada por una de varias razones posibles:

Por ejemplo, el IBM 1401 se simuló en el IBM/360 posterior mediante el uso de emulación de microcódigo .

Implementación

Los simuladores de conjuntos de instrucciones se pueden implementar utilizando tres técnicas principales:

Una ISS a menudo cuenta con (o es en sí misma) un depurador para que un ingeniero / programador de software pueda depurar el programa antes de obtener el hardware de destino. GDB es un depurador que tiene una ISS compilada. A veces se integra con circuitos periféricos simulados como temporizadores , interrupciones , puertos serie , puertos de E/S generales , etc. para imitar el comportamiento de un microcontrolador .

La técnica básica de simulación de instrucciones es la misma independientemente del propósito: primero ejecute el programa de monitoreo pasando el nombre del programa de destino como parámetro de entrada adicional.

Luego, el programa de destino se carga en la memoria, pero el control nunca se pasa al código. En su lugar, se calcula el punto de entrada dentro del programa cargado y se establece una pseudo palabra de estado del programa (PSW) en esta ubicación. La palabra de estado del programa (PSW) se compone de un registro de estado y un contador de programa , el último de los cuales indica la siguiente instrucción a ejecutar. [1] Por lo tanto, es específicamente el contador de programa el que está asignado a esta ubicación. Un conjunto de pseudoregistros se configuran según lo que habrían contenido si se le hubiera dado el control directamente al programa.

Puede que sea necesario modificar algunos de ellos para que apunten a otros pseudo "bloques de control" según el hardware y el sistema operativo. También puede ser necesario restablecer la lista de parámetros original para "eliminar" el parámetro de nombre del programa agregado previamente.

Posteriormente, la ejecución se desarrolla de la siguiente manera:

  1. Determine la duración de la instrucción en la ubicación pseudo PSW (inicialmente la primera instrucción en el programa de destino). Si el desplazamiento de esta instrucción dentro del programa coincide con un conjunto de puntos de "pausa" dados previamente, establezca el motivo de "Pausa", vaya a 7.
  2. "Obtenga" la instrucción desde su ubicación original (si es necesario) en la memoria del monitor. Si "trace" está disponible y "activado", almacene el nombre del programa, el desplazamiento de la instrucción y cualquier otro valor.
  3. Dependiendo del tipo de instrucción, realice comprobaciones previas a la ejecución y ejecútela. Si la instrucción no puede continuar por algún motivo (instrucción no válida, modo incorrecto, etc.), vaya a 7. Si la instrucción está a punto de alterar la memoria, verifique que el destino de la memoria exista (para este hilo ) y que sea lo suficientemente grande. Si está bien, cargue los pseudoregistros apropiados en registros reales temporales, realice un movimiento equivalente con los registros reales, guarde la dirección y la longitud del almacenamiento alterado si el rastreo está "activo" y vaya a 4. Si la instrucción es "registro a registro" operación, cargar pseudoregistros en los registros reales del monitor, realizar la operación, almacenar nuevamente en los pseudoregistros respectivos, ir a 4. Si la instrucción es una rama condicional, determinar si se cumple la condición: si no, ir a 4, si la condición SE cumple, calcule la rama a la dirección, determine si es válida (si no, establezca el error = " Rama salvaje " y vaya a 7.) Si está bien, vaya a 5. Si la instrucción es una llamada al sistema operativo, realice una llamada real desde el programa de monitoreo "fingiendo" direcciones para devolver el control al programa de monitoreo y luego restablecer los pseudoregistros para reflejar la llamada; ir a 4.
  4. Agregue la longitud de la instrucción al valor actual de Pseudo PSW.
  5. Almacene la siguiente dirección en Pseudo PSW.
  6. Ir a 1.
  7. Detener la ejecución.

Para fines de prueba y depuración, el programa de monitoreo puede proporcionar funciones para ver y alterar registros, memoria y reiniciar la ubicación u obtener un mini volcado de núcleo o imprimir nombres de programas simbólicos con valores de datos actuales. Podría permitir nuevas ubicaciones de "pausa" condicionales, eliminar pausas no deseadas y cosas por el estilo.

La simulación de instrucciones brinda la oportunidad de detectar errores ANTES de la ejecución, lo que significa que las condiciones siguen siendo exactamente como estaban y el error no las destruye. Un muy buen ejemplo del mundo IBM S/360 es la siguiente secuencia de instrucciones que puede causar dificultades al depurar sin un monitor de simulación de instrucciones.

 LM R14,R12,12(R13) donde r13 apunta incorrectamente a una cadena de X"00" BR R14 hace que PSW contenga X"0000002" con la verificación del programa "Excepción de operación"* todos los registros en caso de error contienen valores nulos.

Consecuencias

Gastos generales

El número de instrucciones para realizar el "bucle" básico anterior (Buscar/Ejecutar/calcular nueva dirección) depende del hardware, pero podría lograrse en la gama de máquinas IBM S/360 /370/390/ES9000 en alrededor de 12 o 13 instrucciones para muchos tipos de instrucciones. La comprobación de ubicaciones de memoria válidas o de "pausas" condicionales aumenta considerablemente la sobrecarga, pero las técnicas de optimización pueden reducirla a niveles aceptables. Para fines de prueba, esto normalmente es bastante aceptable ya que se proporcionan poderosas capacidades de depuración que incluyen pasos de instrucción , seguimiento y salto deliberado a la rutina de error de prueba (cuando no hay un error real). Además, se puede utilizar un seguimiento de instrucciones completo para probar la cobertura del código real (ejecutado) .

Beneficios añadidos

Ocasionalmente, monitorear la ejecución de un programa objetivo puede ayudar a resaltar errores aleatorios que aparecen (o a veces desaparecen) durante el monitoreo pero no en la ejecución real. Esto puede suceder cuando el programa de destino se carga en una ubicación diferente a la normal debido a la presencia física del programa de monitoreo en el mismo espacio de direcciones.

Si el programa de destino toma el valor de una ubicación "aleatoria" en la memoria (una que generalmente no es "propia"), puede, por ejemplo, ser nulos (X"00") en casi todas las situaciones normales y el programa funciona bien. . Si el programa de monitoreo cambia el punto de carga, puede captar, digamos, X"FF" y la lógica provocaría resultados diferentes durante una operación de comparación. Alternativamente, si el programa de monitoreo ocupa ahora el espacio desde donde se "recoge" el valor, podrían ocurrir resultados similares.

Errores de reentrada: el uso accidental de variables estáticas en lugar de memoria de subprocesos "dinámica" puede causar problemas de reentrada en muchas situaciones. El uso de un programa de monitoreo puede detectarlos incluso sin una clave de protección de almacenamiento.

Operaciones ilegales: algunos sistemas operativos (o hardware) requieren que el programa de aplicación esté en el "modo" correcto para ciertas llamadas al Sistema Operativo. La simulación de instrucciones puede detectar estas condiciones antes de la ejecución.

Análisis de puntos calientes y uso de instrucciones al contar las instrucciones ejecutadas durante la simulación (que coincidirán con el número ejecutado en el procesador real o la ejecución no supervisada), el simulador puede proporcionar una medida del rendimiento relativo entre diferentes versiones del algoritmo y también usarse para detectar "puntos calientes" donde el programador puede orientar la optimización . En esta función, se puede considerar una forma de análisis de rendimiento , ya que no es fácil obtener estas estadísticas durante una ejecución normal y esto es especialmente cierto para programas de lenguaje de alto nivel que efectivamente "disfrazan" el alcance de las instrucciones de código de máquina por su naturaleza.

Propósitos educativos

Algunos de estos simuladores de software aún se utilizan como herramientas para la enseñanza del lenguaje ensamblador y la arquitectura del conjunto de instrucciones, y algunos están diseñados específicamente utilizando múltiples capas de simulación y simulación de ISA a ISA, con la capacidad incluso de diseñar ISA y simularlos. [2]

Crítica

En el primer volumen de El arte de la programación informática , Donald Knuth escribió: "En opinión del autor, los programadores han dedicado demasiado tiempo a escribir tales simuladores [en lenguaje de máquina] y se ha desperdiciado demasiado tiempo de computadora usándolos". ". [3] Sin embargo, en la siguiente sección, el autor brinda ejemplos de cómo dichos simuladores son útiles como rutinas de seguimiento o monitoreo con fines de depuración.

Ejemplo

Salida de seguimiento típica de la simulación mediante el programa de monitoreo utilizado para prueba y depuración:

 Instrucción de compensación  del programa Registro/almacenamiento desensamblado (después de la ejecución)  PRUEBA001 000000 X'05C0' BALR R12,0 R12=002CE00A 000002 X'47F0C00E' antes de Cristo 15,X'00C'(R12)  00000E X'98ECD00C' STM R14,R12,X'00C'(R13) X'002E0008' ==> X'00004CE,002CE008,..etc....' 000012 X'45E0C122' BAL R14,X'122'(R12) R14=002C0016SUB1 000124 X'50E0C28A' ST R14,X'28A'(R12) X'002CE294' ==> X'002C0016'etc...

Ver también

Simuladores

Otro

Referencias

  1. ^ Hayes, John P. (1978). Arquitectura y Organización de Computadores . Compañía internacional del libro McGRAW-HILL. pag. 51.ISBN​ 0-07-027363-4.
  2. ^ Almasri, I., Abandah, G., Shhadeh, A., Shahrour, A. (diciembre de 2011). Simulador ISA universal con implementación de procesador suave FPGA. En Ingeniería eléctrica aplicada y tecnologías informáticas (AEECT), Conferencia IEEE Jordan de 2011 (págs. 1 a 6). IEEE.
  3. ^ "El arte de la programación informática", Donald Knuth , 1997, volumen 1, tercera edición, página 202.

enlaces externos