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