|
Capítulo II: ARQUITECTURA E HISTORIA DE LOS MICROORDENADORES
El ensamblador es un lenguaje de programación que, por la traducción directa de los mnemónicos
a instrucciones maquina, permite realizar aplicaciones rápidas, solucionando situaciones en las que los tiempos
de ejecución constituye el factor principal para que el proceso discurra con la suficiente fluidez. Esta
situación, que indudablemente sí influye sobre la elección del lenguaje de programación a utilizar en el
desarrollo de una determinada rutina, y dada la aparición de nuevos compiladores de lenguajes de alto nivel
que optimizan el código generado a niveles muy próximos a los que un buen programador es capaz de
realizar en ensamblador, no es la única razón para su utilización.
Es sobradamente conocido que los actuales sistemas operativos son programados en su mayor parte
en lenguajes de alto nivel, especialmente C, pero siempre hay una parte en la que el ensamblador se hace casi
insustituible bajo DOS y es la programación de los drivers para los controladores de dispositivos, relacionados
con las tareas de más bajo nivel de una máquina, fundamentalmente las operaciones de entrada/salida en las
que es preciso actuar directamente sobre los demás chips que acompañan al microprocesador. Por ello y
porque las instrucciones del lenguaje ensamblador están íntimamente ligadas a la máquina, vamos a realizar
primero un somero repaso a la arquitectura interna de un microordenador.
2.1. - ARQUITECTURA VON NEWMAN.
Centrándonos en los ordenadores sobre los que vamos a trabajar desarrollaré a grandes rasgos la
arquitectura Von Newman que, si bien no es la primera en aparecer, sí que lo hizo prácticamente desde el
comienzo de los ordenadores y se sigue desarrollando actualmente. Claro es que está siendo desplazada por
otra que permiten una mayor velocidad de proceso, la RISC.
En los primeros tiempos de los ordenadores, con sistemas de numeración decimal, una electrónica
sumamente complicada muy susceptible a fallos y un sistema de programación cableado o mediante fichas,
Von Newman propuso dos conceptos básicos que revolucionarían la incipiente informática:
a) La utilización del sistema de numeración binario. Simplificaba enormemente los problemas
que la implementación electrónica de las operaciones y funciones lógicas planteaban, a la vez
proporcionaba una mayor inmunidad a los fallos (electrónica digital).
b) Almacenamiento de la secuencia de instrucciones de que consta el programa en una memoria
interna, fácilmente accesible, junto con los datos que referencia. De este forma la velocidad de
proceso experimenta un considerable incremento; recordemos que anteriormente una instrucción o
un dato estaban codificados en una ficha en el mejor de los casos.
Tomando como modelo las máquinas que aparecieron incorporando las anteriores características, el
ordenador se puede considerar compuesto por las siguientes partes:
- La Unidad Central de Proceso, U.C.P., más conocida por sus siglas en inglés (CPU).
- La Memoria Interna, MI.
- Unidad de Entrada y Salida, E/S.
- Memoria masiva Externa, ME.
Realicemos a continuación una descripción de lo que se entiende por cada una de estas partes y cómo
están relacionadas entre si:
- La Unidad Central de Proceso (CPU) viene a ser el cerebro del ordenador y tiene por misión
efectuar las operaciones aritmético-lógicas y controlar las transferencias de información a realizar.
- La Memoria Interna (MI) contiene el conjunto de instrucciones que ejecuta la CPU en el transcurso
de un programa. Es también donde se almacenan temporalmente las variables del mismo, todos los
datos que se precisan y todos los resultados que devuelve.
- Unidades de entrada y salida (E/S) o Input/Output (I/O): son las encargadas de la comunicación de
la máquina con el exterior, proporcionando al operador una forma de introducir al ordenador tanto
los programas como los datos y obtener los resultados.
Como es de suponer, estas tres partes principales de que consta el ordenador deben estar íntimamente
conectadas; aparece en este momento el concepto de bus: el bus es un conjunto de líneas que enlazan los
distintos componentes del ordenador, por ellas se realiza la transferencia de datos entre todos sus elementos.
Se distinguen tres tipos de bus:
- De control: forman parte de él las líneas que seleccionan desde dónde y hacia dónde va dirigida
la información, también las que marcan la secuencia de los pasos a seguir para dicha transferencia.
- De datos: por él, de forma bidireccional, fluyen los datos entre las distintas partes del ordenador.
- De direcciones: como vimos, la memoria está dividida en pequeñas unidades de almacenamiento
que contienen las instrucciones del programa y los datos. El bus de direcciones consta de un conjunto
de líneas que permite seleccionar de qué posición de la memoria se quiere leer su contenido. También
direcciona los puertos de E/S.
La forma de operar del ordenador en su conjunto es direccionar una posición de la memoria en busca
de una instrucción mediante el bus de direcciones, llevar la instrucción a la unidad central de proceso -CPU-
por medio del bus de datos, marcando la secuencia de la transferencia el bus de control. En la CPU la
instrucción se decodifica, interpretando qué operandos necesita: si son de memoria, es necesario llevarles a
la CPU; una vez que la operación es realizada, si es preciso se devuelve el resultado a la memoria.
2.2. - EL MICROPROCESADOR.
Un salto importante en la evolución de los ordenadores lo introdujo el microprocesador: se trata de
una unidad central de proceso contenida totalmente en un circuito integrado. Comenzaba así la gran carrera
en busca de lo más rápido, más pequeño; rápidamente el mundo del ordenador empezó a ser accesible a
pequeñas empresas e incluso a nivel doméstico: es el boom de los microordenadores personales. Aunque
cuando entremos en la descripción de los microprocesadores objeto de nuestro estudio lo ampliaremos, haré
un pequeño comentario de las partes del microprocesador:
- Unidad aritmético-lógica: Es donde se efectúan las operaciones aritméticas (suma, resta, y a veces
producto y división) y lógicas (and, or, not, etc.).
- Decodificador de instrucciones: Allí se interpretan las instrucciones que van llegando y que
componen el programa.
- Bloque de registros: Los registros son celdas de memoria en donde queda almacenado un dato
temporalmente. Existe un registro especial llamado de indicadores, estado o flags, que refleja el
estado operativo del microprocesador.
- Bloque de control de buses internos y externos: supervisa todo el proceso de transferencias de
información dentro del microprocesador y fuera de él.
2.3. - BREVE HISTORIA DEL ORDENADOR PERSONAL Y EL DOS.
La trepidante evolución del mundo informático podría provocar que algún recién llegado a este libro
no sepa exactamente qué diferencia a un ordenador "AT" del viejo "XT" inicial de IBM. Algunos términos
manejados en este libro podrían ser desconocidos para los lectores más jóvenes. Por ello, haremos una
pequeña introducción sobre la evolución de los ordenadores personales, abarcando toda la historia (ya que
no es muy larga).
La premonición.
En 1973, el centro de investigación de Xerox en Palo Alto desarrolló un equipo informático con el
aspecto externo de un PC personal actual. Además de pantalla y teclado, disponía de un artefacto similar al
ratón; en general, este aparato (denominado Alto) introdujo, mucho antes de que otros los reinventaran,
algunos de los conceptos universalmente aceptados hoy en día. Sin embargo, la tecnología del momento no
permitió alcanzar todas las intenciones. Alguna innovación, como la pantalla vertical, de formato similar a
una hoja de papel (que desearían algunos actuales internautas para los navegadores) aún no ha sido adoptada:
nuestros PC's siguen pareciendo televisores con teclas, y los procesadores de textos no muestran legiblemente
una hoja en vertical completa incluso en monitores de 20 pulgadas.
El microprocesador.
El desarrollo del primer microprocesador por Intel en 1971, el 4004 (de 4 bits), supuso el primer paso
hacia el logro de un PC personal, al reducir drásticamente la circuitería adicional necesaria. Sucesores de este
procesador fueron el 8008 y el 8080, de 8 bits. Ed Roberts construyó en 1975 el Altair 8800 basándose en
el 8080; aunque esta máquina no tenía teclado ni pantalla (sólo interruptores y luces), era una arquitectura
abierta (conocida por todo el mundo) y cuyas tarjetas se conectaban a la placa principal a través de 100
terminales, que más tarde terminarían convirtiéndose en el bus estándar S-100 de la industria.
El Apple-I apareció en 1976, basado en el microprocesador de 8 bits 6502, en aquel entonces un
recién aparecido aunque casi 10 veces más barato que el 8080 de Intel. Fue sucedido en 1977 por el
Apple-II. No olvidemos los rudimentos de la época: el Apple-II tenía un límite máximo de 48 Kbytes de
memoria. En el mismo año, Commodore sacó su PET con 8 Kbytes. Se utilizaban cintas de casete como
almacenamiento, aunque comenzaron a aparecer las unidades de disquete de 5¼. Durante finales de los 70
aparecieron muchos otros ordenadores, fruto de la explosión inicial del microprocesador.
Los micros de los 80.
En 1980, Sir Clive Sinclair lanzó el ZX-80, seguido muy poco después del ZX-81. Estaban basados
en un microprocesador sucesor del 8085 de Intel: el Z80 (desarrollado por la empresa Zilog, creada por un
ex-ingeniero de Intel). Commodore irrumpió con sus VIC-20 y, posteriormente, el Commodore 64, basados
aún en el 6502 y, este último, con mejores posibilidades gráficas y unos 64 Kb de memoria. Su competidor
fue el ZX-Spectrum de Sinclair, también basado en el Z80, con un chip propio para gestión de gráficos y
otras tareas, la ULA, que permitió rebajar su coste y multiplicó su difusión por europa, y en particular por
España. Sin embargo, todos los ordenadores domésticos de la época, como se dieron en llamar, estaban
basados en procesadores de 8 bits y tenían el límite de 64 Kb de memoria. Los intentos de rebasar este límite
manteniendo aún esos chips por parte de la plataforma MSX (supuesto estándar mundial con la misma suerte
que ha corrido el Esperanto) o los CPC de Amstrad, de poco sirvieron.
El IBM PC.
Y es que IBM también fabricó su propio ordenador personal con vocación profesional: el 12 de
agosto de 1981 presentó el IBM PC. Estaba basado en el microprocesador 8088, de 16 bits, cuyas
instrucciones serán las que usemos en este libro, ya que todos los procesadores posteriores son básicamente
(en MS-DOS) versiones mucho más rápidas del mismo. El equipamiento de serie consistía en 16 Kbytes de
memoria ampliables a 64 en la placa base (y a 256 añadiendo tarjetas); el almacenamiento externo se hacía
en cintas de casete, aunque pronto aparecieron las unidades de disco de 5¼ pulgadas y simple cara
(160/180 Kb por disco) o doble cara (320/360 Kb). En 1983 apareció el IBM PC-XT, que traía como
novedad un disco duro de 10 Mbytes. Un año más tarde aparecería el IBM PC-AT, introduciendo el
microprocesador 286, así como ranuras de expansión de 16 bits (el bus ISA de 16 bits) en contraposición con
las de 8 bits del PC y el XT (bus ISA de 8 bits), además incorporaba un disco duro de 20 Mbytes y disquetes
de 5¼ pero con 1.2 Mbytes.
En general, todos los equipos con procesador 286 o superior pueden catalogarse dentro de la categoría
AT; el término XT hace referencia al 8088/8086 y similares. Finalmente, por PC (a secas) se entiende
cualquiera de ambos; aunque si se hace distinción entre un PC y un AT en la misma frase, por PC se
sobreentiende un XT, menos potente. El término PC ya digo, no obstante, es hoy en día mucho más general,
referenciando habitualmente a cualquier ordenador personal.
Alrededor del PC se estaba construyendo un imperio de software más importante que el propio
hardware: estamos hablando del sistema operativo PC-DOS. Cuando aparecieron máquinas compatibles con
el PC de IBM, tenían que respetar la compatibilidad con ese sistema, lo que fue sencillo (ya que Microsoft,
le gustara o no a IBM, desarrolló el MS-DOS, compatible con el PC-DOS pero que no requería la BIOS del
ordenador original, cuyo copyright era de IBM). Incluso, el desarrollo de los microprocesadores posteriores
ha estado totalmente condicionado por el MS-DOS. [Por cierto, la jugada del PC-DOS/MS-DOS se repetiría
en alguna manera pocos años después con el OS/2-Windows].
A partir de 1986, IBM fue paulatinamente dejando de tener la batuta del mercado del PC. La razón
es que la propia IBM tenía que respetar la compatibilidad con lo anterior, y en ese terreno no tenía más
facilidades para innovar que la competencia. El primer problema vino con la aparición de los procesadores
386: los demás fabricantes se adelantaron a IBM y lanzaron máquinas con ranuras de expansión aún de 16
bits, que no permitían obtener todo el rendimiento. IBM desarrolló demasiado tarde, en 1987, la arquitectura
Microchannel, con bus de 32 bits pero cerrada e incompatible con tarjetas anteriores (aunque se desarrollaron
nuevas tarjetas, eran caras) y la incluyó en su gama de ordenadores PS/2 (alguno de cuyos modelos era aún
realmente ISA). La insolente respuesta de la competencia fue la arquitectura EISA, también de 32 bits pero
compatible con la ISA anterior.
Otro ejemplo: si IBM gobernó los estándares gráficos hasta la VGA, a partir de ahí sucedió un
fenómeno similar y los demás fabricantes se adelantaron a finales de los 80 con mejores tarjetas y más
baratas; sin embargo, se perdió la ventaja de la normalización (no hay dos tarjetas superiores a la VGA que
funcionen igual).
EISA también era caro, así que los fabricantes orientales, cruzada ya la barrera de los años 90,
desarrollaron con la norma VESA las placas con bus local (VESA Local Bus); básicamente es una
prolongación de las patillas de la CPU a las ranuras de expansión, lo que permite tarjetas rápidas de 32 bits
pero muy conflictivas entre sí. Esta arquitectura de bus se popularizó mucho con los procesadores 486. Sin
embargo, al final el estándar que se ha impuesto ha sido el propuesto por el propio fabricante de las CPU:
Intel, con su bus PCI, que con el Pentium se ha convertido finalmente en el único estándar de bus de 32 bits.
Estas máquinas aún admiten no obstante las viejas tarjetas ISA, suficientes para algunas aplicaciones de baja
velocidad (modems,... etc).
La evolución del MS-DOS.
Una manera sencilla de comprender la evolución de los PC es observar la evolución de las sucesivas
versiones del DOS y los sistemas que le han sucedido.
En 1979, Seatle Computer necesitaba apoyar de alguna manera a sus incipientes placas basadas en
el 8086. Como Digital Research estaba tardando demasiado en convertir el CP/M-80 a CP/M-86, desarrolló
su propio sistema: el QDOS 0.1, que fue presentado en 1980. Antes de finales de año apareció QDOS 0.3.
Bill Gates, dueño de Microsoft, de momento sólo poseía una versión de lenguaje BASIC para 8086
no orientada a ningún sistema operativo particular, que le gustó a algún directivo de IBM. Bill Gates ya había
hecho la primera demostración mundial de BASIC corriendo en un 8086 en las placas de Seatle Computer
(en julio de 1979) y había firmado un contrato de distribución no exclusiva para el QDOS 0.3 a finales de
1980. En abril de 1981 aparecieron las primeras versiones de CP/M-86 de Digital, a la vez que QDOS se
renombraba a 86-DOS 1.0 aunque en principio parecía tener menos futuro que el CP/M. En Julio, sin
embargo, Microsoft adquiría todos los derechos del 86-DOS.
Digital Research no ocupa actualmente el lugar de Microsoft porque en 1981 era una compañía
demasiado importante como para cerrar un acuerdo con IBM sin imponer sus condiciones para cederle los
derechos del sistema operativo CP/M. Así que IBM optó por Bill Gates, que acababa de adquirir un sistema
operativo, el 86-DOS, que pasó a denominarse PC-DOS 1.0. Las versiones de PC-DOS no dependientes de
la ROM BIOS de IBM se denominarían MS-DOS, término que ha terminado siendo más popular.
A continuación se expone la evolución hasta la versión 5.0; las versiones siguientes no añaden
ninguna característica interna nueva destacable (aunque a nivel de interfaz con el usuario y utilidades
incluidas haya más cambios). El MS-DOS 7.0 sobre el que corre Windows 95 sí tiene bastantes retoques
internos, pero no es frecuente su uso aislado o independiente de Windows 95. Aunque PC-DOS y MS-DOS
siembre han caminado paralelos, hay una única excepción: la versión 7.0 (no confundir MS-DOS 7.0 con
PC-DOS 7.0: este último es, realmente, el equivalente al MS-DOS 5.0 ó 6.2).
Digital Research trabajó arduamente para lograr una compatibilidad total con MS-DOS, y finalmente
consiguió lanzar al mercado su sistema DR-DOS. Las versiones 5.0 y 6.0 de este sistema, así como el
Novell DOS 7.0 (cuando cedió los derechos a Novell) se pueden considerar prácticamente 100% compatibles.
El efecto del DR-DOS fue positivo, al forzar a Microsoft a mejorar la interacción del sistema operativo con
los usuarios (documentación en línea, programas de utilidad, ciertos detalles...); por poner un ejemplo, hasta
el MS-DOS 6.2 ha sido necesario intercambiar tres veces el disquete origen y el destino durante la copia de
un disquete normal de 1.44M. En cierto modo, la prepotencia de Microsoft con el MS-DOS a principios de
los noventa era similar a la de Digital Research a principios de los 80 con el CP/M.
El futuro.
El resto de la historia de los sistemas operativos de PC ya la conoce el lector, a menos que no esté
informado de la actualidad. Caminamos hacia la integración de los diversos Windows en uno sólo, que
esperemos que algún día sea suficientemente abierto para que le surjan competidores. Si en el futuro hubiera
un sólo sistema operativo soportado por Microsoft, no vamos por buen camino.
En ese caso, sería de agradecer que algún juez les obligara a publicar una especificación completa
de las funciones y protocolos del sistema, con objeto de que algún organismo de normalización internacional
las recogiera sin ambigüedades para permitir la libre competencia de otros fabricantes. El DOS y el Windows
actuales no son ningún invento maravilloso de Microsoft. Por poner un ejemplo, el MS-DOS 1.0 carecía de
función para identificar la versión del sistema. Exactamente lo mismo le ha sucedido a las primeras versiones
de Windows (hay varios chequeos distintos para detectarlas, según el modo de funcionamiento y la versión):
el MS-DOS no lo escribió inicialmente Microsoft, pero Windows sí, y salta a la vista que sus programadores,
para cometer semejante despiste, se sentaron delante del teclado antes de hacer un análisis de la aplicación
a desarrollar, igual que lo hubiera hecho alguien que hubiera aprendido a programar con unos fascículos
comprados en el kiosco. Con tanto analista en el paro...
No olvidemos que el DOS y Windows son el fruto de toda la sociedad utilizando el mismo tipo de
ordenadores y necesitando la compatibilidad con lo anterior a cualquier precio. La prueba evidente son los
procesadores de Intel, construidos desde hace tiempo para dar servicio al sistema operativo del PC. Somos
prisioneros, usuarios obligados de Microsoft. Naturalmente, no tengo nada contra Microsoft, pero opino que
el poder adquirido durante una década, gracias a la exclusiva de los derechos sobre un sistema operativo sin
ayuda en la línea de comandos, o de un Windows cerrado íntimamente ligado al DOS (de quien sólo
Microsoft tiene el código fuente) no legitima a ninguna empresa a tener tanto poder. No lo olvidemos: el
MS-DOS ha dado un vuelco hacia la amigabilidad con el usuario cuando Digital Research ha aparecido con
el DR-DOS. Del mismo modo que Windows seguirá lento o colgándose mientras Unix no tenga más
aplicaciones comerciales.
Si hay alguien que puede competir con Windows es Unix. Y en Unix no dependemos de ningún
fabricante concreto, ni de hardware ni de software. Probablemente, la insuficiente normalización actual la
corregiría pronto el propio mercado. ¿Tiene usted Linux instalado en casa y lo utiliza al menos para
conectarse a Internet por Infovía, o quizá le gustaría hacerlo algún día?. ¿O por el contrario es de los que
piensan que Bill Gates es un genio?. Si se queda con la segunda opción, es que ve mucho la tele, aunque
evidentemente tiene razón: y cuantos más como usted, más genio que será... ;-)