El Bellmac 32 es un microprocesador desarrollado por la división de procesadores de Bell Labs en 1980, implementado utilizando tecnología CMOS y fue el primer microprocesador que podía mover 32 bits en un ciclo de reloj. El microprocesador contiene 150.000 transistores y mejoró la velocidad del diseño CMOS mediante el uso de "circuitos dominó". Fue diseñado con el lenguaje de programación C en mente. Después de su creación, se produjo una versión mejorada llamada Bellmac 32A , que luego se canceló junto con su sucesor, el procesador de conjunto de instrucciones reducidas en lenguaje C "Hobbit" (CRISP).
El procesador Bellmac 32 fue desarrollado por ingenieros de AT&T en tres ubicaciones diferentes de Bell Labs : Indian Hill , Holmdel y Murray Hill . [1]
Como los diseñadores no tenían herramientas de automatización, cada diseñador de chips tuvo que usar lápices de colores para completar el diseño inicial. [1] Más tarde, Steve Law desarrolló un programa informático que ayudó en la digitalización de los diseños iniciales.
El desarrollo del Bellmac 32 produjo una novedosa técnica de diseño de circuitos llamada lógica dominó , considerada un gran avance para la producción del microprocesador. Las pruebas realizadas durante la fabricación indicaron que era posible una frecuencia de reloj incluso superior a la velocidad objetivo de 4 MHz. Sin embargo, la implementación de la lógica de control resultó inesperadamente complicada. Estas complicaciones limitaron la velocidad final, cuando todo el chip estuvo terminado y probado, a 2 MHz. [1] El equipo lo consideró un avance, pero no un éxito, ya que no podía cumplir con los objetivos de diseño iniciales de AT&T.
Las reuniones de diseño posteriores dieron como resultado el proyecto Bellmac 32A, como una segunda generación del microprocesador Bellmac. El proyecto seleccionó una vez más la tecnología CMOS y fijó la frecuencia de reloj objetivo en 6,2 MHz. Los ajustes para maximizar el tamaño de los transistores y resistencias y minimizar las interconexiones fueron fundamentales para cumplir con las especificaciones. Los ingenieros colocaron un plano de ingeniería de 20 pies por 20 pies de la disposición del chip en el piso de una gran sala. [2] Las pruebas de los chips producidos a partir del circuito completo superaron la velocidad de diseño y alcanzaron frecuencias de reloj de 7, 8 e incluso 9 MHz. [1]
Tras la disolución de AT&T, Bell Labs pasó a ser un componente de Western Electric . Con este cambio, el Bellmac 32 pasó a llamarse WE 32000. Entre las versiones actualizadas del chip se encuentran el WE 32100 , anunciado en junio de 1984, [3] y el WE 32200 .
El Bellmac 32 tiene una arquitectura canalizada con una unidad de búsqueda de instrucciones que sirve para controlar el acceso a la memoria principal y una unidad de ejecución que sirve para monitorear el proceso y manipular datos.
La cola de instrucciones se llena con las instrucciones extraídas de la memoria. La unidad aritmética de direcciones sirve para los cálculos de direcciones.
La arquitectura Bellmac 32 ofrece una variedad de ventajas para los implementadores de lenguajes de programación. La invocación de procedimientos implica la manipulación de cuatro registros (el contador de programa, el puntero de pila, el puntero de marco y el puntero de argumento) para transferir el control entre procedimientos de programa, junto con el uso de la pila de programa para preservar el contenido de los registros y comunicar argumentos y valores de retorno. Se ofrecen cuatro instrucciones para respaldar dicha "vinculación de procedimientos": call guarda la dirección de retorno y el puntero de argumento en la pila, save conserva los registros seleccionados en el rango de R3 a R8 inclusive, restore restaura cualquier registro guardado previamente y return obtiene el marco de pila antes de la invocación y devuelve el control a la dirección de retorno guardada. Se proporcionan modos de direccionamiento que ofrecen acceso a la pila en relación con el puntero de argumento y el puntero de marco. [4]
La arquitectura admite un modelo particular de gestión de procesos, en el que un proceso emplea una única pila de ejecución y un bloque de control de procesos (PCB) conserva el contexto de ejecución de cada proceso, que contiene copias de los valores de registro del proceso junto con datos de "movimiento de bloque" que describen la configuración de memoria virtual de un proceso. Para comodidad de los implementadores de sistemas operativos, el soporte arquitectónico para el cambio de procesos incluye dos instrucciones dedicadas análogas a las instrucciones tradicionales de salto a subrutina y retorno desde subrutina. La instrucción de llamada al proceso guarda los registros de usuario y control en la PCB de un proceso determinado a través del registro privilegiado de puntero de bloque de control de procesos (PCBP), capturando así el estado de ejecución del proceso actual y permitiendo su suspensión, seguida de la carga de dichos registros desde la PCB de otro proceso, restaurando así el estado de ejecución de un proceso determinado. Mientras tanto, la instrucción de retorno al proceso simplemente carga el estado del proceso desde una PCB determinada. Al realizar "movimientos de bloques", las instrucciones de cambio de proceso pueden reconfigurar automáticamente el diseño de la memoria virtual activa sin intervención adicional del sistema operativo, y al combinar esta reconfiguración con actualizaciones de los registros del procesador, estas instrucciones permiten restaurar convenientemente el entorno de ejecución del proceso. [4]
Junto con el registro PCBP, el registro de puntero de pila de interrupciones (ISP) se utiliza para hacer referencia a una posición en una pila de interrupciones común, que se utiliza para registrar punteros de PCB que hacen referencia al estado almacenado de los procesos interrumpidos. Cuando se entrega una interrupción, se utiliza la instrucción de llamada al proceso dedicada para suspender el proceso en ejecución, cuya dirección de PCB se almacena en la pila de interrupciones, y para cambiar a un controlador de interrupciones seleccionado de una tabla. Las interrupciones se comportan como procesos separados y, por lo tanto, se les proporciona su propia pila de ejecución distinta. Una vez que se completa el manejo de la interrupción, se utiliza la instrucción de retorno al proceso para reanudar el proceso suspendido. La selección de un controlador de interrupciones adecuado implica una tabla de punteros de PCB en una ubicación de memoria virtual fija. [4]
La arquitectura Bellmac 32 admite cuatro niveles de privilegio. Para cambiar entre niveles de privilegio, se proporciona el mecanismo de "transferencia controlada", que se basa en una jerarquía de tablas de dos niveles para definir el nivel de privilegio utilizando el registro de palabra de estado del procesador (PSW) y la ubicación de cada procedimiento o controlador que se invocará mediante una "llamada controlada", proporcionando así un mecanismo de llamada al sistema. El manejo de excepciones emplea este mecanismo de llamada controlada para dirigir la ejecución a un controlador apropiado, que para una excepción "normal" se encuentra a través de una tabla de segundo nivel particular cuyas entradas corresponden cada una a un código de estado interno (ISC) particular, definido en el registro PSW. Para que funcionen las características relacionadas con las excepciones del Bellmac 32, también se espera que un núcleo del sistema operativo resida en el espacio de direcciones virtuales de cada proceso, ya que una excepción, que depende de una transferencia controlada, no cambiará la configuración de la memoria virtual. [4]
Aunque varias operaciones proporcionadas por la arquitectura Bellmac 32 admiten lenguajes de alto nivel en general, se proporcionan instrucciones específicas que admiten las convenciones del lenguaje C, en particular las instrucciones de copia de cadena y fin de cadena que se basan en la representación del lenguaje C de cadenas de caracteres de terminación con un byte cero. También se proporciona una operación de copia de bloque general que utiliza un parámetro de longitud de bloque explícito para definir la cantidad de datos que se copiarán entre ubicaciones. [4]
Bellmac 32 tiene dieciséis registros de 32 bits. Tres de ellos (ISP, PCBP, PSW) son privilegiados, se utilizan para dar soporte al sistema operativo y sólo se pueden escribir cuando el microprocesador está en modo kernel. Hay otros tres registros (SP, AP, FP) que algunas instrucciones utilizan como punteros de pila. El nivel de ejecución, establecido en la palabra de estado del procesador, puede ser uno de cuatro estados: kernel, ejecutivo, supervisor, usuario. [5]
El WE 32200 tiene dieciséis registros adicionales [6] , que se dividen en dos grupos de ocho registros: R16 a R23 son registros de usuario, legibles y escribibles en cualquier modo de procesador, destinados al almacenamiento temporal y de variables globales; R24 a R31 son registros de núcleo o privilegiados que solo se pueden escribir en modo núcleo, siendo legibles en cualquier otro modo. Estos registros adicionales se introdujeron para permitir que los compiladores de lenguajes de alto nivel generaran código que pudiera usarlos para almacenar datos de uso frecuente, mejorando así el rendimiento de ejecución de dichos lenguajes. [7]
La palabra de estado del proceso es parte del archivo de registro y tiene el alias R11.
Este microprocesador tiene 169 instrucciones, las cuales están optimizadas para ejecutar programas escritos en el lenguaje de programación C. Por ello, el formato de las cadenas de caracteres está adaptado a las especificaciones del lenguaje C, por ejemplo.
Las instrucciones pueden tener hasta tres operandos. El procesador no tiene instrucciones aritméticas de punto flotante o decimal, que luego fueron proporcionadas por los coprocesadores WE 32106 y WE 32206.
El Bellmac 32 implementa múltiples tipos de direccionamiento de memoria, como lineal, inmediato de 8, 16 o 32 bits, registro, indirecto de registro, desplazamiento corto, absoluto y desplazamiento indirecto de 8, 16 o 32 bits.
Los procesadores WE 32x00 se utilizaron en las computadoras de la serie 3B de AT&T Computer Systems , y se presentaron como productos disponibles comercialmente en forma de las gamas 3B2, 3B5 y 3B20 en la feria Comdex de la primavera de 1984. [8] A mediados de 1985, AT&T comenzó a ofrecer el WE 32100 y el chipset asociado, junto con sistemas de evaluación "a nivel de placa", a otros fabricantes. [9]
AT&T tenía una línea de chips y periféricos compatibles con WE 32x00, [6] incluidos: