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 un mainframe o microprocesador "leyendo" instrucciones y manteniendo variables internas que representan los registros del procesador .

La simulación de instrucciones es una metodología que se emplea por una de varias razones posibles:

Por ejemplo, el IBM 1401 fue simulado en el posterior IBM/360 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:

A menudo, una ISS se proporciona con (o es en sí misma) un depurador para que un ingeniero de software / programador depure 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 se ejecuta el programa de monitoreo pasando el nombre del programa de destino como un parámetro de entrada adicional.

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

Puede ser necesario modificar algunos de estos parámetros 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 de programa agregado anteriormente.

Posteriormente la ejecución se realizará de la siguiente manera:

  1. Determinar la longitud de la instrucción en la ubicación de pseudo PSW (inicialmente la primera instrucción en el programa de destino). Si este desplazamiento de instrucción dentro del programa coincide con un conjunto de puntos de "pausa" dados previamente, establecer el motivo de la "pausa" y pasar a 7.
  2. "Recuperar" la instrucción de su ubicación original (si es necesario) en la memoria del monitor. Si "trace" está disponible y "activado", almacenar el nombre del programa, el desplazamiento de la instrucción y cualquier otro valor.
  3. Según el 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 al paso 7. Si la instrucción está a punto de alterar la memoria, verifique que el destino de la memoria exista (para este subproceso ) y que sea lo suficientemente grande. Si está bien, cargue los pseudo registros apropiados en los 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á "activado" y vaya a 4. Si la instrucción es una operación "de registro a registro", cargue los pseudo registros en los registros reales del monitor, realice la operación, vuelva a almacenarlos en los pseudo registros respectivos, vaya a 4. Si la instrucción es una bifurcación condicional, determine si se cumple la condición: si no, vaya a 4, si la condición SÍ se cumple, calcule la bifurcación a la dirección, determine si es válida (si no, establezca el error = " Bifurcación salvaje " y vaya a 7). Si está bien, vaya a 5. Si la instrucción es una llamada del sistema operativo, haga una llamada real desde el programa de monitoreo "falsificando" direcciones para devolver el control al programa de monitoreo y luego restablezca los pseudo registros para reflejar la llamada; vaya a 4.
  4. Agrega la longitud de la instrucción al valor actual de Pseudo PSW.
  5. Almacenar la próxima 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 modificar registros, memoria y ubicación de reinicio u obtener un minivolcado de memoria 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 ofrece la posibilidad de detectar errores ANTES de la ejecución, lo que significa que las condiciones siguen siendo exactamente las mismas que antes y no se han visto destruidas por el error. Un buen ejemplo del mundo IBM S/360 es la siguiente secuencia de instrucciones que puede causar dificultades de depuración sin un monitor de simulación de instrucciones.

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

Consecuencias

Arriba

El número de instrucciones para realizar el "bucle" básico anterior (obtener/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 potentes capacidades de depuración que incluyen paso de instrucción , seguimiento y salto deliberado a la rutina de error de prueba (cuando no hay ningún error real). Además, se puede utilizar un seguimiento de instrucción completo para probar la cobertura del código real (ejecutado) .

Beneficios adicionales

En ocasiones, supervisar la ejecución de un programa de destino puede ayudar a destacar errores aleatorios que aparecen (o a veces desaparecen) durante la supervisión, 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 supervisión en el mismo espacio de direcciones.

Si el programa de destino toma el valor de una ubicación "aleatoria" en la memoria (una que no es "suya" habitualmente), puede ser, por ejemplo, nulo (X"00") en casi todas las situaciones normales y el programa funciona bien. Si el programa de monitoreo cambia el punto de carga, puede tomar, por ejemplo, X"FF" y la lógica provocaría resultados diferentes durante una operación de comparación. Alternativamente, si el programa de monitoreo ahora está ocupando el espacio de donde se está "tomando" el valor, pueden ocurrir resultados similares.

Errores de reentrada: el uso accidental de variables estáticas en lugar de memoria de subproceso "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 mediante el recuento de las instrucciones ejecutadas durante la simulación (que coincidirá con el número ejecutado en el procesador real o la ejecución no supervisada), el simulador puede proporcionar tanto una medida del rendimiento relativo entre diferentes versiones del algoritmo como también puede utilizarse para detectar "puntos calientes" donde el programador puede apuntar a la optimización . En este papel puede considerarse una forma de análisis de rendimiento ya que no es fácil obtener estas estadísticas en una ejecución normal y esto es especialmente cierto para los programas de lenguaje de alto nivel que efectivamente "disfrazan" el alcance de las instrucciones de código de máquina por su naturaleza.

Fines 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 simularlas. [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 estos simuladores [de lenguaje máquina] y se ha desperdiciado demasiado tiempo informático en utilizarlos". [3] Sin embargo, en la siguiente sección, el autor da ejemplos de cómo estos simuladores son útiles como rutinas de seguimiento o monitorización para fines de depuración.

Ejemplo

Salida de seguimiento típica de la simulación realizada mediante un programa de monitoreo utilizado para pruebas y depuración:

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

Véase también

Simuladores

Otro

Referencias

  1. ^ Hayes, John P. (1978). Arquitectura y organización de computadoras . McGraw-HILL International Book Company. pág. 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 FPGA de procesador suave. En Applied Electrical Engineering and Computing Technologies (AEECT), Conferencia IEEE Jordan de 2011 (pp. 1–6). IEEE.
  3. ^ “El arte de la programación informática”, Donald Knuth , 1997, Volumen 1, 3.ª edición, página 202.

Enlaces externos