Un simulador de conjunt d'instruccions (ISS) és un model de simulació, normalment codificat en un llenguatge de programació d'alt nivell, que imita el comportament d'un sistema central o microprocessador "llegint" instruccions i mantenint variables internes que representen els registres del processador.

La simulació d'instruccions és una metodologia emprada per una d'aquestes possibles raons:

Simular l'arquitectura de conjunt d'instruccions (ISA) d'un futur processador per permetre que el desenvolupament i la prova de programari continuïn sense esperar que finalitzi el desenvolupament i la producció del maquinari. Això es coneix sovint com "shift-left" o "pre-silici support" en el camp del desenvolupament de maquinari. Un simulador de sistema complet o una plataforma virtual per al futur maquinari normalment inclou un o més simuladors de conjunt d'instruccions. Per simular el codi de màquina d'un altre dispositiu de maquinari o ordinador sencer per a una compatibilitat ascendent.

Per exemple, l'IBM 1401 es va simular a l'IBM/360 posterior mitjançant l'ús de l'emulació de microcodi.

Per supervisar i executar les instruccions del codi màquina (però tractat com un flux d'entrada) al mateix maquinari amb finalitats de prova i depuració, per exemple, amb protecció de memòria (que protegeix contra el desbordament de memòria intermèdia accidental o deliberat). Millorar el rendiment de la velocitat —en comparació amb un simulador de cicle més lent i precís— de simulacions que impliquen un nucli de processador on el processador en si no és un dels elements que s'estan verificant; en disseny de llenguatge de descripció de maquinari mitjançant Verilog on simulació amb eines com ISS es pot executar més ràpid mitjançant "PLI" (no confondre amb PL/1, que és un llenguatge de programació).

Implementació Els simuladors de conjunt d'instruccions es poden implementar mitjançant tres tècniques principals:

Interpretació, on cada instrucció és executada directament per l'ISS. Compilació just-in-time (JIT), on el codi a executar es tradueix primer al conjunt d'instruccions de l'ordinador amfitrió. Això sol ser unes deu vegades més ràpid que un intèrpret ben optimitzat. Virtualització, on s'utilitzen extensions de processador per a màquines virtuals per executar instruccions a l'ISS. Això només funciona per a la simulació del mateix conjunt d'instruccions, com ara executar simuladors x86 en amfitrions x86 o simuladors ARM en amfitrions ARM.

Sovint, un ISS es proporciona (o és ell mateix) un depurador per tal que un enginyer/programador de programari depuri el programa abans d'obtenir el maquinari objectiu. GDB és un depurador que té un ISS compilat. De vegades s'integra amb circuits perifèrics simulats com ara temporitzadors, interrupcions, ports sèrie, ports d'E/S generals, etc. per imitar el comportament d'un microcontrolador.

La tècnica bàsica de simulació d'instruccions és la mateixa independentment del propòsit: primer executeu el programa de monitorització passant el nom del programa objectiu com a paràmetre d'entrada addicional.

Aleshores, el programa de destinació es carrega a la memòria, però el control mai es passa al codi. En lloc d'això, es calcula el punt d'entrada dins del programa carregat i s'estableix una paraula d'estat del pseudo programa (PSW) en aquesta ubicació. La paraula d'estat del programa (PSW) es compon d'un registre d'estat i d'un comptador de programa, el darrer dels quals significa la següent instrucció a executar. Per tant, és específicament el comptador del programa que està assignat a aquesta ubicació. Un conjunt de pseudoregistres s'estableix en el que haurien contingut si el programa hagués tingut el control directament.

Pot ser que sigui necessari modificar alguns d'aquests per apuntar a altres pseudo "blocs de control" segons el maquinari i el sistema operatiu. També pot ser necessari restablir la llista de paràmetres original per "eliminar" el paràmetre del nom del programa afegit anteriorment.

Posteriorment, l'execució es desenvolupa de la següent manera:

Determinar la durada de la instrucció a la ubicació pseudo PSW (inicialment la primera instrucció del programa objectiu). Si aquest desplaçament d'instruccions dins del programa coincideix amb un conjunt de punts de "pausa" donats anteriorment, establiu el motiu de "Pausa" i aneu a 7. "Obtenir" la instrucció de la seva ubicació original (si cal) a la memòria del monitor. Si "trace" està disponible i "activat", emmagatzemar el nom del programa, el desplaçament d'instruccions i qualsevol altre valor. Depenent del tipus d'instrucció, fer comprovacions prèvies a l'execució i executeu-la. Si la instrucció no pot continuar per qualsevol motiu (instrucció no vàlida, mode incorrecte, etc.), aneu a 7. Si la instrucció està a punt d'alterar la memòria, comproveu que la destinació de memòria existeix (per a aquest fil) i és prou gran. Si està bé, carregueu els pseudoregistres adequats als registres reals temporals, feu un moviment equivalent amb els registres reals, deseu l'adreça i la durada de l'emmagatzematge alterat si la traça està "activada" i aneu a 4. Si la instrucció és una operació de "registre a registre", carregueu pseudoregistres als registres reals del monitor, realitzeu l'operació, emmagatzemeu de nou als pseudoregistres respectius, aneu a 4. Si la instrucció és una branca condicional, determineu si la condició es compleix: si no, aneu a 4, si la condició ÉS satisfeta, calculeu la branca a l'adreça, determineu si és vàlida (si no, establiu error = "Branca salvatge" i anar a 7). Si està bé, aneu a 5. Si la instrucció és una trucada al sistema operatiu, feu una trucada real des del programa de supervisió fent "falsificar" adreces per tornar el control al programa de monitoratge i, a continuació, reinicieu els pseudoregistres per reflectir la trucada; aneu a 4. Afegeix la longitud de la instrucció al valor actual de Pseudo PSW. Emmagatzemar la propera adreça a Pseudo PSW. Anar a 1. Aturar l'execució.

Amb finalitats de prova i depuració, el programa de monitorització pot proporcionar facilitats per veure i alterar registres, memòria i ubicació de reinici o obtenir un mini bolcat de nuclis o imprimir noms de programes simbòlics amb els valors de dades actuals. Podria permetre noves ubicacions de "pausa" condicional, eliminar pauses no desitjades i similars.

La simulació d'instruccions ofereix l'oportunitat de detectar errors ABANS de l'execució, la qual cosa significa que les condicions segueixen exactament com eren i no les destrueix l'error. Un molt bon exemple del món IBM S/360 és la següent seqüència d'instruccions que pot provocar dificultats per a la depuració sense un monitor de simulació d'instruccions.

LM R14,R12,12(R13) on r13 apunta incorrectament a la cadena de X"00"s

BR R14 fa que PSW contingui X"0000002" amb la comprovació del programa "Excepció d'operació"

* tots els registres d'error contenen nulls.

Referències

Categoria:Programari Categoria:Eines