Está en la página 1de 100

Traducido del inglés al español - www.onlinedoctranslator.

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

Impresora / Encuadernadora: Courier / Westford

Impresora de portadas: Lehigh-Phoenix Color / Hagerstown

Los créditos y reconocimientos tomados de otras fuentes y reproducidos, con permiso, en


este libro de texto aparecen en la sección Créditos al final de este texto.
Copyright © 2013, 2006, 1999 Pearson Education, Inc., que publica como Prentice Hall. Reservados todos
los derechos. Impreso en los Estados Unidos de América. Esta publicación está protegida por derechos
de autor, y se debe obtener permiso del editor antes de cualquier reproducción prohibida,
almacenamiento en un sistema de recuperación o transmisión en cualquier forma o por cualquier medio,
electrónico, mecánico, fotocopiado, grabación o similar. Para obtener permiso (s) para usar material de
este trabajo, envíe una solicitud por escrito a Pearson Education, Inc., Departamento de Permisos, One
Lake Street, Upper Saddle River, Nueva Jersey 07458, o puede enviar su solicitud por fax al 201-236 -3290.

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.

Datos de catalogación en publicación de la Biblioteca del Congreso


Tanenbaum, Andrew S.,
Organización informática estructurada / Andrew S. Tanenbaum, Todd Austin. - 6ta ed.
pag. cm.
Incluye referencias bibliográficas e indice.
ISBN-13: 978-0-13-291652-3
ISBN-10: 0-13-291652-5
1. Programación informática. 2. Organización informática. I. Austin, Todd. II. Título.

QA76.6.T38 2013
005.1 - dc23
2012021627

10 9 8 7 6 5 4 3 2 1

ISBN 10: 0-13-291652-5


ISBN 13: 978-0-13-291652-3
AST: Suzanne, Barbara, Marvin, Aron y Nathan

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

1.1 ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA 2


1.1.1 Idiomas, niveles y máquinas virtuales 2
1.1.2 Máquinas multinivel contemporáneas 5
1.1.3 Evolución de las máquinas multinivel 8

1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 13


1.2.1 La generación cero: computadoras mecánicas (1642-1945) 13
1.2.2 La primera generación: tubos de vacío (1945-1955) 16
1.2.3 La segunda generación: transistores (1955-1965) 19
1.2.4 La tercera generación: circuitos integrados (1965-1980) 21
1.2.5 La cuarta generación: integración a gran escala (¿1980–?) 23
1.2.6 Quinta generación: ordenadores invisibles y de bajo consumo 26

1.3 EL ZOO DE LA COMPUTADORA 28


1.3.1 Fuerzas tecnológicas y económicas 28
1.3.2 El espectro de la computadora 30
1.3.3 Computadoras desechables 31
1.3.4 Microcontroladores 33
1.3.5 Computadoras móviles y de juegos 35
1.3.6 Ordenadores personales 36
1.3.7 Servidores 36
1.3.8 Mainframes 38
vii
viii CONTENIDO

1.4 EJEMPLO DE FAMILIAS DE COMPUTADORAS 39


1.4.1 Introducción a la arquitectura x86 39
1.4.2 Introducción a la arquitectura ARM 45
1.4.3 Introducción a la arquitectura AVR 47

1,5 UNIDADES MÉTRICAS 49

1,6 ESQUEMA DE ESTE LIBRO 50

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

2.2 MEMORIA PRIMARIA 73


2.2.1 Bits 74
2.2.2 Direcciones de memoria 74
2.2.3 Orden de bytes 76
2.2.4 Códigos de corrección de errores 78
2.2.5 Memoria caché 82
2.2.6 Empaquetado y tipos de memoria 85

2.3 MEMORIA SECUNDARIA 86


2.3.1 Jerarquías de memoria 86
2.3.2 Discos magnéticos 87
2.3.3 Discos IDE 91
2.3.4 Discos SCSI 92
2.3.5 RAID 94
2.3.6 Discos de estado sólido 97
2.3.7 CD-ROM 99
2.3.8 CD grabables 103
2.3.9 CD-regrabables 105
2.3.10 DVD 106
2.3.11 Blu-ray 108
CONTENIDO ix

2.4 ENTRADA / SALIDA 108


2.4.1 Autobuses 108
2.4.2 Terminales 113
2.4.3 Ratones 118
2.4.4 Dispositivos de juego 120
2.4.5 Impresoras 122
2.4.6 Equipo de telecomunicaciones 127
2.4.7 Cámaras digitales 135
2.4.8 Códigos de caracteres 137

2.5 RESUMEN 142

3 EL NIVEL DE LÓGICA DIGITAL

3.1 PUERTAS Y ÁLGEBRA BOOLEANA 147


3.1.1 Puertas 148
3.1.2 Álgebra de Boole 150
3.1.3 Implementación de funciones booleanas 152
3.1.4 Equivalencia del circuito 153

3.2 CIRCUITOS LÓGICOS DIGITALES BÁSICOS 158


3.2.1 Circuitos integrados 158
3.2.2 Circuitos combinacionales 159
3.2.3 Circuitos aritméticos 163
3.2.4 Relojes 168

3.3 MEMORIA 169


3.3.1 Pestillos 169
3.3.2 Chanclas 172
3.3.3 Registros 174
3.3.4 Organización de la memoria 174
3.3.5 Chips de memoria 178
3.3.6 RAM y ROM 180

3.4 CHIPS Y BUSES DE CPU 185


3.4.1 Chips de CPU 185
3.4.2 Buses informáticos 187
3.4.3 Ancho del bus 190
3.4.4 Reloj del bus 191
3.4.5 Arbitraje de autobús 196
3.4.6 Operaciones de bus 198
X CONTENIDO

3,5 CHIPS DE CPU DE EJEMPLO 201


3.5.1 El Intel Core i7 201
3.5.2 El sistema en un chip OMAP4430 de Texas Instruments 208
3.5.3 El microcontrolador Atmel ATmega168 212

3.6 EJEMPLO DE AUTOBUSES 214


3.6.1 El bus PCI 215
3.6.2 PCI Express 223
3.6.3 El bus serie universal 228

3,7 INTERFAZ 232


3.7.1 Interfaces de E / S 232
3.7.2 Decodificación de direcciones 233

3.8 RESUMEN 235

4 EL NIVEL DE MICROARQUITECTURA

4.1 UN EJEMPLO DE MICROARQUITECTURA 243


4.1.1 La ruta de datos 244
4.1.2 Microinstrucciones 251
4.1.3 Control de microinstrucciones: el Mic-1253

4.2 UN EJEMPLO ISA: IJVM 258


4.2.1 Pilas 258
4.2.2 El modelo 260 de IJVMMemory
4.2.3 El conjunto de instrucciones IJVM 262
4.2.4 Compilación de Java a IJVM 265

4.3 UN EJEMPLO DE IMPLEMENTACIÓN 267


4.3.1 Microinstrucciones y notación 267
4.3.2 Implementación de IJVM usando el Mic-1271

4.4 DISEÑO DE LA MICROARQUITECTURA NIVEL 283


4.4.1 Velocidad versus costo 283
4.4.2 Reducir la longitud de la ruta de ejecución 285
4.4.3 Un diseño con captación previa: el Mic-2291
4.4.4 Un diseño canalizado: el Mic-3 293
4.4.5 Una tubería de siete etapas: el Mic-4300
CONTENIDO xi

4.5 MEJORA DEL RENDIMIENTO 303


4.5.1 Memoria caché 304
4.5.2 Predicción de ramas 310
4.5.3 Ejecución fuera de servicio y cambio de nombre de registros 315
4.5.4 Ejecución especulativa 320

4.6 EJEMPLOS DEL NIVEL DE MICROARQUITECTURA 323


4.6.1 La microarquitectura de la CPU Core i7 323
4.6.2 La microarquitectura de la CPU OMAP4430 329
4.6.3 La microarquitectura del microcontrolador ATmega168 334

4,7 COMPARACIÓN DEL I7, OMAP4430, Y ATMEGA168 336

4.8 RESUMEN 337

5 EL CONJUNTO DE INSTRUCCIONES

5.1 RESUMEN DEL NIVEL ISA 345


5.1.1 Propiedades del nivel ISA 345
5.1.2 Modelos de memoria 347
5.1.3 Registros 349
5.1.4 Instrucciones 351
5.1.5 Descripción general del nivel ISA Core i7 351
5.1.6 Descripción general del OMAP4430 ARM ISA Level 354
5.1.7 Descripción general del ATmega168 AVR ISA Level 356

5.2 TIPOS DE DATOS 358


5.2.1 Tipos de datos numéricos 358
5.2.2 Tipos de datos no numéricos 359
5.2.3 Tipos de datos en el Core i7 360
5.2.4 Tipos de datos en OMAP4430 ARM CPU 361
5.2.5 Tipos de datos en el ATmega168 AVR CPU 361

5.3 FORMATOS DE INSTRUCCIONES 362


5.3.1 Criterios de diseño para formatos de instrucción 362
5.3.2 Ampliación de códigos de operación 365

5.3.3 Los formatos de instrucción Core i7 367


5.3.4 Formatos de instrucción de la CPU ARM OMAP4430 368
5.3.5 Formatos de instrucción del AVR ATmega168 370
xii CONTENIDO

5.4 DIRECCIÓN 371


5.4.1 Modos de direccionamiento 371
5.4.2 Direccionamiento inmediato 372
5.4.3 Direccionamiento directo 372
5.4.4 Registro de direccionamiento 372
5.4.5 Registrar direccionamiento indirecto 373
5.4.6 Direccionamiento indexado 374
5.4.7 Direccionamiento basado en índices 376
5.4.8 Direccionamiento de pila 376
5.4.9 Modos de direccionamiento para instrucciones de rama 379
5.4.10 Ortogonalidad de códigos de operación y modos de direccionamiento 380
5.4.11 Los modos de direccionamiento del Core i7 382
5.4.12 Modos de direccionamiento de la CPU ARM OMAP4440 384
5.4.13 Modos de direccionamiento del AVR ATmega168 384
5.4.14 Discusión de los modos de direccionamiento 385

5.5 TIPOS DE INSTRUCCIONES 386


5.5.1 Instrucciones de movimiento de datos 386
5.5.2 Operaciones diádicas 387
5.5.3 Operaciones monádicas 388
5.5.4 Comparaciones y ramas condicionales 390
5.5.5 Instrucciones de llamada de procedimiento 392
5.5.6 Control de lazo 393
5.5.7 Entrada / Salida 394
5.5.8 Instrucciones de Core i7 397
5.5.9 Instrucciones de la CPU ARM OMAP4430 400
5.5.10 Instrucciones del AVR ATmega168 402
5.5.11 Comparación de conjuntos de instrucciones 402

5,6 FLUJO DE CONTROL 404


5.6.1 Flujo secuencial de control y ramificaciones 405
5.6.2 Procedimientos 406
5.6.3 Corutinas 410
5.6.4 Trampas 413
5.6.5 Interrupciones 414

5.7 UN EJEMPLO DETALLADO: LAS TORRES DE HANOI 417


5.7.1 Las torres de Hanoi en lenguaje ensamblador Core i7 418
5.7.2 Las torres de Hanoi en OMAP4430 ARM Assembly Language 418
CONTENIDO xiii

5.8 LA ARQUITECTURA IA-64 Y EL ITANIO 2420


5.8.1 El problema con el IA-32 ISA 421
5.8.2 El modelo IA-64: Computación de instrucciones explícitamente paralelas 423
5.8.3 Reducir las referencias a la memoria 423
5.8.4 Programación de instrucciones 424
5.8.5 Reducción de ramas condicionales: predicción 426
5.8.6 Cargas especulativas 429

5.9 RESUMEN 430

6 EL SISTEMA OPERATIVO

6.1 MEMORIA VIRTUAL 438


6.1.1 Paginación 439
6.1.2 Implementación de paginación 441
6.1.3 Paginación por demanda y el modelo de conjunto de trabajo 443
6.1.4 Política de reemplazo de página 446
6.1.5 Tamaño de página y fragmentación 448
6.1.6 Segmentación 449
6.1.7 Implementación de la segmentación 452
6.1.8 Memoria virtual en el Core i7 455
6.1.9 Memoria virtual en OMAP4430 ARM CPU 460
6.1.10 Memoria virtual y almacenamiento en caché 462

6.2 VIRTUALIZACIÓN DE HARDWARE 463


6.2.1 Virtualización de hardware en Core I7 464

6.3 INSTRUCCIONES DE E / S A NIVEL OSM 465


6.3.1 Archivos 465
6.3.2 Implementación de instrucciones de E / S de nivel OSM 467
6.3.3 Instrucciones de gestión de directorios 471

6.4 INSTRUCCIONES A NIVEL OSM PARA PROCESAMIENTO EN PARALELO 471


6.4.1 Creación de procesos 473
6.4.2 Condiciones de carrera 473
6.4.3 Sincronización de procesos mediante semáforos 478

6.5 EJEMPLO DE SISTEMAS OPERATIVOS 480


6.5.1 Introducción 482
6.5.2 Ejemplos de memoria virtual 488
xiv CONTENIDO

6.5.3 Ejemplos de E / S de nivel de SO 492


6.5.4 Ejemplos de gestión de procesos 503

6.6 RESUMEN 509

7 EL NIVEL DE IDIOMA DE ASAMBLEA

7.1 INTRODUCCIÓN AL LENGUAJE DE MONTAJE 518


7.1.1 ¿Qué es un lenguaje ensamblador? 518
7.1.2 ¿Por qué utilizar lenguaje ensamblador? 519
7.1.3 Formato de una declaración en lenguaje ensamblador 520
7.1.4 Pseudoinstrucciones 522

7.2 MACROS 524


7.2.1 Macrodefinición, llamada y expansión 524
7.2.2 Macros con parámetros 526
7.2.3 Funciones avanzadas 527
7.2.4 Implementación de una macro facilidad en un ensamblador 528

7.3 EL PROCESO DE MONTAJE 529


7.3.1 Ensambladores de dos pasos 529
7.3.2 Pase uno 530
7.3.3 Pase dos 534
7.3.4 La tabla de símbolos 535

7.4 ENLACE Y CARGA 536


7.4.1 Tareas realizadas por el vinculador 538
7.4.2 Estructura de un módulo de objetos 541
7.4.3 Tiempo de vinculación y reubicación dinámica 542
7.4.4 Vinculación dinámica 545

7.5 RESUMEN 549

8 ARQUITECTURAS DE COMPUTADORAS PARALELAS

8.1 PARALELISMO EN CHIP 554


8.1.1 Paralelismo a nivel de instrucción 555
8.1.2 Subprocesamiento múltiple en chip 562
8.1.3 Multiprocesadores de un solo chip 568
CONTENIDO xv

8.2 COPROCESADORES 574


8.2.1 Procesadores de red 574
8.2.2 Procesadores gráficos 582
8.2.3 Criptoprocesadores 585

8.3 MULTIPROCESADORES DE MEMORIA COMPARTIDA 586


8.3.1 Multiprocesadores frente a multicomputadoras 586
8.3.2 Semántica de la memoria 593
8.3.3 Arquitecturas de multiprocesador simétrico UMA 598
8.3.4 Multiprocesadores NUMA 606
8.3.4 Multiprocesadores COMA 615

8.4 MULTICOMPUTADORAS CON TRANSMISIÓN DE MENSAJES 616


7.4.1 Redes de interconexión 618
8.4.2 MPP: procesadores masivamente paralelos 621
8.4.3 Computación en clúster 631
8.4.4 Software de comunicación para multicomputadoras 636
8.4.5 Programación 639
8.4.6 Memoria compartida a nivel de aplicación 640
8.4.7 Rendimiento 646

8.5 COMPUTACIÓN EN RED 652

8,6 RESUMEN 655

9 BIBLIOGRAFÍA 659

A NUMEROS BINARIOS 669

A.1 NÚMEROS DE PRECISIÓN FINITA 669

A.2 SISTEMAS DE NÚMEROS DE RADIX 671

A.3 CONVERSIÓN DE UN RADIO A OTRO 673

A.4 NÚMEROS BINARIOS NEGATIVOS 675

A.5 ARITMÉTICA BINARIA 678


xvi CONTENIDO

B NÚMEROS DE PUNTO FLOTANTE 681

B.1 PRINCIPIOS DEL PUNTO FLOTANTE 682

B.2 ESTÁNDAR DE PUNTO FLOTANTE IEEE 754684

C PROGRAMACIÓN DEL LENGUAJE DE MONTAJE 691

C.1 DESCRIPCIÓN GENERAL 692


C.1.1 Lenguaje ensamblador 692
C.1.2 Un pequeño programa en lenguaje ensamblador 693

C.2 EL PROCESADOR 8088 694


C.2.1 El ciclo del procesador 695
C.2.2 Los Registros Generales 695
C.2.3 Registros de puntero 698

C.3 MEMORIA Y DIRECCIONAMIENTO 699


C.3.1 Organización y segmentos de la memoria 699
C.3.2 Direccionamiento 701

C.4 EL JUEGO DE INSTRUCCIONES 8088 705


C.4.1 Mover, copiar y aritmética 705
C.4.2 Operaciones lógicas, de bits y de desplazamiento 708
C.4.3 Operaciones de cadena repetitiva y de bucle 708
C.4.4 Instrucciones de salto y llamada 709
C.4.5 Llamadas a subrutinas 710
C.4.6 Llamadas al sistema y subrutinas del sistema 712
C.4.7 Observaciones finales sobre el conjunto de instrucciones 715

C.5 EL ENSAMBLADOR 715


C.5.1 Introducción 715
C.5.2 El ensamblador de tutoriales basado en ACK as88716
C.5.3 Algunas diferencias con otros ensambladores 8088 720

C.6 EL TRACER 721


C.6.1 Comandos del trazador 723

C.7 PRIMEROS PASOS 725


CONTENIDO xvii

C.8 EJEMPLOS 726


C.8.1 Ejemplo 726 de Hello World
C.8.2 Registros generales Ejemplo 729
C.8.3 Registros de puntero y comando de llamada 730
C.8.4 Depuración de un programa de impresión de matriz 734
C.8.5 Manipulación de cadenas e instrucciones de cadenas 736
C.8.6 Tablas de despacho 740
C.8.7 Acceso a archivos almacenados en búfer y aleatorio 742

Í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).

En el Capítulo 2, el material sobre estilos de procesamiento se ha ampliado para incluir


procesadores en paralelo de datos, incluidas las unidades de procesamiento de gráficos (GPU). El
panorama del almacenamiento se ha ampliado para incluir los dispositivos de almacenamiento
basados en flash, cada vez más populares. Se ha agregado nuevo material a la sección de entrada /
salida que detalla los controladores de juegos modernos, incluidos Wiimote y Kinect, así como las
pantallas táctiles utilizadas en teléfonos inteligentes y tabletas.
El Capítulo 3 ha sido revisado en varios lugares. Todavía comienza por el principio, con cómo
funcionan los transistores, y se acumula a partir de ahí para que incluso los estudiantes
PREFACIO xxi

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:

* el software ensamblador / trazador


* el simulador gráfico
* las lecturas sugeridas
xxii PREFACIO

Los recursos del instructor incluyen:

* Hojas de PowerPoint del curso


* soluciones a los ejercicios de final de capítulo

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

Suma dos números.

Verifique un número para ver si es cero.

Copie un dato de una parte de la memoria de la computadora a otra.

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.

1.1 ORGANIZACIÓN DE COMPUTADORAS ESTRUCTURADAS

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.

1.1.1 Idiomas, niveles y máquinas virtuales

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

En lugar de pensar en términos de traducción o interpretación, a menudo es más sencillo


imaginar la existencia de una computadora o máquina virtual cuyo lenguaje de máquina es L1.
Llamemos a esta máquina virtual M1 (y llamemos a la máquina correspondiente a L0, M0). Si tal
máquina pudiera construirse a un precio suficientemente bajo, no habría necesidad de tener el
lenguaje L0 o una máquina que ejecutara programas en L0 en absoluto. La gente podría
simplemente escribir sus programas en L1 y hacer que la computadora los ejecute directamente.
Incluso si la máquina virtual cuyo lenguaje es L1 es demasiado cara o complicada de construir
con circuitos electrónicos, la gente aún puede escribir programas para ella. Estos programas
pueden ser interpretados o traducidos por un programa escrito en L0 que a su vez puede ser
ejecutado directamente por la computadora existente. En otras palabras, las personas pueden
escribir programas para máquinas virtuales, como si realmente existieran.

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

Máquina virtual M3, con


Nivel 3
lenguaje de máquina L3
Los programas en L2
son interpretados por
intérpretes corriendo
Máquina virtual M2, con en M1 o M0, o se
Nivel 2
lenguaje de máquina L2 traducen a L1 o L0

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

Los programas en L0 se pueden


ejecutar directamente mediante
Computadora actual M0, con los circuitos electronicos
Nivel 0
lenguaje de máquina L0

Figura 1-1. Una máquina multinivel.

'' 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

1.1.2 Máquinas multinivel contemporáneas

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.

Nivel 5 Nivel de lenguaje orientado a problemas

Traducción (compilador)

Nivel 4 Nivel de lenguaje ensamblador

Traducción (ensamblador)

Nivel 3 Nivel de máquina del sistema operativo

Interpretación parcial (sistema operativo)

Nivel 2 Nivel de arquitectura del conjunto de instrucciones

Interpretación (microprograma) o ejecución directa

Nivel 1 Nivel de microarquitectura

Hardware

Nivel 0 Nivel de lógica digital

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 algunos casos, el nivel 5 consiste en un intérprete para un dominio de aplicación específico,


como las matemáticas simbólicas. Proporciona datos y operaciones para resolver problemas en este
dominio en términos que las personas con conocimientos en el dominio puedan comprender fácilmente.

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

El conjunto de tipos de datos, operaciones y características de cada nivel se denomina su


arquitectura. La arquitectura se ocupa de aquellos aspectos que son visibles para el usuario de
ese nivel. Las características que ve el programador, como la cantidad de memoria disponible,
son parte de la arquitectura. Los aspectos de implementación, como qué tipo de tecnología se
utiliza para implementar la memoria, no forman parte de la arquitectura. El estudio de cómo
diseñar aquellas partes de un sistema informático que son visibles para los programadores se
denomina arquitectura de Computadores. Sin embargo, en la práctica común, la arquitectura
de la computadora y la organización de la computadora significan esencialmente lo mismo.

1.1.3 Evolución de las máquinas multinivel

Para proporcionar una perspectiva sobre las máquinas multinivel, examinaremos


brevemente su desarrollo histórico, mostrando cómo ha evolucionado el número y la naturaleza
de los niveles a lo largo de los años. Los programas escritos en el verdadero lenguaje de máquina
de una computadora (nivel 1) pueden ser ejecutados directamente por los circuitos electrónicos
de la computadora (nivel 0), sin la intervención de intérpretes o traductores. Estos circuitos
electrónicos, junto con la memoria y los dispositivos de entrada / salida, forman la computadora
hardware. El hardware consta de objetos tangibles (circuitos integrados, placas de circuitos
impresos, cables, fuentes de alimentación, memorias e impresoras) en lugar de ideas, algoritmos
o instrucciones abstractas.
Software, en contraste, consiste en algoritmos instrucciones detalladas que indican
cómo hacer algo) y sus representaciones informáticas, es decir, programas. Los programas
se pueden almacenar en el disco duro, CD-ROM u otros medios, pero la esencia del
software es el conjunto de instrucciones que componen los programas, no el medio físico
en el que están grabados.
En las primeras computadoras, el límite entre hardware y software era muy claro. Sin
embargo, con el tiempo, se ha difuminado considerablemente, principalmente debido a la
adición, eliminación y fusión de niveles a medida que evolucionan las computadoras. Hoy en día,
a menudo es difícil diferenciarlos (Vahid, 2003). De hecho, un tema central de este libro es

El hardware y el software son lógicamente equivalentes.

Cualquier operación realizada por software también puede integrarse directamente en el


hardware, preferiblemente después de que se entienda suficientemente bien. Como dijo Karen
Panetta: "El hardware es solo software petrificado". Por supuesto, lo contrario también es cierto:
cualquier instrucción ejecutada por el hardware también se puede simular en el software. La
decisión de poner ciertas funciones en hardware y otras en software se basa en factores como el
costo, la velocidad, la confiabilidad y la frecuencia de los cambios esperados. Hay pocas reglas
estrictas en el sentido de que X debe entrar en el hardware e Y debe programarse explícitamente.
Estas decisiones cambian con las tendencias en la economía de la tecnología, la demanda y el uso
de computadoras.
SEGUNDO. 1.1 ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA 9

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.

La invención del sistema operativo

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:

1. Él † se acercó al armario donde se guardaba la biblioteca de programas, sacó el gran


mazo verde etiquetado como compilador FORTRAN, lo puso en el lector de
tarjetas y pulsó el botón COMIENZO botón.

2. Puso su programa FORTRAN en el lector de tarjetas y presionó el


SEGUIR botón. Se leyó el programa.
† "Él" debe leerse como "él o ella" a lo largo de este libro.
10 INTRODUCCIÓN CAP. 1

3. Cuando la computadora se detuvo, leyó su programa FORTRAN por segunda


vez. Aunque algunos compiladores solo requieren una pasada sobre la
entrada, muchos requieren dos o más. Para cada pase, se tenía que leer una
gran baraja de cartas.

4. Finalmente, la traducción estuvo a punto de completarse. El programador a


menudo se ponía nervioso cerca del final porque si el compilador encontraba
un error en el programa, tenía que corregirlo y comenzar todo el proceso de
nuevo. Si no había errores, el compilador perforaba el programa traducido
en lenguaje de máquina en tarjetas.

5. Luego, el programador puso el programa en lenguaje de máquina en el lector de


tarjetas junto con la plataforma de la biblioteca de subrutinas y los leyó.

6. El programa comenzó a ejecutarse. La mayoría de las veces no funcionó y se detuvo


inesperadamente en el medio. Generalmente, el programador jugaba con los
interruptores de la consola y miraba las luces de la consola durante un rato. Si
tenía suerte, resolvió el problema, corrigió el error y regresó al gabinete que
contenía el gran compilador verde de FORTRAN para comenzar de nuevo. Si era
menos afortunado, hizo una copia impresa del contenido de la memoria, llamada
volcado de memoria, y lo llevé a casa para estudiar.

Este procedimiento, con variaciones menores, fue normal en muchos centros de


computación durante años. Obligó a los programadores a aprender a operar la máquina y a
saber qué hacer cuando fallaba, lo que ocurría a menudo. La máquina estaba frecuentemente
inactiva mientras las personas llevaban tarjetas por la habitación o se rascaban la cabeza
tratando de averiguar por qué sus programas no funcionaban correctamente.
Alrededor de 1960, las personas intentaron reducir la cantidad de tiempo perdido
automatizando el trabajo del operador. Un programa llamado sistema operativo se mantuvo en
la computadora en todo momento. El programador proporcionó ciertas tarjetas de control junto
con el programa que fueron leídas y ejecutadas por el sistema operativo. La Figura 1-3 muestra
un trabajo de muestra para uno de los primeros sistemas operativos generalizados, FMS
(FORTRAN Monitor System), en el IBM 709.
El sistema operativo leyó el ∗ Tarjeta de TRABAJO y utilizó la información que contiene
para fines contables. (El asterisco se usó para identificar las tarjetas de control, de modo
que no se confundieran con las tarjetas de programa y de datos). ∗ Tarjeta FORTRAN, que
era una instrucción para cargar el compilador FORTRAN desde una cinta magnética. A
continuación, el compilador leyó y compiló el programa FORTRAN. Cuando el compilador
terminó, devolvió el control al sistema operativo, que luego leyó el
∗ Tarjeta de datos. Esta fue una instrucción para ejecutar el programa traducido, usando las tarjetas que
siguen a la ∗ Tarjeta de DATOS como los datos.
Aunque el sistema operativo fue diseñado para automatizar el trabajo del operador (de ahí
el nombre), también fue el primer paso en el desarrollo de una nueva máquina virtual. los ∗ La
tarjeta FORTRAN podría verse como una instrucción virtual de "programa de compilación". Del
mismo modo, la tarjeta * DATA podría considerarse como una ejecución virtual
SEGUNDO. 1.1 ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA 11

*TRABAJO, 5494, BARBARA


*XEQ
*FORTRAN
FORTRAN
programa

*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.

La migración de la funcionalidad al microcódigo

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

1. Instrucciones para la multiplicación y división de enteros.

2. Instrucciones aritméticas de coma flotante.

3. Instrucciones para llamar y regresar de los procedimientos.

4. Instrucciones para acelerar el bucle.


5. Instrucciones para manejar cadenas de caracteres.

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

1. Funciones para acelerar los cálculos que involucran arreglos (indexación y


direccionamiento indirecto).

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.

4. La capacidad de suspender un programa e iniciar otro en una pequeña


cantidad de instrucciones (cambio de proceso).

5. Instrucciones especiales para procesar archivos de audio, imágenes y


multimedia.

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

Los microprogramas engordaron durante los años dorados de la microprogramación (décadas de


1960 y 1970). También tendían a volverse cada vez más lentos a medida que adquirían más volumen.
Finalmente, algunos investigadores se dieron cuenta de que al eliminar el microprograma,
SEGUNDO. 1.1 ORGANIZACIÓN DE COMPUTADORA ESTRUCTURADA 13

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.

1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS

Se han diseñado y construido cientos de diferentes tipos de computadoras durante la


evolución de la computadora digital moderna. La mayoría han sido olvidadas hace mucho
tiempo, pero algunas han tenido un impacto significativo en las ideas modernas. En esta sección
daremos un breve esbozo de algunos de los desarrollos históricos clave para comprender mejor
cómo llegamos a donde estamos ahora. No hace falta decir que esta sección solo toca los
aspectos más destacados y deja muchas piedras sin remover. La Figura 1-4 enumera algunas de
las máquinas de hitos que se analizarán en esta sección. Slater (1987) es un buen lugar para
buscar material histórico adicional sobre las personas que fundaron la era de las computadoras.
Para ver breves biografías y hermosas fotografías en color de Louis Fabian Bachrach de algunas
de las personas clave que fundaron la era de las computadoras, consulte el libro de la mesa de
café de Morgan (1997).

1.2.1 La generación cero: computadoras mecánicas (1642-1945)

La primera persona en construir una máquina calculadora en funcionamiento fue el


científico francés Blaise Pascal (1623-1662), en cuyo honor se nombra el lenguaje de
programación Pascal. Este dispositivo, construido en 1642, cuando Pascal tenía solo 19 años, fue
diseñado para ayudar a su padre, un recaudador de impuestos del gobierno francés. Era
completamente mecánico, usaba engranajes y funcionaba con una manivela manual.
La máquina de Pascal solo podía realizar operaciones de suma y resta, pero
treinta años después, el gran matemático alemán Baron Gottfried Wilhelm von Leibniz
(1646-1716) construyó otra máquina mecánica que podía multiplicar y dividir como
14 INTRODUCCIÓN CAP. 1

Año Nombre Hecho por Comentarios


1834 motor analítico Babbage Primer intento de construir una computadora digital

1936 Z1 Zuse Primera máquina calculadora de relés en funcionamiento

1943 COLOSO Gobierno británico Primera computadora electrónica

1944 Mark I Aiken Primera computadora estadounidense de propósito general

1946 ENIAC Eckert / Mauchley La historia de las computadoras modernas comienza

1949 EDSAC aquí Wilkes Primera computadora con programa almacenado

1951 Torbellino I MIT Primera computadora en tiempo real


1952 IAS Von Neumann La mayoría de las máquinas actuales utilizan este diseño

1960 PDP-1 DEC Primera minicomputadora (50 vendidos)


1961 1401 IBM Máquina enormemente popular para pequeñas empresas
1962 7094 IBM dominó la informática científica a principios de la década de 1960
1963 B5000 Primera máquina de Burroughs diseñada para un lenguaje de alto nivel
1964 360 Primera línea de productos IBM diseñada en familia
1964 6600 Primera supercomputadora científica de los CDC
1965 PDP-8 DEC Primera minicomputadora para el mercado de masas (50.000 vendidas)
1970 PDP-11 Minicomputadoras dominadas por DEC en la década de 1970
1974 8080 Intel Primera computadora de uso general de 8 bits en un chip
1974 CRAY-1 Cray First supercomputadora vectorial
1978 VAX DEC Primera superminicomputadora de 32 bits
1981 PC de IBM IBM inició la era moderna de las computadoras personales
1981 Osborne-1 Primera computadora portátil de Osborne
1983 Lisa Primera computadora personal de Apple con GUI
1985386 Intel Primer antepasado de 32 bits de la línea Pentium
1985 MIPS MIPS Primera máquina comercial RISC
1985 XC2064 Primera matriz de puertas programables en campo (FPGA) de Xilinx
1987 SPARC Estación de trabajo RISC basada en Sun First SPARC
1989 GridPad Grid Systems Primera tableta comercial
1990 RS6000 Primera máquina superescalar de IBM
1992 Alfa DEC Primera computadora personal de 64 bits
1992 Simon Primer teléfono inteligente de IBM
1993 Newton Primera computadora de bolsillo (PDA) de Apple
2001 POWER4 Primer multiprocesador de chips de doble núcleo de IBM

Figura 1-4. Algunos hitos en el desarrollo de la computadora digital moderna.

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 velocímetro, diseñó y construyó su motor diferencial. Este dispositivo mecánico, que


como el de Pascal solo podía sumar y restar, fue diseñado para calcular tablas de números
útiles para la navegación naval. Toda la construcción de la máquina fue diseñada para
ejecutar un solo algoritmo, el método de diferencias finitas usando polinomios. La
característica más interesante del motor de diferencia era su método de salida: perforaba
sus resultados en una placa de grabado de cobre con un troquel de acero, presagiando así
medios posteriores de una sola escritura, como tarjetas perforadas y CD-ROM.
Aunque el motor de diferencia funcionó razonablemente bien, Babbage se aburrió
rápidamente con una máquina que solo podía ejecutar un algoritmo. Comenzó a gastar
cantidades cada vez mayores de su tiempo y fortuna familiar (sin mencionar las 17,000
libras del dinero del gobierno) en el diseño y construcción de un sucesor llamado el motor
analítico. El motor analítico tenía cuatro componentes: la tienda (memoria), el molino
(unidad de cálculo), la sección de entrada (lector de tarjetas perforadas) y la sección de
salida (salida perforada e impresa). La tienda constaba de 1000 palabras de 50 dígitos
decimales, cada una utilizada para contener variables y resultados. El molino podría aceptar
operandos de la tienda, luego sumarlos, restarlos, multiplicarlos o dividirlos y, finalmente,
devolver el resultado a la tienda. Como el motor diferencial, era completamente mecánico.

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.

1.2.2 La primera generación: tubos de vacío (1945-1955)

El estímulo para la computadora electrónica fue la Segunda Guerra Mundial. Durante la


primera parte de la guerra, los submarinos alemanes estaban causando estragos en los barcos
británicos. Los almirantes alemanes en Berlín enviaron órdenes por radio a los submarinos, que
los británicos pudieron interceptar e interceptaron. El problema era que estos mensajes se
codificaban mediante un dispositivo llamado ENIGMA, cuyo precursor fue diseñado por el
inventor aficionado y ex presidente de los Estados Unidos, Thomas Jefferson.
Al principio de la guerra, la inteligencia británica logró adquirir una máquina ENIGMA de la
inteligencia polaca, que se la había robado a los alemanes. Sin embargo, para descifrar un
mensaje codificado, se necesitaba una gran cantidad de cálculo, y se necesitaba muy poco
después de que el mensaje fuera interceptado para que tuviera alguna utilidad. Para decodificar
estos mensajes, el gobierno británico estableció un laboratorio de alto secreto que construyó una
computadora electrónica llamada COLOSSUS. El famoso matemático británico Alan Turing ayudó
a diseñar esta máquina. El COLOSSUS estaba operativo en 1943, pero dado que el gobierno
británico mantuvo prácticamente todos los aspectos del proyecto clasificados como
SEGUNDO. 1.2 HITOS EN ARQUITECTURA DE COMPUTADORAS 17

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

Mientras Eckert y Mauchley trabajaban en el EDVAC, una de las personas


involucradas en el proyecto ENIAC, John von Neumann, fue al Instituto de
Estudios Avanzados de Princeton para construir su propia versión del EDVAC, el
Máquina IAS. Von Neumann era un genio en la misma liga que Leonardo Da
Vinci. Hablaba muchos idiomas, era un experto en ciencias físicas y matemáticas,
y recordaba por completo todo lo que había oído, visto o leído. Pudo citar
textualmente de memoria el texto de libros que había leído años antes. En el
momento en que se interesó por las computadoras, ya era el matemático más
eminente del mundo.
Pronto se dio cuenta de que programar computadoras con una gran cantidad de
interruptores y cables era lento, tedioso e inflexible. Se dio cuenta de que el programa
podía representarse en forma digital en la memoria de la computadora, junto con los datos.
También vio que la aritmética decimal en serie torpe utilizada por la ENIAC, con cada dígito
representado por 10 tubos de vacío (1 encendido y 9 apagado) podría reemplazarse
mediante el uso de aritmética binaria paralela, algo que Atanasoff se había dado cuenta
años antes.
El diseño básico, que describió por primera vez, ahora se conoce como un máquina de von
Neumann. Se utilizó en el EDSAC, la primera computadora con programa almacenado, e incluso
ahora, más de medio siglo después, sigue siendo la base de casi todas las computadoras
digitales. Este diseño, y la máquina IAS, construida en colaboración con Herman Goldstine, ha
tenido una influencia tan enorme que vale la pena describirla brevemente. Aunque el nombre de
Von Neumann siempre se adjunta a este diseño, Goldstine y otros también hicieron importantes
contribuciones. Se da un boceto de la arquitectura.
en la figura 1-5.

Memoria

Aporte
Aritmética
Control unidad lógica
unidad
Producción

Acumulador

Figura 1-5. La máquina original de von Neumann.

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

palabras de memoria. Juntas, la unidad aritmética lógica y la unidad de control formaban el


"cerebro" de la computadora. En las computadoras modernas se combinan en un solo
chip llamado CPU (Unidad Central de Procesamiento).
Dentro de la unidad lógica aritmética había un registro interno especial de 40 bits llamado
acumulador. Una instrucción típica agrega una palabra de memoria al acumulador o
almacena el contenido del acumulador en la memoria. La máquina no tenía aritmética de
coma flotante porque von Neumann sintió que cualquier matemático competente debería
ser capaz de realizar un seguimiento del punto decimal (en realidad, el punto binario) en su
cabeza.
Aproximadamente al mismo tiempo que von Neumann estaba construyendo la máquina IAS,
los investigadores del MIT también estaban construyendo una computadora. A diferencia de IAS,
ENIAC y otras máquinas de este tipo, que tenían una gran longitud de palabras y estaban
diseñadas para procesar números pesados, la máquina del MIT, Whirlwind I, tenía una palabra de
16 bits y estaba diseñada para control en tiempo real. Este proyecto condujo a la invención de la
memoria de núcleo magnético por Jay Forrester y, finalmente, al primer miniordenador comercial.

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.

1.2.3 La segunda generación: transistores (1955-1965)

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.

Consola Papel Otro


UPC Memoria
Terminal E / S de cinta E/S

General

Figura 1-6. los Ómnibus PDP-8.

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

En 1964, una empresa pequeña y desconocida, Control Data Corporation (CDC),


presentó el 6600, una máquina que era casi un orden de magnitud más rápida que la
poderosa 7094 y todas las demás máquinas que existían en ese momento. Fue amor a
primera vista entre los machacadores de números, y los CDC se lanzaron en su camino
hacia el éxito. El secreto de su velocidad, y la razón por la que era mucho más rápido
que el 7094, era que dentro de la CPU había una máquina altamente paralela. Tenía
varias unidades funcionales para sumar, otras para multiplicar y otra más para dividir,
y todas podían funcionar en paralelo. Aunque aprovecharlo al máximo requería una
programación cuidadosa, con un poco de trabajo fue posible ejecutar 10 instrucciones
a la vez.
Como si esto no fuera suficiente, el 6600 tenía una cantidad de pequeñas computadoras adentro
para ayudarlo, algo así como Blancanieves y las siete personas con desafíos verticales. Esto significaba
que la CPU podía pasar todo su tiempo analizando números, dejando todos los detalles de la gestión
del trabajo y la entrada / salida a las computadoras más pequeñas. En retrospectiva, el 6600 se adelantó
décadas a su tiempo. Muchas de las ideas clave que se encuentran en las computadoras modernas se
remontan directamente al 6600.
El diseñador del 6600, Seymour Cray, era una figura legendaria, en la misma liga que
Von Neumann. Dedicó toda su vida a construir máquinas cada vez más rápidas, ahora
llamadas supercomputadoras, incluidos los modelos 6600, 7600 y Cray-1. También inventó
un algoritmo ahora famoso para comprar autos: vas al concesionario más cercano a tu
casa, señalas el auto más cercano a la puerta y dices: "Me quedo con ese". Este algoritmo es
el que menos desperdicia. tiempo en cosas sin importancia (como comprar autos) para
dejarle el tiempo máximo para hacer cosas importantes (como diseñar
supercomputadoras).
Hubo muchas otras computadoras en esta época, pero una se destaca por una razón
bastante diferente y vale la pena mencionarla: la Burroughs B5000. Los diseñadores de
máquinas como PDP-1, 7094 y 6600 estaban totalmente preocupados por el hardware,
haciéndolo barato (DEC) o rápido (IBM y CDC). El software era casi completamente
irrelevante. Los diseñadores de B5000 tomaron un rumbo diferente. Construyeron una
máquina específicamente con la intención de tenerla programada en Algol 60, un precursor
de C y Java, e incluyeron muchas características en el hardware para facilitar la tarea del
compilador. Nació la idea de que el software también contaba. Desafortunadamente, se
olvidó casi de inmediato.

1.2.4 La tercera generación: circuitos integrados (1965-1980)

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.

Propiedad Modelo 30 Modelo 40 Modelo 50 Modelo 65


Desempeño relativo 1 3,5 10 21
Tiempo de ciclo (en mil millonésimas de 1000 625 500 250
segundo) Memoria máxima (bytes) 65,536 262,144 262,144 524,288
Bytes recuperados por ciclo 1 2 4 dieciséis

Número máximo de canales de datos 3 3 4 6

Figura 1-7. La oferta inicial del Línea de productos IBM 360.

Otra gran innovación en el 360 fue multiprogramación, tener varios programas en la


memoria a la vez, de modo que cuando uno estaba esperando que se completara la
entrada / salida, otro pudiera calcular. Esto resultó en una mayor utilización de la CPU.
La 360 también fue la primera máquina que pudo emular (simular) otras computadoras. Los
modelos más pequeños podrían emular el 1401, y los más grandes podrían emular el 7094, de
modo que los clientes pudieran continuar ejecutando sus viejos programas binarios sin modificar
mientras se convirtieron al 360. Algunos modelos ejecutaron programas 1401 mucho más rápido
que el 1401 en sí mismo que muchos clientes nunca convirtió sus programas.

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.

1.2.5 La cuarta generación: integración a gran escala (¿1980–?)

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.

La versión inicial de IBM PC venía equipada con el sistema operativo MS-DOS


suministrado por la entonces pequeña Microsoft Corporation. Como Intel pudo
producir CPU cada vez más potentes, IBM y Microsoft pudieron desarrollar un
sucesor de MS-DOS llamado OS / 2, que presentaba una interfaz gráfica de
usuario, similar a la de Apple Macintosh. Mientras tanto, Microsoft también
desarrolló su propio sistema operativo, Windows, que se ejecutaba sobre MS-
DOS, por si acaso OS / 2 no se popularizaba. Para abreviar la historia, OS / 2 no se
popularizó, IBM y Microsoft tuvieron una gran y extremadamente pública pelea, y
Microsoft logró hacer de Windows un gran éxito. Cómo la pequeña Intel y aún
más diminuta Microsoft lograron destronar a IBM, una de las corporaciones más
grandes, ricas y poderosas de la historia del mundo,

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.

1.2.6 Quinta generación: computadoras invisibles y de bajo consumo

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).

1.3 EL ZOO DE LA COMPUTADORA

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.

1.3.1 Fuerzas tecnológicas y económicas

La industria informática avanza como ninguna otra. La principal fuerza impulsora es la


capacidad de los fabricantes de chips para empaquetar más y más transistores por chip cada
año. Más transistores, que son pequeños interruptores electrónicos, significan memorias más
grandes y procesadores más potentes. Gordon Moore, cofundador y ex presidente de Intel,
bromeó una vez que si la tecnología de la aviación hubiera avanzado tan rápido como la
tecnología informática, un avión costaría 500 dólares y daría la vuelta a la tierra en 20 minutos
con 5 galones de combustible. Sin embargo, sería del tamaño de una caja de zapatos.
Específicamente, mientras preparaba un discurso para un grupo de la industria, Moore notó que
cada nueva generación de chips de memoria se estaba introduciendo 3 años después de la anterior.
Dado que cada nueva generación tenía cuatro veces más memoria que su predecesora, se dio cuenta
de que la cantidad de transistores en un chip aumentaba a un ritmo constante y predijo que este
crecimiento continuaría durante las próximas décadas. Esta observación se conoce como Ley de
Moore. Hoy en día, la ley de Moore se expresa a menudo como la duplicación del número de
transistores cada 18 meses. Tenga en cuenta que esto equivale a aproximadamente un aumento del 60
por ciento en el recuento de transistores por año. Los tamaños de los chips de memoria y sus fechas de
introducción que se muestran en la figura 1-8 confirman que la ley de Moore se ha mantenido durante
más de cuatro décadas.
Por supuesto, la ley de Moore no es una ley en absoluto, sino simplemente una observación
empírica sobre la rapidez con que los físicos del estado sólido y los ingenieros de procesos avanzan en
el estado de la técnica, y una predicción de que continuarán al mismo ritmo en el futuro. Algunos
observadores de la industria esperan que la ley de Moore continúe vigente durante al menos otra
década, tal vez más. Otros observadores esperan que la disipación de energía, la fuga de corriente y
otros efectos se produzcan antes y causen serios problemas que deben resolverse.
SEGUNDO. 1.3 EL ZOO DE LA COMPUTADORA 29

100 GRAMOS

10G 512M 2G
1G
1G
16M
Numero de transistores

100 millones Los 256M

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.

1.3.2 El espectro de la computadora

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.

Escribe Precio ($) Aplicación de ejemplo


Computadora desechable 0,5 Tarjetas de felicitacion

Microcontrolador 5 Relojes, coches, electrodomésticos

Computadoras móviles y de juegos 50 Videojuegos y teléfonos inteligentes para el

Computadora personal 500 hogar Computadora de escritorio o portátil

Servidor 5K Servidor de red

Marco principal 5M Procesamiento de datos por lotes en un banco

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.

1.3.3 Computadoras desechables

En el extremo inferior, encontramos fichas individuales pegadas en el interior de las


tarjetas de felicitación para jugar "Feliz cumpleaños", "Aquí viene la novia" o alguna canción
igualmente espantosa. Los autores aún no han visto una tarjeta de condolencias que suene
como un canto fúnebre, pero habiendo lanzado esta idea al dominio público, la esperamos
en breve. Para cualquiera que haya crecido con mainframes multimillonarios, la idea de
computadoras desechables tiene tanto sentido como los aviones desechables.
Sin embargo, las computadoras desechables llegaron para quedarse. Probablemente el
desarrollo más importante en el área de las computadoras desechables es el RFID
(identificación por radiofrecuencia) chip. Ahora es posible fabricar, por unos pocos centavos,
chips RFID sin batería de menos de 0,5 mm de borde que contienen un diminuto transpondedor
de radio y un número exclusivo de 128 bits incorporado. Cuando se pulsan desde una antena
externa, son alimentados por la señal de radio entrante el tiempo suficiente para transmitir su
número a la antena. Si bien los chips son pequeños, sus implicaciones ciertamente no lo son.
Comencemos con una aplicación mundana: eliminar códigos de barras de los
productos. Ya se han realizado ensayos experimentales en los que los productos en las
tiendas tienen chips RFID (en lugar de códigos de barras) adjuntos por el fabricante. Los
clientes seleccionan sus productos, los colocan en un carrito de compras y simplemente los
sacan de la tienda sin pasar por el mostrador de pago. A la salida de la tienda, un lector con
antena envía una señal pidiendo a cada producto que se identifique, lo que hace mediante
una breve transmisión inalámbrica. Los clientes también se identifican mediante fichas en
su tarjeta de débito o crédito. Al final del mes, la tienda envía a cada cliente una factura
detallada por las compras de este mes. Si el cliente no tiene un banco o crédito RFID válido
32 INTRODUCCIÓN CAP. 1

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

A continuación, en la escalera, tenemos computadoras que están integradas dentro de dispositivos


que no se venden como computadoras. Las computadoras integradas, a veces llamadas
microcontroladores, administrar los dispositivos y manejar la interfaz de usuario. Los
microcontroladores se encuentran en una gran variedad de dispositivos diferentes, incluidos los
siguientes. Algunos ejemplos de cada categoría se dan entre paréntesis.

1. Electrodomésticos (radio reloj, lavadora, secadora, microondas, alarma antirrobo).

2. Equipo de comunicaciones (teléfono inalámbrico, celular, fax, buscapersonas).

3. Periféricos de computadora (impresora, escáner, módem, unidad de CD ROM).

4. Dispositivos de entretenimiento (VCR, DVD, estéreo, reproductor MP3, decodificador).

5. Dispositivos de imágenes (TV, cámara digital, videocámara, lente, fotocopiadora).

6. Dispositivos médicos (rayos X, resonancia magnética, monitor cardíaco, termómetro digital).

7. Sistemas de armas militares (misiles de crucero, misiles balísticos intercontinentales, torpedos).

8. Dispositivos de compra (máquina expendedora, cajero automático, caja registradora).

9. Juguetes (muñeca parlante, consola de juegos, coche o barco radiocontrolado).

Un automóvil puede contener fácilmente 50 microcontroladores, subsistemas en funcionamiento, incluidos los


frenos antibloqueo, la inyección de combustible, la radio, las luces y el GPS. Un avión a reacción puede tener
fácilmente 200 o más. Una familia puede poseer fácilmente varios cientos de computadoras sin siquiera
34 INTRODUCCIÓN CAP. 1

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.

En segundo lugar, prácticamente todos los microcontroladores funcionan en tiempo real.


Reciben un estímulo y se espera que den una respuesta instantánea. Por ejemplo, cuando el
usuario presiona un botón, a menudo se enciende una luz y no debe haber ningún retraso entre
que se presiona el botón y la luz se enciende. La necesidad de operar en tiempo real a menudo
tiene un impacto en la arquitectura.
En tercer lugar, los sistemas integrados suelen tener limitaciones físicas en términos de
tamaño, peso, consumo de batería y otros límites eléctricos y mecánicos. Los microcontroladores
utilizados en ellos deben diseñarse teniendo en cuenta estas restricciones.
Una aplicación particularmente divertida de los microcontroladores se encuentra en la
plataforma de control integrado Arduino. Arduino fue diseñado por Massimo Banzi y David
Cuartielles en Ivrea, Italia. Su objetivo para el proyecto era producir una plataforma informática
integrada completa que cueste menos que una pizza grande con ingredientes adicionales, lo que
la hace fácilmente accesible para estudiantes y aficionados. (Esta fue una tarea difícil, porque hay
un exceso de pizzas en Italia, por lo que son realmente baratas). Lograron bien su objetivo: ¡un
sistema Arduino completo cuesta menos de 20 dólares estadounidenses!
El sistema Arduino es un diseño de hardware de código abierto, lo que significa que todos sus
detalles están publicados y son gratuitos para que cualquiera pueda construir (e incluso vender) un
sistema Arduino. Se basa en el microcontrolador Atmel AVR RISC de 8 bits, y la mayoría de los diseños
de placas también incluyen soporte básico de E / S. La placa se programa usando
SEGUNDO. 1.3 EL ZOO DE LA COMPUTADORA 35

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.

1.3.5 Computadoras móviles y de juegos

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.

1.3.6 Computadoras personales

A continuación, llegamos a las computadoras personales en las que la mayoría de la gente


piensa cuando oye el término "computadora". Estos incluyen modelos de escritorio y portátiles.
Por lo general, vienen con unos pocos gigabytes de memoria, un disco duro con capacidad para
terabytes de datos, una unidad de CD-ROM / DVD / Blu-ray, tarjeta de sonido, interfaz de red,
monitor de alta resolución y otros periféricos. Tienen sistemas operativos elaborados, muchas
opciones de expansión y una amplia gama de software disponible.
El corazón de cada computadora personal es una placa de circuito impreso en la parte
inferior o lateral de la carcasa. Por lo general, contiene la CPU, la memoria, varios dispositivos de
E / S (como un chip de sonido y posiblemente un módem), así como interfaces para el teclado,
mouse, disco, red, etc., y algunas ranuras de expansión. En la figura 1-10 se muestra una foto de
una de estas placas de circuito.
Las computadoras portátiles son básicamente PC en un paquete más pequeño. Usan los mismos
componentes de hardware, pero fabricados en tamaños más pequeños. También ejecutan el mismo software
que las PC de escritorio. Dado que la mayoría de los lectores probablemente estén bastante familiarizados con
las computadoras portátiles y personales, apenas se necesita material introductorio adicional.

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

Las estaciones de trabajo o computadoras personales reforzadas se utilizan a menudo como


servidores de red, tanto para redes de área local (generalmente dentro de una sola empresa)
como para Internet. Estos vienen en configuraciones de un solo procesador y de múltiples
procesadores, y tienen gigabytes de memoria, terabytes de espacio en el disco duro y capacidad
de red de alta velocidad. Algunos de ellos pueden manejar miles de transacciones por segundo.

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.

1.4 EJEMPLO DE FAMILIAS DE COMPUTADORAS


En este libro nos centraremos en tres arquitecturas de conjuntos de instrucciones
(ISA) populares: x86, ARM y AVR. La arquitectura x86 se encuentra en casi todas las
computadoras personales (incluidas las PC y Mac con Windows y Linux) y los sistemas
de servidor. Las computadoras personales son de interés porque, sin duda, todos los
lectores han usado una. Los servidores son de interés porque ejecutan todos los
servicios en Internet. La arquitectura ARM domina el mercado móvil. Por ejemplo, la
mayoría de los teléfonos inteligentes y tabletas se basan en procesadores ARM.
Finalmente, la arquitectura AVR se encuentra en microcontroladores de muy bajo
costo que se encuentran en muchas aplicaciones informáticas integradas. Las
computadoras integradas son invisibles para sus usuarios, pero controlan
automóviles, televisores, hornos microondas, lavadoras y prácticamente todos los
demás dispositivos eléctricos que cuestan más de $ 50. En esta sección,

1.4.1 Introducción a la arquitectura x86

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.

Chip Fecha megahercio Trans. Memoria Notas


4004 4/1971 0.108 2300 640 Primer microprocesador en un chip 16
8008 4/1972 0.108 3500 KB Primer microprocesador de 8 bits
8080 4/1974 2 6000 64 KB Primera CPU de uso general en un chip 1
8086 6/1978 5–10 29 000 MB Primera CPU de 16 bits en un chip
8088 6/1979 5–8 29 000 1 MB utilizado en IBM PC
80286 2/1982 8-12 134 000 16 MB Protección de memoria presente 4
80386 10/1985 16–33 275 000 GB Primera CPU de 32 bits
80486 4/1989 25-100 1,2 millones 4 GB de memoria caché incorporada de 8 KB

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

Core i7 1/2011 1100–3300 El 1160M Procesador de gráficos integrado de 24 GB

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.

Ni el 8088 ni el 8086 podían abordar más de 1 megabyte de memoria. A principios de la


década de 1980, esto se había convertido en un problema grave, por lo que Intel diseñó el
80286, una versión compatible con versiones superiores del 8086. El conjunto de instrucciones
básicas era esencialmente el mismo que el del 8086 y el 8088, pero la organización de la memoria
era bastante diferente, y bastante incómoda, debido al requisito de compatibilidad con los chips
más antiguos. El 80286 se utilizó en IBM PC / AT y en los modelos PS / 2 de gama media. Al igual
que el 8088, fue un gran éxito, principalmente porque la gente lo vio como un 8088 más rápido.

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.

En 2003, Intel introdujo el Pentium M (como en Mobile), un chip diseñado para


computadoras portátiles. Este chip formaba parte de la arquitectura Centrino, cuyos objetivos
eran un menor consumo de energía para una mayor duración de la batería; computadoras más
pequeñas y livianas; y capacidad de red inalámbrica incorporada utilizando el estándar IEEE
802.11 (WiFi). El Pentium M era de muy bajo consumo y mucho más pequeño que el Pentium
4, dos características que pronto le permitirían (y sus sucesores) subsumir la
microarquitectura Pentium 4 en futuros productos Intel.
Todos los chips Intel son compatibles con sus predecesores desde el 8086. En otras
palabras, un Pentium 4 o Core puede ejecutar programas antiguos del 8086 sin
modificaciones. Esta compatibilidad siempre ha sido un requisito de diseño para Intel, para
permitir a los usuarios mantener su inversión existente en software. Por supuesto,
44 INTRODUCCIÓN CAP. 1

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.

10G Core 2 Core i7


Core Duo
1G
Pentium 4
Pentium III
100 millones

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

Figura 1-13. Ley de Moore para chips de CPU (Intel).

Si bien la ley de Moore probablemente se mantendrá durante algunos años, otro


problema está comenzando a eclipsarla: la disipación de calor. Los transistores más
pequeños permiten funcionar a frecuencias de reloj más altas, lo que requiere el uso de un
voltaje más alto. La energía consumida y el calor disipado es proporcional al cuadrado del
voltaje, por lo que ir más rápido significa tener más calor del que deshacerse. A 3,6 GHz, el
Pentium 4 consume 115 vatios de potencia. Eso significa que se calienta tanto como una
bombilla de 100 vatios. Acelerar el reloj empeora el problema.
En noviembre de 2004, Intel canceló el Pentium 4 de 4 GHz debido a problemas para disipar el
calor. Los ventiladores grandes pueden ayudar, pero el ruido que hacen no es popular entre los
usuarios, y la refrigeración por agua, aunque se usa en grandes mainframes, no es una opción para las
computadoras de escritorio (y menos aún para las computadoras portátiles). Como consecuencia, la
una vez implacable marcha del reloj puede haber terminado, al menos hasta que los ingenieros de Intel
encuentren una manera eficiente de deshacerse de todo el calor generado. En cambio, los diseños de
CPU de Intel ahora colocan dos o más CPU en un solo chip, junto con grandes
SEGUNDO. 1.4 EJEMPLO DE FAMILIAS DE COMPUTADORAS 45

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.

1.4.2 Introducción a la arquitectura ARM

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

aplicaciones móviles como PDA. Produjeron el diseño StrongARM, que desde su


primera aparición envió ondas a la industria debido a su alta velocidad (233 MHz) y
demandas de energía ultrabajas (1 vatio). Ganó eficiencia a través de un diseño simple
y limpio que incluía dos cachés de 16 KB para instrucciones y datos. StrongARM y sus
sucesores en DEC tuvieron un éxito moderado en el mercado, encontrando su camino
en una serie de PDA, decodificadores, dispositivos de medios y enrutadores.

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

Figura 1-14. El sistema Nvidia Tegra 2 en un chip. © 2011 Nvidia Corporation.


Usado con permiso.

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.

1.4.3 Introducción a la arquitectura AVR

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.

Chip Destello EEPROM RAM Patas Características

tinyAVR 0,5–16 KB 0–512 B 32–512 B 6–32 E / S digital diminuta, entrada analógica

megaAVR 8-256 KB 0,5–4 KB 0,25–8 KB 28-100 Muchos periféricos, salida analógica

AVR XMEGA 16–256 KB 1–4 KB 2–16 KB 44-100 Aceleración de cifrado, E / S USB

Figura 1-15. Clases de microcontroladores en el AVR familia.

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

1. Tres temporizadores (dos temporizadores de 8 bits y un temporizador de 16 bits).

2. Reloj de tiempo real con oscilador.

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.

5. Receptor / transmisor serie universal.

6. Interfaz en serie I2C, un estándar común para la interfaz con sensores.

7. Temporizador de vigilancia programable que detecta cuando el sistema se ha


bloqueado.

8. Comparador analógico en chip que compara dos voltajes de entrada.

9. Detector de caída de energía que interrumpe el sistema cuando falla la


energía.

10. Oscilador de reloj programable interno para controlar el reloj de la CPU.

1.5 UNIDADES MÉTRICAS

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

(1.073.741.824) bytes y una base de datos de 1 TB contiene 2 40 ( 1,099,511,627,776)


bytes.
Sin embargo, una línea de comunicación de 1 kbps puede transmitir 1000 bits por segundo y una
LAN de 10 Mbps funciona a 10,000,000 bits / seg porque estas velocidades no son potencias de dos.
Desafortunadamente, muchas personas tienden a mezclar estos dos sistemas, especialmente para los
tamaños de disco.
50 INTRODUCCIÓN CAP. 1

Exp. Explícito Prefijo Exp. Explícito Prefijo

10 - 3 0,001 mili 10 3 1.000 kilo


10 - 6 0,000001 micro 10 6 1,000,000 mega
10 - 9 0,000000001 nano 10 9 1.000.000.000 giga
10 - 12 0,000000000001 pico 10 12 1.000.000.000.000 tera
10 - 15 0,000000000000001 femto 10 15 1.000.000.000.000.000 peta
10 - 18 0,0000000000000000001 en A 10 18 1.000.000.000.000.000.000 exa
10 - 21 0.0000000000000000000001 zepto 10 21 1.000.000.000.000.000.000.000 zetta
10 - 24 0.0000000000000000000000001 yocto 10 24 1.000.000.000.000.000.000.000.000 yotta

Figura 1-16. Los principales prefijos de métricas.

Para evitar la ambigüedad, las organizaciones de normalización han introducido los


nuevos términos kibibyte para 2 10 bytes, mebibyte para 2 20 bytes, gibibyte para 2 30 bytes y
tebibyte para 2 40 bytes, pero la industria ha tardado en adoptarlos. Creemos que hasta que
estos nuevos términos tengan un uso más amplio, es mejor seguir con los símbolos KB, MB,
GB y TB para 2 10, 2 20, 2 30, y 2 40 bytes, respectivamente, y los símbolos kbps, Mbps, Gbps y
Tbps para 10 3, 10 6, 10 9, y 10 12 bits / seg, respectivamente.

1.6 ESQUEMA DE ESTE LIBRO

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.

El capítulo 4 presenta la arquitectura del nivel de microarquitectura y su control.


Dado que la función de este nivel es interpretar las instrucciones del nivel 2 en la capa
superior, nos concentraremos en este tema y lo ilustraremos mediante ejemplos. El
capítulo también contiene discusiones sobre el nivel de microarquitectura de algunas
máquinas reales.
El Capítulo 5 analiza el nivel ISA, el que la mayoría de los proveedores de computadoras anuncian
como lenguaje de máquina. Veremos nuestras máquinas de ejemplo aquí en detalle.
El Capítulo 6 cubre algunas de las instrucciones, organización de la memoria y mecanismos de
control presentes en el nivel de máquina del sistema operativo. Los ejemplos que se utilizan aquí son el
sistema operativo Windows (popular en los sistemas de escritorio basados en x86) y UNIX, que se
utiliza en muchos sistemas basados en x86 y ARM.
El capítulo 7 trata sobre el nivel de lenguaje ensamblador. Cubre tanto el lenguaje
ensamblador como el proceso de ensamblaje. El tema de la vinculación también surge aquí.
El capítulo 8 trata sobre las computadoras en paralelo, un tema cada vez más importante en
la actualidad. Algunas de estas computadoras paralelas tienen varias CPU que comparten una
memoria común. Otros tienen varias CPU sin memoria común. Algunas son supercomputadoras;
algunos son sistemas en un chip; otros son grupos de computadoras.
El capítulo 9 contiene una lista alfabética de citas bibliográficas. Las lecturas sugeridas
están en el sitio web del libro. Ver: www.prenhall.com/tanenbaum.
52 INTRODUCCIÓN CAP. 1

PROBLEMAS

1. Explique cada uno de los siguientes términos con sus propias palabras:

una. Traductor.
B. Interprete.
C. Máquina virtual.

2. ¿Es concebible que un compilador genere resultados para el nivel de microarquitectura en


lugar de para el nivel ISA? Analice los pros y los contras de esta propuesta.

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

Una computadora digital consiste en un sistema interconectado de procesadores, memorias


y dispositivos de entrada / salida. Este capítulo es una introducción a estos tres componentes y a
su interconexión, como base para un examen más detallado de los niveles específicos en los
cinco capítulos siguientes. Los procesadores, las memorias y la entrada / salida son conceptos
clave y estarán presentes en todos los niveles, por lo que comenzaremos nuestro estudio de la
arquitectura informática analizando los tres a su vez.

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

Unidad Central de Procesamiento (CPU)

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.

2.1.1 Organización de la CPU

La organización interna de parte de una CPU de von Neumann simple se muestra en la


figura 2-2 con más detalle. Esta parte se llama Ruta de datos y consta de los registros
(típicamente 1 a 32), el ALU (Unidad Aritmética Lógica), y varios buses conectando las
piezas. Los registros se alimentan en dos registros de entrada ALU, etiquetados A y
B en la figura. Estos registros mantienen la entrada de ALU mientras la ALU está realizando
SEGUNDO. 2.1 PROCESADORES 57

algunos cálculos. La ruta de datos es importante en todas las máquinas y discutiremos


con gran detalle a lo largo de este libro.

A+B

A
Registros

Registro de entrada ALU


A B
Bus de entrada ALU

ALU

Registro de salida ALU


A+B

Figura 2-2. La ruta de datos de una máquina de von Neumann típica.

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.

2.1.2 Ejecución de instrucciones

La CPU ejecuta cada instrucción en una serie de pequeños pasos. A grandes rasgos, los
pasos son los siguientes:

1. Obtenga la siguiente instrucción de la memoria en el registro de instrucciones.

2. Cambie el contador de programa para que apunte a la siguiente instrucción.

3. Determine el tipo de instrucción que acaba de obtener.

4. Si la instrucción usa una palabra en la memoria, determine dónde está.

5. Busque la palabra, si es necesario, en un registro de la CPU.

6. Ejecute la instrucción.
7. Vaya al paso 1 para comenzar a ejecutar la siguiente instrucción.

Esta secuencia de pasos se denomina frecuentemente buscar-decodificar-ejecutar ciclo. Es


fundamental para el funcionamiento de todas las computadoras.
Esta descripción de cómo funciona una CPU se parece mucho a un programa escrito en
inglés. La figura 2-3 muestra este programa informal reescrito como un método Java (es decir,
procedimiento) llamado interpretar. La máquina que se interpreta tiene dos registros visibles
para los programas de usuario: el contador de programa ( ORDENADOR PERSONAL), para realizar un
seguimiento de la dirección de la siguiente instrucción que se va a buscar, y el acumulador ( C.A),
para acumular resultados aritméticos. También tiene registros internos para mantener la
instrucción actual durante su ejecución ( instr), el tipo de instrucción actual ( tipo instr), la dirección
del operando de la instrucción ( loc de datos), y el operando actual en sí ( datos).
Se supone que las instrucciones contienen una única dirección de memoria. La ubicación de la memoria
direccionada contiene el operando, por ejemplo, el elemento de datos para agregar al acumulador.

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

static int AC; // el acumulador, un registro para hacer aritmética // un


static int instr; registro de retención para la instrucción actual // el tipo de
tipo de instrucción int instrucción (código de operación)
estática; loc de datos int // la dirección de los datos, o - 1 si
estática; datos int estáticos; ninguno // contiene el operando actual
bit de ejecución booleano estático = verdadero; // un poco que se puede apagar para detener la máquina

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) {...}
}

Figura 2-3. Un intérprete para una computadora simple (escrito en Java).

Esta equivalencia entre procesadores e intérpretes de hardware tiene importantes implicaciones


para la organización de las computadoras y el diseño de sistemas informáticos. Después de haber
especificado el idioma de la máquina, L, para una computadora nueva, el equipo de diseño puede
decidir si desea construir un procesador de hardware para ejecutar programas en L
directamente o si quieren escribir un intérprete para interpretar programas en L en lugar
de. Si eligen escribir un intérprete, también deben proporcionar alguna máquina de
hardware para ejecutar el intérprete. También son posibles ciertas construcciones híbridas,
con alguna ejecución de hardware e interpretación de software.
Un intérprete divide las instrucciones de su máquina de destino en pequeños pasos. Como
consecuencia, la máquina en la que se ejecuta el intérprete puede ser mucho más simple y
menos costosa que lo que sería un procesador de hardware para la máquina de destino. Esta
60 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2

El ahorro es especialmente significativo si la máquina de destino tiene una gran cantidad de


instrucciones y son bastante complicadas, con muchas opciones. El ahorro proviene
esencialmente del hecho de que el hardware está siendo reemplazado por software (el
intérprete) y cuesta más replicar el hardware que el software.
Las primeras computadoras tenían conjuntos de instrucciones pequeños y simples. Pero la
búsqueda de computadoras más poderosas condujo, entre otras cosas, a instrucciones individuales
más poderosas. Muy pronto, se descubrió que las instrucciones más complejas a menudo conducían a
una ejecución más rápida del programa, aunque las instrucciones individuales podían tardar más en
ejecutarse. Una instrucción de punto flotante es un ejemplo de instrucción más compleja. El soporte
directo para acceder a los elementos de la matriz es otro. A veces era tan simple como observar que las
mismas dos instrucciones a menudo ocurrían consecutivamente, por lo que una sola instrucción podía
realizar el trabajo de ambas.
Las instrucciones más complejas eran mejores porque la ejecución de operaciones
individuales a veces podía superponerse o ejecutarse en paralelo utilizando hardware diferente.
Para computadoras caras y de alto rendimiento, el costo de este hardware adicional podría
justificarse fácilmente. Por lo tanto, las computadoras caras y de alto rendimiento llegaron a
tener muchas más instrucciones que las de menor costo. Sin embargo, los requisitos de
compatibilidad de instrucciones y el costo creciente del desarrollo de software crearon la
necesidad de implementar instrucciones complejas incluso en computadoras de gama baja
donde el costo era más importante que la velocidad.
A finales de la década de 1950, IBM (entonces la empresa informática dominante) había
reconocido que el soporte de una única familia de máquinas, todas las cuales ejecutaban las
mismas instrucciones, tenía muchas ventajas, tanto para IBM como para sus clientes. IBM
introdujo el término arquitectura para describir este nivel de compatibilidad. Una nueva familia
de computadoras tendría una arquitectura pero muchas implementaciones diferentes que
podrían ejecutar el mismo programa, difiriendo solo en precio y velocidad. Pero, ¿cómo construir
una computadora de bajo costo que pudiera ejecutar todas las complicadas instrucciones de las
costosas máquinas de alto rendimiento?
La respuesta estaba en la interpretación. Esta técnica, sugerida por primera vez por Maurice
Wilkes (1951), permitió el diseño de computadoras simples y de bajo costo que, sin embargo,
podían ejecutar una gran cantidad de instrucciones. El resultado fue la arquitectura IBM System /
360, una familia de computadoras compatibles, que abarca casi dos órdenes de magnitud, tanto
en precio como en capacidad. Se utilizó una implementación directa de hardware (es decir, no
interpretada) solo en los modelos más costosos.
Algunas computadoras simples con instrucciones interpretadas también tenían otros beneficios.
Entre los más importantes estaban

1. La capacidad de corregir instrucciones implementadas incorrectamente en el campo, o


incluso compensar las deficiencias de diseño en el hardware básico.

2. La oportunidad de agregar nuevas instrucciones a un costo mínimo, incluso después de la


entrega de la máquina.

3. Diseño estructurado que permitió el desarrollo, la prueba y la documentación


eficientes de instrucciones complejas.
SEGUNDO. 2.1 PROCESADORES 61

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.

2.1.3 RISC versus CISC

A finales de los 70 se experimentó con instrucciones muy complejas, posible gracias al


intérprete. Los diseñadores intentaron cerrar la "brecha semántica" entre lo que las
máquinas podían hacer y lo que requerían los lenguajes de programación de alto nivel. Casi
nadie pensó en diseñar máquinas más simples, al igual que ahora no se investiga mucho en
el diseño de hojas de cálculo, redes, servidores web, etc. menos potentes (quizás
desafortunadamente).
Un grupo que se opuso a la tendencia e intentó incorporar algunas de las ideas de
Seymour Cray en una minicomputadora de alto rendimiento fue dirigido por John Cocke en
IBM. Este trabajo condujo a un miniordenador experimental, llamado el 801. Aunque IBM
nunca comercializó esta máquina y los resultados no se publicaron hasta años después
(Radin, 1982), se corrió la voz y otras personas comenzaron a investigar arquitecturas
similares.
En 1980, un grupo en Berkeley dirigido por David Patterson y Carlo Séquin comenzó a
diseñar chips de CPU VLSI que no usaban interpretación (Patterson, 1985, Patterson y
Séquin, 1982). Ellos acuñaron el término RISC por este concepto y nombraron a su chip de
CPU RISC I CPU, seguido en breve por el RISC II. Un poco más tarde, en
1981, al otro lado de la Bahía de San Francisco en Stanford, John Hennessy diseñó y fabricó
un chip algo diferente al que llamó el MIPS ( Hennessy, 1984). Estos chips evolucionaron
hasta convertirse en productos de importancia comercial, SPARC y MIPS, respectivamente.

Estos nuevos procesadores eran significativamente diferentes a los procesadores comerciales de la


época. Dado que no tenían que ser retrocompatibles con los productos existentes, sus diseñadores
tenían la libertad de elegir nuevos conjuntos de instrucciones que maximizarían el rendimiento total del
sistema. Si bien el énfasis inicial estaba en instrucciones simples que pudieran ejecutarse rápidamente,
pronto se dio cuenta de que diseñar instrucciones que pudieran ser emitido ( comenzó) rápidamente
fue la clave para un buen desempeño. El tiempo que tardaba realmente una instrucción importaba
menos que cuántos podían iniciarse por segundo.
En el momento en que se diseñaron por primera vez estos procesadores simples, la
característica que llamó la atención de todos fue el número relativamente pequeño de
instrucciones disponibles, típicamente alrededor de 50. Este número era mucho menor que
los 200 a 300 en computadoras establecidas como el DEC VAX y el grandes mainframes de
IBM. De hecho, el acrónimo RISC significa Grupo reducido de instrucciones para
computadoras, que contrasta con CISC, que significa Equipo conjunto de instrucciones
complejas ( una referencia apenas velada al VAX, que dominaba la universidad
SEGUNDO. 2.1 PROCESADORES 63

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.

2.1.4 Principios de diseño para computadoras modernas

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 se ejecutan directamente por hardware

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.

Maximice la velocidad a la que se emiten las instrucciones

Las computadoras modernas recurren a muchos trucos para maximizar su rendimiento, el


principal de los cuales es intentar iniciar tantas instrucciones por segundo como sea posible. Después
de todo, si puede emitir 500 millones de instrucciones por segundo, habrá construido un procesador de
500 MIPS, sin importar cuánto tiempo tarden en completarse las instrucciones. ( MIPS significa Millones
de instrucciones por segundo. El procesador MIPS fue nombrado así como un juego de palabras con
este acrónimo. Oficialmente significa microprocesador sin etapas de canalización interconectadas). Este
principio sugiere que el paralelismo puede desempeñar un papel importante en la mejora del
rendimiento, ya que solo es posible emitir un gran número de instrucciones lentas en un intervalo de
tiempo corto si se pueden ejecutar varias instrucciones a la vez.
Aunque las instrucciones siempre se encuentran en el orden del programa, no siempre se
emiten en el orden del programa (porque algunos recursos necesarios pueden estar ocupados) y
no es necesario que finalicen en el orden del programa. Por supuesto, si la instrucción 1
establece un registro y la instrucción 2 usa ese registro, se debe tener mucho cuidado para
asegurarse de que la instrucción 2 no lea el registro hasta que contenga el valor correcto. Hacer
esto bien requiere mucha contabilidad, pero tiene el potencial de mejorar el rendimiento al
ejecutar varias instrucciones a la vez.

Las instrucciones deben ser fáciles de decodificar

Un límite crítico en la velocidad de emisión de instrucciones es la decodificación de


instrucciones individuales para determinar qué recursos necesitan. Todo lo que pueda ayudar en
este proceso es útil. Eso incluye hacer que las instrucciones sean regulares, de longitud fija y con
una pequeña cantidad de campos. Cuantos menos formatos diferentes de instrucciones, mejor.

Solo las cargas y los almacenes deben hacer referencia a la memoria

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.

Proporcione muchos registros

Dado que el acceso a la memoria es relativamente lento, es necesario proporcionar muchos


registros (al menos 32), de modo que una vez que se obtiene una palabra, se puede mantener en un
registro hasta que ya no se necesite. Quedarse sin registros y tener que vaciarlos de nuevo en la
memoria solo para volver a cargarlos más tarde no es deseable y debe evitarse en la medida de lo
posible. La mejor manera de lograr esto es tener suficientes registros.

2.1.5 Paralelismo a nivel de instrucción

Los arquitectos informáticos se esfuerzan constantemente por mejorar el rendimiento de las


máquinas que diseñan. Hacer que los chips funcionen más rápido aumentando la velocidad de su reloj
es una forma, pero para cada nuevo diseño, hay un límite a lo que es posible mediante la fuerza bruta
en ese momento de la historia. En consecuencia, la mayoría de los arquitectos informáticos buscan el
paralelismo (hacer dos o más cosas a la vez) como una forma de obtener aún más rendimiento para una
velocidad de reloj determinada.
El paralelismo se presenta en dos formas generales, a saber, paralelismo a nivel de
instrucción y paralelismo a nivel de procesador. En el primero, el paralelismo se explota dentro
de las instrucciones individuales para obtener más instrucciones por segundo de la máquina. En
este último, varias CPU trabajan juntas en el mismo problema. Cada enfoque tiene sus propios
méritos. En esta sección veremos el paralelismo a nivel de instrucción; en el siguiente, veremos el
paralelismo a nivel de procesador.

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

La etapa 3 localiza y recupera los operandos, ya sea de los registros o de la memoria.


La etapa 4 realmente hace el trabajo de llevar a cabo la instrucción, normalmente ejecutando la ruta
de los operandos a través de los datos de la figura 2-2. Finalmente, la etapa 5 escribe el resultado
hasta el registro adecuado.

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

Instrucción Operando Instrucción Escribir


descodificar ir a buscar ejecución espalda

Instrucción unidad unidad unidad unidad

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.

Aunque las tuberías, simples o dobles, se utilizaron originalmente en máquinas


RISC (la 386 y sus predecesoras no tenían ninguna), a partir de la 486 Intel comenzó
68 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2

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

Instrucción Instrucción Operando Escribir


ir a buscar descodificar ir a buscar
CARGA espalda
unidad unidad unidad unidad

TIENDA

Flotante
punto

Figura 2-6. Un procesador superescalar con cinco unidades funcionales.

idea. En realidad, la mayoría de las unidades funcionales en la etapa 4 tardan considerablemente


más de un ciclo de reloj en ejecutarse, ciertamente las que acceden a la memoria o hacen
aritmética de punto flotante. Como puede verse en la figura, es posible tener múltiples ALU en la
etapa S4.

2.1.6 Paralelismo a nivel de procesador

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

Computadoras en paralelo de datos

Un número sustancial de problemas en los dominios computacionales, como las ciencias


físicas, la ingeniería y los gráficos por computadora, involucran bucles y arreglos, o tienen una
estructura muy regular. A menudo, los mismos cálculos se realizan repetidamente en muchos
conjuntos de datos diferentes. La regularidad y estructura de estos programas los convierte en
objetivos especialmente fáciles de acelerar mediante la ejecución paralela. Se han utilizado dos
métodos principales para ejecutar estos programas tan habituales de forma rápida y eficiente:
procesadores SIMD y procesadores vectoriales. Si bien estos dos esquemas son notablemente
similares en la mayoría de los aspectos, irónicamente, el primero generalmente se considera una
computadora paralela, mientras que el segundo se considera una extensión ex de un solo
procesador.
Las computadoras en paralelo de datos han encontrado muchas
aplicaciones exitosas como consecuencia de su notable eficiencia. Son
capaces de producir una potencia computacional significativa con menos
transistores que los enfoques alternativos. Gordon Moore (de la ley de Moore)
señaló que el silicio cuesta alrededor de $ 1 mil millones por acre (4047
metros cuadrados). Por lo tanto, cuanto más músculo computacional pueda
extraerse de ese acre de silicio, más dinero podrá ganar una empresa de
informática vendiendo silicio. Los procesadores de datos en paralelo son uno
de los medios más eficientes para exprimir el rendimiento del silicio. Debido a
que todos los procesadores ejecutan la misma instrucción, el sistema solo
necesita un "cerebro" que controle la computadora. En consecuencia, el
procesador solo necesita una etapa de recuperación, una etapa de
decodificación y un conjunto de lógica de control.
A Secuencia de instrucciones única, secuencia de datos múltiple o Procesador SIMD estafa-
Consiste en una gran cantidad de procesadores idénticos que ejecutan la misma secuencia de
instrucciones en diferentes conjuntos de datos. El primer procesador SIMD del mundo fue la
computadora ILLIAC IV de la Universidad de Illinois (Bouknight et al., 1972). El diseño original de
ILLIAC IV constaba de cuatro cuadrantes, cada cuadrante tenía un 8 × 8 cuadrículas cuadradas de
procesador / elementos de memoria. Una sola unidad de control por cuadrante transmitía una
sola instrucción a todos los procesadores, que fue ejecutada por todos los procesadores en
sincronía, cada uno usando sus propios datos de su propia memoria. Debido a las limitaciones de
financiación, solo se construyó un cuadrante de 50 megaflops (millones de operaciones de punto
flotante por segundo); si se hubiera completado toda la máquina de 1 gigaflop, se habría
duplicado la potencia informática del mundo entero.
Las unidades de procesamiento de gráficos (GPU) modernas dependen en gran medida del
procesamiento SIMD para proporcionar una potencia computacional masiva con pocos transistores. El
procesamiento de gráficos se presta a los procesadores SIMD porque la mayoría de los algoritmos son
muy regulares, con operaciones repetidas en píxeles, vértices, texturas y bordes. La figura 2-7 muestra
el procesador SIMD en el núcleo de la GPU Nvidia Fermi. Una GPU Fermi contiene hasta 16
multiprocesadores de flujo SIMD (SM), y cada SM contiene 32 procesadores SIMD. Cada ciclo, el
programador selecciona dos subprocesos para ejecutar en el SIMD
SEGUNDO. 2.1 PROCESADORES 71

Caché de instrucciones

Envío de instrucciones Envío de instrucciones

Registrar archivo

Centro Centro Centro Centro

Centro Centro Centro Centro


Operando Operando

Centro Centro Centro Centro

Unidad FP ALU Centro Centro Centro Centro

Centro Centro Centro Centro


Registro de resultados

Centro Centro Centro Centro

Centro Centro Centro Centro

Centro Centro Centro Centro

Red de interconexión

Memoria compartida

Figura 2-7. El núcleo SIMD del procesamiento de gráficos Fermi unidad.

procesador. La siguiente instrucción de cada subproceso luego se ejecuta en hasta 16


procesadores SIMD, aunque posiblemente menos si no hay suficiente paralelismo de datos. Si
cada hilo puede realizar 16 operaciones por ciclo, un núcleo de GPU Fermi completamente
cargado con 32 SM realizará la friolera de 512 operaciones por ciclo. Esta es una hazaña
impresionante teniendo en cuenta que una CPU de cuatro núcleos de propósito general de
tamaño similar tendría dificultades para lograr 1/32 de procesamiento.
A procesador de vectores Al programador le parece muy parecido a un procesador
SIMD. Como un procesador SIMD, es muy eficiente para ejecutar una secuencia de
operaciones en pares de elementos de datos. Pero a diferencia de un procesador SIMD,
todas las operaciones se realizan en una única unidad funcional con muchos canales. La
empresa que fundó Seymour Cray, Cray Research, produjo muchos procesadores
vectoriales, comenzando con el Cray-1 en 1974 y continuando con los modelos actuales.
Tanto los procesadores SIMD como los procesadores vectoriales funcionan en matrices de datos.
Ambos ejecutan instrucciones únicas que, por ejemplo, suman los elementos por pares para dos
vectores. Pero mientras que el procesador SIMD lo hace al tener tantos sumadores como elementos en
el vector, el procesador vectorial tiene el concepto de un registro de vectores,
72 ORGANIZACIÓN DE SISTEMAS DE COMPUTADORA CAP. 2

que consiste en un conjunto de registros convencionales que se pueden cargar desde la


memoria en una sola instrucción, que en realidad los carga desde la memoria en serie.
Luego, una instrucción de suma de vectores realiza la suma por pares de los elementos de
dos de dichos vectores alimentándolos a un sumador encauzado desde los dos registros de
vectores. El resultado del sumador es otro vector, que puede almacenarse en un registro de
vector o usarse directamente como operando para otra operación de vector. Las
instrucciones SSE (Streaming SIMD Extension) disponibles en la arquitectura Intel Core
utilizan este modelo de ejecución para acelerar el cálculo muy regular, como el software
multimedia y científico. En este sentido, la arquitectura Intel Core tiene al ILLIAC IV como
uno de sus antepasados.

Multiprocesadores

Los elementos de procesamiento en un procesador paralelo de datos no son CPU independientes,


ya que solo hay una unidad de control compartida entre todos ellos. Nuestro primer sistema paralelo
con múltiples CPU en toda regla es el multiprocesador, un sistema con más de una CPU que comparte
una memoria común, como un grupo de personas en una habitación que comparten una pizarra
común. Dado que cada CPU puede leer o escribir cualquier parte de la memoria, deben coordinarse (en
el software) para evitar interponerse en el camino de los demás. Cuando dos o más CPU tienen la
capacidad de interactuar estrechamente, como es el caso de los multiprocesadores, se dice que están
estrechamente acoplados.
Son posibles varios esquemas de implementación. El más simple es tener un
En la figura 2-8 (a) se muestra un solo bus con múltiples CPU y una memoria, eso. Un diagrama de
todos conectados a un multiprocesador basado en bus.

Recuerdos locales

Compartido Compartido
memoria memoria

UPC UPC UPC UPC UPC UPC UPC UPC

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.

2.2 MEMORIA PRIMARIA

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:

decimal: 0001 1001 0100 0100 binario: 0000011110011000

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.

2.2.2 Direcciones de memoria

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).

Dirección Dirección 1 celda Direcció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)

Figura 2-9. Tres formas de organizar una memoria de 96 bits.

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,

También podría gustarte