386, sin duda la CPU de Intel más importante de la historia

Si tuviéramos que hablar de cuál es el microprocesador de Intel más influyente en la historia, seguro que muchos hablarían del 8086, sin embargo, para nosotros no es así y fue el 80386, popularmente conocido como 386, el que definió al PC tal y como lo conocemos a dia de hoy. Compuesto por 275.000 transistores y con un largo desarrollo de 4 años, de haber fracasado, esta CPU hizo posible el uso de sistemas operativos complejos y abrió la puerta al futuro a millones de hogares.

Todo el mundo odiaba al 80286

La historia del 386 empieza con el futuro de la arquitectura x86 en entredicho, dado que se consideró al 80286 un fracaso desde el principio, mucho antes incluso del lanzamiento del PC AT. El motivo detrás de ello es que se encontraban atrapados en la segmentación de la memoria basada en bloques de 64 KB. Si bien el 80286 llevaba consigo una MMU y eso sobre el papel era una ventaja para la CPU, la realidad es que el uso de segmentos limito el tamaño de las estructuras de datos, lo que llevo a que los programadores y en especial, los creadores de compiladores para lenguajes de programación lo vieran como una enorme limitación.

Intel 386 en placa base

Pese a que el 68000 carecía de MMU, al menos Motorola daba la oportunidad a los licenciatarios de crear sus propios chips de apoyo, Intel no. Para colmo, no tenían en el catálogo una unidad de gestión de memoria paginada para que acompañara al 80286. ¿Las consecuencias de eso? La CPU que inicialmente se creó para el mundo Unix, donde resultó ser un fiasco comercial enorme, lo que llevó a que en 1984 fuese reciclada por IBM para el PC AT. Es curioso como las dos primeras generaciones del PC tuviesen como microprocesador central un chip que había fracasado previamente.

Mientras tanto, el 68000 arrasó en el mercado de las estaciones de trabajo. El público percibía al chip de Motorola como una CPU que ejecutaba bien Unix y era el microprocesador perfecto para ello, mientras que el 80286 no. Precisamente, uno de los puntos iniciales para la creación del 80386 fue que ejecutase sin problemas Unix. El reto, claro está, estaba en la compatibilidad con el PC, ya que la venta de ordenadores personales se había convertido en la fuente de ingresos de Intel.

MS-DOS estaba desfasado

A mediados de los 80, todo lo que se dibujaba en el futuro del PC era la multitarea, por lo que el sistema operativo de Microsoft y el CP/M de Digital Research se veían como algo totalmente atrasado. Se sabía que por el simple avance en rendimiento y las mejoras arquitecturales en el mundo de los microprocesadores, tarde o temprano iba a aparecer un sistema operativo con multitarea real. De ahí la decisión en el diseño del 386 de incluir en la arquitectura una MMU completa, la cual permitiese memoria virtual a través de paginación. Dicha inclusión es la que permitió no solo el desarrollo de sistemas operativos en la época, como los fallidos y desaparecidos en el tiempo OS/2 y Xenix, sino posteriormente la aparición de Linux y Windows NT.

Windows 3.0

Por desgracia, el reinado de los 16 bits en el PC fue demasiado largo, las ventas de ordenadores basados en el 386 empezaron a superar las del 286 en 1990, fecha en que Microsoft lanzo Windows 3 pidiendo a la CPU de 32 bits como requisito mínimo y vendiéndolo en un paquete en combinación con MS-DOS. Dicha exigencia por parte de los de Redmond junto a la demanda de la interfaz gráfica de Microsoft desatasco por completo al estancado mercado del PC, provocando con ello el fin de plataformas como el Atari ST y el Commodore Amiga.

IBM no quería este microprocesador

Con tal de obtener el contrato para ser el proveedor del IBM PC, Intel tuvo que firmar una cláusula humillante que obligaba a ceder los derechos del set de registros e instrucciones a una segunda fuente, la cual fue AMD. La idea es que el gigante azul quería asegurarse suficientes chips en el caso de que Intel fallara en suministrarlos. Por lo que tanto el 8086 como el 80286 fueron producidos en Advanced Micro Devices con el diseño de la propia Intel, quien ya había sido fabricante del 8085. Sin embargo, IBM se la jugó a Intel en 1983, haciéndole firmar una cláusula si querían colocar sus fallidos 286 en el por aquel entonces futuro PC AT.

IBM PS/1

¿Qué decía dicha cláusula? Le daba a IBM la capacidad de producir sus propios 8086 y 80286 a cambio de comprarles un mínimo de chips a Intel. Esto fue visto como una humillación por parte de IBM. Por si fuera poco, empresas como NEC que hacían clones también del 8086 y variaciones como el V30 se convirtieron en una opción para los ensambladores y fabricantes de ordenadores. En aquel entonces, Intel llevaba un año diseñando el 386, el cual IBM no creía que pudiese hacerse. Por lo que Intel aceptó, a cambio de que solo ellos fueran los productores y proveedores del 386.

Intel no terminó el diseño del 386 hasta 1985 y no lo tuvo listo para su fabricación en masa hasta 1986, año en que se presentó el primer PC con este microprocesador, el cual, obviamente, no era de IBM, que no adoptaría dicho microprocesador hasta 1987 con su PS/2, el cual reemplazó sus PC AT. Para diferenciar entre la tercera generación del IBM PC (PS/2) y los clónicos, a estos últimos se les llamó 386 AT.

El primer ordenador con un 386 no fue de IBM

Esta vez no fue IBM la que lanzó un ordenador con una CPU basada en el 386, sino que fue Compaq con su DeskPro 386, lanzado en 1986, justo seis meses antes del lanzamiento del PS/2 de IBM, el cual en realidad no era más que un PC AT, pero con el microprocesador de 32 bits de Intel como cerebro de la máquina. El sistema además incluía una ROM para la BIOS propia, por lo que no dependía de la de IBM. Sin embargo, dado que por aquel entonces los módulos SIMM no se habían inventado todavía y el bus ISA era solo de 16 bits. De cara a la comunicación con la memoria RAM, tuvieron que inventar un zócalo propietario para colocar la RAM del sistema y que esta se comunicará con los bus de datos y direccionamiento de 32 bits del microprocesador.

Compaq Deskpro 386

Y es que un año antes del lanzamiento, con el 386 recién terminado su diseño, no gustó para nada al equipo de IBM en Austin, los creadores del PC original y el PC AT. Por lo que Intel se puso en contacto con el mayor fabricante de clones del ordenador de IBM, Compaq. La colaboración entre ambos terminó en la creación del DeskPro 386 que fue el sistema que sirvió para demostrarle al mundo que la nueva CPU no tenía problemas de compatibilidad con los programas de MS-DOS. Incluso la propia Microsoft, con la presencia de Bill Gates, quien había despreciado al 80286, estuvo en la presentación de este ordenador, demostrando todo el apoyo de Microsoft al primer x86 de 32 bits.

La banda de los nueve

El IBM PS/2 fue el sucesor del IBM PC/AT el cual se vendió en modelos tanto con el 386 como con el 286. Dicho ordenador introdujo una serie de cambios propietarios en el hardware que los diferenciaron del resto de sistemas. Lo que llevó a un cisma o escisión en el mercado del PC, ya que para empezar los chips de apoyo alrededor de la CPU no eran exactamente los mismos. No obstante, el mayor problema vino con el zócalo MCA (Micro Channel Architecture) que reemplazaba al puerto ISA y que era de propiedad única para IBM, por lo que el resto de fabricantes no podían usarlo.

Zócalos Expansión

Las consecuencias de ello fue la creación de la banda de los nueve (Gang of Nine en inglés), donde un total de 9 participantes de la industria de los clónicos del IBM PC decidieron apostar por estándares abiertos que pudieran utilizar todos. Fue el inicio del PC como una plataforma abierta sin ningún fabricante como propietario de la misma por encima de los demás. Como respuesta crearon el puerto EISA, una extensión a 32 bits del ISA, el cual en años posteriores terminaría siendo reemplazado por el archiconocido PCI. En cuanto a los participantes de la banda de los 9, sus integrantes fueron: AST Research, Compaq, Epson, Hewlett-Packard, NEC, Olivetti, Tandy, Wyse and Zenith.

No obstante, IBM nunca dio el brazo a torcer, ya que mantuvo el MCA en sus sistemas de gama durante varios años, hasta mediados de los años 90, debido a la falta de adopción masiva y la aparición del bus PCI (Peripheral Component Interconnect) como un estándar más eficiente. Momento en que el hardware tanto de los sistemas del gigante azul como del resto de marcas se unificó definitivamente.

La arquitectura del 386

La arquitectura del 386 se encuentra organizada en seis bloques distintos.

UnidadFunción
Instruction Prefetch Unit, IPUCapta instrucciones desde memoria
Instruction Decode Unit, IDUDecodifica instrucciones
Execution Unit, EULas unidades de ejecución incluyen una ALU y una AGU (para el direccionamiento)
Segmentation & Paging Unit, SPULa MMU del 386 y CPU posteriores de Intel. Implementa memoria virtual mediante segmentación y paginación
Bus Interface Unit, BIUSe encarga de administrar la comunicación con la memoria RAM y los dispositivos
Protection Test Unit, PTUAplica los mecanismos de protección de memoria y privilegios

Como se puede deducir, se trata de la primera CPU de la familia x86 totalmente segmentada, en el sentido de que al tener unidades separadas para captación, decodificación y ejecución de instrucciones, puede estar trabajando en la ejecución de la primera instrucción, la decodificación de la segunda instrucción y la captación de la tercera instrucción. Obviamente, hemos de tener en cuenta que este escenario es un ideal, y, en la mayoría de los casos, las instrucciones posteriores deben esperar a las que ocurren antes para ser ejecutadas.

No obstante, lo que realmente destaca del 386 es el hecho de que se trata del primer microprocesador de la serie x86 que era totalmente de 32 bits. Esto se traduce en que el bus de datos, el bus de direcciones, los registros internos y las unidades de ejecución son todas de 32 bits. Claro está que el mayor desafío de Intel en el diseño de esta CPU fue hacer que fuese compatible hacia atrás con el 80286 y el 8086 y permitiendo ejecutar los programas ya existentes para el catálogo de software del IBM PC y sus clones compatibles, así como la integración de la llamada SPU o MMU de Intel.

Modos del 386

PS/2 ordenador IBM 386

El 386 puede funcionar en tres modos distintos:

  • El modo real hace que el 386 funcione como si fuese un 8086 o un 80286, solo puede direccionar 1 MB de memoria como mucho a través de la segmentación. Por lo que desactiva las funciones de paginación de memoria en la SPU/MMU y la unidad de protección de memoria. La existencia de este modo le permitió a Microsoft lanzar su MS-DOS sin cambios para esta CPU, provocando un estancamiento tecnológico que duró hasta que terminaron Windows 3.0.
  • En cambio, el modo protegido era el modo estándar de funcionamiento del 80386, con todas sus unidades activas, direccionamiento de hasta 4 GB de memoria RAM (32 bits) y soporte completo para memoria virtual a través de paginación.
  • El modo virtual permite la ejecución de aplicaciones de 16 bits en el modo protegido. Fue clave en futuros microprocesadores para poder ejecutar aplicaciones de MS-DOS en modo multitarea. Cuando se ejecutaba Windows 3.0 desde MS-DOS, la CPU hacía un soft reset y se colocaba en este modo.

El último de los modos fue producto de la necesidad de combinar en entornos multitarea aplicaciones de 16 y 32 bits sin tener que resetear el ordenador. Puede parecer una banalidad, pero su existencia fue clave en microprocesadores posteriores como el 486 y el Pentium, ya que facilitaron la transición de muchos negocios a Windows. Sin dicha funcionalidad en el 386 o posteriores, muy probablemente a día de hoy, Microsoft ni existiría.

Registros extendidos a los 32 bits

Una de las particularidades del 386 es su set de registros, en vez de tener uno para instrucciones de 32 bits y otro para las de 16 bits, extiende los ya existentes en el 8086 y el 80286 a los 32 bits, añadiéndoles el prefijo E para marcar que ahora pueden almacenar cada uno de ellos 32 bits de datos. Dado que un valor de 16 bits cabe en uno de 32 bits, esto evitó a los diseñadores del primer x86 de 32 bits tener que duplicar literalmente el microprocesador, una filosofía que también llevaron a cabo con el set de instrucciones.

RegistroFunciónTipo
EAXAcumulador, usado en operaciones aritméticas y de E/S. Dividido en AH (alta) y AL (baja).Extiende AX de 16 bits a 32 bits.
EBXBase, usado a menudo en operaciones de direccionamiento. Dividido en BH (alta) y BL (baja).Extiende BX de 16 bits a 32 bits.
ECXContador, usado en bucles y operaciones de cadena. Dividido en CH (alta) y CL (baja)Extiende CX de 16 a 32 bits
EDXRegistro de datos, usado en operaciones de multiplicación y división. Dividido en DH (alta) y DL (baja)Extiende DX de 16 a 32 bits.
ECSAlmacena la dirección base del segmento de código.Extiende CS de 16 a 32 bits.
EDSAlmacena la dirección base del segmento de datosExtiende DS de 16 a 32 bits.
ESSAlmacena la dirección base del segmento de pila.Extiende ESS de 16 a 32 bits.
EESUsado para almacenar direcciones adicionales (por ejemplo, en operaciones con cadenas).Extiende EES de 16 a 32 bits
ESPPuntero de pila (Stack Pointer). Apunta a la parte superior de la pila (relativo al segmento SS).Extiende SP de 16 a 32 bits.
EBPPuntero base (Base Pointer). Usado para acceder a los datos en la pila (relativo al segmento SS).Extiende BP de 16 a 32 bits.
ESIÍndice de origen (Source Index). Usado para acceder a datos en operaciones de cadena (relativo al segmento DS).Extiende SI de 16 a 32 bits.
EDIÍndice de destino (Destination Index). Usado en operaciones de cadena, apuntando a la memoria destino (relativo al segmento ES).Extiende DI de 16 a 32 bits
EIPPuntero de instrucción (Instruction Pointer). Apunta a la siguiente instrucción a ejecutar (relativo al segmento CS).Extiende IP de 16 a 32 bits.
CR0Registro de control de 32 bits, que controla el modo protegido y otros aspectos.Nuevo en el 386
CR1Uso privado para la CPUNuevo en el 386
CR2Registra la dirección de la página de memoria en caso de fallo.Nuevo en el 386
CR3Registra la dirección base de la tabla de páginas.Nuevo en el 386
GDTRDescriptor de tabla globalNuevo en el 386
LTDRDescriptor de tabla localNuevo en el 386
ITDRTabla de descriptores de interrupcionesNuevo en el 386
DR0-DR7Registros de depuraciónEl 386 extiende los registros de depuración a 32 bits
TSSTask State Segment para el manejo de multitarea.Nuevo en el 386

Para que lo entendáis mejor, por ejemplo, el registro EAX de 32 bits, incluye en sus 16 bits inferiores el registro AX del 8086. En modo real, la CPU ignorará por completo los 16 primeros bits del registro, en modo protegido los usará todos ellos. No obstante, el 386 no solo amplia a 32 bits los registros ya existentes, sino que añade otros adicionales de uso para las nuevas unidades que se incorporaron a la arquitectura, en especial por parte de la MMU.

Bit de estadoDescripción
IOPL (I/O Privilege Level)Este flag de 2 bits indica el nivel de privilegio a la hora de realizar operaciones de entrada/salida.
NT (Nested Task Flag)Indica si se esta ejecutando una tarea anidada, es decir, que depende de otra para poder completarse.
reservedReservado para futuras CPU
RF (Resume Flag)Se usa en el modo debug, permite pausar la ejecución de las instrucciones y reanudarla desde el punto en que se ha interrumplido.
VM (Virtual 8086 Mode Flag)Se activa para indicar a la CPU que se encuentra en modo virtual
IF (Interrupt Enable Flag)Si este pin esta activo, entonces el 386 manejará las interrupciones desde el pin INTR. Si esta inactivo, entonces ignorará las peticiones desde dicho pin
DF (Direction Flag) Controla la dirección de lo

En cuanto al registro de status, conocido también como FLAGS, también se introdujeron nuevos bits de estado relacionados con las nuevas capacidades del 386 a los ya existentes en el 8086 y el 80286.

Instrucciones de 32 bits

Mientras que el set de registros se extendió a los 32 bits y se añadieron nuevas instrucciones en el 386, el set de instrucciones tampoco se duplicó. Ya que, dependiendo del modo del 386 en el que este estuviese operando, pues funcionaba con el set de instrucciones de 16 o 32 bits. No obstante, el modo virtual permitía el uso de ambos al mismo tiempo. Claro está que, lo habitual al hacer una versión extendida de una ISA en lo que a la longitud de bits se refiere y darles a estos un opcode distinto que la versión más simple, lo cual le indicará al microprocesador cómo tratar la instrucción. Sin embargo, en esta CPU las instrucciones de 16 y 32 bits no estaban diferenciadas y se usaban los mismos registros para ambos.

386 placa base

Así pues, cuando el procesador está en modo protegido, las instrucciones operan por defecto con operandos de 32 bits, así como las direcciones de memoria. En modo real, las instrucciones se ejecutan por defecto en operandos de 16 bits. Por lo que usan el mismo opcode de instrucción, esto le permitió a Intel no tener que lidiar con dos CPU en una sola. Se trata de una solución elegante que les permitió realizar el paso a los 32 bits de todo el software sin problemas y puso de manifiesto la retrocompatibilidad en el PC.

No obstante, esto tiene trampa, ya que Intel añadió dos prefijos secretos, los opcodes 0x66 y 0x67, los cuales añade el procesador a las instrucciones para marcar el tamaño del operando y de la dirección. Por el hecho de que estos cambian dependiendo de si estamos operando con instrucciones del modo real o protegido.

¿Cuál era el rendimiento del 386?

Pese a que Intel buscó un lugar en las estaciones de trabajo avanzadas, la aparición de las arquitecturas RISC con un rendimiento varias veces superior le quito cualquier oportunidad a la empresa de entrar en dicho mercado con el 386, pero es que Motorola también se vio desplazada, por lo que no fue el microprocesador más potente de su época. Sin embargo, era muy superior al 68020 en cuanto a rendimiento y se igualaba de tú a tú con el 68030 bajo la misma velocidad de reloj, pero es que el chip rival tenía la ventaja de disponer una caché de instrucciones dentro de la circuitería, una ventaja de la que no disponía el chip de Intel de serie.

Comparándolo de tú a tú frente a su predecesor, nos encontramos con que un 80286 a 16 MHz puede alcanzar los 2.5 MIPS, mientras que el 386 a la misma frecuencia alcanza los 4 MIPS y puede alcanzar los 25 MHz, donde alcanza poco más de 6 MIPS, lo que hace que empate con el 68030 a la misma velocidad. No olvidemos que la mayor contribución del 386 no fue la potencia extra que trajo, sino los cambios que permitieron el despliegue de sistemas operativos multitarea al PC.

El Intel 386 SX

Con el tiempo, la versión estándar del 386 recibió el nombre de 386 DX, ya que Intel lanzó una versión abaratada del mismo en 1988 de menor tamaño, pero con dos limitaciones importantes. La primera de ellas es que su bus de datos era solo de 16 bits y su bus de direccionamiento de 24 bits, por lo que obtenía mucho menos rendimiento y, como mucho, solo podía manejar 16 MB de memoria RAM en el sistema.

386 SX

Se diseñó para usarse en placas basadas en el PC AT, ya que su bus y direccionamiento permitían el uso del mismo conjunto de chips de apoyo que los que tenía un PC AT. ¿El objetivo? Reemplazar todos los ordenadores basados en el 80286 por este 386 más económico, el cual tenía el resto de funciones del microprocesador intactas. En cuanto a su rendimiento, este era un 33 % menor que el 386 estándar o DX a la misma velocidad de reloj.

No obstante, las diferencias se ampliaban por el hecho de que las placas con el 386 DX traían de serie el 82385, el cual era un controlador de caché que lo que hacía era añadir una caché de instrucciones y permitía la instalación de una caché de datos externa en la propia placa base. Esto reducía los tiempos de espera por atasco en el acceso a la memoria a cero y reducía el tiempo de ejecución de las instrucciones y los datos que se encontraban en las cachés, pero, a cambio, aumentaba levemente la latencia con la RAM. Por lo que el rendimiento entre diferentes PC con el 386 puede ser dispar, no solo por si usan un DX o un SX, sino también por la existencia o no del llamado 385.

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x