Documentos de Académico
Documentos de Profesional
Documentos de Cultura
com
ESTRUCTURADO
ORGANIZACIÓN DE COMPUTADORAS
SEXTA EDICION
Esta página se dejó en blanco intencionalmente
ESTRUCTURADO
ORGANIZACIÓN DE COMPUTADORAS
SEXTA EDICION
ANDREW S. TANENBAUM
Vrije Universiteit
Amsterdam, Holanda
TODD AUSTIN
Universidad de Michigan
Ann Arbor, Michigan, Estados Unidos
Directora editorial, ECS: Marcia Horton Editora
ejecutiva: Tracy Johnson (Dunkelberger) Editora
asociada: Carole Snyder
Directora de marketing: Christy Lesko
Directora de marketing: Yez Alayan
Coordinadora senior de marketing: Kathryn Ferranti
Directora de producción: Erin Gregg
Editor jefe: Jeff Holcomb
Editor Gerente Asociado: Robert Engelhardt
Manufactura Comprador: Lisa McDowell Director
de Arte: Anthony Gemmellaro
Ilustrador de portada: Jason Consalvo
Gerente, Derechos y Permisos: Michael Joyce Editor
de Medios: Daniel Sandin
Gerente de proyectos de medios: Renata Butera
Muchas de las designaciones de fabricantes y vendedores para distinguir sus productos se reclaman como marcas
comerciales. Cuando esas designaciones aparecen en este libro, y el editor tenía conocimiento de un reclamo de marca
registrada, las designaciones se han impreso en mayúsculas iniciales o en mayúsculas.
QA76.6.T38 2013
005.1 - dc23
2012021627
10 9 8 7 6 5 4 3 2 1
TA: A Roberta, que me hizo espacio (y tiempo) para terminar este proyecto.
Esta página se dejó en blanco intencionalmente
CONTENIDO
PREFACIO xix
1 INTRODUCCIÓN
2 SISTEMAS DE COMPUTADORA
2.1 PROCESADORES 55
2.1.1 Organización de la CPU 56
2.1.2 Ejecución de instrucciones 58
2.1.3 RISC frente a CISC 62
2.1.4 Principios de diseño para computadoras modernas 63
2.1.5 Paralelismo a nivel de instrucción 65
2.1.6 Paralelismo a nivel de procesador 69
4 EL NIVEL DE MICROARQUITECTURA
5 EL CONJUNTO DE INSTRUCCIONES
6 EL SISTEMA OPERATIVO
9 BIBLIOGRAFÍA 659
ÍNDICE 747
Esta página se dejó en blanco intencionalmente
PREFACIO
Las primeras cinco ediciones de este libro se basaron en la idea de que una computadora
puede considerarse como una jerarquía de niveles, cada uno de los cuales realiza una función
bien definida. Este concepto fundamental es tan válido hoy como lo era cuando salió la primera
edición, por lo que se ha mantenido como base para la sexta edición. Como en las primeras cinco
ediciones, el nivel de lógica digital, el nivel de microarquitectura, el nivel de arquitectura del
conjunto de instrucciones, el nivel de máquina del sistema operativo y el nivel de lenguaje
ensamblador se discuten en detalle.
Aunque se ha mantenido la estructura básica, esta sexta edición contiene muchos
cambios, tanto pequeños como grandes, que la actualizan en la cambiante industria
informática. Por ejemplo, las máquinas de ejemplo utilizadas se han actualizado. Los
ejemplos actuales son el Intel Core i7, el Texas Instrument OMAP4430 y el Atmel
ATmega168. El Core i7 es un ejemplo de una CPU popular utilizada en computadoras
portátiles, computadoras de escritorio y servidores. El OMAP4430 es un ejemplo de
una CPU popular basada en ARM, ampliamente utilizada en teléfonos inteligentes y
tabletas.
Aunque probablemente nunca haya oído hablar del microcontrolador ATmega168,
probablemente haya interactuado con uno muchas veces. El microcontrolador ATmega168
basado en AVR se encuentra en muchos sistemas integrados, que van desde radios reloj hasta
hornos microondas. El interés en los sistemas embebidos está aumentando, y el ATmega168 se
usa ampliamente debido a su costo extremadamente bajo (centavos), la gran cantidad de
software y periféricos para él, y la gran cantidad de programadores disponibles. La cantidad de
ATmega168 en el mundo ciertamente excede la cantidad de CPU Pentium y Core i3, i5 e i7 en
órdenes de magnitud. El ATmega168s también es el procesador que se encuentra en la
computadora integrada de placa única Arduino, un popular
xix
xx PREFACIO
sistema de aficionado diseñado en una universidad italiana para costar menos que una cena en una
pizzería.
A lo largo de los años, muchos profesores que enseñan en el curso han solicitado en
repetidas ocasiones material sobre programación en lenguaje ensamblador. Con la sexta edición,
ese material ahora está disponible en el sitio web del libro (ver más abajo), donde se puede
expandir fácilmente y mantenerlo siempre verde. El lenguaje ensamblador elegido es el 8088, ya
que es una versión simplificada del enormemente popular conjunto de instrucciones iA32
utilizado en el procesador Core i7. Podríamos haber usado el conjunto de instrucciones ARM o
AVR o alguna otra ISA de la que casi nadie ha oído hablar, pero como herramienta de motivación,
el 8088 es una mejor opción ya que un gran número de estudiantes tiene una CPU compatible
con 8088 en casa. El Core i7 completo es demasiado complejo para que los estudiantes lo
entiendan en detalle. El 8088 es similar pero mucho más simple.
Además, el Core i7, que se trata con gran detalle en esta edición del libro, es capaz de
ejecutar programas 8088. Sin embargo, dado que la depuración del código ensamblador es muy
difícil, hemos proporcionado un conjunto de herramientas para aprender la programación en
lenguaje ensamblador, incluido un ensamblador 8088, un simulador y un trazador. Estas
herramientas se proporcionan para Windows, UNIX y Linux. Las herramientas están en el sitio
web del libro.
El libro se ha vuelto más largo a lo largo de los años (la primera edición tenía 443
páginas; esta tiene 769 páginas). Tal expansión es inevitable a medida que se
desarrolla un tema y se sabe más sobre él. Como resultado, cuando el libro se usa
para un curso, es posible que no sea posible terminarlo en un solo curso (por ejemplo,
en un sistema trimestral). Un posible enfoque sería hacer todos los Capítulos. 1, 2 y 3,
la primera parte del Cap. 4 (hasta la Sec. 4.4 inclusive) y el Cap. 5 como mínimo. El
tiempo restante podría llenarse con el resto del Cap. 4 y partes de los Capítulos. 6, 7 y
8, según los intereses del instructor y los estudiantes.
A continuación, se muestra un resumen capítulo por capítulo de los principales cambios desde la
quinta edición. El Capítulo 1 todavía contiene una descripción histórica de la arquitectura de la
computadora, señalando cómo llegamos a donde estamos ahora y cuáles fueron los hitos en el camino.
Muchos estudiantes se sorprenderán al saber que las computadoras más poderosas del mundo en la
década de 1960, que costaban millones de dólares estadounidenses, tenían mucho menos del 1 por
ciento de la potencia informática de sus teléfonos inteligentes. Se discute el espectro ampliado de
computadoras que existe hoy en día, incluidos FPGA, teléfonos inteligentes, tabletas y consolas de
juegos. Se presentan nuestras tres nuevas arquitecturas de ejemplo (Core i7, OMAP4430 y ATmega168).
sin ningún tipo de experiencia en hardware podrá comprender, en principio, cómo funciona una
computadora moderna. Proporcionamos nuevo material en arreglos de puertas programables en
campo (FPGA), tejidos de hardware programables que reducen los costos de diseño de nivel de
puerta a gran escala hasta donde se utilizan ampliamente en el aula hoy en día. Las tres nuevas
arquitecturas de ejemplo se describen aquí en un alto nivel.
El Capítulo 4 siempre ha sido popular por explicar cómo funciona realmente una
computadora, por lo que la mayor parte no ha cambiado desde la quinta edición. Sin
embargo, hay nuevas secciones que discuten el nivel de microarquitectura del Core i7, el
OMAP4430 y el ATmega168.
Los capítulos 5 y 6 se han actualizado utilizando las nuevas arquitecturas de ejemplo, en
particular con nuevas secciones que describen los conjuntos de instrucciones ARM y AVR. El
Capítulo 6 usa Windows 7 en lugar de Windows XP como ejemplo.
El capítulo 7, sobre programación en lenguaje ensamblador, se mantiene prácticamente sin cambios desde la
quinta edición.
El Capítulo 8 ha sido objeto de muchas revisiones para reflejar los nuevos desarrollos en el
campo de la computación paralela. Se incluyen nuevos detalles sobre la arquitectura de
multiprocesador Core i7, y la arquitectura de GPU de propósito general NVIDIA Fermi se describe
en detalle. Finalmente, las secciones de supercomputadoras BlueGene y Red Storm se han
actualizado para reflejar las actualizaciones recientes de estas enormes máquinas.
El capítulo 9 ha cambiado. Las lecturas sugeridas se han trasladado al sitio web, por lo que el
nuevo Cap. 9 contiene solo las referencias citadas en el libro, muchas de las cuales son nuevas. La
organización informática es un campo dinámico.
Los apéndices A y B no han cambiado desde la última vez. Los números binarios y los
números de punto flotante no han cambiado mucho en los últimos años. El Apéndice C, sobre
programación en lenguaje ensamblador, fue escrito por el Dr. Evert Wattel de la Vrije Universiteit,
Amsterdam. El Dr. Wattel tiene muchos años de experiencia enseñando a los estudiantes a
utilizar estas herramientas. Nuestro agradecimiento a él por escribir este apéndice. En gran
medida no ha cambiado desde la quinta edición, pero las herramientas están ahora en el sitio
web en lugar de en un CD-ROM incluido con el libro.
Además de las herramientas en lenguaje ensamblador, el sitio web también contiene un simulador
gráfico que se utilizará junto con el Cap. 4. Este simulador fue escrito por el Prof. Richard Salter del
Oberlin College. Los estudiantes pueden usarlo para ayudar a comprender los principios que se
analizan en este capítulo. Nuestro agradecimiento a él por proporcionar este software.
El sitio web, con las herramientas, etc., se encuentra en
http://www.pearsonhighered.com/tanenbaum
Desde allí, haga clic en el sitio web complementario de este libro y seleccione la página que está
buscando. Los recursos para estudiantes incluyen:
Los recursos del instructor requieren una contraseña. Los instructores deben comunicarse con su
representante de Pearson Education para obtener uno.
Varias personas han leído (partes de) el manuscrito y han proporcionado
sugerencias útiles o han sido útiles de otras formas. En particular, nos gustaría
agradecer a Anna Austin, Mark Austin, Livio Bertacco, Valeria Bertacco, Debapriya
Chatterjee, Jason Clemons, Andrew DeOrio, Joseph Greathouse y Andrea
Pellegrini.
Las siguientes personas revisaron el manuscrito y sugirieron cambios: Jason
D. Bakos (Universidad de Carolina del Sur), Bob Brown (Universidad Estatal Politécnica
del Sur), Andrew Chen (Universidad Estatal de Minnesota, Moorhead), J. Archer Harris
(Universidad James Madison), Susan Krucke (Universidad James Madison), A. Yavuz
Oruc (Universidad de Maryland), Frances Marsh (Jamestown Community College) y Kris
Schindler (Universidad de Buffalo). Nuestro agradecimiento a ellos.
Varias personas ayudaron a crear nuevos ejercicios. Ellos son: Byron A. Jeff
(Clayton University), Laura W. McFall (DePaul University), Taghi M. Mostafavi
(University of North Carolina en Charlotte) y James Nystrom (Ferris State University).
Una vez más, agradecemos enormemente la ayuda.
Nuestra editora, Tracy Johnson, siempre ha sido de gran ayuda de muchas maneras,
grandes y pequeñas, además de ser muy paciente con nosotros. Se agradeció mucho la ayuda de
Carole Snyder en la coordinación de las diversas personas involucradas en el proyecto. Bob
Englehardt hizo un gran trabajo con la producción.
Yo (AST) me gustaría agradecer a Suzanne una vez más por su amor y paciencia. Nunca termina, ni
siquiera después de 21 libros. Barbara y Marvin siempre son una alegría y ahora saben lo que hacen los
profesores para ganarse la vida. Aron pertenece a la próxima generación: niños que son grandes
usuarios de computadoras antes de llegar a la guardería. Nathan no ha llegado tan lejos todavía, pero
después de que descubre cómo caminar, el iPad es el siguiente.
Finalmente, yo (TA) quiero aprovechar esta oportunidad para agradecer a mi suegra
Roberta, quien me ayudó a encontrar un tiempo de calidad para trabajar en este libro. La
mesa de su comedor en Bassano Del Grappa, Italia, tenía la cantidad justa de soledad,
refugio y vino para realizar esta importante tarea.
ANDREW S. TANENBAUM
TODD AUSTIN
ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA
Esta página se dejó en blanco intencionalmente
1
INTRODUCCIÓN
Una computadora digital es una máquina que puede hacer trabajo para las personas siguiendo las
instrucciones que se le dan. Una secuencia de instrucciones que describen cómo realizar una
determinada tarea se denomina programa. Los circuitos electrónicos de cada computadora pueden
reconocer y ejecutar directamente un conjunto limitado de instrucciones simples en las que todos sus
programas deben convertirse antes de que puedan ejecutarse. Estas instrucciones básicas rara vez son
mucho más complicadas que
Juntas, las instrucciones primitivas de una computadora forman un lenguaje en el que las
personas pueden comunicarse con la computadora. Tal lenguaje se llama Lenguaje de máquina.
Las personas que diseñan una nueva computadora deben decidir qué instrucciones incluir en su
lenguaje de máquina. Por lo general, intentan hacer que las instrucciones primitivas sean lo más
simples posible de acuerdo con el uso previsto de la computadora y los requisitos de
rendimiento, a fin de reducir la complejidad y el costo de los componentes electrónicos
necesarios. Debido a que la mayoría de los lenguajes de máquina son tan simples, es difícil y
tedioso para la gente usarlos.
Esta simple observación, a lo largo del tiempo, ha llevado a una forma de estructurar las
computadoras como una secuencia de abstracciones, cada abstracción construyendo sobre la
1
2 INTRODUCCIÓN CAP. 1
Por debajo de eso. De esta forma, se puede dominar la complejidad y diseñar sistemas
informáticos de forma sistemática y organizada. A este enfoque lo llamamos organización
informática estructurada y le pusieron el nombre al libro. En la siguiente sección
describiremos lo que queremos decir con este término. Después de eso, veremos algunos
desarrollos históricos, el estado del arte y algunos ejemplos importantes.
Como se mencionó anteriormente, existe una gran brecha entre lo que es conveniente para las
personas y lo que es conveniente para las computadoras. La gente quiere hacer X, pero las
computadoras solo pueden hacer Y. Esto genera un problema. El objetivo de este libro es explicar cómo
se puede resolver este problema.
El problema se puede atacar de dos maneras: ambas implican diseñar un nuevo conjunto de
instrucciones que sea más conveniente para las personas que el conjunto de instrucciones
integradas de la máquina. En conjunto, estas nuevas instrucciones también forman un lenguaje,
que llamaremos L1, así como las instrucciones integradas de la máquina forman un lenguaje, que
llamaremos L0. Los dos enfoques difieren en la forma en que la computadora ejecuta los
programas escritos en L1, que, después de todo, solo puede ejecutar programas escritos en su
lenguaje de máquina, L0.
Un método para ejecutar un programa escrito en L1 es primero reemplazar cada
instrucción en él por una secuencia equivalente de instrucciones en L0. El programa
resultante consta completamente de instrucciones L0. Luego, la computadora ejecuta el
nuevo programa L0 en lugar del antiguo programa L1. Esta técnica se llama traducción.
La otra técnica es escribir un programa en L0 que toma programas en L1 como
datos de entrada y los ejecuta examinando cada instrucción por turno y ejecutando la
secuencia equivalente de instrucciones L0 directamente. Esta técnica no requiere
generar primero un nuevo programa en L0. Se llama interpretación y el programa
que lo lleva a cabo se denomina Interprete.
La traducción y la interpretación son similares. En ambos métodos, la computadora
lleva a cabo instrucciones en L1 ejecutando secuencias equivalentes de instrucciones en L0.
La diferencia es que, en la traducción, todo el programa L1 se convierte primero en un
programa L0, el programa L1 se desecha y luego el nuevo programa L0 se carga en la
memoria de la computadora y se ejecuta. Durante la ejecución, el programa L0 recién
generado se está ejecutando y tiene el control de la computadora.
En interpretación, después de examinar y decodificar cada instrucción L1, se lleva a cabo
inmediatamente. No se genera ningún programa traducido. Aquí, el intérprete tiene el control de
la computadora. Para él, el programa L1 son solo datos. Ambos métodos, y cada vez más, una
combinación de los dos, se utilizan ampliamente.
SEGUNDO. 1.1 ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA 3
Para que la traducción o la interpretación sean prácticas, los idiomas L0 y L1 no deben ser
"demasiado" diferentes. Esta restricción a menudo significa que L1, aunque es mejor que L0, aún
estará lejos de ser ideal para la mayoría de las aplicaciones. Este resultado quizás sea
desalentador a la luz del propósito original de crear L1: aliviar al programador de la carga de
tener que expresar algoritmos en un lenguaje más adecuado para las máquinas que para las
personas. Sin embargo, la situación no es desesperada.
El enfoque obvio es inventar otro conjunto de instrucciones más orientado a las
personas y menos a las máquinas que L1. Este tercer conjunto también forma un
lenguaje, al que llamaremos L2 (y con la máquina virtual M2). La gente puede escribir
programas en L2 como si realmente existiera una máquina virtual con L2 como
lenguaje de máquina. Estos programas pueden ser traducidos a L1 o ejecutados por
un intérprete escrito en L1.
La invención de toda una serie de lenguajes, cada uno más conveniente que sus
predecesores, puede continuar indefinidamente hasta que finalmente se logre uno
adecuado. Cada idioma usa su predecesor como base, por lo que podemos ver una
computadora que usa esta técnica como una serie de capas o niveles, uno encima del otro,
como se muestra en la Fig. 1-1. El idioma o nivel más bajo es el más simple y el idioma o
nivel más alto es el más sofisticado.
Existe una relación importante entre un lenguaje y una máquina virtual. Cada máquina
tiene un lenguaje de máquina, que consta de todas las instrucciones que la máquina puede
ejecutar. En efecto, una máquina define un idioma. De manera similar, un lenguaje define
una máquina, es decir, la máquina que puede ejecutar todos los programas escritos en el
lenguaje. Por supuesto, la máquina definida por cierto lenguaje puede ser enormemente
complicada y costosa de construir directamente a partir de circuitos electrónicos, pero
podemos imaginarla de todos modos. Una máquina con C o C ++ o Java como lenguaje de
máquina sería realmente compleja, pero podría construirse utilizando la tecnología actual.
Sin embargo, hay una buena razón para no construir una computadora de este tipo: no
sería rentable en comparación con otras técnicas. El simple hecho de ser factible no es
suficiente: un diseño práctico también debe ser rentable.
En cierto sentido, una computadora con norte los niveles se pueden considerar como norte
diferentes máquinas virtuales, cada una con un lenguaje de máquina diferente. Usaremos los términos
4 INTRODUCCIÓN CAP. 1
Los programas en Ln
son interpretados por
Máquina virtual Mn, con un intérprete corriendo
Nivel n
lenguaje máquina Ln en una máquina inferior,
o se traducen al lenguaje
de máquina de una
...
máquina inferior
Los programas en L1
son interpretados por
un intérprete que se ejecuta
Máquina virtual M1, con
Nivel 1 en M0, o se traducen a L0
lenguaje de máquina L1
'' nivel '' y '' máquina virtual '' indistintamente. Sin embargo, tenga en cuenta que,
como muchos términos en informática, "máquina virtual" también tiene otros
significados. Veremos otro de estos más adelante en este libro. Solo los programas
escritos en lengua L0 pueden ser ejecutados directamente por los circuitos
electrónicos, sin necesidad de intervenir traducción o interpretación. Programas
escritos en L1, L2, ... L norte debe ser interpretado por un intérprete de un nivel
inferior o traducido a otro idioma correspondiente a un nivel inferior.
Una persona que escribe programas para el nivel. norte La máquina virtual no
necesita conocer los intérpretes y traductores subyacentes. La estructura de la
máquina asegura que estos programas se ejecutarán de alguna manera. No tiene
ningún interés real si se llevan a cabo paso a paso por un intérprete que, a su vez,
también lo hace otro intérprete, o si se llevan a cabo directamente por los circuitos
electrónicos. El mismo resultado aparece en ambos casos: los programas se ejecutan.
La mayoría de los programadores que utilizan norte- La máquina de nivel está interesada sólo en
el nivel superior, el que menos se parece al lenguaje de máquina en la parte inferior. Sin embargo, las
personas interesadas en comprender cómo funciona realmente una computadora deben estudiar todos
los niveles. Las personas que diseñan nuevas computadoras o nuevos niveles también deben estar
familiarizadas con niveles distintos al superior. Los conceptos y técnicas de construcción de máquinas
como una serie de niveles y los detalles de los niveles en sí forman el tema principal de este libro.
SEGUNDO. 1.1 ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA 5
La mayoría de las computadoras modernas constan de dos o más niveles. Existen máquinas
con hasta seis niveles, como se muestra en la Fig. 1-2. El nivel 0, en la parte inferior, es el
verdadero hardware de la máquina. Sus circuitos llevan a cabo los programas en lenguaje
máquina del nivel 1. En aras de la integridad, debemos mencionar la existencia de otro nivel más
por debajo de nuestro nivel 0. Este nivel, no se muestra en la figura 1-2 porque cae dentro del
ámbito de la ingeniería eléctrica (y, por lo tanto, está fuera del alcance de este libro), se llama el
nivel de dispositivo. En este nivel, el diseñador ve transistores individuales, que son las
primitivas de nivel más bajo para los diseñadores de computadoras. Si uno pregunta como
los transistores funcionan adentro, eso nos lleva a la física del estado sólido.
Traducción (compilador)
Traducción (ensamblador)
Hardware
Figura 1-2. Una computadora de seis niveles. El método de apoyo para cada nivel se
indica debajo (junto con el nombre del programa de apoyo).
En el nivel más bajo que estudiaremos, el nivel de lógica digital, los objetos interesantes se
llaman puertas. Aunque se construyen a partir de componentes analógicos, como transistores, las
puertas se pueden modelar con precisión como dispositivos digitales. Cada puerta tiene una o más
entradas digitales (señales que representan 0 o 1) y calcula como salida alguna función simple de estas
entradas, como AND u OR. Cada puerta está compuesta como máximo por un puñado de transistores.
Se puede combinar una pequeña cantidad de puertas para formar una memoria de 1 bit, que puede
almacenar un 0 o un 1. Las memorias de 1 bit se pueden combinar en grupos de (por ejemplo) 16, 32 o
64 para formar registros. Cada Registrarse puede contener un solo binario
6 INTRODUCCIÓN CAP. 1
número hasta un máximo. Gates también se puede combinar para formar el motor
informático principal. Examinaremos las puertas y el nivel lógico digital en detalle en el
Cap. 3.
El siguiente nivel es el nivel de microarquitectura. En este nivel, vemos una colección
de (típicamente) de 8 a 32 registros que forman una memoria local y un circuito llamado
ALU (Unidad Aritmética Lógica), que es capaz de realizar operaciones aritméticas
simples. Los registros están conectados a la ALU para formar un Ruta de datos, sobre
el que fluyen los datos. La operación básica de la ruta de datos consiste en seleccionar
uno o dos registros, hacer que la ALU opere en ellos (por ejemplo, sumarlos) y
almacenar el resultado en algún registro.
En algunas máquinas, el funcionamiento de la ruta de datos está controlado por un programa
llamado microprograma. En otras máquinas, la ruta de datos está controlada directamente por
hardware. En las primeras ediciones de este libro, llamábamos a este nivel el "nivel de
microprogramación", porque en el pasado casi siempre era un intérprete de software. Dado que la ruta
de datos ahora a menudo (parcialmente) está controlada directamente por hardware, cambiamos el
nombre a "nivel de microarquitectura" para reflejar esto.
En máquinas con control de software de la ruta de datos, el microprograma es un
intérprete de las instrucciones en el nivel 2. Busca, examina y ejecuta instrucciones una por
una, utilizando la ruta de datos para hacerlo. Por ejemplo, para un AGREGAR instrucción, la
instrucción sería recuperada, sus operandos localizados y llevados a registros, la suma
calculada por la ALU, y finalmente el resultado enrutado de regreso al lugar al que
pertenece. En una máquina con control cableado de la ruta de datos, se llevarían a cabo
pasos similares, pero sin un programa almacenado explícito para controlar la
interpretación de las instrucciones de nivel 2.
Llamaremos al nivel 2 el Conjunto de instrucciones Nivel de arquitectura (nivel ISA). Cada
El fabricante de computadoras publica un manual para cada una de las computadoras que vende,
titulado "Manual de referencia del lenguaje de la máquina" o "Principios de funcionamiento de la
computadora Western Wombat Modelo 100X" o algo similar. Estos manuales tratan realmente
sobre el nivel ISA, no sobre los niveles subyacentes. Cuando describen el conjunto de
instrucciones de la máquina, de hecho están describiendo las instrucciones llevadas a cabo
interpretativamente por el microprograma o los circuitos de ejecución del hardware. Si un
fabricante de computadoras proporciona dos intérpretes para una de sus máquinas,
interpretando dos niveles ISA diferentes, deberá proporcionar dos manuales de referencia en
"lenguaje de máquina", uno para cada intérprete.
El siguiente nivel suele ser un nivel híbrido. La mayoría de las instrucciones en su idioma
también están en el nivel ISA. (No hay ninguna razón por la que una instrucción que aparece en
un nivel no pueda estar presente también en otros niveles). Además, hay un conjunto de nuevas
instrucciones, una organización de memoria diferente, la capacidad de ejecutar dos o más
programas al mismo tiempo y varios otras características. Existe más variación entre los diseños
del nivel 3 que entre los del nivel 1 o del nivel 2.
Las nuevas facilidades agregadas en el nivel 3 son realizadas por un intérprete que se
ejecuta en el nivel 2, que históricamente se ha llamado sistema operativo. Esas instrucciones de
nivel 3 que son idénticas a las de nivel 2 son ejecutadas directamente por el microprograma.
SEGUNDO. 1.1 ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA 7
(o control cableado), no por el sistema operativo. En otras palabras, algunas de las instrucciones
de nivel 3 son interpretadas por el sistema operativo y algunas son interpretadas directamente
por el microprograma (o control cableado). Esto es lo que entendemos por nivel "híbrido". A lo
largo de este libro llamaremos a este nivel el sistema operativo
nivel de la máquina tem.
Hay una ruptura fundamental entre los niveles 3 y 4. Los tres niveles más bajos no están
diseñados para que los utilice el programador medio de variedades de jardín. En cambio, están
destinados principalmente a ejecutar los intérpretes y traductores necesarios para apoyar los
niveles superiores. Estos intérpretes y traductores están escritos por personas llamadas
programadores de sistemas que se especializan en diseñar e implementar nuevas máquinas
virtuales. Los niveles 4 y superiores están destinados al programador de aplicaciones con un
problema que resolver.
Otro cambio que se produce en el nivel 4 es el método mediante el cual se apoyan los
niveles superiores. Los niveles 2 y 3 siempre se interpretan. Los niveles 4, 5 y superiores suelen
estar respaldados por la traducción, aunque no siempre.
Otra diferencia más entre los niveles 1, 2 y 3, por un lado, y los niveles
4, 5 y superior, por otro lado, es la naturaleza del lenguaje proporcionado. Los lenguajes de máquina de
los niveles 1, 2 y 3 son numéricos. Los programas en ellos consisten en series largas de números, que
están bien para las máquinas pero son malos para las personas. Comenzando en el nivel
4, los idiomas contienen palabras y abreviaturas significativas para las personas.
El nivel 4, el nivel de lenguaje ensamblador, es realmente una forma simbólica para uno de los
lenguajes subyacentes. Este nivel proporciona un método para que las personas escriban programas
para los niveles 1, 2 y 3 en una forma que no sea tan desagradable como los propios lenguajes de las
máquinas virtuales. Los programas en lenguaje ensamblador se traducen primero al nivel 1,
2 o 3 idiomas y luego interpretado por la máquina virtual o real apropiada. El
programa que realiza la traducción se llama ensamblador.
El nivel 5 generalmente consiste en lenguajes diseñados para ser utilizados por
programadores de aplicaciones con problemas que resolver. A estos lenguajes se les suele llamar
Idiomas de alto nivel. Existen literalmente cientos. Algunos de los más conocidos son C, C ++,
Java, Perl, Python y PHP. Los programas escritos en estos idiomas generalmente son traducidos
al nivel 3 o al nivel 4 por traductores conocidos como compiladores, aunque en ocasiones se
interpretan en su lugar. Los programas en Java, por ejemplo, generalmente se traducen primero
a un lenguaje similar a ISA llamado código de bytes de Java, que luego se interpreta.
En resumen, la clave para recordar es que las computadoras están diseñadas como
una serie de niveles, cada uno construido sobre sus predecesores. Cada nivel representa
una abstracción distinta, con diferentes objetos y operaciones presentes. Al diseñar y
analizar computadoras de esta manera, podemos suprimir temporalmente los detalles
irrelevantes y así reducir un tema complejo a algo más fácil de entender.
8 INTRODUCCIÓN CAP. 1
La invención de la microprogramación
Las primeras computadoras digitales, allá por la década de 1940, tenían solo dos
niveles: el nivel ISA, en el que se realizaba toda la programación, y el nivel de lógica digital,
que ejecutaba estos programas. Los circuitos del nivel lógico digital eran complicados,
difíciles de entender y construir, y poco fiables.
En 1951, Maurice Wilkes, un investigador de la Universidad de Cambridge, sugirió
diseñar una computadora de tres niveles para simplificar drásticamente el hardware y
así reducir la cantidad de tubos de vacío (no confiables) necesarios (Wilkes,
1951). Esta máquina iba a tener incorporado un intérprete inmutable (el microprograma),
cuya función era ejecutar programas de nivel ISA por interpretación. Debido a que el
hardware ahora solo tendría que ejecutar microprogramas, que tienen un conjunto de
instrucciones limitado, en lugar de programas de nivel ISA, que tienen un conjunto de
instrucciones mucho más grande, se necesitarían menos circuitos electrónicos. Debido a
que los circuitos electrónicos se fabricaron a partir de tubos de vacío, tal simplificación
prometía reducir el número de tubos y, por lo tanto, mejorar la confiabilidad (es decir, el
número de choques por día).
Algunas de estas máquinas de tres niveles se construyeron durante la década de 1950. Se
construyeron más durante la década de 1960. En 1970 dominaba la idea de que el nivel ISA fuera
interpretado por un microprograma, en lugar de hacerlo directamente por la electrónica. Todas las
máquinas más importantes del momento lo usaban.
En estos primeros años, la mayoría de las computadoras eran de "taller abierto", lo que
significaba que el programador tenía que operar la máquina personalmente. Junto a cada
máquina había una hoja de registro. Un programador que desea ejecutar un programa se
registró por un período de tiempo, digamos el miércoles por la mañana de 3 a 5 SOY ( a muchos
programadores les gustaba trabajar cuando había silencio en la sala de máquinas). Cuando llegó
el momento, el programador se dirigió a la sala de máquinas con una baraja de tarjetas
perforadas de 80 columnas (un medio de entrada temprano) en una mano y un lápiz afilado en la
otra. Al llegar a la sala de computadoras, empujó suavemente al programador anterior hacia la
puerta y se hizo cargo de la computadora.
Si el programador quería ejecutar un programa FORTRAN, eran necesarios los
siguientes pasos:
*DATOS
Datos
tarjetas
*FIN
Figura 1-3. Un trabajo de muestra para el sistema operativo FMS.
programa '' instrucción. Un nivel con solo dos instrucciones no era un gran nivel, pero era
un comienzo en esa dirección.
En los años siguientes, los sistemas operativos se volvieron cada vez más sofisticados. Se
agregaron nuevas instrucciones, instalaciones y características al nivel ISA hasta que comenzó a
tomar la apariencia de un nuevo nivel. Algunas de las instrucciones de este nuevo nivel eran
idénticas a las instrucciones del nivel ISA, pero otras, en particular las instrucciones de entrada /
salida, eran completamente diferentes. Las nuevas instrucciones a menudo se conocían como
macros del sistema operativo o llamadas de supervisor. El término habitual ahora es llamada al sistema.
Los sistemas operativos también se desarrollaron de otras formas. Los primeros leían mazos
de cartas y la salida impresa en la impresora de línea. Esta organización era conocida como
sistema por lotes. Por lo general, hubo una espera de varias horas entre el momento en que se
envió un programa y el momento en que estuvieron listos los resultados. Desarrollar software
fue difícil en esas circunstancias.
A principios de la década de 1960, los investigadores de Dartmouth College, MIT y otros lugares
desarrollaron sistemas operativos que permitían a los programadores (múltiples) comunicarse
directamente con la computadora. En estos sistemas, los terminales remotos se conectaban a la
computadora central a través de líneas telefónicas. La computadora se compartió entre muchos
usuarios. Un programador podría escribir un programa y obtener los resultados mecanografiados casi
de inmediato, en la oficina, en el garaje de su casa o en cualquier lugar donde se encuentre la terminal.
Estos sistemas fueron llamados sistemas de tiempo compartido.
Nuestro interés en los sistemas operativos está en aquellas partes que interpretan las
instrucciones y características presentes en el nivel 3 y no presentes en el nivel ISA más que en los
aspectos de tiempo compartido. Aunque no lo enfatizaremos, debe tener en cuenta que los sistemas
operativos hacen más que simplemente interpretar características agregadas al nivel ISA.
Una vez que la microprogramación se hizo común (en 1970), los diseñadores se dieron cuenta de
que podían agregar nuevas instrucciones simplemente extendiendo el microprograma. En otras
palabras, podrían agregar "hardware" (nuevas instrucciones de la máquina) mediante programación.
12 INTRODUCCIÓN CAP. 1
Esta revelación condujo a una explosión virtual en los conjuntos de instrucciones de las máquinas, ya
que los diseñadores compitieron entre sí para producir conjuntos de instrucciones mejores y más
grandes. Muchas de estas instrucciones no eran esenciales en el sentido de que su efecto pudiera
lograrse fácilmente mediante instrucciones existentes, pero a menudo eran un poco más rápidas que
una secuencia de instrucciones existentes. Por ejemplo, muchas máquinas tenían una instrucción
Cª(INCrement) que sumaba 1 a un número. Dado que estas máquinas también tenían un
AGREGAR instrucción, tener una instrucción especial para sumar 1 (o sumar 720, para el caso)
no era necesario. sin embargo, el C ª era generalmente un poco más rápido que el
AGREGAR, así que lo incluyeron.
Por la misma razón, se agregaron muchas otras instrucciones al microprograma. Estos
a menudo incluyen
Además, una vez que los diseñadores de máquinas vieron lo fácil que era agregar nuevas
instrucciones, comenzaron a buscar otras características para agregar a sus microprogramas.
Algunos ejemplos de estas adiciones incluyen
2. Funciones para permitir que los programas se muevan en la memoria después de que hayan
comenzado a ejecutarse (instalaciones de reubicación).
3. Interrumpa los sistemas que envían señales a la computadora tan pronto como se completa una
operación de entrada o salida.
También se han agregado muchas otras características e instalaciones a lo largo de los años,
generalmente para acelerar alguna actividad en particular.
La eliminación de la microprogramación
Al reducir el conjunto de instrucciones y hacer que las instrucciones restantes se ejecuten directamente
(es decir, control de hardware de la ruta de datos), las máquinas podrían acelerarse. En cierto sentido, el
diseño por computadora había completado el círculo, volviendo a ser como era antes de que Wilkes
inventara la microprogramación en primer lugar.
Pero la rueda sigue girando. Los procesadores modernos todavía dependen de la
microprogramación para traducir instrucciones complejas a microcódigo interno que se pueden
ejecutar directamente en hardware optimizado.
El objetivo de esta discusión es mostrar que el límite entre hardware y software es
arbitrario y cambia constantemente. El software de hoy puede ser el hardware del
mañana y viceversa. Además, los límites entre los distintos niveles también son
fluidos. Desde el punto de vista del programador, la forma en que se implementa
realmente una instrucción no es importante (excepto quizás por su velocidad). Una
persona que programa a nivel ISA puede usar su instrucción de multiplicación como si
fuera una instrucción de hardware sin tener que preocuparse por ello, o incluso saber
si realmente es una instrucción de hardware. El hardware de una persona es el
software de otra. Volveremos a todos estos temas más adelante en este libro.
bien. De hecho, Leibniz había construido hace tres siglos el equivalente a una calculadora de
bolsillo de cuatro funciones.
No pasó mucho durante los siguientes 150 años hasta que un profesor de matemáticas
en la Universidad de Cambridge, Charles Babbage (1792-1871), el inventor de
SEGUNDO. 1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 15
El gran avance del motor analítico fue que era de propósito general. Leyó las
instrucciones de las tarjetas perforadas y las ejecutó. Algunas instrucciones
ordenaban a la máquina que tomara dos números de la tienda, los trajera al
molino, los operara (p. Ej., Los agregara) y enviara el resultado a la tienda. Otras
instrucciones podrían probar un número y ramificarse condicionalmente según
sea positivo o negativo. Al marcar un programa diferente en las tarjetas de
entrada, era posible que el motor analítico realizara cálculos diferentes, algo que
no ocurre con el motor de diferencias.
Dado que el motor analítico era programable en un lenguaje ensamblador simple,
necesitaba software. Para producir este software, Babbage contrató a una joven
llamada Augusta Ada Lovelace, que era hija del famoso poeta británico Lord Byron.
Ada Lovelace fue así la primera programadora informática del mundo. El lenguaje de
programación Ada lleva su nombre en su honor.
Desafortunadamente, como muchos diseñadores modernos, Babbage nunca logró
depurar el hardware. El problema era que necesitaba miles y miles de engranajes y ruedas
y engranajes producidos con un grado de precisión que la tecnología del siglo XIX no podía
proporcionar. Sin embargo, sus ideas estaban muy por delante de su tiempo, e incluso hoy
en día la mayoría de las computadoras modernas tienen una estructura muy similar a la del
motor analítico, por lo que ciertamente es justo decir que Babbage fue el (gran) padre de la
computadora digital moderna.
El siguiente gran desarrollo ocurrió a fines de la década de 1930, cuando un estudiante de
ingeniería alemán llamado Konrad Zuse construyó una serie de máquinas calculadoras automáticas que
usaban relés electromagnéticos. No pudo obtener fondos del gobierno después de que comenzó la
Segunda Guerra Mundial porque los burócratas del gobierno esperaban ganar la guerra tan rápido que
la nueva máquina no estaría lista hasta después de que terminara. Zuse no estaba al tanto
dieciséis INTRODUCCIÓN CAP. 1
del trabajo de Babbage, y sus máquinas fueron destruidas por el bombardeo aliado de
Berlín en 1944, por lo que su trabajo no tuvo ninguna influencia en las máquinas
posteriores. Aún así, fue uno de los pioneros del campo.
Un poco más tarde, en los Estados Unidos, dos personas también diseñaron calculadoras,
John Atanasoff en Iowa State College y George Stibbitz en Bell Labs. La máquina de Atanasoff
estaba sorprendentemente avanzada para su época. Utilizaba aritmética binaria y tenía
condensadores para la memoria, que se actualizaban periódicamente para evitar que la carga se
filtrara, un proceso que él llamaba "activar la memoria". Los chips de memoria dinámica moderna
(DRAM) funcionan de la misma manera. Desafortunadamente, la máquina nunca llegó a estar
operativa. En cierto modo, Atanasoff era como Babbage: un visionario que finalmente fue
derrotado por la tecnología de hardware inadecuada de su tiempo.
La computadora de Stibbitz, aunque más primitiva que la de Atanasoff, realmente funcionó.
Stibbitz dio una demostración pública de ello en una conferencia en Dartmouth College en
1940. Entre los asistentes se encontraba John Mauchley, un profesor desconocido de física
en la Universidad de Pensilvania. El mundo de la informática oiría más sobre el profesor
Mauchley más tarde.
Mientras Zuse, Stibbitz y Atanasoff diseñaban calculadoras automáticas, un joven
llamado Howard Aiken realizaba tediosos cálculos numéricos a mano como parte de
su doctorado. investigación en Harvard. Después de graduarse, Aiken reconoció la
importancia de poder hacer cálculos a máquina. Fue a la biblioteca, descubrió el
trabajo de Babbage y decidió construir con relés la computadora de uso general que
Babbage no había logrado construir con ruedas dentadas.
La primera máquina de Aiken, la Mark I, se completó en Harvard en 1944. Tenía 72 palabras de 23
dígitos decimales cada una y tenía un tiempo de instrucción de 6 segundos. La entrada y la salida
utilizaron cinta de papel perforada. Para cuando Aiken completó su sucesor, el Mark II, las
computadoras de retransmisión estaban obsoletas. Había comenzado la era electrónica.
un secreto militar durante 30 años, la línea COLOSSUS era básicamente un callejón sin salida. Vale la
pena señalarlo solo porque fue la primera computadora digital electrónica del mundo.
Además de destruir las máquinas de Zuse y estimular la construcción del COLOSSUS, la
guerra también afectó a la informática en Estados Unidos. El ejército necesitaba tablas de
alcance para apuntar su artillería pesada. Produjo estas tablas contratando a cientos de
mujeres para que las elaboraran usando calculadoras manuales (se pensaba que las
mujeres eran más precisas que los hombres). Sin embargo, el proceso consumía mucho
tiempo y a menudo aparecían errores.
John Mauchley, que conocía tanto el trabajo de Atanasoff como el de Stibbitz, sabía que el
ejército estaba interesado en las calculadoras mecánicas. Como muchos científicos de la
computación después de él, preparó una propuesta de subvención solicitando al ejército fondos
para construir una computadora electrónica. La propuesta fue aceptada en 1943, y Mauchley y su
estudiante graduado, J. Presper Eckert, procedieron a construir una empresa electrónica.
ordenador, al que llamaron ENIAC (Integrador numérico electrónico y
Computadora). Constaba de 18.000 tubos de vacío y 1.500 relés. El ENIAC pesaba 30 toneladas y
consumía 140 kilovatios de potencia. Arquitectónicamente, la máquina tenía 20 registros, cada
uno capaz de contener un número decimal de 10 dígitos. (Un registro decimal es una memoria
muy pequeña que puede contener un número hasta un número máximo de dígitos decimales,
algo así como el odómetro que realiza un seguimiento de lo lejos que ha viajado un automóvil
durante su vida útil). El ENIAC se programó configurando 6000 posiciones múltiples interruptores
y conectando una multitud de enchufes con un verdadero bosque de cables de puente.
La máquina no se terminó hasta 1946, demasiado tarde para ser de utilidad para su
propósito original. Sin embargo, dado que la guerra terminó, a Mauchley y Eckert se les permitió
organizar una escuela de verano para describir su trabajo a sus colegas científicos. Esa escuela de
verano fue el comienzo de una explosión de interés en la construcción de grandes computadoras
digitales.
Después de esa histórica escuela de verano, muchos otros investigadores se
propusieron construir computadoras electrónicas. El primero en funcionamiento fue el
EDSAC (1949), construido en la Universidad de Cambridge por Maurice Wilkes. Otros
incluyeron el JOHNNIAC en Rand Corporation, el ILLIAC en la Universidad de Illinois, el
MANIAC en el Laboratorio de Los Alamos y el WEIZAC en el Instituto Weizmann en Israel.
Eckert y Mauchley pronto comenzaron a trabajar en un sucesor, el EDVAC (Elec-
Computadora automática variable discreta tronic). Sin embargo, ese proyecto fue
heridos de muerte cuando dejaron la Universidad de Pensilvania para formar una nueva
empresa, la Eckert-Mauchley Computer Corporation, en Filadelfia (Silicon Valley aún no se
había inventado). Después de una serie de fusiones, esta empresa se convirtió en la
moderna Unisys Corporation.
Como un aparte legal, Eckert y Mauchley solicitaron una patente alegando que
inventaron la computadora digital. En retrospectiva, esta no sería una mala patente.
Después de años de litigio, los tribunales decidieron que la patente Eckert-Mauchley no era
válida y que John Atanasoff inventó la computadora digital, aunque nunca la patentó, lo que
efectivamente puso la invención en el dominio público.
18 INTRODUCCIÓN CAP. 1
Memoria
Aporte
Aritmética
Control unidad lógica
unidad
Producción
Acumulador
La máquina de von Neumann tenía cinco partes básicas: la memoria, la unidad aritmética
lógica, la unidad de control y el equipo de entrada y salida. La memoria constaba de 4096
palabras, una palabra que contenía 40 bits, cada una con un 0 o un 1. Cada palabra contenía dos
instrucciones de 20 bits o un entero con signo de 40 bits. Las instrucciones tenían 8 bits
dedicados a decir el tipo de instrucción y 12 bits para especificar uno de los 4096
SEGUNDO. 1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 19
Mientras todo esto sucedía, IBM era una pequeña empresa dedicada al negocio de producir
perforadoras de tarjetas y máquinas clasificadoras de tarjetas mecánicas. Aunque IBM había
proporcionado parte del financiamiento de Aiken, no estaba demasiado interesado en las
computadoras hasta que produjo la 701 en 1953, mucho después de que la compañía de Eckert y
Mauchley fuera la número uno en el mercado comercial con su computadora UNIVAC. El 701
tenía 2048 palabras de 36 bits, con dos instrucciones por palabra. Fue la primera de una serie de
máquinas científicas que llegaron a dominar la industria en una década. Tres años más tarde
llegó el 704, que inicialmente tenía 4096 palabras de memoria central, instrucciones de 36 bits y
una nueva innovación, hardware de punto flotante. En 1958, IBM comenzó la producción de su
última máquina de tubos de vacío, la 709, que era básicamente una 704 reforzada.
El transistor fue inventado en Bell Labs en 1948 por John Bardeen, Walter Brattain y William
Shockley, por lo que fueron galardonados con el Premio Nobel de Física de 1956. En 10 años, el
transistor revolucionó las computadoras y, a fines de la década de 1950, las computadoras de
tubo de vacío estaban obsoletas. La primera computadora transistorizada se construyó en el
Laboratorio Lincoln del MIT, una máquina de 16 bits a lo largo de las líneas del
Torbellino I. Se llamaba el TX-0 (Computadora experimental transistorizada 0)
y fue pensado simplemente como un dispositivo para probar el TX-2 mucho más elegante.
El TX-2 nunca llegó a ser mucho, pero uno de los ingenieros que trabajaba en el laboratorio,
Kenneth Olsen, formó una empresa, Digital Equipment Corporation (DEC), en 1957 para fabricar
una máquina comercial muy parecida a la TX-0. Pasaron cuatro años antes de que apareciera esta
máquina, la PDP-1, principalmente porque los capitalistas de riesgo que financiaron DEC creían
firmemente que no había mercado para las computadoras. Después de todo, TJ Watson, ex
presidente de IBM, dijo una vez que el mundo
20 INTRODUCCIÓN CAP. 1
El mercado de las computadoras era de cuatro o cinco unidades. En cambio, DEC vendió principalmente placas
de circuito pequeñas a empresas para integrarlas en sus productos.
Cuando finalmente apareció el PDP-1 en 1961, tenía 4096 palabras de 18 bits de
memoria central y podía ejecutar 200.000 instrucciones / seg. Este rendimiento fue la mitad
que el del IBM 7090, el sucesor transistorizado del 709 y el ordenador más rápido del
mundo en ese momento. El PDP-1 costó $ 120,000; el 7090 costó millones. DEC vendió
docenas de PDP-1 y nació la industria de las minicomputadoras.
Uno de los primeros PDP-1 fue entregado al MIT, donde rápidamente atrajo la atención de
algunos de los jóvenes genios en ciernes tan comunes en el MIT.Una de las muchas innovaciones
del PDP-1 fue una pantalla visual y la capacidad de trazar puntos en cualquier lugar de su
Pantalla de 512 por 512 píxeles. En poco tiempo, los estudiantes habían programado el PDP-1
para jugar Spacewar, y el mundo tuvo su primer videojuego.
Unos años más tarde, DEC introdujo el PDP-8, que era una máquina de 12 bits, pero mucho
más barata que el PDP-1 ($ 16,000). El PDP-8 tenía una innovación importante: un solo bus, el
ómnibus, como se muestra en la Fig. 1-6. A autobús es una colección de cables paralelos que se
utilizan para conectar los componentes de una computadora. Esta arquitectura fue una
desviación importante de la máquina IAS centrada en la memoria y ha sido adoptada por casi
todas las computadoras pequeñas desde entonces. DEC finalmente vendió 50.000 PDP-8, lo que
lo estableció como el líder en el negocio de minicomputadoras.
General
Mientras tanto, la reacción de IBM al transistor fue construir una versión transistorizada del
709, el 7090, como se mencionó anteriormente, y más tarde el 7094. El 7094 tenía un tiempo de
ciclo de 2 microsec y una memoria central que constaba de 32,768 palabras de 36 bits cada una. .
El 7090 y el 7094 marcaron el final de las máquinas tipo ENIAC, pero dominaron la computación
científica durante años en la década de 1960.
Al mismo tiempo que IBM se había convertido en una fuerza importante en la informática científica
con el 7094, estaba ganando una gran cantidad de dinero vendiendo una pequeña máquina orientada a
los negocios llamada 1401. Esta máquina podía leer y escribir cintas magnéticas, leer y perforar tarjetas.
e imprimir resultados casi tan rápido como el 7094, y a una fracción del precio. Fue terrible en la
informática científica, pero para el mantenimiento de registros comerciales fue perfecto.
El 1401 era inusual porque no tenía ningún registro, ni siquiera una longitud de palabra fija.
Su memoria era de 4000 bytes de 8 bits, aunque los modelos posteriores admitían hasta
entonces asombrosos 16.000 bytes. Cada byte contenía un carácter de 6 bits, un bit
administrativo y un bit utilizado para indicar el final de la palabra. A MOVERSE La instrucción, por
ejemplo, tenía una dirección de origen y de destino y comenzó a mover bytes desde el origen al
destino hasta que alcanzó uno con el bit de fin de palabra establecido en 1.
SEGUNDO. 1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 21
La invención del circuito integrado de silicio por Jack Kilby y Robert Noyce (trabajando de
forma independiente) en 1958 permitió colocar decenas de transistores en un solo chip. Este
paquete hizo posible construir computadoras que eran más pequeñas, más rápidas y más
baratas que sus predecesoras transistorizadas. Algunas de las computadoras más importantes
de esta generación se describen a continuación.
En 1964, IBM era la empresa de informática líder y tenía un gran
problema con sus dos máquinas rentables y de gran éxito, la 7094 y la 1401:
22 INTRODUCCIÓN CAP. 1
eran tan incompatibles como podrían serlo dos máquinas. Uno era un procesador de números de
alta velocidad que usaba aritmética binaria paralela en registros de 36 bits, y el otro era un
procesador de entrada / salida glorificado que usaba aritmética decimal en serie en palabras de
longitud variable en la memoria. Muchos de sus clientes corporativos tenían ambas y no les
gustaba la idea de tener dos departamentos de programación separados sin nada en común.
Cuando llegó el momento de reemplazar estas dos series, IBM dio un paso radical. Introdujo
una única línea de productos, el System / 360, basado en circuitos integrados, que fue diseñado
para la informática científica y comercial. El System / 360 contenía muchas innovaciones, la más
importante de las cuales era que era una familia de alrededor de media docena de máquinas con
el mismo lenguaje ensamblador y un tamaño y una potencia cada vez mayores. Una empresa
podría reemplazar su 1401 con un 360 Model 30 y su 7094 con un 360 Model 75. El Model 75 era
más grande y más rápido (y más caro), pero el software escrito para uno de ellos podía, en
principio, ejecutarse en el otro. En la práctica, un programa escrito para un modelo pequeño se
ejecutaría en un modelo grande sin problemas. Sin embargo, lo contrario no fue cierto. Al mover
un programa escrito para un modelo grande a una máquina más pequeña, es posible que el
programa no quepa en la memoria. Aún así, esta fue una mejora importante con respecto a la
situación con la 7094 y la 1401. La idea de familias de máquinas se hizo popular
instantáneamente y, en unos pocos años, la mayoría de los fabricantes de computadoras tenían
una familia de máquinas comunes que abarcaba una amplia gama de precios y rendimiento.
Algunas características de la familia 360 inicial se muestran en la figura 1-7.
Más tarde se introdujeron otros modelos.
La emulación fue fácil en el 360 porque todos los modelos iniciales y la mayoría de los modelos
posteriores estaban microprogramados. Todo lo que IBM tuvo que hacer fue escribir tres microprogramas,
para el conjunto de instrucciones nativo 360, el conjunto de instrucciones 1401 y el 7094
SEGUNDO. 1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 23
conjunto de instrucciones. Esta flexibilidad fue una de las principales razones por las que se
introdujo la microprogramación en el 360. La motivación de Wilkes de reducir el número de tubos
ya no importaba, por supuesto, ya que el 360 no tenía tubos.
El 360 resolvió el dilema del decimal binario-paralelo versus el decimal serial con un
compromiso: la máquina tenía 16 registros de 32 bits para aritmética binaria, pero su memoria
estaba orientada a bytes, como la del 1401. También tenía instrucciones seriales estilo 1401 para
mover registros de tamaño variable alrededor de la memoria.
Otra característica importante del 360 fue un espacio de direcciones enorme (para ese momento)
de 2 24 ( 16.777.216) bytes. Con la memoria costando varios dólares por byte en esos días, esta cantidad
de memoria se parecía mucho al infinito. Desafortunadamente, la serie 360 fue seguida más tarde por
las series 370, 4300, 3080, 3090, 390 yz, todas usando esencialmente la misma arquitectura. A mediados
de la década de 1980, el límite de memoria se convirtió en un problema real, e IBM tuvo que abandonar
parcialmente la compatibilidad cuando pasó a las direcciones de 32 bits necesarias para abordar el
nuevo 2 32- memoria de bytes.
En retrospectiva, se puede argumentar que dado que tenían palabras y registros de 32 bits
de todos modos, probablemente también deberían haber tenido direcciones de 32 bits, pero en
ese momento nadie podía imaginar una máquina con 16 millones de bytes de memoria. Si bien la
transición a direcciones de 32 bits fue exitosa para IBM, nuevamente fue solo una solución
temporal al problema de direccionamiento de memoria, ya que los sistemas informáticos pronto
requerirían la capacidad de abordar más de 2 32 ( 4,294,967,296) bytes de memoria. En unos años
más aparecerían en escena ordenadores con direcciones de 64 bits.
El mundo de las minicomputadoras también dio un gran paso adelante en la tercera
generación con la introducción de DEC de la serie PDP-11, una sucesora de 16 bits de la
PDP-8. En muchos sentidos, la serie PDP-11 era como un hermano pequeño de la serie 360,
así como el PDP-1 era como un hermano pequeño del 7094. Tanto el 360 como el PDP-11
tenían registros orientados a palabras y un memoria y ambos vinieron en un rango que
abarca una relación precio / rendimiento considerable. El PDP-11 tuvo un enorme éxito,
especialmente en las universidades, y continuó el liderazgo de DEC sobre los otros
fabricantes de minicomputadoras.
En la década de 1980, VLSI (integración a gran escala) había hecho posible poner primero
decenas de miles, luego cientos de miles y finalmente millones de transistores en un solo chip.
Este desarrollo pronto condujo a computadoras más pequeñas y más rápidas. Antes del PDP-1,
las computadoras eran tan grandes y caras que las empresas y universidades tenían que tener
departamentos especiales llamados centros de computación para ejecutarlos. Con la llegada de
la minicomputadora, un departamento podría comprar su propia computadora. Para 1980, los
precios habían bajado tanto que era factible que una sola persona tuviera su propia
computadora. La era de las computadoras personales había comenzado.
Las computadoras personales se utilizaron de una manera muy diferente a las computadoras
grandes. Se utilizaron para procesamiento de texto, hojas de cálculo y numerosas aplicaciones
altamente interactivas (como juegos) que las computadoras más grandes no podían manejar bien.
24 INTRODUCCIÓN CAP. 1
Las primeras computadoras personales se vendieron generalmente como kits. Cada kit
contenía una placa de circuito impreso, un montón de chips, que normalmente incluían un Intel
8080, algunos cables, una fuente de alimentación y quizás un disquete de 8 pulgadas. Poner las
piezas juntas para hacer una computadora dependía del comprador. No se suministró software.
Si querías alguno, escribiste el tuyo. Más tarde, el sistema operativo CP / M, escrito por Gary
Kildall, se hizo popular en la década de 1980. Era un verdadero sistema operativo de disquete,
con un sistema de archivos y comandos de usuario tecleados desde el teclado a un procesador de
comandos (shell).
Otra computadora personal temprana fue la Apple y luego la Apple II, diseñada por Steve
Jobs y Steve Wozniak en el proverbial garaje. Esta máquina fue enormemente popular entre los
usuarios domésticos y en las escuelas y convirtió a Apple en un jugador serio casi de la noche a la
mañana.
Después de mucho deliberar y observar lo que estaban haciendo otras
compañías, IBM, entonces la fuerza dominante en la industria de las computadoras,
finalmente decidió que quería ingresar al negocio de las computadoras personales. En
lugar de diseñar toda la máquina desde cero, utilizando solo piezas de IBM, fabricadas
con transistores de IBM, fabricadas con arena de IBM, lo que habría llevado
demasiado tiempo, IBM hizo algo bastante inusual. Le dio a un ejecutivo de IBM, Philip
Estridge, una gran bolsa de dinero y le dijo que fuera a construir una computadora
personal lejos de los burócratas entrometidos en la sede corporativa en Armonk,
Nueva York. Estridge, que trabajaba a 2000 km de distancia en Boca Raton, Florida,
eligió Intel 8088 como su CPU y construyó la computadora personal IBM a partir de
componentes comerciales. Se introdujo en 1981 e instantáneamente se convirtió en la
computadora más vendida de la historia. Cuando la PC llega a los 30,
(2011) y Singh (2011).
IBM también hizo algo inusual de lo que luego se arrepentiría. En lugar de mantener el
diseño de la máquina totalmente en secreto (o al menos, custodiado por un gigantesco e
impenetrable muro de patentes), como solía hacer, publicó los planos completos, incluidos
todos los diagramas de circuitos, en un libro por el que se vendió. $ 49. La idea era hacer
posible que otras empresas fabricaran placas enchufables para IBM PC, para aumentar su
flexibilidad y popularidad. Desafortunadamente para IBM, dado que el diseño ahora era
completamente público y todas las piezas estaban fácilmente disponibles a través de
proveedores comerciales, muchas otras compañías comenzaron a fabricar clones de la PC,
a menudo por mucho menos dinero del que cobraba IBM. Así comenzó toda una industria.
Aunque otras empresas fabricaron computadoras personales utilizando CPU que no eran de Intel,
incluidas Commodore, Apple y Atari, el impulso de la industria de las PC de IBM fue tan grande que las
demás fueron aplastadas. Solo unos pocos sobrevivieron, y estos se encontraban en mercados
especializados.
Uno que sobrevivió, aunque apenas, fue el Apple Macintosh. La Macintosh se
introdujo en 1984 como la sucesora de la desafortunada Apple Lisa, que fue la primera
computadora en venir con un GUI (interfaz gráfica de usuario), similar a la ahora
popular interfaz de Windows. La Lisa falló porque era demasiado cara, pero
SEGUNDO. 1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 25
el Macintosh de menor precio presentado un año después fue un gran éxito e inspiró amor
y pasión entre sus muchos admiradores.
El mercado de las computadoras personales temprano también llevó al entonces inaudito
deseo de computadoras portátiles. En ese momento, una computadora portátil tenía tanto
sentido como lo tiene ahora un refrigerador portátil. La primera verdadera computadora
personal portátil fue la Osborne-1, que con 11 kg era más una computadora portátil que una
computadora portátil. Aún así, demostró que los portátiles eran posibles. El Osborne-1 fue un
éxito comercial modesto, pero un año después, Compaq presentó su primer clon portátil de IBM
PC y se estableció rápidamente como líder en el mercado de computadoras portátiles.
Con el éxito del 8088 en la mano, Intel pasó a hacer versiones mejores y más grandes
del mismo. Particularmente digno de mención fue el 80386, lanzado en 1985, que era una
CPU de 32 bits. Esto fue seguido por una versión mejorada, naturalmente llamada el
80486. Las versiones posteriores se llamaron Pentium y Core. Estos chips se utilizan en casi
todas las PC modernas. El nombre genérico que muchas personas usan para describir la
arquitectura de estos procesadores es x86. Los chips compatibles fabricados por AMD
también se denominan x86.
A mediados de la década de 1980, un nuevo desarrollo llamado RISC (discutido en el
Capítulo 2) comenzó a tomar el relevo, reemplazando las arquitecturas complicadas (CISC) por
otras mucho más simples (pero más rápidas). En la década de 1990, comenzaron a aparecer las
CPU superescalares. Estas máquinas podían ejecutar varias instrucciones al mismo tiempo, a
menudo en un orden diferente al que aparecían en el programa. Introduciremos los conceptos
de CISC, RISC y superescalar en el Cap. 2 y discútalas extensamente a lo largo de este libro.
También a mediados de la década de 1980, Ross Freeman y sus colegas de Xilinx desarrollaron un
enfoque inteligente para construir circuitos integrados que no requería carretillas llenas de dinero o
acceso a una instalación de fabricación de silicio. Este nuevo tipo de chip de computadora, llamado
matriz de puerta programable en campo (FPGA), contenía una gran cantidad de puertas lógicas
genéricas que podían "programarse" en cualquier circuito que encajara en el dispositivo. Este nuevo y
notable enfoque del diseño de hardware hizo que el hardware FPGA fuera tan maleable como el
software. Utilizando FPGA que cuestan decenas a cientos de dólares estadounidenses, fue posible
construir sistemas informáticos especializados para aplicaciones únicas.
26 INTRODUCCIÓN CAP. 1
que sirvió solo a unos pocos usuarios. Afortunadamente, las empresas de fabricación de silicio aún podían
producir chips más rápidos, de menor potencia y menos costosos para aplicaciones que necesitaban millones
de chips. Pero, para aplicaciones con pocos usuarios, como creación de prototipos, aplicaciones de diseño de
bajo volumen y educación, los FPGA siguen siendo una herramienta popular para la construcción de hardware.
Hasta 1992, las computadoras personales eran de 8, 16 o 32 bits. Luego, DEC presentó la
revolucionaria Alpha de 64 bits, una verdadera máquina RISC de 64 bits que superó a todas las
demás computadoras personales por un amplio margen. Tuvo un éxito modesto, pero pasó casi
una década antes de que las máquinas de 64 bits comenzaran a ponerse de moda, y luego
principalmente como servidores de alta gama.
A lo largo de la década de 1990, los sistemas informáticos se volvieron cada vez más rápidos
utilizando una variedad de optimizaciones de microarquitectura, muchas de las cuales examinaremos
en este libro. Los proveedores de computadoras mimaron a los usuarios de estos sistemas, porque
cada nuevo sistema que compraban ejecutaba sus programas mucho más rápido que su sistema
anterior. Sin embargo, a fines de la década de 1990, esta tendencia comenzaba a disminuir debido a
dos obstáculos importantes en el diseño de computadoras: los arquitectos se estaban quedando sin
trucos para hacer programas más rápidos y los procesadores se estaban volviendo demasiado costosos
para enfriar. Desesperadas por seguir construyendo procesadores más rápidos, la mayoría de las
empresas informáticas comenzaron a recurrir a arquitecturas paralelas como una forma de obtener
más rendimiento de su silicio. En 2001, IBM introdujo la arquitectura de doble núcleo POWER4. Esta fue
la primera vez que una CPU convencional incorporó dos procesadores en el mismo dado. Hoy en día, la
mayoría de los procesadores de escritorio y de servidor, e incluso algunos procesadores integrados,
incorporan varios procesadores en chip. Desafortunadamente, el rendimiento de estos
multiprocesadores ha sido menos que estelar para el usuario típico, porque (como veremos en
capítulos posteriores) las máquinas paralelas requieren que los programadores paralelicen
explícitamente los programas, lo cual es una tarea difícil y propensa a errores.
En 1981, el gobierno japonés anunció que planeaba gastar $ 500 millones para ayudar a las
empresas japonesas a desarrollar computadoras de quinta generación, que se basarían en
inteligencia artificial y representarían un salto cuántico sobre las computadoras `` tontas '' de
cuarta generación. Después de haber visto a las empresas japonesas hacerse cargo del mercado
en muchas industrias, desde cámaras hasta equipos de sonido y televisores, los fabricantes de
computadoras estadounidenses y europeos pasaron de 0 a pánico total en un milisegundo,
exigiendo subsidios gubernamentales y más. A pesar de la fanfarria, el proyecto japonés de
quinta generación básicamente fracasó y fue abandonado silenciosamente. En cierto sentido, era
como el motor analítico de Babbage: una idea visionaria pero tan adelantada a su tiempo que la
tecnología para construirlo no estaba a la vista.
Sin embargo, sucedió lo que podría llamarse la quinta generación, pero de una manera
inesperada: las computadoras se redujeron. En 1989, Grid Systems lanzó la primera tableta,
llamada GridPad. Consistía en una pequeña pantalla en la que los usuarios podían escribir
con un lápiz especial para controlar el sistema. Sistemas como GridPad
SEGUNDO. 1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 27
mostró que las computadoras no necesitaban sentarse en un escritorio o en una sala de servidores,
sino que podían colocarse en un paquete fácil de transportar con pantallas táctiles y reconocimiento de
escritura a mano para hacerlas aún más valiosas.
El Apple Newton, lanzado en 1993, mostró que una computadora se podía construir en un paquete
no más grande que un reproductor de casetes de audio portátil. Al igual que el GridPad, el Newton
utilizó la escritura a mano para la entrada del usuario, que en este caso resultó ser un gran obstáculo
para su éxito. Sin embargo, las máquinas posteriores de esta clase, ahora llamadas
PDA (asistentes digitales personales), tienen interfaces de usuario mejoradas y son muy
populares. Ahora se han convertido en teléfonos inteligentes.
Finalmente, la interfaz de escritura de la PDA fue perfeccionada por Jeff Hawkins, quien
había creado una empresa llamada Palm para desarrollar una PDA de bajo costo para el mercado
de consumo masivo. Hawkins era ingeniero eléctrico de formación, pero tenía un gran interés en
la neurociencia, que es el estudio del cerebro humano. Se dio cuenta de que el reconocimiento de
la escritura a mano podía ser más confiable capacitando a los usuarios para que escribieran de
una manera que fuera más fácil de leer para las computadoras, una técnica de entrada que llamó
'' Graffiti ''. Requería una pequeña cantidad de capacitación para el usuario, pero en al final,
condujo a una escritura más rápida y fiable, y la primera Palm PDA, llamada Palm Pilot, fue un
gran éxito. El graffiti es uno de los grandes éxitos de la informática, demostrando el poder de la
mente humana para aprovechar el poder de la mente humana.
Los usuarios de PDA juraron por los dispositivos, usándolos religiosamente para administrar sus
horarios y contactos. Cuando los teléfonos móviles comenzaron a ganar popularidad a principios de la
década de 1990, IBM aprovechó la oportunidad de integrar el teléfono móvil con la PDA, creando el
"teléfono inteligente". El primer teléfono inteligente, llamado Simón, usó una pantalla táctil para la
entrada y le dio al usuario todas las capacidades de una PDA más teléfono, juegos y correo electrónico.
La reducción del tamaño y el costo de los componentes eventualmente llevó al uso generalizado de
teléfonos inteligentes, incorporados en las populares plataformas Apple iPhone y Google Android.
Pero incluso las PDA y los teléfonos inteligentes no son realmente revolucionarios. Aún más
importantes son las computadoras "invisibles", que están integradas en electrodomésticos,
relojes, tarjetas bancarias y muchos otros dispositivos (Bechini et al., 2004). Estos procesadores
permiten una mayor funcionalidad y un menor costo en una amplia variedad de aplicaciones. Si
estos chips forman una generación real es discutible (han existido desde la década de 1970), pero
están revolucionando el funcionamiento de miles de electrodomésticos y otros dispositivos. Ya
están comenzando a tener un gran impacto en el mundo y su influencia aumentará rápidamente
en los próximos años. Un aspecto inusual de estas computadoras integradas es que el hardware
y el software a menudo son
codificado Henkel et al., 2003). Volveremos a ellos más adelante en este libro.
Si vemos la primera generación como máquinas de tubos de vacío (por ejemplo, ENIAC), la
segunda generación como máquinas de transistores (por ejemplo, el IBM 7094), la tercera generación
como las primeras máquinas de circuitos integrados (por ejemplo, el IBM 360) y la cuarta generación
como computadoras personales (por ejemplo, las CPU Intel), la quinta generación real es más un
cambio de paradigma que una nueva arquitectura específica. En el futuro, las computadoras serán
28 INTRODUCCIÓN CAP. 1
en todas partes e incrustado en todo, de hecho, invisible. Serán parte del marco
de la vida diaria, abriendo puertas, encendiendo luces, dispensando dinero y
haciendo miles de cosas más. Este modelo, ideado por Mark Weiser, fue
originalmente llamado computación ubicua, pero el término computación omnipresente es también
utilizado con frecuencia ahora (Weiser, 2002). Cambiará el mundo tan profundamente
como lo hizo la revolución industrial. No lo discutiremos más en este libro, pero para
obtener más información al respecto, consulte Lyytinen y Yoo (2002), Saha y Mukherjee
(2003) y Sakamura (2002).
En la sección anterior, dimos una breve historia de los sistemas informáticos. En este
miraremos el presente y miraremos hacia el futuro. Aunque las computadoras personales
son las computadoras más conocidas, existen otros tipos de máquinas en estos días, por lo
que vale la pena echar un vistazo breve a qué más hay.
100 GRAMOS
10G 512M 2G
1G
1G
16M
Numero de transistores
Los 64M
10M
1M
1M 4M
64K
100 mil 4K 256K
10K 16K
1K 1K
100
10
1
1965 1970 1975 1980 1985 1990 1995 2000 2005 2010
Año
Figura 1-8. La ley de Moore predice un aumento anual del 60 por ciento en el número de
transistores que se pueden poner en un chip. Los puntos de datos dados arriba y abajo de la línea son
tamaños de memoria, en bits.
resuelto (Bose, 2004, Kim et al., 2003). Sin embargo, la realidad de los transistores que se
encogen es que el grosor de estos dispositivos pronto será de solo unos pocos átomos. En ese
punto, los transistores constarán de muy pocos átomos para ser confiables, o simplemente
llegaremos a un punto en el que mayores disminuciones de tamaño requerirán bloques de
construcción subatómicos. (¡Como un buen consejo, se recomienda que cualquier persona que
trabaje en una planta de fabricación de silicio se tome el día libre el día que decida dividir el
transistor de un átomo!) A pesar de los muchos desafíos para extender las tendencias de la ley de
Moore, hay esperanzas tecnologías en el horizonte, incluidos los avances en computación
cuántica (Oskin et al., 2002) y nanotubos de carbono (Heinze et al., 2002) que pueden crear
oportunidades para escalar la electrónica más allá de los límites del silicio.
La ley de Moore ha creado lo que los economistas llaman un circulo virtuoso. Los avances
en la tecnología (transistores / chip) conducen a mejores productos y precios más bajos. Los
precios más bajos conducen a nuevas aplicaciones (nadie estaba haciendo videojuegos para
computadoras cuando las computadoras costaban $ 10 millones cada una, aunque cuando el
precio bajó a $ 120,000, los estudiantes del MIT aceptaron el desafío). Las nuevas aplicaciones
conducen a nuevos mercados y surgen nuevas empresas para aprovecharlas. La existencia de
todas estas empresas genera competencia, lo que a su vez genera una demanda económica de
mejores tecnologías con las que vencer a las demás. Entonces el círculo es redondo.
Otro factor que impulsa la mejora tecnológica es la primera ley del software de Nathan
(debido a Nathan Myhrvold, un ex alto ejecutivo de Microsoft). Dice: '' El software es un gas.
Se expande para llenar el contenedor que lo contiene ''. En la década de 1980, Word
30 INTRODUCCIÓN CAP. 1
el procesamiento se realizó con programas como troff (que todavía se usa para este
libro). Troff ocupa kilobytes de memoria. Los procesadores de texto modernos ocupan
muchos megabytes de memoria. Los futuros sin duda requerirán gigabytes de
memoria. (En una primera aproximación, los prefijos kilo, mega, giga y tera significan
mil, millones, mil millones y trillones, respectivamente, pero consulte la sección 1.5
para obtener más detalles). adquirir percebes) crea una demanda constante de
procesadores más rápidos, memorias más grandes y más capacidad de E / S.
Si bien las ganancias en transistores por chip han sido dramáticas a lo largo de los años, las
ganancias en otras tecnologías informáticas no lo han sido menos. Por ejemplo, IBM PC / XT se
introdujo en 1982 con un disco duro de 10 megabytes. Treinta años después, los discos duros de
1 TB son comunes en los sucesores de PC / XT. Esta mejora de cinco órdenes de magnitud en 30
años representa un aumento de capacidad anual de casi el 50 por ciento. Sin embargo, medir la
mejora del disco es más complicado, ya que existen otros parámetros además de la capacidad,
como la velocidad de datos, el tiempo de búsqueda y el precio. Sin embargo, casi cualquier
métrica mostrará que la relación precio / rendimiento ha aumentado desde 1982 en
aproximadamente un 50 por ciento anual. Estas enormes ganancias en el rendimiento del disco,
junto con el hecho de que el volumen en dólares de los discos enviados desde Silicon Valley ha
superado el de los chips de CPU, llevó a Al Hoagland a sugerir que el lugar tenía un nombre
incorrecto: debería haberse llamado Iron Oxide Valley (ya que este es el medio de grabación
utilizado en los discos). Lentamente, esta tendencia está retrocediendo a favor del silicio, ya que
las memorias flash basadas en silicio han comenzado a reemplazar a los discos giratorios
tradicionales en muchos sistemas.
Otra área que ha experimentado ganancias espectaculares han sido las telecomunicaciones
y las redes. En menos de dos décadas, hemos pasado de módems de 300 bit / seg a módems
analógicos a 56.000 bits / seg a redes de fibra óptica a 10 12 bits / seg. Los cables telefónicos
transatlánticos de fibra óptica, como el TAT-12/13, cuestan alrededor de 700 millones de dólares,
duran 10 años y pueden transportar 300.000 llamadas simultáneas, lo que equivale a menos de 1
centavo por una llamada intercontinental de 10 minutos. Sistemas de comunicación óptica
funcionando a 10 12 bits / seg en distancias superiores a 100 km sin amplificadores ha
demostrado ser factible. No es necesario comentar aquí el crecimiento exponencial de Internet.
Richard Hamming, ex investigador de Bell Labs, observó una vez que un cambio de un orden
de magnitud en la cantidad provoca un cambio en la calidad. Por lo tanto, un automóvil de
carreras que puede recorrer 1000 km / hora en el desierto de Nevada es un tipo de máquina
fundamentalmente diferente a un automóvil normal que recorre 100 km / hora en una carretera.
Del mismo modo, un rascacielos de 100 pisos no es solo un edificio de apartamentos de 10 pisos
a escala. Y con las computadoras, no estamos hablando de factores de 10, sino en el transcurso
de cuatro décadas, factores de un millón.
Los vendedores de chips pueden utilizar las ganancias que ofrece la ley de Moore de
varias formas diferentes. Una forma es construir computadoras cada vez más potentes a
SEGUNDO. 1.3 EL ZOO DE LA COMPUTADORA 31
precio. Otro enfoque es construir la misma computadora por cada año menos dinero. La
industria de la computación ha hecho ambas cosas y más, por lo que ahora hay una amplia
variedad de computadoras disponibles. En la figura 1-9 se ofrece una categorización muy
aproximada de las computadoras actuales.
Figura 1-9. El espectro actual de computadoras disponibles. Los precios deben tomarse
con un grano (o mejor aún, una tonelada métrica) de sal.
En las siguientes secciones examinaremos cada una de estas categorías y discutiremos sus
propiedades brevemente.
tarjeta, suena una alarma. Este sistema no solo elimina la necesidad de cajeros y la
correspondiente espera en la fila, sino que también sirve como sistema antirrobo porque
esconder un producto en un bolsillo o bolso no tiene ningún efecto.
Una propiedad interesante de este sistema es que, si bien los códigos de barras identifican
el tipo de producto, no identifican el artículo específico. Con 128 bits disponibles, los chips RFID lo
hacen. Como consecuencia, cada paquete de, digamos, aspirinas, en el estante de un
supermercado tendrá un código RFID diferente. Esto significa que si un fabricante de
medicamentos descubre un defecto de fabricación en un lote de aspirinas después de su envío,
se puede decir a los supermercados de todo el mundo que hagan sonar la alarma cuando un
cliente compra cualquier paquete cuyo número RFID se encuentre en el rango afectado, incluso si
la compra ocurre en un país lejano meses después. Las aspirinas que no estén en el lote
defectuoso no harán sonar la alarma.
Pero etiquetar paquetes de aspirinas, galletas y bizcochos para perros es solo el comienzo. ¿Por qué
detenerse en etiquetar las galletas para perros cuando puedes etiquetar al perro? Los dueños de mascotas ya
están pidiendo a los veterinarios que implanten chips RFID en sus animales, lo que les permite rastrearlos si
son robados o extraviados. Los agricultores también quieren etiquetar su ganado. El siguiente paso obvio es
que los padres nerviosos pidan a su pediatra que implante chips RFID en sus hijos en caso de que se los roben
o se pierdan. Ya que estamos en eso, ¿por qué no hacer que los hospitales los incluyan en todos los recién
nacidos para evitar confusiones en el hospital? Sin duda, los gobiernos y la policía pueden pensar en muchas
buenas razones para rastrear a todos los ciudadanos todo el tiempo. A estas alturas, las "implicaciones" de los
chips RFID a los que se aludió anteriormente pueden estar volviéndose un poco más claras.
Otra aplicación (un poco menos controvertida) de los chips RFID es el seguimiento de vehículos.
Cuando una serie de vagones de ferrocarril con chips RFID integrados pasa por un lector, la
computadora conectada al lector tiene una lista de los vagones que pasaron. Este sistema facilita el
seguimiento de la ubicación de todos los vagones de ferrocarril, lo que ayuda a los proveedores, sus
clientes y los ferrocarriles. Se puede aplicar un esquema similar a los camiones. En el caso de los
automóviles, la idea ya se está utilizando para cobrar los peajes electrónicamente (por ejemplo, el
sistema EZ Pass).
Los sistemas de equipaje de las aerolíneas y muchos otros sistemas de transporte de
paquetes también pueden utilizar chips RFID. Un sistema experimental probado en el aeropuerto
de Heathrow en Londres permitió a los pasajeros que llegaban sacar el equipaje de su equipaje.
Las bolsas transportadas por los pasajeros que compraban este servicio se etiquetaron con chips
RFID, se enrutaron por separado dentro del aeropuerto y se entregaron directamente a los
hoteles de los pasajeros. Otros usos de los chips RFID incluyen que los autos que llegan a la
estación de pintura de la línea de ensamblaje especifiquen de qué color se supone que deben
ser, estudiar las migraciones de animales, hacer que la ropa le indique a la lavadora qué
temperatura usar, y muchos más. Algunos chips pueden estar integrados con sensores para que
los bits de bajo orden puedan contener la temperatura, presión, humedad u otra variable
ambiental actual.
Los chips RFID avanzados también contienen almacenamiento permanente. Esta capacidad
llevó al Banco Central Europeo a tomar la decisión de colocar chips RFID en los billetes en euros
en los próximos años. Las fichas registrarían dónde han estado. No solo lo haría
SEGUNDO. 1.3 EL ZOO DE LA COMPUTADORA 33
esto hace que la falsificación de billetes de euro sea prácticamente imposible, pero haría mucho
más fácil rastrear los rescates por secuestro, el botín extraído de los robos y el dinero lavado y
posiblemente invalidarlo de forma remota. Cuando el efectivo ya no sea anónimo, el
procedimiento policial estándar en el futuro puede ser verificar dónde ha estado el dinero del
sospechoso recientemente. ¿Quién necesita implantar chips en las personas cuando sus
billeteras están llenas de ellos? Una vez más, cuando el público se entera de lo que pueden hacer
los chips RFID, es probable que haya alguna discusión pública sobre el tema.
La tecnología utilizada en los chips RFID se está desarrollando rápidamente. Los más pequeños
son pasivos (no alimentados internamente) y solo pueden transmitir sus números únicos cuando se les
consulta. Sin embargo, los más grandes están activos, pueden contener una pequeña batería y una
computadora primitiva, y son capaces de hacer algunos cálculos. Las tarjetas inteligentes utilizadas en
transacciones financieras entran en esta categoría.
Los chips RFID difieren no solo en ser activos o pasivos, sino también en el rango de
frecuencias de radio a las que responden. Los que operan a bajas frecuencias tienen una
velocidad de datos limitada, pero pueden detectarse a grandes distancias de la antena. Aquellos
que operan a altas frecuencias tienen una tasa de datos más alta y un rango más corto. Los chips
también difieren en otros aspectos y se mejoran constantemente. Internet está lleno de
información sobre chips RFID, con www.rfid.org siendo un buen punto de partida.
1.3.4 Microcontroladores
sabiéndolo. Dentro de unos años, prácticamente todo lo que funcione con electricidad o baterías
contendrá un microcontrolador. El número de microcontroladores vendidos cada año eclipsa al
de todos los demás tipos de computadoras, excepto las computadoras desechables, en órdenes
de magnitud.
Mientras que los chips RFID son sistemas mínimos, los microcontroladores son
computadoras pequeñas pero completas. Cada microcontrolador tiene un procesador, memoria
y capacidad de E / S. La capacidad de E / S generalmente incluye detectar los botones e
interruptores del dispositivo y controlar las luces, la pantalla, el sonido y los motores del
dispositivo. En la mayoría de los casos, el software está integrado en el chip en forma de
memoria de solo lectura creada cuando se fabrica el microcontrolador. Los microcontroladores
vienen en dos tipos generales: propósito general y propósito especial. Las primeras son
computadoras pequeñas pero ordinarias; estos últimos tienen una arquitectura y un conjunto de
instrucciones ajustados a alguna aplicación específica, como multimedia. Los microcontroladores
vienen en versiones de 4, 8, 16 y 32 bits.
Sin embargo, incluso los microcontroladores de uso general se diferencian de las PC estándar en
aspectos importantes. Primero, son extremadamente sensibles a los costos. Una empresa que compra
millones de unidades puede elegir basándose en una diferencia de precio de 1 centavo por unidad. Esta
restricción lleva a los fabricantes a tomar decisiones arquitectónicas basadas mucho más en los costos
de fabricación, un criterio menos dominante en chips que cuestan cientos de dólares. Los precios de los
microcontroladores varían mucho según la cantidad de bits de ancho que tengan, la cantidad y el tipo
de memoria que tengan, y otros factores. Para tener una idea, un microcontrolador de 8 bits comprado
en un volumen suficientemente grande probablemente se pueda conseguir por tan solo 10 centavos la
unidad. Este precio es lo que hace posible colocar una computadora dentro de un radio reloj de $ 9.95.
un lenguaje de programación incorporado llamado Wiring que tiene incorporadas todas las campanas y
silbidos necesarios para controlar dispositivos en tiempo real. Lo que hace que la plataforma Arduino
sea divertida de usar es su gran y activa comunidad de desarrollo. Hay miles de proyectos publicados
que utilizan Arduino, que van desde un detector de contaminantes electrónico hasta una chaqueta de
ciclismo con señales de giro, un detector de humedad que envía correos electrónicos cuando una planta
necesita ser regada y un avión autónomo no tripulado. Para obtener más información sobre Arduino y
ensuciarse las manos con sus propios proyectos Arduino, vaya a www.arduino.cc.
Un paso adelante son las plataformas móviles y las máquinas de videojuegos. Son
computadoras normales, a menudo con gráficos especiales y capacidad de sonido, pero con
software limitado y poca extensibilidad. Comenzaron como CPU de gama baja para teléfonos
simples y juegos de acción como ping pong en televisores. A lo largo de los años, se han
convertido en sistemas mucho más potentes, rivalizando o incluso superando a las
computadoras personales en ciertas dimensiones.
Para tener una idea de lo que hay dentro de estos sistemas, considere las
especificaciones de tres productos populares. Primero, la Sony PlayStation 3. Contiene una
CPU patentada multinúcleo de 3.2 GHz (llamada microprocesador Cell), que se basa en la
CPU IBM PowerPC RISC, y siete elementos de procesamiento sinérgico (SPEs) de 128 bits. La
PlayStation 3 también contiene 512 MB de RAM, un chip gráfico Nvidia personalizado de
550 MHz y un reproductor de Blu-ray. En segundo lugar, la Xbox 360 de Microsoft. Contiene
una CPU PowerPC IBM de tres núcleos a 3,2 GHz con 512 MB de RAM, un chip gráfico ATI
personalizado de 500 MHz, un reproductor de DVD y un disco duro. En tercer lugar, la
tableta Samsung Galaxy (en la que se revisó este libro). Contiene dos núcleos ARM de 1 GHz
más una unidad de procesamiento de gráficos (integrada en el sistema en un chip Nvidia
Tegra 2), 1 GB de RAM, cámaras duales, un giroscopio de 3 ejes y almacenamiento de
memoria flash.
Si bien estas máquinas no son tan potentes como las computadoras personales de gama
alta producidas en el mismo período de tiempo, no se quedan atrás y, de alguna manera, están
por delante (por ejemplo, el SPE de 128 bits en la PlayStation 3 es más ancho que la CPU en
cualquier PC). La principal diferencia entre estas máquinas y una PC no es tanto la CPU sino que
son sistemas cerrados. Los usuarios no pueden ampliarlos con tarjetas enchufables, aunque a
veces se proporcionan interfaces USB o FireWire. Además, y quizás lo más importante, estas
plataformas están cuidadosamente optimizadas para algunos dominios de aplicaciones:
aplicaciones altamente interactivas con gráficos 3D y salida multimedia. Todo lo demás es
secundario. Estas restricciones de hardware y software, falta de extensibilidad, memorias
pequeñas, ausencia de un monitor de alta resolución, y un disco duro pequeño (o en ocasiones
ausente) permite construir y vender estas máquinas a un precio más económico que las
computadoras personales. A pesar de estas restricciones, se han vendido millones de estos
dispositivos y su número crece constantemente.
36 INTRODUCCIÓN CAP. 1
Las computadoras móviles tienen el requisito adicional de que utilizan la menor cantidad de
energía posible para realizar sus tareas. Cuanta menos energía utilicen, más durará la batería.
Esta es una tarea de diseño desafiante porque las plataformas móviles como tabletas y teléfonos
inteligentes deben ser frugal en su uso de energía, pero al mismo tiempo, los usuarios de estos
dispositivos esperan capacidades de alto rendimiento, como gráficos 3D, procesamiento
multimedia de alta definición y juego de azar.
Otra variante más de este tema es la tableta, como el popular iPad. Estos dispositivos son
simplemente PC normales en un paquete más pequeño, con un disco de estado sólido en lugar
de un disco duro giratorio, una pantalla táctil y una CPU diferente a la x86. Pero desde una
perspectiva arquitectónica, las tabletas son simplemente portátiles con un factor de forma
diferente.
1.3.7 Servidores
Sin embargo, desde el punto de vista arquitectónico, un servidor de un solo procesador no es realmente
muy diferente de una computadora personal de un solo procesador. Es más rápido, más grande y tiene más
espacio en disco y posiblemente una conexión de red más rápida. Los servidores ejecutan los mismos sistemas
operativos que las computadoras personales, generalmente algún tipo de UNIX o Windows.
SEGUNDO. 1.3
Figura 1-10. Una placa de circuito impreso está en el corazón de cada computadora
personal. Esta es la placa Intel DQ67SW. © 2011 Intel Corporation. Usado con permiso.
Clusters
Debido a las mejoras casi continuas en la relación precio / rendimiento de los servidores, en
los últimos años, los diseñadores de sistemas han comenzado a conectar un gran número de
ellos para formar racimos. Consisten en sistemas estándar de clase de servidor conectados por
redes gigabit / seg y que ejecutan un software especial que permite que todas las máquinas
trabajen juntas en un solo problema, a menudo en los negocios, la ciencia o la ingeniería.
Normalmente, son los que se llaman COTS (productos básicos disponibles en el mercado)
computadoras que cualquiera puede comprar a un proveedor de PC. La adición principal es la red
de alta velocidad, pero a veces también es una tarjeta de red comercial estándar.
Los grandes grupos suelen estar alojados en salas o edificios para fines especiales llamados
centros de datos. Los centros de datos pueden escalar bastante, desde un puñado de máquinas hasta
100.000 o más de ellos. Por lo general, la cantidad de dinero disponible es el factor
limitante. Debido al bajo precio de los componentes, las empresas individuales ahora
pueden poseer estas máquinas para uso interno. Mucha gente usa los términos "clúster" y
"centro de datos" indistintamente, aunque técnicamente el primero es la colección de
servidores y el segundo es la sala o el edificio.
Un uso común de un clúster es como servidor web de Internet. Cuando un sitio web
espera miles de solicitudes por segundo para sus páginas, la solución más económica
38 INTRODUCCIÓN CAP. 1
a menudo consiste en construir un centro de datos con cientos, o incluso miles, de servidores. A
continuación, las solicitudes entrantes se distribuyen entre los servidores para permitir su
procesamiento en paralelo. Por ejemplo, Google tiene centros de datos en todo el mundo para
atender solicitudes de búsqueda, el más grande, en The Dalles, Oregon, es una instalación que
tiene el tamaño de dos campos de fútbol (de EE. UU.). Se eligió la ubicación porque los centros de
datos requieren grandes cantidades de energía eléctrica y The Dalles es el sitio de una presa
hidroeléctrica de 2 GW en el río Columbia que puede proporcionarla. En total, se cree que Google
tiene más de 1.000.000 de servidores en sus centros de datos.
El negocio de las computadoras es dinámico, y las cosas cambian todo el tiempo. En la década de
1960, la informática estaba dominada por grandes ordenadores centrales (ver más abajo) que costaban
decenas de millones de dólares a los que los usuarios se conectaban mediante pequeños terminales
remotos. Este fue un modelo muy centralizado. Luego, en la década de 1980, aparecieron las
computadoras personales, millones de personas compraron una y la informática se descentralizó.
Con la llegada de los centros de datos, estamos comenzando a revivir el pasado en forma de
computación en la nube, que es la computación de mainframe V2.0. La idea aquí es que todos
tengan uno o más dispositivos simples, incluidos PC, portátiles, tabletas y teléfonos inteligentes
que son esencialmente interfaces de usuario a la nube (es decir, el centro de datos) donde todas
las fotos, videos, música y otros los datos se almacenan. En este modelo, los datos son accesibles
desde diferentes dispositivos en cualquier lugar y en cualquier momento sin que el usuario tenga
que realizar un seguimiento de dónde se encuentran. Aquí, el centro de datos lleno de servidores
ha reemplazado a la única gran computadora centralizada, pero el paradigma ha vuelto al
anterior: los usuarios tienen terminales simples y la potencia de datos y computación está
centralizada en otro lugar.
¿Quién sabe cuánto tiempo será popular este modelo? Fácilmente podría suceder en
10 años que tanta gente haya almacenado tantas canciones, fotos y videos en la nube que
la infraestructura (inalámbrica) para comunicarse con ella se haya estancado por completo.
Esto podría conducir a una nueva revolución: las computadoras personales, donde las
personas almacenan sus propios datos en sus propias máquinas localmente, evitando así el
atasco de tráfico por aire.
La moraleja aquí es que el modelo de computación popular en una era determinada
depende mucho de la tecnología, la economía y las aplicaciones disponibles en ese
momento y puede cambiar cuando cambian estos factores.
1.3.8 Mainframes
Ahora llegamos a los mainframes: computadoras del tamaño de una habitación que se remontan a
la década de 1960. Estas máquinas son descendientes directos de los mainframes IBM 360 adquiridos
hace décadas. En su mayor parte, no son mucho más rápidos que los servidores potentes, pero siempre
tienen más capacidad de E / S y, a menudo, están equipados con vastas granjas de discos, que a
menudo contienen miles de gigabytes de datos. Si bien son costosos, a menudo se mantienen en
funcionamiento debido a la inmensa inversión en software, datos, procedimientos operativos y
personal que representan. A muchas empresas les resulta más barato
SEGUNDO. 1.3 EL ZOO DE LA COMPUTADORA 39
pagar unos pocos millones de dólares de vez en cuando por uno nuevo, que incluso contemplar el
esfuerzo necesario para reprogramar todas sus aplicaciones para máquinas más pequeñas.
Es esta clase de computadora la que condujo al ahora infame problema del año 2000, que
fue causado por programadores (en su mayoría COBOL) en las décadas de 1960 y 1970 que
representaban el año como dos dígitos decimales (para ahorrar memoria). Nunca imaginaron
que su software duraría tres o cuatro décadas. Si bien el desastre predicho nunca ocurrió debido
a una gran cantidad de trabajo para solucionar el problema, muchas empresas han repetido el
mismo error simplemente agregando dos dígitos más al año. Por la presente, los autores
predicen el fin de la civilización a la medianoche del 31 de diciembre de
9999, cuando 8000 años de programas COBOL antiguos se bloquean simultáneamente.
Además de su uso para ejecutar software heredado de hace 40 años, Internet ha dado
nueva vida a los mainframes. Han encontrado un nuevo nicho como potentes servidores de
Internet, por ejemplo, manejando cantidades masivas de transacciones de comercio electrónico
por segundo, particularmente en empresas con enormes bases de datos.
Hasta hace poco, había otra categoría de computadoras incluso más poderosas que los
mainframes: supercomputadoras. Tenían CPU enormemente rápidas, muchos gigabytes
de memoria principal y discos y redes muy rápidos. Se utilizaron para cálculos científicos y
de ingeniería masivos, como simular galaxias en colisión, sintetizar nuevos medicamentos o
modelar el flujo de aire alrededor del ala de un avión. Sin embargo, en los últimos años, los
centros de datos construidos a partir de componentes básicos han llegado a ofrecer tanta
potencia informática a precios mucho más bajos, y las verdaderas supercomputadoras son
ahora una especie en extinción.
En 1968, Robert Noyce, inventor del circuito integrado de silicio; Gordon Moore, de la
fama de la ley de Moore; y Arthur Rock, un capitalista de riesgo de San Francisco, formaron
Intel Corporation para fabricar chips de memoria. En su primer año de funcionamiento,
40 INTRODUCCIÓN CAP. 1
Intel vendió solo $ 3000 en chips, pero el negocio se ha recuperado desde entonces (Intel es
ahora el mayor fabricante de chips de CPU del mundo).
A finales de la década de 1960, las calculadoras eran grandes máquinas electromecánicas
del tamaño de una impresora láser moderna y que pesaban 20 kg. En septiembre de 1969, una
empresa japonesa, Busicom, se acercó a Intel con una solicitud de que fabricara 12 chips
personalizados para una calculadora electrónica propuesta. El ingeniero de Intel asignado a este
proyecto, Ted Hoff, miró el plan y se dio cuenta de que podía poner una CPU de uso general de 4
bits en un solo chip que haría lo mismo y sería más simple y más barato también. Así, en 1970,
nació la primera CPU de un solo chip, el transistor 2300 4004 (Faggin et al., 1996).
Vale la pena señalar que ni Intel ni Busicom tenían idea de lo que acababan de hacer.
Cuando Intel decidió que valdría la pena intentar usar el 4004 en otros proyectos, se ofreció a
comprar todos los derechos del nuevo chip de Busicom devolviéndole los 60.000 dólares que
Busicom le había pagado a Intel para desarrollarlo. La oferta de Intel fue rápidamente aceptada,
momento en el que comenzó a trabajar en una versión de 8 bits del chip, el 8008, presentado en
1972. La familia Intel, comenzando con el 4004 y el 8008, se muestra en la Fig. 1-11, dando la
fecha de introducción, la frecuencia del reloj, el número de transistores y la memoria.
Pentium 3/1993 60–233 3,1 millones 4 GB Dos canalizaciones; los modelos posteriores tenían
Pentium Pro 3/1995 150-200 5,5 millones MMX 4 GB Dos niveles de caché integrados
Pentium II 5/1997 233–450 7.5M Instrucciones para Pentium Pro plus MMX de 4 GB
Pentium III 2/1999 650–1400 9.5M Instrucciones SSE de 4 GB para gráficos 3D
Pentium 4 11/2000 1300-3800 42M Hiperthreading de 4 GB; más instrucciones SSE 2 GB
Core Duo 1/2006 1600–3200 152M de núcleos dobles en un solo dado
Centro 7/2006 1200–3200 410M 64 GB Arquitectura de cuatro núcleos de 64 bits
Figura 1-11. Miembros clave de Intel Familia de CPU. Se miden las velocidades del reloj
en MHz (megahercios), donde 1 MHz es 1 millón de ciclos / seg.
Intel no esperaba mucha demanda para el 8008, por lo que estableció una línea de
producción de bajo volumen. Para sorpresa de todos, hubo un enorme interés, por lo que
Intel se dispuso a diseñar un nuevo chip de CPU que superara el límite del 8008.
SEGUNDO. 1.4 EJEMPLO DE FAMILIAS DE COMPUTADORAS 41
de 16 kilobytes de memoria (impuesto por el número de pines en el chip). Este diseño dio como
resultado la 8080, una pequeña CPU de uso general, introducida en 1974. Al igual que la PDP-8,
este producto arrasó en la industria y se convirtió instantáneamente en un artículo de mercado
masivo. Solo que en lugar de vender miles, como había hecho DEC, Intel vendió millones.
En 1978 apareció el 8086, una auténtica CPU de 16 bits en un solo chip. El 8086 fue
diseñado para ser similar al 8080, pero no era completamente compatible con el
8080. El 8086 fue seguido por el 8088, que tenía la misma arquitectura que el 8086 y ejecutaba
los mismos programas, pero tenía un bus de 8 bits en lugar de un bus de 16 bits, lo que lo hacía
más lento y más barato que el 8086. Cuando IBM eligió el 8088 como CPU para el IBM PC original,
este chip se convirtió rápidamente en el estándar de la industria de las computadoras personales.
El siguiente paso lógico fue una verdadera CPU de 32 bits en un chip, el 80386, lanzado en
1985. Al igual que el 80286, este era más o menos compatible con todo lo que se remontaba al
8080. Ser compatible con versiones anteriores fue una bendición para la gente para para quienes
ejecutar software antiguo era importante, pero una molestia para las personas que hubieran
preferido una arquitectura simple, limpia y moderna, libre de los errores y la tecnología del
pasado.
Cuatro años después salió el 80486. Básicamente, era una versión más rápida del 80386 que
también tenía una unidad de punto flotante y 8 kilobytes de memoria caché en chip.
Memoria caché se utiliza para contener las palabras de memoria más utilizadas dentro o cerca
de la CPU, con el fin de evitar accesos (lentos) a la memoria principal. El 80486 también tenía
soporte de multiprocesador incorporado, lo que permite a los fabricantes construir sistemas que
contienen múltiples CPU que comparten una memoria común.
En este punto, Intel descubrió por las malas (al perder una demanda por infracción de marca
registrada) que los números (como 80486) no pueden ser marcas registradas, por lo que la siguiente
generación obtuvo un nombre: Pentium ( de la palabra griega para cinco, πεντε). A diferencia del 80486,
que tenía una canalización interna, el Pentium tenía dos, lo que ayudó a que fuera dos veces más rápido
(analizaremos las canalizaciones en detalle en el capítulo 2).
Más adelante en la producción, Intel agregó MMX (extensión MultiMedia)
instrucciones. Estas instrucciones estaban destinadas a acelerar los cálculos
necesarios para procesar audio y video, haciendo innecesaria la adición de
coprocesadores multimedia especiales.
Cuando apareció la próxima generación, las personas que esperaban el Sexium ( sexo
significa seis en latín) quedaron muy decepcionados. El nombre Pentium ahora era tan
42 INTRODUCCIÓN CAP. 1
bien sabido que la gente de marketing quería mantenerlo, y el nuevo chip se llamó Pentium
Pro. A pesar del pequeño cambio de nombre de su predecesor, este procesador representó
una ruptura importante con el pasado. En lugar de tener dos o más canalizaciones, el
Pentium Pro tenía una organización interna muy diferente y podía ejecutar hasta cinco
instrucciones a la vez.
Otra innovación encontrada en el Pentium Pro fue una memoria caché de dos niveles. El chip
del procesador en sí tenía 8 kilobytes de memoria rápida para almacenar las instrucciones de uso
común y otros 8 kilobytes de memoria rápida para almacenar los datos de uso común. En la
misma cavidad dentro del paquete Pentium Pro (pero no en el chip en sí) había una segunda
memoria caché de 256 kilobytes.
Aunque el Pentium Pro tenía un caché grande, carecía de las instrucciones MMX
(porque Intel no podía fabricar un chip tan grande con rendimientos aceptables). Cuando la
tecnología mejoró lo suficiente como para obtener tanto las instrucciones MMX como el
caché en un chip, el producto combinado se lanzó como Pentium II. A continuación, aún
más instrucciones multimedia, llamadas SSE (Extensiones de Streaming SIMD), se
agregaron para obtener gráficos 3D mejorados (Raman et al., 2000). El nuevo chip fue
apodado Pentium III, pero internamente era esencialmente un Pentium II.
El próximo Pentium, lanzado en noviembre de 2000, se basó en una arquitectura interna
diferente pero tenía el mismo conjunto de instrucciones que los Pentium anteriores. Para
celebrar este evento, Intel cambió de números romanos a números arábigos y lo llamó Pentium
4. Como de costumbre, el Pentium 4 era más rápido que todos sus predecesores. los
La versión de 3.06 GHz también introdujo una nueva característica intrigante:
hyperthreading. Esta característica permitía a los programas dividir su trabajo en dos
subprocesos de control que el Pentium 4 podía ejecutar en paralelo, acelerando la
ejecución. Además, se agregó otro lote de instrucciones SSE para acelerar aún más el
procesamiento de audio y video.
En 2006, Intel cambió la marca de Pentium a Core y lanzó un chip de doble núcleo,
el 2 núcleos, duales. Cuando Intel decidió que quería una versión de un solo núcleo
más barata del chip, simplemente vendió Core 2 dúos con un núcleo desactivado
porque, en última instancia, desperdiciar un poco de silicio en cada chip fabricado era
más barato que incurrir en el enorme gasto de diseñar y probar un nuevo chip de
rasguño. La serie Core ha seguido evolucionando, siendo i3, i5 e i7 variantes populares
para computadoras de bajo, medio y alto rendimiento. Sin duda, seguirán más
variantes. En la figura 1-12 se presenta una foto del i7. En realidad, tiene ocho núcleos,
pero excepto en la versión Xeon, solo seis están habilitados. Este enfoque significa que
un chip con uno o dos núcleos defectuosos aún puede venderse desactivando el (los)
defectuoso (s). Cada núcleo tiene sus propios cachés de nivel 1 y nivel 2, pero también
hay un caché compartido de nivel 3 (L3) utilizado por todos los núcleos.
Además de las CPU de escritorio de la línea principal discutidas hasta ahora, Intel ha fabricado
variantes de algunos de los chips Pentium para mercados especiales. A principios de 1998, Intel
introdujo una nueva línea de productos denominada Celeron, que era básicamente una versión de bajo
precio y bajo rendimiento del Pentium 2 pensada para PC de gama baja. Ya que
SEGUNDO. 1.4 mi
Figura 1-12. El Intel Core i7-3960X muere. La matriz mide 21 por 21 mm y tiene 2,27 mil
millones de transistores. © 2011 Intel Corporation. Usado con permiso.
el Celeron tiene la misma arquitectura que el Pentium 2, no lo discutiremos más en este libro. En
junio de 1998, Intel presentó una versión especial del Pentium 2 para el segmento superior del
mercado. Este procesador, llamado Xeon, tenía un caché más grande, un bus más rápido y un
mejor soporte de multiprocesador, pero por lo demás era un Pentium 2 normal, por lo que
tampoco lo discutiremos por separado. El Pentium III también tenía una versión Xeon al igual
que los chips más recientes. En chips más recientes, una característica del Xeon son más núcleos.
el Core es cuatro órdenes de magnitud más complejo que el 8086, por lo que puede hacer
bastantes cosas que el 8086 no pudo hacer. Estas extensiones poco sistemáticas han dado como
resultado una arquitectura que no es tan elegante como podría haber sido si alguien hubiera
dado a los arquitectos del Pentium 4 42 millones de transistores e instrucciones para comenzar
de nuevo.
Es interesante observar que, aunque la ley de Moore se ha asociado durante mucho tiempo con el
número de bits en una memoria, se aplica igualmente bien a los chips de la CPU. Al graficar los
recuentos de transistores dados en la figura 1-8 contra la fecha de introducción de cada chip en una
escala semilogarítmica, vemos que la ley de Moore también se cumple aquí. Este gráfico
se muestra en la figura 1-13.
Pentium II
10M Pentium
Ley de moore
1M
80286 80486
100 mil Pentium
Transistores
8086 80386
Pro
10K 8080
4004 8008
1K 8008
100
10
1
1970 1975 1980 1985 1990 1995 2000 2005 2010
Año de introducción
cache. Debido a la forma en que el consumo de energía se relaciona con el voltaje y la velocidad
del reloj, dos CPU en un chip consumen mucha menos energía que una CPU al doble de
velocidad. Como consecuencia, la ganancia ofrecida por la ley de Moore puede explotarse cada
vez más en el futuro para incluir más núcleos y cachés en chip más grandes, en lugar de
velocidades de reloj cada vez más altas. Aprovechar estos multiprocesadores plantea grandes
desafíos para los programadores, porque a diferencia de las sofisticadas microarquitecturas
monoprocesador del pasado que podían extraer más rendimiento de los programas existentes,
los multiprocesadores requieren que el programador orquesta explícitamente la ejecución
paralela, utilizando hilos, semáforos, memoria compartida y otros dolores de cabeza. y
tecnologías que inducen errores.
A principios de los 80, la empresa Acorn Computer, con sede en el Reino Unido,
con el éxito de su computadora personal BBC Micro de 8 bits, comenzó a trabajar en
una segunda máquina con la esperanza de competir con la PC IBM recientemente
lanzada. El BBC Micro se basó en el procesador 6502 de 8 bits, y Steve Furber y sus
colegas en Acorn sintieron que el 6502 no tenía la fuerza para competir con el
procesador 8086 de 16 bits de IBM PC. Comenzaron a buscar opciones en el mercado
y decidieron que eran demasiado limitadas.
Inspirándose en el proyecto RISC de Berkeley, en el que un pequeño equipo
diseñó un procesador notablemente rápido (que finalmente llevó a la arquitectura
SPARC), decidieron construir su propia CPU para el proyecto. Llamaron a su diseño
Acorn RISC Machine (o ARM, que luego se rebautizaría como la máquina Advanced
RISC cuando ARM finalmente se separó de Acorn). El diseño se completó en
1985. Incluía instrucciones y datos de 32 bits y un espacio de direcciones de 26 bits, y
fue fabricado por VLSI Technology.
La primera arquitectura ARM (llamada ARM2) apareció en la computadora personal
Acorn Archimedes. El Arquímedes era una máquina muy rápida y económica para su época,
con una capacidad de hasta 2 MIPS (millones de instrucciones por segundo) y costaba solo
899 libras esterlinas en el lanzamiento. La máquina se hizo muy popular en el Reino Unido,
Irlanda, Australia y Nueva Zelanda, especialmente en las escuelas.
Basado en el éxito de Archimedes, Apple se acercó a Acorn para desarrollar un
procesador ARM para su próximo proyecto Apple Newton, la primera computadora de
bolsillo. Para centrarse mejor en el proyecto, el equipo de arquitectura ARM dejó
Acorn para crear una nueva empresa llamada Advanced RISC Machines (ARM). Su
nuevo procesador se llamó ARM 610, que impulsó el Apple Newton cuando se lanzó en
1993. A diferencia del diseño ARM original, este nuevo procesador ARM incorporó una
caché de 4 KB que mejoró significativamente el rendimiento del diseño. Aunque el
Apple Newton no fue un gran éxito, el ARM 610 vio otras aplicaciones exitosas,
incluida la computadora PC RISC de Acorn.
A mediados de la década de 1990, ARM colaboró con Digital Equipment Corporation para
desarrollar una versión de alta velocidad y bajo consumo de ARM, destinada a un uso frugal de energía.
46 INTRODUCCIÓN CAP. 1
Quizás la más venerable de las arquitecturas ARM es el diseño ARM7, lanzado por primera vez por
ARM en 1994 y todavía en uso generalizado en la actualidad. El diseño incluía cachés de instrucciones y
datos separados, y también incorporaba el conjunto de instrucciones Thumb de 16 bits. El conjunto de
instrucciones Thumb es una versión abreviada del conjunto completo de instrucciones ARM de 32 bits,
lo que permite a los programadores codificar muchas de las operaciones más comunes en instrucciones
más pequeñas de 16 bits, lo que reduce significativamente la cantidad de memoria de programa
necesaria. El procesador ha funcionado bien para una amplia gama de aplicaciones integradas de gama
baja a media, como tostadoras, control de motores e incluso la consola de juegos portátil Nintendo
Gameboy Advance.
A diferencia de muchas empresas de informática, ARM no fabrica ningún
microprocesador. En su lugar, crea diseños y bibliotecas y herramientas de desarrollo
basadas en ARM, y las otorga a los diseñadores de sistemas y fabricantes de chips. Por
ejemplo, la CPU utilizada en la tableta Samsung Galaxy Tab basada en Android es un
procesador basado en ARM. La Galaxy Tab contiene el procesador de sistema en chip
Tegra 2, que incluye dos procesadores ARM Cortex-A9 y una unidad de procesamiento
de gráficos Nvidia GeForce. Los núcleos Tegra 2 fueron diseñados por ARM, integrados
en un diseño de sistema en un chip por Nvidia y fabricados por Taiwan Semiconductor
Manufacturing Company (TSMC). Es una colaboración impresionante de empresas de
diferentes países en la que todas las empresas aportaron valor al diseño final.
La Figura 1-14 muestra una fotografía del sistema en un chip Tegra 2 de Nvidia. El diseño contiene
tres procesadores ARM: dos núcleos ARM Cortex-A9 de 1,2 GHz más un núcleo ARM7. Los núcleos
Cortex-A9 son núcleos desordenados de doble problema con una caché L2 de 1 MB y soporte para
multiprocesamiento de memoria compartida. (Son muchas palabras de moda que veremos en capítulos
posteriores. Por ahora, solo sepa que estas características hacen que el diseño sea muy rápido). El
núcleo ARM7 es un núcleo ARM más antiguo y más pequeño que se usa para la configuración del
sistema y la administración de energía. El núcleo de gráficos es un diseño de unidad de procesamiento
de gráficos (GPU) GeForce de 333 MHz optimizado para un funcionamiento con bajo consumo de
energía. También se incluyen en el Tegra 2 un codificador / decodificador de video, un procesador de
audio y una interfaz de salida de video HDMI.
La arquitectura ARM ha tenido un gran éxito en los mercados integrados, móviles y de
bajo consumo. En enero de 2011, ARM anunció que había vendido 15 mil millones de
procesadores ARM desde sus inicios e indicó que las ventas seguían creciendo. Si bien está
diseñada para mercados de gama baja, la arquitectura ARM tiene la capacidad
computacional para funcionar en cualquier mercado, y hay indicios de que puede estar
expandiendo sus horizontes. Por ejemplo, en octubre de 2011, un ARM de 64 bits se
SEGUNDO. 1.4 EJEMPLO
Anunciado. También en enero de 2011, Nvidia anunció el "Proyecto Denver", un sistema en un chip
basado en ARM que se está desarrollando para el servidor y otros mercados. El diseño incorporará
múltiples procesadores ARM de 64 bits más una GPU de propósito general (GPGPU). Los aspectos de
bajo consumo de energía del diseño ayudarán a reducir los requisitos de refrigeración de las granjas de
servidores y los centros de datos.
Nuestro tercer ejemplo es muy diferente del primero (la arquitectura x86, utilizada en
computadoras personales y servidores) y del segundo (la arquitectura ARM, utilizada en
PDA y teléfonos inteligentes). Es la arquitectura AVR, que se utiliza en sistemas integrados
de muy baja gama. La historia de AVR comienza en 1996 en el Instituto Noruego de
Tecnología, donde los estudiantes Alf-Egil Bogen y Vegard Wollan diseñaron una CPU RISC
de 8 bits llamada AVR. Según se informa, se le dio este nombre porque era '' (A) Si y
Procesador (R) ISC de (V) egard ''. Poco después de que se completó el diseño, Atmel lo
compró y fundó Atmel Norway, donde los dos arquitectos continuaron perfeccionando el
diseño del procesador AVR. Atmel lanzó su primer microcontrolador AVR, el AT90S1200, en
1997. Para facilitar su adopción por parte de los diseñadores de sistemas, implementaron el
pinout para que fuera exactamente el mismo que el del Intel 8051, que era uno
48 INTRODUCCIÓN CAP. 1
de los microcontroladores más populares en ese momento. Hoy en día existe mucho
interés en la arquitectura AVR porque está en el corazón de la popular plataforma de
controlador integrado Arduino de código abierto.
La arquitectura AVR se implementa en tres clases de microcontroladores, que se enumeran
en la figura 1-15. La clase más baja, la tinyAVR está diseñada para las aplicaciones con mayor
restricción de área, energía y costo. Incluye una CPU de 8 bits, soporte básico de E / S digital y
soporte de entrada analógica (por ejemplo, lectura de valores de temperatura de un termistor). El
tinyAVR es tan pequeño que sus pines tienen una doble función, de modo que pueden
reprogramarse en tiempo de ejecución para cualquiera de las funciones digitales o analógicas
compatibles con el microcontrolador. El megaAVR, que se encuentra en el popular sistema
integrado de código abierto Arduino, también agrega soporte de E / S en serie, relojes internos y
salidas analógicas programables. El extremo superior del extremo inferior es el microcontrolador
AVR XMEGA, que también incorpora un acelerador para operaciones criptográficas más soporte
integrado para interfaces USB.
Junto con varios periféricos adicionales, cada clase de procesador AVR incluye algunos
recursos de memoria adicionales. Los microcontroladores suelen tener tres tipos de memoria a
bordo: flash, EEPROM y RAM. La memoria flash es programable mediante una interfaz externa y
altos voltajes, y aquí es donde se almacenan los datos y el código del programa. La memoria flash
RAM no es volátil, por lo que incluso si el sistema está apagado, la memoria flash recordará lo
que se escribió en ella. Al igual que la memoria flash, EEPROM también es no volátil, pero a
diferencia de la memoria RAM flash, el programa puede cambiarla mientras se está ejecutando.
Este es el almacenamiento en el que un sistema integrado mantendría la información de
configuración del usuario, como si su reloj de alarma muestra la hora en formato de 12 o 24
horas. Finalmente, la RAM es donde se almacenarán las variables del programa mientras se
ejecuta el programa. Esta memoria es volátil por lo que cualquier valor almacenado aquí se
perderá una vez que el sistema pierda energía. Estudiamos en detalle los tipos de RAM volátiles y
no volátiles en el Cap. 2.
La receta para el éxito en el negocio de los microcontroladores es meter en el chip todo
lo que pueda necesitar (y el fregadero de la cocina también, si se puede reducir a un
milímetro cuadrado) y luego ponerlo en un paquete pequeño y económico con muy pocos
patas. Al integrar muchas funciones en el microcontrolador, puede funcionar para muchas
aplicaciones y, al hacerlo barato y pequeño, puede servir para muchos factores de forma.
Para tener una idea de cuántas cosas se empaquetan en un microcontrolador moderno,
echemos un vistazo a los periféricos incluidos en el Atmel megaAVR-168:
SEGUNDO. 1.4 EJEMPLO DE FAMILIAS DE COMPUTADORAS 49
3. Seis canales de modulación de ancho de pulso utilizados, por ejemplo, para controlar la
intensidad de la luz o la velocidad del motor.
4. Ocho canales de conversión de analógico a digital que se utilizan para leer los niveles de voltaje.
Para evitar confusiones, vale la pena señalar explícitamente que en este libro, como en la
informática en general, se utilizan unidades métricas en lugar de las unidades inglesas
tradicionales (el sistema furlong-stone-quincena). Los principales prefijos de métricas se
enumeran en la figura 1-16. Los prefijos generalmente se abrevian con sus primeras letras, con
las unidades mayores a 1 en mayúscula (KB, MB, etc.). Una excepción (por razones históricas) son
los kbps por kilobits / seg. Por lo tanto, una línea de comunicación de 1 Mbps transmite 10 6
bits / seg y un reloj de 100 pseg (o 100 ps) marca cada 10 - 10 segundos. Dado que tanto milli
como micro comienzan con la letra "m", se tuvo que hacer una elección. Normalmente, '' m
'' es para mili y '' μ '' (la letra griega mu) es para micro.
También vale la pena señalar que en la práctica común de la industria para medir tamaños
de memoria, disco, archivo y base de datos, las unidades tienen significados ligeramente
diferentes. Ahí, kilo significa 2 10 ( 1024) en lugar de 10 3 ( 1000) porque los recuerdos son siempre
un poder de dos. Por tanto, una memoria de 1 KB contiene 1024 bytes, no 1000 bytes. Del mismo
modo, una memoria de 1 MB contiene 2 20 ( 1.048.576) bytes, una memoria de 1 GB contiene 2 30
Este libro trata sobre computadoras multinivel (que incluye casi todas las
computadoras modernas) y cómo están organizadas. Examinaremos cuatro niveles con
considerable detalle, a saber, el nivel de lógica digital, el nivel de microarquitectura, el nivel
de ISA y el nivel de máquina del sistema operativo. Algunas de las cuestiones básicas que
deben examinarse incluyen el diseño general del nivel (y por qué se diseñó de esa manera),
los tipos de instrucciones y datos disponibles, la organización de la memoria y el
direccionamiento, y el método por el cual se implementa el nivel. El estudio de estos temas,
y otros similares, se denomina organización informática o arquitectura informática.
Nos interesan principalmente los conceptos más que los detalles o las matemáticas
formales. Por esa razón, algunos de los ejemplos dados serán muy simplificados, con el fin
de enfatizar las ideas centrales y no los detalles.
Para proporcionar una idea de cómo los principios presentados en este libro pueden
aplicarse y se aplican en la práctica, utilizaremos las arquitecturas x86, ARM y AVR como ejemplos
de ejecución a lo largo del libro. Estos tres han sido elegidos por varias razones. En primer lugar,
todos se utilizan ampliamente y es probable que el lector tenga acceso al menos a uno de ellos.
En segundo lugar, cada uno tiene su propia arquitectura única, que proporciona una base para la
comparación y fomenta una actitud de "¿cuáles son las alternativas?". Los libros que tratan con
una sola máquina a menudo dejan al lector con un sentimiento de "verdadero diseño de máquina
revelado", lo cual es absurdo a la luz de los muchos compromisos y decisiones arbitrarias que los
diseñadores se ven obligados a tomar. Se anima al lector a
SEGUNDO. 1,6 ESQUEMA DE ESTE LIBRO 51
Estudie estas y todas las demás computadoras con ojo crítico y trate de comprender por qué las
cosas son como son, así como también cómo podrían haberse hecho de manera diferente, en
lugar de simplemente aceptarlas como dadas.
Debe quedar claro desde el principio que este no es un libro sobre cómo
programar las arquitecturas x86, ARM o AVR. Estas máquinas se utilizarán con fines
ilustrativos cuando corresponda, pero no pretendemos estar completos. Los lectores
que deseen una introducción completa a uno de ellos deben consultar las
publicaciones del fabricante.
El Capítulo 2 es una introducción a los componentes básicos de una computadora:
procesadores, memorias y equipos de entrada / salida. Su objetivo es proporcionar una
descripción general de la arquitectura del sistema y una introducción a los capítulos siguientes.
Los capítulos 3, 4, 5 y 6 tratan cada uno de un nivel específico que se muestra en la figura
1-2. Nuestro trato es de abajo hacia arriba, porque tradicionalmente las máquinas se han
diseñado así. El diseño de nivel k está determinada en gran medida por las propiedades del nivel
k - 1, por lo que es difícil comprender cualquier nivel a menos que ya tenga una buena comprensión del
nivel subyacente que lo motivó. Además, desde el punto de vista educativo es adecuado pasar de los
niveles inferiores más simples a los niveles superiores más complejos en lugar de viceversa.
El capítulo 3 trata sobre el nivel lógico digital, el verdadero hardware de la máquina. Discute
qué son las puertas y cómo se pueden combinar en circuitos útiles. También se presenta el
álgebra booleana, una herramienta para analizar circuitos digitales. Se explican los buses de
computadora, especialmente el popular bus PCI. En este capítulo se analizan numerosos
ejemplos de la industria, incluidos los tres ejemplos en ejecución mencionados anteriormente.
PROBLEMAS
1. Explique cada uno de los siguientes términos con sus propias palabras:
una. Traductor.
B. Interprete.
C. Máquina virtual.
3. ¿Se imagina alguna computadora multinivel en la que el nivel del dispositivo y los niveles lógicos digitales
no fueran los niveles más bajos? Explicar.
4. Considere una computadora multinivel en la que todos los niveles son diferentes. Cada nivel tiene
instrucciones que son metro tiempos tan poderosos como los del nivel inferior; es decir, un nivel r
la instrucción puede hacer el trabajo de metro nivel r - 1 instrucciones. Si un programa de nivel 1 requiere
k segundos en ejecutarse, cuánto tardarían los programas equivalentes en los niveles 2, 3 y 4, suponiendo
norte nivel r Se requieren instrucciones para interpretar un solo r + 1 instrucción?
5. Algunas instrucciones en el nivel de máquina del sistema operativo son idénticas a las
instrucciones del lenguaje ISA. Estas instrucciones las lleva a cabo directamente el
microprograma o el hardware y no el sistema operativo. A la luz de su respuesta al
problema anterior, ¿por qué cree que es así?
6. Considere una computadora con intérpretes idénticos en los niveles 1, 2 y 3. Se necesita un intérprete norte
instrucciones para buscar, examinar y ejecutar una instrucción. Una instrucción de nivel 1 requiere k
nanosegundos para ejecutar. ¿Cuánto tiempo se tarda en recibir una instrucción en los niveles?
2, 3 y 4?
7. ¿En qué sentido son equivalentes el hardware y el software? ¿En qué sentido no son
equivalentes?
8. El motor diferencial de Babbage tenía un programa fijo que no se podía cambiar. ¿Es esto
esencialmente lo mismo que un CD-ROM moderno que no se puede cambiar? Explica tu
respuesta.
9. Una de las consecuencias de la idea de von Neumann de almacenar el programa en la memoria es que los
programas pueden modificarse, al igual que los datos. ¿Puede pensar en un ejemplo en el que esta
instalación podría haber sido útil? ( Insinuación: Piense en hacer aritmética en matrices).
10. La relación de rendimiento del modelo 360 75 fue 50 veces mayor que la del modelo 360 30, sin
embargo, el tiempo de ciclo fue solo cinco veces más rápido. ¿Cómo explica esta discrepancia?
11. En la Fig. 1-5 y la Fig. 1-6 se muestran dos diseños de sistema. Describa cómo podría ocurrir la
entrada / salida en cada sistema. ¿Cuál tiene el potencial para un mejor rendimiento general del
sistema?
12. Suponga que cada uno de los 300 millones de personas en los Estados Unidos consume por completo dos
paquetes de productos al día con etiquetas RFID. ¿Cuántas etiquetas RFID se deben producir?
CAP. 1 PROBLEMAS 53
ducida anualmente para satisfacer esa demanda? A un centavo la etiqueta, ¿cuál es el costo total
de las etiquetas? Dado el tamaño del PIB, ¿esta cantidad de dinero será un obstáculo para su uso
en cada paquete ofrecido a la venta?
13. Nombre tres dispositivos que sean candidatos para ser ejecutados por una CPU incorporada.
14. En un momento determinado, un transistor en un chip tenía un diámetro de 0,1 micrones. Según la ley de
Moore, ¿qué tamaño tendría un transistor en el modelo del próximo año?
15. Se ha demostrado que la ley de Moore no solo se aplica a la densidad de semiconductores, sino que
también predice el aumento de los tamaños de simulación (razonables) y la reducción de los tiempos de
ejecución de la simulación computacional. Primero se muestra para una simulación de mecánica de
fluidos que tarda 4 horas en ejecutarse en una máquina hoy, que solo debería tomar 1 hora en funcionar
en máquinas construidas dentro de 3 años, y solo 15 minutos en máquinas construidas dentro de 6 años.
Luego demuestre que para una simulación grande que tiene un tiempo de ejecución estimado de 5 años,
se completaría antes si esperáramos 3 años para comenzar la simulación.
dieciséis. En 1959, un IBM 7090 podía ejecutar unas 500.000 instrucciones / seg, tenía una memoria de
32,768 palabras de 36 bits y cuesta $ 3 millones. Compare esto con una computadora actual y determine
cuánto mejor es la actual multiplicando la proporción de tamaños de memoria y velocidades y luego
dividiendo esto por la proporción de los precios. Ahora vea lo que los mismos beneficios habrían hecho a
la aviación en el mismo período de tiempo. El Boeing 707 se entregó a las aerolíneas en cantidades
sustanciales en 1959. Su velocidad era de 950 km / h y su capacidad era inicialmente de 180 pasajeros.
Cuesta $ 4 millones. ¿Cuáles serían ahora la velocidad, la capacidad y el costo de una aeronave si tuviera
las mismas ganancias que una computadora? Claramente, establezca sus suposiciones sobre la velocidad,
el tamaño de la memoria y el precio.
17. Los desarrollos en la industria de la computación son a menudo cíclicos. Originalmente, los conjuntos de
instrucciones estaban cableados, luego se microprogramaban, luego aparecieron las máquinas RISC y se
volvieron a cablear. Originalmente, la informática estaba centralizada en grandes ordenadores centrales.
Enumere aquí también dos desarrollos que demuestren el comportamiento cíclico.
18. El problema legal de quién inventó la computadora fue resuelto en abril de 1973 por el juez Earl
Larson, quien manejó una demanda por infracción de patente presentada por Sperry Rand
Corporation, que había adquirido las patentes de ENIAC. La posición de Sperry Rand era que todos
los que fabricaban una computadora les debían regalías porque poseían las patentes clave. El caso
fue a juicio en junio de 1971 y se ingresaron más de 30.000 pruebas. La transcripción judicial tenía
más de 20.000 páginas. Estudie este caso más detenidamente utilizando la amplia información
disponible en Internet y escriba un informe que discuta los aspectos técnicos del caso. ¿Qué
patentaron Eckert y Mauchley exactamente y por qué el juez sintió que su sistema se basaba en el
trabajo anterior de Atanasoff?
19. Elija las tres personas que crea que fueron más influyentes en la creación de hardware
informático moderno y escriba un informe breve que describa sus contribuciones y por qué
las eligió.
20. Elija las tres personas que crea que fueron más influyentes en la creación de software de sistemas
informáticos modernos y escriba un informe breve que describa sus contribuciones y por qué las
eligió.
54 INTRODUCCIÓN CAP. 1
21. Elija las tres personas que crea que fueron más influyentes en la creación de sitios web modernos
que atraen mucho tráfico y escriba un informe breve que describa sus contribuciones y por qué las
eligió.
2
SISTEMAS DE COMPUTADORA
ORGANIZACIÓN
2.1 PROCESADORES
La organización de una computadora simple orientada al bus se muestra en la figura 2-1. los
CPU (unidad central de procesamiento) es el "cerebro" de la computadora. Su función es
ejecutar programas almacenados en la memoria principal obteniendo sus instrucciones,
examinándolas y luego ejecutándolas una tras otra. Los componentes están conectados por un
autobús, que es una colección de cables paralelos para transmitir direcciones, datos y señales de
control. Los buses pueden ser externos a la CPU, conectándolos a la memoria y dispositivos de E /
S, pero también internos a la CPU, como veremos en breve. Las computadoras modernas tienen
múltiples buses.
La CPU se compone de varias partes distintas. La unidad de control es responsable de
obtener instrucciones de la memoria principal y determinar su tipo. La unidad aritmética
lógica realiza operaciones como la suma y el Y booleano necesario para llevar a cabo las
instrucciones.
55
56 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2
Control
unidad
Aritmética
unidad lógica
(ALU) Dispositivos de E / S
Registros
Principal
Disco Impresora
memoria
...
...
Autobús
Figura 2-1. La organización de una computadora simple con una CPU y dos dispositivos
de E / S.
La CPU también contiene una pequeña memoria de alta velocidad que se utiliza para almacenar
resultados temporales y cierta información de control. Esta memoria está formada por una serie de
registros, cada uno de los cuales tiene un tamaño y función determinados. Por lo general, todos los
registros tienen el mismo tamaño. Cada registro puede contener un número, hasta un máximo
determinado por su tamaño. Los registros se pueden leer y escribir a alta velocidad ya que son internos
de la CPU.
El registro más importante es el Contador de programas (PC), que apunta a la siguiente
instrucción que se buscará para su ejecución. (El nombre "contador de programa" es algo
engañoso porque no tiene nada que ver con contando cualquier cosa, pero el término se usa
universalmente) .También es importante la Registro de instrucciones (IR), que contiene la
instrucción que se está ejecutando actualmente. La mayoría de las computadoras también tienen
muchos otros registros, algunos de ellos para propósitos generales y otros para propósitos
específicos. Sin embargo, el sistema operativo utiliza otros registros para controlar la
computadora.
A+B
A
Registros
ALU
La propia ALU realiza sumas, restas y otras operaciones simples en sus entradas,
produciendo así un resultado en el registro de salida. Este registro de salida se puede volver a
almacenar en un registro. Más adelante, el registro se puede escribir (es decir, almacenar) en la
memoria, si se desea. No todos los diseños tienen la A, B, y registros de salida. En el ejemplo, se
ilustra la adición, pero las ALU también pueden realizar otras operaciones.
La mayoría de las instrucciones se pueden dividir en una de dos categorías: registro-memoria o
registro-registro. Las instrucciones de memoria de registro permiten que las palabras de memoria se
recuperen en registros, donde, por ejemplo, se pueden usar como entradas de ALU en instrucciones
posteriores. (Las '' palabras '' son las unidades de datos que se mueven entre la memoria y los registros.
Una palabra puede ser un número entero. Discutiremos la organización de la memoria más adelante en
este capítulo.) Otras instrucciones de memoria de registro permiten que los registros se almacenen de
nuevo en la memoria.
El otro tipo de instrucción es registro-registro. Una instrucción típica de registro-
registro obtiene dos operandos de los registros, los lleva a los registros de entrada de
la ALU, realiza alguna operación sobre ellos (como suma o AND booleano),
58 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2
y almacena el resultado en uno de los registros. El proceso de ejecutar dos operandos a través de
la ALU y almacenar el resultado se denomina ciclo de ruta de datos y es el corazón de la mayoría
de las CPU. En gran medida, define lo que puede hacer la máquina. Las computadoras modernas
tienen múltiples ALU que operan en paralelo y se especializan para diferentes funciones. Cuanto
más rápido sea el ciclo de la ruta de datos, más rápido funcionará la máquina.
La CPU ejecuta cada instrucción en una serie de pequeños pasos. A grandes rasgos, los
pasos son los siguientes:
6. Ejecute la instrucción.
7. Vaya al paso 1 para comenzar a ejecutar la siguiente instrucción.
El mero hecho de que sea posible escribir un programa que pueda imitar la función de una
CPU muestra que un programa no necesita ser ejecutado por una CPU "hardware" que consiste
en una caja llena de componentes electrónicos. En cambio, un programa puede llevarse a cabo
haciendo que otro programa busque, examine y ejecute sus instrucciones. Un programa (como el
de la figura 2-3) que busca, examina y ejecuta las instrucciones de otro programa se llama
Interprete, como se menciona en el Cap. 1.
SEGUNDO. 2.1 PROCESADORES 59
public class Interp {
PC int estática; // el contador del programa contiene la dirección de la siguiente instrucción
interpretar vacío estático público (memoria int [], dirección inicial int) {
// Este procedimiento interpreta programas para una máquina simple con instrucciones que
tienen // un operando de memoria. La máquina tiene un registro AC (acumulador), utilizado para
// aritmética. La instrucción ADD agrega un número entero en la memoria al AC, por ejemplo. // El
intérprete sigue funcionando hasta que la instrucción HALT desactiva el bit de ejecución. // El estado
de un proceso que se ejecuta en esta máquina consiste en la memoria, el // contador del programa,
el bit de ejecución y el AC. Los parámetros de entrada consisten en // la imagen de la memoria y la
dirección de inicio.
PC = dirección de inicio;
while (ejecutar bit) {
instr = memoria [PC]; // buscar la siguiente instrucción en instr //
PC = PC + 1; incrementar el contador del programa //
tipo de instr = obtener tipo de instr (instr); determinar el tipo de instrucción // localizar los
data loc = buscar datos (instr, instr type); si datos ( - 1 si no hay) // si loc de datos es - 1, no
(loc datos> = 0) hay operando // recupera los datos
datos = memoria [loc de datos];
ejecutar (tipo de instrucción, datos); // ejecutar instrucción
}
private static int get instr type (int addr) {...} private
static int find data (int instr, int type) {...} private
static void execute (int type, int data) {...}
}
A medida que el mercado de las computadoras explotó drásticamente en la década de 1970 y las
capacidades informáticas crecieron rápidamente, la demanda de computadoras de bajo costo favoreció
los diseños de computadoras que utilizan intérpretes. La capacidad de adaptar el hardware y el
intérprete para un conjunto particular de instrucciones surgió como un diseño altamente rentable para
procesadores. A medida que la tecnología de semiconductores subyacente avanzó rápidamente, las
ventajas del costo superaron las oportunidades de un mayor rendimiento, y las arquitecturas basadas
en intérpretes se convirtieron en la forma convencional de diseñar computadoras. Casi todas las
computadoras nuevas diseñadas en la década de 1970, desde miniordenadores hasta mainframes, se
basaban en la interpretación.
A finales de los 70, el uso de procesadores simples que ejecutan intérpretes se había
generalizado, excepto entre los modelos más caros y de mayor rendimiento, como el Cray-1
y la serie Control Data Cyber. El uso de un intérprete eliminó las limitaciones de costo
inherentes a las instrucciones complejas, por lo que los diseñadores comenzaron a explorar
instrucciones mucho más complejas, particularmente las formas de especificar los
operandos que se utilizarían.
Esta tendencia alcanzó su cenit con la computadora VAX de Digital Equipment
Corporation, que tenía varios cientos de instrucciones y más de 200 formas diferentes
de especificar los operandos que se utilizarían en cada instrucción.
Desafortunadamente, la arquitectura VAX fue concebida desde el principio para ser
implementada con un intérprete, sin pensar en la implementación de un modelo de
alto rendimiento. Esta mentalidad resultó en la inclusión de un gran número de
instrucciones que eran de valor marginal y difíciles de ejecutar directamente. Esta
omisión resultó ser fatal para el VAX y, en última instancia, también para DEC (Compaq
compró DEC en 1998 y Hewlett-Packard compró Compaq en 2001).
Aunque los primeros microprocesadores de 8 bits eran máquinas muy simples con conjuntos de
instrucciones muy simples, a finales de los 70, incluso los microprocesadores habían cambiado a
diseños basados en intérpretes. Durante este período, uno de los mayores desafíos que enfrentan los
diseñadores de microprocesadores fue lidiar con la creciente complejidad que hacen posible los
circuitos integrados. Una ventaja importante del enfoque basado en intérpretes fue la capacidad de
diseñar un procesador simple, con la complejidad confinada en gran medida a la memoria que contiene
al intérprete. Por lo tanto, un diseño de hardware complejo podría convertirse en un diseño de software
complejo.
El éxito del Motorola 68000, que tenía un gran conjunto de instrucciones interpretadas,
y la falla simultánea del Zilog Z8000 (que tenía un conjunto de instrucciones igualmente
grande, pero sin un intérprete) demostraron las ventajas de un intérprete para llevar un
nuevo microprocesador al mercado. rápidamente. Este éxito fue aún más sorprendente
dada la ventaja de Zilog (el predecesor del Z8000, el Z80, era mucho más popular que el
predecesor del 68000, el 6800). Por supuesto, otros factores también fueron decisivos aquí,
entre los que destaca la larga historia de Motorola como fabricante de chips y la larga
historia de Exxon (propietario de Zilog) de ser una compañía petrolera, no un fabricante de
chips.
Otro factor que trabajó a favor de la interpretación durante esa época fue la existencia de
memorias rápidas de solo lectura, llamadas tiendas de control, para contener a los intérpretes.
62 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2
Suponga que una instrucción interpretada típica tomó al intérprete 10 instrucciones, llamadas
microinstrucciones, a 100 nseg cada una, y dos referencias a la memoria principal, a 500 nseg
cada una. El tiempo total de ejecución era entonces de 2000 nseg, solo un factor de dos peor que
lo mejor que podía lograr la ejecución directa. Si el almacén de control no hubiera estado
disponible, la instrucción habría tardado 6000 nseg. Una penalización de factor seis es mucho
más difícil de aceptar que una penalización de factor dos.
Departamentos de Informática en ese momento). Hoy en día, pocas personas piensan que el tamaño del
conjunto de instrucciones es un problema importante, pero el nombre se mantuvo.
Para abreviar la historia, se produjo una gran guerra religiosa, con los partidarios de RISC
atacando el orden establecido (VAX, Intel, grandes mainframes de IBM). Afirmaron que la mejor
manera de diseñar una computadora era tener una pequeña cantidad de instrucciones simples
que se ejecutaran en un ciclo de la ruta de datos de la figura 2-2 obteniendo dos registros,
combinándolos de alguna manera (por ejemplo, agregándolos o haciendo un AND) y almacenar
el resultado en un registro. Su argumento era que incluso si una máquina RISC necesita cuatro o
cinco instrucciones para hacer lo que hace una máquina CISC en una instrucción, si las
instrucciones RISC son 10 veces más rápidas (porque no se interpretan), RISC gana. También vale
la pena señalar que en este momento la velocidad de las memorias principales había alcanzado la
velocidad de las tiendas de control de solo lectura, por lo que la penalización de interpretación
había aumentado considerablemente.
Se podría pensar que, dadas las ventajas de rendimiento de la tecnología
RISC, las máquinas RISC (como Sun UltraSPARC) habrían destruido las
máquinas CISC (como Intel Pentium) en el mercado. No ha sucedido nada
parecido. ¿Por qué no?
En primer lugar, está el problema de la compatibilidad con versiones anteriores y los miles de
millones de dólares que las empresas han invertido en software para la línea Intel. En segundo lugar,
sorprendentemente Intel ha podido emplear las mismas ideas incluso en una arquitectura CISC.
Comenzando con el 486, las CPU de Intel contienen un núcleo RISC que ejecuta las instrucciones más
simples (y típicamente más comunes) en un solo ciclo de ruta de datos, mientras interpreta las
instrucciones más complicadas de la forma habitual CISC. El resultado neto es que las instrucciones
comunes son rápidas y las menos comunes son lentas. Si bien este enfoque híbrido no es tan rápido
como un diseño RISC puro, brinda un rendimiento general competitivo y, al mismo tiempo, permite que
el software antiguo se ejecute sin modificaciones.
Ahora que han pasado más de dos décadas desde que se introdujeron las primeras máquinas
RISC, se han aceptado ciertos principios de diseño como una buena forma de diseñar computadoras
dado el estado actual de la tecnología de hardware. Si ocurre un cambio importante en la tecnología
(por ejemplo, un nuevo proceso de fabricación hace que el tiempo del ciclo de la memoria de repente
sea 10 veces más rápido que el tiempo del ciclo de la CPU), todas las apuestas están canceladas. Por lo
tanto, los diseñadores de máquinas siempre deben estar atentos a los cambios tecnológicos que
puedan afectar el equilibrio entre los componentes.
Dicho esto, existe un conjunto de principios de diseño, a veces llamados Principios de
diseño RISC, que los arquitectos de las nuevas CPU de uso general hacen todo lo posible por
seguir. Las restricciones externas, como el requisito de ser retrocompatible con alguna
arquitectura existente, a menudo requieren compromisos de vez en cuando, pero estos
principios son objetivos que la mayoría de los diseñadores se esfuerzan por cumplir. A
continuación, discutiremos los principales.
64 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2
Todas las instrucciones comunes son ejecutadas directamente por el hardware. No se interpretan
mediante microinstrucciones. La eliminación de un nivel de interpretación proporciona alta velocidad
para la mayoría de las instrucciones. Para las computadoras que implementan conjuntos de
instrucciones CISC, las instrucciones más complejas se pueden dividir en partes separadas, que luego se
pueden ejecutar como una secuencia de microinstrucciones. Este paso adicional ralentiza la máquina,
pero puede ser aceptable para instrucciones que ocurren con menos frecuencia.
Una de las formas más sencillas de dividir las operaciones en pasos separados es requerir que los
operandos de la mayoría de las instrucciones provengan de los registros de la CPU y regresen a ellos. La
operación de mover operandos de la memoria a los registros se puede realizar en instrucciones
separadas. Dado que el acceso a la memoria puede llevar mucho tiempo y la demora es impredecible,
estas instrucciones pueden superponerse mejor con otras instrucciones asumiendo que no hacen nada
más que mover operandos entre registros y memoria.
SEGUNDO. 2.1 PROCESADORES sesenta y cinco
Esta observación significa que solo CARGA y TIENDA las instrucciones deben hacer referencia a la
memoria. Todas las demás instrucciones deben operar solo en registros.
Canalización
Se sabe desde hace años que la obtención real de instrucciones desde la memoria es un cuello de
botella importante en la velocidad de ejecución de las instrucciones. Para aliviar este problema, las
computadoras que se remontan al menos hasta IBM Stretch (1959) han tenido la capacidad de obtener
instrucciones de la memoria por adelantado, por lo que estarían allí cuando fueran necesarias. Estas
instrucciones se almacenaron en un conjunto especial de registros llamado
búfer de captación previa. De esta forma, cuando se necesita una instrucción, normalmente se puede tomar
del búfer de captación previa en lugar de esperar a que se complete una lectura de memoria.
En efecto, la captación previa divide la ejecución de la instrucción en dos partes: captación y
ejecución real. El concepto de tubería lleva esta estrategia mucho más lejos. En lugar de dividirse
en solo dos partes, la ejecución de instrucciones a menudo se divide en muchas partes (a
menudo una docena o más), cada una manejada por una pieza de hardware dedicada, todas las
cuales pueden ejecutarse en paralelo.
La figura 2-4 (a) ilustra una tubería con cinco unidades, también llamada etapas. La
etapa 1 recupera la instrucción de la memoria y la coloca en un búfer hasta que se necesita.
La etapa 2 decodifica la instrucción, determinando su tipo y qué operandos necesita.
66 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2
S1 S2 S3 S4 S5
Instrucción Instrucción Operando Instrucción Escribir
ir a buscar descodificar ir a buscar ejecución espalda
unidad unidad unidad unidad unidad
(a)
S1: 1 2 3 4 5 6 7 8 9
S2: 1 2 3 4 5 6 7 8
S3: 1 2 3 4 5 6 7 ...
S4: 1 2 3 4 5 6
S5: 1 2 3 4 5
1 2 3 4 5 6 7 8 9
Tiempo
(B)
Figura 2-4. ( a) A oleoducto de cinco etapas. (b) El estado de cada etapa en función de
tiempo. Se ilustran nueve ciclos de reloj.
En la figura 2-4 (b) vemos cómo funciona la tubería en función del tiempo. Durante el ciclo de
reloj 1, la etapa S1 está trabajando en la instrucción 1, recuperándola de la memoria. Durante el
ciclo 2, la etapa S2 decodifica la instrucción 1, mientras que la etapa S1 busca la instrucción 2.
Durante el ciclo 3, la etapa S3 busca los operandos para la instrucción 1, la etapa S2 decodifica la
instrucción 2 y la etapa S1 busca la tercera instrucción. Durante el ciclo 4, la etapa S4 ejecuta la
instrucción 1, S3 busca los operandos para la instrucción 2, S2 decodifica la instrucción 3 y S1
busca la instrucción 4. Finalmente, en el ciclo 5, S5 escribe el resultado de la instrucción 1,
mientras que las otras etapas trabajan en las siguientes instrucciones.
Consideremos una analogía para aclarar el concepto de canalización. Imagínese una
fábrica de pasteles en la que se separan la cocción de los pasteles y el embalaje de los
pasteles para su envío. Suponga que el departamento de envíos tiene una cinta
transportadora larga con cinco trabajadores (unidades de procesamiento) alineados a lo
largo de ella. Cada 10 segundos (el ciclo del reloj), el trabajador 1 coloca una caja de pastel
vacía en el cinturón. La caja se lleva al trabajador 2, quien coloca un pastel en ella. Un poco
más tarde, la caja llega a la estación del trabajador 3, donde se cierra y se sella. Luego
continúa con el trabajador 4, quien pone una etiqueta en la caja. Finalmente, el trabajador 5
saca la caja del cinturón y la coloca en un contenedor grande para su posterior envío a un
supermercado. Básicamente, esta es también la forma en que funciona la canalización de
computadoras:
SEGUNDO. 2.1 PROCESADORES 67
Volviendo a nuestra línea de producción de la figura 2-4, suponga que el tiempo de ciclo de
esta máquina es de 2 nseg. Luego, se necesitan 10 nseg para que una instrucción avance a lo
largo de la canalización de cinco etapas. A primera vista, con una instrucción que tarda 10 nseg,
podría parecer que la máquina puede funcionar a 100 MIPS, pero de hecho lo hace mucho mejor
que esto. En cada ciclo de reloj (2 nseg), se completa una nueva instrucción, por lo que la tasa real
de procesamiento es 500 MIPS, no 100 MIPS.
La canalización permite una compensación entre latencia ( cuánto tiempo se tarda en
ejecutar una instrucción), y ancho de banda del procesador cuántos MIPS tiene la CPU). Con un
tiempo de ciclo de T nsec y norte etapas en la tubería, la latencia es Nuevo Testamento nsec
porque cada instrucción pasa por norte etapas, cada una de las cuales toma T nsec.
Dado que una instrucción completa cada ciclo de reloj y hay 10 9 / T ciclos de reloj /
segundo, el número de instrucciones ejecutadas por segundo es 10 9 / T. Por ejemplo, si T =
2 nseg, se ejecutan 500 millones de instrucciones cada segundo. Para obtener el número de
MIPS, tenemos que dividir la tasa de ejecución de instrucciones por 1 millón para obtener
(10 9 / T) / 10 6 = 1000 / T MIPS. Teóricamente, podríamos medir la tasa de ejecución de
instrucciones en BIPS en lugar de MIPS, pero nadie lo hace, así que nosotros tampoco lo
haremos.
Arquitecturas superescalares
Si una tubería es buena, seguramente dos tuberías son mejores. En la figura 2-5 se muestra
un posible diseño para una CPU de doble canalización, basado en la figura 2-4. Aquí, una sola
unidad de búsqueda de instrucciones obtiene pares de instrucciones juntas y coloca cada una en
su propia canalización, completa con su propia ALU para operación en paralelo. Para poder
ejecutarse en paralelo, las dos instrucciones no deben entrar en conflicto con el uso de recursos
(por ejemplo, registros) y ninguna debe depender del resultado de la otra. Al igual que con una
única canalización, el compilador debe garantizar que esta situación se mantenga (es decir, el
hardware no comprueba y da resultados incorrectos si las instrucciones no son compatibles).
ble), o los conflictos deben ser detectados y eliminados durante la ejecución usando extra
hardware.
S1 S2 S3 S4 S5
ir a buscar
unidad
Instrucción Operando Instrucción Escribir
descodificar ir a buscar ejecución espalda
unidad unidad unidad unidad
Figura 2-5. Pipelines duales de cinco etapas con una unidad de búsqueda de instrucciones común.
introduciendo canalizaciones de datos en sus CPU. El 486 tenía una tubería y el Pentium original
tenía dos tuberías de cinco etapas aproximadamente como en la Figura 2-5, aunque la división
exacta del trabajo entre las etapas 2 y 3 (llamadas decodificación-1 y decodificación-2) era
ligeramente diferente a la de nuestro ejemplo. El oleoducto principal, llamado u tubería,
podría ejecutar una instrucción Pentium arbitraria. El segundo oleoducto, llamado v
pipeline, podría ejecutar solo instrucciones simples de enteros (y también una instrucción
simple de punto flotante— FXCH).
Las reglas fijas determinaban si un par de instrucciones eran compatibles para que pudieran
ejecutarse en paralelo. Si las instrucciones en un par no eran lo suficientemente simples o
incompatibles, solo se ejecutaba la primera (en la tubería u). El segundo se llevó a cabo y se combinó
con la instrucción que lo seguía. Las instrucciones siempre se ejecutaron en orden. Por lo tanto, los
compiladores específicos de Pentium que producían pares compatibles podían producir programas de
ejecución más rápida que los compiladores más antiguos. Las mediciones mostraron que un código de
ejecución de Pentium optimizado para él era exactamente el doble de rápido en programas de números
enteros que un 486 que se ejecutaba a la misma frecuencia de reloj (Pountain, 1993). Esta ganancia
podría atribuirse en su totalidad al segundo oleoducto.
Ir a cuatro tuberías es concebible, pero hacerlo duplica demasiado hardware (los
científicos informáticos, a diferencia de los especialistas en folclore, no creen en el número
tres). En cambio, se utiliza un enfoque diferente en las CPU de gama alta. La idea básica es
tener una sola tubería pero darle múltiples unidades funcionales, como se muestra en la
figura 2-6. Por ejemplo, la arquitectura Intel Core tiene una estructura similar a esta figura.
Se discutirá en el cap. 4. El término arquitectura superescalar fue acuñado para este
enfoque en 1987 (Agerwala y Cocke, 1987). Sin embargo, sus raíces se remontan a más de
40 años hasta la computadora CDC 6600. El 6600 obtuvo una instrucción cada 100 nseg y la
pasó a una de las 10 unidades funcionales para la ejecución en paralelo mientras la CPU se
apagaba para obtener la siguiente instrucción.
La definición de "superescalar" ha evolucionado algo con el tiempo. Ahora se usa para describir
procesadores que emiten múltiples instrucciones, a menudo cuatro o seis, en un solo ciclo de reloj. Por
supuesto, una CPU superescalar debe tener varias unidades funcionales a las que entregar todas estas
instrucciones. Dado que los procesadores superescalares generalmente tienen una tubería, tienden a
parecerse a la figura 2-6.
Usando esta definición, el 6600 técnicamente no era superescalar porque emitía solo
una instrucción por ciclo. Sin embargo, el efecto fue casi el mismo: las instrucciones se
emitieron a un ritmo mucho mayor de lo que podían ejecutarse. La diferencia conceptual
entre una CPU con un reloj de 100 nsec que emite una instrucción cada ciclo a un grupo de
unidades funcionales y una CPU con un reloj de 400 nsec que emite cuatro instrucciones
por ciclo al mismo grupo de unidades funcionales es muy pequeña. En ambos casos, la idea
clave es que la tasa de emisión es mucho más alta que la tasa de ejecución, con la carga de
trabajo distribuida entre una colección de unidades funcionales.
Implícito en la idea de un procesador superescalar es que la etapa S3 puede emitir
instrucciones considerablemente más rápido de lo que la etapa S4 es capaz de ejecutarlas. Si la
etapa S3 emitiera una instrucción cada 10 nseg y todas las unidades funcionales pudieran hacer
su trabajo en 10 nseg, no más de una estaría ocupada a la vez, negando la totalidad
SEGUNDO. 2.1 PROCESADORES 69
S4
ALU
ALU
S1 S2 S3 S5
TIENDA
Flotante
punto
La demanda de ordenadores cada vez más rápidos parece insaciable. Los astrónomos
quieren simular lo que sucedió en el primer microsegundo después del Big Bang, los
economistas quieren modelar la economía mundial y los adolescentes quieren jugar juegos
multimedia interactivos en 3D a través de Internet con sus amigos virtuales. Si bien las CPU se
vuelven cada vez más rápidas, eventualmente se encontrarán con problemas con la velocidad de
la luz, que probablemente se mantenga en 20 cm / nanosegundo en cables de cobre o fibra
óptica, sin importar cuán inteligentes sean los ingenieros de Intel. Los chips más rápidos también
producen más calor, cuya disipación es un gran problema. De hecho, la dificultad de deshacerse
del calor producido es la razón principal por la que las velocidades de reloj de la CPU se han
estancado en la última década.
El paralelismo a nivel de instrucción ayuda un poco, pero la operación de tuberías y
superescalar rara vez gana más de un factor de cinco o diez. Para obtener ganancias de 50, 100 o
más, la única forma es diseñar computadoras con múltiples CPU, por lo que ahora veremos cómo
están organizadas algunas de ellas.
70 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2
Caché de instrucciones
Registrar archivo
Red de interconexión
Memoria compartida
Multiprocesadores
Recuerdos locales
Compartido Compartido
memoria memoria
Autobús Autobús
(a) (B)
Figura 2-8. ( a) Un multiprocesador de bus único. (b) Una multicomputadora con local
recuerdos.
No hace falta mucha imaginación para darse cuenta que con una gran cantidad de ayuno
procesadores que constantemente intentan acceder a la memoria a través del mismo bus, se producirán
conflictos. Los diseñadores de multiprocesadores han ideado varios esquemas para reducir este
SEGUNDO. 2.1 PROCESADORES 73
contención y mejorar el rendimiento. Un diseño, que se muestra en la figura 2-8 (b), cada da
procesador tiene una memoria local propia, no accesible a los demás. La memoria se Esta
puede utilizar para el código de programa y los elementos de datos que no necesitan ser Shar-
ed. El acceso a esta memoria privada no utiliza el bus principal, lo que reduce en gran medida el tráfico del bus.
También son posibles otros esquemas (por ejemplo, almacenamiento en caché, ver más abajo).
Los multiprocesadores tienen la ventaja sobre otros tipos de computadoras paralelas de que es
fácil trabajar con el modelo de programación de una sola memoria compartida. Por ejemplo, imagine
un programa que busque células cancerosas en una fotografía de un tejido tomada a través de un
microscopio. La fotografía digitalizada podría mantenerse en la memoria común, con cada procesador
asignado alguna región de la fotografía para buscar. Dado que cada procesador tiene acceso a toda la
memoria, el estudio de una celda que comienza en su región asignada pero se extiende a ambos lados
del límite hasta la siguiente La región no es un problema.
Multicomputadoras
Aunque los multiprocesadores con un número modesto de procesadores ( ≤ 256) son rel-
Los grandes son sorprendentemente fáciles de construir y sorprendentemente difíciles de construir. La
dificultad está en conectar tantos procesadores a la memoria. Para solucionar estos problemas, muchos
diseñadores simplemente han abandonado la idea de tener una memoria compartida y simplemente
han construido sistemas que consisten en un gran número de computadoras interconectadas, cada una
con su propia memoria privada, pero sin memoria común. Estos sistemas se llaman
multicomputadoras. Se dice que las CPU de una multicomputadora son
débilmente acoplado, para contrastarlos con el estrechamente acoplado CPU multiprocesador.
Las CPU en una computadora múltiple se comunican enviándose mensajes entre sí, algo así
como correo electrónico, pero mucho más rápido. Para sistemas grandes, tener todas las
computadoras conectadas a todas las demás computadoras no es práctico, por lo que se utilizan
topologías como cuadrículas, árboles y anillos 2D y 3D. Como resultado, los mensajes de una
computadora a otra a menudo deben pasar a través de una o más computadoras intermedias o
conmutadores para llegar del origen al destino. No obstante, se pueden lograr tiempos de paso
de mensajes del orden de unos pocos microsegundos sin mucha dificultad. Se han construido
multicomputadoras con más de 250.000 CPU, como Blue Gene / P de IBM.
Dado que los multiprocesadores son más fáciles de programar y las multicomputadoras son
más fáciles de construir, hay mucha investigación sobre el diseño de sistemas híbridos que
combinen las buenas propiedades de cada uno. Tales computadoras intentan presentar la ilusión
de una memoria compartida sin incurrir en el gasto de construirla. Entraremos en detalle en
multiprocesadores y multicomputadoras en el Cap. 8.
los memoria es la parte de la computadora donde se almacenan los programas y los datos.
Algunos informáticos (especialmente los británicos) utilizan el término Tienda o almacenamiento
en lugar de memoria, aunque cada vez más, el término "almacenamiento" se utiliza para referirse
74 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2
al almacenamiento en disco. Sin una memoria desde la cual los procesadores puedan leer y escribir
información, no habría computadoras digitales con programas almacenados.
2.2.1 Bits
La unidad básica de memoria es el dígito binario, llamado poco. Un bit puede contener un 0
o un 1. Es la unidad más simple posible. (Un dispositivo capaz de almacenar solo ceros
difícilmente podría formar la base de un sistema de memoria; se necesitan al menos dos valores).
La gente suele decir que las computadoras usan aritmética binaria porque es ''
eficiente ''. Lo que quieren decir (aunque rara vez se dan cuenta) es que la información
digital se puede almacenar distinguiendo entre diferentes valores de alguna cantidad física
continua, como voltaje o corriente. . Cuantos más valores deban distinguirse, menor
separación entre valores adyacentes y menos confiable es la memoria. El sistema numérico
binario solo requiere que se distingan dos valores. En consecuencia, es el método más
confiable para codificar información digital. Si no está familiarizado con los números
binarios, consulte el Apéndice A.
Algunas computadoras, como las grandes computadoras centrales de IBM, se anuncian con
aritmética decimal y binaria. Este truco se logra usando 4 bits para almacenar un dígito decimal
usando un código llamado BCD (decimal codificado en binario). Cuatro bits proporcionan 16
combinaciones, que se utilizan para los 10 dígitos del 0 al 9, sin utilizar seis combinaciones. El
número 1944 se muestra a continuación codificado en decimal y en binario puro, usando 16 bits
en cada ejemplo:
Dieciséis bits en formato decimal pueden almacenar los números del 0 al 9999, dando solo
10,000 combinaciones, mientras que un número binario puro de 16 bits puede almacenar 65,536
combinaciones diferentes. Por esta razón, la gente dice que el binario es más eficiente.
Sin embargo, considere lo que sucedería si un ingeniero eléctrico joven y brillante inventara
un dispositivo electrónico altamente confiable que pudiera almacenar directamente los dígitos
del 0 al 9 dividiendo la región de 0 a 10 voltios en 10 intervalos. Cuatro de estos dispositivos
podrían almacenar cualquier número decimal de 0 a 9999. Cuatro de estos dispositivos
proporcionarían 10,000 combinaciones. También podrían usarse para almacenar números
binarios, usando solo 0 y 1, en cuyo caso, cuatro de ellos podrían almacenar solo 16
combinaciones. Con tales dispositivos, el sistema decimal obviamente sería más eficiente.
Los recuerdos constan de una serie de células ( o ubicaciones), cada uno de los cuales puede
almacenar un fragmento de información. Cada celda tiene un número, llamado su Dirección, por qué
programas pueden referirse a él. Si un recuerdo tiene norte celdas, tendrn direcciones de 0 a norte - 1.
Todas las celdas de una memoria contienen el mismo número de bits. Si una celda consta de k bits
SEGUNDO. 2.2 MEMORIA PRIMARIA 75
puede contener cualquiera de 2 k diferentes combinaciones de bits. La figura 2-9 muestra tres organizaciones
diferentes para una memoria de 96 bits. Tenga en cuenta que las celdas adyacentes tienen consecutivas
direcciones (por definición).
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
16 bits
6 6
7 7 (C)
12 bits
8
9 (B)
10
11
8 bits
(a)
Las computadoras que utilizan el sistema numérico binario (incluida la notación octal y
hexadecimal para números binarios) expresan las direcciones de memoria como números
binarios. Si una dirección tiene metro bits, el número máximo de celdas direccionables es 2 metro.
Por ejemplo, una dirección utilizada para hacer referencia a la memoria de la figura 2-9 (a)
necesita al menos 4 bits para expresar todos los números del 0 al 11. Una dirección de 3 bits es
suficiente para la figura 2-9 ( b) y (c), sin embargo. El número de bits en la dirección determina el
número máximo de celdas direccionables directamente en la memoria y es independiente del
número de bits por celda. Un recuerdo con 2 12 celdas de 8 bits cada una y una memoria con 2 12
las celdas de 64 bits necesitan direcciones de 12 bits cada una.
La cantidad de bits por celda para algunas computadoras que se han vendido comercialmente se
muestra en la figura 2-10.
El significado de la celda es que es la unidad direccionable más pequeña. En los últimos años, casi
todos los fabricantes de computadoras se han estandarizado en una celda de 8 bits, que se llama byte.
El término octeto también se utiliza. Los bytes se agrupan en palabras. Una computadora con una
palabra de 32 bits tiene 4 bytes / palabra, mientras que una computadora con una palabra de 64 bits
tiene 8 bytes / palabra. El significado de una palabra es que la mayoría de las instrucciones operan con
palabras completas, por ejemplo, agregando dos palabras juntas. Por lo tanto, una máquina de 32 bits
tendrá registros e instrucciones de 32 bits para manipular palabras de 32 bits,