Articulo de referencia

MMIX

MMIX (pronunciado em-mix ) es una arquitectura informática de conjunto de instrucciones reducidas (RISC) de 64 bits diseñada por Donald Knuth , con importantes contribuciones de...

MMIX (pronunciado em-mix ) es una arquitectura informática de conjunto de instrucciones reducidas (RISC) de 64 bits diseñada por Donald Knuth , con importantes contribuciones de John L. Hennessy (quien contribuyó al diseño de la arquitectura MIPS ) y Richard L. Sites (quien fue arquitecto de la arquitectura Alpha ). Knuth ha dicho que,

MMIX es un ordenador diseñado para ilustrar aspectos de programación a nivel de máquina. En mis libros The Art of Computer Programming , reemplaza a MIX , la máquina de estilo de los años 60 que anteriormente desempeñaba ese papel... Me esforcé por diseñar MMIX de modo que su lenguaje de máquina fuera simple, elegante y fácil de aprender. Al mismo tiempo, tuve cuidado de incluir todas las complejidades necesarias para lograr un alto rendimiento en la práctica, de modo que MMIX pudiera, en principio, construirse e incluso tal vez competir con algunos de los ordenadores de uso general más rápidos del mercado". [1]

Knuth comenzó el diseño de MMIX en 1999 y lanzó la versión estable del diseño en 2011. [2] El procesador está numerado como "2009" y Knuth explica que esta es la media aritmética de los números de otras arquitecturas de computadoras; además de ser "MMIX" en números romanos . [3]

Arquitectura

MMIX es un ordenador de conjunto de instrucciones reducidas (RISC) de 64 bits y big-endian , con 256 registros de propósito general de 64 bits, 32 registros de propósito especial de 64 bits, instrucciones de 32 bits de longitud fija y un espacio de direcciones virtuales de 64 bits . El conjunto de instrucciones de MMIX comprende 256 códigos de operación, uno de los cuales está reservado para una expansión futura. [ cita requerida ] MMIX utiliza números de punto flotante IEEE 754 .

Instrucciones

Todas las instrucciones tienen un mnemónico asociado. Por ejemplo, la instrucción n.° 20 (32 decimales) está asociada con ADD. La mayoría de las instrucciones tienen la forma simbólica OP X,Y,Z, donde OP especifica el tipo de instrucción, X especifica el registro utilizado para almacenar el resultado de la instrucción y el resto especifica los operandos de la instrucción. Cada uno de estos campos tiene ocho bits de ancho. Por ejemplo, ADD $0,$1,3significa "Establecer $0 en la suma de $1 y 3".

La mayoría de las instrucciones pueden tomar valores inmediatos o contenidos de registros; por lo tanto, un solo mnemónico de instrucción puede corresponder a uno de dos códigos de operación.

Los programas MMIX se construyen normalmente utilizando el lenguaje ensamblador MMIXAL. El siguiente es un programa MMIXAL simple, que imprime la cadena " Hola, mundo! ":

        LOC #100 % Establece la dirección del programa
                                     % inicialmente a 0x100.

Principal GETA $255,string % Coloque la dirección de la cadena
                                     % en el registro 255.

        TRAP 0,Fputs,StdOut % Escribe la cadena a la que apunta
                                     % registro 255 al estándar
                                     % archivo de salida.

        TRAMPA 0,Detener,0 % Finalizar proceso.

cadena BYTE "¡Hola, mundo!",#a,0 % Cadena que se va a imprimir. #a es
                                     % nueva línea, 0 finaliza el
                                     % cadena.

Registros

Hay 256 registros arquitectónicos de propósito general directamente direccionables en un chip MMIX, designados por $0 a $255, y 32 registros arquitectónicos de propósito especial. Se puede acceder a los registros de propósito especial con las instrucciones GET y PUT. Dos de los registros especiales, rL y rG, determinan cuáles de los registros generales son locales y cuáles son globales. Todos los registros desde $0... ([rL] − 1) son registros locales y representan una ventana a una pila interna de registros. [4] Los registros desde [rL]... ([rG] − 1) son "registros marginales", siempre devuelven 0 si se utilizan como fuente en una operación. El uso de un registro marginal como destino de una operación hará que la máquina aumente automáticamente rL para incluir ese registro. Todos los registros [rG]... $255 se denominan registros globales y no forman parte de la pila de registros.

Pila de registros locales

La pila de registros locales proporciona a cada subrutina sus propios registros locales rL, designados por $0 a $(rL − 1) . Siempre que se llama a una subrutina, se empujan hacia abajo una cantidad de registros locales en la pila (desplazando el inicio de la ventana). Los argumentos de la subrutina llamada se dejan en los registros locales restantes. Cuando una subrutina termina, saca los registros empujados previamente. Debido a que la pila interna solo puede contener una cantidad finita de registros, puede ser necesario almacenar una parte de la pila en la memoria. [4] Esto se implementa con los registros especiales rO y rS que registran qué parte de la pila de registros locales está en la memoria y qué parte aún está en los registros físicos locales. La pila de registros permite un rápido enlace de subrutinas.

Registros especiales

Los 32 registros físicos arquitectónicos especiales son los siguientes:

  1. rB, el registro de arranque (trip)
  2. Al dispararse, rB ← $255 y $255 ← rJ, ahorrando así rJ en un registro general.
  3. rD, el registro de dividendos
    La división de enteros sin signo utiliza esto como la mitad izquierda de la entrada de 128 bits que se dividirá por el otro operando.
  4. rE, el registro épsilon
    Se utiliza para comparaciones flotantes con respecto a épsilon.
  5. rH, el registro himult
    Se utiliza para almacenar la mitad izquierda del resultado de 128 bits de la multiplicación de enteros sin signo.
  6. rJ, el registro de retorno-salto
    Se utiliza para guardar la dirección de la siguiente instrucción mediante PUSH y mediante POP para regresar de un PUSH.
  7. rM, el registro de máscara multiplex
    Utilizado por la instrucción multiplex.
  8. rR, el registro restante
    Se establece en el resto de la división de enteros.
  9. rBB, el registro de arranque (trap)
    Al realizar la trampa, rBB ← $255 y $255 ← rJ. De esta manera, se ahorra rJ en un registro general.
  10. rC, el contador de ciclos
    Incrementado en cada ciclo.
  11. rN, el número de serie
    Una constante que identifica a este procesador MMIX en particular.
  12. rO, el desplazamiento de la pila de registros
    Se utiliza para implementar la pila de registros.
  13. rS, el puntero de la pila de registros
    Se utiliza para implementar la pila de registros.
  14. rI, el contador de intervalo
    Se decrementa en cada ciclo. Provoca una interrupción cuando es cero.
  15. rT, el registro de dirección de la trampa
    Se utiliza para almacenar la dirección del vector de viaje.
  16. rTT, el registro de dirección de trampa dinámica
    Se utiliza para almacenar la dirección del vector trampa.
  17. rK, el registro de máscara de interrupción
    Se utiliza para habilitar y deshabilitar interrupciones específicas.
  18. rQ, el registro de solicitud de interrupción
    Se utiliza para registrar interrupciones a medida que ocurren.
  19. rU, el contador de uso
    Se utiliza para mantener un recuento de las instrucciones ejecutadas.
  20. rV, el registro de traducción virtual
    Se utiliza para traducir direcciones virtuales a direcciones físicas. Contiene el tamaño y la cantidad de segmentos, la ubicación raíz de la tabla de páginas y el número de espacio de direcciones.
  21. rG, el registro de umbral global
    Todas las referencias de registros generales con un número mayor o igual a rG se refieren a registros globales.
  22. rL, el registro de umbral local
    Todas las referencias de registros generales con un número menor que rL se refieren a registros locales.
  23. rA, el registro de estado aritmético
    Se utiliza para registrar, habilitar y deshabilitar excepciones aritméticas como desbordamiento y división por cero.
  24. rF, el registro de localización de fallos
    Se utiliza para almacenar la dirección de la instrucción que provocó un fallo.
  25. rP, el registro de predicción
    Utilizado por intercambio condicional (CSWAP).
  26. rW, el registro de interrupción (trip)
    Se utiliza, en caso de disparo, para almacenar la dirección de la instrucción posterior a la que fue interrumpida.
  27. rX, el registro de ejecución (trip)
    Se utiliza, en caso de disparo, para almacenar la instrucción que fue interrumpida.
  28. rY, el operando Y (trip)
    Se utiliza, en caso de disparo, para almacenar el operando Y de la instrucción interrumpida.
  29. rZ, el operando Z (trip)
    Se utiliza, en caso de disparo, para almacenar el operando Z de la instrucción interrumpida.
  30. rWW, el registro de interrupción (trampa)
    Se utiliza, al realizar trampas, para almacenar la dirección de la instrucción posterior a la que fue interrumpida.
  31. rXX, el registro de ejecución (trap)
    Se utiliza, durante la captura, para almacenar la instrucción que fue interrumpida.
  32. rYY, el operando Y (trampa)
    Se utiliza, al atrapar, para almacenar el operando Y de la instrucción interrumpida.
  33. rZZ, el operando Z (trampa)
    Se utiliza, al atrapar, para almacenar el operando Z de la instrucción interrumpida.

Al igual que los programas que se ejecutan en casi todas las demás CPU, los programas MMIX pueden interrumpirse de varias maneras. El hardware externo, como los temporizadores, son una fuente común de interrupciones de preempción . Muchas instrucciones causan una interrupción en ciertos casos excepcionales; como las excepciones de falla de página de protección de memoria utilizadas para implementar la memoria virtual y el manejo de excepciones de punto flotante . MMIX tiene dos tipos de interrupciones: "trips" y "traps". La principal diferencia entre "trips" y "traps" es que las traps envían el control a un programa "controlador de trap" en el sistema operativo (trapping), pero los trips envían el control a un programa "controlador de trip" en la aplicación del usuario (tripping). Los usuarios también pueden forzar la ejecución de cualquier controlador de interrupciones con instrucciones de interrupción de software explícitas TRIP y TRAP, similares a algunos tipos de trampa en otros sistemas informáticos. En particular, una llamada del sistema desde un programa de usuario al sistema operativo utiliza una instrucción TRAP. [1] : 38 

Implementaciones de hardware

A octubre de 2015 [actualizar], no se conocían implementaciones de hardware de la arquitectura del conjunto de instrucciones MMIX. Sin embargo, el proyecto fpgammix [5] implementa MMIX en Verilog , lo que hace posible su implementación mediante una matriz de puertas programables en campo .

Herramientas de software

La arquitectura del conjunto de instrucciones MMIX está respaldada por una serie de herramientas de software para la investigación de la arquitectura informática y el desarrollo de software.

Simuladores y ensambladores

  • MMIXware [6] – Simulador (de comportamiento) simple MMIX-SIM de Donald Knuth, ensamblador MMIXAL, conjunto de pruebas, programas de muestra, documentación completa y simulador (de canalización) arquitectónico MMIX ( gzipped tararchivo).
  • MMIXX [7] – Un paquete de gráficos basado en X11 aportado por Andrew Pochinsky del Centro de Física Teórica del MIT que, cuando se combina con las fuentes MMIXware anteriores, aumenta la máquina virtual MMIX con una " pantalla virtual" de 640×480 píxeles y color verdadero (para UNIX/Linux).

Compilador

La colección de compiladores GNU incluye un back-end MMIX para sus compiladores C / C++ , aportado por Hans-Peter Nilsson y parte de la distribución principal de GCC desde fines de 2001. A partir de noviembre de 2017 [actualizar], el back-end MMIX de GCC continúa siendo desarrollado y mantenido activamente por voluntarios.

  • Instrucciones de instalación para herramientas GCC + MMIX por Hans-Peter Nilsson. [8]
  • §3.17.26. Opciones MMIX para GNU GCC versión 7.2.0 [9] (sitio web de GNU GCC).
  • §9.28.  Características dependientes de MMIX [10] para GNU a partir de GNU Binutils versión 2.29, el back-end ensamblador para GNU GCC (sitio web de GNU Binutils).

En teoría, las herramientas anteriores podrían usarse para compilar, construir y arrancar un núcleo completo de FreeBSD , Linux u otro sistema operativo similar en hardware MMIX, si tal hardware existiera.

Véase también

Referencias

  1. ^ ab Knuth, Donald E. (octubre de 1999), MMIXware: una computadora RISC para el tercer milenio, Lecture Notes in Computer Science Tutorial, vol. 1750, Heidelberg: Springer-Verlag, ISBN 3-540-66938-8(Fe de erratas)
  2. ^ "Inicio de MMIX: un mensaje de Don Knuth". mmix.cs.hm.edu . Consultado el 23 de mayo de 2021 .
  3. ^ Knuth, Donald (9 de febrero de 1999). MMIX: una computadora RISC para el nuevo milenio (desplazamiento 7:36). Conferencia de Stanford. Archivado desde el original el 11 de diciembre de 2021. ( Cray-1 + IBM 801 + RISC II + Clipper C300 + AMD 29k + Motorola 88k + IBM 601 + Intel i960 + Alpha 21164 + POWER2 + MIPS R4000 + Hitachi Super H4 + StrongARM 110 + SPARC 64) / 14 = 28126 / 14 = 2009
  4. ^ ab Knuth, Donald (2005). "Sección 1.4.2"". MMIX: una computadora RISC para el nuevo milenio . El arte de la programación informática. Vol. 1, Fasc. 1. Addison Wesley. pág. 58.
  5. ^ tommythorn. "fpgammix" . Consultado el 27 de septiembre de 2024 .
  6. ^ "MMIXware". Cs-faculty.stanford.edu . Consultado el 25 de mayo de 2014 .
  7. ^ "MMIXX". Malgil.com. 6 de marzo de 2002. Consultado el 25 de mayo de 2014 .
  8. ^ Instrucciones de instalación para herramientas GCC + MMIX
  9. ^ https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/MMIX-Options.html §3.17.26.MMIX
  10. ^ "§9.28 Características dependientes de MMIX". Sourceware.org . Consultado el 20 de noviembre de 2017 .

Lectura adicional

  • Donald E. Knuth (2005). El arte de la programación informática. Volumen 1. Fascículo 1: MMIX. Una computadora RISC para el nuevo milenio . Addison-Wesley. ISBN 0-201-85392-2 (erratas) 
  • Martin Ruckert (2015). Suplemento MMIX: Suplemento de El arte de la programación informática, volúmenes 1, 2 y 3, de Donald E. Knuth . Addison-Wesley. ISBN 0-133-99231-4 
  • Página de inicio de MMIX
  • La página MMIX de Donald Knuth: una breve introducción a MMIX y las razones de Knuth para utilizar un lenguaje ensamblador hipotético en TAoCP.
  • Página de noticias MMIX de Donald Knuth: un simulador de código abierto escrito en CWEB , un manual del programador y programas de ejemplo.
  • Sitio web de MMIXmasters: un sitio web para los voluntarios (MMIXmasters) que están convirtiendo todos los programas en TAOCP, volúmenes 1 a 3, del antiguo MIX al nuevo MMIX.
  • VMMMIX Archivado el 5 de julio de 2009 en Wayback Machine . VMMMIX es la máquina virtual MMIX. Tiene consola, HDD y E/S Ethernet. Actualmente, esta máquina virtual se ejecuta solo en Windows. Y Linux se ejecuta en esta máquina virtual MMIX.
  • La página de inicio de VMB: el proyecto de placa base virtual ofrece una colección de dispositivos plug and play que se pueden utilizar con una versión adecuada de la CPU MMIX.
Obtenido de "https://es.wikipedia.org/w/index.php?title=MMIX&oldid=1248069966"