Limitaciones de la arquitectura de las PC de IBM o La maldición de los segmentos

Historia Antigua

Altair envió la primera «computadora personal» en 1975. Era una computadora verdadera, y se podía comprar, en forma de kit, por 400 dólares. La entrada era a través de interruptores de palanca en el panel frontal; la salida a través de LEDs en el panel frontal (encendido/apagado, no de 7 segmentos). Su mercado era principalmente de aficionados y hackers.

A finales de los 70, los ordenadores personales estaban disponibles en muchos vendedores, como Tandy, Commodore, TI y Apple. Las computadoras de diferentes vendedores no eran compatibles. Cada vendedor tenía su propia arquitectura, su propio sistema operativo, su propia interfaz de bus y su propio software. Cuando se compraba una computadora, implícitamente se hacía un gran compromiso con los estándares de ese vendedor.

El 6502

En 1980, el estado de la arquitectura de vanguardia fue ejemplificado por el Commodore 6502. El 6502 es un microprocesador de un solo chip, con una arquitectura de 8/16, es decir, un bus de datos de 8 bits y un bus de direcciones de 16 bits. El modelo de programación refleja la arquitectura del hardware: los registros que contienen valores de datos, como el acumulador, son de 8 bits, mientras que los registros que contienen direcciones, como el contador de programa, son de 16 bits. Un bus de direcciones de 16 bits produce un espacio de direcciones de 64K bytes. A principios de los 80, las DRAMs de 64K estaban ampliamente disponibles, y las computadoras basadas en 6502, como el Commodore 64 y el Apple ][, se enviaban con un complemento completo de 64K bytes de RAM. En 1980, IBM decidió entrar en el mercado de las PC. Se dieron cuenta -correctamente- de que la interminable caída de los precios de las DRAM pronto haría obsoleta la arquitectura de 8/16. El siguiente paso lógico habría sido, digamos, una arquitectura de 16/32, como la Motorola 68000. Una arquitectura 16/32 habría mejorado el rendimiento duplicando el ancho de banda de la memoria, y proveyendo un espacio de direcciones de 4G bytes, suficiente para el futuro previsible. Desafortunadamente, el 68000 no estaba realmente disponible en 1980, y tampoco lo estaba ningún otro microprocesador de un solo chip con una arquitectura 16/32. El problema es que el tamaño de la matriz aumenta directamente con el ancho del registro. Cuando pasas de 8/16 a 16/32, todos los registros son el doble de grandes, todas las rutas de datos son el doble de anchas, la cadena de transporte de la UAL recibe el doble de términos, todo el diseño duplica su tamaño. Y en 1980, la tecnología de procesos simplemente no había llegado al punto en que un microprocesador de un solo chip 16/32 pudiera ser fabricado a un precio comercial.

El 8086

Lo que estaba disponible era el Intel 8086. El 8086 fue un intento mal concebido de proporcionar un espacio de direcciones mayor de 64K bytes sin incurrir en los costos de una arquitectura mayor. El 8086 es básicamente una arquitectura de 16/16. Tiene un contador de programas de 16 bits, una unidad de almacenamiento auxiliar de 16 bits, cuatro registros de propósito general de 16 bits y algunos registros de índice de 16 bits. También tiene cuatro registros de segmentos de 16 bits. El 8086 realiza todos los cálculos y la transferencia de datos en aritmética de 16 bits, con una excepción. Inmediatamente antes de introducir una dirección en el bus de direcciones externo, el 8086 selecciona uno de los registros de segmento, lo desplaza 4 bits hacia la izquierda y le añade la dirección, utilizando la aritmética de 20 bits. La dirección externa es, por lo tanto, de 20 bits, y el procesador tiene un espacio de dirección de 1M byte. Los cuatro registros de segmento definen cuatro segmentos:

CSEl segmento de código
DSEl segmento de datos
SSEl segmento de la pila
ESEl segmento extra

  La mayoría de las operaciones utilizan implícitamente el registro de segmento correcto: las búsquedas de instrucciones utilizan CS, las cargas y los almacenes utilizan DS, las pulsaciones y los saltos utilizan SS. Unas pocas operaciones, como el movimiento de bloques, usan tanto DS como ES, una para la fuente y otra para el destino. La documentación de Intel describe esta arquitectura como una conveniencia de programación: aquí está su código, aquí están sus datos, cada uno almacenado ordenadamente en su propio segmento. A los estudiantes de informática también les gustan las arquitecturas segmentadas por varias razones que tienen que ver con el diseño del sistema operativo. Sin embargo, la programación de esta máquina es una pesadilla. Nunca se puede abordar cualquier cosa. Primero, tienes que asegurarte de que un registro de segmento está configurado para ella, y luego tienes que construir la dirección como un desplazamiento en ese segmento. Un registro de segmento puede apuntar a cualquier lugar en todo el espacio de direcciones de 1M byte, pero una vez que se ha configurado, sólo proporciona acceso a un segmento de 64K. Si tienes más de 64K de código o datos, tienes que recargar los registros de segmento sobre la marcha. Un problema particular es que no hay una buena manera de indexar en un arreglo que es más grande que 64K bytes.

IBM y los clones

En circunstancias normales, un diseño tan retorcido y defectuoso como el 8086 simplemente habría sido ignorado por el mercado y se habría desvanecido. Sin embargo, 1980 fue el año de suerte de Intel. IBM eligió el 8086 como el procesador para la PC. Respaldado por el poder de marketing y el reconocimiento del nombre de IBM, el PC de IBM rápidamente capturó la mayor parte del mercado. Otros vendedores dejaron el mercado de las PCs (TI), persiguieron nichos de mercado (Commodore, Apple) o abandonaron su propia arquitectura en favor de la de IBM (Tandy). Con una cuota de mercado cercana al 90%, el PC se convirtió en un estándar de fábrica. Las casas de software desarrollaron sistemas operativos (MicroSoft DOS, Digital Research DOS), hojas de cálculo (Lotus 123), procesadores de texto (WordPerfect, WordStar) y compiladores (MicroSoft C, Borland C) que funcionaban en la PC. Los proveedores de hardware construyeron unidades de disco, impresoras y sistemas de adquisición de datos que se conectaban al bus externo de la PC. Aunque IBM inicialmente capturó el mercado de las PC, posteriormente lo perdió a favor de los vendedores de clones. Acostumbrada a ser un proveedor monopólico de computadoras centrales, IBM no estaba preparada para la feroz competencia que surgió cuando Compaq, Leading Edge, AT&T, Dell, ALR, AST, Ampro, Diversified Technologies y otros compitieron por una parte del mercado de las PC. Además de los bajos precios y el alto rendimiento, los vendedores de clones proporcionaron otra cosa muy importante al mercado de las PC: un estándar de hardware absoluto. Para vender un clon de PC, el fabricante tenía que ser capaz de garantizar que funcionaría con todo el software de PC existente del cliente, y trabajaría con todo el hardware periférico existente del cliente. La única forma de hacerlo era diseñar el clon para que fuera idéntico al PC IBM original a nivel de registro. Así, el estándar que el PC de IBM definió se convirtió en piedra, ya que docenas de vendedores de clones enviaron millones de máquinas que se ajustaban a él en cada detalle. Esta estandarización ha sido un factor importante en el bajo costo y la amplia disponibilidad de los sistemas de PC. También ha sido un serio obstáculo en el intento de ir más allá de las limitaciones de la arquitectura del PC.

Blues del espacio de direcciones

El 8086 le da al PC un espacio de dirección de 1M byte. Esto se muestra convenientemente como dieciséis segmentos de 64K bytes desarticulados, asignados de la siguiente manera:

SegmentoUso
0-9RAM
A-Bvideo RAM
C-DROM en las tarjetas de E/S
E-FROM BIOS (código del sistema operativo)

  Con 10 segmentos permitidos para la RAM, la PC puede direccionar hasta 640K bytes de la memoria principal. El espacio entre 640K y 1M está reservado para el uso del hardware y el sistema operativo. A mediados de los 80 esta arquitectura se estaba volviendo obsoleta. Los chips DRAM de 256K y 1M byte estaban disponibles; los usuarios compraban PCs con un complemento completo de 640K de RAM y querían más. Desafortunadamente, como muestra la tabla de arriba, no hay lugar para poner más memoria en un PC. Una solución era la de los sistemas de memoria seleccionados por bancos. Un vendedor diseñaría una tarjeta de memoria, añadiría algunos registros de selección de banco y asignaría bloques de memoria seleccionados al espacio de direcciones de la PC, típicamente a C0000. Con un sistema de selección de banco, el programador es responsable de gestionar los registros de selección de banco y de hacer un seguimiento de qué banco tiene qué datos. Hoy en día, los sistemas de selección de banco generalmente se ajustan a la Especificación de Memoria Expandida de Lotus/Intel/MicroSoft (LIM-EMS). En este contexto, la palabra expandida denota específicamente un sistema de selección de banco. La memoria expandida sin duda permitió que unos pocos programas utilizaran más de 640K de RAM, pero es claramente inadecuada como solución a largo plazo para la necesidad de más memoria. La única solución real es pasar a una arquitectura más grande. Intel dio el primer paso al introducir el procesador 80286.

El 80286

El 80286 es similar al 8086 en su concepto. Es una arquitectura 16/24. Los buses de datos y registros son de 16 bits. El bus de direcciones externas es de 24 bits, proporcionando un espacio de direcciones de 16M bytes. Las direcciones se especifican con un selector de segmento de 16 bits y un offset o desplazamiento de 16 bits. El selector de segmento especifica un descriptor de segmento residente en memoria. El descriptor de segmento tiene una base de segmento de 24 bits, un tamaño de segmento de 16 bits y algunos bits de atributo. Para generar una dirección, el desplazamiento de segmento de 16 bits se añade a la dirección de base de segmento de 24 bits utilizando aritmética de 24 bits, y luego se conecta al bus de dirección externo. El 80286 le da al programador un espacio de direcciones de 16M bytes. Sin embargo, todavía está atascado por la necesidad de manipular los registros de segmentos, y el hecho de que cada segmento está limitado a 64K bytes, como en el 8086. Más significativamente, el 80286 está limitado por la necesidad de seguir siendo compatible con el PC. Intel sabía que no podían comercializar un nuevo procesador a menos que pudiera ejecutar los programas de PC existentes. Por lo tanto, diseñaron el 80286 con dos modos de ejecución diferentes: modo real y modo protegido. El modo protegido es la arquitectura 16/24 que se acaba de describir. El modo real es una emulación exacta de la arquitectura 8086 16/16. El modo real es a veces llamado modo DOS. Cuando un 80286 se enciende, arranca en modo real. Esto le permite funcionar como el procesador en un clon de PC IBM. Usado de esta manera, el 80286 proporciona un aumento de rendimiento, debido a sus relojes más rápidos y buses de datos de 16 bits. Sin embargo, el programador sigue estando restringido a la arquitectura del PC, con su espacio de direcciones de 1M byte y su limitación de 640K de RAM. Dado que los programas del DOS y del PC no se ejecutan en un procesador 80286 en modo protegido, la mayoría de los procesadores 80286 se ejecutan en modo real.

La locura de la memoria extendida

Hoy en día, la mayoría de los ordenadores 80286 se envían con varios megabytes de RAM. Como el 80286 tiene un espacio de direcciones de 16M bytes, esta memoria se direcciona linealmente, no se necesita hardware de selección de banco. En modo protegido, toda la memoria es utilizable. En el modo real, los primeros 640K de memoria son accesibles, como en la arquitectura estándar de PC, y el resto no lo es. La memoria que es inaccesible porque está por encima del límite de 640K de la arquitectura original del PC se llama memoria extendida, no debe confundirse con la memoria expandida. El uso más común de la memoria extendida es proporcionar un disco RAM para un sistema DOS. Cuando el programa quiere acceder a los datos almacenados en el disco RAM, establece un bit de modo que cambia el 80286 a modo protegido. Esto le da acceso a la memoria extendida. El programa entonces realiza la transferencia de datos deseada entre su propio espacio de memoria y el disco RAM en la memoria extendida. Resulta que no hay forma de volver del modo protegido al modo real, por lo que el programa debe guardar su estado y reiniciar el procesador. Al reiniciar, el procesador reanuda la ejecución del programa original en modo real. En la práctica, todo esto es manejado por un controlador de dispositivo para el disco RAM, como RAMDRIVE.SYS. Intel intentó que el 80286 proporcionara un camino para la evolución ascendente de los sistemas de PC. En particular, esperaban que su modo de compatibilidad con el DOS le permitiera ganar aceptación, y que una vez que hubiera una base instalada suficiente de procesadores 80286, los desarrolladores de software comenzaran a desarrollar sistemas operativos y programas que usaran las características del modo protegido. Lo que sucedió en realidad fue que los proveedores de clones de PC lo utilizaron como un 8086 de alto rendimiento, los usuarios lo ejecutaron casi exclusivamente en modo real y los desarrolladores de software se resistieron a las complejidades y limitaciones de la arquitectura segmentada del modo protegido.

El 80386

La siguiente oferta de Intel fue el 80386. Al igual que el 80286, el 80386 tiene una arquitectura segmentada, y como el 80286, tiene dos modos de ejecución: real y protegido. En el modo protegido, el 80386 es una arquitectura 32/32. El esquema de segmentación es aún más complejo que el del 80286, y te ahorraré los detalles. Sin embargo, permite compensaciones de segmentos de 32 bits, por lo que un solo segmento puede ser de hasta 4G bytes. Esto permite a un programador definir un único segmento que cubra toda la memoria disponible, en lugar de tener que hacer continuamente malabares con una colección de segmentos de 64K bytes. También permite indexar en arreglos que son más grandes que 64K bytes. En modo real, el 80386 proporciona una emulación exacta de la arquitectura del 8086 16/16. Desafortunadamente, las capacidades del 80386 son un poco más utilizadas que las del 80286. Los programas de DOS y PC no se ejecutarán en un procesador 80386 en modo protegido, por lo que la mayoría de los procesadores 80386 se ejecutan en modo real. El procesador de mi máquina actual funciona en modo real. Proporciona acceso a 640K bytes de memoria principal y un disco RAM de 3456K bytes, para un total de 4M bytes de RAM instalada.

Modelos de memoria

Te guste o no, hay millones de PCs ahí fuera, y tenemos que programarlos en modo real. MicroSoft C proporciona amplias facilidades para sacar lo mejor de una mala situación. Una cuestión es si las direcciones son de 16 o 32 bits. Una dirección de 16 bits proporciona una compensación en un solo segmento. El registro del segmento debe haber sido cargado con la dirección base apropiada. Una dirección de 32 bits proporciona tanto una dirección base de segmento como una compensación en ese segmento. Cuando se accede a la memoria a través de una dirección de 32 bits, el programa primero carga el registro de segmento desde los 16 bits superiores de la dirección, y luego utiliza los 16 bits inferiores de la dirección como un desplazamiento en ese segmento. Las direcciones de 32 bits requieren más memoria y más ciclos de CPU, pero proporcionan acceso a todo el espacio de direcciones de 1M byte del procesador 8086. Si un programa tiene menos de 64K de datos, entonces puede poner todos sus datos en un solo segmento de datos y usar direcciones de 16 bits para acceder a él. De manera similar, si un programa tiene menos de 64K de código, puede poner todo su código en un solo segmento de código y usar direcciones de 16 bits para saltos y llamadas a subrutinas. Por el contrario, si el código o los datos no caben dentro de estos límites, entonces el programa debe utilizar direcciones de 32 bits. MicroSoft C proporciona las cuatro posibilidades, a través de un conjunto de modelos de memoria:

Modelo de memoriaDirecciones de datosDirecciones de código
Tiny16-bit16-bit
Small16-bit16-bit
Compact32-bit16-bit
Medium16-bit32-bit
Large32-bit32-bit
Huge32-bit32-bit

  El modelo de memoria Tiny es el mismo que el modelo Small, excepto que el tamaño de los segmentos de código y datos en conjunto no debe exceder los 64K bytes. Además, el modelo Tiny produce un archivo .COM en lugar de un archivo .EXE. Los archivos .COM son ligeramente más pequeños y se cargan ligeramente más rápido en el DOS. El modelo de memoria Huge es el mismo que el modelo de memoria Large, excepto que los arreglos individuales pueden exceder los 64K bytes de tamaño. Sin embargo, las direcciones se siguen almacenando como pares segmento:offset, y el compilador declina realizar aritmética completa de direcciones de 32 bits en ellas. Como resultado, las matrices de gran tamaño están sujetas a la restricción de que el tamaño del elemento de la matriz debe ser una potencia de 2. La elección del modelo de memoria es una opción en tiempo de compilación, por lo que se puede experimentar fácilmente con diferentes modelos.

Notas

Mal concebido, retorcido y defectuoso En mi opinión 8086 El PC de IBM en realidad usó el 8088, no el 8086. El 8088 es lo mismo que el 8086 internamente, pero tiene un bus de datos externo de 8 bits. Esto intercambia el ancho de banda de la memoria por un menor costo del sistema. Expandido Piensa en un acordeón, con el fuelle expandiéndose detrás del teclado. 80286 También hay un procesador 80186. Es esencialmente un 8086 con relojes, controladores de interrupción y otros circuitos de apoyo integrados en un solo chip. Se utiliza principalmente como un procesador integrado en equipos de control industrial. Extendido Piensa en una torre, con pisos adicionales que se extienden cada vez más alto. Reiniciar el procesador No me lo estoy inventando. Fuente: http://world.std.com/~swmcd/steven/rants/pc.html Traducido porhttps://juegosiesta.com/

Volver al inicio
18+
Verificación de edad Este sitio web requiere que tengas más de 18 años para ingresar SÍ, TENGO MÁS DE 18 AÑOS Todavia no tengo 18 años Lo siento, no eres mayor de edad para ver este contenido