1 ARQUITECTURA DEL ALPHA Para comprender con posterioridad

Anuncio
1 ARQUITECTURA DEL ALPHA
Para comprender con posterioridad el porqué del funcionamiento del simulador es necesario conocer la
arquitectura del microprocesador en la que nos hemos basado. Ese es el objetivo de este segundo
apartado en el que se explicarán las principales características de la arquitectura del Alpha 21164PC.
En los sucesivos subapartados se explicaran los tipos de datos que soporta el Alpha, el conjunto de
registros que maneja, los formatos de instrucciones, como accede a memoria, su
microarquitectura(lanzamiento de múltiples instrucciones) y PALcode(tratamiento de las excepciones).
A continuación se detallan una serie de puntos que diferencian al Alpha de cualquier otro
microprocesador y que nos servirán a modo de introducción:
Arquitectura real de 64 bits. Todos los registros son de 64 bits y todas las operaciones se
realizan entre registros de 64 bits. No es una arquitectura de 32 bits que más tarde fue ampliada a una
de 64 bits.
Manipulación de bytes y words. La arquitectura del Alpha lee y escribe bytes y words entre
registros y memoria mediante las instrucciones LDBU y STB(bytes) y LDWU y STW(words).
Memoria compartida multiprocesador. La secuencia de interbloqueo básica que se emplea en
un sistema multiprocesador en el que se quiere acceder a la memoria compartida consiste en: cargabloqueo, modificación y almacenamiento-condicional. Si la secuencia se ejecuta sin interrupciones,
excepciones o una escritura por parte de otro procesador, entonces el almacenamiento condicionado
tiene éxito. En otro caso el almacenamiento fracasa y el programa debe retroceder de forma eventual y
reintentar la secuencia.
PALcode. Es una librería de arquitectura privilegiada, que consiste en un juego de subrutinas que
son específicas de una implementación de sistema operativo Alpha particular. Estas subrutinas
proporcionan al sistema operativo primitivas para facilitar el cambio de contexto, interrupciones,
excepciones y manejo de memoria. PALcode es similar a las librerías de la BIOS que son
proporcionadas en los ordenadores personales. Las subrutinas se pueden invocar por hardware o por
software(mediante las instrucciones CALL_PAL).
Direccionamiento. La unidad básica direccionable es el byte. Las direcciones virtuales son de 64
bits. Una implementación puede soportar un espacio de direcciones virtuales más pequeño. Las
direcciones virtuales vistas por el programa son traducidas a direcciones de memoria física por un
mecanismo de manejo de memoria. Una implementación debe incluir soporte tanto para el
direccionamiento little–endian como para el big-endian.
2. MODELO DE PROGRAMACIÓN
2.1 TIPOS DE DATOS
2.1.1 BYTE
Un byte son 8 bits contiguos de memoria que comienzan en el límite de un byte direccionable. Los bits
son numerados de derecha a izquierda, de 0 a 7, como se muestra en la figura:
Un byte se especifica por su dirección A. Un byte es un valor de 8 bits. El byte esta soportado en el
Alpha sólo por las instrucciones de carga, almacenamiento, extensión de signo, extracción,
enmascaramiento, inserción y zap.
2.1.2 WORD
Una palabra(word) son dos bytes contiguos que empiezan en el límite de un byte arbitrario. Los bits son
numerados de derecha a izquierda, de 0 a 15, como se muestra en la figura:
Una palabra se especifica por su dirección, la dirección del byte que contiene el bit 0.
Una palabra es un valor de 16 bits. La palabra se soporta en la arquitectura Alpha sólo por las
instrucciones de carga, almacenamiento, extensión de signo, extracción, enmascaramiento e inserción.
2.1.3 LONGWORD
Una palabra larga(longword) son cuatro bytes contiguos que comienzan en el límite de un byte
arbitrario. Los bits se numeran de derecha a izquierda, de 0 a 31, como se muestra en la figura:
Una longword se especifica por su dirección A, la dirección del byte que contiene el bit 0. Una longword
es un valor de 32 bits.
Cuando se interpreta de forma aritmética, una longword es un entero en complemento a dos en el cual
el bit más significativo es el 0 y el 31 es el de signo. La palabra larga sólo es soportada en el Alpha por
las instrucciones de carga y almacenamiento con extensión de signo y por las aritméticas que operan
sobre longwords.
2.1.4 QUADWORD
Una cuádruple palabra(quadword) son ocho bytes contiguos que comienzan en el límite de un byte
arbitrario. Los bits son numerados de derecha a izquierda, de 0 a 63, como se muestra en la figura:
Una quadword se especifica por su dirección A, la dirección del byte que contiene el bit 0. Es un valor
de 64 bits. Cuando se interpreta aritméticamente, una quadword puede ser un entero en complemento
a dos, siendo el bit 0 el menos significativo y el 63 el de signo, o como un entero sin signo, en cuyo
caso el bit más significativo sería el 63.
2.1.5 FORMATOS VAX EN COMA FLOTANTE
Los números VAX en coma flotante se almacenan en memoria según un juego de formatos y en los
registros de coma flotante según un segundo juego de formatos. Las instrucciones de carga y
almacenamiento en coma flotante pasan de un formato a otro realojando los bits, no se realiza ningún
tipo de redondeo ni de chequeo de rango por dichas instrucciones.
F_floating. Son cuatro bytes contiguos en memoria. Los bits se etiquetan del 0 al 31 como se ve
en la figura:
En un registro flotante de 64 bits se justifica a la izquierda como se aprecia en la figura:
G_floating. Ocupa ocho bytes contiguos de memoria que comienzan en el límite de un byte
arbitrario. Los bits se etiquetan de 0 a 63 como se ve en la figura:
En un registro de coma flotante se almacena según el siguiente formato:
D_floating. Ocupa ocho bytes contiguos de memoria, ver figura:
En un registro de coma flotante se almacena según muestra la figura:
2.1.6 FORMATOS IEEE EN COMA FLOTANTE
El estándar IEEE para aritmética binaria en coma flotante, ANSI/IEEE 754-1985, define cuatro formatos
en coma flotante en dos grupos, básico y extendido, cada uno tiene dos anchos, simple y doble. La
arquitectura del Alpha soporta los formatos simple y doble básicos, con el formato básico doble como si
fuera el formato extendido simple.
S_Floating. Un dato IEEE en simple precisión, o S_Floating, ocupa cuatro bytes contiguos de
memoria empezando en el límite de un byte arbitrario. Los bits se etiquetan del 0 al 31 como muestra la
figura:
Cuando esta almacenado en un registro de coma flotante, se justifica a la izquierda como indica la
figura:
T_Floating. Un dato IEEE en doble precisión, o T_Floating, ocupa ocho bytes contiguos de
memoria, los bits se etiquetan del 0 al 63 como muestra la figura:
Cuando el dato esta almacenado en un registro de coma flotante adquiere el formato siguiente:
X_Floating. El soporte para el tipo de dato IEEE de precisión extendida en coma flotante(128 bits)
es inicialmente proporcionado a través de software. Ocupa 16 bytes contiguos en memoria, los bits se
etiquetan del 0 al 127 como se muestra en la figura:
Un dato X_Floating ocupa dos registro de coma flotante consecutivos(como F4/F5) como se muestra a
continuación:
2.1.7 FORMATO DE UNA LONGWORD EN UNIDADES DE COMA FLOTANTE
Un operando entero de tipo longword ocupa 64 bits en un registro de coma flotante adquiriendo el
siguiente formato:
2.1.8 FORMATO DE UNA QUADWORD EN UNIDADES DE COMA FLOTANTE
Un operando entero de tipo quadword ocupa 64 bits en un registro de coma flotante con el formato que
indica la figura:
2.2 SOPORTE PARA DIRECCIONAMIENTO BIG-ENDIAN
Las implementaciones que incluyan soporte para direccionamiento big-endian deben proporcionar los
siguientes aspectos:
La convención numérica elegida durante la secuencia de arranque no podrá cambiarse durante el
tiempo de ejecución y afectará a todo el código ejecutado tanto por el sistema operativo como por el
usuario.
Si se elige el convenio big-endian las instrucciones de carga/almacenamiento de longwords
invertirán el bit 2 de la dirección virtual, de esta manera se accederá a la mitad de una quadword en
lugar de a lo que se accedería bajo la convención little-endian.
Si se elige la convención big-endian las instrucciones de manipulación de bytes(extracción,
inserción y enmascaramiento) invertirán los bits del 2 al 0 de la dirección virtual.
Las instrucciones se consideran siempre bajo la convención little-endian, y son independientes de la
convención numérica elegida, de esta manera la instrucción más a la derecha de una quadword se
ejecutará siempre la primera.
En una máquina little-endian los bytes se numeran de derecha a izquierda, como se muestra en la
figura:
En una big-endian se numeran de izquierda a derecha como se puede ver:
2.3
REGISTROS DEL ALPHA
El hardware del estado del procesador incluye:
2.3.1 CONTADOR DE PROGRAMA
Es un registro especial que direcciona el flujo de instrucciones. Según cada instrucción es decodificada,
el PC avanza a la siguiente instrucción secuencial, desde ese momento el PC recibe el nombre de PC
actual. Cualquier instrucción que utilice el valor del PC, utilizará el PC actualizado. El PC sólo incluye
los bits del 63 al 2, puesto que los bits 1 y 0 se leen como cero y se ignora cualquier escritura sobre
ellos. Esta cantidad es una dirección longword alineada. El PC es un operando implícito en las
instrucciones de salto condicional y de salto a subrutina. El PC no es accesible como un registro de
entero.
2.3.2 REGISTROS DE ENTEROS
Hay 32 registros de enteros(R0 al R31), cada uno de 64 bits.
El registro R31 tiene un significado especial para la arquitectura del Alpha. Cuando R31 se especifica
como operando fuente, se devuelve un operando cero.
Para todos los casos excepto para las instrucciones de salto incondicional(Uncondicional Branch) y
saltos(Jump), los resultados de las instrucciones que especifiquen el registro R31 como destino son
descartados. En el caso de las anteriormente mencionadas instrucciones de salto, el PC no es salvado
en el registro R31.
2.3.3 REGISTROS DE COMA FLOTANTE
Hay 32 registros de coma flotante(F0 al F31), cada uno de 64 bits.
Cuando el registro F31 se especifica como operando fuente, un cero verdadero es devuelto.
Los resultados de las instrucciones que especifiquen el registro F31 como operando destino son
descartados.
2.3.4 REGISTROS DE BLOQUEO
Hay dos registros por procesador asociados a las instrucciones de carga/almacenamiento en memoria
compartida, LDx_L y STx_C, que son la bandera de bloqueo(lock_flag) y el registro bloqueado de
dirección física(locked_physical_address).
2.3.5 REGISTROS OPCIONALES
Registros de prebúsqueda de memoria. Si las instrucciones de prebúsqueda, FETCH y
FETCH_M, están implementadas, dicha implementación deberá incluir dos juegos de registros de
estado de prebúsqueda que serán utilizados por las instrucciones en cuestión, y no serán directamente
accesibles por software.
Registros de compatibilidad VAX. Las instrucciones de compatibilidad VAX RC y RS incluyen el
registro intr_flag.
2.3.6 REGISTROS INTERNOS DEL PROCESADOR
Los registros internos del procesador(IPRs) se organizan de la siguiente manera:
IPRs de la unidad de búsqueda/decodificación y salto(IDU). En este grupo de registros se
encuentran aquellos que se utilizan para el tratamiento de las excepciones.
IPRs de la unidad de traducción de direcciones de memoria(MTU).
IPRs de la unidad de control de cache y de la interface de bus(CBU).
Registros de almacenaje PAL. La IDU mantiene un banco de 24 registros temporales PAL.
2.4 FORMATOS DE INSTRUCCIÓN
Todos los formatos de instrucción son de 32 bits, con los 6 bits de mayor peso como el campo código
de operación.
Cualquier campo de registro(Ra, Rb, Fa o Fb) no utilizado debe valer 31.
2.4.1 FORMATO DE INSTRUCCIÓN DE MEMORIA
Se utiliza para transferir datos entre registros y memoria, para cargar una dirección efectiva y para
saltos a subrutina. Tiene el formato que se muestra a continuación:
Tiene un campo de 6 bits para el código de operación, dos campos de registros de dirección de 5 bits,
Ra y Rb, y un campo desplazamiento con signo de 16 bits.
El campo desplazamiento se trata como un offset de tipo byte. Se extiende de signo y se suma con el
contenido del registro Rb para formar una dirección virtual. El desbordamiento se ignora al realizar este
cálculo.
La dirección virtual se utiliza como una dirección de memoria de carga/almacenamiento o como un
resultado, dependiendo de la instrucción.
Formato de instrucción de memoria con un código de función. Reemplazan el campo
desplazamiento en el formato de instrucción de memoria por un código de función que designa un
juego de instrucciones misceláneas. El formato es el que muestra la figura:
Los códigos de función desconocidos producen resultados impredecibles; además del campo código de
operación y del de función hay otros dos campos, Ra y Rb, cuyo uso dependerá de la instrucción.
Formato de memoria de las instrucciones de salto(Jump). Para instrucciones de salto
computado el campo desplazamiento se usa para proporcionar la posible dirección de salto. Los cuatro
códigos de operación de las distintas instrucciones de salto se pasan en los bits 15 y 14 del campo
desplazamiento.
2.4.2 FORMATO DE INSTRUCCIÓN DE SALTO(BRANCH)
Se utiliza para instrucciones de salto condicional y para las de salto a subrutina relativo al PC. Formato:
Tiene 6 bits para el código de operación, un campo para el registro de dirección de 5 bits(Ra), y un
campo de desplazamiento con signo de 21 bits.
El desplazamiento es tratado como un offset de tipo longword, es decir, es desplazado a la izquierda 2
bits, extendido de signo y sumado al PC actualizado para formar una dirección virtual. El
desbordamiento se ignora al realizar dicho cálculo.
2.4.3 FORMATO DE INSTRUCCIÓN DE OPERACIÓN
Se utiliza por las instrucciones que realizan operaciones registro entero-registro entro. Permite
especificar un registro destino(Rc) y dos registros fuente(Ra y Rb), uno de los cuales puede ser un dato
inmediato. Las siguientes figuras muestran los dos posibles casos cuando el bit 12 de la instrucción es
0 o 1:
El formato contiene un campo de código de operación de 6 bits y un campo función de 7 bits.
2.4.4 FORMATO DE INSTRUCCIÓN DE OPERACIÓN EN COMA FLOTANTE
Se utiliza en instrucciones que realizan operaciones registro flotante-registro flotante. El formato
especifica un registro destino(Fc), y dos registros fuente(Fa y Fb) y es como sigue:
Contiene un campo de código de operación de 6 bits y un campo función de 11 bits.
Las instrucciones de conversión en coma flotante utilizan un subjuego de las instrucciones de
operación en coma flotante y realizan operaciones de conversión registro-registro. Fb es el operando
fuente y Fa debe ser F31.
Las instrucciones que mueven datos entre registros de coma flotante y registros de enteros son un
subjuego del formato de instrucción de operación en coma flotante. Los campos fuente no utilizados
deben ser 31.
2.4.5 FORMATO DE INSTRUCCIÓN PALcode
El formato de la librería de arquitectura privilegiada(PALcode) se utiliza para especificar funciones
extendidas del procesador. Tiene el formato que muestra la figura:
El campo función de 26 bits especifica la operación. Los operandos fuente y destino se especifican en
la descripción de la instrucción individual.
2.5 ACCESO A MEMORIA
Sólo se puede acceder a longwords o quadwords alineadas, una longword alineada es un dato cuya
dirección es múltipla de cuatro y una quadword es un dato cuya dirección es múltipla de ocho.
Se permite acceder a los datos tanto bajo la vista little-endian como bajo la vista big-endian.
Las direcciones virtuales son de 64 bits y son mapeadas a direcciones físicas utilizando tamaños de
página completos. La protección de memoria se realiza por página base.
En una implementación multiprocesador, la memoria principal compartida tiene las mismas direcciones
físicas en todos los procesadores.
La memoria tiene granularidad longword, es decir, dos procesadores pueden acceder simultáneamente
a longwords adyacentes sin interferirse entre ellos.
El microprocesador Alpha 21164PC presenta una memoria cache de instrucciones de mapeo directo de
16KB y una cache de datos(write-through) de puerto dual de mapeo directo 8KB.
2.6 MICROARQUITECTURA
A continuación se describe la arquitectura del chip y de las principales unidades funcionales.
La figura de la página 2-13 muestra un diagrama de bloques del 21164PC, que consiste en lo siguiente:
Unidad de búsqueda/decodificación y salto(IDU).
Unidad de ejecución de enteros(IEU).
Unidad de ejecución de coma flotante(FPU).
Unidad de traducción de dirección de memoria(MTU).
Unidad de control de cache e interface de bus(CBU).
Cache de datos(Dcache).
Cache de instrucciones(Icache).
Interface de memoria serie de sólo-lectura(SROM).
2.6.1 UNIDAD DE BÚSQUEDA/DECODIFICACIÓN Y SALTO(IDU)
La función principal de la IDU es la de manejar y lanzar instrucciones a la IEU, MTU y FPU. También
maneja la cache de instrucciones.
Prebúsqueda y decodificación de instrucciones. La IDU maneja grupos naturalmente alineados
de cuatro instrucciones(INT16), no avanza a un nuevo grupo de instrucciones hasta que todas las
instrucciones de un grupo han sido lanzadas.
Predicción de salto. Es necesaria para predecir y comenzar a buscar el flujo de instrucciones
destino antes de que la instrucción de salto sea lanzada. Cada instrucción en la cache de instrucciones
contiene dos bits de estado de historia para grabar el resultado de una instrucción de salto.
Buffer de traducción de instrucciones. La IDU incluye un buffer de traducción de
instrucciones(ITB) de 48 entradas completamente asociativo. El buffer almacena la traducción de las
direcciones del flujo de instrucciones(Istream) más recientemente utilizado.
Interrupciones. La IDU soporta tres fuentes de interrupción:
•
•
•
Interrupciones hardware.
Interrupciones software.
Interrupciones asíncronas del sistema.
2.6.2 UNIDAD DE EJECUCIÓN DE ENTEROS(IEU)
Contiene dos cauces de ejecución de enteros de 64 bits(E0 y E1), la unidad incluye:
Dos sumadores.
Dos cajas lógicas.
Un desplazador.
Manipulación lógica a nivel de byte.
Un multiplicador de enteros.
2.6.3 UNIDAD DE EJECUCIÓN EN COMA FLOTANTE(FPU)
Puede ejecutar instrucciones en punto flotante en los formatos IEEE y VAX. La FPU contiene:
Un banco de registros en coma flotante de 64 bits de 40 entradas.
Un registro de control accesible por el usuario.
Un cauce de multiplicación en coma flotante.
Un cauce de suma en coma flotante.
2.6.4 UNIDAD DE TRADUCCIÓN DE DIRECCIONES DE MEMORIA(MTU)
Contiene tres secciones principales:
Un buffer de traducción de datos(DTB). Traduce a direcciones físicas las direcciones virtuales
que se reciben de la IEU. Tiene 64 entradas, es completamente asociativo y almacena las entradas de
tabla de página(PTEs) del flujo de datos más recientemente utilizado.
Un banco de direcciones fallidas(MAF). Si un dato no se encuentra en la cache de datos(se
produce un fallo de cache), entonces la dirección, el número de registro destino, y el resto de
información se pasa al banco de direcciones fallidas.
Un buffer de escritura de direcciones. Tiene seis entradas de 32 bytes. Proporciona un recurso
finito que recibe datos que deben ser almacenados para así minimizar el número de ciclos que la CPU
permanece parada.
2.6.5 UNIDAD DE CONTROL DE CACHE E INTERFACE DE BUS(CBU)
Procesa todos los accesos enviados por la MTU e implementa todas las funciones de interface
externas relacionadas con la memoria, particularmente las funciones del protocolo de coherencia para
el cacheo “write back”.
2.6.6 ORGANIZACIÓN DE LA CACHE
El 21164PC tiene dos caches de primer nivel, una de datos y otra de instrucciones, también
proporciona control para una cache externa de segundo nivel.
2.6.7 ENCAUZAMIENTO
El 21164PC tiene un cauce de 7 estados(o 7 ciclos) para las instrucciones de operación de enteros y
para las de referencia de memoria y un cauce de 9 estados para las de operación en coma flotante.
Estados del cauce y lanzamiento de instrucciones. El cauce del 21164PC divide el procesado
de las instrucciones en cuatro estados estáticos y en un número de estados dinámicos de ejecución.
Los cuatro primeros estados consisten en la búsqueda de la instrucción, buffer y decodificación, lógica
slotting y lógica issue-check; estos estados son estáticos y en ellos las instrucciones pueden
permanecer durante múltiples ciclos mientras esperan por un recurso o están paradas por otras
razones. Los estados dinámicos(IEU y FEU) siempre avanzan estados y no se ven afectados por
parones en el cauce. Después de ser lanzada, una instrucción no puede pararse en posteriores
estados del cauce, el estado issue es responsable de asegurarse de que todos los conflictos de
recursos se han resuelto antes de permitir a la instrucción continuar
Abortos y excepciones. En ambos casos el cauce debe ser vaciado de todas las instrucciones
subsiguientes a la que causó la condición de aborto.
2.6.8 REGLAS PARA EL LANZAMIENTO DE INSTRUCCIONES
La función lógica slotting de la IDU determinará que instrucciones serán lanzadas. Detecta y resuelve
todos los conflictos de recursos estáticos(cauces). El conjunto de instrucciones seleccionadas por la
función slotting, será lanzado si no se detectan conflictos por registros o recursos dinámicos en el
estado 3(issue) del cauce. El 21164PC siempre lanza las instrucciones en orden. La función slotting
detiene su proceso cuando alguna de las siguientes reglas no se cumple:
Una instrucción de carga no se puede lanzar simultáneamente con una de almacenamiento.
Todas las instrucciones son descartadas en el estado slotting después de que una instrucción de
salto condicional o de salto a subrutina se predice como tomado.
Después de una instrucción de salto condicional que se predice como no tomado, no se pueden
lanzar juntas instrucciones de salto condicional o de salto a subrutina.
No todas las instrucciones que pasan del estado slotting al estado issue son lanzadas.
Después del estado slotting el lanzamiento de las instrucciones dependerá de la disponibilidad de los
registros para las operaciones de lectura y escritura y también de la disponibilidad de la unidad de
división en punto flotante y de la de multiplicación de enteros.
Hay dependencias de tipo productor-consumidor, productor-productor(también conocidas como
conflictos de escritura después de escritura), y dependencias de disponibilidad de las unidades
funcionales dinámicas. La lógica de la IDU en el estado 3 del cauce(issue-check) detecta todos estos
conflictos.
Dependencia productor-productor. Causa parones en el lanzamiento para preservar el orden de
escritura. Si dos instrucciones escriben el mismo registro, son forzadas por la IDU a hacerlo en
diferentes ciclos. Esto es necesario para asegurarse de que el resultado correcto se deja en el banco
de registros después de que ambas instrucciones han sido ejecutadas.
Dependencia productor-consumidor. Este tipo de dependencia puede ocurrir en situaciones de
lanzamiento múltiple cuando un registro es rehusado. En estos casos la latencia es igual o mayor que
la de productor-productor.
Resumiendo, ninguna instrucción puede ser lanzada mientras no se garantice que todas las
operaciones de escritura sobre los registros destino se completarán en orden de lanzamiento y que no
hay operaciones de escritura sobre los registros fuente, o que esas operaciones se pueden resolver
mediante bypass.
2.7 PALcode
PALcode está escrita en código máquina estándar con algunas implementaciones específicas que
proporcionan acceso al hardware de más bajo nivel. PALcode tiene características que lo hacen
aparecer como una combinación de microcódigo, ROM BIOS, y rutinas de servicio del sistema.
PALcode existe por otras razones más importantes:
Hay algunas funciones demasiado complicadas para ser implementadas por hardware, pero que
no pueden ser manejadas por las rutinas de un sistema operativo normal.
Hay funciones que deben ejecutarse automáticamente, que involucran largas secuencias de
código que pueden necesitar un acceso total al hardware de más bajo nivel.
Hay algunas instrucciones necesarias para mantener la compatibilidad con arquitecturas más
antiguas.
En todos estos casos, las rutinas PALcode se utilizan para proporcionar la función deseada.
PALcode se puede invocar mediante los siguientes eventos:
Reset.
Excepciones del hardware del sistema.
Excepciones del manejo de memoria.
Interrupciones.
Instrucciones CALL_PAL.
PALcode se ejecuta en un ambiente especial denominado PALmode, mientras que la máquina
permanece en este estado, el programa tiene acceso privilegiado a todo el hardware del sistema y las
interrupciones no están habilitadas.
2.7.1 INVOCANDO PALcode
Cada uno de los eventos que dan paso al modo PAL, proporcionan acceso a una serie de rutinas, cada
una de las cuales está indexada como un offset a partir de una dirección base. La dirección base del
PALcode se puede programar(se almacena en el IPR PAL_BASE), normalmente es el código de reset
del sistema el que inicializa dicho registro.
Cuando ocurre un evento que necesita invocar al PALcode, el 21164PC lo primero que hace es vaciar
el cauce, el valor actual del PC se guarda en el IPR EXC_ADDR, y la rutina PALcode apropiada se
ejecuta. La máquina ha pasado al modo PAL. Cuando la instrucción HW_REI se ejecuta al final de la
rutina PALcode, el hardware ejecuta un salto a la dirección contenida en el IPR EXC_ADDR.
El LSB se utiliza para indicarle al hardware que se está en modo PAL, generalmente cuando se vuelve
de una rutina PAL, el LSB se pone a cero, en cuyo caso, el hardware carga el nuevo PC, habilita las
interrupciones y el mapeo de memoria, y devuelve el control al usuario.
2.7.2 PUNTOS DE ENTRADA AL PALcode
El 21164PC tiene dos tipos de puntos de entrada al PALcode, que son las CALL_PAL y las traps:
Entrada CALL_PAL. Se utilizan cuando la IDU encuentra una instrucción CALL_PAL en el flujo de
instrucciones(Istream). Las instrucciones CALL_PAL comienzan en los siguientes offsets:
•
•
Las instrucciones CALL_PAL privilegiadas comienzan en el offset 2000H.
Las no privilegiadas en el 3000H.
Puntos de entrada al PALcode mediante traps. En la siguiente tabla se muestran los offsets a
partir del IPR EXC_ADDR para cada una de las traps. El listado de los puntos de entrada se realiza de
mayor a menor prioridad:
2.8 JUEGO DE INSTRUCCIONES DEL ALPHA 21164PC
A continuación(página 2-20) se muestra un listado del juego de instrucciones comunes; existen otros
tres juegos de instrucciones. PALcode, uno por cada sistema operativo, Open VMS, Digital UNIX y
Windows NT.
El juego de instrucciones está ordenado alfabéticamente, el contenido de las columnas es:
Mnemonic: Nemónico de la instrucción.
Format. Formato de la instrucción, el significado de las distintas siglas es el siguiente:
•
•
•
•
•
•
•
Bra:: formato instrucción de salto(Branch).
F_P: formato instrucción operación en coma flotante.
Mem: formato instrucción de memoria(carga/almacenamiento).
Mfc: formato memoria con campo función.
Mbr: instrucciones de salto con formato memoria(jump).
Opr: formato instrucción de operación sobre enteros.
Pcd: formato instrucción PALcode.
Opcode: la notación para el código de operación depende del tipo de instrucción:
•
•
•
•
•
•
•
Branch: oo, código de operación.
Coma flotante: oo.fff, código de operación y función respectivamente.
Memoria: oo, código de operación.
Memoria con campo función: oo.ffff, código de operación y función.
Jump: oo.h, código de operación, la h especifica la instrucción jump de la que se trata.
Operación: oo.ff, código de operación y función.
PALcode: oo, código de operación.
Descargar