Tesis - Dirección General de Servicios Telemáticos

Anuncio
UNIVERSIDAD DE COLIMA
FACULTAD DE TELEMÁTICA
Maestría en ciencias, área Telemática
ANÁLISIS DE LAS PLATAFORMAS
DE HARDWARE MODERNAS
Que para obtener el grado de
Maestro en Ciencias,
área Telemática
Presenta:
Ing. Juan Manuel Ramírez Alcaraz
Asesores:
M.C. María Andrade Aréchiga
M. C. Pedro Damián Reyes
Colima, Col., Junio de 2001
DEDICADO A:
Mi esposa e Hija
ya
Mis padres y Hermanos
AGRADECIMIENTOS
A Dios......
A mi esposa.......
A mis asesores:
Por el apoyo recibido para lograr mi titulación
A Azu, “Johnny”, Raúl, Mary, Sara, Pedro, Omar, Erika, Licho,
Maggy, Lulú, Juan Acevedo, Lupita, Miguel.
que me apoyaron y alentaron a titularme
A los compañeros de carrera:
Por haberla hecho más agradable.
RESUMEN
Este trabajo está enfocado al estudio y análisis de la arquitectura de las
computadoras actuales, la cual da soporte o establece la plataforma de hardware
sobre la cual trabajarán los sistemas operativos (plataforma de software). Los
sistemas operativos junto con el hardware determinan las características del
sistema de cómputo que ejecuta las aplicaciones de los usuarios.
Se describe la arquitectura von Neumann que ha prevalecido desde
principios de la década de los 40’s. Se mencionan también las características
básicas de las computadoras PC de IBM o compatibles y las de Sun Microsystem,
que sirven de ejemplo para demostrar que desde las PC hasta las computadoras
con tecnología superescalar (ejecutan varias instrucciones al mismo tiempo) e
incluso las que pueden manejar dos o más microprocesadores, no dejan de
basarse en la arquitectura von Neumann.
Concluye el trabajo exponiéndose el concepto de la máquina de
conexiones, que implementa una tecnología masivamente paralela, y que ha
empezado a sustituir las supercomputadoras actuales.
ABSTRACT
This paper is focused on the study and analysis of computer architecture,
which is the support or hardware platform on which operative systems (software
platforms) work. Operative systems, along with hardware, determine the
characteristics of the computer system that executes the applications run by the
user.
Central to this paper is the description of the von Neumann design, which
has prevailed from the beginning of the 40’s. The basic characteristics of IBM and
compatible PCs, and Sun Microsystems computers were analysed. It showed that
from PCs to computers with superscalar technology (those that execute several
instructions at the same time) to computers that can manage two or more
microprocessors, the architecture is always based on the von Neumann model.
The final part of this paper is an introduction to the concept of
the
connection machine, which uses a massively parallel technology and that has
begun substituting modern supercomputers.
INTRODUCCIÓN
Es sabido por todos que la evolución de la tecnología ha avanzado a
pasos agigantados, hasta el punto en que llega a ser difícil asimilarla, pues no se
termina de conocer una tecnología cuando ya ha aparecido una nueva.
Esto es palpable sobre todo en el área de la computación, cuyos mayores
avances han surgido en los últimos 60 años de nuestra historia, y la cual ha
llegado a influenciar de manera determinante a las demás áreas de la ciencia,
puesto que debido a su versatilidad las computadoras se han aplicado en cada
una de sus diversas áreas.
Hoy vemos que todos los planes curriculares universitarios contemplan
materias de computación como parte de los conocimientos básicos con que deben
contar los alumnos. Muy difícilmente nos encontraremos en la actualidad personas
que no hayan tenido contacto con una computadora, indirecta o directamente.
Dado el gran impacto de las computadoras en la sociedad, se hace
evidente que los estudiantes de las carreras afines deben ahondar un poco más
en el conocimiento de las computadoras, pues ya no basta con saber el
funcionamiento superficial de la máquina, se requiere un conocimiento más
profundo, quizá hasta el límite de la electrónica.
Este conocimiento nos permitirá reconocer las distintas características de
las plataformas de PC sobre las que podemos trabajar y, si tenemos la posibilidad,
elegir la que más convenga a nuestras necesidades basándose en un mejor
análisis de las características interiores de la computadora y la interrelación que
existen entre sus diferentes componentes (chipset, memoria RAM, memoria
Caché, discos, etc).
El término “Plataforma de hardware” se refiere a toda la base mecánica,
eléctrica y electrónica (circuitos integrados, cables, conectores, discos, etc.) de
una computadora, y a la forma como estos elementos están interrelacionados. El
término “arquitectura de la computadora” va implícito en la plataforma de
hardware, y se refiere al diseño lógico (simbólico) de la computadora.
El presente trabajo busca, fundamentalmente, ser un apoyo para las
materias afines a la computación y a cualquier persona que le interese conocer los
procesos internos de una computadora, principalmente a las funciones que realiza
un microprocesador y a la manera como éste se relaciona con la memoria,
además de ofrecer una nueva propuesta de arquitectura de computadora que sin
duda resultará interesante.
Para lograr lo anterior, se muestra un recorrido por los
acontecimientos históricos relevantes que dieron origen a la actual
arquitectura de la computadora, con lo cual se tendrá una idea de su
evolución; se tocan después los puntos esenciales que permiten describir
el funcionamiento interno de una computadora personal actual
(arquitectura von Neumann), con esto se logrará tener la idea completa del
funcionamiento interno de la computadora. Describe también las
características más comunes con que se presentan las computadoras IBM
y compatibles, y las de Sun Microsystem. Termina el presente trabajo con
los comentarios del Dr. Claudio Gutiérrez acerca del replanteamiento de la
arquitectura de las computadoras actuales la cual se basa en los
conceptos acuñados a principios de los 40’s por el científico húngaro John
Louis von Neumann y que se ha dado en llamar precisamente Arquitectura
von Neumann.
Este trabajo pretende ser la base de un curso de computación o
de arquitectura de computadoras, pero también puede ser utilizado como
base para cursos de mantenimiento y/o reparación de computadoras,
dado que para poder llevarlo a cabo se necesita conocer muy bien el
funcionamiento interno de la computadora. Existe también la posibilidad de
poder utilizarlo al inicio de un curso de sistemas operativos o de lenguaje
ensamblador. Así mismo, se podría iniciar con el presente trabajo, el
conocimiento del procesamiento paralelo, el cual es un tema de suma
importancia en la actualidad. Existen pues, diversos alcances que puede
tener el presente trabajo debido a la descripción funcional de una
computadora de von Neumann, que como ya se dijo antes, es la principal
arquitectura aplicable en las computadoras actuales y que prevalecerá
durante algunos años más.
ÍNDICE
RESUMEN ...........................................................................................................................i
ABSTRACT ......................................................................................................................... ii
INTRODUCCIÓN.................................................................................................................iii
CAPÍTULO I
ANTECEDENTES HISTÓRICOS DE LA COMPUTACIÓN ........................................12
1. 1. EL ÁBACO ................................................................................................................................................................13
1. 2. JOHN NAPIER(1550-1617)....................................................................................................................................15
1.3. BLAISE PASCAL (1623-1662).................................................................................................................................16
1.4. GOTTFRIED WILHELM LEIBNIZ (1646-1716).......................................................................................................17
1.5. CHARLES BABBAGE (1792-1871)..........................................................................................................................18
1.6. LA CONDESA A DA BYRON (1815-1851)...............................................................................................................21
1.7. JOSEPH M ARIE JACQUARD (1752 - 1834)............................................................................................................24
1.8. HERMAN HOLLERITH (1860-1929).......................................................................................................................26
1.9. KONRAD ZUSE (1910-1957)...................................................................................................................................27
1.10. A TANASOFF-BERRY Y LA ABC ...........................................................................................................................30
1.11. LA COLOSSUS.........................................................................................................................................................32
1.12. LA HARVARD MARK I : EL SUEÑO DE BABBAGE HECHO REALIDAD................................................................33
1.13. GRACE HOOPER (1906-1992). .............................................................................................................................38
1.14. EL PROYECTO ENIAC...........................................................................................................................................41
1.15. JOHN LOUIS VON NEUMANN (1903-1957) .........................................................................................................45
1.16. LAS GENERACIONES DE COMPUTADORAS.........................................................................................................51
CAPÍTULO II
LA ARQUITECTURA VON NEUMANN..........................................................................54
2.1. CONCEPTOS BÁSICOS ..............................................................................................................................................55
2.2. EL MODELO CONCEPTUAL DE LA COMPUTADORA ACTUAL ...............................................................................56
2.3. LOS ELEMENTOS REALES ........................................................................................................................................59
2.4. A RQUITECTURA Y ESTRUCTURA DE LA MEMORIA . .............................................................................................61
2.5. REPRESENTACIÓN DE DATOS EN LAS COMPUTADORAS......................................................................................67
2.6. PALABRAS DE INSTRUCCIÓN ..................................................................................................................................72
2.7. PROCESAMIENTO DE DATOS...................................................................................................................................77
2.8. EJECUCIÓN DE INSTRUCCIONES: M ANIPULACIÓN DE DATOS. ...........................................................................81
2.9. EJECUCIÓN DE INSTRUCCIONES: CONTROL DE PROGRAMAS.............................................................................83
2.10. CONTROL E INTERPRETACIÓN DE INSTRUCCIONES ...........................................................................................89
CAPÍTULO III
INTERFACES DE ENTRADA/SALIDA...........................................................................91
3.1. CARACTERÍSTICAS DE LOS DISPOSITIVOS DE ENTRADA Y SALIDA ....................................................................91
3.2. ENTRADA Y SALIDA EN MAPA DE MEMORIA ........................................................................................................93
3.3. ENTRADAS Y SALIDAS A TRAVÉS DE UN ESPACIO DE DIRECCIONES SEPARADO .............................................94
3.4. TIPOS DE TRANSFERENCIA .....................................................................................................................................95
3.5. A RQUITECTURAS DE CANAL ............................................................................................................................... 107
3.6. INTERFACES DE DISCOS. ...................................................................................................................................... 120
CAPÍTULO IV
LA PLATAFORMA DE IBM............................................................................................ 125
4.1. INTRODUCCIÓN ..................................................................................................................................................... 125
4.2. LA PLACA BASE ..................................................................................................................................................... 126
4.3. ELEMENTOS PRINCIPALES DE LA PLACA BASE .................................................................................................. 128
4.4. HISTORIA DE LOS MICROPROCESADORES.......................................................................................................... 132
4.5. CHIPSET DE CONTROL .......................................................................................................................................... 144
CAPÍTULO V
LA PLATAFORMA DE SUN .......................................................................................... 151
5.1 INTRODUCCIÓN ...................................................................................................................................................... 151
5.2. LOS MICROPROCESADORES ULTRASPARC ...................................................................................................... 151
5.3. RAZONES PARA USAR EL CPU ULTRASPARC III........................................................................................... 158
CAPÍTULO VI
UNA NUEVA PROPUESTA .......................................................................................... 164
6.1. A NÁLISIS DE LA A RQUITECTURA VON NEUMANN .......................................................................................... 164
6.2. ¿POR QUÉ LE CUESTA TANTO A UNA COMPUTADORA VON NEUMANN ENTENDER UN DIBUJO? ............... 166
6.3. A LGO ANDA MAL EN LA TEORÍA ......................................................................................................................... 169
6.4. LA MÁQUINA DE CONEXIONES Y SU MODELO TEÓRICO................................................................................... 172
CONCLUSIONES ........................................................................................................... 179
BIBLIOGRAFÍA................................................................................................................ 178
ÍNDICE DE FIGURAS Y TABLAS
Fig.1. Dibujo de un ábaco sostenido por un ciudadano chino de la antigüedad, que
demuestra la gran importancia dada por su cultura a este dispositivo de cálculo. ............ 6
Fig. 2. La calculadora china, manual, versus la computadora electrónica. .................................. 7
Fig. 3. John Napier, el inventor de los logaritmos y el concepto de la primera máquina de
calcular. ..................................................................................................................... 8
Fig. 4. Blaise Pascal, el joven genio, el constructor de la primera máquina de calcular y el
prototipo de su Pascalina. ........................................................................................... 9
Fig. 5. Gottfried Wilhelm Leibniz, inventor del código binario. ....................................................10
Fig. 6. Charles Babbage, considerado el padre de la computadora. Al centro, Componentes
de las máquinas de Charles Babbage. Der. Prototipo de la máquina Diferencial, la
máquina que jamás se llegó a construir. .......................................................................12
Fig. 7. Ada Lovelace, hija de Lord Byron. La primera programadora de la historia ......................15
Fig. 8. Joseph M. Jacquard, inventor de la programación textil basándose en planchas
perforadas. Al centro, su primer modelo de prensa manual, perforadora de planchas.
Der. Su Máquina perforadora de planchas....................................................................18
Fig. 9. Herman Hollerith, inventor del primer sistema para tabular y padre de la IBM. Der. Su
máquina tabular. ........................................................................................................19
Fig.10. Konrad Zuse, el inventor de la primera computadora en Alemania, durante la II
Guerra Mundial...........................................................................................................21
Fig.11. Der. Una de las pocas fotos de John Atanasoff trabajando con su computadora ABC.
Centro, Vista del prototipo ORIGINAL de la ABC construida en el garaje de John
Atanasoff con la ayuda de C. Berry. Der. Módulo de núcleo magnético a base de
tubos de vidrio al vacío, estándar de la primera generación. .........................................24
Fig. 12. Der. y centro. Vista parcial de la Collosus construida en Inglaterra. Izq. Los tubos de
vidrio al vacío de la Collosus .......................................................................................26
Fig. 13. La Mark I construida por Aiken con apoyo de IBM. .......................................................29
Fig. 14. La contraalmirante Grace Hopper................................................................................33
Fig. 15. Extremos, Programador trabajando en la ENIAC. Al centro, Vista de la ENIAC con
sus tableros y complicadas conexiones ........................................................................36
Fig. 16. John von Neumann junto a una de las computadoras de la época. ................................40
Fig. 17. Estructura conceptual de una computadora. ................................................................51
Fig. 18. Estructura de direcciones de la memoria principal. .......................................................59
Fig. 19. Canales (Buses) de comunicación entre la CPU y la memoria.......................................60
Fig. 20. Ejemplo de una palabra de punto fijo. ..........................................................................65
Fig. 21. Ejemplo de un formato de punto flotante. .....................................................................66
Fig. 22. Ejemplo de un programa real en memoria....................................................................70
Fig. 23. Estructura General de una ALU...................................................................................76
Fig. 24. El decodificador de instrucciones de la unidad de control..............................................84
Fig. 25. E/S a través de un espacio direcciones separado.........................................................89
Fig. 26. a) Ciclo de prueba y transferencia. b) Prueba y transferencia con otro proceso. .............93
Fig. 27. Secuencia de transferencia por interrupciones .............................................................94
Fig. 28. Controlador de acceso director a memoria. ..................................................................101
Fig. 29. El bus del procesador. ................................................................................................103
Fig. 30. El bus de memoria. ....................................................................................................105
Fig. 31. Capa de bus en una PC tradicional .............................................................................110
Fig. 32. Como trabaja un bus local. .........................................................................................111
Fig. 33. Tarjeta Madre de IBM PC o Compatibles .....................................................................122
Fig. 34. El microprocesador UltraSparc III................................................................................151
Tabla 1. Las generaciones de las computadoras ......................................................................47
Tabla 2. Ejemplos de dispositivos de Entrada y Salida..............................................................86
Tabla 3.Tipos de Sockets para micros de Intel .........................................................................126
Tabla 4. Lista de la familia Intel con sus características básicas ................................................136
Tabla 5. Comparación entre el Pentium II y el Pentium III .........................................................137
Tabla 6. Tabla de características del Pentium IV a 1.4 GHz .....................................................140
Tabla 7. Chipsets de Intel para Pentium y Pentium MMX..........................................................142
Tabla 8. Chipsets de VIA para Pentium y Pentium MMX...........................................................143
Tabla 9. Chipsets de ALI para Pentium y Pentium MMX............................................................144
Tabla 10. Chipsets de SIS para Pentium y Pentium MMX.........................................................145
Tabla 11. Chipsets de Intel para Pentium II y Celeron...............................................................146
Tabla 12. Chipsets de otras marcas para Pentium II y Celeron..................................................146
Tabla 13. Línea de productos de Sun conUltraSPARC II...........................................................158
Tabla 14. Características que acompañan al servidor Sun Enterprise 2. ....................................159
I
ANTECEDENTES HISTÓRICOS DE LA
COMPUTACIÓN
Para describir y entender mejor la situación actual de las computadoras es
importante conocer el desarrollo evolutivo que han tenido que pasar para llegar a
este momento. Conocer este desarrollo sirve también para encontrar las razones
que ocasionaron que la elección de ciertos caminos que no necesariamente son
los mejores para nuestro tiempo.
Por esta razón iniciaremos este trabajo comentando el desarrollo histórico
que han tenido las computadoras 1.
1.1. Las primeras máquinas de calcular
Los primeros vestigios de cálculo realizado por medios artesanalmente
mecánicos, por decirlo de algún modo, se remontan a 3000 años antes de Cristo.
Los Babilonios que habitaron en la antigua Mesopotania, empleaban unas
pequeñas bolas hechas de semillas o pequeñas piedras, a manera de "cuentas" y
que eran agrupadas en carriles de caña. Más aún, en 1800 a.C un matemático
babilonio inventó los algoritmos que le permitieron resolver problemas de cálculo
numérico.
1
El presente capítulo es una compilación de [1], [5], [6], [15] y [16]
El intercambio comercial y las conquistas bélicas entre los pueblos del
mundo antiguo, permitieron que el invento de los Babilonios, se transmitiesen a
otros grupos culturales a través del tiempo, permitiendo de este modo que con los
aportes respectivos, se mejorasen sus diseños.
1. 1. El Ábaco
Fueron los egipcios quienes 500 años a.C inventaron el primer dispositivo
para calcular, basado en bolitas atravezadas por alambres. Posteriormente, a
principios del segundo siglo d.C, los chinos perfeccionaron este dispositivo, al cual
le agregaron un soporte tipo bandeja, poniéndole por nombre Saun-pan. El Ábaco
permite sumar, restar, multiplicar y dividir.
La palabra Ábaco proviene del griego ABAX que significa una tabla o
carpeta cubierta de polvo. Este dispositivo en la forma moderna en que la
conocemos, realmente apareció en el siglo 13 d.C y fue sujeto de varios cambios y
evoluciones en su técnica de calcular. Actualmente está compuesto por 10
columnas con 2 bolitas en la parte superior y 5 en la parte inferior.
Fig.1. Dibujo de un ábaco sostenido por un ciudadano chino de la antigüedad, que demuestra la gran
importancia dada por su cultura a este dispositivo de cálculo.
Los Japoneses copiaron el ábaco chino y lo rediseñaron totalmente a 20
columnas con 1 bolita en la parte superior y 10 en la inferior, denominándolo
Soroban.
Como caso anecdótico cabe relatar que en 1946, un contador japonés de
nombre Kiyoshu Matzukai, quien era un experto en el uso del Ábaco, se enfrentó
en un concurso contra una computadora de la época durante dos días completos,
resultando como ganador indiscutible el ciudadano japonés.
Fig. 2. La calculadora china, manual, versus la computadora electrónica.
Actualmente el antiguo ábaco se emplea como método de enseñanza en
las escuelas de los países orientales, aunque es usado regularmente en muchos
lugares del mundo, particularmente en los pequeños negocios de los barrios
chinos (Chinatowns) en los Estados Unidos de América y Canadá.
Transcurrirían muchos siglos antes de que se ocurriera una innovación
trascendental y ello sucedió entre los siglos VII y IX, cuando surgiera el sistema
numérico arábigo, el mismo que empezó a difundirse lenta pero exitosamente en
toda Europa. Y tuvieron que transcurrir otros 1300 años antes de que se inventase
algún dispositivo vinculado al cálculo y es sólo entre los siglos XIV al XIX que se
suceden una serie de eventos e importantes aportes.
1. 2. John Napier(1550-1617).
En 1550, en el pequeño pueblo de Tower of Merchiston, Escocia, nace
John Napier, considerado como uno de los estudiosos matemáticos más
destacados de la historia universal, catalogado con Arquímedes, Isaac Newton o
Albert Einsten.
A la temprana edad de 13 años ingresó al Saint Salvador College, donde
estudió por espacio de 2 años. Luego viajó por toda Europa, principalmente a
Francia y Holanda donde continuó sus estudios e investigaciones entre 1566 y
1571. En vida recibió honrosamente el seudónimo de "la maravilla de Merchiston",
debido a su reconocida genialidad y visión imaginativa en diversos campos.
Fig. 3. John Napier, el inventor de los logaritmos y el concepto de la primera máquina de calcular.
La principal contribución de John Napier, es sin lugar a dudas la invención
de los logaritmos, que son un exponente al cual hay que elevar un número o base
para que iguale a un número dado.
Con relación al cálculo publicó una obra titulada "RABDOLOGIAE", que
era un pequeño tratado sobre la forma de ejecutar multiplicaciones. En su
apéndice explicaba un método para multiplicar y dividir usando varillas y placas
metálicas que puesto en la práctica se convirtió en la precursora de las modernas
calculadoras de bolsillo de hoy en día, pese a que este rústico sistema era
inseguro debido a que las varillas no podían ser manejadas con versatilidad. Este
invento es irónicamente conocido como los "huesos de Napier".
Abundan las historias sobre sus experimentos sobrenaturales y hay
evidencias de que practicaba la adivinación. Su vida estuvo rodeada de misterio y
falleció en abril de 1617. Merchiston, el lugar de su nacimiento es ahora el centro
de la famosa Universidad de Napier.
1.3. Blaise Pascal (1623-1662).
Nació en Clermont-Ferrand, Francia, el 19 de Junio de 1623. Hijo de un
recaudador de impuestos y miembro de la alta burguesía, el joven Blaise Pascal
no tuvo una instrucción formal y fue educado por su padre. Su juventud transcurrió
entre los salones de la nobleza y los círculos científicos de la sociedad francesa de
la época.
Fig. 4. Blaise Pascal, el joven genio, el constructor de la primera máquina de calcular y el prototipo de su
Pascalina.
Cuando apenas contaba con 19 años Blaise Pascal empezó a construir
una complicada máquina de sumar y restar, la cual fue concluida 3 años más
tarde. En 1649 gracias a un decreto real obtuvo el monopolio para la fabricación y
producción de su máquina de calcular conocida como la PASCALINA que
realizaba operaciones de hasta 8 dígitos.
En 1646 Blaise Pascal empezó sus experimentos barométricos, los cuales
continuó durante 8 años. En 1654 completó un trabajo dedicado a las leyes de la
hidrostática y a la demostración y descripción de los efectos del peso del aire.
Terminados estos experimentos realizó estudios de aritmética, destacando
en el análisis y cálculo de probabilidades. Blaise Pascal inventó la prensa
hidráulica y es considerado el padre y creador de la HIDROSTÁTICA.
Este joven científico falleció en 1662 en la ciudad de París a la temprana
edad de 39 años.
1.4. Gottfried Wilhelm Leibniz (1646-1716)
Gottfried Leibniz nació el 1o de Julio de 1646 en Leipzig, Alemania.
Realizó estudios de Leyes en la universidad de su ciudad natal y en 1675
estableció los fundamentos para el cálculo integral y diferencial.
Fig. 5. Gottfried Wilhelm Leibniz, inventor del código binario.
En 1676 publicó su "Nuevo Método para lo Máximo y Mínimo", una
exposición de cálculo diferencial. Fue filósofo, matemático y logístico. En 1670,
Leibniz mejora la máquina inventada por Blaise Pascal, al agregarle capacidades
de multiplicación, división y raíz cúbica.
En 1979 crea y presenta el modo aritmético binario, basado en "ceros" y
"unos", lo cual serviría unos siglos más tarde para estandarizar la simbología
utilizada para procesar la información en las computadoras modernas.
1.5. Charles Babbage (1792-1871).
Charles Babbage nació el 26 de Diciembre de 1792 en Londres, algunos
afirman que fue en 1791, y era hijo de un rico banquero inglés. Desde muy joven
se inclinó por los estudios de matemáticas y fue su propio instructor de Álgebra, de
cuyos estudios e investigación fue un terrible apasionado.
Después de ingresar al Trinity College de Cambridge, en 1811, descubrió
que estaba mucho más adelantado en sus conocimientos de matemáticas que sus
propios tutores. Conjuntamente con Hershel, Peacock y otros fundó la Sociedad
Analítica con el objeto de promover las matemáticas continentales. En 1816 fue
elegido miembro de la Royal Society y fue uno de los promotores de la formación
de la Sociedad Real de Astronomía, fundada en 1820.
El Babbage del que todo mundo ha leído es, sin embargo, el inventor
fracasado que se pasó toda su vida intentando construir la primera computadora
de uso general de la historia y que, pese a haber fracasado, hizo aportaciones
muy significativas al desarrollo de la informática.
Mucho es lo que se ha dicho sobre sus "maravillosas máquinas", pero
también mucha es la confusión que se ha desarrollado en torno a sus verdaderas
aportaciones y a las razones por las que nunca pudo completar la construcción de
las mismas.
Fig. 6. Charles Babbage, considerado el padre de la computadora. Al centro, Componentes de las
máquinas de Charles Babbage. Der. Prototipo de la máquina Diferencial, la máquina que jamás se
llegó a construir.
La primera de ellas, llamada la Máquina Diferencial era un dispositivo de 6
dígitos que resolvía ecuaciones polinómicas por el método diferencial, y que
requería, de cualquier manera, bastante trabajo con lápiz y papel. La idea no era
realmente tan buena como Babbage pensaba, pero él nunca lo hubiera admitido.
Sin embargo, este proyecto tuvo un impacto muy importante en la investigación
aplicada en Inglaterra, pues el gobierno británico decidió financiarlo con una fuerte
suma de dinero, en su afán de perfeccionar la impresión de las tablas de
navegación, tan comunes en aquella época. Joseph Clement, tal vez el mejor
fabricante de herramientas del Reino Unido, fue asignado para trabajar con
Babbage en el diseño de esta máquina. Sin embargo, tras una fuerte disputa
Babbage acabó quedándose solo y sin un centavo de las £34,000 que invirtió en el
proyecto después de 10 años de intenso trabajo.
Realmente, la aportación clave de Babbage a la computación moderna
vino con su siguiente máquina: la Máquina Analítica (Analytical Engine), la cual, de
haberse construído, habría sido efectivamente la primera computadora de uso
general de la historia. Babbage empezó a trabajar en este nuevo proyecto en
1834, pese a su fracaso con su máquina anterior, y continuó haciéndolo durante
toda su vida. Su modelo fue refinado muchas veces, y a lo largo de este proceso,
Babbage tuvo muchas ideas visionarias sobre las computadoras. Por ejemplo,
sugirió el uso de tarjetas perforadas para controlar su máquina, y anticipó el uso
de las mismas para representar un algoritmo e incluso inventó el concepto de
bucles o ciclos en programación. También anticipó el uso de microprogramación,
aunque dejó huecos importantes en su trabajo, y falló en anticipar cuestiones tan
obvias hoy en día como es el uso de variables en un programa.
Se ha llegado a decir sobre la Máquina Analítica, que sería injusto afirmar
que Babbage fracasó también en su intento por construirla, pues nunca intentó
realmente hacerlo, sabedor de que resultaría prácticamente imposible volver a
conseguir fondos para financiar tal proyecto. Sin embargo, sus planos y notas
fueron tan detallados que en 1991 el Museo Nacional de Ciencia y Tecnología de
Londres construyó una máquina basándose en ellos y usando sólo materiales y
herramientas disponibles en la época de Babbage. La máquina ha funcionado
desde entonces, sin ningún problema. ¿Por qué no pudo entonces Babbage lograr
fructificar su sueño? La respuesta sigue siendo un misterio. Hay quienes dicen que
le faltó habilidad política para negociar con el gobierno, pero la verdad es que
después de haberse gastado una fortuna y no recibir nada a cambio, el gobierno
de cualquier país se mostraría reacio a seguir invirtiendo en el mismo proyecto.
Tal vez la verdadera razón haya sido la naturaleza idealista de Babbage que le
impedía materializar muchas de sus maravillosas visiones, a la luz de su obsesión
por lo perfecto.
Las dos máquinas que ideó Babbage eran totalmente mecánicas, usaban
ejes, engranajes y poleas para poder ejecutar los cálculos. La Máquina Analítica
estaba compuesta por 5 partes, que tienen mucho en común con las modernas
computadoras:
1. Dispositivo de entrada de la información: tarjetas metálicas perforadas en
miles de combinaciones.
2. Unidad de almacenaje : tablero que contenía ejes y piñones que podían
registrar dígitos.
3. Procesador: dispositivo con cientos de ejes verticales y miles de piñones
4. Unidad de control: dispositivo en forma de barril con filamentos y ejes (como
cuerdas de piano).
5. Dispositivo de salida: Plantillas diseñadas para ser utilizadas en una prensa
de imprenta.
Se sabe que Babbage nunca recibió remuneración alguna por su trabajo
de 10 años en la Máquina Diferencial, por lo que el Parlamento Inglés decidió
ofrecerle un título de nobleza a cambio (le ofrecieron el título de Barón). Babbage
rehusó aceptarlo, pidiendo mejor una pensión vitalicia que nunca le fue concedida.
¿Un error de apreciación? No realmente, si consideramos que lo que realmente
recibió a cambió del trabajo de toda una vida fue algo más valioso que cualquier
título de nobleza: un sitio privilegiado en la historia de la informática, el de “padre
de la computación moderna”.
Babbage nunca tuvo miedo a ser olvidado ni se sintió decepcionado por la
indiferencia que sus contemporáneos mostraron por su trabajo. Cerca del final de
su vida escribió: "No tengo miedo de dejar mi reputación a cargo de aquel que
tenga éxito construyendo mi Máquina Analítica, porque él y sólo él será capaz de
apreciar totalmente la naturaleza de mi esfuerzo y el valor de sus resultados".
Nada más cierto que eso, puesto que a pesar de que Charles Babbage murió en
total soledad la mañana del 18 de octubre de 1871 a sólo 2 meses de volverse un
octogenario, sus aportaciones serían realmente apreciadas sólo hasta que las
primeras computadoras digitales fueron construidas, a mediados del presente
siglo.
1.6. La condesa Ada Byron (1815-1851)
Augusta Ada Byron, también llamada Lady Lovelace, fué uno de los
personajes más pintorescos de la historia de la computación. Nació en Londres, el
10 de diciembre de 1815 siendo hija del ilustre poeta inglés Lord Byron. Apenas 5
semanas después de nacida, sus padres se separaron. Su madre Anna Isabella
Milbanke obtuvo la custodia de su hija, encargándose de su crianza y educación.
Intentando ocultarle toda traza de su padre, decidió motivar en ella el gusto por las
matemáticas y desalentar cualquier tipo de talento que le recordara a su exesposo.
Fig. 7. Ada Lovelace, hija de Lord Byron. La primera programadora de la historia
Lady Lovelace tuvo vocaciones de analista y metafísica y a los 17 años
influenciada por Mary Somerville realizó sus estudios de matemáticas, estudios
que dada su posición aristocrática fueron llevados a cabo a través de tutores
particulares, como, precisamente, Mary Somerville.
Fue en una cena que Ada conoció a Babbage, cuando ésta contaba con
sólo 18 años de edad. Ahí escuchó y se interesó sobre las ideas de Charles
Babbage acerca de una nueva máquina de calcular. Ella intuyó que un proyecto
de esa envergadura podría convertirse en una realidad y fue una de las pocas
personas que creyó en la "universalidad de las ideas", preconizada por Charles
Babbage y decidió colaborar con él.
Babbage reportó los avances de su trabajo en un seminario en Turín,
Italia, en el otoño de 1841. Un general italiano llamado Luigi F. Manabrea publicó
un importante reporte sobre el trabajo de Babbage en 1842 usando su lengua
natal. La aportación más importante de Ada fue precisamente la traducción al
inglés de este reporte, realizada a instancias del propio Babbage. Se cuenta que
cuando Babbage vio la traducción de Ada, le sugirió a ésta que añadiera sus
propios comentarios, sintiendo que ella poseía un conocimiento suficientemente
detallado del proyecto como para hacer sus propias aportaciones. Cuando
finalmente terminó su manuscrito, Ada sentía que había trabajado lo suficiente
como para merecer crédito, pero en aquella época no era aceptable que las
mujeres escribieran artículos científicos (sobre todo si pertenecían a la nobleza).
La solución fue firmar el reporte como "A. L. L." (Ada Lady Lovelace). El reporte,
publicado en 1843, acabó teniendo una longitud tres veces mayor al original, y
contiene muchas de las importantes predicciones de Ada con respecto a la
Máquina Analítica de Babbage. De suma importancia resulta por ejemplo su
sugerencia de usar tarjetas de manera repetida con un propósito similar al que
tienen las subrutinas de hoy en día. Además, Ada predijo que una máquina de
esta naturaleza sería capaz de componer música, de producir gráficos, y que
podría ser usada tanto para aplicaciones prácticas como para las puramente
científicas. Más importante aún, es su clara percepción de las limitaciones del
predecesor de las computadoras modernas: "la Máquina Analítica no tiene
pretensiones de crear nada original. Puede simplemente hacer lo que se le ordene
que haga. Puede realizar análisis, pero no tiene el poder de anticipar ninguna
revelación analítica o alguna verdad. Su objetivo es asistirnos en hacer disponible
aquello con lo que ya estamos familiarizados".
Su otra aportación significativa dentro de este reporte son los numerosos
ejemplos que proporcionó del uso de la Máquina Analítica. Por ejemplo, incluyó
demostraciones de cómo calcular funciones trigonométricas que contuvieran
variables, y de cómo la máquina de Babbage resolvería problemas difíciles sin
error. El más destacado de sus ejemplos es un detallado plan para calcular los
números de Bernoulli que más tarde sería denominado el primer "programa de
computadora", y su autora pasaría a convertirse por ende en la "primera
programadora de la historia". En 1979, el Departamento de Defensa de los
Estados Unidos decidió utilizar su nombre (ADA) para denominar a un nuevo
lenguaje de programación utilizado como estándar para desarrollar su software
interno, en un merecido homenaje a su obra en el desarrollo de la computadora
moderna.
De quebrantable salud y muy enfermiza, al igual que su padre, Lord Byron,
Lady Lovelace falleció de cáncer en el útero, a la corta edad de 36 años.
1.7. Joseph Marie Jacquard (1752 - 1834).
Nació el 7 de julio de 1752 en la ciudad de Lyon, Francia, y aunque fue
hijo de un modesto obrero textil tuvo grandes aspiraciones para su futuro.
En 1801 y ya convertido en inventor e industrial textil Joseph Marie
Jacquard dio un fundamental aporte al proceso de las máquinas programables al
modificar una maquinaria textil, inventada por Vaucanson, a la cual implementó un
sistema de plantillas o moldes metálicos perforados, unidas por correas, que
permitían programar las puntadas del tejido logrando obtener una diversidad de
tramas y figuras.
Fue tan grande el interés despertado por el invento de Jacquard, que el
propio Napoleón Bonaparte se quedó muy asombrado cuando en 1805 asistió a
una exibición industrial celebrada en Lyon, para posteriormente condecorarlo con
la medalla de La Legión de Honor y un premio de 50 francos por cada telar que
fuese comercializado durante el período de 6 años.
Fig. 8. Joseph M. Jacquard, inventor de la programación textil basándose en planchas perforadas. Al
centro, su primer modelo de prensa manual, perforadora de planchas. Der. Su Máquina perforadora
de planchas.
A pesar del impacto comercial del telar de Jacquard, que permitió que un
sólo hombre realizara el trabajo de varios, el hecho ocasionó el temor de la
pérdida de empleos de los obreros textiles.
El inventor recibió amenazas de muerte y su popularidad decayó, pero a
partir de 1806 su invento se posesionó del mercado. Jacquard terminó sus días
trabajando como regidor municipal en la ciudad de Oullins, no muy lejos de su
ciudad natal Lyon, falleciendo el 7 de agosto de 1834 a la edad de 82 años.
A partir del invento de Jacquard empezaron a proliferar, poniéndose muy
de moda las máquinas y equipos programados por sistemas perforados, tales
como los pianos mecánicos, conocidos como pianolas, muñecos y otros
novedosos juguetes mecánicos.
Aunque su aportación no fue directamente en el área de la computación,
se cree que su trabajo tuvo influencia en la construcción de las máquinas
tabuladoras de Hollerith.
1.8. Herman Hollerith (1860-1929).
Nacido en Buffalo, New York, el 29 de Febrero de 1860 e hijo de unos
inmigrantes alemanes realizó estudios en el City College de New York a la edad
de 15 años y se graduó de Ingeniero de Minas, con altas distinciones, en la
Columbia School of Mines, a la edad de 19 años.
Fig. 9. Herman Hollerith, inventor del primer sistema para tabular y padre de la IBM. Der. Su máquina tabular.
Su primer empleo lo obtuvo en la Oficina de Censos en 1880.
Posteriormente enseñó ingeniería mecánica en el Instituto Tecnológico de
Massashusetts (MIT) y luego trabajó para la Oficina de Patentes del gobierno
norteamericano.
Hollerith empezó a trabajar con el sistema de máquinas tabuladoras
durante sus días en el MIT, logrando su primera patente en 1884.
Desarrolló una prensa manual que detectaba los orificios en las tarjetas
perforadas, tenía un alambre que pasaba a través de los huecos dentro de una
copa de mercurio debajo de la tarjeta, cerrando de este modo el circuito eléctrico.
Este proceso disparaba unos contadores mecánicos y ordenaba los recipientes de
las tarjetas, tabulando así en forma apropiada la información.
En 1880 se celebró un censo de población nacional en los Estados Unidos
y tuvieron que transcurrir 7 largos años antes de que toda la información quedase
procesada por el Buró de Censos, debido a que los datos levantados eran
tabulados en papel. Por consiguiente se estimó que el próximo censo a celebrarse
en 1890 tardaría unos 10 o 12 años en procesarse y poder obtener los resultados
finales. Es por ello que el gobierno norteamericano convocó a una licitación para
un sistema de procesamiento de datos que proporcionase resultados más rápidos.
Herman Hollerith, que trabajaba como empleado del buró de Censos,
propuso su sistema basado en tarjetas perforadas que si bien esto no era una
invención, puesto en práctica constituyó el primer intento exitoso de automatizar el
procesamiento de muy grandes volúmenes de información.
Las máquinas de Hollerith clasificaron, ordenaron y enumeraron las
tarjetas perforadas que contenían los datos de las personas censadas, logrando
una rápida emisión de reportes, a partir de los 6 meses. Los resultados finales del
censo de 1890 se obtuvieron en el tiempo record de 2 años y medio.
Herman Hollerith en 1896 fundó la TABULATING MACHINE COMPANY
que luego se convirtió en la Computer Tabulating Machine (CTR).
Hollerith se retiró en 1921 y en 1924 CTR cambió su nombre por el de
International Business Machines Corporation (IBM), que años más tarde se
convertiría en el gigante de la computación. Herman Hollerith falleció el 17 de
Noviembre de 1929.
1.9. Konrad Zuse (1910-1957).
Konrad Zuse nació en Berlín el 22 de Junio de 1910. Estudió ingeniería
civil en el Instituto Politécnico de Berlín, graduándose en 1933, trabajó en la
industria aeronáutica pero años más tarde se retiró para dedicarse a las tareas de
"inventor", labor que desarrolló en el dormitorio de un departamento desocupado,
propiedad de sus padres.
En 1949 formó la fundación ZUSE KG dedicada al desarrollo de
programas de control para computadoras electromecánicas. En 1956 esta
fundación fue adquirida por la empresa Siemens.
Durante 1936 y 1939 el ingeniero alemán Konrad Zuse construyó la
primera computadora electromecánica binaria programable, la cual hacía uso de
relés eléctricos para automatizar los procesos. En 1938 terminó un prototipo
puramente mecánico para pruebas al cual llamó Z1. La Z1 tenía una memoria que
podía almacenar hasta 16 números de 24 bits en punto flotante y tenía un juego
de 90 micro instrucciones. Esta computadora nunca llegó a funcionar
completamente debido a la falta de perfeccionamiento en sus elementos
mecánicos.
Fig.10. Konrad Zuse, el inventor de la primera computadora en Alemania, durante la II Guerra Mundial
Zuse comenzó a trabajar en 1938 en un segundo modelo de su máquina
que utilizaría relevadores electromagnéticos. Antes de rediseñar completamente la
Z1, Zuse decidió construir un prototipo para poder cerciorarse de que sus ideas
eran correctas. Así nació la Z2, que era una máquina cuya unidad aritmética
operaba con números de punto fijo, haciendo uso de unos 200 relevadores
telefónicos. Esta unidad aritmética estaba acoplada a la memoria mecánica de la
Z1, y el mecanismo de control se basaba en un sistema de cinta perforada.
Aunque este prototipo sólo era capaz de calcular ciertas fórmulas sencillas,
demostró sobradamente la factibilidad de construir una computadora con
relevadores electromagnéticos.
Motivado por sus logros con la Z2, Zuse trabajó de 1939 a 1941 en la
construcción de su nueva computadora, que eventualmente sería denominada Z3,
y que fue parcialmente patrocinada por el Deutschen Versuchsanhalt für Luftfahrt
(Instituto de Investigaciones Aeronáuticas de Alemania, DVL por sus siglas en
alemán). Su filosofía de diseño fue muy similar al de la Z1, usando los mismos
sistemas de entrada y salida de datos (un teclado y una pantalla eléctrica), y las
mismas dos unidades aritméticas para el exponente y la mantisa (estas unidades
funcionaban en paralelo). Sus diferencias más notables además del uso de 2600
relevadores electromagnéticos, fueron en cuanto a la precisión de los números de
punto flotante que usaba, pues en vez de usar 16 bits para la mantisa, la Z3
utilizaba únicamente 14, con lo que cada número se almacenaba en 22 bits (se
requerían 7 bits para el exponente y 1 bit para el signo). Sin embargo, la unidad de
almacenamiento de la Z3 podía guardar hasta 64 números, en vez de los 16 que
permitía la Z1.
En 1942, Zuse comenzó a trabajar en la Z4, que sería una versión
mejorada de la Z3. La Z4 usaría números de 32 bits en vez de los 22 de la Z3,
tendría una memoria mecánica igual que la Z1, aunque con capacidad para 1024
números, y contaría con unidades especiales para el procesamiento de
programas, además de algunas otras mejoras técnicas (por ejemplo, tendría
subrutinas y saltos condicionales, que era algo de lo que adolecían sus modelos
anteriores). A principios de los 50’s y después de haber sobrevivido a diferentes
traslados a causa de la II Guerra Mundial (terminó en Zurich, Suiza), la Z4 se
convirtió en la única computadora operacional en Europa, y una de las pocas en el
mundo. Cabe mencionar que ésta computadora ocupaba menos de un metro
cúbico de espacio; una verdadera proeza de ingeniería.
Entre 1945 y 1946 creó el "Plankalkül" (Plan de Cálculos), el primer
lenguaje de programación de la historia y predecesor de los lenguajes modernos
de programación algorítmica.
De todos los grandes esfuerzos por producir una computadora durante la
Segunda Guerra Mundial, tal vez el de Zuse haya sido el más encomiable, por sus
limitados recursos financieros, de materiales, de conocimientos y hasta morales.
Desgraciadamente, la falta de difusión de su trabajo, opacado por el monstruo de
la guerra, ubican a Zuse como uno de los pioneros más oscuros de la historia de
la computación. Debido a la pérdida de sus máquinas y a no contar con
publicaciones que difundieran sus logros, sus revolucionarias ideas tuvieron
realmente poco impacto en el desarrollo de la computadora moderna, y acabaron
por ser re-descubiertas en los Estados Unidos e Inglaterra. Sin embargo, eso no
minimiza la importancia de sus aportaciones, pues como Eric Weiss bien dijera en
su tributo a Zuse en 1996: "afortunadamente hay gloria suficiente para todos".
A lo largo de su vida Konrad Zuse fue motivo de muchos honores,
falleciendo en Hünfeld, Alemania el 18 de Diciembre de 1995.
1.10. Atanasoff-Berry y la ABC
La Atanasoff-Berry Computer o ABC empezó a ser concebida por el
profesor de física John Vincent Atanasoff a partir de 1933, formulando la idea de
usar el sistema de números binarios para su funcionamiento. Al buscar un
ayudante para cumplir con su innovativo propósito, le fué recomendado por un
colega, el joven y brillante recién graduado en ingeniería mecánica de nombre
Clifford Berry.
Entre los años de 1937 y 1942, contando con la ayuda de Berry, diseño y
construyó en el sótano de su laboratorio en la Universidad del Estado de Iowa su
famoso prototipo a un costo de 1,460 dólares, el mismo que estaba compuesto de
tubos al vacío, capacitores y un tambor rotatorio para el manejo de los elementos
de la memoria, así como un sistema lógico para su operatividad. Esta
computadora fue usada para resolver ecuaciones matemáticas complejas.
La Atanasoff Berry Computer usaba relés, núcleos magnéticos para la
memoria y tubos de vidrio al vacío (radio tubos) y condensadores (capacitores)
para el almacenamiento de la memoria y el procesamiento de los datos.
Fig. 11. Der. Una de las pocas fotos de John Atanasoff trabajando con su computadora ABC. Centro, Vista del
prototipo ORIGINAL de la ABC construida en el garaje de John Atanasoff con la ayuda de C. Berry.
Der. Módulo de núcleo magnético a base de tubos de vidrio al vacío, estándar de la primera
generación.
La Atanasoff-Berry computer o ABC terminada de construirse en 1942 en
el Iowa State College fue la primera computadora electrónica digital, aunque sin
buenos resultados y nunca fue mejorada. Desgraciadamente sus inventores jamás
la patentaron y por aquel entonces surgieron problemas sobre la propiedad
intelectual de la misma, en cuyas divergencias participó la IBM.
Aunque existen serias dudas sobre si la ABC (Atanasoff-Berry Computer)
fue completamente operativa, el hecho es que John W. Mauchly visitó a Atanasoff
en 1941 y observó muy de cerca su impresionante maquinaria y tuvo la
oportunidad de revisar su tecnología. Existe una gran controversia respecto a que
Mauchly copió muchas de las ideas y conceptos del profesor Atanasoff, para
posteriormente entre los años de 1943 a 1946 construyera la computadora ENIAC.
1.11. La Colossus
Si la bomba atómica fue el secreto mejor guardado por los
norteamericanos durante la Segunda Guerra Mundial, su equivalente en Inglaterra
fue el Colossus, la primera computadora electrónica del mundo que se diseñó
explícitamente para poder descifrar los mensajes secretos de los nazis.
Thomas H. Flowers era un ingeniero de la Post Office Research Station
(PORS) que se incorporó en el proyecto de la Heath Robinson (una máquina
propuesta por el matemático Maxwell Herman Alexander Newman para acelerar la
decodificación del código Enigma de los alemanes) con la finalidad de rediseñar
su contador electrónico. Al ver las dificultades mecánicas de la máquina, Flowers
tuvo la osada idea de proponer que los datos de las cintas se almacenaran
internamente, de manera electrónica. Ni Wynn-Williams ni Harold Keen (los
expertos en electrónica de Bletchley Park) creían que la máquina de 1,500 bulbos
que Flowers propuso funcionaría. Pero afortunadamente, Newman lo apoyó de
cualquier manera y el proyecto fue autorizado, ante el desconsuelo de W. G.
Radley (director de la PORS), que tuvo que poner a la mitad de su personal a
trabajar día y noche durante 11 meses consecutivos.
La máquina, que sería llamada después Colossus, fue diseñada por
Thomas H. Flowers, S. W. Broadbent y W. Chandler de forma ultra secreta. Ni
siquiera ellos mismos pudieron ver nunca todas las partes de la máquina y nunca
se hicieron reproducciones de los diseños originales, los cuales se tomaron
directamente de las notas elaboradas por sus creadores. Nunca hubo manuales,
ni registros o preguntas sobre sus piezas o la cantidad de labor consumida. Su
ensamblaje y el montaje de sus conexiones internas se efectuaron por etapas,
usando personal distinto, para que nadie supiera los detalles de toda la máquina
La primera Colossus se puso en funcionamiento en diciembre de 1943.
Colossus usaba una lectora fotoeléctrica similar a la de la Heath Robinson, pero
mucho más rápida (leía 5,000 caracteres por segundo).
Fig. 12. Der. y centro. Vista parcial de la Collosus construida en Inglaterra. Izq. Los tubos de vidrio al vacío de
la Collosus .
Se estima que hacia el final de la guerra habían al menos 10 máquinas
Colossus en operación (todas ellas distintas) y varias más estaban produciéndose.
Aparentemente se destruyeron ocho de estas 10 máquinas en 1946, por orden
directa de Winston Churchill. Una más sobrevivió hasta los 50’s, y la última fue
desmantelada en 1960 cuando todos los diagramas de sus circuitos y sus planos
fueron quemados. Se sabe que varios científicos norteamericanos vieron funcionar
a Colossus en visitas secretas a Bletchley Park después de la guerra, pero el
gobierno británico vetó toda la información sobre la máquina durante 30 años. Las
razones no fueron sólo militares, sino también políticas, pues se sabe que hubo al
menos un bombardeo alemán a una ciudad inglesa que pudo haberse evitado
gracias a Colossus, pero que se dejó proceder (a costa de un sinnúmero de
muertes) para proteger uno de los secretos mejor guardados durante la Segunda
Guerra Mundial.
1.12. La Harvard Mark I : El sueño de Babbage hecho
realidad
Mientras los Laboratorios Bell diseñaban su calculadora de números
complejos, un instructor del Departamento de Física de Harvard comenzó a
concebir la posibilidad de construir una máquina que le ayudara a efectuar los
tediosos cálculos que requería para su tesis doctoral.
De tal forma, decidió escribir en 1937 un memo titulado "Proposed
Automatic Calculating Machine", en el cual describía sus ideas al respecto. La idea
fundamental de este instructor, llamado Howard Hathaway Aiken, era adaptar el
equipo de conteo de la época de tal manera que pudiera manejar la mayoría de
las funciones matemáticas de uso común (senos, cosenos, logaritmos, etc.), que
procesara números positivos y negativos y que trabajara de forma totalmente
automática.
Resulta interesante destacar que Aiken conocía con bastante detalle el
trabajo de los pioneros en computación que lo precedieron y fue influenciado
fuertemente por las ideas de Babbage. Una vez que sus ideas se solidificaron,
Aiken comenzó a visitar varias empresas para proponerles su proyecto.
Después de visitar varias empresas, encontró apoyo en IBM, quien envió a
Aiken con uno de sus mejores ingenieros: James W. Bryce, quien a su vez asignó
a Clark D. Lake y a dos de sus asistentes (Benjamin M. Durfee y Francis E.
Hamilton) la construcción y diseño de la máquina de Aiken. Aiken reconocería
después a Clark, Durfee y Hamilton como sus coinventores.
El proyecto inició en 1939 y la máquina se construyó en el North Street
Laboratory de IBM, en Endicott, Nueva York. La tarea tomó varios años, pues
primero se tuvieron que analizar los aspectos prácticos de la idea de Aiken, a la
luz de la experiencia de los ingenieros de IBM en la construcción de equipo de
cálculo.
La máquina se terminó en enero de 1943, y se le trasladó posteriormente
a Harvard, donde se demostró públicamente por primera vez en mayo de 1944. El
7 de agosto de ese mismo año, Thomas J. Watson (director de IBM) obsequió la
máquina a Harvard como un gesto de buena voluntad de IBM. Oficialmente, se le
bautizó como Harvard-IBM Automatic Sequence Controlled Calculator'' (ASCC),
pero se le conoció después como la Harvard Mark I, debido a la serie de máquinas
con ese nombre que Aiken construyera después.
La Mark I era una máquina impresionante, pues medía unos 15.5 metros
de largo, unos 2.40 metros de alto y unos 60 centímetros de ancho, pesando unas
cinco toneladas. Además de sus gigantescas dimensiones, la máquina llamaba la
atención porque IBM la construyó a propósito con gabinetes elegantes que tenían,
en su mayoría, costosas cubiertas de cristal muy llamativas. Su funcionamiento
era electromecánico y su interior estaba compuesto de unas 750,000 piezas
diferentes, entre relevadores, interruptores binarios, ruedas rotatorias para los
registros, interruptores de diez posiciones (para los dígitos), etc.
Fig. 13. La Mark I construida por Aiken con apoyo de IBM.
Había más de 1,400 interruptores rotatorios de diez posiciones en el frente
de la máquina, pues éstos se usaban para establecer los valores que sus 60
registros constantes (colocados en un panel frontal) contendrían. Además de estos
registros constantes, la Mark I contenía 72 registros mecánicos, cada uno de los
cuales podía almacenar 23 dígitos decimales más un dígito para el signo (cero
para el más y nueve para el menos). La posición del punto decimal estaba fija
durante la solución de un problema, pero podía ajustarse previamente de manera
que estuviera entre dos dígitos cualesquiera.
La máquina contaba también con mecanismos que permitían efectuar
cálculos de doble precisión (46 decimales), mediante la unión de dos registros, en
una forma análoga a la Máquina Analítica de Babbage.
La Mark I recibía sus secuencias de instrucciones (programas) y sus datos
a través de lectoras de cinta de papel perforada y los números se transferían de
un registro a otro por medio de señales eléctricas. Tal vez por eso no deba
sorprendernos que a pesar de medir "sólo" 15 metros de largo, el cableado interno
de la Mark I tenía una longitud de más de 800 kilómetros, con más de tres millones
de conexiones. Los resultados producidos se imprimían usando máquinas de
escribir eléctricas o perforadoras de tarjetas, en la más pura tradición de IBM.
A pesar de su tamaño, la Mark I no era extremadamente ruidosa y se dice
que cuando estaba en operación, el sonido que producía era similar al que haría
un cuarto lleno de mecanógrafos trabajando de forma sincronizada.
La Mark I tardaba aproximadamente 0.3 segundos en transferir un número
de un registro a otro y en realizar cada una de sus otras operaciones básicas:
sumar, restar, poner a cero un registro, etc. Para efectuar multiplicaciones,
divisiones, y calcular valores específicos de algunas funciones, la máquina usaba
unidades aritméticas especiales, aunque éstas solían evitarse al máximo posible
debido a su lentitud. Por ejemplo, calcular el seno de un ángulo tardaba un minuto
y calcular el logaritmo de un número requería 68.4 segundos. La multiplicación y la
división eran más rápidas, dada la naturaleza mecánica de la máquina. La primera
tardaba cuando mucho seis segundos y la segunda 16 (aunque normalmente
tomaba sólo 10 segundos).
La Mark I originalmente tenía poca capacidad para modificar su secuencia
de instrucciones basándose en los resultados producidos durante el proceso de
cálculo. La máquina podía escoger de entre diferentes algoritmos para efectuar un
cierto cálculo, basándose en el valor que tuviera un argumento, sin embargo, para
cambiar de una secuencia de instrucciones a otra, se tenía que detener la
máquina y hacer que los operadores cambiaran la cinta de control. Curiosamente,
la Mark I sí permitía verificar si el contenido de un registro era mayor que un cierto
valor (una diferencia notable con la Z1 de Zuse), pero dado que no podía
realmente interrumpir el cálculo que estaba haciendo para saltar a otro lado de
manera automática, suele considerarse que la Mark I no tenía realmente saltos
condicionales.
Esta característica, sin embargo, se le agregó posteriormente, a través del
llamado "Mecanismo Subsidiario de Secuencia", que consistía de tres páneles de
tableros de conexiones que se acompañaban de tres lectoras de cinta de papel.
Con estos aditamentos, la Mark I podía transferir el control entre cualquiera de las
lectoras, dependiendo del contenido de los registros. El Mecanismo Subsidiario de
Secuencia permitía definir (mediante conexiones de sus tableros) hasta 10
subrutinas, cada una de las cuales podía tener un máximo de 22 instrucciones.
La Mark I fue puesta en operación desde abril de 1944, usándose para
resolver problemas de balística y diseño naval durante el final de la Segunda
Guerra Mundial. Fue durante este tiempo que Aiken contó con la colaboración de
otro personaje legendario en la historia de la computación: la teniente Grace
Murray Hopper.
Después de la guerra, la Mark I fue utilizada principalmente para calcular
tablas de las funciones de Bessel (usadas para resolver cierto tipo de ecuación
diferencial). Debido a esto, se cuenta que sus programadores solían llamar
afectuosamente "Bessie" a la máquina.
Para esa época, sin embargo, la Mark I era ya una máquina muy lenta en
comparación con las computadoras electrónicas existentes. No obstante se le tuvo
en uso hasta 1959, en que se le desmanteló, manteniendo algunas de sus partes
en exhibición en Harvard y otras en el Smithsonian Institute en Washington, D. C.
La Mark I fue indudablemente una pieza clave en el desarrollo de las
computadoras en Estados Unidos y se sabe que prácticamente todos los
personajes importantes relacionados con la computación en aquella época
visitaron en algún momento Harvard para verla funcionar. Además, la Mark I
marcó el inicio del involucramiento de IBM en el diseño de computadoras de
propósito general.
Aiken, que siempre admitió haber sido influenciado por las ideas de
Babbage, debió haberse sentido orgulloso cuando la prestigiosa revista británica
Nature publicó un artículo en 1946 sobre la Mark I, titulado "El sueño de Babbage
se vuelve realidad". Aiken llegó a desarrollar desde el Mark II hasta el IV.
1.13. Grace Hooper (1906-1992).
Grace Brewster Murray nació el 9 de diciembre de 1906 en la ciudad de
Nueva York. Fue la primogénita de Mary Campbell van Horn Murray y Walter
Fletcher Murray. Grace asistió a una serie de escuelas privadas para mujeres, y
en 1924 ingresó a Vassar College en Poughkeepsie, Nueva York, donde cursó
estudios en matemáticas y física, graduándose con honores en 1928.
Posteriormente obtuvo una beca para cursar una maestría en matemáticas en la
universidad Yale, de donde se graduó en 1930 y continuó sus estudios para
obtener el doctorado en matemáticas en 1934. El 15 de junio de 1930, Grace
contrajo nupcias con Vincent Foster Hopper, quien le daría el apellido por el que
más tarde sería conocida en todo el mundo. En 1943, al igual que muchas otras
mujeres norteamericanas, decidió unirse a las fuerzas armadas en plena Segunda
Guerra Mundial.
Tras graduarse primera en su clase en junio de 1944, se le comisionó con
el rango de teniente a Harvard, para trabajar en el Proyecto de Computación del
Buró de Barcos. Fue así como conoció a Aiken y a la impresionante Mark I sin
saber entonces que ella sería la tercera persona en programarla (los otros 2 eran
Robert V. D. Campbell y Richard Bloch). El Mark I se utilizaba en ese entonces
para calcular los ángulos en los que debían apuntarse los nuevos cañones de la
Marina. Debido a que estos ángulos debían variarse de acuerdo a las condiciones
climatológicas, se requerían miles de cálculos para obtenerlos. De tal forma, el
Mark I tenía que estar corriendo las 24 horas, y sus programadores tenían que
dormir en sus escritorios, previendo que la máquina pudiera fallar en algún
momento.
Fue precisamente con el sucesor de esta máquina, llamado Mark II que
surgió una de las anécdotas más famosas de la historia de la computación: en el
verano de 1945, el equipo de Hopper se encontraba trabajando en un edificio
temporal, sin aire acondicionado. Para tratar de amainar el calor infernal que los
agobiaba, tenían todas las ventanas abiertas. Repentinamente, la máquina dejo de
funcionar. Hurgando dentro de ella, encontraron una enorme polilla que fue
aplastada por uno de los relevadores. El insecto fue removido cuidadosamente
con unas pinzas y se pegó con cinta adhesiva a la bitácora de trabajo con la nota:
"Primer bicho encontrado". Aunque la misma Hopper afirmó alguna vez que no
creía haber inventado el término "bug", tan usado hoy en día en programación,
muchas fuentes bibliográficas se lo atribuyen. Sin embargo, parece haber
evidencia que el término se utilizaba al menos desde la época de Edison. Se dice
que después de este incidente, ante el acoso de Aiken con respecto a alguna
cierta tarea, los programadores usarían como excusa para no tenerlo listo el que
habían estado "depurando" (debugging) la máquina, haciendo alusión a la
operación de remover insectos de los relevadores.
Fig. 14. La contraalmirante Grace Hopper.
Después de la guerra Grace deseaba seguir perteneciendo a la marina
pero dada su edad su propuesta fue rechazada, así que decidió quedarse en
Harvard como investigadora (Research Fellow) desarrollando algunos programas
ya de tipo comercial para la Mark I. Después de 3 años Grace se fue a trabajar a
la Eckert-Mauchly Corporation en Filadelfia, donde permanecería (en esta firma y
en sus sucesoras) hasta su retiro en 1971. En 1952, Grace desarrolló el primer
compilador de la historia, llamado A-0, y el 1957 concluyó el primer compilador
para procesamiento de datos que usaba comandos en inglés: el B-0 (FLOWMATIC), cuyas aplicaciones principales eran el cálculo de nóminas y la generación
automática de cuentas por cobrar. Tras su experiencia con FLOW-MATIC, Grace
sintió que podía crearse todo un lenguaje de programación que usara comandos
en inglés y que sirviera para aplicaciones de negocios. La semilla de COBOL
había sido sembrada, pero todavía hubieron de pasar 2 años para que se pudiera
crear el comité que diseñó el famoso lenguaje. Aunque Grace no tuvo un papel
preponderante en el desarrollo del lenguaje, fue miembro del comité original para
crearlo, y el FLOW-MATIC fue una influencia tan importante en el diseño de
COBOL, que algunos biógrafos consideran a Grace como su creadora.
Grace permaneció en las reservas de la Marina hasta el 31 de diciembre
de 1966, en que tuvo que retirarse con el grado de Comandante por haber
alcanzado (nuevamente) el límite de edad permisible. Sin embargo, el 1 de Agosto
de 1967 a petición del asistente especial del secretario de marina y con el objetivo
de estandarizar los lenguajes que usaban, Grace se reincorporó a la marina, y
aunque se suponía que sólo sería por 6 meses, permaneció en el servicio durante
19 años más bajo aprobaciones anuales del Congreso.
El 14 de Agosto de 1986 Grace Hopper se retiró de manera definitiva de la
Marina a los 79 años de edad con el grado de contraalmirante otorgado en 1985
(entre otros reconocimientos). Tras su retiro, se incorporó como asesora de Digital
Equipment Corporation (DEC), donde se mantuvo participando en foros
industriales, dando unas 200 conferencias por año y participando en programas
educativos hasta 1990.
El 1 de enero de 1992, la "increíble Grace", como le llamaban sus amigos,
murió mientras dormía a la edad de 85 años. Acorde con su alta investidura militar,
se le enterró en el cementerio de Arlington, en Washington, D.C., el 7 de enero de
1992, con todos los honores de la Marina norteamericana.
1.14. El proyecto ENIAC
Otra de las más famosas computadoras de la época fue la ENIAC
(Electronic Numerical Integrator and Calculator), que fue construida entre 1943 y
1946 en la Universidad de Pensylvania por John Mauchly y J. Presper Eckert. El
primero era un brillante estudiante de maestría en la Escuela Moore, con un
profundo conocimiento de electrónica y con una patente en su haber a pesar de
estar todavía en sus 20’s. El segundo era un profesor de física de Ursinus College,
interesado en construir dispositivos para calcular, que le permitieran auxiliarse en
su investigación en meteorología, y que llegó originalmente a la Universidad de
Pennsylvania a impartir un curso de electrónica patrocinado por el gobierno,
aunque acabó obteniendo una plaza permanente.
Los fondos para la ENIAC provinieron de la Universidad de Pennsylvania y
del ejército norteamericano, y se aprobaron $61,700 dólares para los primeros seis
meses del proyecto, ante la ira de otras agencias gubernamentales que no podían
entender por qué se gastaría tanto dinero en construir una máquina que pensaban
que nunca funcionaría adecuadamente.
El pesimismo sobre la ENIAC no era del todo injustificado, pues su diseño
era una de las tareas más osadas de la época, ya que se estimaba que usaría al
menos unos 5,000 bulbos, lo que era 100 veces mayor que lo usado por cualquier
otra pieza de equipo electrónico creada hasta entonces. Parecía imposible lograr
un diseño con ese tipo de desempeño, a menos que se adoptaran enormes
factores de seguridad, y eso fue precisamente lo que Presper Eckert hizo. Por
ejemplo, si un circuito funcionaba bien con voltajes de entre 100 y 400, se
diseñaba el sistema considerando el circuito operando a 200 Volts. De tal forma,
las fallas en la conductividad podían amortizarse mejor. Claro que esto repercutió
en el diseño, y se terminó por producir una máquina mucho más grande y costosa
de lo proyectado. La versión terminada de la ENIAC tenía aproximadamente
18,000 bulbos de 16 tipos diferentes, 1,500 relevadores, 70,000 resistencias y
10,000 capacitores; medía 2.4 metros de altura, 90 centímetros de ancho y casi 30
metros de largo; pesaba 30 toneladas y requería un consumo de potencia de 140
kilowatts. En vez de los $150,000 dólares que se estimó que costaría en un
principio, su precio se elevó hasta $486,804.22 dólares
Fig. 15. Extremos, Programador trabajando en la ENIAC. Al centro, Vista de la ENIAC con sus
tableros y complicadas conexiones
La ENIAC contenía siete tipos diferentes de unidades:
1. Acumuladores: Habían 20, y cada uno podía almacenar un número de 10
dígitos (con signo), además de poder efectuar sumas o restas de este valor
con el de otro acumulador.
2. Unidad para Multiplicar: Existía en hardware una tabla de multiplicar para
números de un solo dígito, y ésta se utilizaba para efectuar cualquier
producto, usando cuatro acumuladores para almacenar los valores
intermedios de la operación.
3. Unidad para dividir y obtener raíz cuadrada: Se dividía mediante restas o
sumas sucesivas del denominador al residuo del numerador. Las raíces
cuadradas se calculaban mediante restas o sumas de números impares,
usando un algoritmo que era muy popular en las calculadoras mecánicas de
escritorio.
4. Tablas de funciones: Utilizando un gran número de interruptores era posible
almacenar hasta 104 valores de 12 dígitos o 208 de 6 dígitos cada uno (con
signo), en cada una de las tres tablas disponibles. Dado que la ENIAC no
tenía realmente memoria, no se podía almacenar un programa internamente,
y las funciones que se requerían comúnmente solían leerse de tarjetas.
Estas tablas eran la alternativa preferible, pues se usaban para almacenar
valores usados frecuentemente, y solían servir también para efectuar
interpolaciones.
5. Unidad de entrada: Se le llamaba "transmisor constante", y operaba en
combinación con una lectora de tarjetas de IBM que podía leer 120 tarjetas
por minuto.
6. Unidad de salida: Estaba conectada a una perforadora de tarjetas de IBM
que podía imprimir hasta 100 tarjetas por minuto (cada una conteniendo
hasta 80 dígitos y 16 signos).
7. El Programador Maestro: Controlaba la secuencia de las operaciones usando
10 unidades, cada una de las cuales podía contar pulsos del programa y
cambiar las conexiones necesarias. Este tipo de control era obviamente
necesario debido a la alta velocidad de la máquina, ya que cualquier sistema
de tarjetas perforadas habría resultado demasiado lento.
Es interesante hacer notar que aunque la ENIAC realmente no tenía
ninguna unidad de hardware que permitiera efectuar saltos condicionales, se
podía usar una técnica llamada "discriminación de magnitud", para emular
decisiones en un ciclo.
A pesar de que la entrada y salida de datos se realizaba mediante tarjetas
perforadas, los programas se construían alambrando conexiones entre sus
componentes, lo cuál resultaba terriblemente tedioso y además debía cambiársele
de tubos continuamente.
La ENIAC se comenzó oficialmente el 31 de mayo de 1943, y se terminó
en el otoño de 1945, aunque la presentación a la prensa tuvo lugar hasta el 1 de
febrero de 1946. Durante ese mismo año se le usó para resolver problemas de
balística, física atómica y hasta de teoría de números. En 1947 se la desmanteló
para llevarla al Laboratorio de Investigación en Balística, en Maryland, donde
continuó en uso hasta el 2 de octubre de 1955.
1.15. John Louis von Neumann (1903-1957)
Quizá el más connotado genio que haya produciodo Hungría sea uno de
aspecto bonachón, de impecable vestir y gran sentido del humor, cuyas
aportaciones invaluables a la física, las matemáticas y la computación le
garantizaron un sitio de privilegio en la historia de esas disciplinas: John von
Neumann
Su nombre era Margittai Neumann János, y dado que los húngaros
colocan su apellido antes que su nombre, una traducción literal sería "János
Neumann de Margitta", la "i" al final de "Margittai" significa "de", pero se
transformó en "von" cuando János se fue a estudiar a Alemania, con lo que su
nombre se volvió "Johann Neumann von Margitta", aunque los alemanes lo
recortaron a "Johann von Neumann". Al migrar a los Estados Unidos, "Johann" se
transformó simplemente en "John", o "Johnny" para sus amigos. Este peculiar
individuo de tantos nombres, a quien conocemos como John von Neumann, se
cuenta entre los cerebros más prodigiosos que haya producido jamás Hungría.
John von Neumann nació el 28 de diciembre de 1903 en Budapest. Su
padre Max fue un abogado muy exitoso que fungió como director de uno de los
bancos más importantes de Hungría: el Magyar Jelzalog Hitelbank. En 1913, el
emperador Franz Joseph le otorgó a Max el título de nobleza Magitta por sus
contribuciones al desarrollo económico de su país, y éste fue heredado por su hijo
John y sus hermanos menores Michael y Nicholas. La madre de John se llamaba
Margaret, y era una ama de casa proveniente de una familia pobre que había
asegurado su futuro financiero con un sistema novedoso para la venta de
suministros agrícolas inventado por su padre, Jakab Kann, quien les regaló su
primer apartamento en un edificio de su propiedad, donde el pequeño John pasó
sus primeros años. Max y Margaret crearon una rica atmósfera intelectual en su
hogar, con discusiones familiares frecuentes en diversos tópicos de ciencia,
música, literatura, teatro y materias escolares.
John fue un niño prodigio de quien se dice tenía una memoria fotográfica
que más tarde sería motivo de admiración y tema de numerosas anécdotas. Su
interés por la historia lo llevó a devorar literalmente los 42 volúmenes de una
famosa enciclopedia de la época y más tarde concentró su estudio en el imperio
Bizantino, convirtiéndose en un verdadero experto en la materia. También tenía un
gran talento para los idiomas, y aprendió Francés, Alemán, Griego clásico, Latín y
Húngaro a muy temprana edad. Se dice que a los 6 años ya era capaz de dividir
mentalmente dos números cualquiera de 8 dígitos, y que solía bromear en Griego
con su padre. A los 8 años ya dominaba el cálculo y a los 12 ya había leído y
entendido la "Teoría de las Funciones" de Borel.
A los 10 años von Neumann ingresó al Gimnasio Luterano, que era
entonces
una
de
las
3
escuelas
más
respetadas
de
Hungría.
Casi
inmediatamente, Laszlo Racz visitó a Max para informarle sobre el talento
excepcional de John para las matemáticas, sugiriéndole que contratara un tutor
particular para que pudiera desarrollarlo más allá de lo que la escuela permitiría.
Con la autorización paterna, Racz contactó al profesor Jozsef Kurschak, de la
Universidad de Budapest, quien hizo los arreglos para que un joven profesor
llamado Michael Fekete se hiciera cargo del joven prodigio. Durante los 8 años
siguientes las tutorías continuarían, produciendo eventualmente la publicación del
primer artículo de von Neumann con Fekete, cuando el primero no se había
graduado todavía de la preparatoria (a los 18 años de edad). De tal forma, a nadie
sorprendió que von Neumann obtuviera el premio Eotvos por ser el mejor
estudiante de matemáticas y ciencias de su escuela.
Fig. 16. John von Neumann junto a una de las computadoras de la época.
John ingresó a la universidad de Budapest en 1921, aunque sólo asistía a
la escuela cuando había exámenes finales. Entre 1921 y 1923, pasó la mayor
parte del tiempo en Berlín, donde asistió a las clases de Química de Fritz Haber,
atendió la clase de mecánica estadística de Albert Einstein y fue influenciado por
el matemático Erhard Schmidt. Dado que su padre no quiso que estudiara
matemáticas por razones eminentemente financieras, von Neumann hubo de
estudiar ingeniería química, ingresando para ello a la prestigiosa Eidgenossische
Technische Hochschule (ETH) en Zurich (la escuela que una vez rechazara como
posible estudiante al joven Albert Einstein) sin darse de baja de la Universidad de
Budapest. En 1925 obtuvo la licenciatura en ingeniería química del ETH, y sólo un
año después el doctorado en matemáticas (con subespecializaciones en física
experimental y química) de la Universidad de Budapest, cuando contaba con sólo
22 años de edad. De 1926 a 1927, gozó de una beca Rockefeller para trabajar en
la Universidad de Göttingen, bajo la dirección de David Hilbert. Göttingen era en
ese entonces uno de los centros intelectuales más importantes del mundo, y
prácticamente todos aquellos que moldearon la física y las matemáticas durante la
primera mitad de este siglo estuvieron en algún momento de su vida ahí. En 1927,
se le nombró Privatdozent en la Universidad de Berlín (el más joven en la historia
de la universidad). La primera mitad del año académico 1929-1930 se la pasó
como Privatdozent en Hamburgo, a la vez que seguía colaborando con Göttingen.
Motivado por Hilbert, publicó 7 artículos sobre diversos tópicos de lógica
matemática durante los 20’s. Posteriormente, publicó varios artículos más sobre
mecánica cuántica, y un libro (en alemán) sobre el tema en 1932, el cual ha sido
traducido a varios idiomas y se utiliza todavía como texto en varias partes del
mundo.
Su llegada a los Estados Unidos
En 1930, von Neumann fue invitado por Oswald Veblen para trabajar
como Profesor Visitante en la Universidad Princeton (New Jersey, Estados
Unidos). Aunque Princeton tenía el 3er. mejor departamento de matemáticas de
los Estados Unidos, estaba muy por abajo del nivel que Göttingen tenía en
aquellos días, pero von Neumann sabía lo difícil que era volverse profesor en
Alemania, y optó por viajar a los Estados Unidos. Durante 3 años, von Neumann
se pasó medio año enseñando en Princeton y medio año enseñando en Berlín.
Conforme la situación política se agravaba en Alemania, von Neumann esperaba
poder asegurar una plaza permanente en los Estados Unidos. También en 1930,
se casó con Marietta Kövesi, con la que tuvo su única hija, Marina, en 1935. En
1937 la pareja se divorció, y un par de años después von Neumann regresó de
Hungría con una nueva esposa: Klára Dán, que aprendió matemáticas con él y se
volvió después una programadora experta. En 1930 se fundó en New Jersey
(independiente de Princeton, pero con sus instalaciones en el campus de la
universidad) el Instituto de Estudios Avanzados (IEA), bajo la dirección de
Abraham Flexner, y Oswald Veblen fue nombrado su primer profesor en 1932.
Para 1933 ya se habían nombrado a 3 profesores más que eran matemáticos o
físicos con una gran orientación matemática: James Alexander de Princeton,
Albert Einstein de Berlín, y Hermann Weyl de Göttingen. Veblen instó a Flexner a
que contratara a von Neumann pero éste se opuso alegando que no había dinero
suficiente para hacerlo. La situación cambió cuando Weyl decidió no aceptar la
oferta en el último momento, y von Neumann fue entonces contratado. Von
Neumann continuó regresando a Europa cada verano entre 1930 y 1938, hasta
que la Segunda Guerra Mundial tornó la situación sumamente difícil. En 1937 se
nacionalizó norteamericano, y adquirió fama de acérrimo anticomunista. A partir de
ese entonces, sus visitas a Europa fueron muy esporádicas y breves.
Su interés por la computación
Con el advenimiento de la Segunda Guerra Mundial, von Neumann hubo
de abandonar sus estudios en matemáticas puras, y concentrarse en problemas
más prácticos para servir al Gobierno del que ahora era nacional. Fue consultor en
proyectos de balística, en ondas de detonación, y eventualmente, se involucró en
el desarrollo de la bomba atómica, en donde demostró la factibilidad de la técnica
de implosión que más tarde se usaría en la bomba que detonó en Nagasaki. Sin
embargo, debido a su valía como consultor en otras agencias gubernamentales
ligadas a la guerra, von Neumann fue uno de los pocos científicos a quien no se le
requirió permanecer de tiempo completo en Los Alamos.
Fue precisamente durante la primera mitad de 1943, en plena guerra, que
se interesó por primera vez en la computación. Tras un viaje a Inglaterra, le dijo a
Voblen que creía sumamente importante que se utilizaran máquinas para acelerar
los complejos cálculos involucrados con su trabajo. Aunque comenzaron a utilizar
equipo de IBM, éste no satisfizo las necesidades del Proyecto Manhattan, y von
Neumann empezó pronto a buscar opciones en otros lados. En 1944 sólo había
unos pocos proyectos para desarrollar computadoras en los Estados Unidos:
Howard Aiken en Harvard, George Stibitz en Laboratorios Bell, Jan Schilt en la
Universidad Columbia, y Presper Eckert y John W. Mauchly, en la Universidad de
Pennsylvania. Aunque von Neumann contactó a los 3 primeros científicos y estuvo
en contacto con sus máquinas, la única computadora con la que realmente se
involucró a fondo fue la última, llamada ENIAC (Electronic Numerical Integrator
and Computer), que durante mucho tiempo fue ignorada por la comunidad
científica, y que con el apoyo de von Neumann fue finalmente tomada en serio
hasta convertirse en un proyecto de primera línea. Curiosamente, la ENIAC tenía
una arquitectura en paralelo, aunque casi carecía de memoria (sólo podía
almacenar 20 palabras), y otra máquina más ambiciosa, llamada EDVAC
(Electronic Discrete Variable Arithmetic Computer) nació del deseo de sus
diseñadores de construir una máquina "más útil" que operara en serie.
Desgraciadamente, la reputación de von Neumann tenía también su lado
negativo, y debido a una indiscreción a la prensa y al hecho de que firmó como
autor único un borrador del EDVAC, el proyecto no sólo perdió su status de
secreto, sino que se volvió objeto de una enorme controversia, pues Mauchly y
Eckert no sólo se disgustaron mucho por no haber recibido el crédito debido, sino
que fueron despedidos de la Universidad de Pennsylvania ante su negativa de
ceder a la institución los derechos del ENIAC. Este error le costó a la Universidad
de Pennsylvania el perder su status de universidad de primer nivel en los Estados
Unidos, y todavía hoy se recuerda a éste como uno de sus peores momentos
históricos. Eventualmente, la guerra terminó, el EDVAC se volvió del dominio
público, Mauchly y Eckert fundaron su propia empresa y von Neumann regresó a
Princeton con el sueño de construir su propia máquina.
Sus últimos años
Debido a los tropiezos que tuvo inicialmente para conseguir dinero para
construir su computadora, varias universidades le ofrecieron trabajo a von
Neumann después de la guerra, y aunque estuvo cerca de aceptar al menos una
de estas ofertas, fue leal al IEA, y finalmente logró conseguir los fondos que
necesitaba para su proyecto con ayuda de Princeton y la RCA. Su idea era
construir una máquina similar a EDVAC pero más poderosa y más rápida. La
computadora IAS fue eventualmente construida en los 50’s, y su diseño ha servido
como inspiración para la mayoría de las computadoras modernas, si bien la
arquitectura que hoy recibe su nombre no fue realmente producto de su inventiva.
Sus principales contribuciones en computación fueron: la noción del uso de
monitores para visualizar datos, la invención del diagrama de flujo, la teoría de los
autómatas celulares, incontables técnicas de cómputo matemático, fue coautor de
la teoría de juegos que dio pie al famoso método de Montecarlo, y fue coautor del
otrora famoso libro: "Cybernetics: Or Control and Communication in the Animal
and the Machine" en el que explicaba junto con Norbert Wiener la manera en que
los cerebros electrónicos podrían efectuar tareas humanas de diferentes grados
de dificultad.
En octubre de 1954 se volvió miembro de la Comisión de Energía
Atómica, por lo que se tuvo que mudar junto con su esposa a Georgetown, en
Washington, D.C. A la vez, sirvió como consultor para la IBM, en donde conoció a
John Backus mientras desarrollaba el FORTRAN. Curiosamente, von Neumann
desdeñó el trabajo de Backus pensando que nadie requeriría jamás usar un
lenguaje de programación de más alto nivel que el lenguaje binario que él tan bien
conocía. En el verano de ese mismo año, se lastimó el hombro izquierdo en una
caída, y en la cirugía posterior se descubrió que tenía cáncer en los huesos. Pese
a saberse cerca de la muerte, continuó con su tremendo ritmo de trabajo, y en sus
últimos días el secretario de defensa, y los secretarios del ejército, la marina y la
fuerza aérea norteamericanas, se daban cita alrededor de la cama de von
Neumann en el hospital Water Reed en Washington, D.C. Sólo médicos y personal
con autorización militar podían verlo, ante el temor que revelara secretos
importantes mientras estaba sedado. Para ese entonces, von Neumann había
recibido un sinnúmero de doctorados Honoris Causa, la medalla presidencial al
mérito, el premio Enrico Fermi y el premio Albert Einstein. Aunque nunca practicó
en vida la religión Católica, bajo la cual fue bautizado por sus padres, al sentir
cerca su fin pidió que un sacerdote le diera los sacramentos. Sus planes de irse a
trabajar como profesor a la Universidad de California en Los Angeles nunca se
volverían realidad, porque el "mejor matemático del mundo", como lo llamara
Herman H. Goldstine, falleció el 8 de febrero de 1957. Su leyenda, sin embargo,
sigue viva hasta nuestros días en los corredores de Princeton y en una pléyade de
libros alrededor del mundo.
1.16. Las Generaciones de Computadoras.
Hasta aquí, con la propuesta de von Neumann, ya estaba asegurado el
futuro de las computadoras, sin embargo, éstas seguían siendo máquinas
grandes, difíciles de manejar, costosas y poco confiables, hasta que los
transistores sustituyeron a los tubos de vacío. El transistor inventado a finales de
los años cuarenta en los Laboratorios Bell, era el dispositivo ideal en el cual
podían basarse las computadoras, ya que era pequeño, consumía poca energía y
era mucho más confiable que los tubos de vacío que reemplazaba. Sus
desventajas iniciales: poca potencia de salida, menor voltaje y mayor ruido, que
pospusieron su aceptación en aplicaciones analógicas, no eran significativas en
una computadora, donde sólo se necesitaba que sirviera como dispositivo de
conmutación.
Una vez que se empezaron a construir computadoras con transistores
surgió otro problema de confiabilidad. Conforme aumentó la complejidad y el
poder de procesamiento de las computadoras, el factor limitante de la confiabilidad
comenzó a ser el número de conexiones necesarias entre los componentes de la
computadora. Esto llevó a la idea del circuito integrado, en el cual se redujo el
número de conexiones soldadas al implantar subsistemas cada vez mayores de la
computadora en una sola patilla de silicio. Los primeros circuitos integrados
comenzaron a aparecer a principios de los años sesenta y a partir de entonces
sólo fue cuestión de tiempo para que se pudiese fabricar una computadora
completa en una sola pastilla de silicio.
Con el desarrollo de estas nuevas tecnologías y el interés cada vez mayor
sobre los tópicos computacionales, hicieron que surgieran diversas empresas, por
ejemplo: DEC(Digital Equipment Corporation), y Eckert-Mauchly Corporation, con
el objetivo de fabricar computadoras comerciales, y otras más que ya existían se
dieron cuenta del futuro de la computación y entraron al mercado, tal es el caso de
IBM. Esto sin contar las universidades que incluso crearon los primeros programas
de maestría y doctorado en “ciencias de la computación” como por ejemplo
Harvard.
Así tenemos, entre otros desarrollos, la EDVAC (Electonic Discrete
Variable Automatic Computer) construida en 1952 por von Neumann, el grupo de
ENIAC y H.H Goldstine; la EDSAC (Electronic Delay Storage Automatic
Calculator) construida en la Universidad de Cambridge en 1949 bajo la dirección
de M.V. Wilkes, que por cierto esta fue la primer computadora con programa
almacenado; la IAS terminada en 1952 en el Institute for Advanced Studies de la
Universidad de Princenton bajo la supervisión de von Neumann; la ILLIAC
construida en la Universidad de Illinois; la JOHNIAC en la corporación RAND; la
MANIAC en los Álamos; la WHIRLWIND en el MIT (Massachussetts Institute of
Technology; la UNIVAC (Universal Automatic Computer) por Mauchly y Eckert, la
cual fue la primera computadora comercial; la IBM 701, 702, 705, 704, 709, 7090,
….., la PDP1 de DEC, y un largo etcétera. Todos estas desarrolladas en la década
de los 50’s y principios de los 60’s.
Dado que es imposible seguir mencionando todas las computadoras
desarrolladas a partir de la década de los 60’s, sobre todo porque al crearse el
microprocesador y las microcomputadoras la evolución ha sido impresionante y no
terminaríamos de listar a los diversos fabricantes con sus respectivos modelos de
micro, mini y macrocomputadoras, sólo clasificaremos a las computadoras por
generaciones (ver tabla 1) considerando la naturaleza de los elementos básicos
utilizados en su fabricación.
GENERACIÓN*
0(
- 1943)
1 (1943-1958)
COMPONENTE BÁSICO
EJEMPLO
Electromecánico (Relevadores) Z1, Mark I
Tubos de vacío (bulbos)
ABC,
ENIAC,
EDVAC,
EDSAC, etc.
2 (1959-1965)
Transistores
3 (1966-1975)
Circuitos
Integrados
IBM 7090
a
baja Diversos
escala. (LSI, MSI)
4 (1976 -
)
de
diferentes fabricantes.
Circuitos de muy alta escala de Diversos
integración. (LSI, VLSI, ULSI)
modelos
modelos
de
diferentes fabricantes.
Tabla 1. Las generaciones de las computadoras
* Los periodos son aproximados, pues mientras alguna computadora se estaba construyendo basándose en bulbos, otras
ya se estaban diseñando con transistores. Tampoco son fechas de aparición de los componentes básicos, pues éstos no se
aplicaron inmediata y exclusivamente a las computadoras .
Algunos han clasificado una quinta generación basándose en el desarrollo
de la Inteligencia Artificial (IA) principalmente, pero si nos apegamos a una
clasificación de generaciones identificada únicamente por su componente básico,
vemos que las computadoras de hoy trabajan esencialmente con circuitos
integrados, eso sí, cada vez con una más alta escala de integración, pero siguen
siendo circuitos integrados.
II
LA ARQUITECTURA VON NEUMANN
La ENIAC sólo difería en un aspecto de las computadoras actuales: su
programa se almacenaba externamente, o sea, que el programa se tenía que
ejecutar en secuencia a la misma velocidad a la que los primitivos lectores de
tarjetas y cinta de papel perforado de la época podía leer las instrucciones.
En 1944, John von Neumann se incorporó al proyecto y propuso que el
programa de computación debía almacenarse electrónicamente dentro de la
computadora.
Éste fue el paso definitivo en el diseño de computadoras, pues significaba
que no sólo se podía ejecutar el programa de computación a una velocidad
exclusivamente limitada por la lógica electrónica de la computadora (en lugar de la
limitación mecánica que imponía el lector de tarjetas o cinta de papel) sino
también que los programas podían diseñarse para que se tomaran decisiones con
base en el resultado de su procesamiento y modificaran sus acciones en la forma
correspondiente. Esto fue posible debido a que la secuencia de ejecución de
instrucciones podía modificarse de inmediato, dado que todas las instrucciones
estaban accesibles dentro de la memoria de la computadora. Además los
programas podían llamar de inmediato a otros programas si así lo requerían (lo
que estaba sujeto a la restricción de que todos los programas cupieran en la
memoria al mismo tiempo); incluso estos programas podían modificarse a sí
mismos o a otros programas, a fin de mejorar su procesamiento más allá de los
límites que imaginaban sus creadores humanos.
La idea de von Neumann, el concepto del control de programa
almacenado, era muy profunda y es por eso que a esa forma de trabajar de la
computadora se le ha llamado “Arquitectura von Neumann” y es la arquitectura
que utilizan la mayoría de las computadoras de la actualidad y que se describirá
en las siguientes secciones.
2.1. Conceptos Básicos 2
Una computadora se puede definir como una máquina que manipula datos
de acuerdo con un programa almacenado que se ejecuta dentro de ésta. Con
frecuencia se piensa que los datos son números, pero en realidad, mediante el
procesamiento adecuado, pueden ser cualquier parámetro físico que pueda
representarse con números binarios.
Las características fundamentales de todas las computadoras de la
actualidad son:
1. Control de programa almacenado. El programa de computación, una
secuencia de instrucciones que se ejecutan una por una para realizar la
manipulación de datos que se requiere, debe estar almacenado en la
computadora. Esto presenta ventajas importantes sobre el almacenamiento
externo de programas.
2. Ramificación Condicional. Una ventaja del almacenamiento interno de
programas es que la siguiente instrucción que se ejecute no tiene que ser la
siguiente de la secuencia, ya que se puede tener acceso a cualquier
instrucción con la misma rapidez (esto se conoce como acceso aleatorio).
Entonces, la elección de cuál será la siguiente instrucción que se ejecute se
puede basar en el resultado de la operación u operaciones anteriores, lo
que permite que la computadora tome decisiones con base en el
procesamiento que lleva a cabo.
2
Este capítulo es un compendio de [1] adaptado y complementado con anotaciones personales.
3. Ciclos y subrutinas. La capacidad de un programa para ejecutar
repetidamente un conjunto de instrucciones cuando sea necesario puede
significar grandes ahorros en cuanto al espacio de almacenamiento
requerido por el programa. Se puede efectuar ramificaciones condicionales
para hacer ciclos y repetir varias veces un conjunto e instrucciones, y las
subtareas de uso común en el programa se pueden llamar desde cualquier
otra parte del programa, sin tener que incluir las instrucciones de la
subtarea en el programa principal cada vez que ésta se solicite.
4. Velocidad de la electrónica. Aunque las instrucciones individuales
disponibles para una computadora pueden ser muy limitadas, el hecho de
que cada instrucción pueda ejecutarse con tal rapidez permite lograr un
procesamiento relativamente poderoso en lo que subjetivamente parecería
ser poco tiempo.
5. Costo. El costo del poder de computación, en especial el costo de la
memoria para computadoras, baja constantemente. Ahora es más barato
almacenar una instrucción en memoria electrónica que en una tarjeta o
pedazo de cinta de papel.
6. (Las instrucciones pueden modificarse a sí mismas). Aunque ésta era una
de las ideas originales de von Neumann comprendidas en el concepto de
programas almacenados, no se le ha utilizado ampliamente. Una de las
razones es que es muy difícil controlar lo que hace la computadora una vez
que el programa de computación se ha modificado y difiere de la versión
escrita originalmente por el programador.
2.2. El modelo conceptual de la computadora actual
La figura 17 muestra la estructura de una computadora sencilla, la cual
está dividida en unidades lógicas que no representan la división física entre
componentes de una computadora real, esta asociación la haremos más adelante.
El primer requisito para cualquier computadora es tener un mecanismo
para la manipulación de datos. Este mecanismo lo proporciona la ALU (Arithmetic
and Logic Unit), que puede efectuar operaciones como la suma, resta,
multiplicación o división de dos números, realizar operaciones lógicas, incrementar
o reducir números y operaciones de desplazamiento a la izquierda o a la derecha.
A partir de este conjunto de operaciones sumamente básicas se pueden generar
funciones de procesamiento más complejas por medio de la programación. Las
computadoras más grandes pueden ofrecer instrucciones más poderosas en el
conjunto de instrucciones de la computadora.
Reloj
CPU
Unidad de
Control
(UC)
Unidad de
Entrada
Unidad de
Aritmética
y Lógica
(ALU)
Unidad de
Salida
Unidad de
memoria
Fig. 17. Estructura conceptual de una computadora.
Es obvio que todas las computadoras deben incluir también una unidad de
entrada y una de salida (E/S), ya que son el medio a través del cual se comunica
con el mundo exterior. El mundo exterior puede consistir en una persona que
teclea en una terminal y observa las respuesta en una pantalla, o bien en un
equipo, por ejemplo, una lavadora, que proporciona datos de entrada como la
temperatura y el nivel del agua, la velocidad de rotación del tambor, y que es
controlada de acuerdo con el programa contenido en la computadora, a través de
las salidas que activan o desactivan el suministro de agua o el calefactor y que
alteran la velocidad del motor.
La computadora debe incluir una memoria interna, la cual cumple dos
funciones: en primer lugar, provee el almacenamiento para el programa de
computación; en segundo, ofrece almacenamiento temporal para los datos que
puede generar la ALU durante la ejecución del programa, pero que no se
requieren de inmediato. La computadora debe ser capaz de escribir estas
variables de datos en la unidad de memoria y leerlas más tarde, cuando se
requieran. La memoria se encuentra organizada como un arreglo unidimensional
(o lista) de palabras y cada instrucción o variable de datos ocupa una o más
palabras de la memoria. Una palabra se compone de varios bits de
almacenamiento en paralelo.
La unidad de control (UC) de la computadora controla la secuencia de
operaciones de todos los componentes antes descritos, de acuerdo con las
instrucciones del programa de computación. Cada instrucción se busca en la
memoria, la unidad de control la decodifica y la convierte en un conjunto de
señales de control de bajo nivel que dan lugar a que se ejecute la función
especificada por esa instrucción. Al concluir la ejecución de una instrucción se
busca la siguiente y se repite el proceso de decodificación y ejecución. Este
proceso se repite para todas las instrucciones del programa y sólo varía si se
detecta una instrucción de ramificación; en tal caso, la siguiente instrucción que se
va a tomar de la memoria se busca en la parte de ésta especificada por la
instrucción de ramificación, en vez de que sea la siguiente instrucción de la
secuencia.
El último componente de la computadora es el reloj, un oscilador de
frecuencia fija, que sincroniza la operación de las distintas partes de la
computadora y asegura que todas las operaciones se ejecuten en la secuencia
correcta. La frecuencia del reloj define la velocidad de ejecución de las
instrucciones en la computadora y está restringida por la velocidad operativa de
los circuitos semiconductores que la integran.
2.3. Los elementos reales
La CPU
Con el desarrollo acelerado en la tecnología de fabricación de circuitos, se
ha logrado integrar en un solo circuito la unidad de control (UC) y la unidad de
aritmética y lógica (ALU), ese circuito que es la parte fundamental de una
computadora en la actualidad lo conocemos como: microprocesador, al cual
haremos referencia también como CPU (Central Process Unit).
Cabe mencionar en este punto, las tecnologías de diseño de
microprocesadores en la actualidad: la tecnología CISC y la tecnología RISC, las
cuales, aún cuando utilizan la arquitectura von Neumann, tienen diferencias
importantes entre sí.
El concepto RISC (Reduced Instruction Set Computer = Computadora con
un conjunto de instrucciones reducido), investigado originalmente por IBM En los
70's y más tarde en la Universidad de Berkeley y Stanford durante los 80's, se
basa en una reevaluación de las concesiones económicas que determinaron el
diseño de las computadoras en el período comprendido entre 1950 y 1980. En
este período un aspecto clave del diseño era el costo (muy elevado) y la velocidad
(muy lenta) de la memoria. En consecuencia los diseñadores de computadoras
trataron de maximizar la funcionalidad de las instrucciones en sus diseños, para
así minimizar la cantidad de memoria que se requería y el número de accesos a
memoria. Eso condujo al desarrollo de conjuntos de instrucciones cada vez más
complejos, lo que dio origen a esta clase de microprocesador conocido como:
Computadora con conjunto de instrucciones complejo o CISC(Complex Instruction
Set Computer).
La base inicial para la investigación sobre máquinas RISC fue la
observación de que, en la práctica, un 10% del conjunto de instrucciones CISC
disponible se usaba el 90% del tiempo en aplicaciones típicas y que los
compiladores de lenguajes de alto nivel no eran capaces de aprovechar las
instrucciones de máquina más reservadas. A partir de esta observación se planteó
que si se eliminaban las instrucciones redundantes, el diseño de la CPU podría
simplificarse notablemente.
Esto, a su vez, permitiría que el conjunto reducido de instrucciones
restante se ejecutara con una rapidez mucho mayor que la obtenida hasta
entonces, con una mejoría en el rendimiento global. Pero este esquema presenta
dos desventajas: en primer lugar, la ejecución más rápida de las instrucciones
requiere un acceso más rápido a la memoria, en segundo lugar, se requieren más
instrucciones (y por lo tanto más memoria) para obtener la misma funcionalidad,
ya que cada instrucción es más sencilla.
Sin embargo, estas desventajas han dejado de ser significativas conforme
aumenta la densidad y la velocidad de la memoria, lo cual indica que las ventajas
del RISC han ido superando gradualmente sus desventajas.
Aproximadamente a partir de 1985, se empezaron a observar
estas
tendencias, pues los microprocesadores RISC superaban cada vez en mayor
medida a sus contrapartes CISC. Aunque parezca probable que todos los diseños
en el futuro tomaran como punto de partida las ideas RISC, esto no quiere decir
que los microprocesadores CISC sean obsoletos. Es tal la cantidad de software
que se ha desarrollado para las anteriores familias de procesadores CISC que
estas familias continuaran usándose varios años más, incluso se siguen
diseñando versiones mejoradas con mayor rendimiento.
La Entrada/Salida (E/S)
Así mismo, cuando hablamos de la unidad de entrada/salida (E/S),
debemos imaginarnos un circuito o un conjunto de circuitos integrados encargados
de enviar o recibir información al exterior. Estos circuitos forman la interfaz de
comunicación con diversos dispositivos que le facilitan al usuario la interacción con
la computadora. Entre los dispositivos de entrada más comunes tenemos: el
teclado, el mouse, el scanner, el micrófono, el touch screen, etc., y entre los de
salida podemos mencionar el monitor, la impresora, el plotter, las bocinas, etc.,
también existen dispositivos de aplicación específica y para interconectar una
computadora con otra, todo éstos con el objetivo de hacer cada vez más natural la
comunicación humano-máquina y permitir la transferencia de información entre
usuarios.
La memoria
La unidad de memoria a que se refiere el modelo conceptual trata
básicamente de la memoria principal de la computadora y en ese sentido podemos
mencionar tres tipos de memoria utilizada actualmente: memoria RAM, memoria
ROM y memoria Caché.
2.4. Arquitectura y estructura de la memoria.
En todas las computadoras las instrucciones y los datos se almacenan
internamente en la memoria como números binarios. Esto se debe a que la
computadora sólo puede comprender y ejecutar instrucciones codificadas en el
código de lenguaje de máquina binario adecuado para ese tipo de computadora.
Al usuario le puede parecer que la computadora ejecuta un programa escrito en
otro lenguaje de programación, como Visual Basic, Visual C, Visual Fox u otro de
alto nivel pero, de hecho, para ejecutar un programa escrito en otro lenguaje,
primero hay que convertir el programa al lenguaje de maquina de la computadora.
Este paso se puede lograr con un compilador, el cual traduce el código completo
antes de ejecutar el programa, o conforme el programa se ejecute utilizando un
intérprete.
Las instrucciones del conjunto de instrucciones en código de máquina de
la computadora normalmente se representan con una o más palabras en la
memoria. Cada palabra se representa físicamente con varios dígitos binarios (bits)
en paralelo. Los datos también se almacenan como palabras en la memoria y la
longitud de palabra de la computadora define el número de bits que puede
manipular al mismo tiempo, ya que las manipulaciones aritméticas en general se
aplican a una palabra de la memoria a la vez. El número de bits por palabra lo
define el diseñador de la CPU y es una medida de la potencia de procesamiento
de la computadora. Hoy día, los microprocesadores normalmente usan 16, 32 o 64
bits por palabra.
La memoria de la computadora se implanta de varias maneras. La
memoria de semiconductores es la tecnología dominante en la actualidad, como
resultado del desarrollo revolucionario que se ha presentado en el campo de la
tecnología de los circuitos integrados en los últimos 20 años. Se emplean varios
tipos de memoria de semiconductores, de los cuales los dos más importantes son
la memoria de lectura/escritura (RAM.-Random Access Memory) y la de sólo
lectura (ROM.- Read Only Memory). Se usan actualmente algunas variantes de la
ROM, como la memoria programable sólo de lectura borrable eléctricamente
(EEPROM-Electrically Erasable Programable Read Only Memory) y las FLASH
BIOS.
Las memorias de semiconductores se describen como memorias de
acceso aleatorio porque el tiempo que se requiere
para tener acceso a una
palabra en la memoria siempre es el mismo, sin importar cuál sea la palabra a la
cual se desea acceder.
Una computadora de propósito general incluye también algún tipo de
mecanismo de almacenamiento auxiliar o de respaldo para almacenar los datos o
programas durante largos periodos. En muchos casos el almacenamiento auxiliar
puede estar separado de la computadora y suele ser algún tipo de medio de
almacenamiento óptico (DVD, CD) o magnético (cintas o discos).
Hay
dos
tipos
principales
de
memoria
de
semiconductores
de
lectura/escritura, los cuales se basan en dispositivos lógicos estáticos y dinámicos
y que, por tanto, se denominan memoria estática y memoria dinámica. La memoria
estática se basa en el sencillo elemento de almacenamiento biestable. El circuito
biestable más sencillo es el Flip-Flop (FF) R-S, el cual puede almacenar un solo bit
de información. Este dispositivo es volátil, ya que la memoria se pierde si el
circuito deja de recibir energía. En la práctica se usa como base de los registros
de las computadoras un FF un poco más complejo, el tipo D con reloj.
La base de la memoria dinámica es la capacitancia de entrada de la
compuerta a un transistor MOS (Metal Oxide Semiconductor, semiconductor de
óxido metálico). En esta capacitancia se puede almacenar una carga, lo que da
lugar al encendido o apagado del transistor de salida para representar los dos
estados lógicos, dependiendo del valor de la carga almacenada. Como la carga se
desvanece gradualmente, es necesario refrescar los capacitores en forma
periódica (en general a intervalos de milisegundos) para mantener la carga y, por
ende, el estado lógico del dispositivo. Este refrescamiento se realiza leyendo la
salida del dispositivo y retroalimentándola a la entrada a fin de subir la carga de la
capacitancia, de ahí que el dispositivo se conozca como dispositivo lógico
dinámico, ya que el estado lógico sólo se mantiene mientras se refresque la
capacitancia.
Un solo bit de almacenamiento, que corresponde a un FF, no tiene mucha
aplicación; la unidad de almacenamiento más pequeña que normalmente maneja
una computadora es una palabra. En un microprocesador de 8 bits, una palabra
corresponde a un byte y éste permite representar directamente números en el
intervalo de 0 a 255. Un microprocesador de 16 bits permitiría representar con una
sola palabra números entre 0 y 65535.
Con frecuencia se requieren palabras únicas de almacenamiento en la
CPU de la computadora para almacenar temporalmente los resultados de
operaciones lógicas y aritméticas que realiza la ALU. A estas palabras únicas de
almacenamiento se les llama registros. En ocasiones hay varios registros en la
CPU. El término acumulador se usa entonces para describir un registro que se
incluye específicamente para recibir los resultados de las manipulaciones
aritméticas. No obstante, un acumulador tiene una estructura en esencia idéntica a
la de cualquier otro tipo de registro; lo único que puede variar un poco es su uso.
Si bien es usual que existan pocos registros en la CPU de una
computadora, la memoria principal contiene millones de palabras. Esta situación
presenta de inmediato el problema de cómo identificar una sola palabra que se
requiere de memoria. Para resolver este problema, la memoria se organiza como
una lista y el acceso se lleva a cabo mediante una dirección binaria que define en
qué lugar de la lista está la palabra que se requiere, de la misma manera que la
numeración de una casa define su ubicación en la calle. La lista es una estructura
implícita, ya que la organización de las palabras de memoria en el circuito no es
una lista secuencial. En la figura 18 se muestra un ejemplo de una memoria con
una longitud de palabra de 8 bits y una capacidad de 4096 palabras. En este caso
basta una dirección binaria de 12 bits para definir en forma unívoca cada una de
las palabras en la memoria (212 = 4096).
Dirección Binaria
Dirección
Decimal
0000 0000 0000
0
0000 0000 0001
1
0000 0000 0010
2
0000 0000 0011
3
8 bits
•
•
•
1111 1111 1101
4093
1111 1111 1110
4094
1111 1111 1111
4095
Fig. 18. Estructura de direcciones de la memoria principal.
4096
Palabras
Para que la memoria sea de utilidad, debe ser posible leer de ella y
escribir en ella. Para esto los microprocesadores cuentan con instrucciones que
permiten tomar un dato especificándole únicamente la dirección de la palabra de
memoria que se requiere y que en la mayoría de los casos pasará a un registro del
microprocesador por medio de un canal de comunicación (ver fig. 19), que
corresponde físicamente a N alambres en paralelo, donde N es el número de bits
de la palabra de la CPU. Las transferencias entre memoria y registro de la CPU se
realiza de forma semidúplex, es decir, se pueden transferir datos en ambas
direcciones (canal bidireccional) pero no de forma simultánea. Esto es posible
porque se supone que no es necesario leer de una localidad y escribir en otra al
mismo tiempo.
Como es posible leer y escribir en la RAM, ésta se puede usar para el
almacenamiento de variables de datos y programas. Si las variables de datos se
almacenan en la memoria principal, de hecho se está usando la memoria en la
misma forma que los registros, es decir, como almacenamiento temporal para los
resultados intermedios del procesamiento de datos. Como los registros y la
memoria principal se parecen físicamente y son idénticos en cuanto a la lógica,
surge la duda con respecto a por qué es necesario implantar los dos en una
computadora.
Datos
CPU
Dirección
MEMORIA
(RAM/ROM)
Control
Fig. 19. Canales (Buses) de comunicación entre la CPU y la memoria.
De hecho, es posible diseñar una computadora que no contenga registros
discretos de propósito general, pero los registros pueden aumentar bastante la
velocidad de procesamiento de la computadora. El acceso a los registros es más
rápido que el acceso a la memoria principal, ya que basta una dirección corta (por
lo general de tres o cuatro bits) para definir un registro en forma unívoca. Con esto
se reduce el tiempo que requiere una instrucción para tener acceso al registro, ya
que la instrucción puede ser más corta y almacenarse en menos palabras de la
memoria. Además los registros que se incluyen en el microprocesador no están
limitados por las mismas restricciones globales de direcciones y sincronización del
canal de datos que la memoria principal. Por consiguiente, el procesamiento de
datos que se lleva a cabo con los registros de la CPU siempre es más rápido que
el mismo procesamiento que se realiza con datos almacenados en localidades de
la memoria. Esta ventaja se pierde si se proporcionan muchos registros, de ahí
que se considere una buena alternativa la estructura de dos niveles, en la cual los
registros se usan para el almacenamiento muy breve de unas cuantas variables y
la memoria principal se emplea para los datos con accesos menos frecuentes.
Las instrucciones de programa también se pueden almacenar en memoria
de lectura/escritura (von Neumann). Esto es ideal en computadoras de propósito
general, ya que se requiere que la misma memoria de la computadora almacene
varios programas en momentos distintos; lo único que se necesita es un medio de
almacenamiento auxiliar del cual se pueda cargar el programa a la memoria, y un
medio para transferir el programa de la memoria auxiliar a la memoria principal.
Aunque a nivel superficial la ROM es muy parecida a la RAM, de hecho es
un componente lógico combinatorio en el cual las salidas de datos no son más que
una función combinatoria de las entradas de direcciones. Y es ahí donde deriva el
nombre ROM, ya que, normalmente, sólo es posible que el microprocesador lea
datos de la ROM y no que los escriba en ella. El método que se usa para
direccionar una ROM es idéntico al que se emplea para una RAM; la única
diferencia es que sólo se puede leer los datos, por lo que no se requiere una línea
de control de lectura/escritura, y basta con los canales de direcciones y de datos.
Hay varios tipos de ROM, entre los que se encuentran: la PROM (Programable
ROM), la EPROM (Erasable PROM), la EEPROM (Electrically EPROM) y la FlashBIOS; ésta última utilizada en la mayoría de las computadoras actuales.
Muchos procesadores de 8 bits utilizaban un canal de direcciones de 16
bits, lo que implicaba una gama máxima de direccionamiento de 65536 palabras,
mientras que los microprocesadores de 16 o 32 bits utilizan un canal de
direcciones de 20, 23 o 32 bits, lo que les permite tener acceso a cantidades
enormes de memoria. En la actualidad los microprocesadores utilizan un canal de
direcciones de al menos 36 bits. Es importante señalar que aunque el número de
bits que contiene el canal de direcciones especifica la cantidad máxima de
memoria que el microprocesador puede direccionar directamente, no quiere decir
que la computadora específica que esté haciendo uso de dicho microprocesador;
debe tener tal cantidad de memoria física disponible.
2.5. Representación de datos en las computadoras
Para
procesar
la
información
en
una
computadora,
ésta
debe
representarse mediante un código binario que pueda almacenarse en la memoria
y en los registros de tal computadora, pues este sólo trabaja con números
binarios. La información que puede manipular una computadora actual no se limita
únicamente a números binarios, dado que ésta es capaz de procesar cualquier
información que sea factible representar con un código binario; incluso es posible
procesar información analógica, siempre y cuando se convierta primero al formato
digital por medio de un ADC (Analog-Digital Converter). En todos los casos los
programadores deben utilizar un código común para representar los datos que
manipulan, de modo que al concluir la manipulación de datos, los propios
programadores puedan interpretar con éxito los resultados que produjo la
computadora. Hay varios códigos normales de uso común, a continuación se
mencionan algunos.
Sistemas Numéricos
Normalmente las personas no se adaptan muy bien al manejo directo de
datos binarios y por lo general trabajan con números octales (base 8) o
hexadecimales (base 16). La ventaja de estas dos bases es que ambas pueden
convertirse fácilmente a valores binarios (1 dígito octal = 3 dígitos binarios y 1
dígito hexadecimal = 4 dígitos binarios) y al mismo tiempo su aritmética es muy
parecida a la aritmética decimal habitual. Las representaciones octales y
hexadecimales ofrecen una manera bastante compacta de expresar números,
mientras que los números binarios de gran magnitud muy pronto dejan de ser
manejables. Otro sistema utilizado en las computadoras es el sistema BCD (Binary
Coded Decimal. Decimal codificado en binario), este sistema de numeración utiliza
cuatro bits para representar cada dígito decimal. La ventaja de este sistema es
que los números BCD se pueden convertir fácilmente a números decimales, con
sólo dividir la palabra de datos en bloques de cuatro bits. La desventaja es que no
puede codificar los números de manera tan eficiente como el sistema binario, por
ejemplo con 8 bits sólo se podrían representar los números del 0 al 99 mientras
que en el sistema binario se podrían representar los números del 0 al 255.
Formatos normales de datos numéricos
Hay
varias
representaciones
numéricas
de
uso
común
en
las
computadoras, que dependen del tipo de número que tienen que manipularse. Por
lo general se debe hacer una concesión entre la complejidad de la representación
numérica, la facilidad para llevar a cabo las manipulaciones numéricas usando ese
formato y el intervalo y la precisión de los números que pueden representarse. No
tiene sentido usar una representación numérica compleja para representar un
simple número entero.
El formato de enteros sin signo es la forma más sencilla de representar
números en una computadora. Se toma una palabra para representar
directamente el número binario que se requiere. El intervalo de números que se
puede representar con este formato de datos depende de la longitud de la palabra
de la computadora, por ejemplo: 8 bits permiten representar números enteros sin
signo en el intervalo 0-255, 16 bits permiten representar números enteros sin signo
en el intervalo 0-65535.
Otro formato de datos numéricos es el de números negativos, en el cual
se suele emplear dos métodos: el de signo más magnitud absoluta y el de
complemento a dos. En el primero se utiliza un bit de la palabra de la computadora
para representar el signo del número (1=número negativo, 0=número positivo),
mientras que los bits restantes representan su magnitud absoluta. De esta
manera, una palabra de 8 bits permite expresar números entre –127 y +127. En la
práctica se ha visto que ésta no es la representación de los números negativos
más útil que la computadora puede manejar con más facilidad.
En el segundo método, para una palabra de N bits, el número –A se
representa como 2 N-A. Esto se logra fácilmente obteniendo el complemento de A y
luego incrementando el valor en 1. Este método también utiliza el bit más
significativo como bit de signo, pero con la ventaja de que éste se genera en forma
automática durante el proceso de complemento a dos. De esta manera se puede
determinar cualquier número por medio de la revisión del bit de signo. Si es cero,
el número es positivo y los demás bits de la palabra representan el valor entero
positivo del número; si es 1, el número es negativo y se puede encontrar el módulo
de su valor al aplicar la operación de complemento a dos para obtener el valor
entero positivo correspondiente.
Números de punto fijo
En el formato numérico de punto fijo se define que el punto decimal debe
estar en una posición fija de la palabra de la computadora. Esta posición se elige
según sea conveniente para el cálculo que se realiza. Si se escoge que el punto
decimal esté después del bit menos significativo de la palabra, entonces el número
es entero. Los números de punto fijo con signo también se pueden formar con el
formato de signo más magnitud absoluta o con el formato de complemento a dos.
Sin embargo, la mayor desventaja del formato de punto fijo es que al aumentar el
intervalo se pierde resolución (ver fig. 20). Por ello, si se considera una longitud de
palabra de 8 bits con el punto decimal después del bit menos significativo, se
puede representar datos en el intervalo 0-255 con resolución de 1. Sin embargo, si
el punto decimal está antes del bit más significativo, la resolución aumenta a 1/256
(0.003906), pero con un intervalo de sólo 0-1. Entonces, si se requiere alta
resolución y un intervalo extenso, se usa otro formato numérico, el de número de
punto flotante.
MSB*
22
PB*
21
20
.
LSB*
2-1
2-2
2-3
2-4
2-5
* MSB=Most Significant Bit; PB=Punto Binario; LSB=Low Significant Bit
Fig. 20. Ejemplo de una palabra de punto fijo.
Números de punto flotante
Los números de punto flotante se definen con el formato ±A x 2±B , donde A
y B se especifican como dos números de punto fijo en complemento a dos. A
recibe el nombre de mantisa y B se denomina exponente o característica. Un
problema especial del formato de punto flotante es que no hay una norma
universal para el número de bits que se usan para representar A y B. Al variar el
número de bits que se emplean para representar A, cambia la resolución del
número de punto flotante que puede expresarse; si se altera el número de bits
empleados para representar B, varía el intervalo de los números. Así mismo, A
puede ser, en principio, un entero o una fracción, por lo cual los números de punto
flotante son redundantes, ya que el número 1 x 2+10 se puede representar como
0.5 x 2 +11 , 2 x 2 +9, etc. Por consiguiente, la regla convencional es que la mantisa A
se normaliza para que sea una fracción sin ceros iniciales.
Por ejemplo, un formato de punto flotante que se usa en algunas
computadoras fabricadas por IBM, DEC, HP y Data General, representa cada
número con dos palabras de 16 bits (ver fig. 21). La mantisa A se representa con
una fracción de 24 bits con complemento a dos, mientras que el exponente B,
también con formato de complemento a dos, ocupa los 8 bits restantes del formato
de 32 bits. Esto permite representar números con resolución de 1 en 223,
equivalente a una precisión de unos 7 dígitos decimales, en un intervalo de 2±128,
aproximadamente 10±38.
32 bits
( A ) 23 bits
( B ) 7 bits
Bit de
Bit de
signo
signo
Fig. 21. Ejemplo de un formato de punto flotante.
La ventaja evidente del formato numérico de punto flotante es que es
posible expresar una amplia gama de números con buena precisión, característica
que se requiere con frecuencia en cálculos científicos. En oposición a lo anterior
está la desventaja de que la manipulación numérica con formato de punto flotante
es mucho más compleja que la aritmética con enteros. Esto significa que se
requieren programas más largos (lo que repercute tanto en tiempo de ejecución
como en tamaño del programa) para llevar a cabo cálculos de punto flotante, o
bien que se debe incorporar a la computadora hardware especial (y costoso) para
su manejo. De ahí que el formato de punto flotante sólo se aplique en aquellos
casos donde la aritmética entera normal no ofrece la resolución o los intervalos
adecuados. En la actualidad los microprocesadores incluyen una unidad de punto
flotante (FPU.- Floating Point Unit) encargada de la aritmética en este formato,
también las características de esta unidad define en parte la potencia de la
computadora.
Formatos de texto: Código de caracteres ASCII
El procesamiento de texto es un requisito en cualquier computadora de
propósito general, ya que en los lenguajes de programación las instrucciones de
un programa se codifican inicialmente con caracteres alfanuméricos. Las cadenas
de texto que corresponden a cada instrucción se convierten posteriormente en
instrucciones ejecutables en código de máquina.
Así como existen códigos diferentes para representar formatos numéricos,
también se han definido varias normas de codificación para representar caracteres
alfanuméricos. Los códigos de mayor difusión son el ASCII (American Standard
Code for Information Interchange) y el EBCDIC (Extended Binary Coded Decimal
Interchange). El código ASCII se usa casi de manera universal en las
microcomputadoras y equipo periférico. En este código cada carácter se
representa con un código de 8 bits, seis de los cuales definen 64 caracteres, que
incluyen 52 letras minúsculas y mayúsculas. Un séptimo bit permite definir 64
caracteres adicionales, los cuales incluyen los números del 0 al 9, signos de
puntuación y varios códigos de control que no se imprimen y que se usan para
realizar funciones como el retorno de carro, salto de línea y retroceso en
impresoras y terminales. El octavo bit del formato ASCII sirve para definir un
código de caracteres que comúnmente se llama código extendido y en el que se
incluyen diversos caracteres gráficos y matemáticos entre otros.
2.6. Palabras de instrucción
Hasta ahora se ha considerado la representación de números o texto
como palabras de la memoria. Sin embargo, en la memoria también se almacenan
instrucciones de la computadora; éste es el concepto de programa almacenado
que introdujo John von Neumann.
Como sucede con los demás tipos de información, las instrucciones deben
representarse en la computadora como códigos binarios. Por lo general, cada
computadora tiene su propio conjunto de instrucciones, el cual es elegido por el
fabricante de dicha computadora y refleja la arquitectura del diseño de éste. Por
ello, lo más probable es que un conjunto de instrucciones binarias en código de
máquina, escritas para ejecutar un programa específico en una computadora, no
pueda ejecutarse si se transfiere a otro tipo de computadora, a menos que se haya
diseñado para ejecutar el mismo conjunto de instrucciones.
El número de instrucciones que pueden representarse en el conjunto de
instrucciones de una computadora depende del número de bits que se asignen
para definir la instrucción. Por ejemplo, se puede usar un código de instrucción de
2 bits para definir 4 instrucciones, como sigue:
00 puede ser una suma
01 puede ser una resta
10 puede ser un AND lógico
11 puede ser un OR lógico
Así mismo, un código de instrucciones de 4 bits permitiría definir hasta 16
instrucciones, mientras que un código de 8 bits permitiría especificar hasta 256
instrucciones. En términos generales, al disponer de más bits para definir
instrucciones, mayor es el repertorio de instrucciones que puede contener el
conjunto y, por consiguiente mayor el poder de procesamiento de la computadora.
En casi todas las computadoras se emplea la misma memoria para
almacenar las palabras de datos y de instrucciones; por tanto, el número de bits
disponible para definir códigos de instrucciones generalmente es igual a la longitud
de palabra de datos de la computadora. Entonces, un microprocesador de 8 bits
manipula datos en unidades de 8 bits y también ejecuta instrucciones que se
almacenan como palabras de 8 bits, lo cual ofrece la posibilidad de contar con 256
instrucciones. A cada tipo de instrucción (por ejemplo ADD, SUBSTRACT, AND,
OR, etcétera) se le asigna un código binario único para identificarlo. Este código
se denomina código de operación.
Por lo general no basta que una instrucción esté formada sólo por un
código de operación; el código especifica únicamente el tipo de operación, no los
datos sobre los cuales opera la instrucción. Esta información adicional tiene que
especificarse, donde sea necesario, con un operando de la instrucción, el cual
identifica los números que se sumarán, restarán, etc. El operando de la instrucción
puede especificar de varias maneras los datos sobre los cuales opera la
instrucción: el operando puede ser el dato o puede especificar la dirección en la
memoria de los datos sobre los cuales operará la instrucción. Si el operando
especifica la dirección donde se encuentran los datos, ésta puede especificarse
directamente o calcularse de varias maneras, a partir del operando de la
instrucción. Las diversas formas de especificar un operando de instrucción se
conocen como modos de direccionamiento de la instrucción.
Veamos un ejemplo: supongamos que se requiere sumar el contenido de
la palabra de memoria en la dirección 100h (h=hexadecimal) al contenido de la
palabra de memoria en 180h y almacenar el resultado en la dirección 200h, con un
microprocesador que tiene una instrucción de código B6h para cargar un valor de
memoria al acumulador, una instrucción BBh para sumar un valor de memoria con
el acumulador y una instrucción de código B7h para almacenar el valor del
acumulador en la memoria.
El algoritmo correspondiente a este problema sería:
1) Cargar el acumulador A con el contenido de la dirección 100h.
2) Sumar el contenido de la dirección 180h al acumulador A.
3) Almacenar el contenido del acumulador A en la dirección 200h.
Traducido al código de máquina quedaría como lo muestra la figura 22.
En este ejemplo la dirección en la memoria donde se almacenan las
instrucciones es arbitraria, pero las direcciones de datos son fijas. Es muy
importante que la ejecución de las instrucciones comience en la dirección correcta
(1000h, en este caso). Si, por ejemplo, las instrucciones se ejecutaran a partir de
1001h, entonces los operandos se interpretarían como códigos de operación y
viceversa, lo que generaría resultado imprevisibles. En este caso, el byte de orden
superior del primer operando (01) se ejecutaría como código de operación. El
número de bytes del operando después del código de operación está definido por
el propio código de operación, por lo que en la mayoría de las computadoras es
posible tener instrucciones de longitud variable.
Dirección
de memoria
1000
1001
1002
1003
1004
1005
1006
1007
1008
Código de
operación
•
•
•
B6
01
00
BB
01
80
B7
02
00
Descripción
Dirección de
memoria
0100
57
0180
43
0200
100
Código de operación cargar
Dirección del operando
Código de operación sumar
Dirección del operando
Código de operación almacenar
Dirección del operando
•
•
•
Fig. 22. Ejemplo de un programa real en memoria.
Las instrucciones del ejemplo son típicas de las instrucciones disponibles
en el conjunto de un microprocesador de 8 bits. Se denominan instrucciones de
una dirección porque cada instrucción sólo es capaz de especificar una dirección
de la memoria. Las computadoras CISC de mayor tamaño y mayor longitud de
palabra pueden tener instrucciones de doble dirección o de tres direcciones: estas
computadoras son capaces de ejecutar instrucciones que especifican dos o tres
direcciones de memoria, respectivamente. Por ejemplo, una computadora con
instrucciones de tres direcciones podría ejecutar el ejemplo anterior con una sola
instrucción: “Almacenar la suma del contenido de las direcciones 100h y 180h en
la dirección 200h”. Es obvio que las instrucciones de dos o tres direcciones
requieren más espacio de almacenamiento en la memoria para los operandos que
en el caso de las instrucciones de una sola dirección, lo cual reduce un poco la
ventaja de contar con una instrucción más poderosa.
En este aspecto, la filosofía de fabricación de microprocesadores RISC
(Reduced Instruction Set Computer. Computadora con un conjunto de
instrucciones reducido) difiere mucho de la CISC (Complex instruction Set
Computer. Computadora con un conjunto de instrucciones complejo ). En los
procesadores RISC casi todas las instrucciones son con cero dimensiones, lo que
significa que la mayoría de las instrucciones sólo pueden operar en los datos
almacenados en los registros de la CPU y no pueden tener acceso a la memoria.
Las excepciones típicas serían las instrucciones cargar y almacenar, las cuales se
usan para mover datos entre la memoria y los registros. Este enfoque tiene varias
ventajas. Primero, las instrucciones con cero direcciones pueden ser más cortas,
ya que no hay que incluir la dirección de la memoria en el código máquina
correspondiente a la instrucción (en general el objetivo es que todas las
instrucciones tengan longitud de una palabra). Segundo, como todas las
instrucciones tienen la misma longitud, el diseño del decodificador de instrucciones
es mucho más sencillo que en la arquitectura CISC, donde las instrucciones
suelen ser de longitud variable. Por último, por la simplificación del decodificador
de instrucciones y el hecho de no tener que extraer datos de la memoria para
ejecutar la instrucción, la ejecución de una instrucción RISC es mucho más rápida
que su equivalente en CISC. Esta ventaja se reduce un poco porque, en la
mayoría de los casos, se requieren más instrucciones para implantar una función
específica en un microprocesador RISC que en un microprocesador CISC
equivalente.
2.7. Procesamiento de datos
Función de la Unidad Central de Proceso (CPU)
La ALU (Unidad Aritmética y Lógica) se puede considerar como el corazón
de la computadora, ya que es el componente que lleva a cabo las operaciones de
manipulación de datos esenciales para cualquier tarea de procesamiento de datos.
Así mismo la UC (Unidad de control) puede considerarse como el cerebro de la
computadora, porque su función es controlar la ejecución de los programas de
acuerdo con la secuencia de instrucciones codificadas como el programa.
La UC realiza esta tarea buscando las instrucciones, una por una en la
memoria, y luego obedeciendo la manipulación de datos que indica cada
instrucción. Por ello, se puede considerar que la ejecución de una instrucción es
un ciclo de dos pasos, el primero de los cuales sirve para buscar la instrucción y el
segundo para ejecutar la función que especifica dicha instrucción. La operación de
búsqueda (fetch) es la misma para todas las instrucciones pero la ejecución de la
operación varía de acuerdo con la instrucción que se obtuvo y puede, por ejemplo,
dar lugar a la suma del contenido de dos registros, el borrado de una localidad de
memoria o la transferencia de datos entre un registro y una localidad de memoria.
Se requiere ciclos adicionales de reloj para buscar el operando de la memoria, a
menos que ya se encuentre en un registro de la CPU.
La unidad central de proceso debe realizar, por tanto, tres tareas básicas
para cumplir con su objetivo:
a).- Comunicación con la memoria.- La CPU debe proporcionar un
mecanismo para buscar y obtener las instrucciones de memoria antes de
ejecutarlas y también debe ofrecer un medio para la búsqueda y almacenamiento
de los datos que pueden almacenarse temporalmente en memoria
b).- Interpretación de instrucciones.- La CPU debe incluir la lógica que
decodifique el código de operación de cada instrucción para generar señales de
control de bajo nivel que lleven a cabo la manipulación de datos que especifica la
instrucción. Estas señales de control son, en general, señales de selección y
escritura de memoria y registros, así como señales que especifican la operación
que llevará a cabo la ALU. Se incluyen también señales que leen de la memoria
palabras adicionales correspondientes a los operandos, cuando esto se requiere.
c).- Ejecución de instrucciones.- La CPU debe proporcionar un
mecanismo para efectuar las manipulaciones de datos que requiere el conjunto de
instrucciones de la computadora. Muchas instrucciones no hacen mas que
transferir datos de un lugar a otro dentro de la computadora, lo cual puede
lograrse con canales de datos adecuados para la transferencia y líneas de control
y de dirección apropiadas. Sin embargo, la característica fundamental de una
computadora es su habilidad para procesar los datos y generar nueva información
a partir de ellos; esto lo logra la ALU, de acuerdo con las señales de control que
genera la instrucción decodificada. Además se requieren instrucciones que alteren
la secuencia de ejecución del programa de acuerdo con el resultado de los
cálculos realizados por la ALU, como serían las instrucciones de ramificación y de
salto condicional.
Comunicación entre la CPU y la memoria.
Los datos se comunican entre la CPU y la memoria a través de canales
externos y dentro de la CPU, los registros se comunican mediante canales
internos. En concepto, no hay diferencia entre los dos tipos de canales.
Para que la CPU accese a las instrucciones o datos de memoria, primero
tiene que proporcionar la dirección de la palabra de memoria que se requiere
mediante el canal de direcciones. Después de especificar la dirección, la
instrucción o dato se puede leer e incorporar a la CPU utilizando el canal de datos.
También puede ser necesario escribir datos en la memoria, además de
leer los datos. Una manera de hacerlo sería con dos canales de datos distintos,
uno para leer los datos de la memoria a la CPU y otro para escribirlos de nuevo en
la memoria. Sin embargo, para minimizar el número de conectores que se
necesitan en el circuito de la CPU del microprocesador, lo más común es
multiplexar los canales de lectura y escritura de datos para formar un solo canal
con una o dos línea(s) de control de lectura/escritura que especifique la dirección
de la transferencia.
Si se usa un canal bidireccional de datos es imposible leer y escribir datos
al mismo tiempo, por lo que hay que proporcionar almacenamiento temporal de
datos en la CPU en forma de registros. Los registros proporcionan un medio para
almacenar datos entre la ejecución de una instrucción y la ejecución de la
siguiente. Después, se puede escribir de nuevo los números en la memoria
principal.
Otro requisito de la CPU e contar con un registro para llevar el control de
cuál es la instrucción que se ejecuta, de manera que las instrucciones se ejecuten
en secuencia. Este registro se llama contador de programa (o contador de
instrucciones o puntero de instrucción) y sirve como apuntador a la siguiente
instrucción que se ejecutará. Su valor se incrementa inmediatamente después de
acceder a una instrucción en la memoria y también después de acceder a cada
operando o dirección de operando de la instrucción, en caso de que el operando
se almacene en un palabra distinta de la memoria. Cuando se requiere leer la
siguiente palabra de instrucción de memoria, la salida del contador de programa
se conecta a la memoria por medio del canal de direcciones, con lo cual se
proporciona la dirección de la siguiente instrucción. Después de un intervalo
apropiado para tomar en cuenta las demoras de propagación, la palabra de
instrucción de puede leer del canal de datos de la CPU.
También es posible que el programa cargue un valor nuevo en el contador
de programa, lo que da lugar a la búsqueda de la siguiente instrucción con base
en la nueva dirección incluida en el contador de programa; con esto se implanta
una ramificación de programa o la capacidad de toma de decisiones.
La sincronización de las operaciones de la computadora se controla con
un reloj oscilador, de manera que todas las operaciones se lleven a cabo en forma
sincronizada unas con respecto a otras. La frecuencia máxima del reloj se define
de acuerdo con los tiempos de propagación dentro de los componentes del
sistema y entre ellos.
En resumen, una computadora requiere tres canales de datos para
permitir la transferencia de datos entre la CPU, la memoria y las interfaces
externas de E/S. Estos canales son:
a) un canal de direcciones para especificar la dirección requerida;
b) un canal de datos para permitir la transferencia bidireccional de
datos;
c) un canal de control para proporcionar las señales de reloj y control.
Además,
por
lo
menos
se
necesita
un
registro
que
ofrezca
almacenamiento local a corto plazo en la CPU y un contador de programa para
indicar cuál será la siguiente instrucción que se ejecute. Los detalles exactos de la
arquitectura de las computadoras varían considerablemente de otra, debido, entre
otras cosas, al nivel de integración que era posible al momento de diseñar el
microprocesador.
2.8. Ejecución de instrucciones: Manipulación de datos.
El poder de la computadora yace en la capacidad de manipular y procesar
la información de tal forma que se pueda genera nueva información a partir de los
datos existentes. La ALU es el componente del sistema que realiza la tarea de
manipulación de datos. En la mayoría de los casos conviene considerar a la ALU
como una caja negra con dos entradas de una palabra de ancho y una salida de
datos de una palabra de ancho (ver fig. 23). Así mismo, la ALU contiene varias
entradas de control para especificar la función de manipulación de datos que se
habrá de realizar.
Control
Dato 1
ALU
Resultado
Dato 2
Estado
Fig. 23. Estructura General de una ALU
La ALU es un circuito con lógica combinatoria, cuya salida es una función
instantánea de sus entradas de datos y de control; no tiene capacidad de
almacenamiento. Por ello hay que almacenar en un acumulador el resultado de
cualquier operación de la ALU. Algunas funciones típicas que debe realiza la ALU
son:
Suma
Resta
Multiplicación
División
Operaciones aritméticas
AND
OR
XOR
NOT
Operaciones lógicas
Desplazamiento a la izquierda
Desplazamiento a la derecha
Seleccionar palabra de entrada A
Seleccionar palabra de entrada B
La ALU también tendrá varias salidas de estado, las cuales indican el
resultado de la operación actual. Esta información se almacena posteriormente en
un registro de estado de modo que pueda usarse para determinar cómo
continuará el procesamiento. Cada bit de estado proporciona una pieza de
información binaria relacionada con la operación aritmética o lógica anterior, por
ejemplo, si la última operación generó una salida de acarreo, si las entradas A y B
eran iguales, si una era mayor que otra, etc. Estas señales de estado son una
característica esencial de cualquier computadora de von Neumann, pues permiten
que la computadora lleve a cabo una ramificación condicional con base en los
resultados de la operación previa. Por ello, la computadora tiene la capacidad de
tomar decisiones de acuerdo con los resultados del procesamiento que efectúa.
Para implantar un mecanismo de ramificación condicional en una
computadora se requieren las siguientes características en el hardware:
a) Varias salidas de estado o condición de la ALU, cada una de las
cuales es un indicador binario de algún aspecto de la manipulación
de datos que realizó la ALU.
b) Almacenamiento temporal (un registro de estado) para la salida de
estado de la ALU, de manera que las operaciones de ramificación
condicional subsecuentes puedan tener acceso al resultado de
estado de la ALU.
c) Instrucciones de ramificación condicional que se basan en el valor
binario de un bit de estado.
Los detalles del registro de estado varían de una computadora a otra,
dependiendo de su complejidad, pero aunque varíe la ubicación exacta de los bits,
los procesadores ofrecen funciones de estado muy semejantes. Algunos bits de
estado comunes en algunos procesadores son:
Acarreo.- Este bit indica una condición de sobreflujo durante una operación
aritmética de entero sin signo. Se le asigna el valor 1 si tiene lugar el
acarreo de una operación aritmética y 0 en caso contrario.
Sobreflujo. Este bit indica una condición de sobreflujo después de una operación
aritmética de complemento a dos. Se activa si la operación ocasiona un
sobreflujo de complemento a dos y se desactiva en caso contrario.
Cero.- El indicador de cero se activa si el resultado de un operación lógica o
aritmética es cero y se desactiva si el resultado es distinto de cero.
Negativo.- El bit negativo recibe el valor lógico 1 si el resultado de una operación
aritmética de complemento a dos es negativo, y recibe 0 en caso
contrario. De hecho el bit negativo es una copia del bit más significativo
de la palabra de salida de datos de la ALU.
2.9. Ejecución de instrucciones: Control de programas
La ramificación de programas, capacidad que tiene un programa para
alterar su secuencia de ejecución, es un recurso fundamental de cualquier
computadora. Esta capacidad permite a la computadora tomar decisiones lógicas
con base en los resultados de los cálculos. Para implantar la ramificación, el
conjunto de instrucciones de la computadora debe incluir instrucciones para
controlar la secuencia de ejecución de las instrucciones. Estas instrucciones no
manipulan datos y por tanto son fundamentalmente diferentes de las demás
instrucciones que se han comentado hasta ahora. Las instrucciones de
ramificación incluyen tanto ramificaciones incondicionales como condicionales, las
cuales se basan en varias condiciones determinadas por la revisión del registro de
código de condición.
El propósito básico de una instrucción de ramificación es alterar el
contenido del contador de programa para que la próxima instrucción que se
ejecute no sea la siguiente de la secuencia. Sin embargo, hay varias maneras de
lograr esto y cada método tiene sus propias ventajas y aplicaciones.
Instrucciones de salto absoluto
La instrucción de salto absoluto contiene la dirección a la cual se va a
transferir la ejecución de las instrucciones en la palabra o palabras
inmediatamente después del código de operación del salto. Suponiendo que una
computadora tiene una longitud de palabra de 8 bits y que las instrucciones
utilizan un código de máximo 8 bits, la secuencia de ejecución de la instrucción
sería la siguiente:
a) El contenido del contador de programa se envía al canal de direcciones
y, después de considerar las demoras de propagación, se lee el código
de operación a la CPU y se decodifica; el contador de programa se
incrementa.
b) Después de decodificar el código de operación, la CPU sabe que la
instrucción es de salto y que el código de operación va seguido por 2
bytes que contienen una dirección de 16 bits. Por consiguiente, el
contenido del contador de programa se envía de nuevo por el canal de
direcciones y se lee a la CPU el primer byte de la dirección de salto.
Entonces se incrementa de nuevo el contador de programa.
c) El contenido del contador de programa se envía por tercera vez a través
del canal de direcciones y se lee a la CPU el segundo byte de la
dirección de salto. El contador de programa se incrementa por tercera
vez.
d) Por último, la dirección del salto se carga al contador de programa,
donde sustituye el contenido anterior del contador de programa. Como
resultado, durante el ciclo de búsqueda de la siguiente instrucción, al
enviarse el contenido del contador de programa al canal de direcciones,
las instrucción que se recupera no es la siguiente de la secuencia.
Instrucción de ramificación relativa
La instrucción de ramificación relativa construye el nuevo contenido del
contador de programa sumando un valor de desplazamiento al contenido actual. El
desplazamiento se almacena en las palabras que siguen al código de operación.
Este desplazamiento del contador de programa por lo general se representa con
formato de complemento a dos, pues esto permite especificar desplazamientos
positivos o negativos. De esta manera, la ramificación puede ser hacia delante o
hacia atrás en el programa, en relación con el valor actual del contador de
programa. En una computadora de 8 bits, está instrucción se ejecutaría como
sigue:
a) El contenido del contador de programa se envía por el canal de
direcciones y el código de operación se lee a la CPU, donde se
decodifica. El contador de programa se incrementa.
b) La CPU ahora sabe que la instrucción es de ramificación relativa y que
el código de operación va seguido por un desplazamiento representado
con un byte. Entonces, el contador de programa se envía por el canal
de direcciones y el desplazamiento se lee a la CPU. El contador de
programa se incrementa una vez más.
c) El byte menos significativo del contenido del contador de programa se
suma al desplazamiento que se leyó de la memoria y el resultado se
almacena de nuevo en los 8 bits inferiores del contador del programa.
d) El byte más significativo del contenido del contador de programa se
suma a cualquier acarreo que pudiera haber ocurrido durante la suma
anterior y el resultado se almacena de nuevo en los 8 bits más
significativos del contador del programa.
Ramificación/salto a subrutina
Al escribir un programa de computación, el enfoque fundamental que se
debe seguir es la estrategia de diseño descendente o estructurado. El objetivo es
definir el programa primero en términos generales y luego refinarlo especificando
la tarea en función de varias subtareas, cada una de las cuales implanta un
subconjunto del problema. Luego las subtareas se dividen en subtareas y este
proceso de refinamiento continúa hasta especificar por completo el problema en
términos de instrucciones de la computadora. Muchas veces se requiere una
misma subtarea en varios lugares del programa. Sería posible duplicar el código
de la subtarea requerida cada vez que ésta se ejecutara, pero no sería una forma
muy eficiente de utilizar la memoria de la computadora. Otro método sería
almacenar en la memoria una sola copia del código de la subtarea y efectuara un
salto o una ramificación a este código cada vez que se tuviera que ejecutar la
subtarea. Sin embargo, este método tampoco es satisfactorio, ya que al concluir la
tarea no hay manera de saber en qué punto se suspendió la tarea principal.
Lo que se necesita es una forma de regresar al programa principal al
concluir la subtarea y continuar con la ejecución a partir de ese punto. Para ello
hay que almacenar el contenido del contador de programa que existe en el
momento de efectuar la ramificación a la subtarea, de manera que este valor se
pueda cargar de nuevo al contador de programa cuando se desee reanudar la
ejecución del programa principal. La secuencia de operaciones para ejecutar una
subtarea o subrutina con este mecanismo sería:
a) Ejecutar la instrucción “llamar subrutina”.- La dirección de la subrutina se
especifica como una dirección absoluta o relativa, exactamente como se
hizo con las instrucciones de salto y ramificación descritas anteriormente.
Sin embargo, la instrucción llamar subrutina incluye un mecanismo que
guarda el contenido del contador de programa antes de modificar el valor
de éste. En este instante, el contenido del contador de programa apunta
a la instrucción que está inmediatamente después de la llamada a la
subrutina, o sea, el punto donde continúa la ejecución del programa
principal al concluir la subtarea.
b) Ejecutar la subtarea. Las instrucciones que integran la subrutina se
ejecutan en la forma normal.
c) Regreso desde la subtarea. Se trata de una instrucción especial que
restablece el valor previamente almacenado del contador de programa.
d) Continuar con el programa principal. Ahora se puede continuar el
programa principal en la manera habitual.
El único problema de este mecanismo es cómo almacenar el contenido del
contador de programa. Los métodos varían de un microprocesador a otro, pero el
más común es el de la pila de memoria.
Una pila LIFO (Last Input First Output) es una estructura de
almacenamiento que tiene sólo dos operaciones: PUSH y POP para introducir un
dato a la cabeza de la pila y extraer un dato de la cabeza respectivamente.
Al llamar a cada subrutina, el contenido del contador de programa se
almacena en la cabeza de la pila. Luego, al ejecutarse un regreso desde la
subrutina, el contenido del contador de programa que se almacenó más
recientemente vuelve a cargarse a partir de la cabeza de la pila. Mediante este
mecanismo, es posible un anidamiento ilimitado de subrutinas.
Para identificar el área de la memoria que se usará como pila se requiere
un registro especial de la CPU; este registro se conoce como apuntador de pila
porque siempre apunta a la siguiente localidad de la memoria que está libre para
almacenar una dirección de regreso desde subrutina.
El mecanismo de pila de memoria sirve para otros dos fines, aparte de
almacenar direcciones de regreso desde subrutinas. Una aplicación es almacenar
el estado de programa (es decir, el contenido de los registros) durante una
solicitud de interrupción. El otro uso es proporcionar un almacenamiento de datos
LIFO temporal para otros registros de la CPU. Para ello, hay instrucciones que
permiten guardar cualquier registro y recuperarlo de la pila de memoria. El
mecanismo operativo de estas instrucciones es idéntico al del mecanismo
autónomo de subrutinas. Las instrucciones de inserción y extracción en pila son
útiles para preservar el valor de los datos en los registros durante la ejecución de
una subrutina. Es muy importante que el número de operaciones de extracción
sea exactamente igual al número de operaciones de inserción en la subrutina; si
no se observa este requisito, el acceso a la dirección de regreso desde la
subrutina puede hacerse desde una posición incorrecta en la pila y la continuación
del programa sería a partir de una dirección errónea. Este problema se conoce
como corrupción de pila y se presenta por combinar la función autónoma del
apuntador de pila con su uso por parte de instrucciones programadas.
Un último aspecto que se relaciona con el empleo de un apuntador de pila
es que es obvio que se requieren instrucciones para asignar al apuntador a una
dirección adecuada en la memoria. También es responsabilidad del programador
asegurar que exista memoria suficientes para los requerimientos de la pila.
2.10. Control e interpretación de instrucciones
El último aspecto de la CPU, es el mecanismo para convertir los códigos
de operación de las instrucciones en señales de control de bajo nivel que den
lugar a la ejecución de la operación que especifica el código. Esta función
depende de la unidad de control del microprocesador. Así como los conjuntos de
instrucciones de los distintos microprocesadores son diferentes, también varía la
forma en que las unidades de control decodifican los códigos de operación para
obtener señales de control elementales para el resto de la computadora. No
obstante, hay algunos aspectos que se pueden señalar acerca de la estructura
general de las unidades de control de las computadoras.
RELOJ
INSTRUCCIÓN
DECODIFICADOR
ESTADO
Control de
Lógica
Combinatoria
DE
Control de
Registros
INSTRUCCIONES
Fig. 24. El decodificador de instrucciones de la unidad de control.
Cuando el código de operación de la instrucción se carga de la memoria a
la CPU, se almacena en el registro de instrucciones. Este registro proporciona
almacenamiento temporal para el código de operación mientras se aplica a las
entradas de un decodificador de instrucciones, el cual convierte el código de
operación a las señales de control de bajo nivel que se requieren. El decodificador
de instrucciones puede considerarse como una caja negra que recibe como
entradas el código de operación de la instrucción, las salidas del registro de
estado y las señales de reloj, para luego producir como salida un conjunto de
señales de control de lógica combinatoria y un conjunto de señales de escritura de
registros y memoria (ver fig. 24).
Las señales de control de lógica combinatoria se conectan a todos los
componentes combinatorios del microprocesador, como las entradas de selección
de modo y función de la ALU. La salida de control de registros del decodificador de
instrucciones se conectan a las entradas de escritura de todos los registros de la
CPU y a la línea de memoria de lectura/escritura del canal de control. La
sincronización de estas señales es importante porque controla cuándo se escriben
los datos en la memoria o los registros de la CPU. La escritura sólo debe ocurrir
cuando se sabe que las entradas de datos de los registro son válidos (es decir,
después de permitir el tiempo suficiente para que se desvanezcan todas las
demora de propagación). Lo anterior se puede lograr activando las señales de
control de registro con una fase de reloj, de manera que los datos se incorporen a
los registros requeridos con el flanco descendente de la señal de reloj.
Muchos microprocesadores CISC usan una estructura de control más
compleja que la descrita anteriormente. Se dice que estas computadoras son
microprogramadas porque cada instrucción se forma con una secuencia de
microinstrucciones elementales, cada una de las cuales realiza una pequeña parte
de la instrucción completa.
III
INTERFACES DE ENTRADA/SALIDA
3.1. Características de los dispositivos de entrada y
salida 3
Las interfaces de salida son otro aspecto muy importante en la
arquitectura de las computadoras, ya que sin ellas no podrían entrar datos del
mundo externo a la computadora ni este podría transmitir de regreso los
resultados calculados. En la siguiente tabla se muestran algunos ejemplos,
clasificados de acuerdo con la complejidad de la interfaz que requiere.
Entrada
Salida
Interruptores
Lámparas
Transductores
Servomecanismos
Contadores
Pantallas alfanuméricas
Complejidad
Más sencillo
Cinta de papel
Cinta magnética
Terminales visuales
Más
complejo
Unidades de disco
Tabla 2. Ejemplos de dispositivos de Entrada y Salida
Los dispositivos más complejos generalmente necesitan interfaces más
elaboradas que los dispositivos sencillos, como interruptores o lámparas. La
interfaz básica de hardware de una computadora es bastante sencilla y
usualmente bastan cuatro técnicas generales para tratar con cualquier dispositivo
3
El presente capítulo es un compendio de [1],[2], [7], [9], [10] y [14] con adaptaciones personales.
de interfaz, sin importar
cuán sencillo o complejo pueda ser. Estas son las
técnicas que se comentarán a lo largo de este capítulo.
Los dispositivos de interfaz se pueden agrupar de acuerdo con las
siguientes características:
1) Analógico/digital: Si el dispositivo usa formato de datos digitales, esto
simplifica la interfaz con la computadora, pero la mayoría de las señales
reales ocurren en forma analógica. En este caso es necesario procesar la
señal con un convertidor analógico-digital (entrada) o digital-analógico
(salida) para conectar la computadora con el mundo exterior.
2) Características eléctricas: Las características eléctricas del dispositivo que
se enlazará con la computadora pueden ser muy variables; no obstante,
cualquier dispositivo se puede conectar a las entradas o salidas de una
computadora si se diseña una interfaz eléctrica adecuada.
3) Velocidad de operación: La velocidad de operación del dispositivo afecta el
diseño de la interfaz. Hay dos factores fundamentales: primero, el tiempo de
respuesta de la computadora cuando un dispositivo de entrada proporciona
datos o cuando un dispositivo de salida indica que está listo para recibir
datos; segundo la tasa de datos cuando se realiza un flujo de operaciones
sucesivas de datos de entrada o salida.
4) Disponibilidad de datos: La interfaz puede ser capaz de proporcionar o
recibir datos en forma continua, o la transferencia de datos se puede
restringir a intervalos discretos.
5) Sincronización de datos: Es posible que los datos tengan que transmitir o
recibir de la computadora a intervalos regulares (síncronamente) o
irregulares (asíncronamente).
En términos generales, los dos primeros problemas que se describieron
antes influyen en el diseño de la interfaz eléctrica con la computadora, mientras
que los tres últimos se resuelven con el diseño correcto del programa que
transmite o recibe los datos de la computadora.
3.2. Entrada y salida en mapa de memoria
La forma más sencilla de conectar un dispositivo externo a una
computadora es asegurar que el dispositivo parezca una localidad de memoria
para el computadora. Entonces, si los datos se escriben en esta localidad
especial, saldrá al dispositivo externo, y si se leen de la localidad entrarán del
dispositivo. En consecuencia, para la computadora, las localidades de entrada y
salida (generalmente conocidas como puertos de E/S) parecen memoria, pero
para el dispositivo externo parecen entradas y salidas de la computadora.
Decodificador de direcciones: Decodificación de dirección mínima.
Para la interfaz de entrada y salida se requiere un decodificador de
direcciones, a fin de asegurar que la interfaz aparezca en el canal de datos sólo
para una localidad específica de la memoria (el decodificador de direcciones sólo
dará una salida lógica 1 para una dirección específica en el espacio de direcciones
de la computadora); de lo contrario, puede ocurrir un conflicto de memoria entre la
memoria de datos o del programa y los puertos de entrada o salida. Una
desventaja es que se requieren bastantes circuitos lógicos para seleccionar una
localidad de memoria única del espacio de direcciones de 64 kbytes (16 bits de
direcciones) de un microprocesador típico de 8 bits. En una computadora con
correspondencia de memoria de entrada/salida se puede minimizar estos circuitos
con una técnica conocida como decodificación de dirección mínima, la cual se
basa en el hecho de que, en la mayoría de las aplicaciones de microprocesadores
dedicados, sólo se usa una pequeña parte del espacio de direcciones.
Por ejemplo, en una computadora con 16 bits de direcciones los puertos
de E/S podrían tener las direcciones de 8000 0000h en adelante, es decir, cuando
la línea 15 de direcciones se ponga a 1, indicaría una dirección de puerto de E/S y
las únicas líneas de dirección que se tendrían que decodificar serían la 15, la 0 y
la 1 para un total de 4 puertos, o la línea 15, la 0, la 1 y la 2 para un total de 8
puertos. La duplicación de las direcciones donde aparecen los puertos no tiene
importancia porque no hay memoria de datos o de programa que ocupe estas
direcciones. Por consiguiente, en este ejemplo sólo hay que decodificar tres o 4
líneas de dirección en vez de las 16.
3.3. Entradas y salidas a través de un espacio de
direcciones separado
Otra manera de reducir la decodificación de direcciones necesaria para los
puertos de entrada y salida es proporcionar un espacio aparte para las direcciones
de puerto de entrada y de salida. Este espacio puede ser mucho menor que el de
la memoria, ya que la mayoría de las aplicaciones de computación sólo requieren
unos cuantos puertos. Por ende, se necesitan menos líneas de dirección para
identificar en forma única un puerto. (Ver fig. 25).
Canal
de
Subconjunto
Direcciones
CPU
del
canal de direcciones
MEMORI
A
IORQ
MREQ
Canal de Datos
Línea de control para solicitud de Memoria
Línea de control para solicitud de E/S
Fig. 25. E/S a través de un espacio direcciones separado.
PUERTOS
DE E/S
Dispositivos
Externos
En las computadoras que utilizan este esquema, el canal de datos
generalmente se conecta a los dos espacios de direcciones y un subconjunto de
las líneas del canal de direcciones se conecta al espacio de direcciones de E/S.
Se proporciona una o varias señales de control adicionales para indicar si la
transferencia de datos de la CPU debe acceder al espacio de direcciones de la
memoria o al de E/S.
En una computadora con E/S en mapa de memoria, las mismas
instrucciones que realizan operaciones de carga y almacenamiento durante el
acceso a localidades de memoria se convierten en operaciones de E/S cuando
direccionan puertos de E/S. Sin embargo, si se proporciona un espacio de
direcciones separado, debe apoyarse con instrucciones específicas para E/S en el
conjunto de instrucciones de la computadora.
Este es el caso de la familia x86 que incluye varias instrucciones
diseñadas para el acceso a puertos de E/S, en vez de la memoria. Las más
importantes son IN (entrada desde puerto) y OUT (salida a un puerto).
3.4. Tipos de Transferencia
Independientemente de si se hace acceso a los dispositivos de E/S con
mapa de memoria o mediante un espacio de direcciones separado, existen
diversas técnicas de transferencia de información entre la CPU y los dispositivos
de E/S, Básicamente son 4 las técnicas que se implementan para acceso a
dispositivos: la transferencia directa, la prueba y transferencia, la transferencia por
interrupciones y la transferencia autónoma o de acceso directo a memoria. Estas
técnicas se explican a continuación.
Transferencia directa
La transferencia directa es la forma más sencilla de entrada o salida de
datos que puede usar una computadora y se escoge cuando no hay restricciones
con respecto a la sincronización de la operación de entrada o salida y si los datos
están disponibles continuamente. Por tanto, una operación de entrada (o salida)
por transferencia directa corresponde a una instrucción de lectura de entrada
(escritura de salida).
Como ejemplo, considérese una interfaz de entrada de 8 botones de
activación y una interfaz de salida de 8 LEDs (diodos emisores de luz). Los datos
siempre están disponibles en la interfaz de entrada, por lo que una sencilla
instrucción de lectura de entrada que se ejecute en cualquier instante cargará a la
computadora el valor actual de los 8 interruptores. De manera similar, los LED
pueden aceptar la salida de datos de la computadora en cualquier momento y lo
único que se requiere es una instrucción de escritura de salida para enviar los
datos de la computadora.
Sin embargo, es más común que los datos de entrada no siempre estén
disponibles en dispositivo de entrada, o que el dispositivo de salida no pueda
aceptar datos todo el tiempo (por ejemplo una impresora). En estos casos no es
posible la transferencia directa de entrada/salida y se usa, en cambio, un
mecanismo más complejo, conocido como prueba y transferencia.
Prueba y transferencia
Considérese el caso de la entrada de datos a una computadora, si los
datos no están disponibles en forma continua, ¿cómo puede determinar la
computadora que son válidos?. Para esto, los datos de entrada se pueden
clasificar como síncronos, es decir, ocurren a intervalos fijos, o pueden ser
asíncronos y presentarse al azar. Si los datos son síncronos es posible que la
computadora pueda predecir cuándo es que van a estar disponibles, pero esto no
es tan sencillo y pocas veces se intenta en la práctica. Una solución mucho mejor
es utilizar una señal de estado continuamente disponible, proporcionada por el
dispositivo de entrada de datos, para indicar a la computadora cuándo hay datos
válidos disponibles. Ésta señal de estado también se convierte en una entrada
para la computadora, pero como está continuamente disponible, puede leerse en
cualquier momento con la técnica de transferencia directa.
La entrada de estado sólo necesita un bit del puerto de entrada, aunque
en los circuitos de interfaces de microprocesadores que se usan en la práctica
pueden proporcionarse varias señales de estado, las cuales se agrupan para
formar un puerto de estado.
La prueba y transferencia es el método más común para implantar la
entrada/salida de datos en las computadoras, ya que es fácil de programar (ver fig.
26a), requiere relativamente poco hardware adicional aparte de la interfaz de
datos en sí y permite manejar dispositivos de entrada y salida con diversas tasas
de datos, Sin embargo, el método presenta una gran desventaja, que ocurre al
usarlo para conectar a la computadora un dispositivo de entrada o salida lento,
pues se puede desperdiciar mucho tiempo de procesamiento en el ciclo que
constantemente evalúa la señal de estado.
Si por ejemplo, se usa la prueba y transferencia para la entrada de una
cadena de caracteres de una terminal, incluso los mejores mecanógrafos no
podrían teclear más de 10 caracteres por segundo. Entonces, la computadora
puede desperdiciar casi todo su tiempo de procesamiento ejecutando el ciclo de
estado de espera hasta que esté disponible el siguiente byte de datos.
Obviamente se trata de una manera muy ineficiente de usar el poder de
procesamiento del microprocesador, pero en muchas aplicaciones esto no
importa. Si no se puede efectuar ningún procesamiento de datos hasta que se
hayan tecleado todos los caracteres de la línea entonces no hay desventaja en
“desperdiciar” el tiempo en la ejecución del ciclo de estado.
Estado de Entrada
Estado de Entrada
Efectuar
otro
proceso
No
¿Hay datos
disponibles?
No
¿Hay datos
disponibles?
Si
Si
Leer Datos
Leer Datos
a)
b)
Fig. 26. a) Ciclo de prueba y transferencia. b) Prueba y transferencia con otro proceso.
Sin embargo, hay veces que se desea efectuar otro procesamiento
mientras se espera la disponibilidad de los datos. Una posibilidad sería evaluar la
señal de estado y, al encontrar que no están disponibles los datos, efectuar otro
procesamiento mientras se espera la llegada de los datos (fig. 26b). Por desgracia,
con esto se presenta otro problema, pues hay que tomar una decisión acerca de
cuándo evaluar de nuevo la señal de estado. Si los datos sólo están disponibles
durante un breve instante, se pueden perder por completo si la computadora
prueba la señal de estado con poca frecuencia.
Por tanto, se requiere otra técnica de entrada que permita a la
computadora continuar con su procesamiento normal pero que al mismo tiempo
asegure la confiabilidad de la entrada o salida de datos cuando sea necesario.
Esta técnica se denomina transferencia por interrupciones y se describe a
continuación.
Transferencia por interrupciones
El concepto básico de la transferencia por interrupciones es bastante
sencillo: un mecanismo de hardware en la CPU permite que un dispositivo externo
señale a la computadora que desea enviar datos o que está listo para aceptarlos.
Cuando la CPU recibe esta señal, detiene el programa que está en ejecución en
ese momento y ejecuta un programa especial, la subrutina de servicio de
interrupción, la cual lleva a cabo la salida o entrada de datos que solicita el
dispositivo que interrumpe. Al término de la subrutina de servicio de interrupción,
la CPU reanuda la ejecución del programa anterior, a partir del punto donde se
quedó.
Solicitud de Interrupción
Terminar Instrucción actual
Programa Normal
Programa Normal
Almacenamiento
del estado
Restauración del
estado
Subrutina de Interrupción
Fig. 27. Secuencia de transferencia por interrupciones
La secuencia de sucesos, que se muestra en la figura anterior, se puede
dividir en varias etapas generales:
a) Se ejecuta el programa normal. El dispositivo externo solicita una
interrupción. Lo más común es que para indicar la solicitud de
interrupción se use una señal equivalente a la señal de estado utilizada
para la entrada de prueba y transferencia: en lugar de ser una entrada
normal de la computadora, se conecta a una entrada dedicada de la
CPU. En la CPU se incluye hardware especial que responde a una
transición de esta línea, deteniendo la ejecución del programa actual e
iniciando la subrutina de servicio de interrupción.
b) La solicitud de interrupción se ignora hasta concluir la ejecución de la
instrucción actual. Esto es necesario para poder detener la ejecución del
programa normal y luego reanudarla de manera predecible, sin que se
omitan instrucciones o se extravíen datos intermedios.
c) Se guarda el estado del programa actual. La rutina de servicio de
interrupción usará los mismo registros de la CPU que el programa normal
y, por tanto, el contenido de estos registros debe guardarse en la
memoria antes de ejecutar la rutina de servicio de interrupción, ya que
los registros se escribirán con otra información durante la ejecución de la
rutina. Si no se efectúa este paso, al reanudar la ejecución del programa
normal los registros contendrán datos distintos de los que existían al
detener la ejecución y se generarán errores en el programa principal.
d) Se ejecuta la subrutina de servicio de interrupción. Con esto
generalmente se llevará a cabo la entrada o salida de datos relacionadas
con el dispositivo que interrumpió.
e) Al terminar la subrutina de servicio de interrupción se restaura el
programa original, cargando de nuevo en los registros de la CPU los
valores que existían al detener la ejecución del programa normal.
f) La ejecución del programa normal se reanuda a partir de la instrucción
que está inmediatamente después de la última instrucción que se
completó antes de atender la interrupción.
Retención de estado
Este es un requisito idéntico al que se impone al llamar a una subrutina.
Siempre que se ejecuta una subrutina de servicio de interrupción, es necesario
guardar el contenido del contador a fin de poder, más tarde, reanudar la ejecución
del programa normal en la instrucción correcta. Además, hay que guardar
cualquier registro que se usa en la subrutina de servicio de interrupción para evitar
que se corrompan los datos del programa normal.
Los registros se pueden guardar con un método autónomo (es decir, el
hardware de la CPU almacena automáticamente los registros de ésta en la
memoria) o por medio de instrucciones programadas que se ejecutan al iniciar la
rutina de servicio de interrupción.
Al término de la subrutina de servicio de interrupción hay que restaurar los
valores originales de los registros. Si se empleó un mecanismo autónomo para
almacenar los registros de la CPU, entonces se usa una instrucción especial de
regreso desde interrupción para sacar automáticamente los registros de la pila de
memoria en el orden inverso de su colocación.
Si el microprocesador sólo contiene unos cuantos registros, entonces el
método autónomo es el más eficiente para guardar el contenido de los registros en
la memoria. Sin embargo, si hay un gran número de registros en la CPU, es poco
probable que la rutina de servicio de interrupción los utilice todos; de ahí que sea
más eficiente que el programador guarde sólo los registros que se sobreescriban
durante la rutina de servicio de interrupción, utilizando para ello instrucciones
específicas para meter y sacar los datos de la pila.
Mecanismo de vector
Al dar servicio a una interrupción es necesario especificar de alguna
manera la dirección inicial de la subrutina de servicio de interrupción (el vector de
interrupción). En una subrutina normal, la dirección que se cargará al contador de
programa se especifica como parte de la instrucción que llama a la subrutina. Sin
embargo, la interrupción se inicia debido a un suceso externo, de ahí que sea
necesario proporcionar otro mecanismo para especificar el vector de interrupción.
Un método consiste en almacenar la dirección de la rutina de servicio de
interrupción en localidades dedicadas de la memoria (a partir de la dirección 0 en
la familia x86), ocupando 2 o 4 bytes cada dirección y correspondiendo en orden
consecutivo a la interrupción 0 (IRQ0 en la familia x86), 1, 2, etc. Así, cuando
ocurre la solicitud de interrupción 0, primero se colocan en la pila de memoria los
registros de la CPU y luego se carga el contenido de la localidad dedicada a esta
interrupción en el contador de programa, con lo cual la siguiente instrucción a
ejecutar sería la primera de la subrutina de servicio de interrupción.
Es obvio que hay que asignar valores iniciales a los vectores de
interrupción antes de que ocurra la primera solicitud de interrupción, pues de lo
contrario se cargará una dirección incorrecta en el contador de programa. Por ello,
las tablas de vectores deben implantarse físicamente con memoria no volátil
(ROM) o se deben asignar los valores iniciales en el programa antes de activar las
interrupciones.
Vectores de interrupción proporcionados por el dispositivo que interrumpe.
Otro enfoque es que el dispositivo que interrumpe proporcione, total o
parcialmente, el vector de interrupciones. Este enfoque es más flexible que el que
se describió antes, ya que permite que varias fuentes de interrupción utilicen la
misma entrada de interrupción a la CPU pero, a la vez, especifiquen distintas
rutinas de servicio. Por otra parte, esto implica más complejidad en la lógica del
dispositivo interruptor y en la CPU. Si el dispositivo va a proporcionar un vector de
interrupción, normalmente a través del canal de datos, se le debe indicar cuándo
hacerlo; esto se realiza proporcionando en el canal de control una salida,
proveniente de la CPU, de confirmación de interrupción, la cual se conecta a
cualquier fuente de interrupción posible. Al recibir esta señal, el dispositivo
interruptor puede enviar su vector de interrupción por el canal de datos, lo que
implica que el dispositivo cuente con lógica adicional para llevar a cabo esta tarea.
Otros vectores
Los mecanismos de vectorización se requieren para algunas otras
funciones en las computadoras, además de usarlos para proporcionar la dirección
inicial de una subrutina de servicio de interrupción. Estas funciones aumentan la
flexibilidad del dispositivo y las aplicaciones que éste puede direccionar. Algunos
de los recursos adicionales más simples que utilizan la vectorización son:
a) Restablecimiento: cuando se enciende la computadora, los registros de la
CPU, y sobre todo el contador de programa, contendrán valores
arbitrarios, Por ello se requiere un mecanismo para asignar valores
iniciales al contador de programa de modo que la ejecución comience a
partir de la primera instrucción del programa. Un método consiste en
limpiar el contador de programa y asegurar que todos los programas
comiencen en la dirección 0. Otro mecanismo, más flexible, es permitir
que
la
ejecución
del
programa
inicie
en
cualquier
dirección,
proporcionando un vector de restablecimiento que se carga en el contador
de programa al recibir una transición en la línea de restablecimiento de la
CPU. Este mecanismo es casi idéntico a una solicitud de interrupción,
excepto que se inicia a través de la entrada de restablecimiento del
microprocesador en lugar de la entrada de solicitud de interrupción. Los
vectores de restablecimiento se deben implantar en memoria no volátil, ya
que no les puede asignar valores iniciales como parte del programa.
Ninguno de los registros se almacena al ejecutar un restablecimiento,
pues éstos contendrán valores arbitrarios al aplicar energía al sistema por
primera vez. Mediante un restablecimiento se inhiben automáticamente las
demás entradas de solicitud de interrupción en caso de que tengan que
establecerse los vectores de interrupción durante las rutinas de asignación
inicial del programa.
b) Interrupción no enmascarable: Esta interrupción opera exactamente igual
que la entrada normal de solicitud de interrupción, pero no puede inhibirse
una vez que se ha habilitado.
c) Interrupciones de software y trampas: Ambos términos se usan para
describir una instrucción de programa de una sola palabra, que equivale a
una llamada a subrutina. Al usar el mecanismo de vector no hay que
especificar la dirección de llamada en la instrucción. Una aplicación de
este tipo de instrucción radica en la implantación de un mecanismo para
que los programas de usuarios tengan acceso a los recursos de hardware,
por ejemplo, dispositivos de E/S como monitores, impresoras y discos.
Establecimiento de prioridades de interrupciones
Cuando puede haber más de una fuente de interrupción es necesario
asignar algún tipo de prioridad de interrupciones para definir la importancia relativa
de las fuentes. Es común que el restablecimiento tenga la prioridad más alta,
seguido por las interrupciones externas. Si ocurren varias interrupciones externas,
las interrupciones de mayor nivel (IRQ0 en la familia x86) tienen la mayor
prioridad. El mecanismo de confirmación de interrupción también permite que el
hardware externo defina las prioridades relativas de las diversas fuentes de
interrupción. Para esto suele usarse una técnica conocida como encadenamiento
de prioridad (daisy-chaining), donde las solicitudes de interrupción se transfieren
por una cadena de un dispositivo a otro y la confirmación de interrupción se
transfiere de regreso, en la dirección opuesta. En este caso, el dispositivo más
cercano a la CPU tiene la mayor prioridad y puede inhibir las interrupciones que
provengan
de
cualquier
dispositivo
con
menor
prioridad,
simplemente
absteniéndose de transmitir a la CPU las solicitudes de interrupción que
provengan de estos dispositivos. Así mismo, cualquier dispositivo situado más
adelante en la cadena puede inhibir los dispositivos con menor prioridad, pero no
aquellos que tengan prioridad más alta.
Por último, si se efectúa un OR lógico de varios dispositivos a la misma
entrada de interrupción del procesador (con lo cual la vectorización de todos es a
la misma dirección inicial de rutina de servicio de interrupción) entonces la
definición de prioridades se puede llevar a cabo mediante software; la rutina de
servicio de interrupción prueba en secuencia cada uno de los dispositivos que
pudo generar la interrupción, comenzando con el de prioridad más alta, hasta
descubrir la fuente de la interrupción. Esta técnica se cococe como sondeo de
interrupciones.
Transferencia autónoma (DMA. Direct Memory Access)
En la gran mayoría de las aplicaciones, la prueba y transferencia por
interrupciones constituyen una forma satisfactoria de comunicación entre la
computadora y el mundo exterior. Sin embargo, cuando se requieren tasas de
transferencia más rápidas, los datos deben transferirse directamente entre el
dispositivo periférico y la memoria, a fin de evitar el tiempo de procesamiento
adicional que implica la búsqueda y ejecución de un ciclo de instrucciones para la
transferencia de cada palabra de datos.
Por tanto, en la transferencia autónoma los canales de la computadora se
usan para transferir datos entre el periférico y la memoria, pero la transferencia la
controla un controlador de entrada/salida de propósito especial conocido como
controlador de acceso directo a memoria (DMA). El controlador DMA reemplaza a
la CPU como dispositivo de control de transferencia de datos entre la computadora
y sus interfaces y, durante esta transferencia, la UCP entra en tercer estado para
que el controlador DMA pueda controlar en su lugar los canales de la
computadora.
En la figura 28 se muestra la estructura general de un controlador DMA y
se indica como se establece la interfaz con el dispositivo externo y los canales de
datos, direcciones y control de la computadora. El controlador contiene varios
registros internos de control y estado configurados como direcciones en el espacio
de memoria de la computadora. Así, las instrucciones de un programa normal
pueden tener acceso a estos registros, los cuales permiten definir las
características de las transferencias de datos. Por ejemplo, se puede especificar el
número de palabras de datos que se transferirán y su fuente y destino. Además,
estos registros especifican el modo de transferencia y el estado actual del
controlador DMA, por ejemplo, si está activo o inactivo en un instante determinado.
registros
DMA REQ
Dispositivo
Externo
DMA ACK
DMA R/W
Controlador
Canal de control
DMA
Canal de direcciones
Canal de datos
Fig. 28. Controlador de acceso directo a memoria.
Una vez iniciada, la transferencia se lleva a cabo deteniendo
periódicamente la ejecución del programa normal durante un ciclo de reloj para
que se pueda transferir una palabra de datos entre el dispositivo de la interfaz y
una dirección de memoria especificada por el controlador DMA. La velocidad de la
interfaz generalmente limita la tasa de transferencia; si puede operar con la
velocidad suficiente, es posible que la CPU se detenga por completo hasta
concluir la transferencia. Puesto que el mecanismo de transferencia de datos
implica el uso de algunos ciclos de reloj que de otra manera se usarían para
ejecutar instrucciones de programa, tal mecanismo se conoce como robo de
ciclos.
En vista de que la transferencia autónoma requiere bastante hardware
adicional, en comparación con los mecanismos que se describieron antes, pocas
veces se considera su uso a menos que sea inevitable por requerirse una tasa de
transferencia de datos muy alta, por ejemplo la comunicación con discos duros
pueden transferir datos a velocidades mayores de 1 Megabyte por segundo.
3.5. Arquitecturas de canal
Un bus o canal es una vía a través de la cual los datos pueden viajar
dentro de la computadora. Esta ruta es usada para comunicación y puede ser
establecida entre dos o más elementos de la computadora. Como ya se comentó
en el capítulo II, en una computadora existen básicamente tres tipos de canales, el
de datos, el de dirección y el de control. Sin embargo, dado que estos canales
conectan diferentes tipos de elementos dentro de la CPU, se puede hacer otra
clasificación de canales dependiendo que elementos estén conectando, así, una
computadora puede incluye los siguientes tipos de buses:
-
Bus del procesador
-
Bus de Memoria
-
Bus de E/S (Bus de Slots o ranuras de expansión)
Bus de Procesador
El bus de procesador es la vía de comunicación entre la CPU y los chips
de soporte inmediato. Estos chips de soporte son usualmente llamados chipset en
los sistemas modernos. Este bus es usado, por ejemplo, para transferir datos
entre la CPU y el bus principal del sistema (bus de E/S), o entre la CPU y una
memoria caché externa (ver fig. 29).
CPU
Bus de Procesador
Caché
Externa
Bus Principal del Sistema
Fig. 29. El bus del procesador.
Puesto que el propósito del bus del procesador es intercambiar
información hacia y desde la CPU a la velocidad más rápida posible, este bus
opera a una velocidad mucho mayor que cualquier otro bus en el sistema; no
existe cuello de botella aquí. El bus consiste de circuitos eléctricos para datos,
para direcciones y para propósitos de control.
El bus de procesador opera a la misma velocidad del reloj base con que
trabaja externamente la CPU. Cabe aclarar que las CPU actuales trabajan
internamente a una velocidad más alta de lo que lo hacen externamente. En la
mayoría de los sistemas, la velocidad del microprocesador es algún múltiplo (1.5x,
2x, 2.5x, 3x, etc.) de la velocidad del bus de procesador.
Para determinar la velocidad de transferencia del bus del procesador, se
debe multiplicar el ancho del bus de datos por la velocidad del reloj del bus del
procesador. Por ejemplo, si el ancho de palabra (bus de datos) es de 64 bits y la
velocidad de reloj de bus es de 66 MHz, y se puede transferir un bit de datos en
cada ciclo de reloj en cada línea, entonces se tendría una velocidad de
transferencia de 528 MBps (Megabytes por segundo), que se obtiene de la
operación (66 MHz)(64 bits) / 8.
Esta velocidad de transferencia, regularmente llamada ancho de banda del
bus, es la transferencia máxima que puede alcanzar el bus, pero no representa el
ancho de banda de operación normal; se debe esperar mucho menos en
promedio, debido al diseño del chipset y diseño de memoria entre otros factores.
El bus de memoria
El bus de memoria es usado para transferir información entre la CPU y la
memoria principal (RAM/ROM). Este bus es bien parte del bus del procesador o en
la mayoría de los casos se implementa separadamente mediante un chipset
dedicado que es responsable de la transferencia de información entre el bus del
procesador y el bus de memoria.
Esta última opción se implementa sobre todo en los sistemas que tiene un
bus de memoria más lento que el bus de procesador. Este chipset es, típicamente,
el mismo chipset responsable de administrar el bus de E/S (ver fig. 30).
La información que viaja a través del bus de memoria es transferida a una
velocidad mucho más lenta que la velocidad del bus de procesador.
CPU
Bus de Procesador
Caché
Externa
Chips
Controladores de
bus (Chipset)
Bus Principal del Sistema
Bus de Memoria
Bus Principal del Sistema
RAM
Fig. 30. El bus de memoria.
Bus de E/S
El bus de E/S, que es llamado también bus de ranura de expansión, es el
bus principal del sistema y por el cual fluye la mayoría de los datos. Cualquier
cosa que vaya hacia o desde un dispositivo viaja a través de este bus.
Los Slots o ranuras de Expansión son aquellos que habilitan a la CPU
para comunicarse con los dispositivos periféricos. El bus y sus ranuras de
expansión asociadas son necesarias porque el sistema básico muy posiblemente
no puede satisfacer todas las necesidades de toda la gente. Los componentes
más básicos, tal como la tarjeta de video y la tarjeta de sonido, pueden ser
conectados mediante las ranuras de expansión.
En la mayoría de las computadoras modernas, una variedad de
dispositivos periféricos básicos son construidos dentro de la tarjeta madre, por
ejemplo, los controladores de disco, los puertos seriales y paralelos, que están
contenidos en un único chip llamado super chip de E/S. Muchos añaden aún más
dispositivos tales como puerto de mouse, adaptador de video, adaptadores SCSI,
o interfaz de red, también construidos en la tarjeta madre; en tales casos, es
probable que no se requiera una ranura de expansión en el bus de E/S, sin
embargo, estos controladores y puertos interconstruidos usan el bus de E/S para
comunicarse con la CPU. En esencia, aún cuando ellos están interconstruidos,
actúan como si fueran tarjetas insertadas
en las ranuras de expansión del
sistema.
Bus Mastering
Los nuevos tipos de bus usan una tecnología llamada bus mastering para
aumentar la velocidad del sistema. Un pocas palabras, un bus maestro es un
adaptador con su propio procesador que ejecuta operaciones independientes de la
CPU. Para trabajar propiamente, la tecnología de bus maestro se basa en una
unidad llamada comúnmente chip de periférico integrado al sistema (ISP.
Integrated system Peripheral). El ISP habilita al bus maestro a tomar
temporalmente el control exclusivo del sistema, como la tarjeta fuera el sistema
entero. Dado que la tarjeta tiene control exclusivo del sistema, puede realizar
operaciones muy rápidamente. El ISP determina cuál dispositivo obtiene el control
usando un orden de cuatro niveles de prioridad:
-
El refrescado del sistema de memoria
-
Transferencias DMA
-
La CPU misma
-
Bus Maestro
Un adaptador con bus maestro notifica al ISP cuando quiere control del
sistema. En el menor tiempo posible (después de que las prioridades más altas
han sido satisfechas), el ISP pasa el control a la tarjeta de bus maestro. La tarjeta
por su parte, tiene circuitería interconstruida para cuidar de no tomar el sistema
por periodos de tiempo que podrían interferir con operaciones de prioridad más
alta, tal como el refrescado de memoria.
Tipo de buses de E/S
Desde que se introdujo la primera PC, se han desarrollado muchos buses
de E/S. La razón es muy simple: la necesidad de mayores velocidades de E/S
para un mejor rendimiento de los sistemas. Esta necesidad envuelve tres áreas
principales:
-
CPUs más rápidas
-
Incremento de la demanda del software
-
Mayores requerimientos multimedia
Cada una de estas áreas requiere que el bus de E/S sea lo más rápido
posible. Los principales canales de E/S desarrollados hasta ahora son:
-
ISA
-
MCA
-
EISA
-
VL-Bus
-
PCI
-
PCMCIA
-
FireWire (IEEE-1394)
-
USB
Las diferencias entre estos buses consiste principalmente en la cantidad
de datos que pueden transferir en un tiempo dado y la velocidad a la que pueden
hacerlo. Cada arquitectura de canal es implementada mediante un chipset que es
conectado al bus del procesador. Típicamente, este chipset también controla el
bus de memoria. En las siguientes secciones se describen los diferentes tipos de
canales.
ISA
Abreviatura de Industry Standard Architecture (Arquitectura estándar de la
industria). Diseño del bus de 16 bits utilizado por primera vez en las computadoras
PC/AT de IBM (IBM PC/AT). La Arquitectura estándar extendida de la industria
(EISA) es una extensión de 32 bits que fue hecha a este estándar de bus en 1984.
La arquitectura estándar de la industria o ISA tiene una velocidad de bus
de 8 MHz, y una velocidad de procesamiento de datos (throughput) máximo de 8
megabytes por segundo.
MCA
El MICROCANAL (MCA. Micro Channel Arquitecture), es completamente
incompatible con el anterior bus ISA. En abril de 1987, IBM anunció que sus
ordenadores PS/2 a partir del modelo 50 vendrían implementados con un nuevo
bus de expansión llamado MICROCANAL (MCA).
Lás principales características de este nuevo bus eran que admite tarjetas
de expansión de 32 bits, trabaja a 10 MHz, incluye una técnica llamada POS
(selección de opción programable) para facilitar la correcta configuración y permite
compartir el bus hasta por 8 microprocesadores y 8 dispositivos.
El diseño MCA permitía una ruta de datos de 32 bits, y una velocidad' de
reloj ligeramente más elevada de 10 Mhz, con una velocidad de transferencia
máxima de 20 Mbps frente a los 8 Mbps del bus de ISA.
A pesar de todo lo anterior, MCA no tuvo una introducción en el mercado
tan fuerte como se hubiese esperado de cualquier producto nuevo de IBM. Influyó
el hecho de que IBM intentase cobrar a los fabricantes de tarjetas de este tipo el
5% de su precio bruto.
Además esta arquitectura de IBM es totalmente incompatible con las
tarjetas de expansión de bus ISA. Esto viene derivado de que los conectores de la
tarjeta de expansión MCA eran más pequeños que las de los canales ISA. Las
señales del bus estaban reorganizadas de forma que se introducía una señal de
tierra cada 4 conectores. De esta forma se ayudaba a reducir las interferencias.
EISA
Acrónimo de Extended Industry Standard Architecture, es un tipo de bus
desarrollado en 1988 por un consorcio de nueve compañías de computadoras. Es
una evolución del bus ISA, con características más avanzadas, aunque mantiene
la compatibilidad con el mismo, ya que una tarjeta ISA se puede conectar al bus
EISA. Es un bus de 32 bits creado como respuesta al bus MCA de IBM.
VESA Local Bus (VL-Bus)
Buses Locales
Un bus local es una conexión de alto rendimiento entre el CPU y tarjetas
de expansión, ya que estas tarjetas de expansión van conectadas directamente al
bus de procesador. Éste fue propuesto en 1991 por Intel dentro de un foro técnico
donde participaron empresas como DEC, Alpha, Apple, etc. En éste se definen
estándares de hardware para hacer más confiables las funciones propias del
circuito.
En la figura 31 se muestra la relación existente entre los dispositivos
periféricos y los canales de una PC con los canales comentados anteriormente.
Como se puede ver, el bus de E/S tiene que permanecer en una velocidad
baja debido a que la base instalada de tarjetas adaptadoras trabajan a velocidades
muy bajas.
CPU
E/S interconstruida
Bus Principal del Sistema
Chips
Controladores
de bus (Chipset)
Bus de Memoria
(Velocidad Baja)
Bus de Procesador
(Velocidad Alta)
Caché
Externa
Bus Principal del Sistema
(Velocidad Baja)
Slots
de
E/S
(Velocidad Alta)
RAM
Fig. 31. Capa de bus en una PC tradicional
Una solución obvia a este problema y que se muestra en la figura 32, es
mover algunas de las ranuras de E/S a un área donde éstas podrían accesarse a
la velocidad del bus de procesador. Precisamente por esta razón, a esta técnica
se le llama bus local. Esta solución no reemplaza los estándares anteriores, sino
que son más bien una extensión de los mismos.
VESA
(Video
Electronics
Standars
Association)
desarrolló
una
especificación estandarizada de bus local conocido como VESA Local Bus o
simplemente VL-Bus. El VL-Bus puede mover datos de 32 bits en una sola
transferencia, permitiendo el flujo de datos entre la CPU y un subsistema de video
compatible o un disco duro. VL-Bus vino a remover los grandes cuellos de botella
que existían en las primeras configuraciones de bus.
CPU
(Velocidad Alta)
E/S interconstruida
Bus Principal del Sistema
Chips
Controladores
de bus (Chipset)
Bus de Memoria
(Velocidad Baja)
Caché
Externa
Bus de Procesador
Ranuras
de E/S
Bus Principal del Sistema
Slots
de
E/S
(Velocidad Baja)
(Velocidad Alta)
RAM
Fig.32. Como trabaja un bus local.
Aún con los beneficios del bus local, VL-Bus tuvo serios problemas que
ocasionaron que no permaneciera por mucho tiempo en el mercado. Algunos de
ellos fueron:
- Dependencia de la CPU 486
- Limitaciones de velocidad.- En la práctica, la mitad (33 MHz) de lo que
teóricamente alcanza: 66 MHz.
- Limitaciones eléctricas
- Limitaciones de tarjetas. De tres tarjetas que indica la especificación,
comúnmente se utiliza solamente 1, para alcanzar la velocidad de 50
MHz.
PCI
Abreviatura de Peripheral Component Interconnect (Interconexión de
componentes periféricos). Es una especificación introducida por Intel que define
un bus local, el cual permite que hasta diez tarjetas de expansión estén
conectadas a la computadora. Una de estas diez tarjetas tiene que ser la tarjeta
controladora PCI (PCI controller card), pero las demás puede que sean una tarjeta
de video, una tarjeta de interfaz de red, una interfaz SCSI, o cualesquiera otra
función básica de entrada/salida.
El controlador PCI intercambia la información con el procesador de la
computadora en grupos de 32 ó 64 bits y, utilizando técnicas de bus maestro,
permite
a
los
adaptadores
inteligentes
PCI
realizar
ciertas
tareas
concurrentemente con el procesador principal.
La Interconexión de componentes periféricos o PCI puede operar a una
velocidad de bus de 32 MHz, y manejar una velocidad de procesamiento máximo
de 132 megabytes por segundo con una vía de acceso a los datos de 32 bits, o
una velocidad de 264 megabytes por segundo con una vía de acceso a los datos
de 64 bits.
Una ventaja del PCI es que puede soportar cualquier sistema ya sea ISA,
EISA o MCA esto a causa de que el PCI está diseñado para complementar y no
ser un reemplazo del bus en alguno de los sistemas.
El PCI define tres tipos de espacio direccionable: memoria, E/S y
configuración. El espacio de configuración es de 256 bytes en cada dispositivo,
éste contiene información acerca del mismo incluyendo tipo de código, cuándo es
un dispositivo de almacenamiento, de red o de despliegue o cualquier otro
hardware. En suma el PCI puede ser configurado vía software.
Compatibilidad del PCI
El PCI es diseñado para ser utilizado en multiprocesamiento, y ambiciona
el uso de periféricos de alto desempeño para multimedia y otras aplicaciones de
intenso manejo de datos. El PCI da soporte a Bus Mastering, contiene su propio
lenguaje (código de 4 bits) y soporta cachés secundarios directamente.
Considerando que cada nuevo procesador que aparece requiere que se
rediseñen los chips y tarjetas principales completamente, PCI mantiene la
promesa de un estándar común que es independiente de la familia de procesador
con el que trabaje.
De esta manera PCI crea un estándar abierto y disponible para que los
fabricantes puedan desarrollar una variedad de circuitos con funciones
especializadas, incluyendo no sólo controladores de video para multimedia,
controladores SCSI y tarjetas de red, esto puede también resultar en un diseño
estandarizado, que puede hacer que los fabricantes de PC's hagan más funciones
estándar en sus sistemas, ahorrando mucho del costo de adquirir tarjetas de
expansión.
PCMCIA
Abreviatura de Personal Computer Memory Card International Association
(Asociación Internacional de Tarjetas de Memoria para Computadora Personal).
Asociación sin fines de lucro, formada en 1989, con participación de más de 320
miembros de la industria de la computación y de la industria electrónica, la cual ha
desarrollado una norma para conectar adaptadores del tamaño de una tarjeta de
crédito, diseñados para las computadoras portátiles.
Una tarjeta de adaptador PCMCIA, o tarjeta PC, utiliza un conector de 68
patillas para la conducción electrónica y puesta a tierra.
Varias versiones de la norma han sido aprobadas por la PCMCIA:
Tipo I: La tarjeta de PC (PC Card) más delgada, de sólo 3,3 milímetros de
espesor (0,13 de una pulgada), utilizada para mejorar la memoria,
incluyendo la RAM dinámica, la RAM estática y la memoria de sólo
lectura borrable y programable eléctricamente.
Tipo II: Tarjeta utilizada para los módems o para los adaptadores de LAN, de 5
milímetros de espesor (0,2 de una pulgada); también puede contener una
tarjeta Tipo I.
Tipo III: Tarjeta de 10,5 milímetros de espesor (0,4 de una pulgada), utilizada para
los mini discos duros y otros dispositivos que necesitan un espacio
mayor, incluyendo las redes de área local inalámbricas; también puede
contener dos tarjetas Tipo I o Tipo II.
En teoría, si hay espacio suficiente, cada adaptador PCMCIA puede
soportar hasta 16 conectores lógicos para PC cards, y se pueden instalar hasta
255 adaptadores en una computadora personal que se rige por la Norma PCMCIA;
en otras palabras, la PCMCIA permite incluir hasta 4.080 tarjetas de PC en una
misma computadora.
La mayoría de los dispositivos PCMCIA son adaptadores de módems, de
Ethernet y de la red Token Ring, tarjetas de RAM dinámica y tarjetas de memoria
flash, aún cuando también están disponibles adaptadores para mini discos duros,
redes de área local inalámbricas y SCSI.
FireWire (IEEE-1394)
FireWire es una tecnología de bus relativamente nueva; es el resultado de
la demanda de grandes movimientos de datos de los dispositivos de audio y video
de hoy día. La especificación IEEE-1394 fue publicada en 1995, y actualmente
existe con tres diferentes tasas de señalización: 100 MBps, 200 MBps y 400
MBps. La mayoría de los adaptadores soportan la tasa de 200 MBps, Pueden ser
conectados un máximo de 63 dispositivos en una única tarjeta IEEE-1394
mediante daisy chaining (encadenamiento). Los cables de estos dispositivos usan
los conectores derivados de GameBoy y consiste de seis conductores; 4 para
transmisión de datos y 2 para corriente. La conexión con la tarjeta madre es
implementada vía una interfaz dedicada o por mediante una tarjeta PCI.
Hasta hace poco, los dispositivos estaban limitados a videograbadoras y
VCRs con capacidad de video digital. Aplicaciones futuras podrían incluir
dispositivos de conferencia de video digital, transmisiones de datos de audio y
video vía satélite, sintetizadores de audio, DVD y otros controladores de disco de
alta velocidad.
Bus Serial Universal (USB. Universal Serial Bus)
Esta también es una nueva y prometedora tecnología que esta
rápidamente ganando popularidad entre los fabricantes finales. Esencialmente,
USB es un cable que permite la conexión de hasta 127 dispositivos a través de
encadenamiento. Aunque no es tan rápido como el FireWire, con sus 12 MBps es
más que suficiente para la mayoría de los dispositivos. La especificación USB fue
publicada en 1996 por un consorcio de representantes de Compaq, IBM, Intel,
Microsoft, NEC y Northern Telecom.
Otro beneficio de USB es que identifica automáticamente los periféricos,
una característica que facilita la instalación. Esta característica es completamente
compatible con sistemas PnP y provee un estándar para una conectividad futura.
También, los dispositivos USB pueden ser conectados o desconectados “en
caliente”, lo cual significa que no se tiene que apagar la computadora cada vez
que se quiera conectar o desconectar un dispositivo. Algo que hay que tener en
cuenta es que el sistema operativo debe tener soporte para USB.
3.6. Interfaces de Discos.
La interfaz es la conexión entre el mecanismo de la unidad de disco y el
bus de sistema. La interfaz define la forma en que las señales pasan entre el bus
del sistema y el disco. En el caso del disco, su interfaz se denomina controlador o
tarjeta controladora, y se encarga no sólo de transmitir y transformar la
información que parte de y llega al disco, sino también de seleccionar la unidad a
la que se quiere acceder, del formato, y de todas las órdenes de bajo nivel en
general. La controladora a veces se encuentra dentro de la tarjeta madre. Los
diferentes tipos interfaz limitan que tan rápido pueden ser movidos los datos desde
el disco al sistema y ofrecen diferentes niveles de rendimiento.
Un parámetro que nos permite identificar el rendimiento de un disco es el
tiempo de acceso, el cual considera: el tiempo de búsqueda, que es el tiempo que
tardan las cabezas en la pista correcta, el tiempo de estabilización, que es el lapso
que tardan las cabezas en bajar y estabilizarse en la pista correcta y el tiempo de
latencia, que es el tiempo necesario para que el sector correcto pase bajo la
cabeza. El tiempo de acceso suele medirse en milisegundos (ms).
Sin embargo, la tasa de transferencia de datos entre el disco y el sistema
es más importante que el tiempo de acceso, porque la mayoría de los drives
consumen más tiempo leyendo y escribiendo información que lo que tardan en
simplemente mover las cabezas a un lugar. La velocidad a la que un programa o
archivo de datos es cargado o leído es afectado en gran medida por la tasa de
transferencia de datos. La velocidad de transferencia de datos depende tanto del
drive como de la interfaz.
Las interfaces que han sido usadas en sistemas de PC son: el ST506/412, ESDI, IDE, EIDE, ATAPI y SCSI. Tanto SCSI como IDE son interfaces de
nivel de sistema que usualmente incorporan una variación del chipset base de una
de las otras interfaces a las cuales se les clasifica como interfaces de dispositivo.
A continuación se describen brevemente cada una de ellas.
ST 506
Estándar que regula la interfaz desarrollada por Seagate Technology,
predominante hasta hace unos años en pequeños sistemas (5.25 pulgadas), pero
poco usado en la actualidad por los nuevos productos.
Es un interfaz a nivel de dispositivo; el primer interface utilizado en los
PC’s. Proporciona un valor máximo de transferencia de datos de menos de 1
Mbyte por segundo (625k por segundo con codificación MFM, y 984k por segundo
con codificación RLL). Actualmente esta desfasado y ya no hay modelos de disco
duro con este tipo de interfaz.
ESDI (Enhanced Small Disk Interface)
Estándar que regula una interfaz para discos de 5'25 y 3'5 pulgadas de
alta capacidad con el que se pueden alcanzar tasas de transferencia de hasta 10
MB/s, y que supone una actualización del antiguo ST-506.
Establecido como un estándar en 1983 por Maxtor como un controlador de
alto rendimiento estándar para substituir el ST-506/412. Sus cables y conectores
son similares a los del ST-506/412. Es una interfaz a nivel de dispositivo diseñado
como un sucesor del ST-506 pero con un valor más alto de transferencia de datos
(entre 1,25 y 2.5 Mbytes por segundo). Ya ha dejado de utilizarse esta interfaz y
es difícil de encontrar.
IDE (Integrated Drive Electronics)
Es una interfaz a nivel de sistema que cumple la norma ANSI de
acoplamiento a las computadoras AT y que usa una variación sobre el bus de
expansión del AT (por eso también llamados discos tipo AT) para conectar una
unidad de disco a la CPU, con un valor máximo de transferencia de 4 Mbytes por
segundo. En principio, IDE era un término genérico para cualquier interfaz a nivel
de sistema. La especificación inicial de este interfaz está mal definida. Es más
rápida que los antiguos interfaces ST506 y ESDI pero con la desaparición de los
ATs esta interfaz desaparecerá para dejar paso al SCSI.
Íntimamente relacionado con el IDE, tenemos lo que se conoce como
ATA, concepto que define un conjunto de normas que deben cumplir los
dispositivos. Años atrás la compañía Western Digital introdujo el standard E-IDE
(Enhanced IDE), que mejoraba la tecnología superando el límite de acceso a
particiones mayores de 528 Mb. También se definió ATAPI, que son normas para
la implementación de lectores de CD-ROM y unidades de cinta con interfaz IDE.
EIDE (interfaz Enhanced Integrated Drive Electronics)
La norma IDE fue desarrollada por Western Digital y Compaq Computers
a partir de una interfaz de disco del AT original que IBM creó en 1984. Desde
entonces se convirtió en la interfaz más utilizado en el entorno PC. A pesar de
esto IDE presenta unas limitaciones debido a su dependencia del BIOS y al diseño
del que parte. Hace poco las limitaciones en el tamaño de los HD y la velocidad de
transferencia no daban problemas, pero como se han mejorado los procesadores
y han salido programas más complejos, ya se notan. Se hizo entonces un
mejoramiento de las normas IDE y surgió Enhanced IDE.
Ventajas de EIDE:
•
Máximo cuatro dispositivos conectados
•
Soporta CD-ROM y cinta
•
Transparencia de hasta 16.6 MBps
•
Velocidades en ATA-2
•
11.1 MBps con PIO Modo3
•
13.3 MBps con DMA Modo1
•
16.6 MBps con PIO Modo4
SCSI (Small Computer System Interface)
Es una interfaz a nivel de sistema, diseñado para aplicaciones de
propósito general, que permite que se conecten hasta siete dispositivos a un único
controlador. Usa una conexión paralela de 8 bits que consigue un valor máximo de
transferencia de 5 Mbytes por segundo. Actualmente se puede oír hablar también
de SCSI-2 que no es más que una versión actualizada y mejorada de esta interfaz.
Las mejoras del SCSI-2 sobre el SCSI tradicional son el aumento de la
velocidad a través del bus, desde 5 Mhz a 10 Mhz, duplicando de esta forma el
caudal de datos. Además se aumenta el ancho del bus de 8 a 16 bits, doblando
también el flujo de datos. Actualmente se ha logrado el ancho de 32 bits,
consiguiendo velocidades teóricas de hasta 40 Mbytes / seg.
Sus tres versiones, hasta la fecha, son:
SCSI-1. Sus principales características son las de soportar hasta 7 dispositivos de
8 bits conectados al mismo bus, una velocidad de transferencia de 5
MBps y capacidades de comunicación asincrónica y sincrónica.
SCSI-2. Basándose en la anterior versión, en 1992 se desarrolla esta nueva
versión. Además de las características descritas, soporta una mayor
velocidad de transferencia de datos (10 MBps), unidades de 16 y 32 bits
y un control de paridad para evitar errores en las transmisiones de
información.
SCSI-3. Se incluye el soporte para dispositivos que se comunican con canales de
fibra óptica y por puerto serie, además de definir las especificaciones
Wide SCSI (20 MBps) y Utra-SCSI (40 MBps). También, permite la
autoconfiguración de los dispositivos conectados a él.
ATAPI (Ata Packet Interface)
Interfaz de paquete ATA. Es una extensión del protocolo ATA para
conseguir una serie de comandos y registros que controlen el funcionamiento de
un CD-ROM, es fácilmente adaptable para una cinta de Backup.
IV
LA PLATAFORMA DE IBM
4.1. Introducción
Desde su aparición a principios de los 80’s, la PC de IBM ha tenido un
desarrollo extraordinariamente grande, debido principalmente a la política de
arquitectura abierta (a diferencia de la política de Apple) que utilizó IBM para
comercializar su producto. Esta política ocasionó que muchas personas decidieran
entrar a la competencia de la fabricación de PCs, iniciando entonces la gran
industria de la computadoras personales. No hay que dejar de lado tampoco el
sistema operativo principal que ha acompañado a estas PCs, que aún sin llegar a
ser 100% confiable y seguro, ha venido acompañado de una buena política de
comercialización y se ha apoderado del mercado del software, a él le debemos
también la expansión de las PC.
En la actualidad se han ido generando nuevas opciones tanto en hardware
como en software, debido principalmente a la necesidad de los usuarios de buscar
más y mejores rendimientos para sus aplicaciones sobre todo en lo que a
multimedia se refiere, y como ya se han visto desventajas en las PC de IBM y
compatibles, y por supuesto en su “leal“ sistema operativo y sus aplicaciones. Esto
ha dado como resultado la oportunidad a otros fabricantes de dar a conocer sus
productos, tal es el caso de las computadoras de Apple o las de SUN
MicroSystem, y en lo que respecta a los sistemas operativos, el ya conocido Linux.
En este capítulo se dará una breve descripción de las características más
relevante de las PC de IBM y/o compatibles. 4
4.2. La placa base
La placa base, o tarjeta madre (motherboard), es el elemento principal de
todo ordenador, en el que se encuentran o al que se conectan todos los demás
aparatos y dispositivos.
Físicamente, se trata de una "oblea" de material sintético, sobre la cual
existe un circuito electrónico que conecta diversos elementos que se encuentran
anclados sobre ella; los principales son: el microprocesador, colocado en un
elemento llamado zócalo; la memoria, generalmente en forma de módulos; los
slots de expansión donde se conectan las tarjetas; diversos chips de control, entre
ellos el BIOS. Una placa base moderna y típica ofrece un aspecto similar al de la
siguiente figura:
Fig. 33. Tarjeta Madre de IBM PC o Compatibles. Tomado de [8]
4
El presente capítulo es una compilación de [19], [20], [21], [22] y [23]
Factores de forma y estándares
Las placas base existen en diferentes formas y con diversos conectores
para periféricos. Para abaratar costos permitiendo el intercambio entre placas
base, los fabricantes han ido definiendo varios estándares que agrupan
recomendaciones sobre su tamaño y la disposición de los elementos sobre ellas.
De cualquier forma, el hecho de que una placa pertenezca a una u otra
categoría no tiene nada que ver, al menos en teoría, con sus prestaciones ni
calidad. Los tipos más comunes son:
Baby-AT
Ha sido el estándar absoluto durante años. Define una placa de unos
220x330 mm, con unas posiciones determinadas para el conector del teclado, los
slots de expansión y los agujeros de anclaje a la caja, así como un conector
eléctrico dividido en dos piezas.
Estas placas son las típicas de los ordenadores "clónicos" desde el 286
hasta los primeros Pentium. Con el auge de los periféricos (tarjeta sonido, CDROM, discos extraíbles...) salieron a la luz sus principales carencias: mala
circulación del aire en las cajas (uno de los motivos de la aparición de disipadores
y ventiladores de chip) y, sobre todo, una maraña enorme de cables que impide
acceder a la placa sin desmontar al menos alguno.
LPX
Estas placas son de tamaño similar a las anteriores, aunque con la
peculiaridad de que los slots para las tarjetas de expansión no se encuentran
sobre la placa base, sino en un conector especial en el que están insertadas, la
riser card.
De esta forma, una vez montadas, las tarjetas quedan paralelas a la placa
base, en vez de perpendiculares como en las Baby-AT; es un diseño típico de
ordenadores de sobremesa con caja estrecha (menos de 15 cm de alto), y su
único problema viene de que la riser card no suele tener más de dos o tres slots,
contra cinco en una Baby-AT típica.
ATX
Este tipo de placa base es cada vez más común. Se las supone de más
fácil ventilación y menos maraña de cables, debido a la colocación de los
conectores. Para ello, el microprocesador suele colocarse cerca del ventilador de
la fuente de alimentación y los conectores para discos cerca de los extremos de la
placa.
La diferencia con las Baby-AT se encuentra en sus conectores, que suelen
ser más (por ejemplo, con USB o FireWire), están agrupados y tienen el teclado y
ratón en clavijas mini-DIN. Además, reciben la electricidad por un conector de
distinta forma y en una sola pieza.
Diseños propietarios
Pese a la existencia de estos estándares, los grandes fabricantes de
ordenadores (IBM, Compaq, Hewlett-Packard, etc) suelen sacar al mercado placas
de tamaños y formas peculiares.
4.3. Elementos principales de la placa base
Los elementos principales de la placa base son:
-
Zócalo del microprocesador
-
Ranuras de memoria (DIMM, RIMM, etc.)
-
Chipset de control
-
BIOS
-
Slots de expansión (ISA, PCI...)
-
Memoria caché
-
Conectores internos (EIDE, audio, etc.)
-
Conectores externos (puertos serie, paralelo, etc.)
-
Conector eléctrico
-
Pila
Zócalo del microprocesador
Es el lugar donde se inserta el "cerebro" del ordenador. Durante más de
10 años ha consistido en un rectángulo o cuadrado donde el "micro", una pastilla
de plástico negro con patillas, se introducía con mayor o menor facilidad; con la
aparición de los Pentium II se ha cambiado un poco este panorama.
Tipos de zócalos
PGA
Son el modelo clásico, usado en el 386 y el 486; consiste en un cuadrado
de conectadores en forma de agujero donde se insertan las patillas del chip por
pura presión. Según el chip, tiene más o menos contactos.
ZIF
Zero Insertion Force (socket), es decir, zócalo de fuerza de inserción nula.
Eléctricamente es como un PGA, aunque gracias a un sistema mecánico permite
introducir el micro sin necesidad de fuerza alguna, con lo que el peligro de
romperle una patilla al chip desaparece. Apareció en la época del 486 y sus
distintas versiones (sockets 3, 5 y 7, principalmente) se utilizaron hasta que
apareció el Pentium II.
Actualmente se fabrican dos tipos de zócalos ZIF:
Socket 7 "Super 7"
Variante del Socket 7 que se caracteriza por poder usar velocidades de
bus de hasta 100 MHz, es el que utilizan los micros AMD K6-2.
Socket 370 o PGA370
Físicamente similar al anterior, pero incompatible con él por utilizar un bus
distinto, es el que incorporan los micros Intel Celeron Mendoccino de última
generación.
Slot 1
Es un desarrollo de Intel para conectar los Pentium II. En vez de un
rectángulo con orificios para las patillas del chip, es un slot, una especie de
conector alargado (en forma de "peine") como los ISA o PCI.
La siguiente tabla muestra una relación de los sockets utilizados por los
microprocesadores de Intel.
# de
Lineas de
Pines
Pines
Socket 1
169
3
5V
Cuarta
Socket 2
238
4
5V
Cuarta
Socket 3
237
4
Designación
Voltaje
Generación de
Microprocesadores soportados
Tarjeta
5V /
80486DX, 80486SX,80486DX2, 80486DX4
OverDrive
80486DX, 80486SX,80486DX2, 80486DX4
OverDrive, Pentium OverDrive 63 and 83
Cuarta
80486DX, 80486SX, 80486DX2,
80486DX4, AMD 5x86, Cyrix 5x86,
Pentium OverDrive 63 and 83
3.3V
Socket 4
273
4
5V
Quinta (5V)
Pentium 60-66, Pentium OverDrive 120/133
Socket 5
320
5
3.3V
Quinta
Pentium 75-133 MHz,Pentium OverDrive
125-166,Pentium with MMX OverDrive
125-166
Socket 6
235
4
3.3V
Cuarta
Not used
Socket 7
321
5
Quinta
Pentium 75-200 MHz, Pentium OverDrive,
Pentium with MMX, Pentium with MMX
OverDrive, 6x86, K5, K6, 6x86MX
Sexta
Pentium Pro
Sexta
Pentium II, Pentium Pro (with Socket 8
on daughtercard)
2.53.3V
Socket 8
387
3.1V /
5
3.3V
Slot 1
242
n/a
2.8V /
3.3V
Tabla 3.Tipos de Sockets para micros de Intel
El Microprocesador
El microprocesador, o simplemente el micro, es de tipo CISC, y existen
una gran diversidad de fabricante. Estos suelen tener forma de cuadrado o
rectángulo negro, y van sobre un elemento llamado zócalo (socket en inglés) o
soldados en la placa o, en el caso del Pentium II, metidos dentro de una especie
de cartucho que se conecta a la placa base (aunque el chip en sí está soldado en
el interior de dicho cartucho).
La velocidad de un micro se mide en megahercios (MHz), aunque esto es
sólo una medida de la fuerza bruta del micro; un micro simple y anticuado a 100
MHz puede ser mucho más lento que uno más complejo y moderno (con más
transistores, mejor organizado) que vaya a "sólo" 50 MHz.
Partes de un microprocesador
El encapsulado
Es lo que rodea a la oblea de silicio en sí, para darle consistencia, impedir
su deterioro (por ejemplo por oxidación con el aire) y permitir el enlace con los
conectores externos que lo acoplarán a su zócalo o a la placa base.
La memoria caché
Una memoria ultra rápida que sirve al micro para tener a la mano ciertos
datos que previsiblemente serán utilizados en las siguientes operaciones sin tener
que acudir a la memoria RAM, reduciendo el tiempo de espera. Es lo que se
conoce como caché de primer nivel, dado que está encapsulada junto a él. Todos
los micros tipo Intel desde el 486 tienen esta memoria, también llamada caché
interna.
El coprocesador matemático
La FPU (Floating Point Unit, Unidad de coma Flotante). Parte del micro
especializada en esa clase de cálculos matemáticos; también puede estar en el
exterior del micro, en otro chip.
4.4. Historia de los microprocesadores.
Cuando IBM diseño su primer PC en 1981,
decidió utilizar un micro
denominado 8088, de Intel. Las prestaciones de dicho chip eran: un chip de 8 bits
trabajando a 4,77 MHz, aunque bastante razonables para una época en la que el
chip de moda era el Z80 de Zilog.
El 8088 era una versión de prestaciones reducidas del 8086, que marcó la
terminación "86" para los siguientes chips Intel: el 80186 (que se usó
principalmente para periféricos), el 80286 (16 bits y hasta 20 MHz) y por fin, en
1987, el primer micro de 32 bits, el 80386 o simplemente 386. Al ser de 32 bits
permitía idear software más moderno, con funcionalidades como multitarea real,
es decir, disponer de más de un programa trabajando a la vez.
Los ordenadores con los dos primeros (8086, 8088) eran en ocasiones
conocidos como ordenadores XT, mientras que los que tenían un 286 (80286) se
conocían como AT.
Ninguno era de 32 bits, sino de 8 ó 16, bien en el bus interno o el externo.
Esto significa que los datos iban por caminos (buses) que eran de 8 ó 16 bits, por
dentro del chip o cuando salían al exterior, por ejemplo para ir a la memoria. Este
número reducido de bits limita sus posibilidades en gran medida. Un chip de estas
características tiene como entorno preferente y casi único el DOS, aunque puede
hacerse correr Windows 3.1 sobre un 286 a 16 ó 20 MHz si las aplicaciones que
vamos a utilizar no son nada exigentes.
386, 386 SX
La ventaja de estos chips es que son de 32 bits; o mejor dicho, el 386 es
de 32 bits; el 386 SX es de 32 bits internamente, pero de 16 en el bus externo, lo
que le hace hasta un 25% más lento que el original, conocido como DX. La versión
SX fue sacada al mercado por Intel siguiendo una táctica comercial típica en esta
empresa: dejar adelantos tecnológicos en reserva, manteniendo los precios altos,
mientras se sacan versiones reducidas (las "SX") a precios más bajos.
La cuestión es que ambos pueden usar software de 32 bits, aunque no se
recomienda usar el Windows 95 en un 386. Su ámbito natural es DOS y Windows
3.x, donde pueden manejar aplicaciones bastante profesionales como Microsoft
Word sin demasiados problemas, e incluso navegar por Internet de forma
razonablemente rápida. Si lo que quiere es multitarea y software de 32 bits en un
386, piense en los sistemas operativos OS/2 o Linux.
486, 486 SX, DX, DX2 y DX4
El 486 es el original, y su nombre completo es 80486 DX; consiste en: un
corazón 386 actualizado, depurado y afinado; un coprocesador matemático para
coma flotante integrado; una memoria caché (de 8 Kb en el DX original de Intel).
Es de notar que la puesta a punto del núcleo 386 y sobre todo la memoria caché lo
hacen mucho más rápido, casi el doble, que un 386 a su misma velocidad de reloj.
El 486 SX es un DX sin coprocesador matemático. El 486 DX2 o el "2x1"
es un 486 "completo" que va internamente el doble de rápido que externamente.
Así, un 486 DX2-66 va a 66 MHz en su interior y a 33 MHz en sus comunicaciones
con la placa.
El 486 DX4 es igual que el 486 DX2, pero multiplicando por 3 en vez de
por 2 (DX4-100 significa 33x3=99 aprox. 100).
Pero el mundo PC no es todo el mundo de la informática personal; existen
por ejemplo los Apple o Atari, que desde el principio confiaron en otra empresa
llamada Motorola. Sin embargo, el software de esos ordenadores no es compatible
con el tipo de instrucciones de la familia 80x86 de Intel; esos micros, pese a ser en
ocasiones mejores que los Intel, sencillamente no entienden las órdenes utilizadas
en los micros Intel, por lo que se dice que no son compatibles Intel. Aunque sí hay
chips compatibles Intel de otras empresas, entre las que destacan AMD y Cyrix.
Estas empresas comenzaron copiando flagrantemente a Intel, hasta
hacerle a veces mucho daño (con productos como el 386 de AMD, que llegaba a
40 MHz frente a 33 MHz del de Intel, o bien en el mercado 486). En este terreno
Cyrix y AMD hicieron de todo, desde micros "light" que eran 386 potenciados, por
ejemplo, con sólo 1 Kb de caché en vez de 8, hasta chips muy buenos como un
AMD DX4-120 (40 MHz por 3), que rinde casi como un Pentium a 75, o incluso
uno a 133 MHz (33 MHz por 4 y 16 Kb de caché).
Posteriormente perdieron el carro de Intel, especialmente el publicitario, y
hoy en día resurgen con ideas nuevas, buenas y propias, no adoptadas como
antes.
Luego vino el Pentium, un nombre inventado para evitar que surgieran
586s marca AMD o Cyrix, ya que no era posible patentar un número pero sí un
nombre, lo que aprovecharon para sacar fuertes campañas de publicidad del "Intel
Inside" (Intel dentro), hasta llegar a los técnicos informáticos de colores que
anuncian los Pentium MMX y los Pentium II, III y IV. Los MMX son Pentium
renovados con las instrucciones semi-mágicas MMX y más caché, y los Pentium II
son una revisión del profesional Pentium Pro pero con MMX y un encapsulado
SEC (Single Edge Contact).
Los primeros Pentium, a 60 y 66 MHz, eran simplemente experimentos.
Pero sí los vendían como terminados, aunque se calentaban mucho y tuvieran un
fallo en la unidad matemática.
Luego los depuraron, les bajaron el voltaje a 3.3 V y empezó de nuevo el
márketing. Fijaron las frecuencias de las placas base en 50, 60 ó 66 MHz, y
sacaron, más o menos por este orden, chips a 90, 100, 75, 120, 133, 150, 166 y
200 MHz (que iban internamente a 50, 60 ó 66 x1.5, x2, x2.5...). El caso es que
sobraban muchas de las variantes, pues un 120 (60x2) no era mucho mejor que
un 100 (66x1,5), y entre el 133 (66x2) y el 150 (60x2,5) la diferencia era del orden
del 2% (o menor) debido a esa diferencia a nivel de placa. Además, el "cuello de
botella" hacía que el 200 se pareciera peligrosamente a un 166. Eran buenos
chips, eficientes y matemáticamente insuperables, aunque con esos fallos en los
primeros modelos. Además, eran superescalares: admitían más de una orden a la
vez (casi como si fueran 2 micros juntos).
K5 de AMD
El K5 era un buen chip, rápido para labores de oficina pero con peor
coprocesador matemático que el Pentium, por lo que no era apropiado para CAD
ni para ciertos juegos tipo Quake, que son las únicas aplicaciones que usan esta
parte del micro. Su ventaja, la relación prestaciones/precio.
Técnicamente, los modelos PR75, PR90 y PR100 se configuraban igual
que sus PR equivalentes (sus Performance Rating) en Pentium, mientras que los
PR120, PR133 y PR166 eran más avanzados, por lo que necesitaban ir a menos
MHz (sólo 90, 100 y 116,66 MHz) para alcanzar ese PR equivalente.
6x86 (M1) de Cyrix (o IBM)
Un chip tan bueno que, a los mismos MHz, era algo mejor que un
Pentium, por lo que los llamaban por su PR (su índice equivalente en Pentium),
algo que AMD usó también para tres de sus K5 (los PR120, 133 y 166). Según
Cyrix, un 6x86 P133 iba a menos MHz (en concreto 110), pero rendía tanto o más
que un Pentium a 133.
En realidad, algunos cálculos de Cyrix le beneficiaban un poco, ya que le
daban un par de puntos más de los reales; pero esto era insignificante. El
auténtico problema radicaba en su unidad de coma flotante, francamente mala.
El 6x86 (también llamado M1) era una elección fantástica para trabajar
rápido y a buen precio con Office, WordPerfect, Windows 95... pero mala, peor
que un K5 de AMD, si se trataba de AutoCAD, Microstation o, sobre todo, juegos.
Otro problema de estos chips era que se calentaban mucho, por lo que
hicieron una versión de bajo voltaje llamada 6x86L (low voltage). Cyrix no tiene
fábricas propias, por lo que se lo hace IBM, que se queda un chip de cada dos.
Por eso a veces aparece como "6x86 de IBM", que parece que asusta menos al
comprador.
Pentium Pro
Intel decidió innovar el terreno informático y sacó un "súper-micro", al que
tuvo la original idea de llamar Pentium Pro.
Este micro era más superescalar que el Pentium, tenía un núcleo más
depurado, incluía una unidad matemática aún más rápida y, sobre todo, tenía la
caché de segundo nivel en el encapsulado del chip. Esto no quiere decir que fuera
una nueva caché interna, término que se reserva para la de primer nivel.
Un Pentium Pro tiene una caché de primer nivel junto al resto del micro, y
además una de segundo nivel separada del corazón del micro por un centímetro y
a la misma velocidad que éste, no a la de la placa (más baja); digamos que es
semi-interna. El micro es bastante grande, para poder alojar a la caché, y va sobre
un zócalo rectangular llamado socket 8. El único problema de este micro era su
carácter profesional. Además de ser muy caro, necesitaba correr software sólo de
32 bits. Con software de 16 bits, o incluso una mezcla de 32 y 16 bits como
Windows 95, su rendimiento es menor que el de un Pentium clásico; sin embargo,
en Windows NT, OS/2 o Linux, literalmente vuela.
Pentium MMX
Es un micro propio de la filosofía Intel. Con un gran chip como el Pentium
Pro ya en el mercado, y a 3 meses escasos de sacar el Pentium II, decidió estirar
un poco más la tecnología ya obsoleta del Pentium clásico en vez de ofrecer esas
nuevas soluciones a un precio razonable. Así que se inventó un nuevo conjunto de
instrucciones para micro, que para ser modernos tuvieran que ver con el
rendimiento de las aplicaciones multimedia, y las llamó MMX (MultiMedia
eXtensions). Prometían que el nuevo Pentium, con las MMX y el doble de caché
(32 Kb), podía tener hasta un 60% más de rendimiento.
En realidad, en ocasiones, la ventaja puede llegar al 25%, y sólo en
aplicaciones muy optimizadas para MMX (ni Windows 95 ni Office lo son, por
ejemplo). En el resto, no más de un 10%, que además se debe casi en exclusiva
al aumento de la caché interna al doble.
La verdadera ventaja es que su precio final acaba siendo igual que si no
fuera MMX. Además, consume y se calienta menos por tener voltaje reducido para
el núcleo del chip (2,8 V). Por cierto, el modelo a 233 MHz (66 MHz en placa por
3,5) está tan estrangulado por ese "cuello de botella" que rinde poco más que el
200 (66 por 3).
Pentium II
En realidad, se trata del viejo Pentium Pro, jubilado antes de tiempo, con
algunos cambios (no todos para mejorar) y en una nueva y fantástica
presentación, el cartucho SEC (Single Edge Contact): una cajita negra que en vez
de conectarse a un zócalo se conecta a una ranura llamada Slot 1.
Los cambios respecto al Pro son: optimizado para MMX; nuevo
encapsulado y conector a la placa; rendimiento de 16 bits mejorado (ahora es
mejor que un Pentium en Windows 95, pero a costa de desaprovecharlo; lo suyo
son 32 bits puros); caché secundaria encapsulada junto al chip (semi-interna),
pero a la mitad de la velocidad de éste (un retroceso desde el Pro, que iba a la
misma velocidad; abarata los costos de fabricación).
Un chip "Pro 2.0", con muchas luces y sombras. La mayor sombra, su
método de conexión, el "Slot 1"; Intel lo ha patentado, lo que es algo así como
patentar un enchufe cuadrado en vez de uno redondo.
Eso sí, es el mejor chip del mercado, especialmente desde que no se
fabrica el Pro. Para sacarle su auténtico jugo, nada de Windows 95: Windows NT,
Linux u OS/2.
K6 de AMD
Un chip mucho mejor que el K5. Incluye la "magia" MMX, aparte de un
diseño interno increíblemente innovador y una caché interna de 64 Kb.
Se inserta en un zócalo de Pentium normal (un socket 7, para ser
precisos) y la caché secundaria la tiene en la placa base, a la manera clásica.
Pese a esto, su rendimiento es muy bueno: mejor que un MMX y sólo algo peor
que un Pentium II, siempre que se pruebe en Windows 95.
Aunque es algo peor en cuanto a cálculos de coma flotante (CAD y
juegos), para oficina es una buena opción.
6x86MX (M2) de Cyrix (o IBM)
Un chip muy bueno para trabajo de oficinas, que incluye MMX y que nunca
debe elegirse para CAD o juegos (peor que los AMD).
Celeron (Pentium II light)
Un Pentium II sin la caché secundaria. Pensado para liquidar el mercado
de placas base tipo Pentium no II (con socket 7 ) y liquidar definitivamente a AMD y
otras empresas que usan estas placas. Muy poco recomendable, rendimiento
mucho más bajo que el de Pentium II, casi idéntico al del Pentium MMX.
Celeron "A" Mendoccino
Una revisión muy interesante del Celeron que incluye 128 KB de caché
secundaria, la cuarta parte de la que tiene un Pentium II. Pero mientras que en los
Pentium II dicha caché trabaja a la mitad de la velocidad interna del micro (a 150
MHz para un Pentium II a 300 MHz, por ejemplo), en los nuevos Celeron trabaja a
la misma velocidad que el micro, o lo que es lo mismo: a 300 MHz o más.
Gracias a esto su rendimiento es sólo un poco inferior al de un Pentium II
de su misma velocidad de reloj, por lo que está sustituyendo a los Pentium II
lentos como modelo de entrada en el mercado.
K6-2 de AMD (K6-3D)
Consiste en una revisión del K6, con un núcleo similar pero añadiéndole
capacidades 3D en lo que AMD llama la tecnología 3DNow! (algo así como un
MMX para 3D).
Además, trabaja con un bus de 100 MHz hacia caché y memoria, lo que le
hace rendir igual que un Pentium II en casi todas las condiciones e incluso mucho
mejor que éste cuando se trata de juegos 3D modernos (ya que necesitan estar
optimizados para este chip o bien usar las DirectX 6 de Microsoft).
La tabla siguiente muestra una relación comparativa de la familia de
microprocesadores de Intel.
Procesador
8086
8088
80286
80386SX
80386SL
80386DX
80486SX
80486SX2
80487SX
80486DX
80486SL
80486DX2
80486DX4
Pentium OD
Pentium 60/66
Pentium 75
Pentium Pro
Pentium MMX
Pentium II
Tamaño de Registro
16 bits
16 bits
16 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
Bus de Datos
16 bits
8 bits
16 bits
16 bits
16 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
64 bits
64 bits
64 bits
64 bits
64 bits(interno 300 b)
Bus de Direcciones
20 bits
20 bits
24 bits
24 bits
24 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
32 bits
36 bits
36 bits
36 bits
Fecha de Introducción
Junio de 1978
Junio de 1979
Febrero de 1982
Junio de 1988
Octubre de 1990
Octubre de 1985
Abril de 1991
Abril de 1994
Abril de 1991
Abril de 1989
Noviembre de 1992
Marzo de 1992
Febrero de 1994
Enero de 1995
Marzo de 1993
Marzo de 1994
Septiembre de 1995
Enero de 1997
Mayo de 1997
Tabla 4. Lista de la familia Intel con sus características básicas.[2]
Pentium III (Katmai)
A primera vista, un Pentium III (P3) parece un híbrido de Pentium II y
Celeron. Por delante tiene la forma típica de cartucho negro para conectar al Slot1
que ya tenía el Pentium II, pero por el otro lado está desnudo, como el Celeron.
Intel denomina este formato S.E.C.C.2, para diferenciarlo del formato
S.E.C.C. del Pentium II y del S.E.P.P del Celeron. El objetivo buscado al eliminar
una de las caras de plástico es aumentar la refrigeración de los chips, tanto del
micro en sí como de los chips de caché L2, ya que de esta forma el disipador de
calor se apoya directamente sobre ellos.
En realidad, como se ve en la siguiente tabla, no hay muchas diferencias
entre el Pentium III y el Pentium II.
Característica
Pentium II
Pentium III
Tecnología de fabricación
0,35 y 0,25 micras
0,25 micras
Velocidad
233 a 450 MHz
450 y 500 MHz
Caché L1
32 KB
32 KB
Caché L2
512 KB a la mitad de la 512 KB a la mitad de la
velocidad del micro
velocidad del micro
Bus de sistema
66 y 100 MHz
133 MHz
Instrucciones especiales
MMX
MMX y SSE
Características especiales
Número
de
serie
individualizado
Tabla 5. Comparación entre el Pentium II y el Pentium III
El salto evolutivo que ha desembocado en el P3 ha sido la incorporación
de 70 nuevas instrucciones llamadas oficialmente SSE, Streaming SIMD
Extensions (extensiones SIMD de flujo), aunque durante mucho tiempo se
conocieron como KNI (Katmai New Instructions, nuevas instrucciones del Katmai)
y mucha gente prefiere llamarlas, más comercialmente, MMX-2.
Probablemente el nombre más adecuado no sea el oficial, sino el preferido
de los publicistas: MMX-2. Las originales instrucciones MMX significan MultiMedia
eXtensions, un nombre lógico si se tiene en cuenta que se crearon para aumentar
el rendimiento en las aplicaciones multimedia.
El problema de dichas instrucciones MMX (que incorporan todos los
micros desde los ya clásicos Pentium MMX y AMD K6) era que no podían ser
utilizadas junto con la FPU, la unidad matemática de coma flotante del micro, de
enorme importancia en aplicaciones como juegos o CAD. Esto hacía que muchos
programadores no optimizaran los programas para MMX, ya que "sólo MMX" o
"sólo FPU" no era una elección agradable.
El P3 resuelve este problema de dos maneras:
•
Las instrucciones SSE permiten realizar cálculos matemáticos con
números con coma flotante, al contrario que las MMX, que sólo los
realizan con números enteros.
•
Las instrucciones SSE pueden utilizarse simultáneamente con la FPU o
con instrucciones MMX.
Para entender el proceso que siguen estas instrucciones para acelerar los
cálculos se puede observar la palabra SIMD: Single Instruction, Multiple Data;
instrucción única, datos múltiples. Estas instrucciones permiten realizar una única
operación compleja con varios datos en vez de realizar varias operaciones más
simples, pudiendo hacer hasta 4 operaciones en coma flotante por cada ciclo de
reloj.
Además, algunas de estas 70 nuevas instrucciones optimizan el
rendimiento en apartados multimedia como la reproducción de vídeo MPEG-2 o el
reconocimiento de voz, mientras otras aceleran el acceso a la memoria.
El problema básico es que para que exista aumento de rendimiento, las
aplicaciones deben estar optimizadas para las nuevas instrucciones. Es decir, que
en aplicaciones no optimizadas (el 99,99% de las actuales), un Pentium II y un
Pentium III a la misma velocidad de reloj dan unos resultados idénticos.
Pentium IV
El nuevo Pentium es capaz de alcanzar velocidades muy altas (en el
tercer trimestre de este año llegará a los 2 Ghz, pasando por uno intermedio de
1.7 GHz), algo por ahora imposible para diseños algo mas viejos como PIII y
Athlon.
El procesador se comporta en forma sobresaliente en las aplicaciones que
requieren un gran ancho de banda de memoria, de hecho el Pentium IV (PIV)
cuenta con un bus de 400 Mhz, que es en realidad de 100 x 4 algo así como AGP
4x. Si a esto se le suma la costosa Memoria RamBus, el resultado no es extraño.
El punto fuerte de los procesadores de Intel siempre fue su poder en las
aplicaciones que demandan alto poder de procesamiento en coma flotante, sin
embargo, para esto existen dos caminos: el tradicional y el de las extensiones. El
Pentium 4 trae un nuevo conjunto de 144 instrucciones SIMD, llamadas SSE-2
Para que estas funcionen, deben tener un soporte específico en el software, algo
que todavía no ocurre en la realidad. Sin embargo, la compañía confía en que su
poder de mercado hará de las nuevas instrucciones un estándar. De no ser así, el
nuevo Pentium 4 se vería en problemas, dado que el rendimiento de su FPU
(Floating Point Unit ) tradicional que ejecuta código x87, está por debajo de la
integrada Athlon de AMD y en el mismo del Pentium III.
La plataforma sobre la que correrá el nuevo procesador está basada en el
chipset Intel 850. Éste permite gestionar bancos de memoria RDRAM, con lo cual
soluciona problemas encontrados en el 820, junto con un Bus de sistema de 400
Mhz. Pentium 4 no se puede utilizar en Motherboards para Pentium III, además las
primeras placas Madres Intel exigen un nuevo gabinete que cumpla con la norma
Extended ATX.
El procesador viene con un encapsulado tipo socket de 423 pines. Lo
notable es que Intel ya anunció que este formato pronto será reemplazado por uno
nuevo, cuando se empiece a fabricar con proceso de 0,13 micrones (proyecto
Northwood) o antes. Esto dejará casi inútil al Motherboard que se compre ahora,
Las características más relevantes del microprocesador Pentium IV se
muestran en la siguiente tabla.
Velocidad
1,4 Ghz
Conexión
Socket
Caché L1
8K
Caché L2
256 K
Enteros (Integer)
2
FPU
2
Bus
400 Mhz
Instrucciones Extra
215
Precio en Dólares
U$ 999
Tabla 6. Tabla de características del Pentium IV a 1.4 GHz
4.5. Chipset de control
El "chipset" es el conjunto (set) de chips que se encargan de controlar
determinadas funciones del ordenador, como la forma en que interacciona el
microprocesador con la memoria o la caché, o el control de los puertos y slots ISA,
PCI, AGP, USB, etc.
Antiguamente estas funciones eran relativamente sencillas de realizar y el
chipset apenas influía en el rendimiento del ordenador, por lo que el chipset era el
último elemento al que se concedía importancia a la hora de comprar una placa
base, si es que alguien se molestaba siquiera en informarse sobre la naturaleza
del mismo. Pero los nuevos y muy complejos micros, junto con un muy amplio
abanico de tecnologías en materia de memorias, caché y periféricos que aparecen
y desaparecen casi de mes en mes, han hecho que la importancia del chipset
crezca enormemente.
De la calidad y características del chipset dependerán:
•
Obtener o no el máximo rendimiento del microprocesador.
•
Las posibilidades de actualización del ordenador.
•
El uso de ciertas tecnologías más avanzadas de memorias y periféricos.
Debe destacarse el hecho de que el uso de un buen chipset no implica
que la placa base en conjunto sea de calidad. Como ejemplo, muchas placas con
chipsets que darían soporte a enormes cantidades de memoria, 512 MB o más, no
incluyen zócalos de memoria para más de 128 ó 256. O bien el caso de los
puertos USB, cuyo soporte está previsto en la casi totalidad de los chipsets de los
últimos dos años pero que hasta fecha reciente no han tenido los conectores
necesarios en las placas base.
Se mencionan aquí sólo los chipsets para Pentium y superior, ya que el
chipset de un 486 o inferior no es de mayor importancia (dentro de un límite
razonable) por estar en general todos en un nivel similar de prestaciones y
rendimiento, además de totalmente descatalogados. Tampoco se tratan todas las
marcas, sino sólo las más conocidas o de más interés; de cualquier forma,
muchas veces se encuentran chipsets aparentemente desconocidos que no son
sino chipsets VIA, ALI o SIS bajo otra marca.
Chipsets para Pentium y Pentium MMX
De Intel (Tritones)
Fueron la primera y muy exitosa incursión de Intel en el mundo de los
chipsets, mundo en el cual ha pasado de no fabricar prácticamente ninguno a
tener un monopolio casi total, que es la forma en que a Intel le gusta hacer los
negocios. Esto no resulta extraño, ya que nadie mejor que Intel conoce cómo
sacar partido a sus microprocesadores; además, el resto de fabricantes dependen
de la información técnica que les suministra Intel, que lo hace cuando y como
quiere.
430 FX
El Tritón clásico, de apabullante éxito. Un chipset bastante apropiado para
los Pentium “normales" (no MMX) con memorias tipo EDO. Hoy en día desfasado.
430 HX
El Tritón II, la opción profesional del anterior. Mucho más rápido y con
soporte para placas duales (con 2 micros). Algo anticuado pero muy bueno.
430 VX
Algo más lento que el HX, pero con soporte para memoria SDRAM. Se
puede decir que es la revisión del FX, o bien, que se sacó para que la gente no se
asustara del precio del HX.
430 TX
El último chipset de Intel para placas Pentium (placas socket 7). Si
queremos usar micros Intel y aplicaciones que se contenten con placas con 1
Pentium, la opción a elegir. Soporte MMX, SDRAM, UltraDMA. Un problema: si se
le pone más de 64 MB de RAM, la caché deja de actuar.
La tabla siguiente muestra un resumen de los chipset de Intel para
Pentium.
Concepto
430 FX
430 HX
430 VX
430 TX
Número CPUs máx.
1
2
1
1
RAM máxima
128 MB
512 MB
128 MB
256 MB
Tipos de RAM
FPM, EDO
RAM cacheable máxima
64 MB
FPM, EDO, SDRAM
512 MB (según placa, no todas)
Caché L2 máxima
512 KB
Velocidad bus máx.
66 MHz
Puertos adicionales
USB
Comentarios
Desfasado
64 MB
UltraDMA y USB
No adecuados para micros no Intel de nueva
generación (no soportan AGP ni bus 100 MHz)
Tabla 7. Chipsets de Intel para Pentium y Pentium MMX
Lo más destacable de estos chipsets, su buen rendimiento, especialmente
con micros Intel. Lo peor, su escaso soporte para micros no Intel, que en el campo
socket 7 tienen desarrollos superiores a los de Intel, como los AMD K6 (normal y
K6-2) o los Cyrix-IBM 6x86MX (M2), en general más avanzados que los Pentium y
Pentium MMX.
De VIA (Apollos)
Unos chipsets bastante buenos, se caracterizan por tener soporte para
casi todo lo imaginable (memorias SDRAM o BEDO, UltraDMA, USB, etc.); su
pelea está en la gama del HX o TX, aunque suelen ser algo más lentos que éstos
al equiparlos con micros Intel, no así con micros de AMD o Cyrix-IBM.
Lo bueno de las placas con chipsets VIA es que siguen en el mercado
socket 7, por lo que tienen soporte para todas las nuevas tecnologías como el
AGP o los buses a 100 MHz, además de que su calidad suele ser intermedia-alta.
En las placas con chipsets Intel hay un abanico muy amplio entre placas muy
buenas y otras francamente malas, además de estar ya desfasadas (ningún
chipset Intel para socket 7 soporta AGP, por ejemplo). El resumen de los chipset
de VIA se muestra en la siguiente tabla.
Concepto
VP2
VPX
VP3
MVP3
Número CPUs máx.
1
RAM máxima
512 MB
1 GB
Tipos de RAM
FPM, EDO, BEDO, SDRAM
FPM, EDO, SDRAM
RAM cacheable máxima
512 MB (según placa, no todas)
512 MB ó 1 GB (según placa, no
todas)
Caché L2 máxima
2048 KB
Velocidad bus máx.
66 MHz
Puertos adicionales
UltraDMA y USB
Comentarios
No adecuados para micros no Intel de Sin bus a 100 MHz
75 MHz
66 MHz
100 MHz
UltraDMA, USB y AGP
nueva generación (no soportan AGP
ni bus 100 MHz)
Muy
moderno,
con todos
los avances
Tabla 8. Chipsets de VIA para Pentium y Pentium MMX
El último chipset de VIA para socket 7, el MPV3, ofrece todas las
prestaciones del BX de Intel (excepto soporte para placas duales), configurando lo
que se denomina una placa Super 7 (con AGP y bus a 100 MHz), que con un
micro como el nuevo AMD K6-2 no tiene nada que envidiar a un equipo con
Pentium II.
De ALI
Muy buenos chipsets, tienen soluciones tan avanzadas como el chipset
para placas Super 7 "Aladdin V", que como el MPV3 de VIA resulta equiparable a
todos los efectos al BX de Intel para placas Pentium II (bus a 100 MHz, AGP, etc.);
una fantástica elección para micros como el AMD K6-2. Se pueden ver las
características básicas en la tabla 9.
Concepto
M1521/M1523
M1531/M15X3
M1541/M1543
(Aladdin III)
(Aladdin IV-IV+)
(Aladdin V)
Número CPUs máx.
1
RAM máxima
1 GB
Tipos de RAM
FPM, EDO, SDRAM
FPM,
EDO,
SDRAM,
PC100
RAM
cacheable 512 MB (según placa, no todas)
máxima
Caché L2 máxima
1 MB
Velocidad bus máx.
75 MHz
83,3 MHz
100 MHz
Puertos adicionales
USB
UltraDMA y USB
UltraDMA, USB y AGP
Comentarios
Apropiados para micros no Intel pero no Muy moderna, con
de última generación (AMD K6-2) por todos los avances
carecer de bus a 100 MHz
Tabla
9. Chipsets de ALI para Pentium y Pentium MMX
De SiS
Como los anteriores, sus capacidades son avanzadas, aunque su
velocidad sea a veces algo más reducida que en los de Intel. Resultan
recomendables para su uso junto a chips compatibles Intel como el K6 de AMD o
el 6x86MX (M2) de Cyrix-IBM. La tabla 10 muestra sus características principales.
Concepto
5597/5598
5581/5582
Número CPUs máx.
5591/5592
1
RAM máxima
384 MB
Tipos de RAM
FPM, EDO, SDRAM
RAM cacheable
768 MB
128 MB
256 MB
Caché L2 máxima
512 KB
1 MB
Velocidad bus máx.
75 MHz
83 MHz
máxima
Puertos adicionales
UltraDMA, USB y
UltraDMA y USB
SVGA integrada
UltraDMA,
USB y
AGP
Comentarios
Apropiados para micros no Intel (especialmente Cyrix)
pero no los de última generación (AMD K6-2) por carecer
de bus a 100 MHz
Tabla 10. Chipsets de SIS para Pentium y Pentium MMX
Chipsets para Pentium II y Celeron
De Intel
Son bastante avanzados, excepto el anticuado 440 FX (que no es
propiamente un chipset para Pentium II, sino más bien para el extinto Pentium
Pro) y el barato EX, basado en el LX pero con casi todas las capacidades
reducidas (ver tabla 11).
De otras marcas
No son demasiados, pero los que hay tienen todas las capacidades que
hacen falta en una placa Pentium II (ver tabla 12). El problema con el que se
encuentran no es su falta de eficacia, ya que aunque los de Intel están algo más
rodados, el rendimiento es muy similar; pero el hecho de que durante un año la
gente sólo haya oído hablar de FX, LX, BX y EX hace difícil que entren en un
mercado donde Intel tiene un monopolio absoluto.
Concepto
440 FX
Número CPUs máx.
RAM máxima
2
512 MB
440 LX
440 BX
440 EX
1
256 MB
1 GB EDO ó 512 1 GB
MB SDRAM
Tipos de RAM
FPM, EDO
FPM,
EDO, SDRAM y FPM, EDO,
SDRAM
PC100
SDRAM
SDRAM
RAM cacheable máxima No aplicable (dentro del microprocesador, tamaño fijo)
Caché L2 máxima
Velocidad bus máx.
66 MHz
100 MHz 66 MHz
UltraDMA
y
USB
Puertos adicionales
UltraDMA, USB y AGP
Comentarios
Desfasado
Apropiado
sólo
para
Celeron
Tabla 11. Chipsets de Intel para Pentium II y Celeron
Concepto
Número
máx.
RAM máxima
VIA Apollo Pro
ALI Aladdin Pro II SIS 5601
M1621/M15X3
CPUs 1 ó más dependiendo de la placa
?
1 GB
1 GB SDRAM ó 2 GB
FPM o EDO
Tipos de RAM
FPM, EDO, SDRAM, PC100 SDRAM
RAM
cacheable No aplicable (dentro del microprocesador,
máxima
tamaño fijo)
Caché L2 máxima
Velocidad bus máx. 100 MHz
Puertos adicionales UltraDMA, USB y AGP
Comentarios
Muy avanzados, equivalentes al Intel BX
En proyecto
Tabla 12. Chipsets de otras marcas para Pentium II y Celeron
V
LA PLATAFORMA DE SUN
5.1 Introducción
Sun Microsystem ha incursionado fuertemente en la industria de la
computación desde 1987, fecha en la que desarrolló su microprocesador SPARC
(Scalable Processor ARChitecture), que es la base de su plataforma de hardware.
Los microprocesadores SPARC a diferencia de los microprocesadores de Intel y
compatibles, son de arquitectura RISC, lo que hace a estas plataformas
completamente incompatibles entre sí.
Sun utiliza como plataforma de software base, el sistema operativo
Solaris, desarrollado por ellos mismos. Este sistema operativo es un derivado del
sistema UNIX y ha estado cobrando mucha importancia en el ámbito de los
sistemas operativos de red, tan es así que ya existen versiones para plataformas
de intel y compatibles.
A continuación se muestran los aspectos más relevantes de los
microprocesadores SPARC 5.
5.2. Los microprocesadores UltraSPARC
En 1987, la compañía diseñó su arquitectura RISC (Reduced Instruction
Set Computing) con la vista puesta en el futuro, teniendo en cuenta los aspectos
fundamentales
para
el
éxito
de
toda
red:
conectividad,
compatibilidad con generaciones anteriores y fiabilidad.
5
Este capítulo es un extracto de [11] y [12].
escalabilidad,
Este enfoque ha permitido a Sun ampliar fácilmente su arquitectura
durante los últimos 13 años para dar respuesta a las nuevas necesidades de las
redes, incluida la propia Internet. La arquitectura SPARC ha crecido a lo largo de
los años para ofrecer capacidad de multiprocesamiento y niveles más altos de
fiabilidad, aumentando al mismo tiempo el número de canales de cada unidad
central de proceso (CPU) y mejorando la frecuencia. Asimismo, hace ya más de
cuatro años, solventó sin fisuras la transición entre las operaciones de 32 y 64 bits
manteniendo una compatibilidad binaria total a nivel de instrucciones para todas
las aplicaciones.
En los últimos 5 años se ha producido un cambio drástico en el tipo y
volumen de datos utilizados. Imágenes y gráficos 2D y 3D, bases de datos
pictoricas, audio y video en red, todo esto requiere una mayor capacidad de
rendimiento. Por si esto fuera poco, estos datos deben de ser desplazados a
través de la red.
Todo esto se llama procesamiento New-Media, que a su vez requiere que
el procesador asuma responsabilidades adicionales. El procesador debe ser capaz
de interactuar, sin esperas, en complejos entornos de red, que demandan grandes
picos de rendimiento
Sun ha desarrollado desde el SPARC I hasta el SPARC III.
UltraSPARC I Microprocesador Superescalar de alto rendimiento, implementa la
arquitectura RISC SPARV V9. Es capaz de sostener la ejecución
de hasta 4 instrucciones por ciclo aún en la presencia de saltos
condicionales. Soporta gráficos de 2D y 3D, procesamiento de
imágenes, compresión y descompresión de video y efectos de
video a través de su sofisticado Conjunto de Instrucciones
Visuales (VIS).
UltraSPARC-II Aprovecha el alto rendimiento característico de la familia SPARC y
tecnología de 64-bits. Es parte la segunda generación de
productos UltraSPARC basados en entubamiento. Provee una
frecuencia de reloj más alta (250MHz, 300MHz, 360MHz, 400MHz
y 450MHz) u multiples modo SRAM. También implementa el
sistema de Prefetch de SPARC V9.
UltraSPARC-IIi También aprovecha el alto rendimiento característico de la familia
SPARC y tecnología de 64-bits. Tiene un Puente Avanzado para
PCI (APB. Advanced PCI Bridge), lo cual no sólo optimiza los
diseños que requieren el máximo poder de procesamiento, sino
que también maneja aplicaciones de escritorio, soportando
conexiones a un amplio arreglo de dispositivos compatibles con
PCI a 66 MHz directamente y a 33 MHz a través del puente.
UltraSPARC-III Escalables desde 600MHz para soluciones multiproceso. Se
describen algunas de sus características en las siguientes
secciones.
Rendimiento multidimensional para impulsar el futuro de la Red
A medida que el mundo de los negocios se incorpora a la economía de la
red, los sistemas informáticos se ven sometidos a una mayor presión. Los
recursos de las empresas y de Internet necesitan crecer para gestionar millones
de interacciones al día y, al mismo tiempo, ofrecer una disponibilidad continua y un
rendimiento superior.
Ahora más que nunca, el microprocesador en el que se basa la red debe
proporcionar un rendimiento excepcional para responder a las exigencias cada vez
mayores de la nueva era. Ya no basta con crear procesadores más rápidos.
Aunque pueda ser una medida válida para los sistemas independientes de
escritorio, la velocidad de reloj (MHz) sólo es uno de los múltiples e importantes
parámetros de rendimiento que deben tenerse en cuenta de cara al diseño de los
exigentes
entornos
de
red
actuales.
La
escalabilidad,
el
rendimiento
multiprocesador, la capacidad de funcionamiento sin interrupciones y la protección
de la inversión son otras características igualmente críticas.
El Procesador UltraSparc III: El Impulso de la red
El procesador UltraSPARC III de Sun Microsystems encarna la segunda
generación de la arquitectura SPARC V9 de 64 bits. Ha sido específicamente
creado para los entornos de red más agresivos del mundo real, como el comercio
electrónico, las intranets de las grandes empresas, los servidores Web de alta
capacidad y el procesamiento de transacciones en línea.
Este procesador se adapta perfectamente al rápido crecimiento que
caracteriza a los entornos de red actuales, porque proporciona el rendimiento
multidimensional que requieren tanto las intranets corporativas como Internet.
Escalabilidad masiva y rendimiento multiprocesador
La familia UltraSPARC siempre ha ofrecido una mayor escalabilidad con
cada nueva generación. El procesador UltraSPARC III es fiel a esta pauta y puede
crecer desde dos vías hasta cientos de procesadores compartiendo un mismo
dominio de memoria coherente y sin necesidad de realizar cambios de diseño de
hardware y software a gran escala. Como resultado, el ancho de banda de la
memoria del sistema se adapta sin fisuras al número de procesadores instalados y
ofrece un aumento casi lineal de la potencia de cálculo. La posibilidad de añadir
rápidamente recursos de cálculo es fundamental para que las actividades de
misión crítica puedan responder a tiempo a los aumentos repentinos de demanda
de los usuarios, como las transacciones financieras derivadas del comercio
electrónico o las grandes bases de datos de las que depende la funcionalidad de
la red.
Fig. 34. El microprocesador UltraSparc III
El procesador UltraSPARC III (fig. 34) incluye los siguientes elementos de
escalabilidad masiva:
•
Un sistema de memoria integrado en el chip que elimina la necesidad
de utilizar una controladora de memoria externa
•
Un bus de direcciones de 9.6 GB/s que garantiza la coherencia de la
caché entre varios procesadores
•
Caché de datos SAM (sum-addressed memory) que reduce al mínimo
la latencia
•
Transferencias de caché a caché que reducen la latencia de la memoria
Gran Rendimiento
Fabricado con una tecnología de proceso de CPU de 6 niveles CMOS de
0.18 micras, el procesador UltraSPARC III es fiel a la tradición de excelente
rendimiento marcada por sus predecesores. Con una frecuencia inicial de 600
MHz (disponible a 900 MHz en el primer trimestre de 2001), el procesador
proporciona un elevado ancho de banda de memoria (9.6 GB/s para las
direcciones de coherencia de la caché; 4.8 GB/s para los datos) y un ancho de
banda de 2.4 GB/s para el interfaz del sistema.
Para alcanzar este impresionante rendimiento, la arquitectura del
procesador incorpora nuevas características que reducen la latencia al tiempo que
aumentan las velocidades de reloj.
•
El direccionamiento de datos de 64 bits permite que el procesador, las
aplicaciones y los sistemas operativos utilicen mayores cantidades de
memoria física
•
Los marcadores de caché de nivel 2 integrados en la placa y la
controladora de memoria integrada en el chip reducen la latencia de
datos
•
Una agresiva programación estática reduce la latencia efectiva de
memoria
•
La memoria SAM y la estructura canalizada por ondas de la caché
SRAM de nivel 1 permiten obtener la menor latencia de carga de ciclos
del sector, ya que la mayoría de los competidores ofrecen 3 ó 4 ciclos
•
Un ancho de banda máximo de 3.2 GB/s desde un máximo de 8 GB de
memoria local SDRAM garantiza la disponibilidad de los datos en todos
y cada uno de los ciclos de reloj
•
El conjunto de instrucciones para medios VIS facilita la manipulación de
los datos gráficos y de control de la red
Características avanzadas de fiabilidad
El procesador UltraSPARC III incorpora una gama completa de
características de fiabilidad diseñadas específicamente para alcanzar los objetivos
más ambiciosos de disponibilidad del sistema en las aplicaciones de
telecomunicaciones e Internet. Gran parte de esta capacidad es fruto de la
estrecha colaboración entre los equipos de diseño del Entorno Operativo Solaris
8.0 y del procesador UltraSPARC III.
•
El bus "Up-Time" consiste en un canal de 8 bits y se emplea para
facilitar el diagnóstico de los errores del bus del sistema cuando no es
posible acceder al bus principal.
•
La recuperación automática de errores reduce significativamente el
efecto de los errores y aumenta la velocidad de recuperación gracias a
una excelente identificación de errores.
•
ECC (comprobación y corrección de errores) a través de la caché L2
•
La protección de paridad de todas las matrices de memoria admite la
detección de errores únicos y la corrección de errores únicos
(SED/SEC, Single Error Detection and Single Error Correction).g
•
La eliminación avanzada de errores identifica y marca los errores para
evitar
su
propagación
en
un
sistema
multiprocesador.
Esta
característica de contención de errores para sistemas multiprocesador
identifica dónde se produce el error y permite sustituir el sistema
defectuoso
Protección de la inversión
La arquitectura SPARC siempre ha ofrecido compatibilidad binaria total
para todas las aplicaciones desarrolladas, que ya superan la cifra de 12,000. La
compatibilidad se mantuvo incluso cuando la arquitectura pasó de 32 a 64 bits.
Para conseguir este importante logro, Sun ha mantenido la misma interfaz de
registros privilegiados en todas las generaciones. La compatibilidad protege a las
inversiones en aplicaciones a largo plazo de los clientes, lo que permite obtener
una mayor rentabilidad. Más de 10 años de continuidad de los ejecutables nativos
significan que:
•
Todas las aplicaciones SPARC funcionan en todos los sistemas SPARC
•
No es necesario volver a compilar el código para ejecutarlo en los
nuevos sistemas
•
Se garantiza la fácil migración a los sistemas basados en futuros
procesadores UltraSPARC
5.3. Razones para usar el CPU UltraSPARC III
En resumen, Sun establece 10 razones que convierten a la CPU
UltraSPARC III en el procesador de la era Punto Com:
1) Protección de la inversión
La arquitectura SPARC siempre ha ofrecido compatibilidad binaria a nivel
de instrucciones para todas las aplicaciones desarrolladas para SPARC, que ya
superan la cifra de 12,000. La compatibilidad se mantuvo incluso cuando la
arquitectura pasó de 32 a 64 bits. Para conseguir este importante logro, Sun ha
mantenido la misma interfaz de registros privilegiados en todas las generaciones.
Más de 10 años de continuidad de los ejecutables nativos significan que:
•
Todas las aplicaciones SPARC funcionan en todos los sistemas SPARC
•
No es necesario volver a compilar el código para ejecutarlo en los
nuevos sistemas.
•
Las aplicaciones de 64 bits y superiores se ejecutarán en la misma
plataforma de hardware/sistema operativo.
•
La protección de las inversiones en aplicaciones ofrece una mayor
rentabilidad
2) Arquitectura basada en red
La arquitectura UltraSPARC se ha creado específicamente para los
entornos informáticos más agresivos de Internet, como el comercio electrónico, las
intranets de las grandes empresas, los servidores Web de alta capacidad y el
procesamiento de transacciones en línea. Sus características principales, como la
controladora de memoria integrada en el chip, el bus Uptime y el elevado ancho de
banda de memoria (9,6 GB/s para las direcciones de coherencia de la caché; 4,8
GB/s para los datos), contribuyen a aumentar el rendimiento de las aplicaciones y
a mejorar el funcionamiento en red.
3) Arquitectura de 64 bits
La arquitectura UltraSPARC de 64 bits ha demostrado su éxito durante
más de 5 años en numerosas aplicaciones de misión crítica. El procesador
UltraSPARC III de Sun encarna la segunda generación de la arquitectura SPARC
V9 de 64 bits.
4) Gran rendimiento
El procesador UltraSPARC III ofrece un ancho de banda máximo más de
dos veces superior al de sus predecesores, con un ancho de banda de la interfaz
del sistema de 2.4 GB/s. Para conseguirlo, la arquitectura del procesador
incorpora nuevas características que reducen la latencia al tiempo que aumentan
las velocidades de reloj:
•
El direccionamiento de datos de 64 bits permite que el procesador, las
aplicaciones y los sistemas operativos utilicen mayores cantidades de
memoria física.
•
Los marcadores de caché de nivel 2 integrados en la placa y la
controladora de memoria integrada en el chip reducen la latencia de
datos
•
Una agresiva programación estática reduce la latencia efectiva de
memoria
•
La estructura canalizada por ondas en el diseño de la caché SRAM de
nivel 1 permite obtener un ancho de banda máximo de 3.2 GB/s desde
un máximo de 4 GB de memoria local, lo que garantiza la disponibilidad
de los datos en todos y cada uno de los ciclos de reloj
•
El conjunto de instrucciones para medios VIS facilita la manipulación de
los datos gráficos y de control de la red
5) Escalabilidad masiva
El procesador UltraSPARC III puede crecer desde dos vías hasta cientos
de procesadores sin necesidad de realizar cambios de diseño de hardware y
software. Como resultado, el tamaño de la memoria y el rendimiento crecen de
forma natural con la incorporación de procesadores adicionales. Para conseguirlo,
el procesador UltraSPARC III incluye los siguientes elementos:
•
Un sistema de memoria integrado en el chip que elimina la necesidad
de utilizar una controladora de memoria externa y maximiza la linealidad
•
Un bus de direcciones de 9.6 GB/s que garantiza la coherencia de la
caché entre varios procesadores.
•
Caché de datos SAM (sum-addressed memory) que reduce al mínimo
la latencia.
6) Características avanzadas de fiabilidad
El procesador UltraSPARC III dispone de características de fiabilidad
integradas en el chip y diseñadas específicamente para cumplir los requisitos de
fiabilidad a nivel del sistema de las aplicaciones de misión crítica. Son las
siguientes:
•
Bus "UpTime" que facilita el diagnóstico y la recuperación de los errores
del bus del sistema.
•
Single Error Correction/Single Error Detection (SEC/SED, corrección de
errores únicos/detección de errores únicos).- Una característica
avanzada de eliminación de errores que identifica y marca los errores
para evitar su propagación en un sistema multiprocesador.
•
ECC (comprobación y corrección de errores) a través de la caché L2
•
Protección de paridad en todas las matrices de memoria.
7) Perspectivas de futuro
La evolución futura del procesador UltraSPARC queda claramente definida
por el lanzamiento del modelo UltraSPARC IV, previsto para el año 2002, y del
modelo UltraSPARC V, en el año 2003. UltraSPARC IV funcionará a 1.5 GHz,
mientras que UltraSPARC V tendrá una velocidad de reloj de 2.1 GHz y superior.
8) Plataforma indicada para las aplicaciones de la economía de la red
La arquitectura UltraSPARC se ha implantado con éxito en una amplia
gama de entornos de aplicaciones de misión crítica: servidores empresariales,
servidores de Internet y entornos de telecomunicaciones con aplicaciones de
grandes bases de datos, procesamiento de transacciones, hospedaje web, gestión
de cadenas logísticas y comunicaciones. Por tanto, Sun se dirige al mercado de
los servidores de gama media-alta con los equipos basados en la tecnología
SPARC.
9) Tecnología de punta.
La familia de productos UltraSPARC ha explorado a fondo todos los
medios para mejorar al máximo el rendimiento del proceso. Sun ya ha introducido
la tecnología de cobre en el procesador UltraSPARC III a 900 MHz. En el futuro, el
uso de tecnologías de punta como la dieléctrica "low k" seguirán manteniendo a
Sun en primera línea.
10) Integración óptima con el sistema operativo
La arquitectura SPARC y el Entorno Operativo Solaris [tm] se han
diseñado desde el principio para trabajar conjuntamente. La sinergia natural
derivada del desarrollo conjunto del hardware y del software ha permitido a Sun
dominar aspectos tan importantes como la conectividad, la escalabilidad masiva y
la fiabilidad.
En la tabla 13 se muestra la línea de productos que ofrece Sun con la
arquitectura UltraSparc II.
Graphics Options
UltraSPARC™
Bus UltraSPA
Workstations
Ultra™ 5
Clock
Monitors PGX32™ Creator3 Elite3D™ Elite3D™ SunPCI™
RC™ chip Speed/Cache Size
2D and SW
PCI
IIi
development
400/2MB
D™
4
X
5
X
m3
m6
card
X
360/256k
workstation
Ultra™ 10
3D design
PCI
IIi
333/2MB
X
X
X
X
and analysis
440/2MB
workstation
MP workstations S-bus
Ultra™ 2
II
300/2MB
for design,
imaging
400/2MB
and analysis
2 x 400/2MB
MP workstation
Ultra™ 60
PCI
II
360/4MB
for graphics and
Ultra™ 80
5
X
X
2 x 300/2MB
computational
450/4MB
analysis
2 x 450/4MB
MP for compute/
6
X
5
X
X
X
X
X
X
X
X
2 x 360/4MB
PCI
II
450/4MB
graphics intensive
2 x 450/4MB
simulation or
4 x 450/4MB
analysis
Enterprise™
High performance PCI
Servers
visual simulations S-bus
II
3500 to 6500
8
X
X
series
Tabla 13. Línea de productos de Sun conUltraSPARC II
La siguiente tabla muestra las características que acompañan al servidor
Sun Enterprise 2.
Procesador
Arquitectura
TM
SuperScalar SPARC
Version 9, Ultra SPARC-I 167 MHz or 200 MHz, Ultra SPARC-II 300
MHz
Administración de
MMU with 64 I-TLB entries and 64 D-TLB entries, 8192 hardware supported contexts
Memoria
Cache
Primary: 16-KB data and 16-KB instruction on-chip
Secondary: 512-KB, 1-MB or 2-MB external
CPU
One or two CPU modules per system (one CPU per module)
Rutas de Datos
UPA operates at 83.3-MHz with 167 MHz processors and at 100-MHz with 200 & 300 MHz
processors
Memoria Principal
Total of 16 SIMM memory slots available 32-, 64-, and 128-MB SIMM expansion
Up to 2 GB maximum (with 128-MB SIMMs, in groups of 4)
Interfaces estándar
Red
Ethernet/Fast Ethernet, twisted pair standard (10-BaseT or 100-BaseT) or MII for external
transceiver
E/S
20-MB/sec Fast/Wide SCSI-2 (synchronous); maximum of 15 devices
Bus de Expansión
Four SBus expansion slots; 64-bit data bus width
Serial
Two RS-232C/RS423 serial ports (DB25)
Paralelo
Centronics-compatible parallel port (DB25)
Almacenamiento Masivo
TM
CD Interno
One 644-MB SunCD
32X
Disco Interno
Up to two 3.5- x 1-in. disks (4.2-GB formatted)
Floppy disk Interno
Optional 3.5-in. floppy drive
No. de Discos Max
Opciones de Expansión
Up to 15 devices with on-board SCSI.
Opciones de disco
2.1-GB, 4.2-GB or 9.1 GB UniPack
SPARCstorageTM MultiPack
Various SPARCstorage Arrays
Cinta
2.5-GB QIC; 14-GB 8mm, 4- to 8-GB 4mm DDS-2 to DDS-3
140- to 280-GB SPARCstorage DLT 4700 auto-loader
Monitor
Opciones de Consola
Optional 17-in. or 20-in. color
Opciones de Sbus
SunFastEthernetT M,SunATMT M, SunSwiftT M, SBus Quad Ethernet Controller, Differential
Fast/Wide Intelligent SCSI-2 Sbus (DWIS/S), Single-ended Fast/Wide Intelligent SCSI-2 SBus
(SWIS/S) host adaptor, HSI, Token Ring, FDDI, Fast SCSI-2/Buffered Ethernet, Fast Differential
SCSI-2/Buffered Ethernet, serial/parallel controller; Fibre Channel ISDN
Sistema Operativo
Software
SolarisTM 2.5.1 operating environment or later
Networking
ONC+T M, NFST M, TCP/IP, IPX/SPX
SunLinkT M OSI, MHS, DCE, DNI, SNA, X.25, PPP, Frame Relay, XTL
Sistema Monitor
SolsticeT MSyMONT M
Administración de red Solaris WebStart, Solstice AdminSuite, Solstice DiskSuiteT M, Solstice BackupT M (single server)
y sistema
and other Solstice products
Other Solstice products are available separately
Lenguajes
C, C++, Pascal, FORTRAN, Cobol, and JavaT M
Tabla 14. Características que acompañan al servidor Sun Enterprise 2.
VI
UNA NUEVA PROPUESTA
En este capítulo se transcriben los comentarios que al Dr. Claudio
Gutiérrez de Costa Rica hace con respecto a la arquitectura Von Neumann y con
respecto también, a una nueva propuesta de arquitectura de computadoras: La
Computadora de Conexiones, que propone H. Daniel Hillis.
6.1. Análisis de la Arquitectura von Neumann
“A pesar del carácter sólidamente científico de la informática, basado en la
teoría computacional, hay autores, como H. Daniel Hillis, que consideran que la
informática "no es buena" como ciencia y necesita una profunda modificación.
Hillis basa su crítica en el hecho de que la arquitectura más corriente de nuestras
computadoras, llamada arquitectura Von Neumann, ha sido superada por los
acontecimientos. Esto es así fundamentalmente porque en las primeras épocas de
la computadora digital la unidad de proceso y la memoria eran fabricadas de
distintos materiales: el procesador era caro y la memoria barata; valía, entonces,
la pena multiplicar la memoria y mantener un solo procesador, de modo que las
operaciones se concatenaran serialmente. Además, los cables no eran un
elemento importante en el conjunto de la arquitectura, pues había muy pocas
unidades que conectar.
Ambas situaciones han cambiado drásticamente con el avance de la
tecnología y el aumento de capacidad de las máquinas. Ahora no significa ahorro
el tener sólo un procesador, pues el procesador cuesta muy poco más que la
memoria, y los cables han pasado a ser el factor más voluminoso de una
computadora. La base científica en la teoría de la computabilidad idealizaba las
conexiones, como si los cables no tuvieran materia. Pero hoy no podemos ignorar
más la irradiación de calor de esos cables ni los problemas materiales de la
conectividad. Para poder recuperar la base científica, perdida por el propio avance
de la tecnología informática, Hillis recomienda reformular la arquitectura de la
computadora para basarla en el concepto de lo masivamente paralelo. Si
seguimos esta recomendación, nos dice, la informática se acercará cada vez más
a ese ideal de una ciencia empírica rigurosa representado desde hace varios
siglos por la física.
Las
llamadas
supercomputadoras
tradicionales
son
en
realidad
asociaciones o sociedades de computadoras, con arquitectura básica Von
Neumann, que intercambian entre sí los resultados parciales de su trabajo y, en
este sentido, producen un aumento de poder o productividad. La máquina de
conexiones de que nos habla Hillis, su inventor, es diferente; es más bien una
computadora de nueva arquitectura, masivamente paralela e interconectada. Si las
supercomputadoras puede considerarse que ponen a la informática en relación
con la sociología, porque su complejidad consiste en interrelaciones "sociales"
entre muchos individuos de la misma especie, a saber, computadoras en el
sentido clásico, la máquina de conexiones pone a la informática en íntima relación
con la física, en un sentido especial que Hillis pone mucho cuidado en aclarar.
La máquina de conexiones se ofrece como una alternativa para el modelo
clásico de computadora que surgió de la obra de Turing, y que generalmente
llamamos la máquina Von Neumann. Si las supercomputadoras son coaliciones
permanentes de varias computadoras Von Neumann, encargadas de realizar
tareas especialmente complejas en forma conjunta, la máquina de conexiones –tal
como nos la describe Hillis en su libro– corresponde a una concepción
enteramente diferente que supera de manera fundamental el modelo Von
Neumann y sus ya proverbiales dificultades.
6.2. ¿Por qué le cuesta tanto a una computadora Von
Neumann entender un dibujo?
El libro de Hillis del cual se ha tomado el texto que comentamos, se abre
con una reproducción de un dibujo de Picasso donde aparecen, en simples trazos,
unos caballos a la orilla de un río, con unos hombres desnudos tomando un baño;
en el fondo se perfilan unas montañas. Es una escena que cualquiera de nosotros
comprende inmediatamente, sin mayor esfuerzo; sin embargo, su interpretación
correcta requiere mucho tiempo de computación, con ayuda de programas muy
especializados de inteligencia artificial que realizan un complejo trabajo de análisis
en varios niveles de los que habla el texto de Marr y Poggio incluido en el capítulo
cuatro. ¿Por qué –se pregunta Hillis– esa enorme diferencia de rendimiento? En
parte, se trata de una cuestión algorítmica: probablemente los investigadores de
inteligencia artificial no han elaborado todavía programas tan sofisticados como los
que usa el cerebro para esa clase de tarea. Pero eso es solo parte de la
respuesta; el resto, y lo principal, se refiere a problemas con la arquitectura misma
de las computadoras tradicionales, que Hillis nos demuestra, con un análisis
cuantitativo, se encuentran en fundamental desventaja con respecto al cerebro.
“Podría pensarse que la razón por la que la computadora es lenta
es que sus componentes electrónicos son mucho más lentos que
los componentes biológicos del cerebro, pero no es así. Un
transistor
puede
cambiar
de
estado
en
unos
pocos
nanosegundos, más o menos un millón de veces más rápido que
el tiempo de cambio de una neurona, que se cuenta en
milisegundos. Un argumento más plausible es que el cerebro
tiene más neuronas que la computadora transistores, pero incluso
esto falla para explicar la disparidad de velocidad. Hasta donde
podemos decir, el cerebro humano tiene como 1010 neuronas,
cada una capaz de cambiar de estado no más de 1000 veces por
segundo. Así, el cerebro sería capaz de aproximadamente 1013
eventos de cambio por segundo. Una computadora digital
moderna, en contraste, puede tener hasta 109 transistores, cada
uno capaz de cambiar de estado tanto como 109 veces por
segundo. Así, el total de velocidad de cambio sería tan alta como
1018 eventos por segundo, o sea 10.000 veces mayor que el
cerebro. Así pues, la potencia computacional bruta de la
computadora sería mucho mayor que la de un ser humano. Sin
embargo, sabemos que en la realidad es justamente lo contrario.”
¿Cómo poder explicar esta tremenda discrepancia? Hillis procede a poner
el dedo en la llaga, señalando correctamente que las computadoras tradicionales
son lentas a causa de la ineficiencia de su hardware, que se explica por razones
técnicas e históricas.
“Una computadora grande moderna contiene como un metro
cuadrado
de
silicio.
Este
metro
cuadrado
contiene
aproximadamente mil millones de transistores que constituyen el
procesador y la memoria de la computadora. El punto interesante
aquí es que tanto el procesador como la memoria están hechos
del mismo material.”
Pero esto no fue siempre así. En tiempos de von Neumann, antes de la
invención de los transistores, el procesador estaba hecho de componentes de
cambio de estado relativamente rápidos y caros, mientras que la memoria estaba
constituida por componentes relativamente lentos y baratos. El diseño de dos
partes resultante procuraba mantener los caros tubos al vacío lo más activos
posibles. Este diseño de dos partes, memoria por un lado y procesador por otro,
es lo que llamamos arquitectura de von Neumann. Por un anacronismo, pues hoy
tanto la memoria como el procesador se construyen de los mismos materiales, a
saber, transistores de sicilio –sumamente baratos–, las computadoras de hoy en
día todavía se construyen según ese diseño de dos partes. Un caso más del
fenómeno histórico y biológico muy usual de que la estructura sobrevive a la
función, por ejemplo en la forma de instituciones que siguen existiendo muchos
decenios o quizá siglos más allá de las necesidades que les dieron origen.
“En una computadora von Neumann grande, casi ninguno de sus
mil millones de transistores realiza ningún proceso útil en un
instante dado. Casi todos los transistores están en la sección de
memoria de la máquina y solo unas pocas de las localidades de
memoria están activas en un determinado momento. La
arquitectura de dos partes mantiene el silicio que está dedicado al
proceso maravillosamente ocupado, pero este es solo el 2 ó 3 por
ciento del área de silicio. El otro 97 por ciento permanece
ocioso.… La mayor parte del hardware consiste en la memoria, de
modo que la mayor parte del hardware no hace nada la mayor
parte del tiempo.... Esto es lo que se llama el cuello de botella de
von Neumann .”
En contraste con esta situación, la arquitectura de la máquina de
conexiones provee un gran número de pequeñas celdas que son a la vez
procesador y memoria, integralmente conectadas entre sí. Cada celda por sí
misma es demasiado pequeña para realizar ninguna computación significativa.
Pero por otro lado, celdas múltiples están conectadas entre sí en configuraciones
variadas que dependen directamente de los datos de los problemas, por lo que
pueden ser llamadas estructuras de datos activas: no solo representan los datos,
sino que también los procesan, en forma corporativa.
Las estructuras de datos activas realizan sus actividades bajo la dirección
de una computadora anfitriona convencional que actúa "desde afuera". Esta
computadora anfitriona almacena los datos en la máquina de conexiones de forma
parecida a como un procesador ordinario almacena datos en una memoria
convencional. Pero a diferencia de lo que sucede con la arquitectura Von
Neumann,
no
se
presenta
en
este
caso
ningún
cuello
de
botella
procesador/memoria. Cada celda de la memoria hace una parte mínima del
proceso, y el conjunto de las celdas realiza todo el proceso. La computación tiene
lugar por la acción mancomunada de las celdas que forman la estructura de datos.
Siendo así que miles o incluso millones de celdas de proceso trabajan
simultáneamente en el problema, la computación procede mucho más rápido que
lo que sería posible en una máquina convencional.
6.3. Algo anda mal en la teoría
Hillis cuestiona, no ya la arquitectura de las máquinas convencionales,
sino el modelo mismo de la informática imperante. Comienza por decirnos que los
científicos de la computación han encontrado conveniente y productivo hasta
ahora realizar sus investigaciones con base en un modelo del universo
computacional que, según él, difiere mucho de los modelos del universo físico. Su
tesis fundamental es que, al crear modelos de la computación –importados
directamente de las matemáticas (recuérdese la obra de Turing)–, los informáticos
se apartaron de la tradición científica principal que corresponde a los modelos
físicos del mundo. Esto en sí mismo no tiene por qué ser incorrecto. Es probable
que lo mismo valga también decir de los historiadores y, en alguna medida, incluso
de los propios científicos sociales, porque la física no tiene por qué ser el
paradigma universal de todas las disciplinas científicas. Sin embargo, es indudable
que durante varios siglos la física ha sido considerada como el más puro modelo
de las ciencias, en el sentido de ser el ejemplo más ilustre del método científico, al
que todas las otras ciencias han procurado imitar, por muy buenas razones:
sistematicidad, rigor, eficacia del control empírico, etcétera.
Pero, en concreto, ¿qué encuentra Hillis de malo en apartarse del modelo
de la física? No es un prejuicio fisicalista ni mecanicista, porque el modelo
computacional es también mecanicista, y en último análisis todos los fenómenos
informáticos se resuelven en una base física.
Su inquietud tiene más bien que ver con cuestiones muy perentorias y
muy pragmáticas, relativas a la construcción y operación de las computadoras.
Adoptando una posición más de diseñador de computadores que de teórico de la
computación, se plantea la cuestión de que un diseñador de computadores está
constreñido por problemas muy prosaicos que no tienen ninguna contrapartida en
los modelos computacionales teóricos en boga. Por ejemplo, hay situaciones tan
perentorias como ésta: los cables cuestan más que los circuitos, el software
cuesta más que la memoria; cuando resultan necesarios para compensar la
disipación del calor, los acondicionadores de aires ocupan más espacio en el
cuarto que la computadora misma. Son cuestiones que un modelo físico de la
computación podría contemplar, pero que para el modelo basado en la máquina
de Turing pasan totalmente inadvertidas.
Nuestros modelos informáticos tradicionales son inadecuados para dar
cuenta de esas situaciones. Un modelo abstracto en general debería juzgarse por
la utilidad que tiene para inspirar el trabajo de todos los días. Los modelos, en el
fondo, son simplificaciones que nos permiten interpretar la realidad. El modelo
perfecto de la realidad sería la realidad misma, en el sentido de que
correspondería exactamente a lo que queremos modelar; pero sería un modelo
completamente inútil, en el sentido de que no lo podríamos utilizar para los fines
para los cuales creamos modelos, que tienen precisamente que ver con la
necesidad de ahorrarnos el trabajo de lidiar con la realidad de manera directa. Lo
que nos hace falta es que el modelo nos ofrezca una simplificación de la realidad,
suficientemente económica para ser manejable y suficientemente rica para ser
representativa y permitirnos hacer predicciones eficaces sobre la realidad.
Con ese criterio para juzgar un modelo, Hillis sostiene que los modelos
informáticos vigentes enfatizan los detalles incorrectos; en vez de ser una guía
para el diseño, le interponen un obstáculo, al no tomar en cuenta las cosas que
realmente interesan al constructor de computadoras y enfatizar en cambio otras
que no son importantes. Un diseñador de computadoras debe tomar en cuenta
cuestiones prosaicas que no tienen contrapartida en los elementos de los modelos
informáticos teóricos, como el tamaño de los conectores, el costo y disponibilidad
de los componentes, la distribución espacial de las partes dentro del sistema.
Comparando el modelo informático vigente con el modelo físico, Hillis nos
dice que, por ejemplo, en física hay muchas cantidades fundamentales que se
conservan, como en la ley de la conservación de la materia (recuérdese Lavoisier:
"nada se crea, nada se destruye") o de la energía (primera ley de la
termodinámica), mientras que en el modelo informático esto no sucede. Por
ejemplo, los datos pueden ser creados o destruidos sin ningún costo; no existe un
principio de conservación de la información, correspondiente a los principios de
conservación de la materia o de la energía. Esta es una diferencia fundamental
que –según el autor– va en perjuicio del modelo informático.
En el universo físico, el efecto que un acontecimiento tiene sobre otro
tiende a decrecer con la distancia y con el tiempo entre los dos acontecimientos;
pero en nuestros modelos de computación eso no se da; no importa dónde esté un
dato en la memoria, siempre será sustituible por otro dato que está en otro lugar
de la memoria, con igualdad de costo (a saber, la ejecución de una misma
instrucción –con distintos parámetros de dirección, por supuesto–. En nuestros
modelos de computación, un acontecimiento arbitrariamente pequeño puede tener
efectos enormes, como por ejemplo cuando un programa de una sola instrucción
logra borrar toda la memoria; o cuando una instrucción simple puede parar la
máquina. En computación tradicional no hay ningún análogo de la distancia: una
posición de memoria puede ser influenciada tan fácilmente como cualquiera otra.
Algo de lo que más molesta a Hillis es que dentro de la concepción
tradicional el cable ha sido idealizado como una conexión puramente instantánea;
cuando nos referimos a cables, estos aparecen nada más que como líneas en un
diagrama, donde no tiene importancia si estas líneas son largas o cortas, gruesas
o delgadas, ni tampoco tiene importancia su número. De acuerdo con esta
concepción, parecería que los cables no importaran por tener un costo
despreciable, o no ocupar lugar ni disipar energía, cosas todas inexactas. Por
supuesto, estas simplificaciones no son realistas, ni corresponden a la realidad, y
en la práctica significan simplemente que los modelos informáticos no pueden
usarse para construir computadoras.
Conforme los conmutadores se han hecho más pequeños y menos caros,
entonces hemos empezado a notar los costos de los cables dentro de la ecuación,
porque los cables van siendo ahora comparativamente más importantes que los
elementos
que
conectan:
son
más
caros
y
más
grandes,
y
ocupan
proporcionalmente más espacio que los elementos principales. Situación
paradójica, pero real; la vemos de una manera muy palpable en los chips,
relativamente muy grandes comparados con los circuitos propiamente dichos,
llenos de patas como de insecto que ocupan mucho más espacio que el propio
circuito integrado, un simple cuadrado reluciente y nítido que podemos sostener
con la punta de un dedo. Estamos descubriendo, nos anuncia Hillis, que si antes
creíamos que podíamos conectar un cable a muchos lugares, era solamente
porque en la práctica no necesitábamos conectarlo más que a muy pocos lugares.
Ante esta situación, la conclusión inevitable de Hillis es que algo anda mal en la
teoría.
6.4. La máquina de conexiones y su modelo teórico
Si la teoría informática tradicional (máquina de Turing) y la arquitectura
tradicional (computadora Von Neumann) se implican recíprocamente, la nueva
máquina de conexiones ofrece excelentes bases para integrar sobre ella una
nueva teoría de la informática. Hillis nos da en su libro los lineamientos de esa
nueva teoría que, como era de esperar dada su crítica de la teoría clásica, se
adapta a las necesidades del diseño y al modelo de la ciencia física.
Recordemos que la máquina de conexiones difiere de una memoria
convencional en tres respectos. En primer lugar, cada celda de almacenamiento
está asociada con una celda de proceso, capaz de realizar computaciones
sencillas con base en la información almacenada en la celda. En segundo lugar,
existe una red general de interconexiones que puede conectar las celdas entre sí
de acuerdo con patrones arbitrarios. En tercer lugar, existe un canal directo, de
alta capacidad, capaz de transferir datos entre la máquina de conexiones y los
aparatos periféricos, mucho más rápidamente que lo que podría hacerse por
medio de la computadora anfitriona. Con base en esos principios, es posible
formar conexiones entre las celdas de memoria procesadora por medio del
almacenamiento de punteros en esas mismas celdas. Las conexiones pueden ser
arregladas por la anfitriona, cargadas por medio del canal de entrada/salida, o
construidas dinámicamente por la propia máquina.
Un mensaje se envía a la celda apropiada especificando como dirección
desplazamientos relativos en la retícula de la memoria, del destinatario con
respecto al remitente (por ejemplo, dos hacia arriba y cinco hacia el otro lado).
Piénsese en el plano de una ciudad bien cuadriculada, como San José, Costa
Rica, o Nueva York, donde se le puede indicar a un taxista: "Vaya a un lugar que
queda de aquí dos cuadras al norte y cinco al este". Esto no especifica la ruta del
mensaje sino sólo el destino. En la máquina de conexiones no hay un taxista que
lleve el mensaje, sino una serie de vecinos que se pasan el mensaje "de mano en
mano": el remitente envía el mensaje pasándoselo a un vecino inmediato y éste
decide, con base en su dirección, la siguiente manera de encaminarlo. Para
realizar esto, el vecino modifica la dirección, incrementándola o decrementándola
como corresponda, de modo que cuando el mensaje llegue a su destino tendrá los
dos desplazamientos con valores de cero.
Ya con sólo describir este método de comunicación se puede ver que se
está recobrando aquí, para la teoría, un principio de continuidad que no estaba
presente en los modelos informáticos tradicionales. ¿Por qué es importante esto?
Es importante porque precisamente la física macroscópica (que no la cuántica, por
cierto) está basada en el principio de continuidad, según el cual hay interacciones
entre unas partículas y otras sobre una base local; es decir, cada partícula afecta
a otra que le es contigua. Este principio de continuidad está ausente del modelo
de Turing que, como se recordará, tiene una base totalmente digital o discontinua,
y en que, además, las distintas celdas de la memoria sólo pueden comunicarse
entre sí por medio de la intervención, también digital, del autómata de estados
finitos. Con la máquina de Hillis, regresamos a lo que es continuo.
Ya establecido este principio de continuidad, se sigue que entregar
mensajes requiere un tiempo proporcional a la distancia entre las celdas, que
puede llegar a ser importante. El espacio se reconstituye como continuo y además
el tiempo adquiere una importancia intrínseca, más allá de su intervención
digitalizada en los cambios de estado de los instantes cronometrados del
autómata de Turing.
No sólo se reestablece la continuidad en el espacio y el tiempo, sino
también se establece un principio, muy conforme a la realidad, que podríamos
llamar de "principio de impenetrabilidad", según el cual en un cierto momento
ciertas partes del espacio están ocupadas y no son traspasables por ninguna otra;
característicamente, se trata aquí de un principio muy semejante al principio de no
penetrabilidad de los cuerpos, básico en la física (por lo menos en sus
aproximaciones
macroscópicas).
La
impenetrabilidad
en
la
máquina
de
conexiones se explica porque cada celda tiene sólo un número finito y muy
pequeño de estados, sin capacidad para tramitar muchos mensajes al mismo
tiempo. Este principio de impenetrabilidad es importante porque impone a los
mensajes la necesidad de evitar las "presas de tráfico", o sea, la necesidad de
circunvalar una zona congestionada por la información. No hay problemas en
diseñar algoritmos que tomen en cuenta todo esto y lo hagan realidad, pero es
más fácil concebirlo como equivalente a la presencia de una métrica que tome en
cuenta toda esta situación de manera más sistemática.
La métrica es una característica de los espacios, que surge como un tema
interesante en la filosofía de las ciencias y en las ciencias en general, después del
descubrimiento de las geometrías no euclideanas. Antes de ese acontecimiento,
se daba por descontado que la línea recta era, por definición, la distancia más
corta entre dos puntos, sin ninguna otra consideración. Pero cuando existe una
diversidad de geometrías (o, lo que es lo mismo, diversidad de espacios), la
distancia más corta entre dos puntos depende de qué métrica estemos usando.
Incluso podemos decir que una cosa describe la otra: cuál sea la distancia más
corta entre dos puntos determina el tipo de geometría que utilizamos, y viceversa.
En el caso que nos ocupa, la métrica no será la misma del espacio
euclideano indefinidamente divisible, porque la continuidad de este espacio
informático es sólo relativa a la comunicación entre celdas (necesariamente
digitales), de modo que debemos hablar más bien de un métrica tipo "taxista".
Podemos definir la distancia entre dos puntos de la memoria como el tiempo de
viaje promedio entre ellos, porque lo que nos interesa es hacer llegar los
mensajes. Se introduce aquí el concepto de curvatura: la curvatura de un espacio
depende de la métrica que usemos o, con una manera alternativa de hablar, de las
fuerzas que distorsionan el espacio. Eso está presente en la explicación del taxista
que no desea seguir una determinada senda entre dos puntos "porque el tráfico
me hace ir más despacio" (como si fuera una fuerza retardataria) o bien "porque
no es un buen camino" (como si fuera un espacio corrugado). Lo interesante del
caso es que esa curvatura, métrica o espacio puede ser variable a lo largo del
recorrido: hay partes del espacio más corrugadas, o con más o menos fuerzas que
disminuyan nuestra velocidad.
Al comentar esta forma de propagación de mensajes, Hillis observa que
en un espacio celular vacío, esto es lo mismo que la métrica del taxista. La
presencia de un objeto atravesado distorsiona la métrica porque los mensajes
tienen que fluir alrededor de él. La curvatura de las trayectorias óptimas de los
mensajes (geodésicos) aumenta con la densidad de los objetos. Cuanto más lejos
estén los objetos, menor es el efecto, de modo que hay una distorsión local en la
métrica, proporcional a la densidad de objetos. Y agrega: "Esta distorsión no es la
misma que la gravedad física y no estoy sugiriendo que las causas de las dos
sean similares, pero es interesante encontrar en computación un efecto que sea
tan similar a uno de la física."
Las citas precedentes tienen una clara referencia a desarrollos de la física
contemporánea que asociamos con el nombre de Alberto Einstein. En efecto, de
acuerdo con su teoría de la relatividad generalizada, los fenómenos gravitatorios
que tanto intrigaron a Newton y que éste sólo pudo explicar postulando la
existencia de fuerzas extrañas, pueden explicarse muy elegantemente si
suponemos que las grandes masas de los cuerpos distribuidos en el universo
ejercen una influencia inmediata y local sobre el espacio que los rodea,
curveándolo –por así decirlo– en proporción a esa misma masa. También
podemos decir que la métrica de ese espacio queda variada en proporción a la
presencia de masas en el espacio local.
Un efecto importantísimo que esto tiene es que los geodésicos de la zona,
o sea, las trayectorias óptimas en ella, son diferentes según lo determine esa
métrica o curvatura. Así por ejemplo, la trayectoria cerrada de los planetas es la
forma normal del estado de movimiento de estos cuerpos, y no necesitan ninguna
fuerza, ni de gravedad ni de ninguna otra índole, para permanecer en ella. Es
interesante notar que su análisis del comportamiento de los mensajes en una
máquina de conexiones lleva a Hillis a encontrar analogías importantes de la
informática con la física relativista, a saber, la influencia que la presencia de
cuerpos en el respectivo universo tiene sobre las trayectorias óptimas.
Aquí hay otro ejemplo de analogía con la física. Imaginemos dos celdas
que están una contigua a la otra en la retícula: la que está a la izquierda comunica
preponderantemente con celdas que están en el extremo derecho del espacio,
mientras que la que está a la derecha comunica preponderantemente con celdas
que están en el extremo izquierdo. Podríamos decir que estas dos celdas están
mal colocadas y que deberían emigrar y cambiarse de posición; precisamente la
máquina de conexiones está capacitada para hacer este intercambio, cuando se
cumplen ciertas condiciones, para asegurar un funcionamiento más eficiente. Las
celdas intercambian posición lógicamente, no físicamente: esto implica una
actualización de todos los punteros recíprocos que existan con relación a esas dos
celdas; sin embargo, a pesar de ese trabajo, es un precio que vale la pena pagar
para mejorar el funcionamiento a lo largo de una duración considerable del
funcionamiento del programa.
Lo interesante de este mecanismo es que se aplica a todas las celdas y de
acuerdo con el funcionamiento interactivo que tengan. Su efecto es crear una
tendencia macroscópica a la emigración de celdas, dependiendo de sus
interconexiones, semejante a la que rige para habitantes de una ciudad en su
tendencia a migrar hacia el lugar de su trabajo o de la habitación de sus amigos.
Esto contribuirá a crear agregaciones de celdas, irá formando objetos con cierto
perfil, con cierta identidad. Es parecido al comportamiento de las partículas que
integran el mundo físico, que no se relacionan entre sí de manera simplemente
individual sino agrupándose en objetos; estos objetos más pequeños se agregan
para formar otros más grandes y así se va integrando el universo físico tal y como
lo podemos considerar en el nivel macroscópico. Normalmente vemos objetos
interactuando entre sí, en vez de celdas o moléculas o átomos interactuando entre
sí.
Esto nos lleva a una analogía muy interesante, muy reveladora, entre la
física del mundo real y la física de la máquina de conexiones. Quizás hasta
podríamos discernir interacciones fuertes e interacciones débiles entre las celdas,
como en el mundo de la física de las partículas. Así, la condición de que las celdas
que se comunican mucho entre sí tienden a unirse en racimos ofrece una también
interesante analogía con la forma en que las partículas físicas se atraen unas a
otras y llegan a formar esas aglomeraciones tan características que llamamos
cuerpos.
Lo importante no es la letra de estas leyes, sino el espíritu del modelo
como tal; el modelo sería un modelo al estilo de la física aunque las leyes fueran
diferentes. Hay que recordar que el propósito de la máquina nada tiene que ver
con la física; el propósito es ejecutar programas y, por supuesto, deben cumplirse
constreñimientos de ingeniería muy específicos: el costo de los conectores, la
necesidad de disipar el calor, el volumen de los cables, etc.
Planteadas así las cosas, Hillis confirma su esperanza en relación con una
reforma de la teoría informática, una reforma de los modelos vigentes. A pesar de
sus advertencias de que no está afirmando que estas coincidencias sean una
auténtica correspondencia de leyes, el autor presenta con estos ejemplos un
fuerte argumento en el sentido de que realmente la informática está evolucionando
hacia el establecimiento de leyes dentro de su área semejantes a las que la física
contemporánea ha descubierto en la suya propia. “ [17]
Cabe aclarar que la máquina de conexiones ya no es sólo una teoría, sino
que ya es una realidad, pues hasta las últimas noticias que se tienen, ya hay
desarrollos en este sentido, por ejemplo en el centro de investigación de los
Álamos en Estados Unidos e incluso ya existen este tipo de computadoras a nivel
comercial y que ya están empezando a sustituir a las supercomputadoras de hoy.
CONCLUSIONES
Como se pudo analizar, las computadoras de la actualidad comparten una
característica muy importante: son fabricadas bajo un concepto de arquitectura
von Neumann, la cual se originó hace ya casi 60 años.
Esta arquitectura fue la mejor solución para poder trabajar ya con un
programa que estuviera almacenado en memoria, y de ahí en adelante, los
desarrollos subsecuentes siguieron ese camino, buscando mejorar en cada
desarrollo las capacidades de procesamiento de cada producto. En este sentido,
cabe mencionar el gran desarrollo que tuvo la computación gracias a los diversos
fabricantes de computadoras y accesorios que han ido apareciendo en el mundo.
Sin menospreciar el esfuerzo que estas compañías han hecho en cuanto a
investigación y desarrollo de productos para ofrecer algo más a sus clientes, es
notorio el gran interés económico que se superpone a lo anterior, logrando con
esto, sumergir a todos sus clientes y usuarios en una tecnología que ha ido
avanzado a marchas forzadas, y que sólo logra ir satisfaciendo los requerimientos
básicos nuevos.
Así vemos, como la evolución actual de las computadoras ha sido en el
sentido del desarrollo de nuevos microprocesadores con una velocidad de reloj
cada vez mayor, con más memoria caché, con mejores técnicas de prefetch, con
una tecnología superescalar, con registros de mayor longitud, con menos y más
pequeñas instrucciones, con mejores algoritmos de manipulación de punto
flotante, con instrucciones mejoradas para manejo de gráficos en 3D, con mejoras
en el multiproceso, con más ancho de palabra, con más capacidad de memoria,
con mejores técnicas de acceso a memoria, con mejores chipsets, con nuevas y
mejores interfaces de E/S…., pero que siguen siendo en esencia arquitectura von
Neumann, prevaleciendo con esto el famoso cuello de botella.
Esto incluye también el procesamiento en paralelo, que es uno de los
caminos que están siguiendo muchos desarrollos de la actualidad, pero que
consiste en hacer trabajar varios microprocesadores a la vez, pero sin dejar de
utilizar una arquitectura de von Neumann.
Creo que es necesario que se planteen nuevas opciones de desarrollo de
plataformas de hardware, basadas en un diseño que permita obtener el máximo
rendimiento de la tecnología utilizada hoy día para fabricación de computadoras,
que
satisfaga
en
gran
medida
la
demanda
exponencial
de
recursos
computacionales de los usuarios, y que no requiera constantes modificaciones
para ajustarse al desarrollo.
BIBLIOGRAFÍA
1.- Downton A.C. (1993). Computadoras y Microprocesadores (3ª Edición). Ed. AddisonWesley Iberoamericana
2.- Mueller Scott. (1997). Upgrading & Repairing PCs (8ª Edición). Ed. QUE.
3.- Tocci Ronald J. (1993). Sistemas Digitales. Principios y Aplicaciones (5ª Edición). Ed.
Mc. Graw Hill.
4.- Yu Ytha y Marut Charles. (1992). Assembly Language Programming and Organization
of the IBM PC. Ed. Mc. Graw Hill.
5.- Hwang Kai y Briggs Fayé A. (1993). Arquitectura de Computadoras y Procesamiento
Paralelo. Ed. Mc. Graw Hill.
6.- Tremblay Jean Paul y Bunt Richard B. (1990). Introducción a la Ciencia de las
Computadoras. Enfoque Algorítmico. Ed. Mc. Graw Hill.
7.- Pfaffenberger Bryan. (1995). Diccionario para usuarios de Computadoras (5ª Edición).
Ed. QUE.
8.- Kozierok Charles M. (2000). The PC Guide Disk Edition (Versión 2.0). Basado en el
sitio web “The PC Guide” (http://www.PCGuide.com)
9.-. Revistas electrónica Pchardware (20/01/2001).
http://www.pchardware.org
10.- Diccionario en Línea de Computadoras e Internet (22/01/2001)
http://webopedia.com
11.- Sun Microsystem (12/05/2001)
http://www.sun.com
12.- Sun Microsystem en español (12/05/2001)
http://www.sun.es/tecnología
13.- Scalable Processors Architecture (19/05/2001)
http://www.sparc.com
14.- Revista Electrónica (2/06/2001)
http://www.conozcasuhardware.com
15.- Página personal del Dr. Carlos Coello. Lania. (8/06/2001)
http://veracruz.lania.mx/~ccoello/historia
16.- Página personal de J. Sabina (22/03/2001)
http://jsabinaweb.com.ar
17.- Página personal del Dr. Claudio Gutiérrez. (25/05/2001)
http://cariari.ucr.ac.cr/~claudiog/EeI.html
18.- Facultad de Ciencias de la Computación. Lab. de procesamiento paralelo (BUAP).
(1705/2001). http://parallel.cs.buap.mx/index.html
19.- Introducción a la Informática y a los microcomputadores. Información para el proyecto
REYCYT, del FUNDACYT y SENACYT. (12/06/2001)
http://www.espe.edu.ec/cursos-e/sistemas/temas-basicos/temas-basicos.htm
20.- Página personal de Juan Herrerías Rey. (15/06/2001).
http://personal.redestb.es/juanhr/placab1.htm
21.-Página de Tutoriales. (18/06/2001)
http://abcdatos.com/tutoriales/hardware.html
22.- Página electrónica de Cyberport. (12/06/2001)
http://www.cyberport.com.pe/placas.htm
23.- Página de noticias. (Pentium III). (21/06/2001)
www.conozcasuhardware.com/articulo/notic8a.htm
Descargar