El iAPX 432 ( Intel Advanced Performance Architecture ) es una arquitectura informática discontinuada introducida en 1981. [1] [NB 1] Fue el primer diseño de procesador de 32 bits de Intel . El procesador principal de la arquitectura, el procesador de datos generales , se implementa como un conjunto de dos circuitos integrados separados, debido a las limitaciones técnicas de la época. Aunque algunos de los primeros sistemas y manuales basados en 8086, 80186 y 80286 también usaban el prefijo iAPX por razones de marketing, las líneas de procesadores iAPX 432 y 8086 son diseños completamente separados con conjuntos de instrucciones completamente diferentes.
El proyecto comenzó en 1975 como 8800 (después del 8008 y el 8080 ) y estaba destinado a ser el diseño principal de Intel para la década de 1980. A diferencia del 8086 , que se diseñó al año siguiente como sucesor del 8080, el iAPX 432 fue un cambio radical respecto de los diseños anteriores de Intel destinados a un nicho de mercado diferente y completamente ajenos a las líneas de productos 8080 o x86 .
El proyecto iAPX 432 se considera un fracaso comercial para Intel y se interrumpió en 1986. [1] [3]
El iAPX 432 fue denominado "micromainframe", diseñado para ser programado completamente en lenguajes de alto nivel. [4] [5] La arquitectura del conjunto de instrucciones también era completamente nueva y una desviación significativa de los procesadores 8008 y 8080 anteriores de Intel , ya que el modelo de programación iAPX 432 es una máquina de pila sin registros de propósito general visibles . Admite programación orientada a objetos , [5] recolección de basura y multitarea , así como una gestión de memoria más convencional directamente en hardware y microcódigo . El soporte directo para varias estructuras de datos también tiene como objetivo permitir que se implementen sistemas operativos modernos utilizando mucho menos código de programa que para los procesadores ordinarios. Intel iMAX 432 es un sistema operativo descontinuado para el 432, [6] escrito completamente en Ada , y Ada también fue el lenguaje principal previsto para la programación de aplicaciones. En algunos aspectos, puede verse como una arquitectura informática de lenguaje de alto nivel .
Estas propiedades y características dieron como resultado un diseño de hardware y microcódigo que era más complejo que la mayoría de los procesadores de la época, especialmente los microprocesadores. Sin embargo, los buses internos y externos no son (en su mayoría) más anchos que 16 bits y, al igual que en otros microprocesadores de 32 bits de la época (como el 68000 o el 32016 ), las instrucciones aritméticas de 32 bits se implementan mediante una ALU de 16 bits, a través de lógica aleatoria y microcódigo u otros tipos de lógica secuencial . El espacio de direcciones ampliado del iAPX 432 con respecto al 8080 también estaba limitado por el hecho de que el direccionamiento lineal de datos todavía solo podía usar desplazamientos de 16 bits, algo similar a los primeros diseños basados en 8086 de Intel, incluido el 80286 contemporáneo (los nuevos desplazamientos de segmento de 32 bits de la arquitectura 80386 se describieron públicamente en detalle en 1984). [NB 2]
Al utilizar la tecnología de semiconductores de su época, los ingenieros de Intel no pudieron traducir el diseño en una primera implementación muy eficiente. Junto con la falta de optimización en un compilador Ada prematuro , esto contribuyó a que los sistemas informáticos fueran bastante lentos pero costosos, realizando pruebas de rendimiento típicas a aproximadamente 1/4 de la velocidad del nuevo chip 80286 a la misma frecuencia de reloj (a principios de 1982). [7] Esta brecha de rendimiento inicial con la línea 8086, de perfil más bajo y bajo precio, fue probablemente la razón principal por la que fracasó el plan de Intel de reemplazar esta última (más tarde conocida como x86 ) por el iAPX 432. Aunque los ingenieros vieron formas de mejorar un diseño de próxima generación, la arquitectura de capacidad iAPX 432 había comenzado a considerarse más como una sobrecarga de implementación en lugar de como el soporte simplificador que se pretendía que fuera. [7]
Originalmente diseñados para frecuencias de reloj de hasta 10 MHz, los dispositivos reales vendidos fueron especificados para velocidades de reloj máximas de 4 MHz, 5 MHz, 7 MHz y 8 MHz con un rendimiento máximo de 2 millones de instrucciones por segundo a 8 MHz. [8] [9]
El proyecto 432 de Intel comenzó en 1976, un año después de que se completara el Intel 8080 de 8 bits y un año antes de que comenzara su proyecto 8086 de 16 bits . El proyecto 432 se denominó inicialmente 8800 , [5] como su siguiente paso más allá de los microprocesadores Intel 8008 y 8080 existentes . Esto se convirtió en un gran paso. Los conjuntos de instrucciones de estos procesadores de 8 bits no se adaptaban muy bien a los lenguajes compilados típicos del tipo Algol . Sin embargo, el problema principal era sus pequeños rangos de direccionamiento nativo, solo 16 KB para 8008 y 64 KB para 8080, demasiado pequeños para muchos sistemas de software complejos sin usar algún tipo de conmutación de bancos , segmentación de memoria o mecanismo similar (que se incorporó al 8086, unos años más tarde). Intel se propuso construir un sistema completo y sofisticado en unos pocos chips LSI, que fuera funcionalmente igual o mejor que los mejores miniordenadores y mainframes de 32 bits que requerían gabinetes enteros de chips más antiguos. Este sistema admitiría multiprocesadores, expansión modular, tolerancia a fallos, sistemas operativos avanzados, lenguajes de programación avanzados, aplicaciones muy grandes, ultra fiabilidad y ultra seguridad. Su arquitectura satisfaría las necesidades de los clientes de Intel durante una década. [10]
El equipo de desarrollo del iAPX 432 estaba dirigido por Bill Lattin, con Justin Rattner (que más tarde se convertiría en el director de tecnología de Intel) como ingeniero principal [11] [12] [13] (aunque una fuente [1] afirma que Fred Pollack era el ingeniero principal). Inicialmente, el equipo trabajaba desde Santa Clara, pero en marzo de 1977 Lattin y su equipo de 17 ingenieros se trasladaron a las nuevas instalaciones de Intel en Portland. [12] Pollack más tarde se especializó en superescalaridad y se convirtió en el arquitecto principal del chip i686 Intel Pentium Pro . [1]
Pronto se hizo evidente que se necesitarían varios años y muchos ingenieros para diseñar todo esto. Y de manera similar, se necesitarían varios años de mayor progreso en la Ley de Moore , antes de que la fabricación mejorada de chips pudiera incluir todo esto en unos pocos chips densos. Mientras tanto, Intel necesitaba urgentemente un producto provisional más simple para hacer frente a la competencia inmediata de Motorola , Zilog y National Semiconductor . Así que Intel comenzó un proyecto apresurado para diseñar el 8086 como una evolución incremental de bajo riesgo a partir del 8080, utilizando un equipo de diseño independiente. El 8086 para el mercado masivo se envió en 1978.
El 8086 fue diseñado para ser compatible con versiones anteriores del 8080 en el sentido de que el lenguaje ensamblador del 8080 podía ser mapeado a la arquitectura del 8086 usando un ensamblador especial . De esta manera, el código fuente del ensamblador del 8080 existente (aunque no el código ejecutable ) se hizo compatible con el nuevo 8086 hasta cierto punto. En contraste, el 432 no tenía requisitos de compatibilidad de software o migración. Los arquitectos tenían total libertad para hacer un diseño novedoso desde cero, usando cualquier técnica que supusieran que sería mejor para sistemas y software a gran escala. Aplicaron conceptos de moda de la ciencia informática de las universidades, particularmente máquinas de capacidad , programación orientada a objetos, máquinas CISC de alto nivel, Ada e instrucciones densamente codificadas. Esta ambiciosa combinación de características novedosas hizo que el chip fuera más grande y más complejo. La complejidad del chip limitó la velocidad del reloj y alargó el cronograma de diseño.
El núcleo del diseño —el procesador principal— se denominó Procesador General de Datos ( GDP ) y se construyó como dos circuitos integrados : uno (el 43201) para buscar y decodificar instrucciones, el otro (el 43202) para ejecutarlas. La mayoría de los sistemas también incluirían el Procesador de Interfaz ( IP ) 43203 que operaba como un controlador de canal para E/S , y un Procesador Adjunto ( AP ), un Intel 8086 convencional que proporcionaba "poder de procesamiento en el subsistema de E/S". [4]
Estos fueron algunos de los diseños más grandes de la época . El GDP de dos chips tenía un recuento combinado de aproximadamente 97.000 transistores , mientras que el IP de un solo chip tenía aproximadamente 49.000. En comparación, el Motorola 68000 (presentado en 1979 ) tenía aproximadamente 40.000 transistores.
En 1983, Intel lanzó dos circuitos integrados adicionales para la arquitectura de interconexión iAPX 432: la unidad de interfaz de bus ( BIU ) 43204 y la unidad de control de memoria ( MCU ) 43205. Estos chips permitieron sistemas multiprocesador prácticamente sin pegamento con hasta 63 nodos.
Algunas de las características innovadoras del iAPX 432 fueron perjudiciales para un buen rendimiento. En muchos casos, el iAPX 432 tenía un rendimiento de instrucciones significativamente más lento que los microprocesadores convencionales de la época, como el National Semiconductor 32016 , el Motorola 68010 y el Intel 80286. Un problema era que la implementación de dos chips del GDP lo limitaba a la velocidad del cableado eléctrico de la placa base. Un problema mayor era que la arquitectura de capacidad necesitaba grandes cachés asociativos para funcionar de manera eficiente, pero los chips no tenían espacio para eso. El conjunto de instrucciones también usaba instrucciones de longitud variable alineadas por bits en lugar de los formatos habituales de bytes semifijos o alineados por palabras que se usan en la mayoría de los diseños de computadoras. Por lo tanto, la decodificación de instrucciones era más compleja que en otros diseños. Aunque esto no obstaculizaba el rendimiento en sí mismo, usaba transistores adicionales (principalmente para un gran desplazador de barril ) en un diseño que ya carecía de espacio y transistores para cachés, buses más anchos y otras características orientadas al rendimiento. Además, la BIU fue diseñada para soportar sistemas tolerantes a fallas, y al hacerlo, hasta el 40% del tiempo del bus quedó retenido en estados de espera .
Otro problema importante era su compilador Ada , inmaduro y poco ajustado . Utilizaba instrucciones orientadas a objetos de alto coste en todos los casos, en lugar de las instrucciones escalares más rápidas cuando hubiera tenido sentido hacerlo. Por ejemplo, el iAPX 432 incluía una instrucción de llamada a procedimiento entre módulos muy cara , que el compilador utilizaba para todas las llamadas, a pesar de la existencia de instrucciones de ramificación y enlace mucho más rápidas. Otra llamada muy lenta era enter_environment, que configuraba la protección de la memoria. El compilador ejecutaba esto para cada variable individual del sistema, incluso cuando las variables se utilizaban dentro de un entorno existente y no tenían que comprobarse. Para empeorar las cosas, los datos que se pasaban hacia y desde los procedimientos siempre se pasaban por valor de retorno en lugar de por referencia. Al ejecutar el punto de referencia Dhrystone , el paso de parámetros tardaba diez veces más que todos los demás cálculos combinados. [14]
Según el New York Times , "el i432 funcionaba entre 5 y 10 veces más lento que su competidor, el Motorola 68000". [15]
El iAPX 432 fue uno de los primeros sistemas en implementar el nuevo estándar IEEE-754 para aritmética de punto flotante. [16]
Una consecuencia del fracaso del 432 fue que los diseñadores de microprocesadores concluyeron que el soporte de objetos en el chip conduce a un diseño complejo que invariablemente se ejecutará lentamente, y los defensores de los diseños RISC citaron a menudo al 432 como un contraejemplo . Sin embargo, algunos sostienen que el soporte OO no era el problema principal del 432, y que las deficiencias de implementación (especialmente en el compilador) mencionadas anteriormente habrían hecho que cualquier diseño de CPU fuera lento. Desde el iAPX 432 solo ha habido otro intento de diseño similar, el procesador Rekursiv , aunque el soporte de procesos del INMOS Transputer era similar y muy rápido. [ cita requerida ]
Intel había invertido mucho tiempo, dinero y reconocimiento en el 432, tenía un equipo especializado dedicado a él y no estaba dispuesta a abandonarlo por completo después de su fracaso en el mercado. Se contrató a un nuevo arquitecto, Glenford Myers , para que produjera una arquitectura e implementación completamente nuevas para el procesador central, que se construiría en un proyecto conjunto de Intel y Siemens (más tarde BiiN ), lo que dio como resultado los procesadores de la serie i960 . El subconjunto RISC del i960 se hizo popular durante un tiempo en el mercado de procesadores integrados, pero el 960MC de gama alta y el 960MX con memoria etiquetada se comercializaron solo para aplicaciones militares.
Según el New York Times , la colaboración de Intel con HP en el procesador Merced (más tarde conocido como Itanium) fue el intento de regreso de la compañía al mercado de gama muy alta. [15]
Las instrucciones iAPX 432 tienen una longitud variable, entre 6 y 321 bits. [17] De manera inusual, no están alineadas en bytes, es decir, pueden contener números impares de bits y seguirse directamente unas a otras sin tener en cuenta los límites de bytes. [5]
El iAPX 432 tiene soporte de hardware y microcódigo para programación orientada a objetos y direccionamiento basado en capacidades . [18] [19] El sistema utiliza memoria segmentada , con hasta 2 24 segmentos de hasta 64 KB cada uno, lo que proporciona un espacio de dirección virtual total de 2 40 bytes. El espacio de dirección física es de 2 24 bytes (16 MB ).
Los programas no pueden hacer referencia a datos o instrucciones por dirección; en su lugar, deben especificar un segmento y un desplazamiento dentro del segmento. Los segmentos se referencian mediante descriptores de acceso (AD) , que proporcionan un índice en la tabla de objetos del sistema y un conjunto de derechos ( capacidades ) que rigen los accesos a ese segmento. Los segmentos pueden ser "segmentos de acceso", que solo pueden contener descriptores de acceso, o "segmentos de datos" que no pueden contener AD. El hardware y el microcódigo imponen rígidamente la distinción entre datos y segmentos de acceso, y no permitirán que el software trate los datos como descriptores de acceso, o viceversa.
Los objetos definidos por el sistema constan de un único segmento de acceso o de un segmento de acceso y un segmento de datos. Los segmentos definidos por el sistema contienen datos o descriptores de acceso para datos definidos por el sistema en desplazamientos designados, aunque el sistema operativo o el software del usuario pueden ampliarlos con datos adicionales. Cada objeto del sistema tiene un campo de tipo que se verifica mediante microcódigo, de modo que no se puede utilizar un objeto de puerto donde se necesita un objeto de portador. Los programas de usuario pueden definir nuevos tipos de objetos que obtendrán el beneficio completo de la verificación de tipo de hardware, mediante el uso de objetos de control de tipo (TCO) .
En la versión 1 de la arquitectura iAPX 432, un objeto definido por el sistema normalmente consistía en un segmento de acceso y, opcionalmente (dependiendo del tipo de objeto), un segmento de datos especificado por un descriptor de acceso en un desplazamiento fijo dentro del segmento de acceso.
En la versión 3 de la arquitectura, para mejorar el rendimiento, los segmentos de acceso y los segmentos de datos se combinaron en segmentos únicos de hasta 128 kB, divididos en una parte de acceso y una parte de datos de 0 a 64 KB cada una. Esto redujo drásticamente la cantidad de búsquedas en la tabla de objetos y duplicó el espacio máximo de direcciones virtuales. [20]
El iAPX432 reconoce catorce tipos de objetos de sistema predefinidos : [21] : pp.1-11–1-12
El software que se ejecuta en el 432 no necesita desasignar explícitamente los objetos que ya no son necesarios. En cambio, el microcódigo implementa parte de la parte de marcado del algoritmo de recolección de basura paralela sobre la marcha de Edsger Dijkstra (un recolector de estilo de marcado y barrido ). [22] Las entradas en la tabla de objetos del sistema contienen los bits utilizados para marcar cada objeto como blanco, negro o gris según lo necesite el recolector. El sistema operativo iMAX 432 incluye la parte de software del recolector de basura. [23]
Las instrucciones ejecutables están contenidas dentro de un "objeto de instrucción" del sistema. [21] : p.7-3 Debido a que las instrucciones están alineadas por bits, un desplazamiento de 16 bits en el objeto de instrucción permite que el objeto contenga hasta 65.536 bits (8.192 bytes) de instrucciones.
Las instrucciones consisten en un operador , que consiste en una clase y un código de operación , y de cero a tres referencias de operandos . "Los campos están organizados para presentar información al procesador en la secuencia requerida para la decodificación". Los operadores usados con más frecuencia se codifican usando menos bits. [21] : p.7-6 La instrucción comienza con el campo de clase de 4 o 6 bits que indica el número de operandos, llamado orden de la instrucción, y la longitud de cada operando. Esto es seguido opcionalmente por un campo de formato de 0 a 4 bits que describe los operandos (si no hay operandos, el formato no está presente). Luego vienen de cero a tres operandos, como se describe por el formato. La instrucción termina con el código de operación de 0 a 5 bits, si lo hay (algunas clases contienen solo una instrucción y, por lo tanto, no tienen código de operación). "El campo Formato permite que el GDP aparezca ante el programador como una arquitectura de cero, una, dos o tres direcciones". El campo de formato indica que un operando es una referencia de datos o el elemento superior o siguiente al superior de la pila de operandos. [21] : pp.7-3–7-5