Documente Academic
Documente Profesional
Documente Cultură
ORGANIZACION DE
COMPUTADORAS
un enfoque estructurado
.,
.,._.
Ji:~~-\'.FJ{$H)/\.~J
~~.AC' .,.
LJ.f7:}'1\_i_~ ;
--. _.-.-_:<_:<
: . .' J)~
h,
~
L O. S
A
t
~.,...
Co\on~_.,i
IL~"\;.\. ROS
f~~11 401
/53 - 8587
http:/i
wwwJosa
..com.uy
llbros@
losa.com.
uy
Montevideo
- Uruguay
ORGANIZACIN DE
COMPUTADORAS
un enfoque estructurado
CUARTA EDICIN
ANDREW S. TANENBAUM
Vrije Universiteit
Amsterdam, Pases Bajos
Con la colaboracin de
JAMES R. GOODMAN
University ofWisconsin
Madison, WI
Este exitoso texto presenta las bases de un procesador simple y de un sistema de computadora
distribuido. Trata todos los temas tradicionales, incluyendo procesos, administracin de memoria y sistemas de archivos, as como temas clave sobre sistemas distribuidos, entre ellos, el
modelo cliente-servidor, las llamadas de procedimiento remoto, las redes y los servidores de
archivo distribuidos. Los principios empleados en el libro se ilustran con dos procesado- res
simples extensivos y dos sistemas distribuidos.
UNlv'EtlSIDAD
DE LA REPUBUCA
F /\ C !.J L U\ D D E i N G E N 1 E R 1 1\
'.Ji''.U. DC 08Ui~.'.[,\;T/~.CiGN Y B!BUGTE:CJ.
TRADUCCIN:
Luis Roberto Escalona Garca
Traductor profesional
t
~
l
1\
Bi~i_L:OTt:cr.\.
!REVISION TECNICA:
IAlma Corral Lpez
Ingeniera en Electrnica
Instituto Tecnolgico y de Estudios Superiores de
Monterrey, Campus Estado de Mxico
Maestra
en Sistemas de Manufactura
/
'University of Texas at Austin
Pearson
Prentice
IIall
!n;~1
C:.'.C!J
GtNTHAL
~Jo ?Dtli(kr
1.,.~,.-;~JTr\ . ;t>r:;-1 _
\
-.
~\
--
':..
.1 ..._
._.
11~~111
\._.1'
,1~:
_1 -:'
l-..:.1 -~
-- .
.. 1\\/
._j)'
...
- -- - Ed
ca
ci
Addison
\\'t>sk':V
----
/Datos
de catalogacin
bibliogrfica
Tanenbaum, S. Andrew
Organizacin de computadoras:
un enfoque estructurado
PRENTICE HALL
Mxico. 2000
ISBN: 970-17-0399-5
rea: Universitarios
Formato: 17 x 23 cm
Pginas: 688
Versin en espaol de la obra titulada Structured computer organization, Fourth Edition, de Andrew S.
Tanenbaum, publicada originalmente en ingls por Prentice Hall Inc., Upper Saddle River, New Jersey, U.S.A.
1000
F ACUl.1' .-e. r,
03 02 01 00
./} . .?ft><''
7-Jj.i ~/ :~.
,A .
ONIVERSIDAD DE LA REPUBL!CJJl'
''
ns
TNGt.NIERIA
D EPA. 't. i
...,:. ' ' DE
oocmvtENTAC10N
y BP.3LIOT'EC ....
MON'fJl:VJDJi!O _ URTJC:t.JAY
CONTENIDO
PREFACIO
INTRODUCCIN
1.1 ORGANIZACIN ESTRUCTURADA DE COMPUTADORAS 2
1.1. l Lenguajes, niveles y mquinas virtuales 2
1.1.2 Mquinas multinivel contemporneas 4
l. l .3 Evolucin de las mquinas multinivel 8
1.2 ACONTECIMIENTOS IMPORTANTES EN ARQUITECTURA
DE COMPUTADORAS 13
1.2.l La generacin cero - computadoras mecnicas (1642-1945) 13
1.2.2 La primera generacin - bulbos (1945-1955) 16
1.2.3 La segunda generacin - transistores ( 1955-1965) 19
1.2.4 La tercera generacin - circuitos integrados (1965-1980) 21
1.2.5 La cuarta generacin - integracin a muy grande escala ( 1980-?) 23
1.3 EL ZOOLGICO DE LAS COMPUTADORAS 24
1.3.1 Fuerzas tecnolgicas y econmicas 25
1.3.2 La gama de las computadoras 26
1.4 EJEMPLOS DE FAMILIAS DE COMPUTADORAS 29
1.4.1 Introduccin al Pentium 11 29
1.4.2 Introduccin al UltraSPARC 11 31
1.4.3 Introduccin al picoJava 11 34
1.5 BOSQUEJO DEL LIBRO 36
vii
viii
CONTENIDO
xvi
CO
NT
EN
ID
O
ix
117
2.1
PROCESADORES 39
2.1.l Organizacin de la CPU 40
2.1.2 Ejecucin de instrucciones 42
2.1.3 RISC versus CISC 46
2.1.4 Principios de diseo de las computadoras modernas
2.1.5 Paralelismo en el nivel de instrucciones 49
2.1.6 Paralelismo en el nivel de procesador 53
89
47
39
3.1
170
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
Terminales 91
Ratones 99
Impresoras 101
Mdems 106
Cdigos de caracteres
2.5 RESUMEN
109
113
CONTE
NIDO
CONTENIDO
xi
303
195
198
4 EL NIVEL DE
MICROARQUITECTURA
UN EJEMPLO
4.1DE MICROARQUITECTURA 203
4.1. l La trayectoria de datos 204
4.1.2 Microinstrucciones 211
4.1.3 Control de microinstrucciones: el Mic-1 213
4.2 UN EJEMPLO DE ISA: IJVM 218
4.2.1 Pilas 218
4.2.2 El modelo de memoria IJVM 220
4.2.3 El conjunto de instrucciones IJVM 222
4.2.4 Compilacin de Java a IJVM 226
4.3 UN EJEMPLO DE IMPLEMENTACIN 227
4.3.1 Microinstrucciones y notacin 227
4.3.2 Implementacin de IJVM utilizando el Mic-1
232
4.4.1
4.4.2
4.4.3
4.4.4
4.5 especulati
MEJ va 281
OR
AMI
ENT
O
DEL
DES
EM
PE
O
264
4.5.1
Memoria
cach
265
4.5.2
Predicci
n de
ramificaci
ones
270
4.5.3
Ejecucin
fuera
orden
cambio
de
nombres
de
registros
4.5.4
Ejecucin
276
5
.
1
203
G
E
N
E
R
A
L
I
D
A
D
E
S
D
E
L
N
I
V
E
L
I
S
A
3
2
4.6 EJEMPLOS DEL NIVEL DE
8
MICROARQUITECTURA
3
4.6.1 La microarquitectura de la CPU Pentium II
283
4.6.2 La microarquitectura de la CPU UltraSPARC
II 288
4.6.3 La microarquitectura de la CPU picoJava II 2
9
291
6
4.6.4 Comparacin del Pentium, UltraSPARC Y
picoJava
4.7 RESUMEN 298
0
5
5.1
.1
Pr
op
ie
da
de
s
de
l
ni
ve
l
IS
A
30
5
CONTE
NIDO
xii
CONTENIDO
5.5 TIPOS DE
INSTRUCCIONES 348
5.5.1 Instrucciones de movimiento de datos
348
5.5.2 Operaciones didicas 349
5.5.3 Operaciones mondicas 350
5.5.4 Comparaciones y ramificaciones
condicionales 352
5.5.5 Instrucciones de llamada a
procedimientos 353
5.5.6 Control de ciclos 354
5.5.7 Entrada/Salida 356
5.5.8 Las instrucciones del Pentium 11 359
5.5.9 Las instrucciones del UltraSPARC 11 362
5.5.10 Las instrucciones del picoJava 11 364
5.5.11 Comparacin de conjuntos de instrucciones 369
5.6.1
5.6.2
5.6.3
5.6.4
5.6 secuencial
FLUJO DEy ramificaciones
Flujo de control
CONTROL
370
Procedimientos
372
Corrutinas 376
Trampas 379
371
r
5.7 UN EJEMPLO DETALLADO: LAS TORRES DE HANOI 383
5.7.1 Las Torres de Hanoi en lenguaje ensamblador del Pentium 11 384
5.7.2 Las Torres de Hanoi en lenguaje ensamblador del UltraSPARC 11 384
5.7.3 Las Torres de Hanoi en lenguaje ensamblador de la JVM 386
5.8 EL IA-64 DE INTEL 388
5.8.1 El problema del Pentium II 390
5.8.2 El modelo IA-64: Computacin con instrucciones explcitamente
paralelas 391
5.8.3 Predicacin 393
5.8.4 Cargas especulativas 395
5.8.5 Los pies en la tierra 396
5.9 RESUMEN 397
xi
ii
xiv
EL PROCESO
7
DE ENSAMBLADO 498
.
7.3.l Ensambladores de dos pasadas 498
3
7.3.2 Primera pasada 499
9 LISTA DE LECTURAS Y
BIBLIOGRAFA
512
8.1.2
8.1.3
8.1.4
8.1.5
CONTENIDO
403
XV
613
A NMEROS BINARIOS
631
A.1 NMEROS DE PRECISIN FINITA 631
A.2 SISTEMAS NUMRICOS CON BASE 633
A.3 CONVERSIN DE UNA BASE A OTRA 635
A.4 NMEROS BINARIOS NEGATIVOS 637
A.5 ARITMTICA BINARIA 640
643
B.1 PRINCIPIOS DE PUNTO FLOTANTE 644
B.2 ESTNDAR DE PUNTO FLOTANTE IEEE 754
646
NDICE
653
ONWJ~H.Sff;1\D DE LA
RE'PURLICJf
U <P _~ ' .'. .
:-_-. :-:; -- ) 8
):
BrBLI()':rECA MON'f}SVJlrSU
- UHUG(:,A..Y
oc1c:c;r.1:EL~---c . 1.:.~i-cj:N
PREFACIO
Las primeras tres ediciones de este libro se basaron en la idea de que una computadora
puede considerarse como una jerarqua de niveles, cada uno de los cuales desempea
alguna fun- cin bien definida. Este concepto fundamental es tan vlido hoy como cuando
apareci la primera edicin, as que se ha conservado como base para la cuarta edicin. Al
igual que en las tres primeras ediciones, se analizan detalladamente el nivel de lgica
digital, el nivel de microarquitectura, el nivel de arquitectura del conjunto de instrucciones,
el nivel de mquina del sistema operativoy el nivel de lenguaje ensamblador (aunque hemos
modificado algunos de los nombres de modo que reflejen la prctica moderna).
Aunque se ha mantenido la estructura bsica, esta cuarta edicin contiene muchos cambios, pequeos y grandes, que lo ponen al da en la industria de las computadoras con su
vertiginoso ritmo de cambio. Por ejemplo, todos los ejemplos de cdigo, que estaban en
Pascal, se han reescrito en Java con objeto de reflejar la popularidad de este lenguaje en el
mundo de la computacin. Adems, se han actualizado los ejemplos de mquinas
empleados. Los ejemplos actuales son el Intel Pentium 11, el Sun UltraSPARC 11 y el Sun
picoJava 11, un
chip Java incorporado de bajo costo.
El uso de los multiprocesadores y las computadoras paralelas se ha extendido mucho
desde la tercera edicin, por lo que se reescribi totalmente el material sobre arquitecturas
paralelas, expandindolo considerablemente; ahora cubre una amplia gama de temas, desde
multiprocesadores hasta los COW.
El libro se ha vuelto ms extenso con el paso de los aos (aunque todava no es tan
largo
como otros libros populares sobre el tema). Tal expansin es inevitable a medida que
avanzan los conocimientos en el rea. Por ello, si el libro se usa para un curso, tal vez no
siempre sea posible terminar el libro en un solo curso (por ejemplo, en un sistema de
trimestres). Una
xvi
PREFACIO
xvii
posible estrategia sera cubrir los captulos 1, 2 y 3 en su totalidad, la primera parte del
captulo 4 (hasta la seccin 4.4 inclusive) y el captulo 5 como mnimo indispensable. Si
sobra tiempo, podra dedicarse al resto del captulo 4 y partes de los captulos 6, 7 y 8,
dependiendo del inters del profesor.
A continuacin describimos los principales cambios hechos a cada captulo desde la
tercera edicin. El captulo 1 todava contiene una resea histrica de la arquitectura de las
computadoras; nos dice cmo llegamos a dnde estamos ahora y qu hitos pasamos en el
camino. Se describe la gama ms amplia de computadoras que existen ahora y se presentan
nuestros tres ejemplos principales (Pentium 11, UltraSPARC II y picoJava 11).
En el captulo 2 se actualiz el material sobre dispositivos de entrada/salida, con hincapi en la tecnologa de los dispositivos modernos, que incluyen los discos RAID, los CD
grabables, los DVD y las impresoras a color, entre muchos otros.
El captulo 3 (nivel de lgica digital) sufri algunas modificaciones y ahora trata Jos
buses de computadora y los modernos chips de E/S. El principal cambio aqu es material
adicional sobre buses, sobre todo el bus PCI y el bus USB. Los tres nuevos ejemplos se
describen aqu en el nivel de chip.
El captulo 4 (que ahora se llama nivel de microarquitectura) se reescribi totalmente. Se
conserv la idea de usar un ejemplo detallado de mquina microprogramada para ilustrar las
ideas de control del camino de datos, pero la mquina de ejemplo ahora es un subconjunto
de la Mquina Virtual Java. La microarquitectura subyacente se modific de manera acorde.
Se dan varias iteraciones del diseo, mostrando los posibles equilibrios en trminos de costo
y desempeo. El ltimo ejemplo, el Mic-4, usa un conducto de siete etapas y ofrece una
intro- duccin accesible al funcionamiento de las computadoras modernas importantes
como el Pentium 11. Se aadi una seccin nueva sobre cmo mejorar el desempeo, que se
concentra en las tcnicas ms recientes como uso de cachs, prediccin de ramas, ejecucin
en desor- den (superescalar) y predicacin. Las nuevas mquinas de ejemplo se describen en
el nivel de microarquitectura.
El captulo 5 (que ahora se llama nivel de arquitectura del conjunto de instrucciones) se
ocupa de lo que mucha gente llama el "lenguaje de mquina". Aqu se usan como ejemplos
primarios el Pentium 11, el UltraSPARC II y la Mquina Virtual Java.
El captulo 6 (nivel de mquina del sistema operativo) tiene ejemplos para el Pentium 11
(Windows NT) y UltraSPARC 11 (UNIX). El primero es nuevo y tiene muchas
caractersticas que vale la pena examinar, pero UNIX sigue siendo un caballito de batalla
confiable en mu- chas universidades y compaas, y adems resulta provechoso examinarlo
con detalle por su sencillo y elegante diseo.
El captulo 7 (nivel de lenguaje ensamblador) se actualiz usando ejemplos de las mquinas que hemos estado estudiando. Tambin se aadi material nuevo sobre enlazado
din- mico.
El captulo 8 (arquitecturas de computadoras paralelas) se reescribi totalmente. Ahora
cubre con detalle tanto multiprocesadores (UMA, NUMA y COM) como
multicomputadoras
(MPPyCOW).
La bibliografa se someti a una revisin y actualizacin exhaustivas. Ms de las dos
terceras partes de las referencias corresponden a obras que se publicaron despus de que lo
UNT.\!J::Tt21DADDi-~ LA Ht:PUBLiCJi
f'Aci:tTPD
,~,r
.\ff.A
PREFACIO
xviii
hiciera la tercera edicin de este libro. Los nmeros binarios y los de punto flotante no han
sufrido muchos cambios a ltimas fechas, por lo que los apndices son prcticamente los
mismos de la edicin anterior.
Por ltimo, algunos problemas se modificaron y se aadieron muchos problemas nuevos
respecto a la tercera edicin.
Existe un sitio Web para este libro. Es posible obtener electrnicamente archivos PostScript
para todas las ilustraciones del libro. Estos archivos pueden imprimirse, por ejemplo, para
crear transparencias. Adems, el sitio incluye un simulador y otras herramientas de software.
El URL para este sitio es
http://www.cs. vu.nl/i-ast/scoa/
El simulador y las herramientas de software son producto de Ray Ontko. El autor desea
expresar su gratitud a Ray por haber producido tan tiles programas.
Varias personas leyeron (parcialmente) el manuscrito y ofrecieron sugerencias tiles o
ayudaron de otras maneras. En particular, quiero agradecer a Henri Bal, Alan Charlesworth,
Kourosh Gharachorloo, Marcus Goncalves, Karen Panetta Lentz, Timothy Mattson, Harlan
McGhan, Miles Murdocca, Kevin Normoyle, Mike O'Connor, Mitsunori Ogihara, Ray
Ontko, Aske Plaat, William Potvin II, Nagarajan Prabhakaran, James H. Pugsley,Ronald N.
Schroeder, Ryan Shoemaker, Charles Silio, Jr., y Dale Skrien su ayuda, que ha sido
inapreciable. Mis estudiantes, sobre todo Adriaan Bon, Laura de Vries, Dolf Loth y Guido
van't Noordende, tambin ayudaron a depurar el texto. Muchas gracias.
Me gustara expresar un agradecimiento especial a Jim Goodman por sus muchas
contribuciones a este libro, sobre todo a los captulos 4 y 5. La idea de usar la Mquina Virtual
Java fue suya, lo mismo que las microarquitecturas para implementarla. Muchas de las ideas
avan- zadas se deben a l. Este libro es mucho mejor de lo que habra sido sin su esfuerzo.
Por ltimo, quiero agradecer a Suzanne su paciencia ante mis largas horas absorto en
mi Pentium. Desde mi punto de vista, el Pentium es mucho mejor que mi antiguo 386, pero
a ella no le parece que haya mucha diferencia. Tambin quiero expresar mi gratitud a
Barbara y Marvin por ser unos chicos excelentes, y a Bram por permanecer callado cuando
yo trataba de escribir.
Andrew S. Tanenbaum
INTRODUCCIN
Una computadora digital es una mquina que puede resolver problemas ejecutando las
instrucciones que recibe de las personas. Una secuencia de instrucciones que describe cmo
realizar cierta tarea se llama programa. Los circuitos electrnicos de una computadora
pue- den reconocer y ejecutar directamente un conjunto limitado de instrucciones sencillas,
y to- dos los programas tienen que convertirse en una serie de esas instrucciones para que
la computadora pueda ejecutarlos. Dichas instrucciones bsicas casi nunca son ms
complicadas que
Sumar dos nmeros. Verificar
si un nmero es cero.
Copiar un dato de una parte de la memoria de la computadora a otra.
J.untas, las instrucciones primitivas de una computadora constituyen un lenguaje que
permite a las personas comunicarse con la computadora. Dicho lenguaje se llama lenguaje
de mquina.Las personas que disean una computadora nueva deben decidir qu instrucciones incluirn en su lenguaje de mquina. Por lo regular, se trata de hacer las instrucciones
primitivas lo ms simples posible, en congruencia con el uso que se piensa dar a la computadora Y sus requisitos de desempeo, a fin de reducir la complejidad y el costo de los
circuitos requeridos. Casi todos los lenguajes de mquina son tan simples que para las
personas resulta difcil y tedioso usarlos.
Con el paso de los aos, esta sencilla observacin ha dado pie a que las computadoras
se estructuren como una serie de abstracciones, donde cada una de stas se apoya en la que
est
1
INTRODUCCIN
CAP. l
abajo de ella. De este modo es posible controlar la complejidad y dise~ si~t~mas de cmputo de manera sistemtica y organizada. Llamamos a este enfoque orgamzacron estructurada
de computadoras y ste es tambin el nombre que hemos dado al presente libro. En la
seccin que sigue describiremos el significado de este trmino. Despus veremos un poc_o de
historia, hablaremos de lo ltimo en organizacin de computadoras, y daremos algunos ejemplos importantes.
INTRODUCCIN
CAP. 1
SEC. l.l
Niveln
.---------------,
Nivel 3
Nivel 2
verdadero hardware de la mquina. Sus circuitos ejecutan los programas en lenguaje de mquina de nivel l. Con nimo totalizador, deberamos mencionar la existencia de un nivel ms
bajo de nuestro nivel O. Este nivel, que no se muestra en la figura 1-2 porque queda dentro del
mbito de la ingeniera elctrica (y rebasa el alcance de este libro), se llama nivel de dispositivos. En este nivel, el diseador ve transistores individuales, que son las primitivas de
ms bajo nivel para los diseadores de computadoras. Si nos preguntamos cmo funcionan
internamente los transistores, entramos en la fsica del estado slido.
.>
Nivel 5
Nivel 1
Nivel O
Nivel 4
t"
.:;:'
Traduccin (ensamblador)
Nivel 3
~.
.....
:t'..
:::;.
.--------'--------~
Nivel 2
;_;,,.
Nivel 1
en Ll , L2, ... , Ln debern ser interpretados por un intrprete que se ejecute en un nivel ms
bajo, o traducirse a otro lenguaje correspondiente a un nivel ms bajo.
La persona encargada de escribir programas para la mquina virtual del nivel n no tiene
que estar consciente de los intrpretes y traductores subyacentes. La estructura de la mquina
asegura que de un modo u otro esos programas se ejecutarn. No interesa si un intrprete los
ejecuta paso por paso, o si ese intrprete es a su vez ejecutado por otro intrprete o por los
circuitos electrnicos. El resultado es el mismo en ambos casos: los programas se ejecutan.
En general, a los programadores que usan una mquina de nivel n slo les interesa el
nivel ms alto, el que menos se parece al lenguaje de mquina que est hasta abajo. En
cambio, las personas interesadas en entender cmo funciona realmente una computadora deben
estudiarla en todos los niveles. Quienes se interesen en disear nuevas computadoras o nuevos
niveles (o sea, nuevas mquinas virtuales) tambin debern familiarizarse con niveles distintos
del ms alto. Los conceptos y tcnicas para construir mquinas como una serie de niveles, y
los detalles de los niveles mismos, constituyen el tema principal de este libro.
CAP.!
Nivel de microarquitectura
-~
Interpretacin (microprograma)
o ejecucin directa
~
~
,,...
-s,
?'.
; -3.
~)
Hardware
Nivel O
Figura 1-2. Computadora de seis niveles. El mtodo de apoyo para cada nivel se
indica inmediatamente abajo de l (junto con el nombre del programa de apoyo).
En el nivel ms bajo que estudiaremos, el nivel de lgica digital, los objetos integrantes se
llaman compuertas. Aunque se construyen con componentes analgicos, como los transistores, las compuertas pueden modelarse con exactitud como dispositivos digitales. Cada
compuerta tiene una o ms entradas digitales (seales que representan O o 1) y para generar su
salida calcula alguna funcin sencilla de dichas entradas, como AND u OR. Cada com- puerta
contiene unos cuantos transistores como mximo. Podemos combinar pocas compuer- tas para
formar una memoria de un bit, capaz de almacenar un O o un l. Las memorias de un bit pueden
combinarse en grupos de (por ejemplo) 16, 32 o 64 para formar registros. Cada registro puede
contener un solo nmero binario menor que cierto valor lmite. Las compuer- tas tambin
pueden combinarse para formar la mquina calculadora principal misma. Exami- naremos las
compuertas y el nivel de lgica digital con detalle en el captulo 3.
El siguiente nivel hacia arriba es el nivel de microarquitectura. En este nivel vemos una
coleccin de (tpicamente) 8 a 32 registros que forman una memoria local y un circuito llamado
ALU (unidad de aritmtica lgica, Arithmetic Logic Unit) que puede efectuar ope- raciones
aritmticas sencillas. Los registros se conectan a la ALU para formar una trayecto- ria de datos
por donde fluyen los datos. La operacin bsica de la trayectoria de datos consiste en seleccionar
uno o dos registros, hacer que la ALU opere con ellos (sumndolos, por ejem- plo), y almacenar
despus el resultado en algn registro.
En algunas mquinas un programa llamado microprograma controla la operacin de la
trayectoria de datos. En otras mquinas la trayectoria de datos est bajo el control directo del
hardware. En ediciones anteriores de este libro llamamos a este nivel el "nivel de microprograma
cin" porque en el pasado casi siempre se trataba de un intrprete en software. Puesto que
ahora es comn que el hardware controle directamente la trayectoria de datos, hemos cambiado el nombre para que refleje este hecho.
En las mquinas con control por software de la trayectoria de datos, el microprograma es
un intrprete de las instrucciones en el nivel 2: obtiene, examina y ejecuta las instruccio- nes
una por una, utilizando la trayectoria de datos para hacerlo. Por ejemplo, para una
instruccin ADD (sumar), se obtendra la instruccin, se localizaran sus operandos y se
colocaran en registros, Ja ALU calculara la suma, y por ltimo el resultado se enviara al lugar
correcto. En una mquina con control por hardware de la trayectoria de datos, se lleva- ran a
cabo pasos similares, pero sin un programa almacenado explcito que controle la inter- pretacin
de las instrucciones del nivel 2.
En el nivel 2 tenemos un nivel que llamaremos nivel de arquitectura del conjunto de
instrucciones (lnstruction Set Architecture) o nivel ISA. Cada fabricante de computadoras
publica un manual para cada una de las computadoras que vende, intitulado "Manual de
referencia del lenguaje de mquina" o "Principios de operacin de la computadora Western
Wombat Model IOOX" o algo parecido. Estos manuales se ocupan realmente del nivel ISA, no
de los niveles subyacentes. Cuando describen el conjunto de instrucciones de la mquina, estos
manuales estn describiendo realmente las instrucciones que el microprograma o los circuitos
de ejecucin en hardware ejecutan de forma interpretativa. Si un fabricante de computadoras
incluye dos intrpretes en una de sus mquinas, para interpretar dos niveles ISA distintos, tendr
que proporcionar dos manuales de referencia del "lenguaje de mquina", uno para cada
intrprete.
.
El siguiente nivel suele ser un nivel hbrido. Casi todas las instrucciones de su lenguaje
estn tambin en el nivel ISA. (No hay razn para que una instruccin que aparece en un nivel
no pueda estar presente tambin en otros niveles.) Adems, hay un nuevo conjunto de
instrucciones, una diferente organizacin de memoria, la capacidad para ejecutar dos o ms
programas al mismo tiempo, y varias caractersticas ms. Entre los distintos diseos de nivel
3 hay ms variacin que entre los de los niveles 1 o 2.
Las nuevas funciones que se aaden en el nivel 3 son desempeadas por un intrprete que
se ejecuta en el nivel 2, que histricamente se conoce como sistema operativo. El
microprograma (o el control por hardware), no el sistema operativo, ejecuta directamente las
instrucciones del nivel 3 que son idnticas a las del nivel 2. En otras palabras, algunas de las
instrucciones del nivel 3 son interpretadas por el sistema operativo y otras son interpretadas
directamente por el microprograma. A esto es a lo que nos referimos con el trmino "hbri- do".
Llamamos a este nivel el nivel de mquina del sistema operativo.
INTRODUCCIN
SEC. 1.1
E:ist~ u~a discontinuidad fundamental entre los niveles 3 y 4. Los tres niveles ms bajos no
estan diseados para que sean usados por un programador ordinario. Su propsito primor- dial
es la ejecucin de los intrpretes y traductores que se necesitan para apoyar a los niveles
superiores. Estos intrpretes y traductores son escritos por personas llamadas programado- res
de sistemas que se especializan en el diseo e implementacin de mquinas virtuales nuevas.
Los niveles 4 y superiores pertenecen a los programadores de aplicaciones que tienen
un problema que resolver.
Otro cambio que ocurre en el nivel 4 tiene que ver con el mtodo de apoyo de los niveles
superiores. Los niveles 2 y 3 siempre se interpretan. Los niveles del 4 en adelante por lo
regular se traducen, aunque no siempre es as.
Una diferencia ms entre los niveles l, 2 y 3, por un lado, y los niveles del 4 en adelante, por
el otro, es la naturaleza del lenguaje empleado. Los lenguajes de mquina de los niveles
1, 2 Y 3 son numricos. Los programas escritos en ellos constan de largas series de nme- ros,
lo cual es magnfico para las mquinas pero malo para las personas. A partir del nivel 4, los
lenguajes contienen palabras y abreviaturas que tienen un significado para las personas.
El nivel 4, el nivel de lenguaje ensamblador, es en realidad una forma simblica de uno de
los lenguajes subyacentes. Este nivel ofrece a las personas un mtodo de escribir progra- mas
para los niveles 1, 2 y 3 en una forma no tan incomprensible como los lenguajes de mquina
virtuales. Los programas en lenguaje ensamblador primero se traducen a un lengua- je de nivel 1,
2 o 3 y luego se interpretan por la mquina virtual o real apropiada. El programa que realiza la
traduccin se llama ensamblador.
El nivel 5 por lo regular consta de lenguajes diseados para ser usados por programado- res
de aplicaciones que quieren resolver problemas. Tales lenguajes suelen llamarse lengua- jes de
alto nivel, y hay literalmente cientos de ellos. Entre los ms conocidos estn BASIC, C, C++,
Java, LISP y Prolog. Los programas escritos en estos lenguajes generalmente se traducen a
lenguajes de nivel 3 o 4 con traductores llamados compiladores, aunque ocasio- nalmente se
interpretan en vez de traducirse. Los programas en Java, por ejemplo, a menudo
se interpretan.
En algunos casos, el nivel 5 consiste en un intrprete para un dominio de aplicacin
especfico, como las matemticas simblicas. El nivel proporciona datos y operaciones para
resolver problemas de este dominio en trminos que la gente que conoce el dominio puede
entender fcilmente.
En sntesis, lo ms importante que debemos recordar es que las computadoras se disean
como una serie de niveles, cada uno construido sobre sus predecesores. Cada nivel representa
una abstraccin distinta, y contiene diferentes objetos y operaciones. Al disear y analizar las
computadoras de esta manera, podemos suprimir temporalmente los detalles que no son pertinentes y as reducir un tema complejo a algo ms fcil de entender.
El conjunto de tipos de datos, operaciones y caractersticas de cada nivel es su arquitectura. La arquitectura se ocupa de los aspectos que el usuario de ese nivel puede ver. Las
caractersticas que el programador ve, como la cantidad de memoria disponible, forman parte de
la arquitectura. Los aspectos de implementacin, como el tipo de tecnologa de chips empleado
para implementar la memoria, no forman parte de la arquitecutra. El estudio del diseo de las
partes de un sistema de cmputo que los programadores pueden ver se llama arquitectura de
computadoras. En la prctica comn, la arquitectura de las computadoras y la organizacin de
las computadoras significan prcticamente lo mismo.
CAP. 1
Para entender mejor las mquinas multinivel, examinaremos brevemente su desarrollo histrico, mostrando cmo han evolucionado al paso de los aos el nmero y la naturaleza de los
niveles. Los programas escritos en el verdadero lenguaje de mquina de una computadora (nivel
1) pueden ser ejecutados directamente por los circuitos electrnicos de la mqui- na (nivel
O), sin intervencin de intrpretes ni traductores. Estos circuitos electrnicos, junto con Ja
memoria y Jos dispositivos de entrada/salida, constituyen el hardware de la compu- tadora. El
hardware consta de objetos tangibles -circuitos integrados, tarjetas de circuitos impresos, cables,
fuentes de alimentacin, memorias e impresoras- no de ideas abstractas,
algoritmos o instrucciones.
El software, en cambio, consta de algoritmos (instrucciones detalladas que indican cmo
hacer algo) y sus representaciones en Ja computadora: los programas. Los programas se pue- den
almacenar en un disco duro, disco flexible, CD-ROM u otro medio, pero la esencia del software
es la serie de instrucciones que constituye los programas, no los medios fsicos en
los que se registran.
En las primeras computadoras, la frontera entre hardware y software era muy ntida,
pero con el tiempo se ha vuelto mucho ms borrosa, principalmente por la adicin, elimina- cin
y fusin de niveles a medida que las computadoras evolucionaban. Hoy da, a veces es difcil
distinguirlos. De hecho, un tema central de este libro es
El hardware y el software son lgicamente equivalentes.
Cualquier operacin realizada por software tambin puede incorporarse directamente en
hardware, de preferencia una vez que se ha entendido muy bien. Como dijo Karen Panetta
Lenz: "El hardware no es ms que software petrificado." Desde luego, lo contrario tambin es
cierto: cualquier ejecucin realizada por el hardware tambin puede simularse en software. La
decisin de colocar ciertas funciones en hardware y otras en software se basa en factores como
costo, rapidez, confiabilidad y frecuencia de cambios previstos. Existen pocas reglas rgidas
para determinar si X debe incluirse en el hardware y Y debe programarse explci- tamente.
Tales decisiones cambian con las tendencias en la tecnologa y el uso de las computadoras.
La invencin de la microprogramacin
Las primeras computadoras digitales, en los aos cuarenta, slo tenan dos niveles: el ISA, en el
que se efectuaba toda la programacin, y el de lgica digital, que ejecutaba esos programas. Los
circuitos del nivel de lgica digital eran complicados, difciles de entender y construir, y poco
confiables.
En 1951 Maurice Wilkes, investigador de la Universidad de Cambridge, sugiri la idea
de disear una computadora de tres niveles a fin de simplificar drsticamente el hardware
(Wilkes, 1951 ). Esta mquina tendra un intrprete inmutable integrado (el microprograma)
cuya funcin sera ejecutar programas del nivel ISA por interpretacin. Puesto que el hardware
ahora slo tendra que ejecutar microprogramas, que tienen un conjunto limitado de instruc-
SEC. 1.1
ORGANIZACINESTRUCTURADA DE COMPUTADORAS
ciones, en lugar de programas del nivel ISA, que tienen un conjunto de instrucciones mucho ms
grande, se requeriran menos circuitos electrnicos. Dado que en esa poca los circuitos se
construan con bulbos, tal simplificacin prometa reducir el nmero de bulbos y por tanto
mejorar la confiabilidad.
Durante los cincuenta se construyeron unas cuantas mquinas de tres niveles. En los aos
sesenta se construyeron ms, y para 1970 la idea de interpretar el nive! ISA con un
microprograma, y no directamente con los circuitos, era preponderante.
La invencin del sistema operativo
En estos primeros aos, la mayor parte de las computadoras eran de "taller abierto", lo que
significa que el programador tena que operar la mquina personalmente. Junto a cada mquina
haba una hoja para reservar. Un programador que quera ejecutar un programa reservaba cierto
tiempo, digamos el mircoles de las 3 A.M. a las 5 A.M. (a muchos programadores les gustaba
trabajar cuando el cuarto de mquinas estaba tranquilo). Al llegar la hora, el programador
se diriga al cuarto de mquinas con un paquete de tarjetas perforadas de 80 columnas (un
medio de entrada primitivo) en una mano y un lpiz afilado en la otra. Al llegar al cuarto de la
computadora, conduca amablemente al programador anterior hacia la puerta y se haca cargo de
la computadora.
Si el programador quera ejecutar un programa en FORTRAN, era necesario realizar los
pasos siguientes:
1.
2.
3.
Una vez que la computadora se detena, l haca que se leyera otra vez el programa en
FORTRAN. Aunque algunos compiladores slo requeran leer una vez sus en- tradas,
muchos requeran varias pasadas. En cada pasada era necesario leer un paquete
grande de tarjetas.
4.
5.
10
INTRODUCCIN
CAP.!
6.
Programa en
FORTRAN
*DATA
Tarjetas de
datos
SEC. 1.1
11
rano
las confundiera con las tarjetas del programa y de datos.) Despus, el sistema operativo
lea la tarjeta *FORTRAN, que era una instruccin para cargar el compilador FORTRAN de una
cinta magntica. Luego, el compilador lea y compilaba el programa en FORTRAN. Cuando el
compilador terminaba, devolva el control al sistema operativo, que entonces lea la tarjeta
*DATA. sta era una instruccin para ejecutar el programa traducido, utilizando las
tarjetas que seguan a la tarjeta *DATA como datos.
Aunque el sistema operativo se dise para automatizar la tarea del operador (de ah el
nombre), tambin fue el primer paso en la creacin de una nueva mquina virtual. La tarjeta
*FORTRAN poda verse como una instruccin "compilar programa" virtual. As mismo, la
tarjeta *DATA poda considerarse como una instruccin "ejecutar programa" virtual. Un ni- vel
con slo dos instrucciones no era mucho, pero era un paso en esa direccin.
En aos subsecuentes, los sistemas operativos se volvieron ms y ms sofisticados. Se
aadieron nuevas instrucciones, recursos y caractersticas al nivel ISA hasta que comenz a
parecer un nuevo nivel. Algunas de las instruccionesde este nuevo nivel eran idnticas a las del
nivel ISA, pero otras, sobre todo las de entrada/salida, eran totalmente distintas. Las nuevas
instrucciones se conocan como macros del sistema operativo o llamadas al supervisor. El
trmino usual ahora es llamada al sistema.
Los sistemas operativos evolucionaron tambin en otros sentidos. Los primeros lean
paquetes de tarjetas e impriman sus salidas en la impresora en lnea. Esta organizacin se
llamaba sistema por lotes. Por lo regular, haba una espera de varias horas entre el momento en
que se presentaba un programa y el momento en que los resultados estaban listos. Desarrollar software era difcil en esas circunstancias.
A principios de los aos sesenta investigadores del Dartmouth College, MIT, y otros sitios
crearon sistemas operativos que permitan a (varios) programadores comunicarse di- rectamente
con la computadora. En esos sistemas, terminales remotas se conectaban a la computadora
central a travs de lneas telefnicas. Muchos usuarios compartan el mismo CPU. Un
programador poda introducir un programa con el teclado y obtener los resultados impresos casi
de inmediato en su oficina, en la cochera de su casa o en donde fuera que se instalara la
terminal. Esos sistemas se llamaban, y se siguen llamando, sistemas de tiempo
compartido.
Nuestro inters en los sistemas operativos se centra en las partes que interpretan las
instrucciones y en las caractersticas que estn presentes en el nivel 3 pero no en el nivel ISA,
ms que en los aspectos de tiempo compartido. Aunque no haremos hincapi en ello, el lector
debe tener presente que los sistemas operativos hacen ms que slo interpretar funciones
aadidas al nivel ISA.
*END
El sistema operativo lea la tarjeta *JOB y utilizaba la informacin que contena para fines
de contabilidad. (El asterisco identificaba las tarjetas de control, para que la computado-
CAP.1
INTRODUCCIN
12
SEC. 1.2
13
instruccin
para s
da
ADD. as que se
especia
o ms r i
que
incluyo.
embargo, INC era por lo regular.un poc.
l ~icroprograma siguiendo el mismo razona- se
aadieron muchas otras mstrucciones a
miento. Entre ellas estaban
ara multiplicacin y divisin de enteros.
.
sP
truccione
Instrucciones para aritmtica de punto flotante.
Ins
l.
2.
3.
nstruc
EN ARQUITECTURA DE COMPUTADORAS
cione
.
- adores de mquinas vieron lo fcil que era aadir nu~vas
Adems, una vez que los disen
f
.
es que aadir a sus microprogramas. Ejeminstrucciones, comenzaron a buscar otras uncion
plos de tales adiciones son
. .
.
ara acelerar clculos con matrices (direccionamiento indexado e indil.
2.
3.
4.
en el nivel ISA puede utilizar su instruccin de multiplicar como si fuera una instruccin
de hardware sin preocuparse por ello, o sin siquiera saber si en efecto es una instruccin de
hardware. El hardware de una persona es el software de otra. Regresaremos a estos temas
ms adelante.
5.
de maana, y viceversa. Adems, las fronteras entre los diversos niveles tambin son variables. Desde el punto de vista del programador, la forma en que se implementa una instruccin dada no es importante (excepto tal vez por su velocidad). Una persona que programa
4.
diseo de computadoras haba descrito un crculo completo, volviendo a la forma que tena
antes de que Wilkes inventara la microprogramacin.
El punto
importante
de estaconstantemente.
explicacin es El
mostrar
quede
la hoy
frontera
entre
hardware
software
es arbitraria
y cambia
software
podra
ser el
hardwarey
Funciones p
recto).
.
si siempre para acelerar
funcion
es y recursos, ca
La eliminacin de la microprogramacin
.
nte los aos dorados de la microprogramacin (aos se- Los
microprogramas crecieron dura
bi , tendan a volverse ms y ms lentos a
l , . problema fue que tam ien
d
E
)
umco
.
p
f. l
senta y setenta .
os investigadores se dieron cuenta e
.
h ,
v
s. or
gun
.
.
'
ma
olummoso
s
medida que se acian
,
id blemente el conjunto de mstruccrn.
grama reducian consi era
1
.
que si eliminaban e1 rmcropto
,
t
.
construy su mquina de diferencias. Este aparato mecnico, que al igual que el de Pascal
slo poda sumar y restar, fue diseado para calcular tablas de nmeros tiles para la navegacin martima. La mquina entera estaba diseada para ejecutar un solo algoritmo, el mtodo
SEC.
1.2
INTRODUCCIN
CAP. l
Ao
Nombre
1936
Z1
1943
COLOSSU
1944
S Mark 1
1946
1949
Gobierno ingls
ENIAC 1
Eckert/Mauchley
Aiken
15
Hecho por
Comentario
1834
Mquina analtica
Babbage
50 dgitos decimales, cada una de las cuales serva para almacenar variables y resultados.
El molino poda aceptar operandos del almacn, y luego sumarlos, restarlos, multiplicarlos o
dividirlos, y por ltimo devolver el resultado al almacn. Al igual que la mquina de diferen-
1951
EDSAC
Wilkes
1952
Whielwind 1
MU.
IAS
Van Neumann
lineal
1960
POP 1
DEC
1961
1401
IBM
1962
7094
1963
85000
IB M
Burroughs
1964
360
IBM
1964
6600
CDC
1965
POP 8
DEC
1
1
'
El siguiente
[i
t;';
de
diferencias
.
.
.
ios La caracterstica ms interesante de la mquina
de
. b
fimtas empleando p~lmom
ltados en una placa de cobre para
,
, d 0 de salida: perfora a sus resu
.
~.1 ganar
la guerra con tal rapidez que la nueva mquina no estara lista antes de terminar
las'.~ ~: acciones. Zuse no conoca el trabajo de Babbage, y sus mquinas fueron destruidas
por eL.1 1~:, bombardeo aliado de Berln en 1944, por lo que su trabajo no influy en las
mquinas~ , ,
subsecuentes. No obstante, Zuse fue uno de los pioneros en este campo.
;;
~Poco tiempo despus, en Estados Unidos, dos personas disearon tambin calculadorasb'1
;::
John Atanasoff del Iowa State Col!ege y George Stibbitz de Bell Labs. La mquina deAtanasotf:1
(:)
d i fe r e n c ias e ra su m e to
gr a b a d o ma
s co n un tr oq u el de
acero, u n precursor
como las tarjetas perforadas y los C?-RfOM:
b
onablemente bien Babbage pronto
se
, d d'~ rertctas unctona a raz
'
A. u, nque la m,aquma quee slo, leo po dia eJ. ec utar un algoritmo l comenz a dedi.
car cantida-
16
INTRODUCCIN
CAP.!
era asombrosamente avanzada para su poca; utilizaba aritmtica binaria y tena una merno-rj-;.
i~:..~
de-=!:':
ria de condensadores, los cuales se renovaban peridicamente para evitar que la carga
sapareciera, en un proceso que l llamaba "refrescar la memoria". Los modernos chips
de memoria dinmica (RAM) funcionan exactamente de la misma manera. Por
desgracia, la mquina nunca logr entrar en operacin. En cierto modo, Atanasoff era
como Babbage:
un poca.
visionario que finalmente fue derrotado por la insuficiente tecnologa de hardware de
su
53845
SEC. 1.2
17
militar durante 30 aos, la lnea de COLOSSUS fue bsicamente un callejn sin salida.
Slo vale la pena mencionarlo porque fue la primera computadora electrnica digital
del mundo.
Adems de destruir las mquinas de Zuse y estimular la construccin de COLOSSUS, la
guerra tambin afect la computacin en Estados Unidos. El ejrcito necesit~ba tablas de
alcance para apuntar su artillera pesada, y produca esas tablas contratando a cient?s de mujeres que las elaboraban utilizando calculadoras manuales (se pensaba que las mujeres eran
ms precisas que los hombres). No obstante, el proceso era muy tardado y los errores
eran frecuentes.
John Mauchley, quien conoca el trabajo de Atanasoff y de Stibbitz, se dio cuenta de que
el ejrcito estaba interesado en calculadoras mecnicas. Al igual que muchos cientficos de la
computacin que le siguieron, Mauchley elabor una propuesta de subvencin en la que
peda al ejrcito fondos para construir una computadora electrnica. La propuesta fue acepta-
INTRODUCCIN
18
El diseo bsico, que l describi por primera vez, ahora se conoce como mquina de
von
' en EDSAC la primera computadora de program a almacen ado , Y sigue
eumann.
S
e
uso
,
,
.
.
N
siendo la base de casi todas las computadoras digitales aun. ~hora, mas de medio s~glo
despus. Este diseo, y la mquina IAS, construida en colabo'.a~10n con Herman Gold~tme, ha
tenido una influencia de tal magnitud que vale la pena describirla brevemente. En la figura
1-5 se presenta un bosquejo de su arquitectura.
Memoria
Entrada
Unidad
de
control
Acumulador
d 20 bits 0 bien un entero con signo de 40 bits. Ocho bits de cada ms t ruc
..
dos i nstrucci ones e
cin estaban dedicados a indicar el tipo de instruccin, y 12 bits se dedicaban a especificar
una de las 4096 palabras de memoria.
.
.
.
. .
ellos dejaron la Universidad de Pennsylvania para formar una compaa nue- va, la EckertMauchley Computer Corporation, en Filadelfia (todava no se haba creado Silicon Valley).
Despus de una serie de fusiones, esta compaa se convirti en la moderna Unisys Corporation.
Como dato curioso, Eckert y Mauchley solicitaron una patente asegurando haber inven- tado
la computadora digital. En retrospectiva, habra sido bueno tener una patente as. Des- pus de
aos de pleitos, las cortes decidieron que la patente de Eckert y Mauchley no era vlida Y que
John Atanasoff era el inventor de la computadora digital, aunque nunca la haya patentado .
.~ientras Eckert y Mauchley estaban trabajando en la EDVAC, una de las personas que
participaron en el proyecto ENIAC, John von Neumann, acudi al Institute of Advanced
Studies de Princeton para construir su propia versin de EDVAC, la mquinaIAS. Von
Neuman fue un genio del calibre de Leonardo da Vinci; hablaba muchos idiomas, era experto en
las ciencias fsicas y en matemticas, y recordaba perfectamente todo lo que haba escu- chado,
visto o ledo. Poda citar de memoria el texto exacto de libros que haba ledo haca aos.
Cuando se interes por las computadoras, ya era el matemtico ms eminente del mundo.
Una cosa que pronto fue obvia para l era que programar computadoras con un gran
nmero de interruptores era lento, tedioso e inflexible. Von Neumann se dio cuenta de que el
programa po?a representarse en forma digital en la memoria de la computadora, junto con los
datos. El percibi tambin que la torpe aritmtica decimal en serie utilizada por ENIAC, en la
que cada dgito estaba representado por 1 O bulbos (uno encendido y nueve apagados) poda ser
sustituida por una aritmtica binaria.
SEC. 1.2
ACONTECIMIENTOSIMPORTANTES EN ARQUITECTURA DE COMPUTADORAS
19
La 701 tena 2048 palabras de 36 bits, con dos instrucciones por palabra. Era la primera de una
serie de mquinas cientficas que llegaron a dominar la industria en el plazo de una dcada.
Tres aos despus apareci la 704, que tena 4K de memoria de ncleos, instruccio- nes de 36 bits
y hardware de punto flotante. En 1958 IBM inici la produccin de su ltima mquina de bulbos,
la 709, que bsicamente era una 704 ms potente.
El transistor fue inventado en los Bell Labs en 1948 por John Bardeen, Walter Brattain y
William Schockley, quienes fueron galardonados con el premio Nobel de fsica de 1956 por su
trabajo. En un plazo de 1 O aos el transistor revolucion a las computadoras, y para fines de la
dcada de los cincuenta las computadoras de bulbos eran obsoletas. La primera compu- tadora
transistorizada se construy en el Lincoln Laboratory del MIT, una mquina de 16 bits con un
diseo parecido al de la Whirlwind I. Se le llam TX-0 (computadora Transistorizada
eXperimental 0) y su nico propsito era probar Ja TX-2, mucho ms elegante.
La TX-2 no logr un progreso decisivo, pero uno de los ingenieros que trabajaban en el
laboratorio, Kenneth Olsen, form una compaa, Digital Equipment Corporation (DEC) en
Dentro de la unidad de aritmtica lgica haba un registro mtemo espec1~l de 40 bits
llamado acumulador. Una instruccin tpica sumaba una pa~abra de ,la i:nemona ~l ac~m~lador 0 almacenaba el contenido del acumulador en la memona. La maquma no tema antrnetica de punto flotante porque von Neumann pensaba q~e cualquier _matemtico co_mp~tente
debera poder seguir mentalmente la pista al punto decimal (en reahdad el punto bman~) ..
Ms menos en las mismas fechas en que von Neumann estaba construyendo I~ maqu_i0
1957 para fabricar una mquina comercial parecida a la TX-0. Tuvieron que pasar cuatro aos
para que apareciera esta mquina, la PDP-1, principalmente porque los inversionistas que
financiaban a DEC crean firmemente que no haba mercado para las computadoras. En vez de
ello, DEC se dedic primordialmente a vender pequeas tarjetas de circuitos.
Cuando por fin la PDP-1 apareci en 1961, tena 4K de palabras de 18 bits y un tiempo
de ciclo de 5 s. t Este desempeo era la mitad del de Ja JBM 7090, la sucesora transistorizada de la
709 y la computadora ms rpida del mundo en esas fechas. La PDP-1 costaba $120,000 dlares;
na IAS , vest.1ga dores de MIT tambin estaban construyendo una computadora. A diferen. cia
m
de IAS, ENIAC y otras mquinas de su clase, que empleaban palabras l~ga~ y estab~n diseadas para manipulacin pesada de nmeros, la mquina del MIT, Whirlwmd I, t_em~ pala- bras
de 16 bits y estaba diseada para el control en tiempo real. Este proyecto d10 p1~ a la invencin
de la memoria de ncleos magnticos por Jay Forrester, y finalmente a la pnmera
minicomputadora comercial.
_,
_
.
Mientras todo esto estaba sucediendo, IBM era una comp~ma pequena dedicada,
fabricar perforadoras de tarjetas y mquinas clasificadoras _de tarjetas. Aunque IBM haba
aportado parte del financiamiento de Aiken, no estaba muy mtere~~daen las computadoras
hasta que produjo la 701en1953, mucho despus de que la compama de Eckert y Mauchley se
haba convertido en la nmero uno del mercado comercial con su computadora UNIVAC.
20
INTRODUCCIN
CAP. 1
mnibus
la 7090 costaba millones. DEC vendi docenas de PDP-1, y con esto la industria de las
minicomputadoras haba nacido.
Una de las primeras PDP-1 se entreg a MIT, donde rpidamente atrajo la atencin de
algunos de los jvenes genios en formacin tan comunes en esa institucin. Una de las mu- chas
innovaciones de la PDP-1 era una presentacin visual y la capacidad de graficar puntos en
cualquier lugar de su pantalla de 512 por 512. En poco tiempo, Jos estudiantes haban
programado la PDP-1 para jugar guerras espaciales, y el mundo tuvo su primer juego de
video.
Unos cuantos aos despus DEC introdujo la PDP-8, que era una mquina de 12 bits,
pero mucho ms econmica que la PDP-1 ($16,000). La PDP-8 tena una importante innovacin: un bus nico, u mnibus, que se muestra en la figura 1-6. Un bus es un conjunto de
alambres en paralelo que sirve para conectar los componentes de una computadora. Esta
arquitectura marc una divergencia importante respecto a la mquina IAS centrada en la
memoria, y ha sido adoptada por casi todas las computadoras pequeas posteriores. DEC lleg
a vender 50,000 PDP-8, lo que la estableci como lder en el negocio de las minicomputadoras
+Prefijos mtricos: mili= IQ-'. micro()= J0-6, nano= 10-'; kilo= 101, mega= 10", giga= 10'
SEC. 1.2
21
supercomputadoras, entre las que figuraron la 6600, la 7600 y la Cray-1. Tambin invent un
algoritmo para comprar automviles que se ha hecho famoso: acudir a la concesionaria ms
cercana al hogar, apuntar al automvil ms cercano a la puerta, y decir: "Me llevo se." Este
algoritmo desperdicia el mnimo de tiempo en hacer cosas sin importancia (como com- prar
automviles) y deja el mximo de tiempo libre para hacer cosas importantes (como
disear supercomputadoras).
. . Hubo muchas otras computadoras en esta era, pero una sobresale por una razn muy
distinta Y vale la pena mencionarla: la Burroughs B5000. Los diseadores de mquinas como
mquina que era casi un orden de magnitud ms rpida que la poderosa 7094. Para los
"trituradores de nmeros" fue amor a primera vista, y CDC estaba camino al xito. El secreto de su
velocidad, Ja razn por la que era mucho ms rpida que Ja 7094, era que dentro de la CPU haba
una mquina con alto grado de paralelismo: contaba con varias unidades funcio-. nales para sumar,
otras para multiplicar y otras para dividir, y todas podan operar en parale- lo. Aunque para
aprovecharla al mximo se requera una programacin cuidadosa, con un poco de esfuerzo era
posible lograr la ejecucin simultnea de 10 instrucciones.
Como si esto no fuera suficiente, la 6600 tena en su interior varias computadoras peque- as
que la ayudaban, algo as como Blanca Nieves y las siete personas con disfuncin verti- cal. Esto
permita a la CPU dedicar todo su tiempo a la trituracin de nmeros, dejando todos los detalles de
control de trabajos y entrada/salida a las computadoras pequeas. En retros- pectiva, la 6600 se
haba adelantado dcadas a su poca. Muchas de las ideas fundamentales en que se basan las
computadoras modernas se remontan directamente a la 6600.
El diseador de la 6600, Seymour Cray, fue una figura legendaria, comparable con von
Neumann. Dedic su vida a construir mquinas cada vez ms rpidas, ahora llamadas
t 1K=2' = 1024, as que 1 KB = 1024 bytes; tambin IM = 220 = 1,048,576 bytes
INTRODUCCIN
22
Modelo 30
Modelo 40
Modelo 65
10
21
Desempeo relativo
1000
625
500
250
64
256
256
512
16
3.5
Modelo 50
lelo con registros de 36 bits, y la otra era un procesador de entrada/salida que pareca hacer ms
de lo que en verdad haca y que utilizaba aritmtica decimal en serie con palabras de longitud
variable en la memoria. Muchos de sus clientes corporativos tenan ambas mquinas Y no les
gustaba la idea de mantener dos departamentos de programacin distintos que nada
tenan en comn.
Cuando lleg la hora de sustituir estas dos series, IBM dio un paso radical: introdujo una
sola lnea de productos, la System/360, basada en circuitos integrados, diseada para computacin tanto cientfica como comercial. La System/360 contena muchas innovaciones, sien- do la
ms importante que era una familia de cerca de media docena de mquinas con el mismo
lenguaje ensamblador y con tamao y potencia crecientes. Una compaa poda reem- plazar su
1401 por una 360 Model 30 y su 7094 por una 360 Model 75. La Model 75 era ms grande Y
rpida (y ms costosa), pero el software escrito para ella poda, en principio, ejecu- tarse en la
ModeJ 30. En la prctica, el software escrito para un modelo inferior se ejecutaba en un modelo
superior sin problemas, pero al pasar de una mquina superior a una inferior exista la
posibilidad de que el programa no cupiera en la memoria. Aun as, esto represent un avance
importante respecto a la situacin que prevaleca con la 7094 y la 1401. La idea de las familias de
mquinas de inmediato fue bien recibida, y en unos cuantos aos casi todos los fabricantes de
computadoras tenan una familia de mquinas similares que cubran una
modelos posteriores eran microprogramados. Lo nico que tena que hacer IBM era escribir tres
microprogramas: para el conjunto de instrucciones nativo de la 360, para el conjunto de
instrucciones de la 1401 y para el conjunto de instrucciones de la 7094. Esta flexibilidad fue una
de las razones principales por las que se introdujo la microprogramacin.
La 360 resolvi el dilema de binaria paralela versus decimal en serie con un trmino
medio: la mquina tena 16 registros de 32 bits para la aritmtica binaria, pero su memoria
estaba organizada en bytes, como la de la 1401. Adems, contaba con instrucciones seriales tipo
1401 para transferir registros de tamao variable en la memoria.
Otra caracterstica importante de la 360 fue un espacio de direcciones enorme (para esa
poca) de 224 bytes ( 16 megabytes). Puesto que la memoria costaba varios dlares por byte en
esos das, 16 megabytes pareca casi infinito. Desafortunadamente,la serie 360 fue seguida ms
adelante por la serie 370, la 4300, la 3080 y la 3090, todas las cuales empleaban la misma
arquitectura. Para mediados de los ochenta, el lmite de 16 megabytes se haba convertido en un
verdadero problema, e IBM tuvo que abandonar parcialmente la compatibilidad al cambiar a las
direcciones de 32 bits que se necesitaban para direccionar la nueva memoria de 232 bytes.
En retrospectiva, puede argumentarse que como esas mquinas tenan palabras y registros de 32 bits, probablemente deban haber tenido tambin direcciones de 32 bits, pero en
SEC. 1.2
1970
POP 11
DEC
23
1974 nadie
computadoraCriticar
de propsito
general
de esta
8 bits falta
en un chi
8080
esa poca
poda imaginarselntel
una mquina de Pri
16mera
megabytes.
a IBM
por
dep
visin1974
es comoCRAY-1
criticar a un moderno
fabricante
de
computadoras
personales
por
tener
direcGray
Primera supercomputadora vectorial
ciones1978
de slo VAX
32 bits. En unos cuantos
aos
las
computadoras
personales taldevez
necesiten ms de
DEC
Primera superminicomputadora
32 bits
4 GB de memoria, y entonces las direcciones de 32 bits sern intolerablemente pequeas.
1981
IBM
IBM PC
Inici la era de la computadora personal moderna
El mundo de las minicomputadoras tambin dio un gran paso en la tercera generacin
MIPS
MIPS
Primera
na RISCde
comercial
cuando1985
DEC introdujo
la serie PDP-11,
un sucesor
de mqui
la PDP-8
16 bits. En muchos sentiSPARC era como elSun
Primera
estacin
de trabajo
en SPARC
dos, la1987
serie PDP-11
hermano menor de
la serie
360,
igual RISC
quebasada
la PDP-1
haba sido
como 1990
un hermanito
de
la
7094.
Tanto
la
360
como
la
PDP-11
tenan
registros
orientados
hacia
IBM
Primera
mquina
superescalar
RSC6000
palabras y memoria orientada hacia bytes, y ambas abarcaban una gama muy amplia de precio y
desempeo. La PDP-11 tuvo un xito enorme, sobre todo en las universidades, y mantuvo la
ventaja de DEC sobre los otros fabricantes de minicomputadoras.
INTRODUCCIN
CAP.!
antes de tener una computadora personal funcional. Estridge se estableci lejos de la oficina
central, en Boca Raton, Florida, escogi el Intel 8088 como su CPU, y construy la IBM
Personal Computer a partir de componentes comerciales. La mquina se introdujo en
l 98 l y se convirti de inmediato en la computadora ms vendiJa de la historia.
IBM hizo otra cosa fuera de carcter de la que ms tarde se arrepentira. En lugar de
mantener totalmente en secreto el diseo de la mquina (o al menos protegido por una barrera
de patentes), como normalmente haca, public los planos completos, incluidos todos los
diagramas de circuitos, en un libro que vendi a 49 dlares. Lo que se buscaba es que otras
compaas fabricaran tarjetas que pudieran insertarse en la IBM PC (plug- ins) a fin de
aumentar su flexibilidad y popularidad. Por desgracia para IBM, dado que el diseo ya era
totalmente pblico y todas las piezas se podan conseguir fcilmente de proveedores
comerciales con facilidad, muchas otras compaas comenzaron a fabricar clones de la PC,
casi siempre a un costo mucho menor que lo que IBM cobraba. Fue as como naci toda una
industria.
Aunque otras compaas fabricaron computadoras personales utilizando unas CPU
que no eran de Intel, como las Commodore, Apple, Amiga y Atari, el mpetu de la industria de
la IBM PC era tan grande que las dems fueron arrolladas. Slo unas cuantas sobrevi- vieron,
aunque estuvieron restringidas a ciertos nichos del mercado, como estaciones de trabajo de
ingeniera o supercomputadoras.
La versin inicial de la IBM PC vena equipada con el sistema operativo MS-oos provisto
por la entonces pequea Microsoft Corporation. Cuando Intel logr producir CPU cada vez ms
potentes, IBM y Microsoft pudieron producir un sucesor del Ms-oosllamado os/2, que contaba
con una interfaz grfica con el usuario similar a la de la Apple Macimosh. Mientras
1
1
comprar su propia computadora. Para 1980los precios habanbajadotanto que una perso- na poda
tener ysuengranes
propia computadora.Se
haba
iniciado
la era
de la computadorapersonal.
levas
y ruedas fabricadas
con
un grado
de precisin
que la tecnologa del siglo xrx
Las
computadoras
personales
se
usaban
de
forma
muymucho
diferente
las ecomputadoras
no poda alcanzar. No obstante, sus ideas se haban adelantado
a su que
poca,
incluso
grandes;
se utilizaban
procesamiento
de texto,
clculo muy
y muchas
hoy
la mayor
parte de laspara
computadoras
modernas
tienenhojas
una de
estructura
similar otras
a la deaplicaaltamente
interactivas
queeslas
computadoras
grandes fue
no podan
bien. de la
laciones
mquina
analtica,
por lo que
justo
decir que Babbage
el padremanejar
(o el abuelo)
computadora
digitalcomputadoras
moderna.
~ una
Las primeras
personales solan venderse como "kits". Cada kit contena
tarjeta de circuitos impresos, un puado de chips, que tpicamente incluan un Intel 8080, varios
cables, una
de potencia
y tal vez
una unidad
de disco flexible
pulgadas.calcu-~;
Al compraestudiante
de fuente
ingeniera
alemn llamado
Konrad
Zuse construy
una seriede
de 8mquinas
dor
corresponda
armar
las
piezas
para
crear
una
computadora.
No
se
proporcionaba
software.
ladoras automticas empleando relevadores electromagnticos. Zuse no logr obtenerj " Si
usted quera software,
lo escriba.
se guerra
populariz
el sistema
operativo
CP!M para el
financiamiento
del gobierno
despusMs
de adelante
iniciada la
porque
los burcratas
esperaban::,
8080, escrito por Gary Kildall. Era un verdadero sistema operativo para disco (flexible), con un
sistema de archivos y comandos de usuario que se introducan con el teclado.
Otra de las primeras computadoras personales fue la Apple y posteriormente la Apple II,
diseadas por Steve Jobs y Steve Wozniak en la proverbial cochera. Esta mquina se populariz mucho entre los usuarios caseros y en las escuelas y convirti a Apple de la noche a la
maana en protagonista.
Despus de muchas deliberaciones y de observar lo que otras compaas estaban haciendo, IBM, que entonces era la fuerza dominante en la industria de la computacin, por fin
decidi que quera ingresar en el negocio de las computadoras personales. En lugar de dise- ar
una mquina desde cero, empleando nicamente componentes de IBM, lo cual habra tardado
mucho tiempo, lBM hizo algo totalmente fuera de carcter: entreg a uno de sus ejecutivos,
Philip Estridge, una gran bolsa de dinero y le orden irse a algn lugar lejos de los entrometidos
burcratas de las oficinas corporativas en Arrnonk, N.Y., y que no volviera
tanto, Microsoft cre tambin su propio sistema operativo Windows que se ejecutaba encima
SEC. 1.3
33
INTRODUCCIN
CAP. 1
antes de tener una computadora personal funcional. Estridge se estableci lejos de la oficina
central, en Boca Raton, Florida, escogi el Intel 8088 como su CPU, y construy la IBM
Personal Computer a partir de componentes comerciales. La mquina se introdujo en
1981 y se convirti de inmediato en la computadora ms vendida de la historia.
IBM hizo otra cosa fuera de carcter de la que ms tarde se arrepentira. En lugar de
mantener totalmente en secreto el diseo de la mquina (o al menos protegido por una
barrera de patentes), como normalmente haca, public los planos completos, incluidos todos
los diagramas de circuitos, en un libro que vendi a 49 dlares. Lo que se buscaba es que
otras compaas fabricaran tarjetas que pudieran insertarse en la IBM PC (plug- ins) a fin de
aumentar su flexibilidad y popularidad. Por desgracia para IBM, dado que el diseo ya era
totalmente pblico y todas las piezas se podan conseguir fcilmente de proveedores
comerciales con facilidad, muchas otras compaas comenzaron a fabricar clones de la PC,
casi siempre a un costo mucho menor que lo que IBM cobraba. Fue as
(/)
o
'li
ts
e
100000000
10000000
1000000
100000
10000
.C=tl
1K
1000
100
10
Desde luego, la ley de Moore no es realmente una ley, sino slo una observacin empri- ca
acerca de la rapidez con que los fsicos de estado slido y los ingenieros de proceso estn
empujando hacia adelante las fronteras tecnolgicas, y una prediccin de que seguirn hacindolo al mismo ritmo en el futuro. Muchos observadores de la industria esperan que la ley de
Moore se seguir cumpliendo ya entrado el siglo xxi, posiblemente hasta 2020. En ese punto
los transistores consistirn en un nmero demasiado reducido de tomos como para ser
confiables, aunque los adelantos en la computacin cuntica podran hacer posible para entonces el almacenamiento de un bit utilizando el espn de un solo electrn.
La ley de Moore ha creado lo que algunos economistas llaman un crculo virtuoso. Los
adelantos en la tecnologa (transistores por chip) dan pie a mejores productos y precios ms
bajos. Los precios bajos dan pie a nuevas aplicaciones (nadie estaba creando juegos de video
como naci toda una industria.
Aunque otras compaas fabricaron computadoras personales utilizando unas CPU
que no eran de Intel, como las Commodore, Apple, Amiga y Atari, el mpetu de la industria de
la IBM PC era tan grande que las dems fueron arrolladas. Slo unas cuantas sobrevi- vieron,
aunque estuvieron restringidas a ciertos nichos del mercado, como estaciones de
trabajo de ingeniera o supercomputadoras.
La versin inicial de la IBM PC vena equipada con el sistema operativo Ms-oosprovisto
por la entonces pequea Microsoft Corporation. Cuando Intel logr producir CPU cada vez
ms potentes, IBM y Microsoft pudieron producir un sucesor del Ms-oos llamado os/2, que
contaba con una interfaz grfica con el usuario similar a la de la Apple Macimosh. Mientras
SEC. 1.3
25
INTRODUCCIN
CAP. l
para computadoras cuando stas costaban 1 O millones de dlares cada una). Las nuevas aplicaciones dan pie a nuevos mercados y nuevas compaas que surgen para aprovecharlos. La
existencia de todas estas compaas da pie a una competencia que, a su vez, crea una demanda
econmica de mejores tecnologas con las cuales superar a los dems. Esto completa el crculo.
Otro factor que impulsa el mejoramiento tecnolgico es la primera ley del software
de Nathan (debida a Nathan Myhrvold, un alto ejecutivo de Microsoft) que dice: "El
software es un gas; se expande hasta llenar el recipiente que lo contiene." En los aos
ochenta el procesamiento de textos se efectuaba con programas como Troff (que se utiliz para
este libro). Troff ocupa unas cuantas decenas de kilo bytes de memoria. Los modernos
procesadores de textos ocupan decenas de megabytes. Los programas futuros sin duda
requerirn decenas de gigabytes. El software que continuamente aade funciones (como los
(/)
o(
::
100000000
10000000
1000000
100000
10000
1000
100
10
1
1965
1K
1970
1975
1980
1985
1990
1995
Figura 1-8.
Desde luego, la ley de Moore no es realmente una ley, sino slo una observacin empri- ca
acerca de la rapidez con que los fsicos de estado slido y los ingenieros de proceso estn
empujando hacia adelante las fronteras tecnolgicas, y una prediccin de que seguirn hacindolo al mismo ritmo en el futuro. Muchos observadores de la industria esperan que la ley de
Moore se seguir cumpliendo ya entrado el siglo xxi, posiblemente hasta 2020. En ese punto los
transistores consistirn en un nmero demasiado reducido de tomos como para ser confiables,
aunque los adelantos en la computacin cuntica podran hacer posible para en- tonces el
almacenamiento de un bit utilizando el espn de un solo electrn.
La ley de Moore ha creado lo que algunos economistas llaman un crculo virtuoso. Los
adelantos en la tecnologa (transistores por chip) dan pie a mejores productos y precios ms
bajos. Los precios bajos dan pie a nuevas aplicaciones (nadie estaba creando juegos de video
cascos de los barcos que sin cesar adquieren blanos) crea una demanda constante de
procesadores ms rpidos, memorias ms grandes y mayor capacidad de entrada/salida.
Si bien el aumento en el nmero de transistores por chip con el paso de los aos ha
sido impresionante, los avances en otras tecnologas de cmputo no se han quedado muy
atrs. Por ejemplo, en 1982 se introdujo la IBM PC/XT con un disco duro de 10 MB. Por
regla general, los sistemas de escritorio actuales tienen discos un tanto mayores. Medir el
mejoramiento de los discos no es tan sencillo, porque implica varios parmetros (capa- cidad,
tasa de datos, precio, etc.), pero casi cualquier mtrica indicar que las capaci- dades han
aumentado desde entonces a razn de 50% anual, por lo menos.
Otras reas que han sido testigo de avances espectaculares son las telecomunicaciones y
las redes. En menos de dos dcadas hemos pasado de mdems de 300 bits/s a mdems analgicos de
56 kbps, lneas telefnicas ISDN de 2 x 64 kbps y redes de fibra ptica de ms de un gigabit/s. Los
cables telefnicos trasatlnticos de fibras pticas, como TAT-12/13, cuestan unos 700 mi- llones
de dlares, duran 1 O aos y pueden transportar 300,000 llamadas simultneas, lo que da un costo
SEC. 1.3
Tipo
Precio
Computadora desechable
Richard Hamming, antiguo investigador de Bell Labs, cierta vez observ que un cambio de un
orden de magnitud en la cantidad causa un cambio en la calidad. As, un automvil que puede
correr a 1000 km/h en el desierto de Nevada tiene un tipo de mquina fundamen- talmente
distinto de la de un automvil normal que viaja a 100 km/h en una autopista. As mismo. un
rascacielos de 100 pisos no es slo un edificio de apartamentos de 10 pisos a mayor escala. Y
con las computadoras no estamos hablando de factores de l O, sino de facto-
10
incorporada
juegos
Computadora
100
personal
Mainframe (macrocomputadora)
Supercomputadora
10 K
Ejemplo de aplicacin
Relojes, automviles,
1 K
Servidor
27
100 K
1 M
10 M
Computadora
de escritorio o porttil
Servidor de red
Min isupercomputadora
Procesamiento
Prediccin
~!
. ~n
extremo inferior encontramos chips individuales pegados al interior de tarjetas de
felicitacin ~ara tocar "Feliz cumpleaos", la "Marcha nupcial" o alguna otra tonadilla igualmente ab~mmable. El autor todava no ha encontrado una tarjeta de condolencias que toque una
marcha funebre, pero despus de haber sacado esta idea al dominio pblico, se cree que no
tardar en aparecer. Para cualquier persona que haya crecido con mainframes de millones de
dlares, la idea de una computadora desechable es tan lgica como la de un avin desechable. No
obstante, es indudable que las computadoras desechables llegaron para quedarse. (Qu tal bolsas
para la basura parlantes que nos recuerden reciclar las latas de aluminio?)
~n el siguiente peldao tenemos las computadoras que estn incorporadas en telfonos,
telev1~ores, hornos de micr~ondas, reproductores de CD,juguetes, muecas y miles de apara- tos
mas. En unos cuantos anos, todo artculo elctrico incluir una computadora. El nmero de
co~putadoras
incorporadas se medir en miles de millones, rebasando por rdenes de
magmtud a todas las dems computadoras combinadas. Estas computadoras contienen un
procesador, menos de un megabyte de memoria, y cierta capacidad de E/S, todo en un solo chip
que cuesta unos cuantos dlares.
En el siguiente peldao estn las mquinas de videojuegos. Se trata de computadoras
norma_le~'. con capacidades grficas especiales, pero software limitado y casi ninguna
ex.tens1b1hd~~ En este intervalo de precios tambin estn los organizadores personales, los
asistentes digitales porttiles y otros dispositivos de computacin de bolsillo similares, as
como las computadoras de red y las terminales de Web. Lo que estas computadoras tienen e.n
comn es que contienen un procesador, unos cuantos megabytes de memoria, algn tipo de
pantalla (posiblemente un televisor) y poco ms. Eso es lo que los hace tan baratos.
.
A continuacin vienen las computadora~ personales en las que la mayora de la gente
piensa cuando oye la palabra "computadora". Estas incluyen modelos de escritorio y porttiles. Por
lo regular incluyen varios megabytes de memoria, un disco duro con unos cuantos gigabytes
CAP. l
28
INTRODUCCIN
SEC. l.4
29
de datos, una unidad de CD-ROM, un mdem, una tarjeta de sonido y otros perifric?; Estas
mquinas cuentan con sistemas operativos complejos, muchas opciones de expansion Y un
enorme surtido de software comercial. Las que tienen una CPU lntel suelen llamarse
"computadoras personales", mientras que las que tienen otro tipo de CPU a menudo se
_llaman "estaciones de trabajo", aunque en lo conceptual casi no hay diferencias entre lo~ ?
s tipos.
Ciertas computadoras personales o estaciones de trabajo mejoradas suelen utilizarse co~o
servidores de red, tanto para redes de rea local (casi siempre dentro de una sola co~p~ma)
como para Internet. stas tienen configuraciones de ~n solo proc~sador o de mult.1ples
procesadores, tienen unos cuantos gigabytes de mem?na, muchos g1gabytes de espacio .en
disco duro, y capacidad de trabajo en red de alta velocidad. Algunas de ellas pueden manejar
docenas o cientos de llamadas a la vez.
Ms all de los servidores multiprocesadorpequeosencontramos sistemas conocido; como
sistemas NOW (redes de estaciones de trabajo, Nen;'orks ofWorkstations) o COW (cumulos
de estaciones de trabajo, Clusters ofWorkstations). Estos son computadores personales o ~staciones de trabajo estndar conectadas por redes de gigabits/s y que ejecutan programas
especiales que permitena todas las mquinascolaboraren la solucind~ un solo problema,q~e
a menu~o~s
cientfico0 de ingeniera. Es fcil cambiar la escala de estos sistemas, desde un punado d~
maqui- nas hasta miles de ellas. Gracias al bajo precio de sus componentes, los departamentos
independientes pueden poseer tales mquinas, que de hecho son minisupercomputador~s. . ,
Ahora llegamos a las mainframes, computadoras que llenan una ha~1tac10n. y que se
remontan a los sesenta. En muchos casos, estas mquinas son descendientes directos de
mainframes IBM 360 adquiridas dcadas atrs. En su mayor parte, estas computadoras no
son mucho ms rpidas que servidores potentes, pero suelen tener mayor capacidad de E/S Y
estn equipadas con grandes "granjas" de discos que llegan a contener un,ter~byte de datos
ms (1 TB = 1012 bytes). Aunque son extremadamente costosas, estas maqumas .m~nudo
0
se
mantienen funcionando en vista de la enorme inversin en software, datos,
procedimientos
operativos y personal que representan. Muchas compaas consideran que ~s i:ns econmico
pagar unos cuantos millones de dlares de vez en cuando por una nue~a,~ue s1q~1era
con~emplar
el esfuerzo necesario para reprogramar todas sus aplicacionespara maqumas mas p~quenas.
Es esta clase de computadoras la que dio pie al problema del Ao 2000 de tnste fama, el
cual es culpa de los programadores en COBOL de los sesenta y setenta .que representaban
el ao como dos dgitos decimales (para ahorrar memoria). Ellos nunca imagmaron que su
software durara tres 0 cuatro dcadas. Muchas compaas han repetido el mismo error al
limitarse a agregar dos dgitos ms al ao. El autor aprovecha la ocasin para predecir el fin
de la civilizacin que conocemos a la media noche del 31 de diciembre de 9999, cuando
8000 aos de viejos programas en COBOL dejarn de funcionar simultneamente.
Despus de las mainframes vienen las verdaderas superco~puta~o~as, cuyas C~U son
inconcebiblemente rpidas, tienen muchos gigabytes de memona principal, y sus discos .Y
sus redes muy rpidos. En aos recientes, muchas de las supercomputadoras se han convertido en mquinas altamente paralelas, no muy diferentes de los diseos COW, pero con componentes ms rpidos y numerosos. Las su~erc.om~utad?r~s se emp.lean para resolver
problemas que requieren muchos clculos en ciencia ~ mgem~na, como simular el choqu~,de
galaxias, sintetizar nuevas medicinas o modelar el flujo del alfe alrededor de un ala de avion,
En esta seccin presentaremos una breve introduccin a las tres computadoras que usaremos
como ejemplos en el resto del libro: la Pentium II, la UltraSPARC II y la picoJava TI [sic].
lntel no esperaba mucha demanda por el 8008, as que estableci una lnea de produc-
;.."('~
;~~ ""
(i
cin de bajo volumen. Para asombro de todos, el chip despert un inters enorme, por lo que :
Intel se dedic a disear un nuevo chip de CPU que superara la limitacin de I 6K de memo- '
-<
~
::J
ria del 8008 (impuesta por el nmero de agujas en el chip). Este diseo dio como resultado el < __, ;-".
8080, una CPU pequea, de propsito general, introducido en 1974. Como haba hecho la ..
PDP-8, este producto tom a la industria por asalto y de la noche a la maana se convirti en
~'
un artculo de mercado masivo. Slo que en lugar de vender millares, como haba hecho ;.~:
DEC, lntel vendi millones.
,_,
::::
En 1978 lleg el 8086, una verdadera CPU de 16 bits en un solo chip. El 8086 tena @ ~
un diseo similar al del 8080, pero no era totalmente compatible con ste. Al 8086 sigui _, c..
el 8088, que tena la misma arquitectura que el 8086 y ejecutaba los mismos programas, !
pero tena un bus de 8 bits en lugar de uno de 16 bits, lo que lo haca ms lento pero ms
econmico que el 8086. Cuando IBM escogi el 8088 como CPU para la IBM PC original,
este chip rpidamente se convirti en el estndar para la industria de las computadoras
personales.
Ni el 8088 ni el 8086 podan direccionar ms de un megabyte de memoria. Para
principios de los ochenta esto se convirti en un problema cada vez ms grave, por lo que
Intel dise el 80286, una versin del 8086 compatible hacia arriba. El conjunto de instrucr
30
INTRODUCCIN
,_
CAP.!
ciones bsico era casi el mismo que el del 8086 y el 8088, pero Ja organizacin de la
memoria era muy diferente y un tanto torpe, debido al requisito de compatibilidad con los chips
anteriores. El 80286 se us en la IBM PC/AT y en los modelos PS/2 de mediano precio. Al igual
que el 8088, este chip tuvo un xito enorme, principalmente porque la gente lo vea
31
un cach ~s grande, un bus ms rpido y mejor apoyo multiprocesador, pero por lo dems es
un Pentium ~I normal, as que tampoco lo trataremos individualmente. La familia Jntel se
muestra en Ja figura 1-1 O.
SEC. 1.4
Chip
INTRODUCCIN
CAP. 1
Fecha
MHz
Transistores Memoria
Notas
4004
4/1971
0.108
2,300
8008
4/1972
0.108
3,500
8080
4/197 4
6,000
8086
6/1978
5-10
29,000
1 MB
8088
6/1979
5-8
29,000
1 MB Se us en la IBM PC
80286
2/1982
8 12
134,000
80386
10/1985
16-33
275,000
16 BM
80486
4/1989
25 100
1.2M
4GB
Pentium
3/1993
60-233
3.1M
4 GB
Pentium Pro
3/1995
150-200
5.5M
4 GB
Pentium
5/1997
233-400
7.5M
11
Todos lo.s chips lntel son compatibles con sus predecesores hasta el 8086. En otras pala- b.ras,
un Pent~um lI pued~ ~jecutai: programas del 8086 sin modificacin. Esta compatibilidad s1e~pre
~~ sido un requisito de diseo para Intel, a fin de que los usuarios puedan mantener su mvers10~
en software existente. Desde luego, el Pentium 1l es 250 veces ms complejo que el 808~, asi ~ue
puede hacer una buena cantidad de cosas que el 8086 nunca pudo hacer. Estas extens1?nes
.mcre~ental~s han dado pie a una arquitectura menos elegante de lo que podra h.aber s1d~ sr
algm.en hubiera entregado a los arquitectos del Pentium 117.5 millones de tran- sistores e
ms~rucc1ones para comenzar otra vez desde el principio.
,Resulta m~eresante que si bien la ley de Moore ha estado asociada desde hace mucho al
nu~ero de bits de ~na memoria, aplica igualmente bien a Jos chips de CPU. Si graficamos lo~
numeras de transistores dados en la figura 1-1 O contra la fecha de introduccin de cada chip en
una es~ala semilogartmica, vemos que la ley de Moore tambin se cumple. La grfi- ca
correspondiente se presenta en la figura 1-11.
33
Pentium
11
1M
(/)
.9
'i
e:
(1)
100K
Ley de Moore
~
(/)
10K
8086
8080 \
.= 1K
100
10
~~1m1~1~1m1~1~1~11~1~1~1~1~1~
Ao de introduccin
tido (a menudo sobrecargadas) como la PDP-11 y VAX. En 1981 un estudiante de posg~ado alemn
en Stanford, Andy Bechtolsheim, quien se senta frustrado por tener que acudir al centro de
cmputo para usar UNIX, decidi resolver el problema construy~ndo para su us~ personal una
estacin de trabajo UNIX utilizando componentes comerciales, y la llamo
SUN-1 (Stanford University Network).
. ,
_
,
Bechtolsheim pronto atrajo la atencin de Vinod Khosla, un hmdu de 27 anos que tema
el deseo ferviente de retirarse como millonario antes de cumplir los 30 aos. Khosla conven- ci a
Bechtolsheim de formar una compaa para construir y vender estaciones de trabajo Sun. Luego,
Khosla contrat a Scott McNealy, otro estudiante de posgrado ~e Stanford, .P~ encargarse del rea
de produccin. Para escribir el software contrataron a Bill Joy, el pnnc1- pal arquitecto del
Berkeley UNIX. Los cuatro fundaron Sun Microsystems en 1982.
El primer producto de Sun, la Sun-I, basada en la CPU Motorola 6802?: tuvo un xito
inmediato, lo mismo que las mquinas subsecuentes Sun-2 y Sun-3, que tai_nbi.en usaban CPU
Motorola. A diferencia de otras computadoras personales de la poca, estas maquinas eran mucho ms
potentes (de ah la designacin
"estacin
de trabajo")
y estaban diseadas
de~~e un
principio para operar en una red. Cada estacin de trabajo Sun vena equipada con una conexion Ethernet
y con software TCP/IP para conectarse con ARPANET, la precursora de Internet.
Para 1987 Sun, que ya estaba vendiendo 500 millones de dlares al ao en si~tem~s,
decidi disear su propia CPU basndola en un nuevo y revolucionario diseo de la University of
California at Berkeley (el RISC II). Esta CPU, llamada SPARC (arquitectura de
procesador escalable, Scalable Processor ARChitecture), fu~ _la base para la estacin de
trabajo Sun-4. En poco tiempo, todos los productos de Sun utilizaban l.a ~PU SPA~C.
A diferencia de muchas otras compaas de computadoras, Sun decidi no fabncar el
chip de CPU SPARC ella misma. En vez de ello, otorg lice~cias a varios ~a~ricante~ de
semiconductores para producirlo, esperando que la competencia entre ellos hiciera subir el
34
INTRODUCCIN
CAP. l
nas funciones nuevas en cada iteracin. En este libro, cuando tratemos la arquitectura SPARC,
utilizaremos el UltraSPARC II V9 de 64 bits como ejemplo.
desempeo y bajar los precios. Los proveedores fabricaron varios chips distintos, basados en
diferentes tecnologas, que operaban a diferente velocidad de reloj, y con distintos precios. Estos
chips incluyeron MicroSPARC, HyperSPARC, SuperSPARC y TurboSPARC. Aunque estas CPU
diferan en aspectos menores, todas eran compatibles en lo binario y ejecutaban los mismos
programas de usuario sin modificacin.
Sun siempre quiso que SPARC fuera una arquitectura abierta, con muchos proveedores de
componentes y sistemas, a fin de forjar una industria capaz de competir en un mundo de
computadoras personales ya dominado por las CPU basadas en Intel. Para ganarse la con- fianza de
compaas que estaban interesadas en SPARC pero no queran invertir en un producto controlado por
un competidor, Sun cre un consorcio de la industria, SPARC International, para controlar el
desarrollo de versiones futuras de la arquitectura SPARC. Por ello es impor- tante distinguir entre la
arquitectura SPARC, que es una especificacin del conjunto de instruc- ciones y otras caractersticas
visibles para el programador, y una implementacin especfica de ella. En este libro estudiaremos la
arquitectura SPARC genrica y, al hablar de los chips de CPU en los captulos 3 y 4, de un chip
SPARC especfico empleado en estaciones de trabajo Sun.
El SPARC inicial era una mquina completa de 32 bits que operaba a 36 MHz. La CPU,
llamada IU (unidad de enteros, Integer Unit), era magra y feroz, con slo tres formatos de
instruccin principales y slo 55 instrucciones en total. Adems, una unidad de punto flotante
aportaba otras 14 instrucciones. Esta historia puede contrastarse con la lnea Intel, que co- menz
con chips de 8 y 16 bits (8088, 8086, 80286) y por fin se convirti en un chip de 32 bits con el 80386.
La primera ruptura de SPARC con el pasado ocurri en 1995, con el desarrollo de la versin
9 de la arquitectura SPARC, una arquitectura cabal de 64 bits, con direcciones de 64 bits y
registros de 64 bits. La primera estacin de trabajo Sun que implement la arquitectura V9 (versin
9) fue la UltraSPARC 1, introducida en 1995 (Tremblay y O'Connor, 1996). A pesar de ser
una mquina de 64 bits, era totalmente compatible en lo binario con los SPARC de 32 bits existentes.
El propsito de UltraSPARC era explorar nuevos terrenos. Mientras que mquinas
anteriores estaban diseadas para manejar datos alfanumricos, ejecutar programas como
procesadores de textos y hojas de clculo, la UltraSPARC se dise desde el principio para
manejar imgenes, audio, video y multimedia en general. Entre otras innovaciones adems
de la arquitectura de 64 bits haba 23 instrucciones nuevas, incluidas algunas para empacar y
desempacar pixeles de palabras de 64 bits, cambiar la escala de imgenes y girarlas, transferir
bloques y realizar compresin y descompresin de video en tiempo real. Estas instrucciones,
llamadas VIS (conjunto de instrucciones visuales, Visual Instruction Set) tenan por objeto
ofrecer una capacidad multimedia general, anloga a las instruccio- nes MMX de Intel.
El UltraSPARC estaba dirigido a aplicaciones del extremo superior, como servidores de Web
multiprocesador grandes, con docenas de CPU y memorias fsicas de hasta 2 TB [l TB (terabyte)
= 1012 bytes]. Sin embargo, versiones ms pequeas pueden usarse tambin en computadoras
porttiles.
Los sucesores del UltraSPARC I fueron UltraSPARC II y UltraSPARC III. Estos mode- los
difieren primordialmente en cuanto a velocidad de reloj, pero tambin se aadieron algu-
El lenguaje de programacin C fue inventado por Dennis Ritchie de Bel! Labs para usarlo con
el sistema operativo UNIX. Gracias a su diseo econmico y la popularidad de UNIX, C pronto se
convirti en el lenguaje de programacin dominante en el mundo para programa- cin de
sistemas. Algunos aos despus, Bjarne Stroustrup, tambin de Bell Labs, aadi a C ideas del
mundo de la programacin orientada a objetos para crear C++, que tambin se volvi muy
popular.
A mediados de los noventa, investigadores de Sun Microsystems estaban explorando
formas de lograr que los usuarios obtuvieran programas binarios por Internet y los ejecutaran
como parte de pginas de la World Wide Web. A ellos les gustaba C++, excepto que no era
seguro. En otras palabras, un programa binario en C++ recin bajado de Internet fcilmente
poda espiar la mquina que lo haba adquirido e interferirla de otras maneras. Su solucin a este
problema fue inventar un nuevo lenguaje de programacin, Java, inspirado en C++ pero sin los
problemas de seguridad de ste. Java es un lenguaje orientado a objetos seguro, que cada vez se
usa ms para muchas aplicaciones. Por ser un lenguaje popular y elegante, lo usaremos en los
ejemplos de programacin de este libro.
Puesto que Java no es ms que un lenguaje de programacin, es posible escribir compiladores de l para la arquitectura Pentium, SPARC o cualquier otra. Existen tales
compiladores, pero el principal objetivo de Sun al introducir Java era poder intercambiar
programas ejecutables Java entre computadoras de Internet y ejecutarlos sin modificacin. Si un
programa Java compilado en una mquina SPARC se enviara por Internet a una Pentium, no se
ejecutara, y no se alcanzara la meta de poder enviar un programa binario a cualquier sitio y
ejecutarlo ah.
Para poder transportar programas binarios entre mquinas distintas, Sun defini una
arquitectura de mquina virtual llamada JVM (JavaVirtualMachine). Esta mquina tiene una
memoria formada por palabras de 32 bits, y puede ejecutar 226 instrucciones. Casi todas estas
instrucciones son sencillas, pero unas cuantas son muy complejas y requieren varios ciclos de
memoria.
A fin de hacer porttil a Java, Sun escribi un compilador de Java para la JVM, y tambin
escribi un intrpreteJVM para ejecutarprogramasbinariosJava. ste intrpretese escribien C y
por tanto puede compilarse y ejecutarse en cualquier mquina que posea un compilador de C,
lo que en la prctica incluye a casi todas las mquinas del mundo. Por consiguiente, lo nico que
el dueo de una mquina necesita hacer para que sta pueda ejecutar programas binariosJava es
conseguirel programabinarioejecutabledel intrpretede Java para esa plataforma (digamos,
Pentium II y Windows 98, SPARC y UNIX, etc.) junto con ciertos programas y biblio- tecas de
apoyo asociados. Adems, casi todos los navegadores de Internet contienen un intr- prete de
JVM para poder ejecutar fcilmente applets, que son pequeos programas binarios Java
asociados a pginas de la World Wide Web. Muchos de estos applets proporcionan ani- macin y
sonido.
36
INTRODUCCIN
CAP.!
SEC. 1.4
35
implementada con tecnologa superescalar moderna, una verdadera arquitectura RISC implementada con tecnologa superescalar, y un chip Java dedicado para usarse en sistemas
incorporados. Estos tres procesadores son muy diferentes entre s, y esto nos da la oportuni-
dad de explorar mejor el espacio de diseo y ver qu tipos de concesiones pueden hacerse
para procesadores dirigidos a pblicos distintos.
SEC. 1.5
37
una buena co_mprensin.del nivel subyacente que Jo motiv. Adems, es recomendable desde
el pu~to de v1~ta educatI_voproceder de los niveles inferiores, ms sencillos, hasta los niveles
supenores, mas complejos, y no al revs.
El ~aptu~o3 se ocupa del nivel de lgica digital, el verdadero hardware de la mquina. Se
explica que son las compuertas y cmo pueden combinarse en circuitos tiles ..,., bi ,
'I b
. ram ren se
presenta e a ge ra booleana, una herramienta para analizar circuitos digitales. Se describen
los bu ses de compu tadora, sobre todo el bus PCI tan utilizado El captulo exa
.
.
.
nu na numerosos ejemplos
El
, 1de4.la mdustria, incluidos los tres ejemplos constantes antes mencion d a os.
captu -~ mtroduc~ la organizacin del nivel de microarquitectura y su control. Puesto que
la funcin de este nivel es interpretar las instrucciones de nivel 2 de la capa que esta,
.
am~a, nos con_ce~traremos ~n este te~a y lo ilustraremos con ejemplos. El captulo tambin
contiene d~scnpc10nes del nivel de m1croarquitectura de algunas mquinas reales.
E~ capitulo 5 trata e_l nivel
I~A, el que la mayora de los fabricantes de computadoras
anuncia _como el lenguaje de maquma. Aqu examinaremos detalladamente nuestras mquinas de ejemplo,
d:
PROBLEMAS
D~I'.:\~<:::-,\;
O()(~(nvri~N'I'.;_\C.l(YN
~-<\:-.-:.._;
-~~l'dL
i_(.~ :t.~:-.
MONTEVIDEO - URUGUA):
a. Traductor. b.
Intrprete.
c. Mquina virtual.
2. Qu diferencia hay entre interpretacin y traduccin?
3. Es conc~~ible que un compilador genere salidas para el nivel de microarquitectura en lugar del
mvel ISA. Comente las ventajas y las desventajas de esta propuesta.
38
INTRODUCCIN
CAP.!
s.
Considere una computadora con intrpretes idnticos en los niveles 1, 2 y 3._Dn int~rete re~uiere
n instrucciones para ir a buscar, examinar y ejecutar un~ instru::in. Una 1_nstrucc10n de~nivel 1
tarda k nanosegundos en ejecutarse. Cunto tarda una instruccin en los niveles 2, 3 Y 4
Cons1idere una computadora multinivel en la que todos los niveles son difer. entes. fCada
6. nivel
tien e
nivel ~ - 1 un
programa del nivel tarda k segundos en ejecutarse, ~cunto_tardanan p:ogramas ~qmvalentes en
1 os m ve 1 es 2 , 3 y 4 , s. uponiendo que se requieren m instrucciones del mvel r para mterpretar
una sola instruccin del nivel r + 1?
7. Algunas instrucciones en el nivel de sistema operativo s~n idntic~s a i~strucc~oi:s en :e~~~~:
ISA. El microprograma ejecuta directamente esas ms~rucc1ones,~n ugar e que o ag~?e sis
operativo. A la luz de su respuesta al problema antenor, por que cree que esto sea asi :
S. En qu sentido son equivalentes el hardware y el software? En qu sentido no son
equivalentes?
Una de las consecuencias de la idea de von Neumann de almacenar el prograi_na~n la memoria
9 es que los programas pueden modificarse, igual que_ los ?atos. Se le ocurre alg~n eJem_plo_e~ el
que esta posibilidad podra haber sido til? (Sugerencia: piense en realizar operaciones
antmencas con
arreglos.)
10. El coeficiente de desempeo de Ja 360 modelo 75_es de 50 _veces el ~e la 360 _m~delo 30, pero el
tiempo de ciclo es slo cinco veces ms corto. Como exphca esta discrepancia.
11. En las figuras 1-5 y 1-6 se muestran dos diseos bsicos de sist~mas. Descri~a cmo podra efectuarse entrada/salida en cada sistema. Cul podra tener un mejor desempeno global?
12. En cierto momento, un transistor de un microprocesador tena un ~im_etr~ de ; micra. Segn la
ley de Moore, qu tamao tendra un transistor en el modelo del ano siguiente.
son
fundamentales y estarn presentes en todos los niveles, por lo que iniciaremos nuestro estudio de la arquitectura de las computadoras examinndolos uno por uno.
2.1 PROCESADORES
La organizacin de una computadora sencilla orientada hacia los buses se muestra en la
figu- ra 2-1. La CPU (unidad centralde procesamiento, Central Processing Unit) es el
"cere- bro" de la computadora. Su funcin es ejecutar programas almacenadosen la memoria
principal buscando sus instrucciones y examinndolas para despus ejecutarlas una tras otra.
Los com- ponentes estn conectados por un bus, que es una coleccin de alambres paralelos
para trans- mitir direcciones, datos y seales de control. Los buses pueden ser externos a la
CPU, cuando la conectan a la memoria y a los dispositivos de E/S, pero tambin internos,
como veremos en
breve.
La CPU se compone de varias partes. La unidad de control se encarga de buscar
instruc- ciones de la memoria principal y determinar su tipo. La unidad de aritmtica y
lgica realiza operaciones como suma y AND booleano necesarias para ejecutar las
instrucciones.
La CPU tambin contiene una memoria pequea y de alta velocidad que sirve para
alma- cenar resultados temporales y cierta informacin de control. Esta memoria se
compone de
40
CAP. 2
41
Registros
Dispositivos de E/S
lgica (ALU)
PROCESADORES
Unidad de
aritmtica
Registros
SEC. 2.1
A+B
Unidad de
control
DO
39
Memoria
Impresora principal Disco
DO
11
ti
...
r1
Bus
ALU
Figura 21. Organizacin de una computadora sencilla con una CPU y dos
dispositivos de E/S.
A+B
varios registros, cada uno de los cuales tiene cierto tamao y funcin. Por lo regular, todos
los registros tienen el mismo tamao. Cada registro puede contener un nmero, hasta algn
mximo determinado por el tamao del registro. Los registros pueden leerse y escribirse a
alta velocidad porque estn dentro de la CPU.
El registro ms importante es el contador de programa (PC, Program Counter), que
apunta a la siguiente instruccin que debe buscarse para ejecutarse. El nombre "contador de
programa" es un tanto engaoso porque no tiene nada que ver con contar, pero es un
trmino de uso universal. Otro registro importante es el registro de instrucciones (IR,
Instruction Register), que contiene la instruccin que se est ejecutando. Casi todas las
computadoras tienen varios registros ms, algunos de propsito general y otros para fines
especficos.
La ALU suma, resta y realiza otras operaciones simples con sus entradas, y produce
un resultado en el registro de salida. El contenido de este registro de salida se enva
a un registro, que posteriormente se escribe (es decir, se guarda) en la memoria, si se
42
transfieren entre la memoria y los registros. Una palabra podra ser un entero. Trataremos la
organizacin de la memoria ms adelante en este captulo.) Otras instrucciones registromemoria permiten al- macenar el contenido de un registro en la memoria.
La otra clase de instruccin es la de registro-registro. Una instruccin registro-registro
tpica busca dos operandos de los registros, los coloca en los registros de entrada de la ALU,
realiza alguna operacin con ellos (por ejemplo suma o AND booleano) y coloca el
resultado en uno de los registros. El proceso de hacer pasar dos operandos por la ALU y
almacenar el resultado se llama ciclo del camino de datos y es el corazn de casi todas las
CPU. En gran medida, este ciclo define lo que la mquina puede hacer. Cuanto ms rpido
es el ciclo del camino de datos, ms rpidamente opera la mquina.
SEC. 2. l
PROCESADORES
43
3.
4.
S.
6.
Ejecutar la instruccin.
7.
44
jas a menudo era posible acelerar la ejecucin de los programas, aunque las instrucciones
individuales tardaran ms en ejecutarse. Una instruccin de punto flotante es un ejemplo de
instruccin ms compleja. Otro ejemplo es el apoyo directo para acceder a los elementos de
un arreglo. A veces Ja cosa era tan sencilla como observar que con frecuencia ocurran las
mis- mas dos instrucciones en sucesin, de modo que una sola instruccin poda realizar el
trabajo
de ambas.
Las instrucciones ms complejas eran mejores porque a veces hacan posible traslapar la
PC = dir_inicio;
while (bit_ejec) {
instr =
memoria[PC]; PC =
PC + 1;
tipo_instr = obt_tipo_instr(instr);
pos_datos = encontrar_datos(instr, tipo_instr);
if (pos_datos >= O)
datos= memoria[pos_datos];
ejecutar(tipo_instr, datos);
}
PROCESADORES
45
Hacia fines de Jos cincuenta, IBM (que entonces era la compaa que dominaba el campo de las computadoras) se haba dado cuenta de las muchas ventajas, tanto para IBM como
para sus clientes, que tena que manejar una sola familia de mquinas, todas las cuales
ejecu- taban las mismas instrucciones. IBM introdujo el trmino arquitectura
para
describir este nivel de compatibilidad. Una nueva familia de computadoras tena una sola
arquitectura pero muchas implementaciones diferentes, todas las cuales podan ejecutar el
mismo programa, la nica diferencia era el precio y la velocidad. Pero, cmo construir una
computadora de bajo costo que pudiera ejecutar todas las complejas instrucciones de las
mquinas de alto costo y
mayor rendimiento?
La respuesta fue la interpretacin. Esta tcnica, inicialmente sugerida por Wilkes ( 1951
),
permiti disear computadoras sencillas, de bajo costo, capaces de ejecutar un gran nmero
de instrucciones. El resultadofue la arquitecturaIBM System/360, una familia de
computadoras compatibles que abarcaba casi dos rdenes de magnitud, tanto en precio como
en capacidad. Slo se usaba una implementacin directa en hardware (es decir, no
interpretada) en los
modelos ms caros.
Las computadoras sencillas con instrucciones interpretadas tambin tenan otros beneficios. Los ms importantes eran:
1. La capacidad para corregir en el campo instrucciones mal implementadas, o
inclu- so subsanar deficiencias de diseo en el hardware bsico.
2.
3.
46
CAP. 2
A finales de los setenta se efectuaron muchos experimentos con instrucciones muy complejas, que eran posibles gracias al intrprete. Los diseadores trataron de salvar la "brecha
semntica" entre lo que las mquinas podan hacer y lo que los lenguajes de programacin de
alto nivel requeran. A casi nadie se le ocurra disear mquinas ms sencillas, como ahora
casi nadie piensa en disear sistemas operativos, redes, procesadores de textos, etc. menos
potentes (lo cual tal vez es lamentable).
Un grupo que se opuso a la tendencia y trat de incorporar algunas de las ideas de Seymour
Cray en una minicomputadora de alto rendimiento fue el encabezado por John Cocke en
IBM. Estos trabajos tuvieron como resultado una minicomputadora experimental llamada
801. Aunque IBM nunca comercializ esta mquina y los resultados no se publicaron sino
hasta varios aos despus (Radin, 1982), la informacin se filtr y otras personas comenzaron a investigar arquitecturas similares.
En 1980, un grupo de Berkeley dirigido por David Patterson y Cario Squin comenz a
disear chips de CPU VLSI que no utilizaban interpretacin (Patterson, 1985; Patterson y
Squin, 1982). Ellos acuaron el trmino RISC para este concepto y llamaron a su chip de
CPU RISC I, el cual fue seguido en poco tiempo por el RISC ll. Un poco despus, en 1981,
del otro lado de la Baha de San Francisco en Stanford, John Hennessy dise y fabric un
chip un tanto diferente al que llam MIPS (Hennessy, 1984). Estos chips llegaron a convertirse en productos importantes desde el punto de vista comercial: SPARC y MIPS, respectivamente.
Estos nuevos procesadores tenan diferencias significativas respecto a los procesadores
comerciales de la poca. Dado que estas nuevas CPU no tenan que ser compatibles con
productos existentes, sus diseadores estaban en libertad de escoger nuevos conjuntos de
instrucciones que maximizaran el rendimiento total del sistema. Si bien el hincapi inicial
fue en instrucciones simples que pudieran ejecutarse con rapidez, pronto se vio que la clave
para un buen desempeo era disear instrucciones que pudieran emitirse (iniciarse) rpidamente. El tiempo real que una instruccin tardaba era menos importante que el nmero de
instrucciones que podan iniciarse por segundo.
En la poca en que se estaban diseando por primera vez estos sencillos procesadores la
caracterstica que llam la atencin de todo mundo fue el nmero relativamente pequeo de
instrucciones disponibles, por lo regular unas 50. Este nmero era mucho menor que las 200
a 300 que tenan computadoras establecidas como la DEC VAX y las grandes mainframes de
IBM. De hecho, el acrnimo RISC significa computadora de conjunto de instrucciones
reducido (Reduced Instruction Set Computer), lo que contrasta con CISC, que significa
computadora de conjunto de instrucciones complejo (Complex /nstruction Set Computer)
(una referencia poco sutil al VAX, que dominaba los departamentos de ciencias de la computacin
universitarios en ese entonces). Hoy da, poca gente piensa que el tamao del conjunto de
instrucciones sea crucial, pero el nombre ha persistido.
Para no hacer muy larga la historia, se desencaden una gran guerra de religin, con los
partidarios de RISC atacando el orden establecido (VAX, Intel, las grandes mainframes de
IBM). Ellos aseguraban que la mejor forma de disear una computadora era tener un nmero
SEC. 2.1
PROCESADORES
47
e()
hardware
CAP.2
SEC. 2.1
49
PROCESADORES
. . .
rpidas En las computadoras que implementan
conjuntos. de ins
de lasinstrucciones sean
Puesto que el acceso a la memoria es relativamente lento, es necesario contar con muchos
registros (al menos 32) para que, una vez que se ha obtenido una palabra, se pueda mantener
en un registro hasta que ya no se necesite. Quedarse sin registros y tener que escribirlos en la
memoria slo para volverlos a cargar despus es poco recomendable y debe evitarse en
la medida de lo posible. La mejor manera de lograr esto es tener suficientes registros.
poca frecuencia.
Maximizar el ritmo con que se emiten instrucciones
Las computadoras modernas recurren a muchos trucos para maximizar s.u desempeo, Y el
rinci al de ellos es tratar de emitir el mayor nmero posible de instrucciones por segundo.
~esp:s de todo, si podemos emitir 500 millones de in~trucciones por ~egundo, habremos
procesa
as mstrucc1ones.
. .
l
1
MIPS pretende hacer un juego de palabras con este acrnimo.! Este. principio sugiere ~ue e
.
ya
para 1 e l 1smopue d e desempear un papel importante en el mejoramiento del desempeno,
que slo es posible emitir un gran n~ero ~e instrucciones lentas en un peno do corto sr
guiente, casi todos los arquitectos de computadoras recurren al paralelismo (hacer dos o ms
cosas al mismo tiempo) para sacar el mayor provecho posible a una velocidad de reloj dada.
El paralelismo adopta dos formas generales: paralelismo en el nivel de instrucciones y
paralelismo en el nivel de procesador. En el primero, se aprovecha el paralelismo dentro de
las instrucciones individuales para lograr que la mquina ejecute ms instrucciones por segundo. En el segundo, mltiples CPU trabajan juntas en el mismo problema. Cada enfoque
tiene sus propios mritos. En esta seccin examinaremos el paralelismo en el nivel de instrucciones; en la que sigue veremos el paralelismo en elnivel de procesadores.
se emiten en ese orden (porque algn recurso necesario podna estar ocupado) Y
siempre
, 1
no tienen que terminar en el orden del programa. Desde luego, si la mstrucc~on asigna un
valor a un registro y la instruccin 2 usa ese registro, debe tenerse mucho cuidado de que la
instruccin 2 no lea el registro antes de que ste contenga el valor .corre~to. Para ello .se
requiere un control estricto, pero el potencial para incrementar la rapidez ejecutando varias
Filas de procesamiento
c?~
las operaciones
en pasos individuales
es
requerir que los operandos de casi todas las instrucciones pro~engan de -:-Y regresen ----:-
registros. La operacin de transferir operandos entre la memoria y ~os registros puede reali. .
cia a la memoria.
50
CAP. 2
por el camino de dato s de la figura 2-2. Por ltimo, la etapa 5 escribe el resultado en el
registro apropiado.
S1
S4
S3
S2
SS
Unidad
Unidad de
Unidad de
Unidad de
Unidad de
ejecucin de ~
de
bsqueda de ~
decodificacin r-bsqueda
de
escritura
de instrucciones
instrucciones
operandos
de instrucciones
resultados
(
a
)
si:
sa
ss:
s4:
ss:
m 0 rn m m @J m ~ m
m 0 rn m m @J m ~
m 0 rn m m @J m
m 0 rn m m @J
m 0 rn m m
2
Tiempo~ (b)
Figura 2-4. (a) Fila de procesamiento de cinco etapas. (b) Estado de cada
etapa en funcin del tiempo. Se ilustran nueve ciclos de reloj.
En la figura 2-4(b) vemos cmo la fila de procesamiento opera como una funcin
del tiempo. Durante el ciclo de reloj 1, la etapa S 1 est trabajando en la instruccin 1,
buscndola en la memoria. Durante el ciclo 2, la etapa S2 decodifica la instruccin 1,
mientras la etapa S 1
SEC. 2.1
PROCESADORES
51
Volviendo a nuestra fila de procesamiento
de la figura 2-4, supongamos que el tiempo
de ciclo de esta mquina es de 2 ns. Entonces, se requieren 1 O ns para que una instruccin
por
paselas cinco etapas de la fila de procesamiento. A primera vista, si una instruccin tarda 1 O
ns,
podra
parecer
que En
la mquina
puede
operar
a 100
pero
eninstruccin,
realidad trabaja
velocidad
mucho
mayor.
cada ciclo
de reloj
(2 ns),
se MIPS,
completa
una
as a una
que la rapidez de procesamiento real es de 500 MIPS, no de 100 MIPS.
El uso de filas de procesamiento permite balancear la latencia (el tiempo que tarda
en ejecutarse una instruccin) y el ancho de banda del procesador (cuntas MIPS
puede eje- cutar la CPU). Con un tiempo de ciclo de T ns, y n etapas en la fila de
procesamiento, esta latencia es de nT ns y el ancho de banda es de 1000/T MIPS
(lgicamente, dado que estamos midiendo tiempos en nanosegundos, deberamos medir
el ancho de banda de la CPU en MMIPS o GIPS, pero nadie lo hace, as que tampoco lo
haremos aqu).
Arquitecturas
superescalares
Si una fila de procesamiento es buena, entonces seguramente dos sern mejores. En la
figura
2-5 se muestra un posible diseo para una CPU con fila de procesamiento dual basado
en la figura 2-4. Aqu una sola unidad de bsqueda de instrucciones trae pares de
instrucciones y coloca cada una en su propia fila de procesamiento, que cuenta con su ~
(J
propia ALU para poder operar en paralelo. Esto requiere que las dos instrucciones no ..J.. ..
l,.;,
~;"~
compitan por el uso de recursos (por ejemplo, registros) y tambin que una no dependa
k.::
'
del resultado de la otra. Al igual que con una solo fila de procesamiento, el compilador , ~
debe garantizar que se cumpla esta situa- cin (lo que implica que el hardware no
verifica que las instrucciones sean compatibles, y produce resultados incorrectos si no
lo son), o bien los conflictos se detectan y eliminan durante la ejecucin utilizando
hardware adicional.
~ .},
S1
SS
S2
S3
Unidad de
Unidad de
de decodificaejecucin cin de insde instruc-
Unidad
de
bsqued
a de
instruccione
s
trucciones
resultados
operandos
x.~
Unidad de
escritura
de
~~!
L
,-:_"_,
t.--.'
,L
.'x1
c.,
.{'..,~
ciones
Unidad de
ejecucin
:,.,,..~
.,
Unidad
escritura de
coloca un pastel en ella. Poco despus, la caja llega al puesto del trabajador
3, donde
se le cierra y sella. Luego, la caja contina hasta donde est el trabajador 4, quien
adhiere una etiqueta a la caja. Por ltimo, el trabajador 5 retira la caja de la banda y la
coloca en un contenedor grande que despus se enviar a un supermercado.
Bsicamente, sta es la forma en que funcionan tambin las filas de procesamiento de
una computadora: cada instruccin (pastel) pasa por varios pasos de procesamiento
.. :~
t ,
Unidad de
bsqueda
"'!
r n..{--
Unidad de
de
decodifica-
f-1~'
.-.,
...... c.:
:-
S4
Unidad
bsqueda
de
~;
:; (j
:-...
, e
..
>
'~-;
~~:i
:.; ~
antes
G;
: ~"
~-
de instrucciones
SEC. 2.1
S1
de
S2
S3
Unidad de
Unidad de
SS
Unidad
Unidad de
bsqueda de
instrucciones
53
PROCESADORES
52
decodificacin
de instrucciones
escritura de
resultados
bsqueda de
operandos
Punto
flotante
CAP. 2
obtener ganancias de 50, 100 o ms, el nico camino es disear computadoras con mltiples
CPU, por lo que ahora veremos cmo estn organizadas algunas de ellas.
Computadoras de matriz
Muchos problemas de las ciencia fsica e ingeniera implican matrices o tienen una
estructura altamente regular en algn sentido. En muchos casos los mismos clculos se
efectan con muchos conjuntos de datos distintos al mismo tiempo. La regularidad y
estructura de estos programas los convierte en candidatos idneos para una aceleracin por
ejecucin en parale- lo. Se han utilizado dos mtodos para ejecutar programas cientficos
grandes rpidamente. Si bien estos dos sistemas son muy similares en casi todos los sentidos,
resulta irnico que uno de ellos se considere como una extensin de un solo procesador,
mientras que el otro se considera como una computadora paralela.
Un arreglo de procesadores consiste en un gran nmero de procesadores idnticos que
ejecutan la misma secuencia de instrucciones con diferentes conjuntos de datos. El primer
arreglo de procesadores.del mundo fue Ja computadora ILLIAC IV de la University of
Illinois, que se ilustra en la figura 2-7 (Bouknight et al., 1972). El plan original era
construir una mquina constituida por cuatro cuadrantes, cada uno de los cuales tena una
cuadrcula 8 x 8 de elementos procesador/memoria. Una sola unidad de control por
cuadrante transmita ins- trucciones que eran ejecutadas simultneamente por todos los
procesadores, cada uno de Jos cuales utilizaba sus propios datos de su propia memoria (que
se cargaba durante la fase de inicializacin). Debido a que el presupuesto se excedi en un
factor de cuatro, slo lleg a
SEC. 2.1
54
construirse un cuadrante, pero ste logr un desempeo de 50 megaflops (millones de operaciones de punto flotante por segundo). Se dice que si se hubiera completado la mquina
original y hubiera alcanzado la meta de desempeo fijada originalmente (1 gigaflop), habra
duplicado la capacidad de cmputo de todo el mundo.
Transmite instrucciones
Procesador
El
El
El
El
El
El
El
El
El
El
El
El
El
El
El
El El El El
El El El El
El El El El
El El El El
El El El El
Cuadrcula 8 x 8 de procesador/memoria
~EIEIEIEIEIEIEI
Memoria
55
procesadores vectoriales, en cambio, pueden aadirse a un procesador convencional. El resultado es que las partes del programa susceptibles de vectorizarse pueden ejecutarse rpidamente aprovechando la unidad vectorial, mientras que el resto del programa puede
ejecutarse en un procesador nico convencional.
Multiprocesadores
Unidad de control
El
El
El
El
El
PROCESADORES
El El El El El El El El
El El El El El El El El
Figura 2-7. Arreglo de procesadores del tipo ILLIAC IV.
CAP.2
Memoria
compartida
1:.~.~ . ~. T
Bus
(a)
Bus
(b)
Figura 2-8. (a) Multiprocesador con un solo bus. (b) Multicomputadora con
memorias locales.
No se necesita mucha imaginacin para darse cuenta de que si hay un gran nmero de
procesadores rpidos que constantemente estn tratando de acceder a la memoria por el
mismo bus, habr conflictos. Los diseadores de multiprocesadores han ideado varios
esquemas para reducir esta contencin y mejorar el desempeo. Un diseo, que se muestra en
la figura 2-S(b), proporciona a cada procesador un poco de memoria local propia, inaccesible
para los dems. Esta memoria puede utilizarse para cdigo de programa y datos que no es
necesario que se compartan. El acceso a esta memoria privada no usa el bus principal, lo que
reduce considera- blemente el trfico en el bus. Hay otros posibles esquemas (por ejemplo,
uso de cachs).
Los multiprocesadores tienen la ventaja, respecto a otros tipos de computadoras paralelas, de que es fcil trabajar con el modelo de programacin de una sola memoria compartida.
Por ejemplo,imagine un programaque busca clulascancerosasen una fotografade algn
tejido
SEC. 2.2
MEMORIA PRIMARIA
57
con- mutadores para llegar del origen al destino. No obstante, es pos1bl~ alcanzar sm
mucha dificultad tiempos de paso de mensajes del orden de unos cuantos microsegundos.
Se han construido multicomputadoras con casi 10,000 CPU, y ya estn funcionando.
Puesto que los multiprocesadores son ms fciles de program_ar_ ~ las
mult_ico_mpu_tadoras
son ms fciles de construir, se ha investigado asiduamente la posibilidad de disear
sistemas hbridos que combinen las propiedades ms atractivas de cada uno. Tales
comp~tadoras tratan de presentar la ilusin de una memoria compartida, sin hac.erel gasto
de construirla,realmente. Estudiaremos con detalle los multiprocesadores y las
multicomputadoras en el capitulo 8.
2.2
PRIMARIA
MEMORIA
memoria en la cual los procesadores puedan leer y escribir informacin, no existiran las
computadoras digitales de programa almacenado.
2.2.1 Bits
La unidad bsica de memoria es el dgito binario, llamado bit. Un bit puede contener un O o
un 1 es la unidad ms simple posible. (Un dispositivo que slo pudiera almacenar ceros
difcilmente podra servir para construir un sistema de memoria; se requieren por lo menos
dos valores.)
binario:0000011110011000
Diecisis bits en el formato decimal pueden almacenar los nmeros del O al 9999, lo que da
slo 10,000 combinaciones, mientras que un nmero binario puro de 16 bits puede
almacenar
65,536 combinaciones distintas. Es por esto que decimos que el almacenamiento binario es
ms eficiente.
Sin embargo, considere lo que sucedera si algn joven y brillante ingeniero elctrico
inventara un dispositivo electrnico altamente confiable que pudiera almacenar
directamente los dgitos del O al 9 dividiendo la regin de O a 1 O volts en 1 O intervalos.
Cuatro de estos dispositivos podran almacenar cualquier nmero decimal del O al 9999, y
podran formar
10,000 combinaciones. Tambin podran usarse cuatro de esos dispositivos para almacenar
nmeros binarios, pero slo empleando O y 1. En tal caso, slo podran almacenar 16 combinaciones. Con tales dispositivos, el sistema decimal obviamente es ms eficiente.
CAP. 2
Direccin
Direccin
1 Celda
SEC. 2.2
Direccin
MEMORIA PRIMARIA
Computadora
Bits/celda
Burroughs 81700
IBM PC
2
L.....l--L-'-...L...-.&........1--L-'
3 L....l--L-'-...L...-.&........1--L-'
4 .._._. ,_......_.._,1-L_,
3
4
'--'--'--'--'-J........1---'--'-....L-
._.
._.
2....._. . ._......_
~_.._~.._
3....._. . ._......_
~ . . . . . .~.._
'--'-'--'--'-J........1--L-'-....L-.&........IL-.J 4.._._.
_. . .
_. . .
59
DEC PDP-8
IBM 1130
12
16
DEC PDP-15
18
XDS 940
24
Electrologica X8
27
XDS Sigma 9
Honeywell 6180
32
36
CDC 3600
48
CDC Cyber
60
L....l--L-'--'--.&........1--'--'
6 L....l--L-'-...L...-.&........1--L-'
7 .._. , ,_......_..... .1-L_,
8 ._I
9
._I
L-1-'--'--'--L-1--'--'--'--J........1'-'
'--'--'--'--'-J........1---'--'-....L-
........ L......J
'--'-'--'--'--J........1--L-'-....L-"'-'L-.J
-'-L-L-'--'-L-L-'
(b)
-'-L-L-'--'-L-L-'
10 _,_L-L_. , . . ,
._ I
11
._I
_,_
.........
_.
------ a bits--(a)
del nmero de bits por celda. Una memoria que tiene 212 celdas de 8 bits cada una, y una que
tiene 212 celdas de 64 bits cada una, necesitan ambas direcciones de 12 bits.
En la figura 2-1 O se da el nmero de bits por celda de algunas computadoras que se han
vendido comercialmente.
La importancia de la celda es que es la unidad direccionable ms pequea. En aos
recientes casi todos los fabricantes de computadoras han adoptado como estndar una celda
familia Intel. El primer sistema, en el que la numeracin comienza por el extremo "grande"
(es decir, de orden alto), se llama computadora big endian, en contraste con la little endian
de la figura 2-11 (b). Estos trminos provienen de la obra Los viajes de Gulliver, donde
Jonathan Swift haca una stira de los polticos que declararon una guerra a causa de su
disputa respec- to a si los huevos deban romperse por el extremo ancho (big end, en la
obra original en ingls) o por el extremo angosto (little end). Los trminos se usaron por
primera vez aplica- dos a la arquitectura de computadoras en un delicioso artculo escrito por
Cohen (1981).
Direccin
de 8 bits, que recibe el nombre de byte. Los bytes se agrupan en palabras. Una computadora
con palabras de 32 bits tiene 4 bytes/palabra, mientras que una con palabras de 64 bits tiene
8 bytes/palabra. La importancia de las palabras es que casi todas las instrucciones operan con
palabras enteras; por ejemplo, suman dos palabras. As, una mquina de 32 bits tiene registros de 32 bits e instrucciones para manipular palabras de 32 bits, mientras que una mquina
de 64 bits tiene registros de 64 bits e instrucciones para transferir, sumar, restar y manipular
de otras maneras palabras de 64 bits.
Bigendian
Littleendian
Direccin
10
11
11
10
12
12
13
14
15
15
14
13
12
12
-palabra
Byte
de 32 bits(a)
-palabra
Byte
de 32 bits(b)
Figura 2-11. (a) Memoria big endian. (b) Memoria little endian.
Es importante entender que tanto en los sistemas big endian como en los little endian,
un entero de 32 bits con el valor numrico de, digamos, 6, se representa con los bits 11 O en
los tres bits de la extrema derecha (de orden bajo) de una palabra, con ceros en los 29 bits de
Ja izquierda. En el esquema big endian, los bits 110 estn en el byte 3 (o 7, u 11, etc.),
mientras
60
CAP.2
que en el esquema little endian estn en el byte O (o 4, u 8, etc.). En ambos casos, la palabra
que contiene este entero tiene la direccin O.
Si las computadoras slo almacenaran enteros, no habra problemas, pero muchas aplicaciones requieren una mezcla de enteros, cadenas de caracteres y otros tipos de datos. Considere, por ejemplo, un sencillo registro de personal que consiste en una cadena (nombre de
empleado) y dos enteros (edad y nmero de departamento). La cadena termina con uno o
ms bytes O para rellenar una palabra. La representacin big endian para Jim Smith, de 21
aos,
del departamento 260 (1x256 + 4 = 260) se muestra en la figura 2.12(a); la little endian, en
la figura 2-12(b).
SEC. 2.2
MEMORIA PRIMARIA
61
Transferencia de
Big endian
12
16
o o o
o o o 21
o o 1 4
(a)
o o
o o
o o
(b)
Transferencia
e intercambio
big endian a
little endian
Little endian
J
o o o H
21 o o o
4 1
o o
o
o
21
12
16
(e)
o
T
o o o
o o o 21
o o 1 4
12
16
(d)
Figura 2-12. (a) Registro de personal en una mquina big endian. (b) El mismo
registro en una mquina little endian. (e) Resultado de transferir el regitro de una
big endian a una little endian. (d) Resultado de intercambiar los bytes de (e).
decir, n == m + r). Una unidad den bits que contiene m bits de datos y r bits de verificacin se
conoce como palabra de cdigo de n bits.
Dadas dos palabras de cdigo cualesquiera, digamos 10001001 y ioriooor, es posible
determinar cuntos bits correspondientes difieren. En este caso, tres bits difieren. Para determinar cuntos bits difieren basta calcular el OR EXCLUSIVO booleano bit por bit de las dos
palabras de cdigo, y contar el nmero de bits 1 en el resultado. El nmero de posiciones de
bit en las que dos palabras de cdigo difieren se denomina distancia de Hamming (Hamming,
1950). La importancia de esta cifra es que si dos palabras de cdigo estn separadas por una
distancia de Hamming d, se requieren d errores de un solo bit para convertir una palabra en la
otra. Por ejemplo, las palabras de cdigo 11110001 y 00110000 estn separadas por una
rias. En todo caso, es evidente que la falta de un estndar para el ordenamiento de los bytes
genera problemas innecesarios al intercamiar datos entre diferentes mquinas.
distancia de Hamming de 3 porque se requieren tres errores de un solo bit para convertir una
en la otra.
En el caso de una palabra de memoria de m bits, estn permitidos los 2"' patrones de
bits, pero a causa de la forma en que se calculan los bits de verificacin, slo 2"' de las 2"
palabras de cdigo son vlidas. Si al leer la memoria se obtiene una palabra de cdigo no
vlida, la computadora sabr que ocurri un error de memoria. Si se conoce el algoritmo
para calcular los bits de verificacin, es posible construir una lista completa de las palabras
de cdigo permitidas, y encontrar en esta lista las dos palabras de cdigo cuya distancia de
Hamming es mnima. Esta distancia es la distancia de Hamming de todo el cdigo.
Las propiedades de deteccin y correccin de errores de un cdigo dependen de
su distancia de Hamming. Para detectar d errores de un solo bit se necesita un cdigo con
una distancia de d + 1, porque con un cdigo as no es posible que d errores de un solo bit
62
CAP. 2
Siempre que se lee de la memoria una palabra con la paridad incorrecta, se indica una
condicin de error. El programa no puede continuar, pero al menos no se calculan resultados
incorrectos.
Como ejemplo sencillo de cdigo con correccin de errores, considere un cdigo que
slo tiene cuatro palabras de cdigo vlidas:
convier- tan una palabra de cdigo vlida en otra palabra de cdigo vlida. De forma
similar, para corregir d errores de un solo bit se requiere un cdigo con una distancia 2d + 1
porque as las palabras de cdigo vlidas estn tan lejanas unas de otras que aun con d
cambios Ja palabra de cdigo original est ms cerca de la palabra con errores que cualquier
otra palabra de cdigo vlida, y es posible determinarla de forma inequvoca.
Como ejemplo sencillo de cdigo con deteccin de errores, considere un cdigo en
el que se anexa un solo bit de paridad a los datos. El bit de paridad se escoge de modo que el
nmero de bits 1 en la palabra de cdigo sea siempre par (o impar). Un cdigo as tiene una
distancia de 2, ya que cualquier error de un solo bit produce una palabra de cdigo con la
paridad equivocada. En otras palabras, se requieren dos errores de un solo bit para pasar de una
a otra palabras de cdigo vlidas, y el cdigo puede servir para detectar errores sencillos.
SEC. 2.2
MEMORIA PRIMARIA
A
Bits de
Tamao total
12
50
16
21
31
32
38
19
64
71
11
128
136
256
265
63
Bits de
paridad
B
B
(a)
512
B
(b)
10
522
(e)
Figura 2-13. Nmero de bits de verificacin para un cdigo que puede corregir un
solo error.
Este lmite inferior terico puede lograrse empleando un mtodo ideado por Richard
Hamming (1950). Antes de examinar el algoritmo de Hamming, veamos una sencilla representacin grfica que ilustra claramente la idea de un cdigo de correccin de errores para
palabras de 4 bits. El diagrama de Venn de la figura 2-14(a) contiene tres crculos, A, By C,
que juntos forman siete regiones. Como ejemplo, codifiquemos la palabra de memoria de 4
bits 1100 en las regiones AB, ABC, AC y BC, un bit por regin (en orden alfabtico). Esta
codificacin se muestra en la figura 2-14(a).
Figura 2-14. (a) Codificacin de 1100. (b) Adicin de paridad par. (e) Error en AC.
Ahora aadimos un bit de paridad a cada una de las tres regiones vacas a modo de
producir una paridad par, como se ilustra en la figura 2- l 4(b). Por definicin, la suma de
los bits de cada uno de los tres crculos, A, B y C, es ahora un nmero par. En el crculo
A tenemos los cuatro nmeros O, O, 1 y 1, que suman 2, un nmero par. En el crculo B,
los
nmeros son 1, 1, O y O, que tambin suman 2, un nmero par. Por ltimo, en el crculo e
tenemos la misma situacin. En este ejemplo da la casualidad que todos los crculos son
iguales, pero en otros ejemplos podra haber tambin sumas de O y 4. Esta figura
corresponde a una palabra de cdigo con 4 bits de datos y 3 bits de paridad.
Supongamos ahora que el bit de la regin AC es errneo y cambia de O a 1, como se
muestra en la figura 2-14(e). La computadora detecta que los crculos A y C tienen la
paridad equivocada (impar). El nico cambio de un solo bit que corrige la situacin es
restaurar AC a O, lo que corrige el error. De este modo, la computadora puede reparar
errores de memoria de un solo bit automticamente.
Veamos ahora cmo podemos usar el algoritmo de Hamming para construir cdigos
con correccin de errores para palabras de memoria de cualquier tamao. En un cdigo de
64
17 18
Hamming, se aaden r bits de paridad a una palabra de m bits para formar una nueva palabra
de m + r bits. Los bits se numeran a partir de 1, no de O, siendo el bit 1 el de la extrema
izquierda (bit de orden alto). Todos los bits cuyo nmero es una potencia de 2 son bits de
paridad; los dems se utilizan para datos. Por ejemplo, con palabras de 16 bits se aaden
cinco bits de paridad. Los bits 1, 2, 4, 8 y 16 son bits de paridad, y todos los dems son bits
de datos. En total, la palabra de memoria tiene 21 bits (16 de datos, 5 de paridad).
Usaremos (arbitrariamente) paridad par en este ejemplo.
Cada bit de paridad examina posiciones de bit especficas; el bit de paridad se ajusta de
modo que el nmero total de unos en las posiciones verificadas sea par. Las posiciones de bit
que verifica cada bit de paridad son
Bit 1 verifica los bits 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21.
Bit 2 verifica los bits 2, 3, 6, 7, 10, 11, 14, 15, 18, 19.
Bit 4 verifica los bits 4, 5, 6, 7, 12, 13, 14, 15, 20, 21.
Bit 8 verifica los bits 8, 9, 10, 11, 12, 13, 14, 15.
Bit 16 verifica los bits 16, 17, 18, 19, 20, 21.
Palabra de memoria 111100001010111O
CAP 2
En general, el bit bes verificado por los bits b; b2, , b1 tales que b, + b2 + ... + b1 = b. Por
ejemplo, el bit 5 es verificado por los bits 1 y 4 porque 1 + 4 = 5. El bit 6 es verificado por los
bits 2 y 4 porque 2 + 4 6, etctera.
La figura 2-15 muestra la construccin de un cdigo de Hamming para la palabra
de memoria de 16 bits 1111000010101110.
La palabra de cdigo de 21 bits es
001011100000101101110. Para ver cmo funciona la correccin de errores, consideremos qu
sucedera si el bit 5 se invirtiera por un pico en la alimentacin elctrica. La nueva pala- bra de
cdigo sera 001001100000101l01110 en lugar de 001011100000101101110.
Verifi- camos los
cinco bits de paridad, con los siguientes resultados:
@] @]
1~
Paridad del bit 1 incorrecta ( 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 contienen cinco unos).
Paridad del bit 2 correcta (2, 3, 6, 7, 10, 11, 14, 15, 18, 19 contienen seis unos).
Paridad del bit 4 incorrecta (4, 5, 6, 7, 12, 13, 14, 15, 20, 21 contienen cinco unos).
Paridad del bit 8 correcta (8, 9, 10, 11, 12, 13, 14, 15 contienen dos unos).
Paridad del bit 16 correcta (16, 17, 18, 19, 20, 21 contienen cuatro unos).
El nmero total de unos de los bits 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 y 21 debera ser par,
porque estamos usando paridad par. El bit incorrecto debe ser uno de los bits verificados por el
bit de paridad 1: el bit 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 o 21. El bit de paridad 4 es incorrecto, lo
que implica que uno de los bits 4, 5, 6, 7, 12, 13, 14, 15, 20 o 21 es incorrecto. El error debe estar
en uno de los bits de ambas listas, o sea 5, 7, 13, 15 o 21. Sin embargo, el bit 2 es correcto,
lo que elimina al 7 y al 15. As mismo, el bit 8 es correcto, lo que elimina al 13. Por ltimo, el
bit 16 es correcto, lo que elimina al 21. El nico bit que queda es el 5, que es el que tuvo el error.
Puesto que se ley como 1, debera ser O. Es as como se corrigen los errores.
@]
@] ---- ---- ---- ---- _!_ ---- _!_ [!] ---- _!_ .i.
11 12
17
_!_
----
19 20 21
Bits de paridad
Un mtodo sencillo para encontrar el bit incorrecto consiste en calcular primero todos
los bits de paridad. Si todos son correctos, no hubo error (o hubo ms de uno). Luego se
suman todos los bits de paridad incorrectos, contando 1 por el bit 1, 2 por el bit 2, 4 por el bit
4, etc. La suma que se obtiene es la posicin del bit incorrecto. Por ejemplo, si los bits de
paridad 1 y 4 son incorrectos pero los 2, 8 y 16 son correctos, el bit 5 (1 + 4) se habr
invertido.
SEC. 2.2
MEMORIA PRIMARIA
65
CAP.2
compilador se vea obligado a insertar instrucciones NOP (no hay operacin) que no hacen nada
ms que ocupar una ranura y desperdiciar tiempo. En realidad, esto equivale a detenerse, slo
que en software en lugar de en hardware, pero la degradacin del desempeo es la misma.
De hecho, el problema no es la tecnologa, sino la economa. Los ingenieros saben cmo
construir memorias que sean tan rpidas como las CPU, pero para operar a su mxima velocidad tienen que estar dentro del chip de la CPU (porque ir por el bus hasta la memoria es
muy lento). La colocacin de una memoria grande en el chip de la CPU lo hace ms grande y
por tanto ms costoso, pero aun si el costo no fuera importante existen lmites para el tamao
que un chip de CPU puede tener. As, la decisin se reduce a tener una cantidad pequea de
memoria rpida o una cantidad grande de memoria lenta. Lo que preferiramos es una gran
cantidad de memoria rpida a un precio bajo.
Lo interesante es que se conocen tcnicas para combinar una cantidad pequea de memo- ria
rpida con una cantidad grande de memoria lenta para obtener la velocidad de la memoria rpida
(casi) y la capacidad de la memoria grande a un precio moderado. La memoria peque- a y rpida
se llama cach (del francs cacher, que significa guardar o esconder). A continua- cin
describiremos brevemente cmo se usan los cachs y como funcionan. En el captulo 4 se dar
una explicacin ms detallada.
La idea fundamental en que se basa la memoria cach es sencilla: las palabras de memo- ria
de mayor uso se mantienen en el cach. Cuando la CPU necesita una palabra, primero la busca
en el cach. Slo si la palabra no est ah recurre a la memoria principal. Si una frac- cin
sustancial de las palabras est en el cach, el tiempo de acceso promedio puede reducirse
considerablemente.
Cach
Bus
SEC. 2.2
67
MEMORIA PRIMARIA
Sin embargo, esta estrategia requiere que la bsqueda en la memoria pueda suspenderse si
hay un acierto en el cach, y esto complica la implementacin.
Con el principio de localidad como gua, las memorias principales y los cachs se dividen en bloques de tamao fijo. Al hablar de estos bloques dentro del cach, es comn usar el
trmino lneas de cach. Cuando hay un fallo de cach, toda la lnea de cach se carga de la
memoria principal al cach, no slo la palabra que se necesita. Por ejemplo, si las lneas son
de 64 bytes, una referencia a la direccin de memoria 260 traer la lnea que consiste en los
bytes 256 a 3 l 9 a una lnea de cach. Con un poco de suerte, pronto se necesitarn tambin
algunas de las otras palabras de esa lnea de cach. Operar as es ms eficiente que buscar
palabras individuales porque es ms rpido traer k palabras a la vez que traer una palabra k
veces. Adems, si las entradas del cach son ms grandes que una palabra habr menos de
ellas, y el gasto extra para manejarlas ser menor.
El diseo de cachs es un tema cada vez ms importante para el diseo de las CPU de
alto rendimiento. Un aspecto es el tamao del cach. Cuanto ms grande es el cach, mejor
funciona, pero tambin cuesta ms. Un segundo aspecto es el tamao de la lnea de cach. Un
cach de 16 KB puede dividirse en 1 K lneas de 16 bytes, 2 K lneas de 8 bytes, y otras
combinaciones. Un tercer aspecto es la organizacin del cach, es decir, cmo hace el
cach para saber qu palabras de memoria contiene en un momento dado? Examinaremos los
cachs con detalle en el captulo 4.
Un cuarto aspecto de diseo es si las instrucciones y los datos se guardan en el mismo
cach o en cachs distintos. Un diseo de cach unificado (instrucciones y datos en el
68
CAP. 2
DDDDDDD
Chip de
memoria
de4MB
Conector
Una configuracin de SIMM tpica podra tener ocho chips con 32 megabits (4 MB)
cada uno en el SIMM. As, todo el mdulo contendra 32 MB. Muchas computadoras tienen
espacio para cuatro mdulos, lo que da una capacidad total de 128 MB si son empleados
SIMM de 32 MB. En muchos casos estos SIMM pueden sustituirse posteriormente por SIMM
de 64 MB o ms grandes si es necesario.
Los primeros SIMM tenan 30 conectores y alimentaban 8 bits a la vez. Los dems
conectores eran para direccionamiento y control. SIMM posteriores tenan 72 conectores y
Por ms grande que sea Ja memoria principal, siempre es demasiado pequea. La gente siempre quiere almacenar ms informacin de Ja que cabe en la memoria, primordialmente porque, a medida que la tecnologa mejora, comienzan a pensar en almacenar cosas que antes
slo se les ocurran a los escritores de ciencia-ficcin. Por ejemplo, a medida que la disciplina presupuestaria del gobierno de Estados Unidos obliga a sus dependencias a generar sus
propias ganancias, podramos imaginar que la Biblioteca del Congreso decidiera digitalizar y
vender todo su acervo como artculo de consumo ("Todo el Conocimiento Humano por slo
SEC. 2.3
MEMORIA SECUNDARIA
Cach Memoria
69
49 dlares"). A muy grandes rasgos, seran unos 50 millones de libros, cada uno con 1 MB
de texto y 1 MB de ilustraciones comprimidas, y necesitaramos almacenar 1014 bytes:: 100
te- rabytes. Almacenar las casi 50,000 pelculas que se han filmado es una tarea de
magnitud comparable. Esta cantidad de informacin no va a caber en la memoria principal,
al menos no
en las prximas dcadas.
magntico
Cinta
70
principal Disco
CAP. 2
Disco ptico
Al bajar por lajerarqua, tres parmetros clave crecen. Primero, el tiempode acceso se alarga.
Los registros de la CPU pueden accederse en unos cuantos nanosegundos. Las memorias
cach requieren un mltiplo pequeo del tiempo de acceso de los registros. Los accesos a la
memoria
principal suelen
ser de unas cuantas
decenas de nanosegundos. Luego viene una brecha zran.
.
b
de, pues los tiemposde accesoa disco son de por lo menos 1 O rns, y el acceso a cinta o disco
ptico
puede medirse en segundos si es preciso traer los medios e insertarlos en una unidad.
Segundo, la capacidad de almacenamiento aumenta al bajar por la jerarqua. Los registros de la CPU pueden contener tal vez 128 bytes; los cachs unos cuantos megabytes; las
memorias principales decenas o miles de rnegabytes; los discos magnticos de unos cuantos
encogiendo. Una cabeza de disco que contiene una bobina de
induccin flota sobre la superficie y muy cerca de ella,
descansando en un colchn de aire (excepto en los discos
flexibles, en los que toca la superficie). Cuando una corriente
positiva o negativa pasa por la cabeza, magnetiza la superficie
justo debajo de ella, alineando las partculas magnticas hacia
la izquierda o hacia la derecha, dependiendo de la polaridad
de la corriente de la unidad. Cuando la cabeza pasa sobre un
rea magnetizada, se induce una corriente positiva o negativa
en la cabeza, lo que permite leer los bits almacenados previamente. As, el plato gira bajo la cabeza, puede escribirse una
serie de bits y luego leerse. La geometra de una pista de
disco se muestra en la figura 2-19.
2.3.2
Discos
magnticos
Un disco magntico consiste en uno o ms platos de aluminio con un
recubrimiento magnetizable. Originalmente estos platos llegaron a tener 50 cm
de dimetro, pero en la actualidad suelen ser de 3 a 12 cm, y algunos discos
para computadoras porttiles tienen dimetros de menos de 3 cm y se siguen
lectura/escr
itura
E
l
SEC. 2.3
a
n
c
h
o
71
d
e
un bit es de
0.1 a 0.2 micras
MEMORIA SECUNDARIA
Brazo
del
disco
Error-Correcting
Code), que puede ser un cdigo de Hamming o, ms
comnmente, un cdi- go capaz de corregir mltiples errores llamado cdigo
Reed-Solomon. Entre sectores conse- cutivos hay una pequea separacin entre
sectores. Algunos fabricantes citan la capacidad de sus discos en un estado sin
formato (como si cada pista contuviera nicamente datos), pero una medicin ms
honesta es la capacidad formateada, que no cuenta los prembulos, ECC ni
separaciones como datos. La capacidad formateada suele ser 15% menor que la
capacidad sin
formato.
Todos los discos tienen brazos mviles que pueden desplazarse hacia adentro
y hacia afuera hasta diferentes distancias radiales del eje sobre el que gira el plato.
A cada distancia radial puede escribirse una pista diferente. As, las pistas son una
serie de crculos concntricos alrededor del eje. La anchura de una pista depende del
tamao de la cabeza y de la exactitud con que sta puede ubicarse radialmente. Con
la tecnologa actual, los discos tienen entre 800 y 2000 pistas por centmetro, lo que
da anchos de pista del orden de 5 a 1 O micras (1 micra=
1/1000 mm). Cabe sealar que una pista no es un surco fsico en la superficie, sino
slo un anillo de material magnetizado, con delgadas reas protectoras que lo
separan de las pistas que estn ms adentro y ms afuera.
La densidad lineal de bits alrededor de la circunferencia de la pista es
diferente de la radial, y en buena medida est determinadapor la pureza de la
superficie y la calidad del aire. Los discos actuales alcanzan densidades de 50,000
a 100,000 bits/cm. Por tanto, un bit es unas 50 veces ms grande en la direccin
radial que a lo largo de la circunferencia. A fin de elevar la calidad de la superficie
y del aire, casi todos los discos se sellan en la fbrica para impedir la entrada de
polvo. Tales unidades se llaman discos Winchester. Las primeras uni- dades
(creadas por IBM) tenan 30 MB de almacenamiento fijo sellado y 30 MB de
almace- namiento removible. Supuestamente, estos discos 30-30 recordaban a la
gente los rifles Winchester 30-30 que tan importante papel desempearon en la
frontera de Estados Unidos, por lo que se conserv el nombre "Winchester".
Casi todos los discos consisten en varios platos apilados verticalmente, como
se muestra en la figura 2-20. Cada superficie tiene su propio brazo y cabeza.
Todos los brazos estn soldados juntos de modo que se mueven simultnemente a
una posicin radial dada. El con- junto de todas las pistas en una posicin radial
dada se llama cilindro.
El desempeo de los discos depende de diversos factores. Para leer o escribir
un sector, primero el brazo debe moverse a la posicin radial correcta. Esta accin
se denomina bs- queda (seek). Los tiempos de bsqueda promedio (entre pistas al
azar) son del orden de 5 a
15 ms, aunque se ha logrado bajar el tiempo de bsqueda entre pistas consecutivas
a menos
de 1 ms. Una vez que la cabeza est ubicada radialmente, hay un retraso, llamado
latencia rotacional en lo que el sector deseado gira hasta quedar bajo la cabeza.
Casi todos los discos giran a 3600, 5400 o 7200 rpm, as que el retardo medio
(media rotacin) es de 4 a 8 ms. En
errores (ECC,
el extremo superior hay discos que giran a 10,800 rpm (o sea, a 180 rotaciones/s).
El tiempo de transferencia depende de la densidad lineal y de la velocidad de
rotacin. Con las tasas de transferencia tpicas de 5 a 20 MB/s, un sector de 512
bytes tarda entre 25 y 100 s. Por consiguiente, el tiempo de bsqueda y la
latencia rotacional dominan el tiempo de transferen- cia. La lectura de sectores al
azar dispersos por todo el disco es obviamente una forma poco eficiente de operar.
il11
ORGANIZACIN DE LOS SISTEMAS DE COMPUTADORA
72
CAP.2
-- -
SEC. 2.3
MEMORIA SECUNDARIA
73
Cada unidad tiene asociado un controlador de disco, un chip que controla la unidad.
Algunos controladores contienen una CPU dedicado. Las tareas del controlador incluyen
aceptar comandos del software, como READ, WRITE y FORMAT (escribir todos los prembulos), controlar el movimiento del brazo, detectar y corregir errores, y convertir los bytes de
8 bits que se leen de la memoria en un flujo de bits en serie y viceversa. Algunos controladores
tambin colocan en buffers sectores enteros, colocan en cach sectores ledos que podran
usarse en el futuro, y mantienen el mapa de sectores defectuosos. Esta ltima funcin es
necesaria cuando hay sectores que tienen puntos magnetizados de forma permanente. Cuan- do
el controlador descubre un sector defectuoso, lo sustituye por uno de los sectores de repuesto reservados para este fin dentro de cada cilindro o zona.
brazo.
cia de un crculo, e= 2nr, veremos que las pistas exteriores comprenden una mayor distancia
lineal que las interiores. Puesto que todos los discos magnticos giran con una velocidad an
ular constante, sin importar dnde estn las cabezas, este hecho crea un problema. En las
unrdades viejas, los fabricantes utilizaban la densidad lineal mxima posible en la pista ms
interior, y densidades lineales de bits cada vez ms bajas en las pistas ms exteriores. Si un
disco tena 18 sectores por pista, por ejemplo, cada una ocupaba 20 grados de arco, sin importar en qu cilindro estuviera. .
. .
. .
. .
Hoy da se sigue una estrategia distinta. Los cilindros se dividen en zonas (por lo regular
de l O a 30 por unidad) y el nmero de sectores por pista se incrementa en cada zona a medida ue
sta se aleja de la pista ms interior. Este cambio dificulta seguirle la pista a la informaq.
'n
CIO , pero incrementa la capacidad de la unidad, lo cual se considera ms importante. Todos
los sectores tienen el mismo tamao. Por fortuna, algunas cosas de la vida nunca cambian.
nombre porque los primeros eran fsicamente flexibles. En realidad, IBM invent el disco
flexible para grabar informacin de mantenimiento acerca de sus mainframes para el personal de servicio, pero los fabricantes de computadoras personales pronto lo adoptaron como
una forma cmoda de distribuir y vender software.
Las caractersticas generales son las mismas que las de los discos que acabamos de
describir, excepto que, a diferencia de los discos duros, en los que las cabezas flotan sobre la
superficie en un colchn de aire en rpido movimiento, las cabezas de las unidades de disco s
tocan los disquetes. El resultado es que tanto los medios como las cabezas se desgastan con
comparativa rapidez. A fin de reducir el desgaste, las computadoras personales retraen las
cabezas y detienen la rotacin cuando una unidad no est leyendo o escribiendo. Por consiguiente, cuando se emite la siguiente orden de leer o escribir, hay un retraso de cerca de
medio segundo mientras el motor adquiere la velocidad necesaria.
Hay dos tamaos: 5.25 pulgadas y 3.5 pulgadas. Cada uno tiene una versin de baja densidad (LD) y una de alta densidad (HD). Los disquetes de 3.5 pulgadas estn protegidos con una
CAP. 2
74
LD 5.25"
HD 5.25"
LD 3.5"
HD 3.5"
Tamao (pulgadas)
5.25
5.25
3.5
3.5
Capacidad (bytes)
360K
1.2M
720K
1.44M
Pistas
40
80
80
80
Sectores/pista
15
18
Cabezas
Rotaciones/min
300
360
300
300
250
500
250
500
Flexible
Flexible
Rgido
Rgido
Parmetros
Tipo
cubierta rgida, as que no son realmente "flexibles". Puesto que los disquetes de 3.5" almacenan ms datos y estn mejor protegidos, prcticamente ya sustituyeron a los de 5.25", ms
viejos. En la figura 2-21 se muestran los parmetros ms importantes de los cuatro tipos.
MEMORIA SECUNDARIA
75
cilindro, pero al menos logra superar el lmite de los 528 MB. Las unidades y controladores
EIDE tienen tambin otras mejoras, como la capacidad de controlar cuatro unidades en lugar
de dos, una tasa de transferencia ms alta y la capacidad para controlar unidades CD-ROM.
Los discos IDE y EIDE eran originalmente slo para sistemas basados en Intel, ya que
la es una copia exacta del bus de la JBM PC. Sin embargo, hoy da unas cuantas
interfaz
computadoras ms los usan por su bajo precio.
aunque partes de la norma ya estn terminadas. Algunos fabricantes han implementado estas
partes y las usan para decir que cumplen con SCSI-3.
Puesto que los discos SCSI tienen tasas de transferencia altas, son el disco estndar en
casi todas las estaciones de trabajo UNIX de Sun, HP, SGI y otros fabricantes; tambin son el
disco estndar de las Macintosh y son comunes en las PC Intel actuales, sobre todo los servidores de red. En la figura 2-22 se dan los parmetros de algunas de las configuraciones ms
comunes.
Nombre
SCSl-1
SCSl-2
SCSl-2 rpido
SCSl-2 rpido y ancho
76
Bits.de datos
8
8
8
16
Frecuencia en MHz
MB/s
5
10
5
5
10
10
20
CAP. 2
El cable ms comn para SCSI de 8 bits tiene 50 hilos, 25 de los cuales son tierras
apareadas uno a uno con Jos otros 25 hilos para proporcionar Ja excelente inmunidad al
ruido que se necesita para el funcionamiento a alta velocidad. De Jos 25 hilos, ocho son
para datos, uno es para paridad, nueve son para control y los dems son para la potencia
o se reservan para usos futuros. Los dispositivos de 16 bits (y 32 bits) necesitan un
segundo cable para las seales adicionales. Los cables pueden tener varios metros de
longitud, lo que permite tener unidades de disco externas, escneres, etctera.
Los controladores y perifricos SCSI pueden operar sea como transmisores o bien
como receptores. Por lo regular el controlador, actuando como transmisor, emite
comandos a dis- cos y otros perifricos que actan como receptores. Estos comandos son
bloques de hasta 16 bytes que le dicen al receptor qu debe hacer. Los comandos y
respuestas se dan en fases, utilizando diversas seales de control para delimitar las fases
y arbitrar el acceso al bus cuando varios dispositivos estn tratando de usar el bus al
mismo tiempo. Este arbitraje es importante porque SCSI permite a todos los dispositivos
operar al mismo tiempo, lo que podra mejorar considerablemente el desempeo en un
entorno en el que varios procesos estn activos simul- tneamente (por ejemplo, UNIX o
Windows NT). IDE y EIDE slo permiten un dispositivo activo a la vez.
2.3.6
RAID
El desempeo de las CPU se ha aumentado exponencialmente durante la dcada pasada,
duplicndose aproximadamente cada 18 meses. No ha sucedido lo mismo con el
desempeo de los discos. En los aos setenta los tiempos de bsqueda promedio
en discos para minicomputadora eran de 50 a 100 ms. Hoy esos tiempos son de 10
ms. En casi todas las industrias tcnicas (digamos la de automviles o de aviacin) un
mejoramiento en el desem- peo por un factor de 5 a l O en dos dcadas sera una noticia
excelente, pero en la industria de las computadoras es vergonzoso. As, Ja brecha entre el
desempeo de Ja CPU y el del disco ha aumentado con el tiempo.
Como hemos visto, el procesamiento en paralelo se est utilizando cada vez ms
para
Ultra SCSI
16
20
40
SCSI es algo ms que una interfaz de disco duro; es un bus al que pueden conectarse un
controlador SCSI y hasta siete dispositivos. stos pueden incluir uno o ms discos duros
SCSI, CD-ROM, grabadoras de CD, escneres, unidades de cinta y otros perifricos SCSI.
Cada dispositivoSCSI tiene un identificadornico, de O a 7 ( 15 en el caso de SCSI ancho).
Cada dispositivo tiene dos conectores: uno para entrada y otro para salida. La salida de un
disposi- tivo se conecta a la entrada de otro con cables, en serie, como en una serie barata
de focos navideos. El ltimo dispositivo en la serie debe terminarsepara evitar que las
reflexionesde los extremos del bus SCSI interfieran con otros datos que van sobre el bus.
Por lo regular el controlador est en una tarjeta insertable que es el principio de la cadena de
cables, aunque la norma no exige estrictamente esta configuracin.
SEC. 2.3
MEMORIA SECUNDARIA
77
acelerar el funcionamiento de las CPU. A varias personas se les ha ocurrido que la E/S o,
paralela tambin podra ser una buena idea. En su artculo de 1988, Patterson et al. precio
sugirieron seis organizacionesde disco especficas que podranservir para mejorar el bajo y la
capacida
desempeo de los discos,
d para
conectar
hasta
siete
unidades
a un solo
controla
dor ( 15
en
el
caso de
SCSI
ancho),
es
natural
que
la
mayor
parte de
Jos
RAID
conste
de
un
controla
dor
RAID
SCSI
ms una
caja de
discos
SCSI
que el sistema operativo ve como un solo disco grande. De este modo, no se requieren
cambios al software para usar el RAID, un punto importante para convencer a los
administradores de sistemas de comprarlo.
Adems de aparentar ser un solo disco ante el software, todos los RAID tienen la
propie- dad de que los datos se distribuyen entre todas las unidades, a fin de permitir la
operacin en paralelo. Patterson y otros autores definieron varios esquemas para hacerlo y
ahora se cono- cen como RAID nivel O hasta RAID nivel 5. Adems, existen algunos
niveles menores que no se discutirn. El trmino "nivel" es un tanto engaoso porque
no existe una jerarqua; simplemente hay seis posibles organizaciones distintas.
RAID nivel O se ilustra en la figura 2-23(a), y consiste en ver el disco nico virtual
simulado por el RAID como si estuviera dividido en tiras (strips) de k sectores cada una,
con
Jos sectores O a k - 1 en Ja tira O, los sectores k a 2k - 1 en la tira 1, etc. Para k = 1, cada
tira es un sector; para k = 2, una tira es dos sectores, etc. La organizacin RAID nivel O
escribe
tiras consecutivas en las unidades por tumo circular, como se muestra en la figura 223(a) para un RAID con cuatro unidades de disco. La distribucin de datos entre varias
unidades de esta forma se llama striping (multiplexaje de datos). Por ejemplo, si el
software emite un comando para leer un bloque de datos que consiste en cuatro tiras
consecutivas que comienzan en una frontera de tira, el controladorde RAID desglosar
este comando en cuatro comandos individuales, uno para cada uno de los cuatro discos, y
los har operar en paralelo. As tene- mos E/S en paralelo sin que el software se entere de
ello.
El RAID nivel O funciona mejor cuando Ja solicitud de datos es grande, mientras
ms grande mejor. Si una solicitud es mayor que el nmero de unidades multiplicado por
el tama- o de una tira, algunas unidades recibirn varias solicitudes, de modo que cuando
terminan de atender la primera solicitud comienzan a atender la segunda. Corresponde al
controlador dividir en partes la solicitud y alimentar los comandos apropiados a los discos
correctos en la secuencia debida, y luego ensamblar los resultados correctamente en la
memoria. El desem- peo es excelente y la implementacin es sencilla.
El peor funcionamiento de RAID nivel O se obtiene con sistemas operativos que
acos- tumbran solicitar datos sector por sector. Los resultados son correctos, pero no hay
paralelis- mo y por tanto no mejora el desempeo. Otra desventaja de esta organizacin
su confiabilidad o ambas cosas (Patterson et al., 1988). La industria adopt rpidamente
estas ideas y han dado pie a una nueva clase de dispositivo de E/S llamado RAID.
Patterson et al.
definieron a RAID como una formacin redundante de discos de bajo costo
(Redundant
Array of Inexpensive Disks), pero la industria redefini la "I" de modo que significara
"inde- pendientes" en lugar de "de bajo costo" (tal vez as podran usar discos caros").
Puesto que tambin se necesitaba un villano (como en RISC versus CISC, tambin debido
a Patterson), el malo aqu fue el SLED (disco nico, grande y costoso, Single Large
Expensive Disk).
La idea en que se basa RAID es instalar una caja llena de discos junto a la
computadora,
que por lo regular es un servidor grande, sustituir la tarjeta del controlador de disco por
un controladorde RAID, copiar los datos en el RAID, y continuar con las operaciones
normales. En otras palabras, el sistema operativo vea el RAID como si fuera un SLED,
es que la confiabilidad podra ser peor que si se tuviera un SLED. Si un RAID consta de
cuatro discos,
,.'.('.
,,,. ,
v .. ~
r.:-1
c..:;
""
;~:-.
'-
-1
'-#
'
-=~
cada uno con un tiempo medio antesde fallo de 20,000horas, una unidad fallar
aproximadamente
una vez cada 5000 horas y se perdern totalmente los datos. Un SLED con un tiempo
medio
r
t:
-c ".'.
b"1
..
'~~
:>
:::i~
'
,?
'.r.~
;:-,
-:
;..~,
r;~
C1
slo que el desempeo y la confiabilidad mejoraban. Puesto que los discos SCSI tienen antes de
fallo de
buen desempe20,000
horas
sera
cuatro
veces
ms
confiable.
Dado
que este
diseo
no
unidades. Por consi- guiente, el desempeo de escritura no es mejor que con una sola
unidad, pero el desempeo de lectura puede ser hasta dos veces mejor. La tolerancia de
fallos es excelente: si una unidad se descompone, simplemente se usa la copia. La
recuperacin consiste en instalar una nueva unidad y copiar en ella el contenido de la
unidad de respaldo.
'.J,..;
zJ
CJ
..
'
fl!U
78
CAP. 2
A diferencia de los niveles O y 1, que funcionan con tiras de sectores, RAID nivel 2
funciona con base en palabras, posiblemente incluso con base en bytes. Imagine dividir
cada
byte del disco virtual nico en un par de "nibbles" de cuatro bits, y luego agregar un cdigo
de Hamming a cada uno para formar una palabra de siete bits, de la cual los bits 1, 2 y 4 son
bits de paridad. Imagine adems que las siete unidades de la figura 2-23(c) se sincronizan
en trminos de posicin del brazo y posicin rotacional. Entonces sera posible escribir la
pala- bra de siete bits con cdigo de Hamming distribuida en las siete unidades, un bit por
unidad.
La computadora CM-2 de Thinking Machines usaba este esquema, tomando palabras
de
datos de 32 bits y aadiendo seis bits de paridad para formar una palabra de Hamming de 38
bits, ms un bit extra para la paridad de palabras, distribuyendo cada palabra entre 39
unidades de disco. El rendimiento total era inmenso, porque en un tiempo de sector se
podan escribir 32 sectores de datos.Adems, perder una unidad no causaba problemas,porque
equivala a perder un bit de cada palabra de 39 bits leda, algo que el cdigo Hamming poda
manejar sobre la marcha.
En el lado negativo, este esquema requiere que todas las unidades estn sincronizadas
rotacionalmente, y slo tiene sentido si el nmero de unidades es considerable (aun con 32
unidades de datos y 6 unidades de paridad, el gasto extra es de 19% ). Tambin se exige
mucho al controlador, ya que debe efectuar una suma de verificacin de Hamming cada
tiempo de bit.
RAID nivel 3 es una versin simplificada de RAID nivel 2, y se ilustra en la figura
2-23(d). Aqu se calcula un solo bit de paridad para cada palabra de datos y se escribe en
una unidad de disco de paridad. Al igual que en el RAID nivel 2, las unidades deben
estar sincronizadas con exactitud, puesto que las palabras de datos individuales se
distribuyen
entre varias unidades.
A primera vista, podra parecer que un solo bit de paridad permite detectar errores, pero
no corregirlos. En el caso de errores aleatorios no detectados esta observacin es correcta,
pero en el caso de una unidad que se descompone ofrece plena correccin de errores de un
bit, ya que se sabe la posicin del bit errneo. Si una unidad falla, el controlador
simplemente supone que todos sus bits son O. Si una palabra tiene error de paridad, el bit
de la unidad inactiva tiene que haber sido un 1, as que se corrige. Aunque ambos niveles de
RAID, 2 y 3, ofrecen tasas de datos muy altas, el nmero de solicitudes de E/S distintas que
pueden mane- jar por segundo no es mayor que con una sola unidad de disco.
Los niveles RAID 4 y 5 trabajan otra vez con tiras, no palabras individuales con
paridad,
y no requieren unidades sincronizadas. RAID nivel 4 [vea la figura 2-23(e)] se parece a
RAID nivel O, slo que se escribe una paridad tira por tira en una unidad extra. Por ejemplo,
si cada tira tiene k bytes de longitud, se calcula el OR EXCLUSIVO de todas las tiras para
obtener una tira de paridad de k bytes. Si una unidad falla, los bytes perdidos se pueden
recalcular a partir de la unidad de paridad.
Este diseo protege contra la prdida de una unidad de disco pero tiene un
desempeopobre
(a)
79
MEMORIA SECUNDARIA
SEC. 2.3
Tira O
Tira 1
Tira 2
Tira 3
Tira 4
Tira 5
Tira 6
Tira 7
Tira 8
Tira 9
Tira 10
Tira 11
RAID nivel O
RAID
nivel 1
(b)
B
7
en el caso de actualizacionespequeas. Si un
sector se modifica,es necesario leer todas las
unida- des para recalcular la paridad, que luego
debe reescribirse.Como alternativa, se pueden
leer los datos del usuarioy de paridad antiguos
y recalcularJa nueva paridad a partir de ellos.
Inclusocon
esta
optimacin,una
actualizacinpequea
requiere
dos lecturas y dos escrituras.
RAID nivel 2
RAID nivel 3
(e)
RAID nivel 4
(f)
RAID nivel 5
,...
,e e:;
<.;.
f-
cr; ::::.:
tf ~
,. _,
-
~
t.it
Lo pesado de la carga sobre la unidad de disco de paridad podra hacer que sta se
convirtiera en un cuello de botella. Esto se resolvera en el RAID nivel 5 distribuyendo los
80
CAP. 2
bits de paridad de manera uniforme entre todas las unidades, por turno circular, como se muestra en
la figura 2-23(f). Sin embargo, si una unidad fallara, la reconstruccin de su contenido sera un
proceso complejo.
2.3.7 CD-ROM
En aos recientes han aparecido discos pticos (no magnticos) cuya densidad de grabacin es mucho
mayor que la de los discos magnticos convencionales. Los discos pticos se crea- ron originalmente
para grabar programas de televisin, pero se les puede dar un uso ms esttico como dispositivos de
almacenamiento para computadora. A causa de su capacidad, que puede ser enorme, los discos
pticos han sido tema de muchas investigaciones y han sufrido una evolucin increblemente rpida.
Los discos pticos de primera generacin fueron inventados por el conglomerado de
electrnica holands Philips para grabar pelculas. Tenan 30 cm de dimetro y se vendan con el
nombre LaserVision, pero no se popularizaron fuera de Japn.
En 1980 Philips, junto con Sony, desarroll el CD (disco compacto, Compact Disc), que
rpidamente sustituy al disco de vinilo de 33 1/3 rpm para msica grabada. Los detalles tcnicos
precisos del CD se publicaron en una Norma Internacional oficial (IS 10149) cono- cido
popularmente como el Libro Rojo, por el color de su portada. (Las Normas Internacio- nales son
emitidas por la Organizacin Internacional de Estandarizacin, que es la contraparte internacional de
los grupos nacionales de normas como ANSI, DIN, etc. Cada una tiene un nmero IS.) Lo que se
buscaba al publicar las especificaciones del disco y la unidad como Norma Internacional fue permitir
que un CD de diferentes editores de msica y reproductores de diferentes compaas electrnicas
funcionaran juntos. Todos los CD tienen 120 mm de dimetro y 1.2 mm de espesor, con un orificio
central de 15 mm. El CD de audio fue el primer medio de almacenamiento digital que tuvo xito en el
mercado masivo. Se supone que los CD duran 100 aos. No olvide preguntar en 2080 qu tan bueno
sali el primer lote.
Un CD se prepara utilizando un lser de infrarrojo de alta potencia para quemar orificios
de 0.8 micras de dimetro en un disco maestro de vidrio recubierto. Este disco maestro sirve para
hacer un molde, con salientes en donde estarn los orificios del lser. En este molde se inyecta resina
de policarbonato fundida para formar un CD con el mismo patrn de orificios que el mster de vidrio.
Luego se deposita una capa muy delgada de aluminio reflejante sobre el policarbonato, seguida de una
laca protectora y finalmente una etiqueta. Las depresiones en el sustrato de policarbonato se llaman
fosos (pits); las reas no quemadas entre los fosos se llaman lands.
Durante la reproduccin, un diodo lser de baja potencia dirige luz infrarroja con una
longitud de onda de 0.78 micras hacia los fosos y lands que van pasando. El lser incide en el lado del
policarbonato, por lo que los fosos se proyectan hacia el lser como salientes de una superficie por lo
dems plana. Dado que los fosos tienen una altura de una cuarta parte de la longitud de onda de la luz
lser, la luz que se refleja de un foso est defasada media longitud de onda respecto a la luz que se
:"::"
>"
Figura2-23. RAID niveles O a 5. Las unidades de respaldo y paridad se muestran
sombreadas.
SEC. 2.3
MEMORIA SECUNDARIA
81
Aunque podra parecer que lo ms fcil es usar un foso para registrar un O y un Jand para registrar
un 1, es ms confiable utilizar una transicin foso/land o land/foso para registrar un
1, y su ausencia para registrar un O, y ste es el esquema que se usa.
Los fosos y lands se escriben en una sola espiral continua que comienza cerca del aguje- ro y
llega hasta una distancia de 32 mm del borde. La espiral describe 22, 188 revoluciones alrededor del
disco (unas 600 por mm). Si se desenrollara, tendra una longitud de 5.6 km. La espiral se ilustra en
la figura 2-24.
Surco espiral
Foso
Land
Para poder reproducir la msica con una rapidez uniforme es preciso que los fosos y lands pasen
bajo el lser con una velocidad lineal constante. Por consiguiente, es preciso reducir continuamente
la rapidez de rotacin del CD a medida que la cabeza de lectura se mueve del interior del CD hacia el
exterior. En el interior, la rapidez de rotacin es de 530 rpm para lograr la velocidad lineal deseada de
120 cm/s; en el exterior tiene que bajar a 200 rpm para dar la misma velocidad lineal en la cabeza. Una
unidad de disco con velocidad lineal constante es muy diferente de una unidad de disco magntico,
que opera a velocidad angular constante, independiente de la posicin de la cabeza. Adems, 530 rpm
es muy diferente de las 3600 a
7200 rpm con que gira la mayor parte de los discos magnticos.
En 1984, Philips y Sony se percataron del potencial que tenan los CD para almacenar datos de
computadora, as que publicaron el Libro Amarillo que define una norma precisa para lo que ahora
llamamos CD-ROM (disco compacto-memoria slo de lectura, Compact Disc - Read Only
Memory). A fin de aprovechar el para entonces floreciente mercado de los CD de audio, los CD-ROM
tendran el mismo tamao fsico que los CD de audio, seran mecnica y pticamente compatibles
con ellos, y se produciran empleando las mismas m- quinas de moldeo por inyeccin de
policarbonato. Las consecuencias de esta decisin fueron
""'
82
ORGANIZACIN DE
S
E
MEMORIA
SECUNDARIA
83
LOS SISTEMAS DE
COMPUTADORA
como se muestra en la
figura 2-25. Cada
sector de CD-ROM
comienza con un
premb~lo de
16 bytes, de los cuales
los primeros 12 son
OOFFFFFFFFFFFFFFF
FFFFFOO
(hexa~ec~mal), para que
el reproductor pueda
reconocer el inicio de
u~ sector de CDROM. Los siguientes
tres bytes contienen el
nmero de sector, que
es necesano por~ue
buscar~~ un CD-ROM.
con su espiral de datos
nica es mucho ms
difcil que en un
disco magnetico ~on
sus pistas concntricas
uniformes. Para
buscar, el software de
la unidad calcula
aproximadamente a
dnde debe mover la
cabeza, coloca la
cabeza ah, y comienza
a buscar un prembulo
para ver cun cerca
est de donde debera
estar. El ltimo byte
del prembulo es el
modo.
Smbolos de
CJ
CJ
CJ
CJ
CJ
CJ
14
bits
cada
uno
(
\2 ,;
mbol;,.
forman
un
cuadro
Cuadros de 588 bits,
b
y
t
e
s
(
1
,
0
4
8
,
5
7
6
b
y
t
e
s
),
no
1,000,
000
bytes
.
Cabe sealar que ni siquiera una unidad CDROM 32x (4,915,200
bytes/s) es rival para una
unidad de disco magntico SCSI-2 rpida que
opera a 10 MB/s, aunque muchas unidades CDROM utilizan la interfaz SCSI (tambin existen
unidades CD-ROM IDE). Si nos damos cuenta de
que el tiempo de bsqueda suele ser de varios
cientos
de milisegundos,
es evidente que las
unidades de CD-ROM no estn en la misma
categora
de desempeo
que las de disco
magntico, a pesar de su gran capacidad.
En 1986, Philips dio un nuevo golpe con el
Libro Verde, que aada grficos y la capa- cidad
para intercalar audio, video y datos en el mismo
sector, funcin indispensable en los CD-ROM de
multimedia.
CJC]CJCJClCJ
ClCl
ClCJCJCJCJCJ
ClCl
Prembulo
98 Cuadros
forman 1 sector
cada
uno
de
los
cuale
s
c
o
n
t
i
e
n
e
2
4
b
y
t
e
s
d
e
Ll.~~~~~~~
~t_o_s~~~~~~
d
a
t
o
s
S
ec
to
r
~--'--;:::';:;:--'(2352bytes
) Bytes 16
2048
ECC
288
de modo 1
c
u
a
l
Figura 2-25.
Organizacin
lgica de
datos en un
CD-ROM.
quier
otra computadora.
Los
productores de CD-ROM consideran
esta propiedad
como
una gran
ventaja.
IS 9660 nivel 2 permite nombres de
hasta 32 caracteres, y el nivel 3 permite
archivos no contiguos. Las extensiones
Rock Ridge (nombre que se les dio
caprichosamente para recor- dar el pueblo
que sale en la pelcula Blazing Saddles
de Gene Wilder) permiten nombres muy
largos (para UNIX), UID, GID y vnculos
simblicos, pero los CD-ROM que no se
ajustan al nivel 1 no pueden leerse en
todas las computadoras.
Los CD-ROM se han vuelto
extremadamente populares para publicar
juegos, pelculas, enciclopedias, atlas y
obras de referencia de todo tipo. Casi
todo el software comercial se vende
ahora en CD-ROM. Su combinacin de
alta capacidad y bajo costo de fabricacin
los hace ideales para un sinnmero de
aplicaciones.
rr
IT
.
'.
84
C
A
ME
85
MO
RIA Etiqueta impresa
SEC
UN
DA
RIA
S
E
ORGANIZACIN DE LOS
SISTEMAS DE
COMPUTADORA
2.3.8 CD
grabables
Inicialmente,
el
equipo
requerido para producir un
mster de CD-ROM (o de un
CD de audio, para el caso) era
extremadamentecostoso. Pero
como suele suceder en la
industriade la compu- tacin,
todos Jos preciosbajan tarde o
temprano. Para mediadosde los
noventa las grabadoras de CD
no ms grandes que un
reproductorde CD, eran un
perifricocomn que poda
adquirirseen casi
cualquier
tienda de computacin. Estos
dispositivos seguan siendo
diferentes de los discos
magnticos porque, una vez
escritos, los CD-ROM no
podan borrarse. No obstante,
encontra- ron rpidamenteun
nicho
como
mediode
respaldoparadiscos
durosgrandesy
tambinpermitieron
a
individuos
o
compaas
incipientes fabricar sus propios
CD-ROM
en
cantidades
pequeas
o producir msters
para entregara plantas de
duplicacinde CD comerciales
de alto volumen.Estas
u
n
i
d
a
d
e
s
s
e
d
e
n
o
m
i
n
a
n
C
D
R
(
C
D
g
r
a
b
a
b
l
e
s
,
C
D
R
e
c
o
r
d
a
b
l
e
s
)
.
en la capa de oro.
Para escribir, el lser
del CD-R se alimenta
con alta potencia (816 mW). Cuando el
haz incide sobre un
punto con colorante,
lo calienta y rompe
uno de sus enlaces
qumicos.
Este
cambio
en
la
estructura molecular
crea un punto oscuro.
Durante
la
reproduccin (a 0.5
mW), el fotodetector
percibe
una
diferencia entre los
puntos oscuros donde
el
colorante
fue
quemado y las reas
transparentes donde
est intacto. Esta
diferencia
se
interpreta como la
diferencia entre fosos
y lands, cuando se
reproduce con un
lector de CD-ROM
normal
o con un
reproductor de CD de
audio.
Un tipo nuevo
de CD sentira
una vergenza
enorme si no
tuviera su
propio libro de
color, as que el CDR tiene el Libro
Anaranjado, que se
public en 1989.
Este
documento
define el CD-R y
tambin un nuevo
formato, CD-ROM
XA, que permite
escribir los CD-R de
forma incremental:
unos cuantos sectores
hoy, otros pocos
maana, y unos ms
.._de
Direccin
movimiento
F
o
t
o
d
e
t
e
c
t
o
r
P
r
i
s
m
a
Diodo
lser
infrarro
jo
86
SISTEMAS
CAP.2
DE
ORGANIZACIN DE LOS
COMPUTADORA
2
.
3
.
9
C
D
r
e
e
s
c
r
i
b
i
b
l
e
s
2
.
3
.
1
0
D
V
D
El formato de CD/CD-ROM bsico se
estableci desde 1980. Desde entonces la
tecnologa ha mejorado y ha hecho factibles
SEC. 2.3
MEMORIA SECUNDARIA
87
venda mucho, y un gran nmero de
compaas de computacin quieren aadir
caractersticas multimedia a su software.
Esta combinacin de tecnologa y
demanda por parte de tres industrias
inmensamente ricas Y poderosas ha dado
origen al DVD, que originalmente era un
acrnimo de videodisco digital (Digital
Video Disc) pero ahora significa
oficialmente disco digital verstil
(Digital Versatile Disc). Los DVD tienen
el mismo diseo general que los CD,
con discos de policarbonato de 120 mm
moldeados por inyeccin que contienen
fosos y lands y que se ilumi- nan con un
diodo lser para ser ledos por un
fotodetector. Lo que es nuevo es el uso de
l. Fosos ms pequeos (0.4 micras
en lugar de 0.8 micras para los CD).
2. Una espiral ms cerrada (0.74
micras entre pistas en lugar de 1.6
micras para los
CD).
3. Un lser rojo (de 0.65 micras en
vez de 0.78 micras para los CD).
Juntas, estas mejoras multiplican la
capacidad siete veces, a 4.7 GB. Una
unidad de DVD lx opera a 1.4 MB/s
(comprese con 150 KB/s para los CD).
Desafortunadamente
el cambio a los
lseres
rojos empleados
en los
supermercados
implica
que los
reproductores'
de DVD requieren
un
segundo lser o una ptica de conversin
precisa para poder leer los CD y CD-ROM
existentes,
algo que tal vez no hagan
algunos de ellos. Adems, quiz podran
no leerse los CD-R y los CD-RW en una
unidad DVD.
88
ORGANIZACIN DE LOS
SISTEMAS DE COMPUTADORA
CAP. 2
3.
4.
SEC.
ENTRADA/SALIDA
2.4
89
2
.
4
E
N
T
R
A
D
A
/
S
A
L
I
D
A
Como mencionamos al principio del captulo,
un sistema de computacin tiene tres componentes principales:
la CPU, las memorias
(primaria y secundaria) y el equipo de E/S
(entrada/ salida, Input!Output) que incluye
impresoras, escneres y mdems. Ya hemos
hablado de la CPU y las memorias. Ha
llegado el momento de examinar el equipo
de E/S y ver cmo se
c
o
n
e
c
t
a
c
o
n
e
l
r
e
s
t
o
d
e
t
e
m
a
.
s
i
s
1
Dis
co
de
0.6
mm
de
un
sol
o
lad
o
Capa
2.4.1 Buses
semirreflejante
Reflector
de aluminio
Reflector
de aluminio
Capa
Dis
co
de
0.6
mm
de
un
sol
o
lado
Sustrato de policarbonato 2
s
e
c
u
l
a
s
(
c
u
y
a
r
e
l
Controlador SCSI
Caja de tarjetas
Conector de
arista
"'''
SEC. 2.4
ENTRADNSALIDA
90
91
ORGANIZACIN DE LOS
SISTEMAS DE COMPUTADORA
CAP. 2
Mo
nito
r
O:
Unidad
Unidad
fms-
Teclado
disquete
duro
~~\-
.....
"
cG
?
1
CP
U
Me
mori
a
Controlado
r
Controla
dor de
video
de
teclado
Control
ador
Control
ador
d
e
de
disc
o
disq
uete
dur
o
,
Figura 2-29.
Estructura lgica
de una
computadora
personal sencilla.
La tarea de un controlador
es dominar su dispositivo de
E/S y manejar su acceso al
bus. Por ejemplo, cuando un
efectuando E/S, la
CPU
puede
aprovechar todos los
ciclos de bus para
hacer referencia a la
memoria. Pero si
tambin
est
funcionando
un
dispo- sitivo de E/S,
ste solicitar el bus
cuando lo necesite, y
se le otorgar. Este
proceso se llama robo
de ciclos y hace ms
lenta
a
la
computadora.
Este diseo
funcionaba bien
en las primeras
computadoras
personales,
porque todos los
componentes estaban
ms
o
menos
balanceados. Pero a
medida que aument
la rapidez de las CPU,
memorias
y
dispositivos de E/S,
surgi un problema: el
bus ya no poda
manejar la carga que
se le presentaba. En
un sistema cerrado,
como una estacin de
trabajo de ingeniera,
ORGANIZACIN DE LOS
SISTEMAS DE COMPUTADORA
CAP. 2
C
~
Escner
SCSI
PP
u C
I
e
n
Disco t Cont.
SCSI e SCSI
2
.
4
.
2
T
e
r
m
i
n
a
l
e
s
Las
terminales
de
computadoraconstande dos partes: un
teclado y un monitor.En el mundo de las
mainframes,estas partes a menudo se
integran en un solo dispositivo y se
conectan
a
la
computadoraprincipalcon una lnea en serie o
una lnea telefnica. En las industrias de
las reservaciones de vuelos, bancos y
otras que estn orientadas hacia
mainframes, estos dispositivos se siguen
usando ampliamente. En el mundo de las
computadoras personales el teclado y el
monitor
son
dispositivos
independientes.En ambos casos, la
tecnologade las dos partes es la misma.
SEC. 2.4
ENTRADNSALIDA
93
Bus de
memoria
Bus
SCSI
Monitores de CRT
Memoria
~zt::m:zj principal
Un monitor c
es una caja o2
que
contiene un
CRT (tubo
de
rayos
catdicos,
Cathode
Ray Tube) y
sus fuentes
de potencia.
El
CRT
mc
oo
nl
io
tr
o
rt
ei
se
n
ae
n
Can de electrones
Tecl
ado
s
(
a
Barrido
horizontal
P
u
n
t
o
e
n
l
a
p
a
n
t
a
ll
a
f.;~
,; 1
Bar
rido
de
regre
so
vertic
al
Barri
do de
regreso
( horizont
b
al
V
a
c
94
ORGANIZACIN DE LOS
SISTEMAS DE COMPUTADORA
CAP.2
Pantallas planas
Los CRT son demasiado voluminosos y
pesados para usarse en computadoras
porttiles, y es por ello que se emplea una
t
r
o
d
o
SEC. 2.4
ENTRADNSALIDA
95
Cristal lquido
Placa de vidrio trasera
t
r
a
s
e
r
o
E
l
e
c
F
i
Electrodo delantero
Filtro polarizante delantero
'
'
-
f
\
1
/
Computadora porttil
(
b) (a)
~
/
F
u
e
n
t
e
d
e
l
u
z
Construccin de una
pantalla LCD. (b) Los
surcos de las placas
delantera y trasera son
mutuamente
perpendiculares.
C
A
96
ORGANIZACIN DE LOS
S
E
ENTRADNSALIDA
97
SISTEMAS DE
COMPUTADORA
Terminales de mapa de
caracteres
nmente tres
Com
Stipos
de terminales:
de mapa
e usan
de caracteres, de mapa de bits
Y
l
a
f
o
r
m
a
e
n
q
u
e
.,
. .
_
la computadora se comunica
con ellas y en el manejo de
las
salidas.
A
contmuac10ndescribi
remos brevemente cada clase.
.
,
1
En una computadora
personal hay dos formas
de organizar las salidas
que,se envan a a
antalla: un mapa de
caracteres y un mapa de bits.
La figura 2-33 muestra como
.se us.a.un
~apa de caracteres para exhibir
salidas en el monitor. (El
teclados~ trata como un
~:spos1tivo
t
talmente
independiente.) En la tarjeta de
comunicaciones en sene hay
una porcion de me- moria,
llamada memoria de video,
adems de algunos circuitos
para acceder al bus Y generar
s
e
l
e
s
d
e
v
i
d
e
o
.
Carct
er
At nbut
o
Mem
oria
~
Tarieta
C
P
U
p
ri
n
c
i
p
a
l
d
e
v
i
d
e
o
M
o
n
it
o
r
"'
A 2B2C2
rl
...
~-''
:cc1
>
}
R
A
M
d
e
v
i
d
e
o
.
z
'<
;o
;:.i :t
'l
Figura 2-33.
Salidaen una
terminalde una
computadoraperson
al.
L]
utilizan
un
una
nmero de 8 bits
para indicar el
'.'.l
Para exhibir caracteres, la
CPU los copia en la memoria
de video en bytes altem.a~os.
Cada carcter tiene asociado
un byte de atributo
que
~escrib~ la ~ormaen que debe
exhiblfs~ el carcter. Los
atributos pueden incluir su
color, intensidad, st esta
parpade~do o n~, etc. As1,
caracteres
de pantalla
de 25 x
80
4000
derequiere
memoria de
video,bytes
. 2000 imagen
, y 2000 para
para.filos caracteres
los atributos. Casi todas las
tarjetas tienen mas memona, a
m
d
e
m
a
n
t
e
n
e
r
v
a
r
i
a
s
i
m
g
e
n
e
s
d
e
p
a
n
t
a
l
l
analgica de alta
frecuencia
que
controla el barrido
del haz de e~ectrones
qu~ pmta os caracteres en la pantalla.
Puesto que la tarjeta
genera u~a se~al de
_video, el momtor
debe estar a unos
cuantos metros de la
computadora a fin de
evitar distors10nes.
T
e
r
m
i
n
a
l
e
s
d
e
m
a
p
a
d
e
b
i
t
s
Una variacin de esta idea es
ver la pantalla no como una
matriz de car.acteres,25 x 80,_
sino
in de elementos
de imagen
Cada pixel
esta
encendidopixeles.
o ormaci
como una llamados
.U
1'
.:
98
ORGANIZACIN DE LOS
SISTEMAS DE
COMPUTADORA
CAP. 2
ALIDA
SEC. 2.4
ENTRADNS
99
(scroll). Un mtodo
sera copiar todos los
bits en software, pero
esto impone una
carga gigan- tesca a la
CPU. Es natural que
muchas tarjetas de
video estn equipadas
con hardware especial para desplazar
partes de la pantalla
modificando
registros base en vez
de por copiado.
T
e
r
m
i
n
a
l
e
s
R
S
2
3
2
C
Docenas
de
compaas
fabrican
computadoras y
muchas
ms
fabrican
terminales (sobre todo para
mainframes). Con el fin de
lograr que (casi) cualquier
terminal pueda usarse con
(casi) cualquier computadora,
la Electronics
Industries
Association (EIA) cre una
interfaz estndar computadoraterminal llamada RS-232-C.
Cualquier
terminal
que
C
o
n
e
c
t
o
r
R
S
2
3
2
C
Termin
al
Lnea
telef
a
(analg
a)
luego se exhibe en la
pantalla. Las entradas
del teclado de la
terminal se someten a
una
conversin
paralelo- serie en la
terminal y el UART
las reensambla en la
computadora.
La norma RS232-C define casi 25
seales, pero en la
prctica slo se usan
unas cuantas (y casi
todas esas pueden
omitirse cuando la
terminal se conecta
directamente a la
compu- tadora sin
mdems).
Las
terminales 2 y 3 son
para transmitir
y
recibir
datos,
respectivamente. Cada
terminal maneja un
flujo de bits en un
sentido. Cuando se
enciende la terminal o
computadora,
habilita (es decir,
pone en 1) la seal de
(Lista Terminal de
Datos) para informar
al mdem que est
encendida. Por su parte,
el mdem habilita la
seal de Data Set
Ready para
Mdem
Mdem
i
Tecla
do~~
=~~~
Algun
as
seal
es:
T
i
e
r
r
a
p
r
o
t
e
c
t
o
r
a
(
P
r
o
t
e
c
t
i
v
e
g
r
o
u
n
d
)
(
1
)
Transmitir (Transmit)
---
-(2)
--Recibir (Receive)(3)
-Solicitud de envo
(Request to send)(4)
--Despejado para
enviar {Clear to send)(5)
C
o
n
j
u
n
t
o
d
e
d
a
t
o
s
l
i
s
t
o
(
D
a
t
a
s
e
t
r
e
a
d
y
)
(
6
)
R
e
t
o
r
n
o
c
o
m
n
(
C
o
m
m
o
n
r
e
t
u
r
n
)
(
7
)
--Deteccin
de portadora
(Carrier detect){8)
-Terminal de
datos lista (Data
terminal ready)
(20)
2
.
4
.
3
R
a
t
o
n
e
s
Conforme pasa el tiempo, personas con cada
vez menos conocimientos acerca de cmo funcionan las computadoras estn usando estas
mquinas. Las computadoras de la generacin
ENIAC slo eran utilizadas por quienes las
haban construido. En los cincuenta, slo programadores profesionales con alto nivel de
100
ORGANIZACIN DE LOS
SISTEMAS DE COMPUTADORA
CAP.2
SEC.
ENTRADA/SALIDA
2.4
101
Puntero
controlado
el ratn
2
.
4
.
4
I
m
p
r
e
s
o
r
a
s
Botones del ratn
Ratn
Esfera de caucho
I
m
p
r
e
s
o
r
a
s
m
o
n
o
c
r
o
m
t
i
c
a
s
El tipo de impresora ms econmico es
la impresora de matriz, en la que una
cabeza de impresin que contiene entre
7
y
24
agujas
activables
electromagnticamente
se mueve a lo
largo de cada lnea de impresin. Las
impresoras de bajo costo tienen siete
agujas para impri- mir, digamos,
80
caracteres en una matriz de 5 x 7 a lo
largo de la lnea. De hecho, la lnea de
impresi
n
consist
e
en
siete
lneas
horizon
tales,
cada
7
.
en
la base. El ratn ptico se utiliza sobre una
base de plstico especial que contiene una
cuadrcula de lneas muy juntas. A medida
que el ratn se mueve sobre la cuadrcula, el
fotodetector perci- be el paso de las lneas
por los cambios en la cantidad de luz del
LED que se refleja. Unos circuitos internos
del ratn cuentan el nmero de lneas de
cuadrcula que se cruzan en cada direccin.
El tercer tipo de ratn es optomecnico.
Al igual que el ratn mecnico ms
nuevo, tiene
una esfera rodante que hace girar dos ejes
perpendiculares entre s. Los ejes estn
conectados
102
ORGANIZACIN
DE LOS
SISTEMAS DE COMPUTADORA
CAP.2
(
b
)
o
00000
o
(
a
)
o
o
o
SEC. 2.4
ENTRADA/SALIDA
103
para barrer el cilindro a lo largo. El haz de
luz se modula para producir un patrn de
puntos claros y oscuros. Los puntos en los
que el haz incide pierden su carga elctrica.
L
s
e
r
~~~~
1
g
i
r
a
t
o
r
i
o
1
:
Cilin
dro
roci
ado
y
car
gad
o
E
.
s
p
e
j
o
1
1
1
1
o
c
t
a
g
o
n
a
l
E
l
h
a
z
d
e
[
)
-
l
u
z
:
c
a
S
a
l
i
d
a
a
p
i
l
a
d
a
Figura 2-37.
Funcionamiento de una
impresora lser.
Una vez que se ha pintado una lnea de
puntos, el cilindro gira una fraccin de grado
para que pueda pintarse la siguiente lnea.
En algn momento,
la primera lnea de
puntos llega al tner, un depsito de polvo
negro sensible a las cargas electrostticas.
El tner es atrado hacia los puntos que
todava conservan su carga, y as forman una
imagen visual de esa lnea. Un poco ms
adelante en el trayecto de transporte, el
cilindro recubierto con tner se oprime contra
el papel y transfiere a ste el polvo negro.
Luego el papel pasa entre rodillos calientes
que fusionan el tner con el papel de forma
permanente, lo que fija la imagen. Al continuar
su rotacin, el cilindro pierde su carga y un
raspador elimina cualquier residuo de tner,
antes de que el cilindro se vuelva a cargar y
recubrir para la siguiente pgina.
Sobra decir que este proceso es una
combinacin en extremo compleja de ciencia
fsica, ciencia qumica, ingeniera mecnica
e ingeniera ptica. No obstante, varios
proveedores producen ensambles completos,
llamados mquinas de impresin, que los
fabricantes de impresoras lser combinan con
sus propios circuitos electrnicos y software
para crear una im- presora completa. Los
circuitos constan de una CPU y varios
megabytes de memoria para contener el
mapa de bits de una pgina completa y
numerosos tipos de letra, algunos de los
cuales son proporcionados con la
impresora, mientras que otros se bajan de
una fuente externa, como la computadora.
Casi todas las impresoras aceptan comandos
que describen las pginas a imprimir (en lugar
de aceptar simplemente mapas de bits
preparados por la CPU principal). Estos
comandos se dan en lenguajes como PCL de
HP y PostScript de Adobe.
Las impresoras lser de 600 dpi o
mejores pueden imprimir fotografas en
blanco y negro con una calidad razonable,
pero la tecnologa tiene sus bemoles.
Considere una fotografa digitalizada a 600
dpi que se va a imprimir en una impresora de
600 dpi. La imagen digitalizada contiene 600 x
!'"
104
CAP. 2
(blanco) a 255 (negro). La impresora tambin puede imprimir 600 dpi, pero cada pixel impreso
es negro (tner presente) o bien blanco (sin tner). No es posible imprimir tonos de gris.
La solucin usual para imprimir imgenes que tienen tonos de gris es utilizar medios
tonos como se hace en los carteles que se imprimen comercialmente. La imagen se divide en
celdas de medio tono, cada una de las cuales contiene por lo regular 6 x 6 pixeles. Cada celda
puede contener entre O y 36 pixeles negros. El ojo percibe una celda con muchos pixeles
como ms oscura que una que tiene menos pixeles. Los valores de gris dentro del intervalo de O
a 255 se representan dividiendo este intervalo en 37 zonas. Los valores del O al 6 estn en la zona
o , Jos valores del 7 al 13 estn en la zona 1, y as (Ja zona 36 es un poco ms pequea que las
dems porque 256 no es divisible exactamente entre 37). Cada vez que se encuentra
un valor de gris en la zona O, su celda de medio tono en el papel se deja en blanco, como se
ilustra en la figura 2-38(a). Un valor de zona 1 se imprime como un pixel negro. Un valor
de zona 2 se imprime como dos pixeles negros, como se muestra en la figura 2-38(b). En la
figura 2-38(c)-(f) se muestran otros valores de zona. Desde luego, si tomamos una fotografa
digitalizada a 600 dpi y la convertimos en medios tonos con esta tcnica, reduciremos la de-
(a
(e)
(e)
b)
(d)
SEC. 2.4
El conjunto total d
Ningn dispositivo tiene
los casos cada color vie
Imperfecciones de la tec
estn distribuidos de m
color tiene mucho que
humana, no slo con los
Una consecuencia
que se ve bien en la pan
los problemas son:
4.
(f)
se producen en los
monitores de CRT,
se forman a partir de
la superposicin
lineal de los tres
colores primarios
aditivos, rojo, verde
Y azul. Las imgenes
de luz reflejada,
como las fotografas
a color y las
ilustraciones de las
revistas, absorben
ciertas longitudes de
1.
Los monitores
2.
3.
Los monitore
SEC. 2.4
ENTRADA/SALIDA
107
:
N~
V2
Tiempo
o
o
..
(
a
B
a
j
a
(
b
a
m
p
l
i
t
u
d
(
e
,
Baja
: frecuencia
1
1
1
1
2
.
4
.
5
M
d
e
m
s
Con el crecimiento del uso de las
computadoras en los ltimos aos, es
comn que una computadora necesite
comunicarse con otra. Por ejemplo, mucha
gente tiene una compu- tadora personal en
casa que usa para comunicarse con su
computadora en el trabajo, con un
proveedor de servicio de Internet o con un
sistema de "banco en su casa". Todas estas
aplica- ciones utilizan el telfono para
efectuar la comunicacin.
Sin embargo, una lnea telefnica
ordinaria no es apropiada para transmitir
seales de computadora, que generalmente
representan un O como O volts y un l como
3 a 5 volts, como se muestra en la figura 239(a). Las seales de dos niveles sufren una
distorsin
considerable
cuando
se
transmiten por una lnea telefnica de
grado de voz, y esto da pie a errores de
transmisin. En cambio, una seal de
onda senoidal pura con una frecuencia de
l 000 a
2000 Hz, llamada portadora, se puede
transmitir
con
relativamente
poca
distorsin, y este
hecho se aprovecha
en casi todos los
sistemas
de
telecomunicaciones.
Puesto que las pulsaciones de una
onda senoidal son totalmente predecibles,
una onda senoidal pura no transmite
informacin. Sin embargo, si se vara la
amplitud, la frecuencia o la fase, se puede
transmitir una secuencia de unos y ceros,
como se muestra en la figura 2-39.
(d)
1
~
\/:~
C
a
m
b
i
o
d
e
f
a
s
e
DE
ORGANIZACIN DE LOS
COMPUTADORA
109
~------------------------------,
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
r-----------------------,
1
1
1
1
1
1
1
1
1
1
1
1
A la red:
i
n
t
e
r
n
a
1
1
:
:
I
---'""dela
:
porta-
I
S
D
N
A principios de la dcada de los ochenta las
PTT europeas (administraciones de correo,
tel- fono y telgrafo) crearon un estndar
para telefona digital llamado ISDN (red
digital de servicios integrados, Integrated
Services Digital Network). La intencin
original era que las personas de edad
avanzada pudieran tener alarmas en sus
casas conectadas a oficinas de monitoreo
centrales, y muchas otras aplicaciones
extraas que nunca se hicieron realidad.
Ellas promovieron intensamente la idea,
pero sin mucho xito. Luego, la World
Wide Web apareci de la noche a la maana
y la gente estaba exigiendo a gritos acceso
digital con gran ancho de banda a
Internet.As, de repente, ISDN haba
descubierto una superaplicacin (aunque no
haba sido contemplada por sus diseadores).
La ISDN tambin se populariz en Estados
Unidos y otros pases.
Cuando un cliente de una compaa
telefnica se suscribe a ISDN, se
sustituye la antigua lnea analgica por una digital. (De
hecho, no se cambia la lnea misma, slo el
equipo en sus extremos.) La nueva lnea
comprende
dos
canales
digitales
independientes de 64,000 bits/s cada uno,
ms un canal de sealizacin de 16,000 bits/s.
Existen equipos que combinan los tres
canales en un solo canal digital de 144,000
bps. Para las empresas est disponible una
lnea ISDN de 30 canales.
d
o
r
mdems
o lneas
1
1l
J1
F
i
g
u
r
a
2
4
0
.
I
S
D
N
p
a
r
a
u
s
o
c
a
s
e
r
o
.
2
.
4
.
6
C
d
i
g
o
s
d
e
c
a
r
a
c
t
e
r
e
s
Cada computadora usa un conjunto de
caracteres. Como mnimo, este conjunto
incluye las
26 letras maysculas del ingls, las 26 letras
minsculas, los dgitos del O al 9 y un
conjunto de smbolos especiales, como
espacio, punto, signo menos, coma y retomo
de carro.
Para transferir estos caracteres a la
computadora, se asigna un nmero a cada
uno: por ejemplo, a= l , b = 2, ... , z = 26, +
= 27, - = 28. La correspondencia entre
caracteres y enteros se llama cdigo de
caracteres. Es indispensable
que dos
computadoras que se comunican empleen el
mismo cdigo, pues de lo contrario no
podrn entenderse. Para ello se han creado
normas, y a continuacin examinaremos dos
de las ms importantes.
A
S
C
I
I
Un cdigo de amplio uso se llama ASCII
(Cdigo
Estndar Americano para
Intercambio de Informacin, American
Standard CodefarInformation Jnterchange).
Cada carcter ASCII tiene 7 bits, lo que
permiterepresentarun total de 128 caracteres.
La figura2-41 muestra el cdigo ASCII. Los
cdigos O a lF (hexadecimal) son caracteres
de control y no se imprimen.
Muchos de los caracteres de control
ASCII desempean funciones durante la
transmi- sin de datos. Por ejemplo, un
mensaje podra consistir en un carcter SOH
ORGANIZACIN DE
110
LOS SISTEMAS DE COMPUTADORA
CAP. 2
Hex
1
2
3
4
5
6
7
8
9
A
B
D
E
F
Nombre
NUL
SON
STX
ETX
EOT
ENO
ACK
BEL
BS
HT
LF
VT
FF
CR
so
SI
Significado
Nulo
Inicio de cabecera
Inicio de texto
Fin de texto
Fin de transmisin
Pregunta
Reconocimiento
Alarma
Retroceso
Tabulacin horizontal
Salto de 1 i nea
Tabulacin vertical
Salto de pgina
Retorno de carro
Desactivar cambio
Activar cambio
Hex
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
p::
... Hex
Car
Hex
Car
( 20
(Espacio)
30
Car
Hex
Hex
Car
op
p
40
60
Hex
Car
Car
Hex
'
50
70
SEC. 2.4
ENTRADA/SALIDA
111
Nombre
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
us
Significado
Los caracteres imprimibles ASCII no
Escape
de enlace
tienen
mayorde datos
ciencia. Incluyen las letras
Control
de dispositivo
maysculas y 1 minsculas, los dgitos,
Control
i vo 2
signosde disposi
de tpuntuacin
y unos cuantos
Control
de
dispositivo
3
smbolos matemticos.
Control de dispositivo 4
Reconocimiento
UNICODE negativo
Tiempo muerto sincrnico
FinLadeindustria
bloqueo de de
transmi
in
las scomputadoras
creci
Cancelar
principalmente en Estados Unidos, y esto
Fidio
n de lugar
medio al conjunto de caracteres ASCII.
Sustituto
El ASCII est bien para el ingls pero no
Escape
tanto para otros idio- mas. El francs
Separador
archivos (por ejemplo, systeme); el
necesitadeacentos
Separador
grupos signos diacrticos (por
alemn de
necesita
ejemplo,de fr),
etc. Algunos lenguajes
Separador
registros
europeosde tienen
Separador
unidades unas cuantas letras que no
estn incluidas en ASCII, como la f3
;:~ 21
~~
51
31
41
61
71
62
72
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
q
~23
~4
5
$
%
26
27
28
29
&
2A
2B
2C
2D
2E
2F
(
)
*
+
-
;, 22
2
42
. . .' 3 43
=~-. 4 44
45
5
.]
6
46
36
~ ~
47
37 ~? 7
48
38 'o 8
49
39 ~1 9
Q
4A
3A
4B
3B
4C
3C
<
40
3D
=
4E
3E
>
4F
?
3F
,
33
34
35
,..
..:.,
"
32
52 53
D
54
E
55
c
F
G
H
1
J
K
L
M
N
56
57
58
59
5A
5B
5C
5D
5E
5F
sb
r
T
w
X
y
z
[
\
)
A
Figura2-41. El
conjunto de
caracteres ASCII.
ORGANIZACIN DE LOS
DE
COMPUTADORA
c
d
e
f
g
h
i
j
k
1
m
n
o
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
SEC.
RESUMEN
2.5
113
2
.
5
R
E
S
U
M
E
N
Los sistemas de computacin se construyen
con
tres
tipos
de
componentes:
procesadores, memorias y dispositivos de
E/S. La tarea de un procesador es buscar
instrucciones una por una en una memoria,
decodificarlas y ejecutarlas. El ciclo de
bsqueda-decodificacin-ejecucin
siempre puede describirse como un
algoritmo y, de hecho, a veces es ejecutado
por un intrprete en software que se ejecuta
en un nivel ms bajo. A fin de mejorar la
velocidad, muchas computadoras actuales
tienen uno o ms filas de procesamiento, o
tienen un diseo superescalar con varias
unidades funcionales que operan en
paralelo.
Cada vez son ms comunes los sistemas
con varios procesadores. Las computadoras
paralelas incluyen los procesadores de
arreglos, en los que la misma operacin se
ejecuta con varios conjuntos de datos al
mismo tiempo, los multiprocesadores, en
los que varias CPU comparten una misma
memoria, y las multicomputadoras, en las
que varias computadoras, cada una con su
propia memoria, se comunican mediante el
envo de mensajes.
Las memorias pueden clasificarse
como primarias o secundarias. La memoria
primaria se usa para contener el programa
que se est ejecutando. Su tiempo de acceso
es corto -unas cuantas decenas de
nanosegundos
como
mximo--e
independiente de la direccin a la que se
est accediendo. Las cachs reducen este
ORGANIZACIN DE LOS
SISTEMAS DE COMPUTADORA
CAP. 2
6.
P
R
O
B
L
E
M
A
S
l.
En la computadora 1,
todas las
instrucciones tardan 1 O ns en ejecutarse.
En la computadora 2, todas tardan 5 ns.
Puede decir con certeza que la
computadora 2 es ms rpida? Explique.
7. Para competir con el reciente invento de la
imprenta, cierto monasterio medieval
decidi producir en masa libros de bolsillo
escritos a mano juntando un gran nmero
de escribanos en un gran saln. El monje
director gritaba la primera palabra del
libro a producir y todos los escribanos la
copiaban. Luego el monje director gritaba
la segunda palabra y todos los escribanos
la copiaban. Este proceso se repeta hasta
que se haba ledo en voz alta y copiado
todo el libro. A cul de los sistemas de
procesador paralelo que vimos en la
seccin 2.1.6 se parece ms este sistema?
8. Conforme bajamos por la jerarqua de
memoria de cinco niveles que vimos en el
texto, el tiempo
CAP. 2
PROBLEMAS
115
13.
17.
de 10 bits,
1024 celdas,
tamao de
celda de 12
bits
21.
de 1 O bits
e. Direccin de 10
bits, 10 celdas,
tamao de celda de
1024 bits
f. Direccin de
1024 bits, 10
celdas, tamao de
celda de 10 bits
12.
116
CAP. 2
dispone de 3.5 GB de espacio para la pista de video, que la definicin de imagen es de 720 X 480
pixeles con color de 24 bits, y que las imgenes se exhiben a razn de 30 cuadros/s.
27.
La tasa de transferencia entre una CPU y su memoria es varios rdenes de magnitud mayor que
la tasa de transferencia de E/S mecnica. Cmo puede esta diferencia causar ineficiencias?
Cmo puede aliviarse?
28. Una terminal de mapa de bits tiene una pantalla de 1024 x 768. La pantalla se redibuja 75 veces
cada segundo. Qu duracin tiene el pulso correspondiente a un pixel?
29. Un fabricante anuncia que su terminal a color de mapa de bits puede exhibir 224 colores distintos.
Sin embargo, el hardware slo tiene un byte para cada pixel. Cmo puede hacerse esto?
30.
Con cierto tipo de letra, una impresora lser monocromtica puede imprimir 50 lneas de 80
carac- teres por pgina. Un carcter tpico ocupa un cuadro de 2 mm x 2 mm, y cerca del 25% de
esta rea es tner. El resto est en blanco. La capa de tner tiene un espesor de 25 micras. El
cartucho de t- ner de la impresora mide 25 x 8 x 2 cm. Cuntas pginas pueden imprimirse con
un cartucho de
tner?
31. Cuando texto ASCII con paridad par se transmite asincrnicamente a razn de 2880 caracteres/s
por un mdem de 28,800 bps, qu porcentaje de los bits recibidos contienen realmente datos (no
gasto extra)?
32. La Hi-Fi Modem Company acaba de disear un nuevo mdem con modulacin de frecuencia que
utiliza 16 frecuencias en lug~r de slo 2. Cada se~ndo se ?ivide en n, interv~los de tiempo
iguales, cada uno de los cuales contiene uno de los 16 ton\s posibles. Cuantos bits por segundo
puede transmitir este mdem si emplea transmisin sincrnica?
33. Estime cuntos caracteres, contando los espacios, contiene un libro de texto de computacin tpico. Cuntos bits se necesitan para codificar un libro en ASCII con paridad? Cuntos CD-ROM
se necesitan para almacenar una biblioteca de ciencias de la computacin que tiene 10,000 libros?
Cuntos DVD de dos lados y capa dual se necesitan para la misma biblioteca?
34. Decodifique el siguiente texto binario en ASCII: 1001001 0100000 1001100 1001111 1010110
1000101 0100000 1011001 10011111010101 0101110.
35. Escriba un procedimiento hamming(ascii, codificado) que convierta los siete bits de orden bajo de
ascii en una palabra de cdigo entera de 11 bits almacenada en codificado,
36.
Escriba una funcin distancia(cdigo, n, k) que acepte como entrada un arreglo cdigo den
carac- teres de k bits cada uno y devuelva como salida la distancia del conjunto de caracteres.
CAP. 3
SEC.
3.1
3.1.1
Comp
uertas
118
111
f), .~-
N
O
T
Vce. un voltaje regulado externamente, que suele ser +5 volts para este
119
Y LGEBRA BOOLEANA
0111
Un circuito digital es en el que slo estn presentes dos valores lgicos. Por
lo regular, una seal entre O y 1 volt representa un valor (digamos, el O
binario) y una seal entre 2 y 5 volts representa el otro valor (digamos, el 1
binario). No se permiten voltajes fuera de estos dos intervalos. Diminutos
dispositivos electrnicos, llamados compuertas, pueden calcular di- versas
funciones con estas seales de dos valores. Las compuertas constituyen la
base de hardware sobre la que se construyen todas las computadoras
digitales.
Los detalles del funcionamiento interno de las compuertas rebasan el
alcance de este
libro, y pertenecen al nivel de dispositivo, que est abajo de nuestro nivel
O. No obstante, haremos aqu una muy breve digresin para examinar la idea
bsica, que no es difcil. Toda la lgica digital moderna se apoya en ltima
instancia en el hecho de que es posible hacer que un transistor se comporte
como un conmutador binario muy rpido. En la figura 3-l(a) se muestra un
transistor bipolar (el crculo) incorporado a un circuito muy sencillo. Este
transis- tor tiene tres conexiones con el mundo exterior: el colector, la base y
el emisor. Cuando el voltaje de entrada, V,, es menor que cierto valor c~co,
el transistor se apaga y acta como
una resistencia infinita. Esto hace que la salida del circuito, V0u1, adquiera un
valor cercano a
1'
COMPUERTAS
tipo de transistor.
Cuando V,, excede el valor crtico, el transistor se enciende y acta como un
alambre, lo que hace que V0u1 se baje a tierra (por convencin, O volts).
+
V
c
c
V1
Vout
~
8
8
B
o o
o 1
o
1
1
(a)
V
a
u
t
.-----+-----Vaut
NOR
+Vcc
+Vcc
NA
NO
1
(b)
X
1
1
1
o o 1
o 1 o
o o
1
1
o
1
(e)
o o o
o 1 o
o o
1
(d)
o o o
o 1 1
o 1
1
(e)
v;
V1
V2
V2
E
m
i
s
o
r
-4=-
-e-::-
-e-
(e)
(b)
(a)
NAND.
(e)
NOR.
CAP. 3
Por esta razn, muchas computadoras se basan en las compuertas NANO y NOR en lugar de las
ms conocidas ANO y on. (En la prctica, todas las compuertas se implementan de forma un
tanto distinta, pero las NANO y NOR siguen siendo ms sencillas que las ANO y OR. Vale la pena
sealar que las compuertas pueden tener ms de dos entradas. En principio, una compuerta
NANO, por ejemplo, puede tener un nmero arbitrario de entradas, pero en la prctica es inusitado que haya ms de ocho entradas.
Aunque el tema de la construccin de las compuertas pertenece al nivel de dispositivos,
nos gustara mencionar las principales familias de tecnologa de fabricacin porque continuamente se hace referencia a ellas. Las dos tecnologas principales son la bipolar y la MOS
(Metal xido Semiconductor). Los principales tipos bipolares son TTL (lgica transistortransistor), que ha sido el caballito de batalla de la electrnica digital durante muchos aos, y
ECL (lgica de emisor acoplado, Emitter-Coupled Logic), que se usa cuando se requiere una
operacin a muy alta velocidad.
Las compuertas MOS son ms lentas que las TTL y ECL pero requieren mucho menos
potencia y ocupan mucho menos espacio, lo que permite encapsular grandes cantidades de
compuertas. Existen muchas variedades de MOS, que incluyen PMOS, NMOS y CMOS. Si
bien los transistores MOS tienen una construccin diferente de la de los transistores
bipolares, su capacidad para funcionar como interruptores electrnicos es la misma. Casi
todas las CPU y las memorias modernas emplean tecnologa CMOS, que opera a +3.3 volts.
Esto es todo lo que trataremos sobre el nivel de dispositivos. Los lectores interesados en
ahondaren el estudio de este nivel pueden consultarlas lecturas que se sugieren en el captulo
9.
l
120
NANO
,
i~
SEC. 3.1
121
verticalmente la columna del resultado de la tabla de verdad. As, NANO es 1110, NOR es 1000
es 0001 y OR es O 111. Obviamente, slo existen 16 funciones booleanas de dos variables'
que corresponden a las 16 cadenas de resultado de 4 bits posibles. En contraste, el lgebra
ordinaria tiene un nmero infinito de funciones de dos variables, ninguna de las cuales puede
describirse dando una tabla de salidas para todas las posibles entradas porque cada variable
puede adoptar cualquiera de un nmero infinito de valores posibles.
En la figura 3-3(a) se muestra la tabla de verdad para una funcin booleana de tres variables: M = f (A, B, C). Esta funcin es la funcin de mayora lgica, es decir, es O si la mayor
ANO
Para describir los circuitos que pueden construirse combinando compuertas se requiere un
nuevo tipo de lgebra, una en la que las variables y funciones slo puedan adoptar los
valores O y 1. Semejante lgebra se denomina lgebra booleana, as llamada por su
descubridor, el matemtico ingls George Boole (1815-1864). En trminos estrictos, nos
estamos refiriendo realmente a un tipo especfico de lgebra booleana, un lgebra de
conmutacin, pero el trmino "lgebra booleana" se usa tan ampliamente para referirse al
"lgebra de conmuta- cin" que no vamos a hacer la distincin aqu.
As como hay funciones en el lgebra "ordinaria" (la de bachillerato), tambin hay funciones en el lgebra booleana. Una funcin booleana tiene una o ms variables de entrada y
produce un resultado que depende slo de los valores de dichas variables. Podemos definir
una funcin sencilla,[, diciendo que flA) es 1 si A es O y es O si A es l. sta es la funcin NOT
de la figura 3-2(a).
Puesto que una funcin booleana de n variables slo tiene 2n posibles combinaciones de
los valores de entrada, la funcin puede describirse totalmente con una tabla de 2n renglones,
cada uno de las cuales indica el valor de la. funcin para una combinacin distinta de los
valores de entrada. Semejante tabla se llama tabla de verdad. Todas las tablas de la figura 32 son ejemplos de tablas de verdad. Si convenimos en enumerar siempre las filas de una
tabla de verdad en orden numrico (base 2), es decir, para dos variables en el orden 00, O 1,
10 y 11, la funcin podr describirse totalmente con el nmero binario de 2n bits que se
obtiene leyendo
122
CAP.3
que M sea 1. Por convencin, colocamos una barra o testa sobre una variable de entrada para
indicar que su valor se invierte. La ausencia de la barra implica que la variable no se
invierte. Adems, utilizaremos la multiplicacin implcita o un punto para indicar la funcin
AND booleana y+ para denotar la funcin OR booleana. As, por ejemplo, ABC adopta el
valor 1 slo cuando A = 1, B = O y C = l. Tambin, AB + B Ces 1 slo cuando (A = 1 y B = O)
o (B =
1 y e= O). Las cuatro filas de la figura 3-3(a) que producen bits 1 en la salida son: ABC,
ABC,
ABCy ABC. La funcin, M, es verdadera (o sea, 1) si es verdadera cualquiera de estas cuatro
parte de sus entradas son O, y 1 si la mayor parte de sus entradas son l. Aunque cualquier
funcin booleana puede especificarse cabalmente dando su tabla de verdad, a medida que el
nmero de variables aumenta esta notacin se vuelve cada vez menos manejable. Por ello, se
utiliza otra notacin.
ABC
ABC
ABC
e M
o o o o
o o 1 o
o 1 o o
o 1 1 1
o o o
1
o 1 1
1
1
1
o 1
A
ABC
(a)
(b)
Para entender de dnde sale esta notacin, observe que cualquier funcin booleana puede especificarse indicando cules combinacionesde variables de entrada dan una salida con
valor l. Para la funcin de la figura 3-3(a), hay cuatro combinaciones de variables que hacen
SEC. 3.1
123
y sta ser una forma compacta de dar la tabla de verdad. As, una funcin de n variables
puede describirse dando una "suma" de cuando ms 2 trminos "producto" de n variables.
Esta formulacin tiene gran importancia porque, como veremos en breve, nos lleva directa. mente a una implementacin de la funcin empleando compuertas estndar.
Es importante tener presente la distincin entre una funcin booleana abstracta y su
implementacin con un circuito electrnico. Una funcin booleana consta de variables, como
A, By C, y operadores booleanos como AND, OR y NOT. Una funcin booleana se describe
dando una tabla de verdad o una funcin booleana como
11
F=ABC
+ABC
Una funcin booleana puede implementarse con un circuito electrnico (a menudo de muchas formas distintas) utilizando seales que representen las variables de entrada y salida, y
compuertas como ANO, OR y NOT. Generalmente usaremos la notacin AND, OR y NOT para
OR
. El circuito de la figura 3-3(b) sigue una convencin que usaremos una y otra vez en
todo el hbro: cuando d~s lneas ~~ cruzan, no hay una conexin implcita a menos que
haya un
pun~ogrueso en la mterseccion, Por ejemplo, la salida de la compuerta 3 cruza las seis lneas
verticales
pero slo est conectada a
Advertimos al lector que algunos autores emplean
otras
convenciones.
. ~l ejemplo de la figura 3-3 nos muestra claramente cmo podemos implementar un
circuito para cualquier funcin booleana:
c.
Como ya lo afirmamos, la formulacin de una funcin booleana como una suma de hasta 2
trminos producto nos lleva directamente a una posible implementacin. Utilizando la
figura
3-3 como ejemplo, vemos cmo se logra esa implementacin. En la figura 3-3(b) las
entradas A, B y C aparecen a la izquierda, y la funcin de salida, M, aparece a la derecha.
Puesto que se necesitan complementos (inversos) de las variables de entrada, se generan
sacando una derivacin de cada entrada y haciendo pasar estas derivaciones por los
inversores rotulados 1,
2 y 3. Para que la figura sea ms o menos clara, hemos dibujado seis lneas verticales, tres
conectadas a las variables de entrada y tres conectadas a sus complementos. Estas lneas son
una fuente cmoda de entradas para las compuertas subsecuentes. Por ejemplo, A es una
entrada de las compuertas 5, 6 y 7. En un circuito real estas compuertas probablemente se
conectaran directamente a A sin usar alambres "verticales" intermedios.
El circuito contiene cuatro compuertas ANO, una para cada trmino de la ecuacin de M
(es decir, una para cada rengln de la tabla de verdad que tiene 1 bit en la columna de resultado). Cada compuerta ANO calcula un rengln de la tabla de verdad, como se indica. Por
ltimo, se obtiene el on de todos los trminos producto para obtener el resultado final.
11
1.
2.
3.
4.
5.
ANO
Aunque hemos mostrado cmo puede implementarse cualquier funcin booleana empleando compuertas NOT, ANO y OR, a menudo es conveniente implementar los circuitos utilizand~ un solo ti.po de compuerta. Por fortuna, es fcil convertir los circuitos generados por
el algontmo .antenor en una forma NANO pura o NOR pura. Para efectuar tal conversin, lo
nico que necesitamos es ,una for~a de implementar NOT, ANO y on empleando un solo
tipo de compuerta. El renglon supenor de la figura 3-4 muestra cmo pueden
implementarse estas tres compuertas empleando slo compuertas NANo; el rengln inferior
muestra cmo hacerlo usando slo compuertas NOR. (Estos mtodos son sencillos, pero no
son los nicos.)
Una forma de implementar una funcin booleana usando slo compuertas NANO 0 slo
compuertas NOR ~s seguir primero el procedimiento anterior para construirla con NOT, ANO y
OR. Luego se sustituyen las compuertas de varias entradas con circuitos equivalentes que
slo tengan compue.~as de dos entradas. Por ejemplo, A + B + C + D pueden calcularse
como (A + B) + ( C + D~, utilizando tres compuertas oa de dos entradas. Por ltimo, las
compuertas Nar, ANO y OR se sustituyen por los circuitos de la figura 3-4.
Aunque este procedimiento no nos lleva a circuitos ptimos, en el sentido de tener un
nmero mnimo de compuertas, s nos demuestra que siempre es posible encontrar una solucin: ~e dice que las compuertas NANO y NOR son completas (o universales) porque
cualquier f~nc10nboole~na puede calcularse empleando cualquiera de ellas. Ninguna otra
compuerta tiene esta propiedad, y esto es otra razn por las que a menudo se les prefiere
como bloques de construccin de circuitos.
124
CAP.3
12
5
SEC. 3.l
COMPUERTAS Y
LGEBRA BOOLEANA
A-----<
s----'
AB+AC
:;;o
A~
A(B+C)
B+C
(a)
A+B
A
B
o
o
o
o
o
o
A+B
AB
AC
AB+AC
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
e
o
B+C
o
o
o
o
o
o
o
o
o
o
o
A(B + C)
1
1
1
o
o
e
o
1'
(a)
Figura 3-5. Dos funciones equivalentes. (a) AB +(b)AC. (b) A(B + C).
(
e
(b)
NAND
NOT,
o slo compuertas
(b)
AND
y (e)
OR
NOR.
circuito, el diseador debe encontrar otro circuito que calcule la misma funcin
que el origi- nal pero lo haga con menos compuertas (o tal vez con compuertas ms
sencillas, por ejemplo, compuertas de dos entradas en lugar de cuatro). En la
bsqueda de circuitos equivalentes, el
lgebra
booleana
puede
ser una
herramienta valiosa.
Como ejemplo del uso del lgebra booleana, considere el circuito y la tabla
de verdad
para AB + AC que se muestra en la figura 3-S(a). Aunque no hemos hablado de
ello, muchas de las reglas del lgebra ordinaria tambin se cumplen en el lgebra
booleana. En particular, AB + AC puede factorizarse para dar A(B + C) empleando la
ley distributiva. La figura 3-S(b) muestra el circuito y la tabla de verdad para A(B +
C). Puesto que dos funciones son equiva- lentes si y slo si tienen la misma salida
para todas las posibles entradas, si examinamos las tablas de verdad de la figura 35 es fcil ver que A(B + C) es equivalente a AB + AC. A pesar de esta equivalencia,
es obvio que el circuito de la figura 3-S(b) es mejor que el de la figura
3-S(a) porque contiene menos
compuertas.
En general, un diseador de circuitos parte de una funcin booleana y luego le
aplica las
leyes del lgebra booleana en un intento por encontrar una funcin equivalente
ms sencilla.
El circuito
puede
construirse a partir de
la funcin final.
Para utilizar este enfoque, necesitamos algunas
identidades del lgebra booleana. La
figura 3-6 muestra algunas de las principales.
Resulta
interesante que cada ley tiene dos
formas, un~ de las cuales es el dual de la otra. Si intercambiamos AND y OR y tambin Y 1, ,c~alqmer
forma puede producirse a partir de la otra. Todas las leyes pueden demostrar- se fcilmente ~~nstruyendo
sus tablas de verdad. Con excepcin de la ley de DeMorgan, la
~ey ~~ absorcin Y la forma AND de la ley distributiva, los resultados son ms 0 menos mtmtiv~s. ~a
1<'1 de DeMorgan puede extenderse a ms de dos variables por ejemplo ABC = A+ B + C
'
'
La ley de De:vio.rgan sugiere una notacin alternativa. En la figura 3-7(a) se muestra la forma A.ND
pa~a indicar negacin mediante burbujas de inversin, tanto en la entrada como en la ~ahda. As1, una
compuerta OR con entradas invertidas equivale a una compuerta NANO. Si exammamos la figura 3-7(b), la
forma dual de la ley de DeMorgan, debe ser obvio que una compuerta NOR puede dibujarse como una
126
CAP.3
SEC. 3.1
12
7
COMPUERTAS Y LGEBRA
BOOLEANA
Ley de identidad
1A:::A
Ley nula
Ley idempotencia
OA:::ONombre
Funcin OR
AA:::A
Ley inversa
AA:::O
A+A=1
Ley conmutativa
AB= BA
A+B=B+A
O +A:::A
Funcin
1 +A::: 1 ANO
A+A=A
Ley asociativa
(AB)C = A(BC)
(A + B) + C = A + (B + C)
Ley distributiva
A+ BC = (A + B)(A + C)
A(B + C) = AB + AC
Ley de absorcin
A(A+ B) :::A
A+AB =A
Ley de DeMorgan
AB =A+ B
A+ B =AB
XOR
A
B
i3
(a)
(b)
A
B
A
i3
(c)
(d)
1'
1,
A+ B
AB
A+ i3
AB
=[)-=[J-
=[)--
=1>-(e)
(d)
NAND.
(b)
NOR.
(e)
AND.
(d)
OR.
figura 3-8(b). Para convertirlo a una forma NANO, las lneas que conectan la
salida de las compuertas ANO a la entrada de la compuerta OR se deben
redibujar con dos burbujas de inversin, como se muestra en la figura 3-8(c).
Por ltimo, utilizando la figura 3-7(a), llega-
A
F
ov
ov
ov
ov
5V ov
5V
ov
ov
5V
5V
5v
Fo
oo
CAP.3
o
(
a
(b)
(e)
129
Vcc
En las secciones anteriores vimos cmo implementar tablas de verdad y otros circuitos sencillos utilizando compuertas individuales. En la prctica, ya son pocos los circuitos que se
construyen compuerta por compuerta, aunque esto sola ser comn. Hoy en da, los bloques
de construccin usuales son mdulos que contienen varias compuertas. En las secciones que
siguen examinaremos ms de cerca esos bloques de construccin para ver cmo se usan y
cmo pueden construirse a partir de compuertas individuales.
Muesca
.>
Circuito SSI (integrado a pequea escala, Small Scale Integrated): 1 a 10 compuertas. Circuito
MSI (integrado a mediana escala, Medium Scale Integrated): 10 a 100 com- puertas.
Circuito LSI (integrado a gran escala, Large Scale Integrated): 100 a 100,000 compuertas.
Circuito VLSI (integrado a muy grande escala, Very Large Scale Integrated): > 100,000
compuertas.
Estas clases tienen diferentes propiedades y se usan de distintas formas.
Un chip SSI por lo regular contiene entre dos y seis compuertas independientes, cada una
de las cuales se puede usar en forma individual, al estilo de las secciones anteriores. La figura 3-1
O ilustra esquemticamente un chip SSI comn que contiene cuatro compuertas NANO. Cada una
de stas tiene dos entradas y una salida, lo que requiere un total de 12 termi- nales para las cuatro
compuertas. Adems, el chip necesita alimentacin (Vce) y tierra (GND), que todas las compuertas
comparten. En general, el paquete tiene una muesca cerca de la
terminal 1 para identificar la orientacin. Para evitar confusin en los diagramas de circuitos,
~a fimto que .1?cluye tanto el tiempo de propagacin de la seal a travs del chip y el ti:mpo e
conmutacwn. Los retardos tpicos son de 1 a 10 ns.
GND
com uerpor convencin no se muestran la alimentacin, la tierra ni las compuertas que no se utilizan.
130
CAP.3
den de los valores almacenados adems de las variables de entrada. Un circuito que
implementa una tabla de verdad, como el de la figura 3-3(a), es un ejemplo tpico de circuito
combinacional. En esta seccin examinaremos algunos circuitos combinacionales de uso
frecuente.
Multiplexore
s
En el nivel de lgica digital, un multiplexor es un circuito con 2 entradas de datos, una
salida de datos y n entradas de control que seleccionan una de las entradas de datos. La
entrada de datos seleccionada se "pasa por compuertas" (se encamina) hacia la salida. La
figu- ra 3-11 es un diagrama esquemtico de un multiplexor de ocho entradas. Las tres
lneas de control, A, B y C, codifican un nmero de 3 bits que especifica cul de las ocho
lneas de entrada se encamina a la compuerta OR y de ah a la salida. Sea cual sea el valor
que est en las lneas de control, siete de las compuertas AND siempre producirn O; la otra
podra producir O o l , dependiendo del valor de la lnea de entrada seleccionada. Cada
compuerta AND se habi- lita con una combinacin distinta de las entradas de control. El
circuito del multiplexor se muestra en la figura 3-11. Despus de aadir alimentacin y
tierra, puede meterse en un encapsulado de 14 terminales.
Con el multiplexor podemos implementar la funcin de mayora de la figura 3-3(a)
como
se muestra en la figura 3- l 2(b). Para cada combinacin de A, B y C, se selecciona una de
las lneas de entrada de datos. Cada entrada se conecta con Vce ( 1 lgico) o con tierra (0
lgico). El algoritmo para conectar las entradas es sencillo: la entrada D tiene el mismo
valor que el rengln i de la tabla de verdad. En la figura 3-3(a) los renglones O, 1, 2 y 4 son
O, as que las entradas correspondientes se conectan a tierra; los dems renglones son 1, as
11
.
.
.
UI
maconal
propiedad
com
. No todos los circuitos tienen esta
Por
1
ejemp o, un Circuito que contiene elementos de memoria bien podra generar salidas que depen-
que
se
conec- tan
con el 1
lgico. De
esta forma,
cualquier
tabla
de
verdad de
tres
variables se
puede
implementa
r utilizando
el chip de
la figura 312(a).
Ya
vimos
cmo
puede
usarse un
chip
multiplexor
para
seleccionar
una de
varias
entradas y
SEC. 3.2
CIR
CUI
TOS
LG
ICO
S
DIGI
TAL
ES
BS
ICO
S
Do
D1
D2
03
AABBCC
131
04
05
05
07
dor de datos paralelos a seriales. Si colocamos 8 bits de datos en las lneas de entrada y
luego alimentamos las lneas de control sucesivamente con los nmeros binarios 000 a
111, los ocho bits saldrn por la lnea de salida en serie. Un uso tpico de la conversin
paralelo a serial es en un teclado, donde cada digitacin define implcitamente un nmero
de 7 u 8 bits que se debe enviar serialmente por una lnea telefnica.
Lo contrario de un multiplexor es un desmultiplexor, que encamina su nica seal de
entrada a una de 2n salidas, dependiendo de los valores de las n lneas de control. Si el
valor binario en las lneas de control es k, se selecciona la salida k.
1 MB, el chip 1 tiene las direcciones de 1 MB a 2 MB, etc. Cuando se presenta una
drecc.on
a la m~mo~a, los 3 bits de orden alto sirven para seleccionar uno de los ocho chips.
Utilizan- do el circuito de la figura 3-13, estos 3 bits son las tres entradas A, By C.
Dependiendo de las entradas, una Y slo una de las ocho lneas de salida, D0, ... , D7, es 1; el
resto son O. Cada lnea de salida habilita uno de los ocho chips de memoria. Puesto que
slo una lnea de salida se
pone en 1, slo se habilita un
chip.
El funcionamiento del circuito de la figura 3-13 es sencillo. Cada compuerta AND tiene
tre~ ent:_adas, de las cuales la primera es A o bien A, la segunda es B o bien By la tercera es
e o bien C....:_ ~a_s!a compuerta se habilita con una combinacin de entradas distinta: Do con A
Be, D 1 con A B (C, etctera.
Decodificadore
s
Como segundo ejemplo, examinaremos un circuito que acepta un nmero de n bits como
entrada y lo utiliza para seleccionar (es decir, poner en 1) una y slo una de las 2" lneas
de salida. Semejante circuito, que se ilustra paran= 3 en la figura 3-13, se llama
decodificador.
Para ver en qu casos podra ser til un decodificador, imagine una memoria que
consis- te en ocho chips, cada uno de los cuales contiene 1 MB. El chip O tiene las
direcciones de O a
132
EL NIVEL DE LGICA
DIGITAL
Vcc
Comparadore
s
(',
Otro circuito til es el comparador, que compara dos palabras de entrada. El sencillo
com~arador de la figura 3-14 acepta dos entradas, A y B, cada una de 4 bits, y produce 1 si son
iguales Y O en caso contrario. El circuito se basa en la compuerta xos (OR EXCLUSIVA),
Do
Do
D1
D1
D2
D2
CAP. 3
SEC. 3.2
D
o
133
D3
D2
Ds
F
D1
F
D4
Ds
D4
Ds
D3
D5
D7
D5
D7
A.
B B
D4
8
A B
-=-
A B
Ds
(a)
(b)
D5
que produce un O si sus entradas son iguales, y un 1 si no lo son. Si las dos palabras de entrada
D7
son iguales, las cuatro compuertas xon debern producir O. Estas cuatro seales se conectan
despus a una compuerta on; si el resultado es O, las palabras de entrada son
iguales; si es 1, no lo son. En nuestro ejemplo usamos una compuerta NOR
como etapa final para invertir el sentido de la prueba: 1 significa igualdad; O
significa desigualdad.
Arreglos
lgicos
programables
Ya vimos que es posible construir funciones arbitrarias (tablas de verdad)
calculando trmi- nos producto con compuertas ANO y haciendo pasar los
resultados por una compuerta OR. Un chip muy general para formar sumas de
productos es el arreglolgico programableo PLA (Programmable Logic
Array), del cual se muestra un ejemplo pequeo en la figura 3-15. Este chip
tiene lneas de entrada para 12 variables. El complemento de cada entrada se
genera internamente, para dar un total de 24 seales de entrada. El corazn del
circuito es un arreglo de 50 compuertas ANO, cada una de las cuales puede tener
en potencia cualquier subconjunto de las 24 seales de entrada como su entrada.
La determinacin de qu seal de entrada va a qu compuerta ANO se efecta
con un arreglo de 24 x 50 bits proporcionado por el usuario. Cada lnea de
entrada a las 50 compuertas ANO contiene un fusible. Cuando el circuito sale
de la fbrica, los 1200 fusibles estn intactos. Para programar el arreglo, el
usuario quema fusibles selectos aplicando un voltaje alto al chip.
.U.
CAP. 3
134
SEC. 3.2
135
Compuerta OR EXCLUSIVA
Si se quema este
fusible, B no es una
entrada de la
~-.J-!------1--compuerta ANO 1.
Ao---'~
Bo---+1
A=B
)
-----
24 lneas de entrada
49
A3---~
83---+i
Figura 3-14. Comparador simple de 4 bits.
3-12(b ). Por ltimo, podramos usar una cuarta parte de un chip PLA. Obviamente, si se
necesitan muchas funciones, el PLA es ms eficiente que los otros dos mtodos. En el caso de
circuitos sencillos, los chips SSI y MSI, ms baratos, podran ser preferibles.
6 salidas
50 lneas
de entrada
OR5.
'l<.-------'-----'--4 de
.o.-------'------1
Desplazadores
Nuestro primer circuito MSI de aritmtica es un desplazador de ocho entradas y ocho salidas
(vea la figura 3-16). Se presentan ocho bits de entrada en las lneas D0, .. , DT La salida, que no
es ms que la entrada desplazada un bit, se obtiene en las lneas S0, .. , S7. La lnea de control, C,
determina la direccin del desplazamiento, O hacia la izquierda y l hacia la derecha.
Para ver cmo funciona el circuito, observe los pares de compuertas AND para todos los
bits excepto las compuertas del final. Cuando C = 1, el miembro derecho de cada par se
enciende, y pasa el bit de entrada correspondiente a la salida. Puesto que la compuerta ANO
derecha est conectada a la salida de la compuerta OR que est a su derecha, se efecta un
desplazamiento hacia la derecha. Cuando C =O, es el miembro izquierdo del par de compuertas ANO el que se enciende, y se efecta un desplazamiento a la izquierda.
Sumadores
Una computadora que no puede sumar enteros es casi inconcebible. Por tanto, un circuito de
hardware para efectuar una suma es un componente indispensable de toda CPU. La tabla
de verdad para la suma de enteros de un bit se muestra en la figura 3- l 7(a). Hay dos salidas: la
suma de las entradas, A y B, y el acarreo a la siguiente posicin (hacia la izquierda). En la
figura 3-l 7(b) se ilustra un circuito para calcular tanto el bit de suma como el bit de acarreo.
Este sencillo circuito se conoce generalmente como medio sumador.
CAP.3
136
Ds
SEC. 3.2
De
137
Acarreo de entrada
Do
A ca-
o
o
o
o
o
o
A ca-
A-_,
o
o
o
o
o
o
Suma
B --t---<i~-11
Acarreo de salida
Compuerta OR EXCLUSIVA
Acarreo
B Suma
o
o
o
oo
derecha
A------"'r\
B --+-<~--n_
Figura
(a) 3-18. (a) Tabla de verdad para un sumador completo. (b)(b)Circuito de un
>---Suma
Figura 3-17. (a) Tabla de verdad para la suma de un bit. (b) Circuito de un
medio sumador.
Acarreo
la
sumador completo.
entrada
de su
izquierdo.
acarreo con
de entrada
del bit de
de acarreo
la extrema
seacarreo
conectade
a O.
Este tipo
devecino
sumador
se llama El
sumador
propagacin
porque,
en el peor de los casos, que es sumar l a 111...111 (binario), la suma no puede completarse
hasta que el acarreo se ha propagado como una onda desde el bit de la extrema derecha
hasta
el de la extrema izquierda. Tambin existen, y generalmente se prefieren, sumadores que no
tienen este retraso y por tanto son ms rpidos.
suma, elComo
sumador
superior
no puede
ponerse
trabajarconsidere
todava porque
no va ade
conocer
su
ejemplo
sencillo
de sumador
msa rpido,
la separacin
un sumador
acarreo
hasta
dentro
de suma.
de 32de
bitsentrada
en unasino
mitad
inferior
dede
16 16
bitstiempos
y una mitad
superior de 16 bits. Cuando se inicia
de en~radade -eocce lle' a de la posicin que est a su derecha. Se necesita el sumador com:i:~:J~ee~aa~:;a i-18.
examinamos el circuito nos quedar claro q.ue u~ suma~or comple:
dos medio sumadores. La lnea de salida Suma es 1 si el numero e unos en ,
se construye con
ntrada es im ar Acarreo de salida es 1 si A y B son ambos 1 (entrada
B y el Acarreo de e
) p . y slo uno de ellos es 1 y el bit Acarreo de entrada es
da de la compuerta OR o uno
~:~~~n 1 Juntos los dos medio sumadores generan los bits tanto de suma com? de:carreo.
Si ueremos construir un sumador para, digamos, dos palabras de 16 ~its, asta con
repetir el circuito de la figura 3-18(b) 16 veces. El acarreo de salida de un bit se usa como
sr
superior. As el circuito consiste ahora en tres sumadores de 16 bits: una mitad superior y dos
!rr'
EL NIVEL DE
LGICA DIGITAL
CAP. 3
138
calcular cualquiera
de cuatro
funciones: A ANO B,
A OR B, B, o A+ B,
dependiendo de si
las
lneas
de
entrada
de
seleccin
de funcin F0 y F1
contienen 00, 01, 10
o 11 (binario). Cabe
sealar que aqu A+
B significa la suma
aritmtica de A y B,
no
el
AND
booleano.
U
n
i
d
a
d
e
s
~~~
a
r
i
t
m
t
i
c
a
l
g
i
c
a
1
3
CIRCUI
TOS
LGICO
S
DIGITA
LES
BSICO
S
~!
Casi
todas
las
computadoras contienen un
solo circuito para obtener
el ANO, el OR y la suma de
dos palabras de mquina.
Por lo regular, un circuito
de este tipo para palabras
de n bits se construye con
n circuitos idnticos para
las posiciones de bit
individuales. La figura 319 es un ejemplo sencillo
de un circuito de este tipo,
llamado unidad aritmtica
lgica o ALU (Arithmetic
Logic Unit). Una unidad
aritmtica y lgica puede
Unida
d
lgica
Acarre
o de
entrad
a
I
N
V
A
_
.
.
~
ENA-+-....
respectivamente. Tambin es
posible obtener A poniendo INVA.
Veremosalgunos usos para INVA, ENA
y ENB en el captulo 4.
En condicionesnormales,tanto ENA como
ENB son 1 para habilitarambas entradas,e
INVA es o. En
este caso, A y B simplemente se alimentan
a la unidad lgica sin modificacin.
La esquina inferior derecha de
la ALU contiene un sumador
completo para calcular la suma de
A y B, e incluye manejo de acarreos
porque es probable que se conecten
juntos varios de estos circuitos para
efectuar operaciones con palabras
enteras. Es posible conseguir circuitos como el de la figura 3-19,
llamado porcin de bit (bit slice).
Estas porciones permiten al
diseador de una computadora
construir una ALU de la capacidad
deseada. La figura 3-20
muestra una ALU de 8 bits formada
por ocho ALU de porcin de bit.
La seal rNc slo es til en
operaciones de suma; si est
presente, incrementa (es decir,
suma 1 a) el resultado, lo que
permite calcular sumas como A + 1
y A + B + 1.
ENB,
S
a
B
E
N
B
A1 81
r---------------------
Ae 86
As Bs
Lneas
Os
4
Acarreo
Acarreo de entrada
de salida
S
u
03
02
01
INC
completo
1
1
L--------------------1-------- --------1
--------Decodific
ador
3.2.4 Relojes
Acarre
o de
salida
diseadorespuedanestablecerlas
relacionesde
temporizacinrequeridas,
muchoscircuitosdigita- les emplean
relojes que hacen posible la
sincronizacin. Un reloj en este
contexto es un circuito que emite
una serie de pulsacionescon una
anchura de pulsacinprecisa y un
intervalo preciso entre pulsaciones
consecutivas. El periodo entre los
flancos correspondientes de dos
pulsaciones
consecutivas
se
denomina tiempo de ciclo del reloj.
Las frecuencias de pulsacin
La esquina inferior
izquierda de nuestra ALU
contiene un decodificador
de 2 bits que genera
seales de habilitacin para
las cuatro operaciones, con
base en las seales de
control
Fo
y
F1
Dependiendo de los valores
de F0 y F1, una y slo una
de las cuatro lneas de
habili140
LGICA DIGITAL
EL NIVEL DE
CAP.
1
Figura
3-20.
Ocho
1 "tajadas"
de ALU de un
bit conectadas
para formar una
ALU
de ocho bits. Por
sencillez, no se
muestran las
seales de
habilitacin y de
inversin.
SEC. 3.2
C
I
141
suelen ser de l a 500 MHz, lo que corresponde
a ciclos de reloj de 1000 ns a 2 ns. Para lograr
gran exactitud, la frecuencia del reloj
normalmente se controla con un oscilador de
cristal.
En una computadora pueden ocurrir
muchos sucesos durante un solo ciclo de
reloj. Si dichos sucesos deben ocurrir en un
orden especfico, el ciclo de reloj debe
dividirse en subciclos. Una forma comn de
obtener una definicin ms fina que la del
reloj bsico consiste en sacar una derivacin
de la lnea primaria del reloj e insertar un
circuito que tenga un retraso cono- cido. Esto
genera una seal de reloj secundaria desfasada
respecto a la primaria, como se muestra en la
figura 3-2l(a). El diagrama de temporizacin
de la figura 3-2l(b) proporciona cuatro
referencias de tiempo para sucesos discretos:
1.
Flanco ascendente de e 1.
2.
Flanco descendente de C l.
3.
oi---....---~
Retraso
C1
C2
3
.
3
M
E
M
O
R
I
A
Un componente indispensable de toda
computadora es su memoria. Sin memoria no
podra haber computadoras como las que
conocemos. La memoria sirve para almacenar
las instruc- ciones que se van a ejecutar, y
tambin los datos. En las secciones que
siguen examinaremos los componentes
bsicos de un sistema de memoria
comenzando desde el nivel de compuer- ta,
para ver cmo funcionan y cmo se combinan
para producir memorias grandes.
3
.
3
.
1
L
a
t
c
h
e
s
Para crear una memoria de un bit
necesitamos un circuito que de alguna
o
s----
(a)
(b)
s~
:.-
NOR
o
o
1
B
o
1
o
1
o
o
1
1
e
R-----1
o
R-----1
o
(
e
)
142
EL NIVEL DE
CAP. 3
(a)
(b)
(e)
t
e
y
s
e
m
u
e
s
t
r
a
e
n
l
a
f
i
g
u
r
a
3
2
2
(
a
)
.
Imaginemos ahora que Q no es O, sino 1, y
que R y S siguen siendo O. Las entradas de la
compuerta superior son O y 1, as que produce
una salida Q de O, la cual se realimenta a la
compuerta inferior. Este estado, que se muestra
en la figura 3-22(b), tambin es consistente.
Un estado en el que ambas salidas son iguales
a O es inconsistente, porque obliga a ambas
compuertas a tener dos ceros como entradas,
y ello producira una salida de 1, no de O.
Asimismo, es imposible que ambas salidas sean
iguales a 1, porque eso obligara a que las
entradas fueran O y 1, lo que produce O, no l.
Nuestra conclusin es sencilla: con R = S =O, el
latch tiene dos estados estables, a los que
llamaremos O y 1, que dependen de Q.
Examinemos ahora el efecto de las entradas
sobre el estado del latch. Supongamos que
S
se vuelve 1 mientras Q =O. Las entradas de la
compuerta superior son entonces 1 y O, y esto
S
R
c
o
n
r
e
l
o
j
En muchos casos es conveniente impedir que
el latch cambie de estado como no sea en
ciertos momentos
especficos.
Para ello,
modificamos un poco el circuito bsico, como
se muestra en la figura 3-23, para obtener un
latch SR con reloj.
SEC.
MEMORIA
3.3
143
de estado. Cuando el reloj est en 1, el efecto
de las compuertas ANO desaparece y el latch es
sensible a S y R. A pesar de su nombre, la
seal de reloj no tiene que provenir de un
reloj. Tam~i~ se usan ampliamente los trminos
enable (habilitar) y strobe (seal
estroboscpica) para indicar que la entrada de
reloj es 1; es decir, que el circuito es sensible al
estado des y R.
Hasta ahora hemos evitado considerar el
problema que sucede cuando tanto S como
o,
o
n
r
e
l
o
j
Una buena forma de resolver la ambigedad
del latch SR (que surge cuando S = R = I) es
evitar que ocurra. La figura 3-24 muestra un
circuito de latch que slo tiene una entrada, D.
Puesto que la entrada a la compuerta ANO
inferior siempre es el complemento de la entrada
de la compuerta ANO superior, nunca surge el
problema de que ambas entradas sean I.
Cuando
D = 1 y el reloj es 1, el latch pasa al estado Q =
1. Cuando D = O y el reloj es 1, el latch pasa
al estado Q =O. En otras palabras, cuando el
reloj es 1, se muestrea el valor actual de D y se
almacena en el latch. Este circuito, llamado
latch D con reloj, es una verdadera memoria
de un bit. El valor almacenado siempre est
disponible en Q. Para cargar el valor actual de
Den la memoria,
se aplica una pulsacin
positiva a la lnea del reloj.
L
a
t
c
h
e
s
D
Figura 3-24. Latch
D con reloj.
c
Reloj
Jl,
Figura
3-23.
Latch
SR con
reloj.
Este circuito
requiere
11
transistores. Circuitos ms avanzados
(pero menos obvios) pue- den almacenar
1 bit con menos transistores, hasta un
mnimo de seis. En la prctica sos son
los diseos normalmente usados.
3.3.2 Flip-tlops
En muchos circuitos es necesario muestrear
el valor que hay en una lnea dada en un
instante
ambas compuertas ANO producen O, sean cuales
sean los valores de S y R, y el latch no cambia
144
LGICA
CAP.3
DIGITAL
145
Cuando se obtiene el AND de las
entradas de la compuerta ANO, by e, el
resultado es un pulso corto, como se muestra
en la figura 3-25(b), donde la anchura de la
pulsacin,~. es igual al retardo de compuerta
del inversor, que por lo regular es de 5 ns o
menos. La salida de la compuerta ANO no es
ms que esta pulsacin desplazada por el
retraso de la compuerta ANO, como se aprecia
en la parte superior de la figura 3-25(b).
Este desplazamiento en el tiempo slo
implica que el latch D se activar con un
retraso fijo despus del flanco ascendente
del reloj, pero no tiene efecto sobre la
anchura de la pulsacin. En una memoria
con un tiempo de ciclo de 50 ns, una
pulsacin de 5 ns que le indica cundo debe
muestrear la lnea D podra ser lo bastante
corta, en cuyo caso el circuito completo
puede ser el de la figura 3-26. Vale la pena
sealar que este diseo de flip-flop es bonito
porque es fcil de entender, pero en la
prctica normalmente se usan flip-flops ms
complejos.
(a)
F
i
g
u
r
a
3
2
6
.
l
o
p
F
l
i
p
f
D
.
Tiempo ------+-
(
b
te para cargar el estado de D. Las figuras 327(c) y (d) son flip-flops, no latches, lo que
se indica con el smbolo angular en la
entrada del reloj. El de la figura 3-27(c)
cambia de estado con el flanco ascendente
del pulso de reloj (transicin O a 1),
mientras que el de la figura
3-27(d) cambia de estado con el flanco
descendente (transicin l a O). Muchos
latches y flip- flops, pero no todos, tambin
tienen Q como salida, y algunos tienen dos
entradas adiciona- les, Establecer o
Preestablecer (Set o Preset, para forzar el
estado a Q = 1) y Restablecer o
Borr
ar
(Rese
t
o
Clear
, para
forza
r el
estad
oaQ
= O).
3
.
3
.
3
R
e
g
i
s
t
r
o
s
Los flip-flops se pueden conseguir en
diversas configuraciones. Una de las ms
sencillas, que contiene dos flip-flops D
independientes con seales de borrar y
preestablecer, se ilustra en la figura 3-28(a).
SEC. 3.3
MEMORIA
146
EL NIVEL DE LGICA
DIGITAL
CAP.3
D
Q
1
4
Vcc
Q
Q
14
12
8
CK
CK
CK
CK
(b)
(a)
(d)
Figura
3-27.
Latch
es y
flipflops
D.
(e)
respectiva CL
R
y 11.
D
registros
Q
aplicaciones
detalle
CK
Q
P
R
3.3.4
de
4
(a)
V
c
CLR
CK
Q 1-----1,
G
N
D
Q
7
-J
Aunque
ya
avanzamos de la
sencilla memoria de
un bit de la figura 324 a la memoria de
ocho bits de la figura
3-28(b), para construir
memorias grandes se
requiere
una
organizacin
diferente, en la cual
sea
posible
direccionar palabras
individuales.
Una
organizacin de memoria muy utilizada
que satisface este
criterio se muestra en
la figura 3-29. Este
ejemplo ilustra una
memoria con cuatro
palabras de 3 bits.
Cada operacin lee o
escribe una palabra de
3 bits completa. Si
bien la capacidad
total de memoria de
12 bits apenas rebasa
la de nuestro flip-flop
octal, este diseo
requiere
menos
terminales y, lo que es
ms importante, es
fcil extenderla a
memorias grandes.
Aunque la
memoria de la
figura 3-29
podra parecer
complicada a
primera vista, en
realidad
es
muy
sencilla gracias a su
estructura
regular.
Este circuito tiene
ocho
lneas
de
entrada y tres lneas
memoria, la lgica
externa debe poner es
en 1 y tambin
poner RD en 1 si
se desea leer o
en O si se desea
escribir. Las dos
Ao
lneas
de
tres
direccin deben
control:
ajustarse
de
para
modo
que
seleccionar indiquen cul de
el
las
cuatro
(Chip
palabras de 3
Select),
bits se desea leer
para
distinguir o escribir.
entre
(ReaD)
escritura,
de
Tres
entradas
datos:
e
para
direccin:
OE
habilitar
salida
(Output
Enable).
tres
son
de
datos:
y
principio,
esta
memoria
podra
colocarse
un paquete
de
terminales,
incluida
de
y
tierra,
comparacin
con
termi- nales
para
flop
Para
este
CLR
CK
CLR
CK
1
0
(b)
t
ILL.
G
N
D
f'
!1
EL
NIV
EL
DE
L
GIC
A
DIG
ITA
L
148
Entrada de
datos
12
l
o
1
1
,
SEC. 3.3
MEMORIA
149
Ahora examinemos con
detenimiento la figura 3-29 para
observar el modo de funciona- miento.
Las cuatro compuertas ANO de
seleccin de palabra a la izquierda de
la memoria
Palabra O
Palabra 1
forman un
decodificador. Los
inversores de entrada se
colocaron de modo que
cada compuerta se habilite (su salida
sea alta) con una
direccin diferente.
Cada compuerta
alimenta una lnea de
seleccin de palabra, de
arriba hacia abajo, para
las palabras O, 1, 2 y 3.
Si el chip se seleccion
para escritura, la lnea
vertical rotulada es RO
estar alta y habilitar
una de las cuatro
compuertas de escritura,
dependiendo de cul
lnea de seleccin de
palabra est alta. La
salida de la compuerta
de escritura alimenta
todas las seales ex
para la palabra seleccionada, cargando los
datos de entrada en los
flip-flops de esa
palabra. Slo se
efecta una escritura si
es est alta y RO est
baja, y aun entonces
slo se escribe la
palabra seleccionada por
A0 y A1; las dems
palabras no se
modifican.
La lectura es
similar a la escritura.
La decodificacin
de la direccin es
exactamente la
misma que en una
escritura, pero ahora la
lnea es RDest baja,
lo que deshabilita todas
las
compuertas
de
escritura y ninguno de
los flip-flops
se
modifica. En vez de
ello,
la
lnea de
seleccin
de palabra
la palabra 1
Palabra 2
n
que no se seleccionaron no contribuyen a
e
la salida.
a
Aunque podramos haber diseado
d
un circuito en el que las tres
e
compuertas OR se alis
mentaran
directamente a las tres lneas de
e
l
datos de salida, hacerlo as a veces causa
e
problemas. En particular, hemos mostrado
c
c
que las lneas de entrada de datos y las de
i
salida de datos son diferentes, pero en las
n
memorias reales se emplean las mismas
lneas. Si hubiramos conec- tado las
d
e
compuertas OR a las lneas de salida de
la palabra 2
Palabra 3
datos, el chip tratara de producir datos (o
sea, forzar cada lnea a tener un valor
especfico) aun en las escrituras, y esto
interferira los datos de entrada. Por esta
razn, es deseable tener una forma de
C
S
conectar las compuertas OR a las lneas de
ninguna
de las dos
(circuitolas
abierto).
buffers
amplifican
seales,Los
por
lo
que tambin
, d
p~labra seleccionada se
coloca en las lneas de
salida de datos. Para unl:
o:a~:~~J:~e':::::~~
ra, los bits presentes en las
lneas de entrada de datos
se cargan en
seleccionada; las lneas de
salida de datos no se usan.
150
EL NIVEL DE
LGICA DIGITAL
CAP.3
E
n
t
r
a
d
a
S
E
M
E
A
O
A
2
AO
A1
A
2
1
5
S
a
l
i
d
a
d
e
d
a
t
o
s
d
e
d
a
t
o
s
=rA3
-/o--
A3
A4
DO
A4
A6
A6
(a)
(e)
(d)
m
em
ori
a
de
51
2K
X8
(b)
A11
Chip
A7
de
l
03
memoria
04
4096K X 1
05
A8
, ,
A9
A10
de
06
(4 Mbit)
07
RAS
eAS
es
WE
OE
(a)
e
s
W
E
O
E
(b}
3
.
3
.
5
C
h
i
p
s
d
e
m
e
m
o
r
i
a
Lo bueno de la memoria de la figura 3-29 es
que fcilmente se puede extender a un mayor
tamao. Tal como la dibujamos, la memoria
es de 4 x 3, es decir, cuatro palabras de tres
bits cada una. Para extenderla a 4 x 8 basta
con aadir cinco columnas ms de cuatro flipflops cada una, adems de otras cinco lneas
de entrada y otras cinco lneas de salida. Para
convertir esta memoria de 4 x 3 a 8 x 3
necesitaremos aadir otras cuatro filas de tres
flip-flops cada una, adems de una lnea de
direccin A2. Con este tipo de estructura, el
nmero de palabras en la memoria debe ser
una potencia de 2 si se desea una eficiencia
mxima, pero el nmero de bits en una
palabra puede ser el que se desee.
Puesto que la tecnologa de circuitos
integrados se presta a fabricar chips cuya
estructura
interna sea un patrn bidimensional
repetitivo, los chips de memoria son una
aplicacin ideal de esa tecnologa. Al mejorar la
tecnologa, el nmero de bits que se pueden
colocar en un chip aumenta continuamente,
duplicndose por lo regular cada 18 meses
(ley de Moore). Los chips ms grandes no
DE
LGICA
direccin de fila'seguida
de una sucesin de
direcciones de columna
para accesar bits consecutivos de un rengln.
Hace aos, los chips
de memoria ms
grandes en general
estaban organizados
como la
figura 3-31(b). Ahora que
las palabras de memoria
han crecido de 8 bits a 32
bits o ms, los chips con
una anchura de un bit
dejaron de ser prcticos.
Para construir
una
memoria con
palabras de 32
bits a partir de
chips
de
4096K x 1 se
requieren 32
chips
en
paralelo. Estos
32
chips
tienen
una
capacidad
total de por lo
menos
16
MB.
En
cambio, si se
usan chips de
5 l 2K x 8
slo
se
requieren
cuatro chips
en paralelo,
y pueden
tenerse
memorias
pequeas, de 2 MB o
ms. Para evitar tener 32
chips de memoria, casi
todos los fabricantes de
chips producen familias
con anchuras de 1, 4, 8 y
16 bits.
3
.
3
.
6
L
a
s
m
e
m
o
r
i
a
s
R
A
M
y
l
a
s
R
O
M
Todas las memorias que
hemos estudiado
hasta
aqu pueden leerse y
escribirse. Tales memorias se llaman RAM
(memoria
de
acceso
aleatorio, Random Access
Memory),
aunque
el
nombre
es
engaoso
porque
es
posible
accesar
aleatoriament
e a todos los
chips, no slo
los de RAM,
pero
el
trmino
ya
est
demasiado
bien
establecido
como
para
deshacerse de
l
a estas
alturas. Hay
dos
variedades de
RAM, esttica
y
dinmica.
Una
RAM
esttica
(SRAM, Static
RAM)se
construye
internamente
empleando
circuitos
similares
a
nuestro fliptlop D bsico.
Estas
memorias
tienen
la
propiedad de
que
su
contenido se
conserva en
tanto se sigue
alimentando el
circuito:
segundos,
minutos,
horas, y hasta
das.
Las
RAM estticas
dinmicas.
Sin embargo,
esta
gran
capacidad
tiene
un
precio:
las
RAM
dinmicas son
lentas
(decenas de
nanosegundos
).
La
combinacin
de una cach
de
RAM
esttica y una
memoria
principal de
RAM
dinmica
intenta
combinar las
propiedades
ventajosas de
cada una.
Existen
variostipo
s de chips
de RAM
dinmica.
El tipo
ms
antiguo
que
contina
en uso es
la
DRAM
FPM (modo
de
pgina
rpida, Fast
Page Mode).
Internamente,
la
organizacin
es una matriz
de bits;
el
hardware
presenta una
direccin
de
rengln
y
luego recorre
las
direc-
SEC.
MEMORIA
3.3
153
memoria antes de que la anterior se
haya completado. Este sencillo uso de
conductos no hace que una sola
referencia a la memoria sea ms rpida,
pero s mejora el ancho de banda de la
memoria, que produce ms palabras
por segundo.
Tanto los chips FPM como los
EDO son asincrnicos, lo que significa
que las lneas de direccin y de datos
no estn controladas por un mismo
reloj. En contraste, la SDRAM (DRAM
sincrnica) es un hbrido de RAM
esttica y dinmica y es controlado por
un solo reloj sincrnico. La SDRAM se
usa a menudo en las cachs grandes y
podra ser la tecnolo- ga preferida para
las memorias principales en el futuro.
Las RAM no son el nico tipo de
chips de memoria. En muchas
aplicaciones, como jugue- tes, aparatos
domsticos y automviles, el programa
y algunos de los datos deben conservarse
en la memoria aunque se interrumpa el
suministro de electricidad. Adems, una
vez instalados, ni el programa ni los datos
llegan a modificarse. Estos requisitos
han dado pie a la creacin de las ROM
(memorias slo de lectura, Read-Only
Memories), que no pueden modificarse
ni borrarse,
intencionalmente o por
accidente. Los datos de una ROM se
insertan
durante su fabri- cacin,
bsicamente exponiendo un material
fotosensible a travs de una mscara que
contiene el patrn de bits deseado y
luego eliminando por grabado la
superficie expuesta (o la no expues- ta).
La nica forma de modificar el
programa de una ROM es cambiar todo
el chip.
Las ROM son mucho ms
econmicas que las RAM cuando se
producen en grandes cantidades, pues
as el costo de elaborar la mscara se
diluye. Sin embargo, estas memorias
son inflexibles, porque no pueden
modificarse despus de su fabricacin,
iJLI
154
LGICA DIGITAL
3
EL NIVEL DE
CAP.
3-32 se presenta
un resumen de
los diversos tipos
de memoria.
A
l
t
e
r
a
b
l
e
Tipo
por byte
SRAM
DRAM
ROM
PROM
EPROM
EEPROM
Flash
Categora
Voltil
Lectura/escritura
Borrado
Uso tpico
Elctrico
Lectura/escritura
Slo lectura
Elctrico
Imposible
Imposible
Slo lectura
Princ. lectrua
Princ. lectura
Lectura/escritura
Luz UV
Elctrico
Elctrico
S
S
C
M
No
No
No
S
S
No
No
No
No
A
E
P
P
No
No
Figura
3-32.
Compa
racind
e
diversos
tipos de
memori
a.
3
.
4
C
H
I
P
S
D
E
C
P
U
Y
B
U
S
E
S
Ahora que poseemos informacin acerca de
los chips SSI, MSI y de memoria, podemos
comenzar a juntar todas las piezas y examinar
sistemas completos. En esta seccin,
examina- remos primero algunos aspectos
generales de las CPU desde la perspectiva del
nivel de lgica digital, incluida la conexin
de terminales o pinout (el significado de las
seales de las distintas terminales). Puesto
que las CPU estn ntimamente relacionadas
con el diseo de los buses que usan, tambin
proporcionaremos en esta seccin una
introduccin al diseo de buses. En secciones
3
.
4
.
1
C
h
i
p
s
d
e
C
P
U
Todas las CPU modernas estn contenidas en
un solo chip. Esto hace que su interaccin con
el resto del sistema est bien definida. Cada
chip de CPU tiene un conjunto de terminales,
a travs de las cuales debe pasar toda su
comunicacin con el mundo exterior. Algunas
termi- nales proporcionan seales de la CPU;
otras aceptan seales del mundo exterior;
algunas pueden hacer las dos cosas. Si
entendemos la funcin de todas las terminales,
podremos conocer cmo la CPU interacta
con la memoria y los dispositivos de E/S en
el nivel de lgica digital.
SEC. 3.4
CPU
CHIPS DE
BUSES
155
Las terminale~ de un chip de CPU se
pueden dividir en tres tipos: direccin, datos
y control. Estas terminales se conectan a
terminales similares de los chips de memoria
y de E/S a travs.de una coleccin de
alambres paralelos llamado bus. Para buscar
una instruccin, la CPU pnmero coloca la
direccin de memoria de esa instruccin en
sus terminales de direc- cin, ~ luego habilita
una o ms lneas de control para informar a la
memoria que quiere leer (por ejemplo) una
palabra. La memoria contesta colocando la
palabra solicitada en las termi- nales de datos
de la CPU y habilitando una seal para
indicar que ya termin. Cuando la CPU ve
esta seal, acepta la palabra y ejecuta la
instruccin.
La instruccin podra requerir leer o
escribir palabras de datos, en cuyo caso se
repite todo el proceso para cada palabra
adicional. Ms adelante veremos los detalles
de cmo funciona la lectura y la escritura.
Por ahora, lo que es importante entender es
que la CPU se comunica con la memoria y
los dispositivos de E/S tanto transmitiendo
como recibiendo seales en sus terminales.
No es posible ninguna otra comunicacin.
Dos de los parmetros fundamentales
que determinan el desempeo de una CPU
son el nmero de lneas de direccin y el
nmero de lneas de datos. Un chip que tiene
m lneas de direccin puede direccionar
hasta 2m localidades de memoria. Los
valores comunes de m son 16, 20, 32 Y 64.
De igual manera, un chip con n lneas de
datos puede leer o escribir una palabra den
bits en una sola operacin. Los valores
comunes den son 8, 16, 32, 36 y
Control de bus.
2.
Interrupciones.
3.
Arbitraje de bus.
4.
Sealizacin de coprocesador.
5.
Situacin.
6.
Diversos.
"''''
SEC. 3.4
156
EL NIVEL DE LGICA DIGITAL
CAP. 3
Direccionamiento
~'.j
,:;
"
Datos
Coproce
sador
"'\.._../:
.~
Sit
ua
ci
n
C
o
n
tro
ld
e
b
;, :
.
-:.# ..
;.'l.
r
~'
:-4'
e--,
r.:
In
t
;....<
1'.':~
,."._',
~.i
-i
rJ;
'
CHIPS
DE CPU Y BUSES
157
centraremos en los buses que
conectan a la CPU con la memoria y
los dispositivos de E/S. En el
siguiente captulo examinaremos
con ms detenimiento los buses
internos de la CPU.
Las
primeras
personales
tenan
un
solo
bus
externo
de sistema
constaba
de o50bus
a computadoras
100
hilos
deque
cobre paralelos grabados en la
tarjeta madre, con conectores
espaciados a intervalos regulares
para insertar tarjetas de memoria y
de E/S. Las computadoras
personales modernas
generalmente tienen un
bus de propsito especial
entre la CPU y la
memoria y (por lo menos) un bus
ms para los dispositivos de E/S.
En la figura 3-34 se ilustra un
sistema mnimo, con un bus de
memoria y un bus de E/S.
:.:
~
"!
Smbolo de tierra
,
.~
.
.
;.....~.
.
. C.i
C)
C..J
: Y '
: ~ ~
~.)
0'l
:':..
S
d
e
:~---t
""
i:-
-;
+
S
Chip de CPU
Buses
o
L
a
es 5 volts
Registros
Controlador
Bus de
memoria
~.~1~.3
.q ''
\ _)
~
-~
=
~ o
Figura 3-33. Conexin lgica de terminales de una CPU genrica. Las flechas
indican
de
~ seales
entrada
y
de
~,_
salida.
Las
~
::i'I lneas
diagonales
o
cortas indican
o
que se usan
varias
terminales. En
el caso de una
CPU
especfica, se
dara
un
nmero para
indicar
cuntas.
.,>
B
u
I
B
u
D
i
m
p
r
e
s
o
r
a
n
d
i
s
p
o
s
i
t
i
v
o
.
Algunos chips
de
CPU
estn
diseados
para
operar
con
coprocesadores,
como chips
de
punto flotante, de
grficos o de otro
tipo. Para facilitar
la
comunicacin
entre la CPU y el
coprocesador,
se
incluyen terminales
especiales
para
realizar y atender
diversas solicitudes.
Adems de
estas seales,
algunas CPU
tienen varias
terminales de
uso diverso.
Algunas
proporcionan
o
aceptan
informacin de estado, otras
son tiles para restablecer la
compu- tadora, y otras ms
estn presentes para asegurar
la compatibilidad con chips
de E/S antiguos.
3
.
4
.
2
B
u
s
e
s
d
e
c
o
m
p
u
t
a
d
o
r
a
Un bus es un camino elctrico
comn
entre
varios
dispositivos.
Los
buses
pueden clasificarse por su
funcin.
Pueden
usarse
internamente en la CPU para
transportar datos a y de la
ALU, o externos a la CPU
para conectarla con la
memoria o los dispositivos de
E/S. Cada tipo de bus tiene
sus propios requisitos
y
propiedades. En esta seccin
y en las que siguen nos con-
158
EL NIVEL DE
CAP.
LGICA DIGITAL
3
Esclavo
Memoria
Disoositivo E/S
Coprocesador
Memoria
CPU
Traer instrucciones
Iniciar transferencia
Delegacin de instruc
DMA (acceso direct
Obtencin de operan
Figura 3-35.
Ejemplos de
amos
(controladores) y
esclavos de bus.
SEC. 3.4
CPU Y BUSES
CHIPS DE
159
3
.
4
.
3
A
n
c
h
o
d
e
b
u
s
D
i
r
e
c
c
i
n
d
e
2
0
b
i
t
s
de tres estados,
para poder "flotar"
(desconectarse) cuando no se necesitan, o
estar conecta- dos de formaun tanto
distinta,llamada de colector abierto, cuyo
efecto es el mismo. Cuando dos o ms
dispositivos de una lnea de colector abierto
habilitan la lnea al mismo tiempo, el
resultado es un OR booleano de todas las
seales. Este sistema se conoce como OR
alambrado. En la mayor parte de los buses,
algunas de las lneas son de tres estados y
otras, que necesitan la propiedad de OR
alambrado, son de colector abierto.
Al igual que una CPU, un bus tambin
tiene lneas de direccin, de datos y de
control. Sin embargo, no necesariamente hay
una correspondencia uno a uno entre las
terminales de
la CPU y las seales del bus. Por ejemplo,
algunas CPU tienen tres terminales que
codifican
si se est efectuando una lectura de memoria,
una escritura de memoria, una lectura de E/S,
Direccin de 20 bits
I>..
Direc
cin
de
17
20
C
bits
o
n
t
r
o
l
"""
"'
Direccin
Control
8
0
2
8
6
Control
Direccin
bits
80386
r
Control
Direccin
d e 8 bits
de 4 bits
Cont
(a)
(b)
e4
Co
ntr
ol
"".:
'
(c)
160
LGICA
CAP.3
EL NIVEL DE
DIGITAL
3
.
4
.
4
T
e
m
p
o
r
i
z
a
c
i
n
d
e
l
b
u
s
Los buses se pueden dividir en dos categoras
segn su temporizacin. Un bus sincrnico
tiene una lnea alimentada por un oscilador de
cristal. La seal de esta lnea consiste en una
onda cuadrada cuya frecuencia generalmente
est entre 5 MHz y 100 MHz. Todas las
activi- dades del bus tardan un nmero entero
de estos ciclos, llamados ciclos de bus. El otro
tipo de bus, el bus asincrnico, no tiene un
reloj maestro. Los ciclos de bus pueden tener
la longitud que se requiera y no tiene que ser
la misma entre todos los pares de dispositivos.
A continua- cin examinaremos los dos tipos
de buses.
B
u
s
e
s
s
i
n
c
r
n
i
c
o
s
SEC. 3.4
CPU Y BUSES
CHIPS DE
161
EL NIVEL DE
CAP.
CHIPS DE
CPU Y BUSES
DATA MREQ
<I> ADDRESS
163
Ciclo de
lectura con
un estado
de espera
A
D
T1
T2
T3
T
A
WAI
T
TAL
ToH
Tiempo
(
a
)
Parmetro
Retraso de salida
de direccin
ns TML
11
de MREQ
TM
ns
Retraso de MREQ desde el
flanco dese. <I> en T 1
8
ns
TAL
Tos
TMH
ns
TAH
ns
ns
ns
Buses asincrnicos
Ro------...
EL NIVEL DE
CAP.
SEC. 3.4
CPU Y BUSES
CHIPS DE
165
SSYN
Figura 3-38.
Funcionamiento de
un bus asincrnico.
Hasta
ahora,
hemos
supuesto
tcitamente que slo hay un controlador
de bus, la CPU. En realidad, los chips de
E/S tienen que convertirse en
controladores de bus para leer y escribir
en la memoria, y tambin para causar
interrupciones. Los coprocesadores
tambin podran necesitar convertirse en
controladores de bus. Entonces surge la
pregunta: "Qu sucede si dos o ms
dispositivos quieren convertirse en
controlador del bus al mismo tiempo? La
resUn conjunto de seales que interacta de
esta manera se llama saludo completo. La
parte fundamental consiste en cuatro sucesos:
1.
Habilitar MSYN.
EL NIVEL DE
CAP
LGICA DIGITAL
3
Solicitud
de bus
Con
cesi
n
de
bus
rbitro
1
La
concesin
l.-~-\._/
,_, I
\
,_, I
.>
de bus podra
3
5 propagarse o no
por la cadena
Dispositivo de E/S
tt1
1
\
,_, I
CHIPS DE
167
rbitro
(a)
(b)
dispositivo 4,
el cual vence al 3. El
dispositivo 5 tiene la prioridad ms baja
porque est al final de la cadena de ms baja
prioridad.
Por cierto, no es tcnicamente necesario
conectar la lnea de otorgamiento de bus
del
nivel 2 en serie a los dispositivos 1 y 2,
porque no pueden hacer solicitudes en ese
nivel. No obstante,
por comodidad de
implementacin, se conectan todas las lneas
de otorgamiento a todos los dispositivos, en
lugar de conectar un cableado especial que
dependa de cul dispo- sitivo tiene cul
prioridad.
Algunos rbitros tienen una tercera lnea
que un dispositivo habilita cuando acept
una
concesin y se apoder del bus. Tan pronto
como el dispositivo habilita esta lnea de
acuse, las lneas de solicitud y de
otorgamiento pueden deshabilitarse. El
resultado es que otros dispositivos pueden
solicitar el bus mientras el primer dispositivo
est usando el bus. Para cuando termina la
transferencia actual en el bus, ya se ha
seleccionado el siguiente controla- dor de bus,
el cual puede iniciar tan pronto como se
deshabilita la lnea de acuse, momento en el
cual se puede iniciar la siguiente ronda de
arbitraje. Este esquema requiere una lnea de
bus extra y ms lgica en cada dispositivo,
pero aprovecha mejor los ciclos de bus.
+5v
Lnea de
1
arbitraje
out
1
1
in out
in1 out
in out
in out
1
1
1
1
1
1
1
d
e
1
-
b
u
s
d
e
s
c
e
n
t
r
a
l
i
z
a
d
o
.
\
,
_
,
I
\
,
_
,
I
\
,
_
,
in
r
b
i
t
r
a
j
e
2
3
4
5
F
i
g
u
r
a
3
4
0
.
A
t
,
n
e
s
3
.
4
.
6
d
e
b
u
s
O
p
e
r
a
c
i
o
168
EL NIVEL DE
SEC. 3.4
CPU Y BUSES
LGICA DIGITAL
CAP. 3
CHIPS DE
169
INT
<I>
IRQ
INTA
(:>Reloj
IR1
(.;;;...i;\
RD
CPU
Teclado
Controlador
WR
A
D
IR2--
de interrup-
IR3--
AO
ci
on
es
IR Impres
4- ora
-
D
A
es
825
M
R
9A
IR5
E:
)
R
D
Dis
co
DO-D7
I
R
6
I
R
?
+5
Figura342. Uso
del
controlad
or de
interrupci
ones
8259A.
WAI
T
BL
OC
K
Figura
3-41.
Transfer
encia
de un
bloque.
'
170
171
,
:
'
1
3
.
5
E
J
E
M
P
L
O
S
D
E
C
H
I
P
S
D
E
C
P
U
En esta seccin examinaremos los chips
Pentium 11, UltraSPARC 11 y picoJava 11
con cierto detalle en el nivel de hardware.
3
.
5
.
1
E
l
P
e
n
t
i
u
m
1
1
U
n
El Pentium 11 es un
descendiente directo de la
CPU 8088 que se us en la
IBM PC original. Aunque el
Pentium 11 con sus 7 .5
millones de transistores est
muy lejos del 8088 con
29,000
transistores,
es
totalmente compatible con el
8088 y puede ejecutar
programas binarios para el
8088
sin
modificacin
(adems de programas para
todos
los
procesadores
intermedios).
Desde el punto de vista
del software, el Pentium 11 es
una mquina de 32 bits
completa. Tiene la misma
ISA en el nivel de usuario
que los chips 80386, 80486,
Pentium y Pentium Pro,
incluidos
los
mismos
registros,
las
mismas
instrucciones
y
una
implementacin comple- ta
en el chip del estndar de
punto flotante IEEE 754.
Desde el punto de vista
del hardware, el
Pentium 11 es algo ms
porque puede
direccionar
64 GB de memoria fsica y
puede transferir datos de y a
la memoria en unidades de
64 bits.
Aunque el programador no
puede
observar
estas
transferencias de 64 bits,
hacen que la m- quina sea
ms rpida que una mquina
de 32 bits pura.
Internamente, en el nivel
de microarquitectura, el
Pentium 11 es
bsicamente un Pentium
Pro al que se aadieron las
instrucciones MMX. Las
instrucciones en el nivel de
ISA se obtienen de la
CartucShoEC
Pentiu11m
P
r
o
c
e
s
a
d
o
r
P
e
n
t
i
u
1
1
m
16 KBdecach
Al
16
KBdecach de
instrucciones
dedatonsive1 l
C
o
n
t
a
c
t
o
bus
memoria
con
mucha
anticipacin y se
descomponen en
microoperaciones
tipo RISC. Estas
microoperaciones
se almacenan en
un buffer, y tan
pronto como una
dispone de los
recursos
necesarios
para
172
LGICA
CAP.3
EL NIVEL DE
DIGITAL
.~;~~avavavav&vava
A~~VAVAVAVAVAVAVAVAVAVAVAVA
VAVAVAVAVAVA~AVAVA~~
Figura 3-43. El
paquete SEC del
Pentium II.
eable
consu
mir
mucha
energ
a. Para
subsan
ar este
proble
ma,
Intel
ha
hecho
posible
poner
SEC.
3.5
Arbitraje {
BPRI# de bus
LOCK# Mise#
A# Solicitud
ADS#
E
HIPS DE
J
CPU
E
M
P
L 3
O
S 33
D
E
C
RES
ET#
}
Interru
pcion
es
{
VID
P
a
CPU
11
Mise
La
co
ne
xi
n
lg
ica
de
ter
mi
nal
es
del
Pe
nti
um
11
Los 242 conectores de arista del SEC se
usan para 170 seales, 27 conexiones de
potencia (a diferentes voltajes), 35 tierras y
10 repuestos para uso futuro. Algunas de las
seales lgicas emplean dos o ms
terminales (como la direccin de memoria
solicitada), as que slo hay 53
seales distintas. En la figura 3-44 se
muestra la configuracin de conexin lgica
de termi-
#
Espio
P
e
n
t
i
u
m
3
3
Mise
64
#
D#
1
1
naje
S#
Respu
esta
TROY
#
{
Pari
dad#
rror {
1
7
3
5
5
atibilidad Diagnstico
Inicializacin
Contr
ol de
energ
a
D
R
D
Y
#
D
a
t
o
s
D
B
S
Y
#
Miscelneos
2
7
3
5
{
8
Par
ida
d#
<1>
Alimentaci
n
amo. Estas
seales tambin tienen
verificacin de paridad.
El ltimo grupo del bus sirve para
transferir realmente los datos. o# sirve para
colocar
8 bytes de datos en el bus. Una vez que estn
ah, se aserta DRDY# para anunciar su
presencia. DSBY# sirve para decirle al mundo
que el bus est ocupado.
RESET# sirve para restablecer la CPU en
caso de ocurrir una calamidad. El 'Pentium II
puede configurarse de modo que use las
interrupciones igual que el 8088 (para fines de
com- patibilidad con lo existente) pero
tambin puede usar un nuevo sistema de
interrupciones con un dispositivo llamado
APIC
(controlador
de interrupciones
programable
avanzado, Advanced
Programmable Interrupt Controller).
llr'" ,.
174
EL NIVEL DE LGICA DIGITAL
CAP.3
SEC.
EJEMPLOS
DE
CHIPS
DE
3.5
CPU
175
El Pentium 11 puede
operar a varios voltajes, pero
necesita saber cul. Las
seales
VID sirven
para
seleccionar automticamente
el voltaje de la fuente de
potencia. Las seales de
Compatibilidad sirven para
engaar
a
dispositivos
antiguos en el bus que
piensan que estn hablando
con un 8088. El grupo de
Diagnstico contiene seales
para probar y depurar sistemas segn la norma de
prueba IEEE 1149.1 JTAG.
El grupo de Inicializacin se
ocupa de arrancar el sistema
(booting).
El grupo de
Control de energa permite
poner a dormir a la CPU
normal y profundamente. Por
ltimo, el grupo Miscelneo
es una revoltura de seales
que incluye una que la CPU
habilita si su temperatura
interna llega a 130C (266F).
Si una CPU alcanza alguna
vez
esta
temperatura,
probablemente est soando
en retirarse y conver- tirse en
una estufa para acampar.
Filas de procesamiento en
el bus de memoria del
Pentium 11
T
r
Ciclo de
bus
T1
Te
T11
T2
T1
Ts
Ta
T4
Tg
T5
T10
T12
<I>
11
usa las filas de
procesamiento, y se pueden
estar ejecutando hasta ocho
transacciones de bus al
mismo tiempo. Ya vimos el
concepto
de
filas
de
procesamiento en el captulo
2 en el contexto de una CPU
con filas de procesamiento
(vea la figura 2-4), pero las
memorias tam- bin pueden
usarlos.
Para ello, las solicitudes
de memoria del Pentium
11, llamadas
transacciones, tienen
seis
e
t
a
p
a
s
:
La fase de arbitraje
de bus.
l.
2. La fase de
solicitud.
3. La fase de
informar errores.
4. La fase de
espionaje.
5. La fase de
respuesta
6.
La fase de datos.
( Solic)
Datos
4
(Resp)
(Error)
(Espio)
( Solic}
(Datos)
(Espio)
Resp
(Datos}
( Solic)
(Error} (Espio)
(Resp} (Datos}
Solic)
(Espio}
( Resp) (Datos)
3
.
5
.
2
E
l
U
l
t
r
a
S
P
A
R
C
otro
dispositivo
solicitante.
Las
transacciones 1 y 2 son sencillas: cinco
fases en cinco ciclos de bus. La
transaccin 3 introduce una fase de
datos ms larga, por ejemplo, porque es
una transferencia de bloque o porque la
memoria direccionada insert un estado
de espera. Por consiguiente,
la
transaccin 4 no puede iniciar su fase de
datos cuando quisiera hacerlo. La
transaccin 4 observa que la seal DBSY#
todava est habilitada y sim- plemente
espera que la deshabiliten.
En la
transaccin 5 vemos que la fase de
respuesta tambin puede tardar varios
ciclos de bus,
lo que retarda la
transaccin 6.
Por ltimo,
en la
transaccin 7 observamos que una vez
que se ha introducido una burbuja en la
fila de proce- samiento permanece ah si
se siguen iniciando consecutivamente
nuevas transacciones. Sin embargo, en la
prctica es poco probable que la CPU
intente iniciar una nueva transaccin en
cada ciclo de bus, as que las burbujas no
duran tanto.
1
1
Como
segundo
ejemplo de chip de
CPU,
examinaremos la
familia UltraSPARC
de
Sun.
Esta
familia es la lnea
de las CPU SPARC
de 64 bits de Sun.
La
familia
UltraSPARC
se
ajusta cabalmente a
la
arquitectura
SPARC versin 9,
que tambin es para
las CPU de 64 bits,
Y
se usa
en
estaciones
de
trabajo
y
servidores Sun, as
como en varias
aplicaciones ms.
t
e
r
a
.
El UltraSPARC II se
dise para construir
multiprocesadores de
cuatro nodos con
memoria
compartida sin la
adicin
de
circuitos externos,
y
multiprocesadores
ms gran- des con
un mnimo de
circuitos externos.
En otras palabras,
gran parte del
"adhesivo" que se
necesita
para
construir
un
multiprocesador
ya est incluido
en cada chip
U
l
t
r
a
S
P
A
R
C
I
I
.
A diferencia
del SEC del
Pentium 11, la
CPU
UltraSPARC 11
es un chip
autnomo,
aun-
que
moderadamente
grande, con 5.4
millones
de
transistores. Tiene
787 terminales en
su base, dispuestas
como se muestra en
la figura 3-46. Esta
gran cantidad de
terminales se explica en parte por el
uso de 64 bits para
las direcciones y
128 bits para los
El UltraSPARC 11 tiene
dos cachs internas: 16
KB para instrucciones y
16 KB para
datos. Al igual que el
Pentium II, tambin usa una
cach de nivel 2 externo al
chip, pero a diferencia del
Pentium 11 esa cach no viene
empaquetada
con
el
UltraSPARC 11 en un cartucho
patentado.
Los
diseadores de sistemas estn
en libertad de escoger
cualquier chip de cach
comercial que deseen para la
cach de nivel 2.
La decisin de integrar la
cach nivel 2 en el
Pentium 11 y separarlo en
el UltraSPARC 11
se debe en parte a
las
opciones
tcnicas y en parte
a los diferentes
modelos
comerciales
que
Intel y Sun usan.
En
el
aspecto
tcnico, una cach
externa es ms
flexible (las cachs
del UltraSPARC 11
pueden ir de 512
KB a 16 MB; las
del Pentium 11
estn fijas en 512
KB), pero podra
ser ms lento a
causa de su mayor
distancia de la
CPU. Adems, se
requieren
ms
seales
visibles
para direccionar la
cach (los 242
conectores
del
cartucho SEC del
Pentium
11
no incluyen
seales para la
cach, ya que la
interaccin CPUcach es interna al
cartucho),
p
e
r
o
l
a
s
7
8
7
t
e
r
m
i
n
ales del
UltraSPA
RC 11 s
incluyen
control de
cach.
SEC. 3.5
EJEMPLOS DE CHIPS DE CPU
177
Figura3-46. El
chip de CPU
UltraSPARC II.
~'
i: ;
"''
'
'
178
S
E
179
18
Arbtrale
Etiqueta
de bus
de
5
direccin
Etiqueta
Direc.
de
memoria
35
Parid
25
de
ad
de
4 Etiq. de paridad
la
UltraSPA
RC
direc
.
20
Direc Dire
datos
cci
Direc. de datos vlida
n
Cachs
de
vlid
1
a
128
Datos
Esperar
Contesta
r
4
16
Paridad
5 Control
Buffer
de memoria
UDB 11
EJEMPLOS DE CHIPS
DE CPU
I
n
m
e
Figura 3-47.
Principales
caractersticasdel
corazn de un sistema
UltraSPARC ll.
ltraSPARC
11 que acabamos de presentar, al igual
que la del Pentium 11 que la precedi,
se ha simplificado considerablemente, aunque se
describi la esencia del
funcionamiento.
2, deber traerse
de la memoria
principal
va la interfaz UPA.
La
UPA
del
UltraSPARC 11 se
implementa con un
controlador
centraliza- do. Las
seales de direccin
y control de la CPU
(de todas las CPU si
hay ms de una)
llegan ah.
Para
accesar la memoria,
la CPU debe usar
primero las lneas
de arbitraje de bus
para
obtener
permiso
de
continuar. Una vez
concedido
el
permiso, la CPU
enva la direccin de
memoria, especifica
el tipo de solicitud,
y habilita la lnea de
direccin
vlida.
(Estas lneas son
bidireccionales
porque otras CPU de
un multiprocesador
UltraSPARC
11
necesitan
tener
acceso a las cachs
remotas
para
mantener
la
coherencia de todas
las cachs.)
La
direccin y el tipo
de ciclo de bus se
colocan
en
las
lneas de Direccin
en dos ciclos: el
rengln en el primer
ciclo y la columna en el
segundo, como vimos en la
figura 3-31.
3
.
5
.
3
E
l
p
i
c
o
J
a
v
a
1
1
Tanto el Pentium 11 como el UltraSPARC
II son ejemplos de CPU de alto
desempeo disea- das para construir PC
y estaciones de trabajo extremadamente
rpidas. Cuando la gente pien- sa en las
computadoras, ste es el tipo de
sistemas
en el que tienden a
concentrarse. Sin embargo, existe todo
un mundo de computadoras distinto que
en realidad es mucho ms grande: los
sistemas incorporados. En esta seccin
daremos un vistazo a ese mundo.
Es probable que no exageremos
mucho si decimos que cualquier
dispositivo elctrico que cueste ms de
100 dlares probablemente incluye una
computadora. Sin duda los televi- sores,
telfonos
celulares,
organizadores
personales electrnicos, hornos de
microondas, c- maras de video,
videograbadoras,
impresoras
lser,
alarmas contra robo, aditamentos para la
sordera, juegos electrnicos y otros
dispositivos estn controlados por
computadoras.
Las
computadoras
contenidas en estos artculos suelen estar
optimadas para tener un precio bajo ms
que para tener un buen desempeo, lo
que da lugar a concesiones diferentes de
las que se hacen en las CPU de alta
SEC. 3.6
BUSES
EJEMPLOS DE
181
16
CP
U
Lneamicr
s de oJa
E/S va
--4----1
70
progr
1
amab
le
C
a
c
Bus h
d
e
n
i
v
e
l
Figur
a 348.
Un
siste
ma
micr
oJav
a
701.
Tres caractersticas
de la figura 3-48 saltan
a la vista. Primera, el
microJava 701 utiliza
el bus PCI (a 33 MHz
o bien 66 MHz). Este
bus fue creado por
Intel para usarse en los
sistemas Pentium del
extremo superior, pero
es independiente del
182
LGICA
CAP. 3
EL NIVEL DE
DIGITAL
popular
para perifricos
de baja
velocidad, como los ratones y los
teclados. En las secciones que siguen
examinaremos cada uno de estos buses.
3
.
6
.
1
E
l
b
u
s
I
S
A
El bus de la IBM PC era de hecho el
estndar en los sistemas basados en el
8088 porque casi todos los fabricantes
de clones de la PC lo copiaron para
poder usar en sus sistemas las muchas
tarjetas de E/S existentes hechas por
otros fabricantes.
Ese bus tena 62
lneas de seal, incluidas 20 para una
direccin de memoria, 8 para datos y
una en cada caso para habilitar lectura
de memoria,
escritura de memoria,
lectura de E/S y escritura de E/S. Tambin haba seales para solicitar y
conceder interrupciones y usar DMA, y
nada ms. Era un bus muy sencillo.
Fsicamente, el bus estaba grabado en
la tarjeta madre de la PC, con una
media docena de
conectores situados a intervalos de 2 cm
para insertar en ellos tarjetas (plug-ins).
Cada tarjeta
SEC.
EJEMPLOS
DE
3.6
BUSES
183
esas alturas ya era realmente obsoleto),
pero en parte se debi sin duda a un
deseo de poner un obstculo en el
camino de las compaas que
fabricaban clones de Ja PC, las cuales
se haban apoderado de una porcin
preocupante del mercado. As, las
mquinas PS/2 de precio medio y alto
se equiparon con un bus,
el
Microchannel, que era totalmente
nuevo y que estaba protegido por una
pared de patentes respaldada por un
ejrcito de abogados.
El resto de la industria de las
computadoras personales reaccion
adoptando su propio estndar, el bus
ISA (arquitectura estndar de la
industria, Industry
StandardArchitecture), que es
bsicamente el bus de la PC/ AT a 8.33
MHz. La ventaja de este enfoque es
que man- tiene la compatibilidad con
las mquinas y las tarjetas existentes;
adems, se basa en un bus para el que
IBM haba otorgado generosamente
licencias a muchas compaas con el
fin de asegurar que el mayor nmero
de fabricantes posible produjera
tarjetas para el PC original, algo que
result contraproducente para IBM.
Todas las PC basadas en Intel tienen
an este
bus,
aunque
generalmente
acompaado por uno o ms buses
distintos. Se puede encontrar
una descripcin exhaustiva del bus ISA en
(Shanley y Anderson,
l 995a).
5 < .~
T
a
rj
et
a
m
a
d
r
e
:::1
t";:;
(por
ejemplo, para multiprocesamiento). Este
nuevo
rc1 :.: bus se llam EISA (ISA extendido). :'.
bus de PC
Bus de PC
S
i
n.
.
Chips
t
o
d
o
l
o
s
j
u
e
g
o
s
d
e
m
u
l
t
i
m
e
d
i
a
,
c
o
m
e
n
z
a
r
o
n
a
u
s
a
r
c
o
m
p
u
t
a
d
o
r
a
s
p
a
r
a
f'
:!
<
ex ~-~-~.
r '""(
video
de
pa
lla
comp
le
pleno
mo
m
o,
la
sit
n
camb
i
radic
alme
nte
Figura 3-49. El bus PC/ATtiene dos
componentes, la parte de la PC original y
la parte nueva.
CPU
y otros
chips
D D
c=J
c=J
Nuevo conector para
PC/AT
Conector de arista
EL
NI
VE
L
DE
CAP. 3
S
Bus de cach
Bus de memoria
C
a
c
h
de
niv
el
C
P
U
21
'\--'
Bus local
Puente
PCI
Puente
ISA
T
e
/L------l-----..1\1
Memoria
principal
Ranura PCI
disponible
clado
Bus ISA
T
a
s
o
I
m
Ranura
ISA
disponib
le
EL NIVEL DE
DIGITAL
LGICA
CAP. 3
I+
1
#
#
#
#
a
o
UJ
UJ
UJ
UJ
i
1111-
o
a:
o
a:
o
a:
P
C
I
#
#
#
#
zz
zz
SEC.
EJEMPLOS
DE
3.6
BUSES
187
S
e
a
l
e
s
d
e
l
b
u
s
P
C
I
El bus PCI tiene varias seales obligatorias
que se muestran en la figura 3-52(a), y varias
seales opcionales, que se muestran en la
figura 3-52(b). El resto de las 120 o
184terminales se usa para alimentacin,
tierra
y
otras
funciones
diversas
relacionadas; no se mostrarn aqu. Las
columnas Amo (iniciador) y Esclavo
(objetivo) indican quin habilita la seal en
una transaccin normal. Si un dispositivo
d
e
P
CI
a:
Dispositivo
Dispositivo
Dispositivo
Dispositivo
PCI
PCI
PCI
PCI
188
EL
NIVEL
DE LGICA DIGITAL
CAP.
3
189
Ahora llegamos a las seales
opcionales, que en su mayora
se relacionan con la expan-
Seal
Lneas
Amo
Esclavo
Descripcin
CLK
AD
1
32
PAR
C/BE
FRAME#
IRDY#
IDSEL
DEVSEL#
1
X
El esclavo decodific
su direccin y est
escuchando
si
re
so
mu
blo
ve
}ft:~::
TROY#
STOP#
PERR#
SERR#
REQ#
1
1
GNT#
RST#
1
1
(a)
Seal
REQ64#
Lneas
1
Amo
Esclavo
ACK64#
AD
32
Descripcin
Solicitud para ejecutar una transaccin de 64 bits
Se da permiso para una transaccin de 64 bits
32 bits de direccin o datos adicionales
PAR64
C/BE#
LOCK
SBO#
SDONE
1
1
INTx
Solicitar interrupcin
JTAG
3
.
6
.
3
E
l
a
l
u
n
i
v
e
r
s
a
l
El bus PCI est bien para conectar
perifricos de alta velocidad a una
computadora, pero es demasiado
costoso tener una interfaz PCI para
cada dispositivo de E/S de baja
velocidad, como un teclado o un ratn.
Histricamente, todos los dispositivos
de E/S estndar se conec- taban a la
computadora de una forma especial,
dejando algunas ranuras ISA y PCI
libres para
b
u
s
s
e
r
i
190
SEC. 3.6
EJEMPLOS DE BUSES
191
DEVSEL# TROY#
C
i
c
l
o
d
e
b
u
s
Lectura -------;~
Ocioso
Escritura
k-----
,.....
---T1
l.
8. No se deber requerir un
rearranque despus de instalar un
nuevo dispositivo.
Figura
3-53.
Ejempl
os de
transac
ciones
de bus
PCI de
32 bits.
Los
primer
os tres
ciclos
se
emplea
n para
una
operaci
n de
lectura,
luego
un
ciclo
ocioso
y luego
tres
ciclos
para
una
operaci
n de
escritu
ra.
Los dispositivos
debern poder
instalarse mientras la
computadora est
funcio- nando.
.
'
.
'
aadir
nuevos
dispositivos.
Lamentablemente, este esquema tuvo
muchos problemas desde
el principio. Por ejemplo, cada
dispositivo de E/S nuevo por lo regular
viene con su propia tarjeta ISA o PCI. El
usuario
a
menudo
tiene
la
responsabilidad de ajustar interruptores y
puenteadores en la tarjeta y asegurarse
de que los ajustes no estn en conflicto
con otras tarjetas. Luego, el usuario debe
abrir el gabinete de la computadora,
insertar la tarjeta con mucho cuidado,
cerrar el gabinete y rearrancar la
computadora. Para muchos usuarios este
proceso es difcil y hay una posibilidad
alta de cometer errores. Adems, el
n
P
ar
a
re
so
lv
er
es
te
pr
o
bl
e
m
a,
a
m
e
di
a
d
os
d
e
la
d
c
a
d
a
d
e
lo
s
n
o
v
e
nt
a
se
re
u
ni
er
o
n
re
pr
es
A
lg
u
n
os
d
'
,ioi,
SEC. 3.7
INTERFACES
192
EL NIVEL DE LGICA DIGITAL
CAP. 3
193
en,
cuando
ms,
16
subconductos para diferentes
tipos de datos (por ejemplo,
audio y video). Dentro de
cada conducto o subconducto,
fluyen datos del eje raz al
dispositivo
o en la otra
direccin.
No hay trfico
entre dos dispositivos de E/S.
Precisamente cada 1.00
0.05 ms, el eje raz
transmite una nueva
trama para mantener a
todos los dispositivos
sincronizados en el tiempo.
Una trama se asocia a un
conducto de bits Y consiste en
paquetes, el primero de los
cuales va del eje raz al
dispositivo. Los paquetes
subsecuentes de la trama
tambin podran enviarse en
esta direccin, pero tambin
podran regresar del dispositivo
al eje raz. En la figura 3-54
se muestra una sucesin de
cuatro tramas.
Tiempo
(ms)
----
o
3
2
Ocioso
[
aO
'jsoF[
,/
J
T
r
a
m
a
1
[
,'l
\
'
Pa
que
tes
\
/
de
la
ra
z
\
l~
o}
1~
IJ
l\ \
Trama 2
\
\[soF(
DAT
~~
,
,
,''
'
,/
I
,J
Trama3
'
v!
'
/
Paquetes
'
\
de la raz
\
~~~
JJ
DATA
lX~I
spe
ra
por
fav
or;
esto
y
ocu
pad
o).
E
xa
un
err
or
de
C
R
C)
y
ST
AL
L
(e
-,
,'
/
',,
',,
,, ' '
'
tadora.
El paquete
le se
indica
al
dispositivo
que En
los ACK
datos
recibieron
correctamente.
N al dispositivo y el
caso de haber
A
un error, se
K paquete se
devolvera un
retransmitira
Del
,
,
/
d
i
s
p
o
s
i
t
i
v
o
,
'
,
::d~
~~:
-J~
vNI
PID
lcG
A.
T1
LlcR
c'I
de
en el caso de datos de
volumen (pero no en el
de datos isocrnicos). La
t
r
a
Figura 354. El eje
raz USB
enva
tramas
cada 1.00
ms.
En la
trabajo
tramas
lo que
paquete
Universal
Asynchronous Receiver Transmitter) es
3.7 INTERFACES
universal asincrnico,
:11,
Ulh1 ,,; z .
Asynchronous
Receiver
Transmitter)
'
194
SEC 3.7
INTERFACES
EL NIVEL DE
LGICA DIGITAL
t
195
CAP. 3
3.7.2 Decodificacin de
direcciones
Chips PIO
Un chip de entrada/salida paralela
(PIO,
Parallel
Input!Output)
representativo es el Intel
8255A, que se muestra en la figura 3-55.
Este chip tiene 24 lneas de E/S que
pueden conec- tarse
con cualquier
dispositivo compatible con TTL, por
ejemplo, teclados, interruptores, lmparas
o impresoras. En pocas palabras, el
programa de la CPU puede escribir un O
o un 1 en cualquier lnea, o leer el estado
de entrada de cualquier lnea, lo que
ofrece gran flexibili- dad. Un sistema
pequeo basado en CPU que usa un PIO
a menudo puede sustituir a toda una
tar je ta llena de chips
-et
,o.~
..-1
.
~
,
.
,
.
Hasta
ahora
hemos
evitado
deliberadamente explicar con claridad
cmo se habilita la lnea de seleccin de
chip (es) en los chips de memoria y de
E/S que hemos examinado. Ha llegado el
momento de ver con ms detalle cmo se
hace esto. Consideremos una sencilla
computadora de 16 bits que consiste de
una CPU, una EPROM de 2K x 8 bytes
para el programa, una RAM de 2K X 8
bytes para los datos, y un PIO. Este
pequeo sistema podra usarse como
prototipo del cerebro de un juguete
barato o un aparato domstico sencillo.
Ya en produccin, la EPROM podra
sustituirse por una ROM.
El PIO puede seleccionarse de una de
dos maneras: como verdadero
dispositivo de E/S 0
como parte de la memoria. Si optamos
por usarla como dispositivo de E/S,
deberemos selec-
, ~.
los
sistemas
incorporados.
fu
r:
o-)
'H
i
1I
;
;
.,,
f:
~!,
_
;
?
. ,.._
8
2
~.
z:
A
O
-A
1
L~
" -
:i:;
<o::
- -~
[ :;
~ :;
~ .
de
P
u
8
2
5
5
A
8
2
5
8
RD
paralela
~
?
"
,,....
~-"!
J
U
;:
C<
~
q
K r
~
1
~
~
:
~
8
8
Figura 3-55.
Chip PIO
cionarla
usando
una lnea
de bus
explcita
indique
haciendo que
referencia
a que
un se est
dispositivo
deusamos
E/S, nolaa otra
la
memoria.
Si
estrategia,
E/S
con
mapa
en la memoria, deberemos asignar 4 bytes del
espacio de memoria para los tres
puertos y el registro de control. La
decisin es un tanto arbitraria.
Escogeremos E/S con mapa en la
memoria porque
Puerto C
i
l,
tb
ay
.
.
!'
;
!\
go
;.;>::.
c.i
!.
opcin
seen
muestra
figura
3-56.
EPROM
ocupa
las
direcciones
hasta
2K,
lalaLa
RAM
RAM
PIOen
Figura 3-56.
Ubicacin de la
EPROM, la RAM y el
PIO en nuestro
espacio de direcciones
de 64K.
de otras
196
EL NIVEL DE LGICA DIGITAL
CAP. 3
SEC.
INTERFACES
3.7
197
series SSI estndar. Lo ms cercano que
hay es una compuerta NOR de ocho
entradas. Si conectamos a tierra tres
entradas e invertimos la salida
podremos producir la seal correcta,
como se muestra en la figura 3-57(a).
Los chips SSI son tan baratos que,
excepto en circuns- tancias especiales,
no importa si se usa uno de ellos de
forma ineficiente. Por convencin, las
entradas que no se usan no se muestran
en los diagramas de circuito.
Se puede usar el mismo principio
para la RAM, slo que en este caso la
RAM deber responder a direcciones
binarias
de
la
forma
lOOOOxxxxxxxxxxx. Por ello, se
necesita un inversor adicional como se
muestra en la figura. La decodificacin
de direcciones del PIO es un poco ms
complicada, porque se selecciona con
las cuatro direcciones de la forma
l l l l 11111l l l l lxx. En la figura se
muestra un posible circuito que habilita
ws slo cuando la direccin correcta
aparece en el bus de direcciones. Este
circuito usa dos compuertas NANO de
ocho entradas para alimentar una
compuerta OR. La construccin de la
lgica de decodificacin de direcciones
de la figura 3-57(a)
utilizando SSI
requiere seis chips: los cuatro chips de
ocho entradas, una compuerta OR y un
chip con tres inversores.
es
E
P
2
K
R
A
M
2K
X
8
PIO
Ao
Bus de direcciones
(
a
)
-.
-
es
es
es
EPROM
RAM
2K X 8
2K X 8
(b)
P
I
11,
llf iU
e
m
r
198
'
EL NIVEL DE
LGICA DIGITAL
CAP.3
(
:
1
!
1
1
1
.
i
,
i
l
j
i
1
1
i
l
P
R
C
A
1
9
l.
U
q
u
e
a
.
e
n
b
.
e
s
p
a
o
l
l
o
"
o
"
u
n
a
e
s
s
a
l
c
h
i
c
h
a
.
c. Slo papas fritas.
d. Una salchicha y papas fritas.
e. Una hamburguesa y papas fritas.
f
.
u
n
a
"
o
e
x
c
l
u
s
i
v
a
"
.
)
a
.
S
l
o
u
n
a
h
a
m
b
u
r
g
u
e
s
U
n
a
s
a
l
c
h
i
c
h
a
y
u
n
a
ha
m
bu
rg
ue
sa.
g.
La
s
tre
s
co
sas
.
h.
Na
da;
el
l
gi
co
se
qu
ed
a
9.
10.
201
22. La memoria 4 x 3 de la figura 3-29 usa
22 compuertas AND y tres compuertas OR.
Si el circuito se fuera a expandir a 256 x
8, cuntas compuertas de cada tipo se
necesitaran?
24. Una computadora con un bus de datos de 32 bits emplea chips de memoria RAM dinmica lM x l.
Qu tamao mnimo de
memoria (en bytes) puede
tener esta computadora?
1
25. Remitindonos al diagrama de temporizacin de la figura 3-37, suponga que frenara el reloj hasta
Por qu?
14.
Se puede construir un
sumador
de
n
bits
conectando en serie n
sumadores completos, con el
acarreo de entrada a la etapa
i, C, tomado de la salida de la
etapa i - l. El acarreo de
entrada de la etapa O, C0, es O.
Si cada etapa tarda T ns en
producir su suma y acarreo,
el acarreo de entrada de la
etapa i no ser vlido sino
hasta iT ns despus de
iniciada la suma. Si n es
grande, el tiempo necesario
para que el acarreo se
propague hasta la etapa de
orden
alto
podra
ser
inaceptablemente
largo.
Disee un sumador que
funcione con mayor rapidez.
Sugerencia: Cada C; se puede
expresar en trminos de los
bits del operando A;_1 y B;_1
as como el acarreo C;_1. Con
esta relacin es posible
expresar C, en funcin de las
entradas de las etapas O a i l, y todos los acarreos pueden
generarse simultneamente.
Tambin
puede
efectuar restas en
complemento a 2?
Si esto es posible,
explique cmo. Si
no,
modifquela
para que pueda
efectuar restas.
17. A veces es til que
una ALU de 8 bits como
la de la figura 3-20
genere la constante -1
como salida.
Sugiera dos formas
distintas de hacerlo.
En cada caso,
especifique los
valores de las seis
seales de control.
i.l
16.
20.
El circuito de la
figura 3-26 es un
flip-flop que se
dispara
en
el
flanco
ascendente del reloj. Modifique este circuito para
producir un flip-flop que se
dispare
en
el
flanco
descendente del reloj.
21.
30.
D dos
2
0
si
dicha
lnea
nueva
se
conect
ara a
Al3?
43.
4
E
L
NI
VE
L
DE
MI
CR
OA
RQ
UIT
EC
TU
RA
4.1
UN
EJEMPLOD
E
MICROARQ
UITECTURA
204
EL NIVEL DE
MICROARQUITECTURA
CAP.4
UN EJEMPLO
SEC. 4.1
DE MICROARQUITECTURA
205
e
s Un
conveniente
para el
de
microarquitectu
ra es
diseo co
problema
programac
en el qu
instrucci
el nivel
una
que
el
programa
maestro
invocar.
modelo,
program
maestro
ciclo
infinito
simple
determina
funcin
invoca
r,
llama
a
la
funci
n,
y
vuelve
a
comen
zar,
casi
como
se
muestr
a en la
figura
2-3.
El
microprogr
ama tiene
un
conjunto
de
variables,
llamadas
estado de la
computadora, al
que todas las funciones
tienen acceso. Cada funcin
modifica al menos algunas
de las varia- bles que
constituyen el estado. Por
ejemplo, el Contador de
Programa (PC) forma parte
del estado;
indica la
localidad de memoria que
contiene
la
siguiente
funcin (o sea, instruccin
de ISA) que se ejecutar.
Durante la ejecucin de
cada instruccin, el PC se
incrementa para apuntar a
la siguiente instruccin por
ejecutar.
Las instrucciones de
IJVM son cortas y precisas.
Cada instruccin tiene unos
cuantos campos, por lo
regular uno o dos, cada uno
de los cuales tiene un
propsito especfico. El
primer campo de cada
instruccin es el cdigo de
operacin (opcode) que
identifica la instruc- cin
como, por ejemplo, ADD
(sumar)
o
BRANCH
(ramificar) o algo
ms.
Muchas
instrucciones
tienen un campo adicional
que especifica el operando.
Por
ejemplo,
las
instrucciones que accesan
una variable local necesitan
un campo para indicar cul
variable.
Este modelo de
ejecucin, llamado
ciclo de bsquedaejecucin,es til en lo
abstracto
D
e
y
a
R
e
g
i
s
t
r
o
s
d
e
c
o
n
t
r
o
l
d
e
m
e
m
o
r
i
a
C
o
S
e
a
l
e
s
d
e
c
o
n
t
r
o
l
~
Habilitar
en bus B
M
.
Control
del
desplaza
dor
'1
o
s
4
.
1
.
1
L
a
t
r
a
y
e
c
t
o
r
i
a
d
e
d
a
t
La trayectoriade
datos es la parte de
la CPU que contiene
la ALU, sus entradas
y sus salidas. La
trayectoria de datos
de nuestro ejemplo
de microarquitectura
se muestra en la
figura 4-1. Si bien
esta trayectoria de
datos se optim
minuciosamente para
interpretar
programas en IJVM, es
muy similar al que se
usa en la mayor
parte
de
las
mquinas.
Esta
trayec-
Figura4-1. La trayectoria de
datos de la microarquitectura que
usaremos como ejemplo en este
captulo.
206
EL NIVEL DE
MICROARQUITECTURA
CAP.4
UN
EJEM
PLO
DE
MICR
OAR
QUIT
ECTU
RA
2
0
. La salida
pueden
colocar .de laen~!
ALU
al
.busalimenta
B
desplazador~ luego
conte en
,
. stros al
al bus C, cuyo
tiempo.
nido uno mismo
No existe
un mas
valor
regi
puede
o
escribirse
'r
suma
1
al
l
resultad
o.
Sin
o que
em
!
argo,
e
rtil
lneas de control de la ALU
hacen
algo
tmuestran
seu. i .
en
la 4-2.
figura
No
todas
bi
s
ms
mteresan
es
1
,
:
:r
1
1
/!
Fo
F1
EN
A
EN
B
INVA
INC
Funcin
H sesepuede
inicialmente
escogiendo
una
funcin
de la ALU
que
limitecargar
a pasar
la entrada derecha (del bus B) hasta la
salida de la ALU. Una funcin as sera
sumar las
entradas de laALU, slo que con ENA
deshabilitada para que la entrada
izquierda sea forzo- samente cero.
Sumar cero al valor del bus B produce
ese mismo valor. Luego, este resultado
puede pasarseypor
el desplazador
modificacin
guardarse
en H. sin
funcioAdems de las funciones
anteriores, se pueden usar otras dos
lneas de control de forma
independiente para controlar la salida
de la ALU. SLL8 (desplazamiento
lgico a la izquierda, Shift Left Logical) desplaza el
contenido un byte a la izquierda,
llenando los ocho bits
o
o
o
o
1
o
o
o
o
B
o
o1
o
o
o
o
o
1
1
1
1
1
1
1
1
1
A
+B
111
o
o
Temporizacin de la trayectoria de
datos
o
Ji
1
1
1
1
1
1
1
1
1
A
1
1
o
1
o
o
1
1
AOR
B
o
oo
oo
o
o
o
o
o
o
oo
o1
1
o
1
o
1
B A
1
1
'
i
resultados se han
propaga-
F
i
g
u
r
a
c
i.
4
2
.
q
u
e
C
o
m
b
i
n
a
c
i
o
n
e
s
t
i
l
e
s
d
e
s
e
a
l
e
s
d
e
l
a
A
L
U
y
l
a
f
u
n
d
e
s
e
m
p
e
a
n
.
.
das de
datos: una entrada
izquierda (A) y
La ALU
de la
figura 41
neces.1ta
~osde~~
r:e
conectad
o un
registro
de
retenci
n, H. La
una entrada
derecha (B).
La entrada
izqurer a ed
arse desde
cualquiera de
nueve orge,
t d al
bus B
que
pue e
carg
entrada
derecha esta
conec a a
, .
1
t can Un
diseo
alternativo,
con dos .
.
1
fl
e
c
h
a
s
g
n
s
e
s
que o o
n e
co m o
b uses c om
in d i c a n a s
p le t o s , tie n e
n u e v e .
.
u n c o nj unto di
d
tajas y
ferente e ven
desventajas, mismas que
veremos
ms adelante en este
captulo.
Il.ir
208
NIVEL DE MICROARQUITECTURA
CAP.4
EL
S
E
UN
EJEMPL
O DE
MICRO
ARQUIT
ECTUR
A
2
0
Los registros se cargan
Salida del
instantneamente
desde
desplazador
el bus C y la
memoria en el
El ciclo 1
estable
flanco ascendentedel
reloj
inicia~
aqu
:.
~lelo de ~loj 1
Se
usac~~~u:.~e:jp~
'
D.w
D.y
file
zz
siguiente microinstruc-
:
'-y---'
y-'
'---y----'
'-y-'
P
r
e
p
a
r
a
r
t
t
se
a
le
s
pa
ra
A
L
U
Y
ali
m
en
ta
r
la
de
sp
latr
ay
ec
to
ri
a
za
d
or
d
e
d
at
o
s
Alimentar
H y el bus B
d
i
P
rd
e
que
esthasta
en eldespus
bus B no
jque el bus C cambie
sino
de hace
un
1
tiempo finito
Operacin de la memoria
memoria de 32 bits
direccionable por palabra y
un puerto de memoria de 8
bits direccionable por byte.
El puerto de 32 bits est
bajo el control de dos
registros, MAR (registro
de direc- cin de memoria,
Memory Address Register) y
MDR (registro de datos de
memoria, Memory
Data Register), como se muestra en la
figura 4-1. El puerto de ocho bits est
bajo el control
de un registro, PC, que lee un byte
y lo coloca en los ocho bits de orden
bajo de MBR. Este puerto slo
puede leer datos de la memoria; no
puede escribir datos en la memoria.
Cada uno de estos registros (y
todos los dems registros de la figura 41) operan con una o dos seales de
control. Una flecha blanca bajo un
registro indica una seal de control que
l.
lr
'
;
MICROARQUITECTU
210
EL
NIVEL
DE
RA
CAP.4
En la implementacin
fsica real,
slo hay una
memoria y est organizada en
bytes. Un sencillo truco
permite a MAR contar en
palabras (lo cual es necesario
debido a la forma en que se
defini la JVM) mientras la
memoria fsica cuenta en
bytes.
Cuando MAR se
coloca en el bus
de
direcciones, sus 32 bits no se
corresponden
directamente
con las 32 lneas de direccin,
0-31. En vez de ello, el bit O
de MAR se conecta con la
lnea 2 del bus de direcciones, el bit l de MAR se
conecta con la lnea 3 del bus
de direcciones, y as. Los 2
bits superiores de MAR se
desechan porque slo se
necesitan para las direcciones
de palabra mayores que 232,
que no son vlidas en nuestra
mquina de 4 GB. Con esta
transformacin, cuando MAR
es 1, se coloca la direccin 4
en el bus; cuando MAR es 2,
se coloca la direccin
8
e
n
s
t
e
t
r
u
c
o
s
e
i
l
u
s
t
r
a
e
n
l
a
f
i
g
u
r
a
4
4
.
e
l
MAR
de 32
bits
(cuen
ta en
palabr
as)
b
u
s
,
y
a
s
.
E
o o
711
1111111111
1111111111
c
i
o
n
e
s
.
111111111
l l I
B
u
s
1.
d
e
d
i
r
e
c
c
i
o
n
e
s
d
e
3
2
b
i
t
s
(
c
u
e
n
t
a
e
n
b
y
t
e
s
)
Figur
a 44.
Corre
spond
encia
de los
bits
de
MAR
con
el bus
de
direc
Como ya se
mencion, los
datos ledos de
la memoria a
travs del
puerto de
memoria de
I'
ocho bits se
devuelven
en
MBR,
un
registro
de puede
8 bits.
MBR
copiarse
en
el
busdos
B
de una
de
formas:
sin
signo
o
con
signo.un
Cuando
se
necesita
valor
sin signo, la
palabra
de 32 bits
que se coloca en el
bus B contiene el
valor de MBR en los
8 bits de orden bajo
y ceros en los 24
bits superiores. Los
valores sin signo
son tiles como
ndices de tablas, o
cuando es preciso
armar un entero de
16 bits con dos
bytes (sin signo)
consecutivos
del
flujo
de
instrucciones.
La otra opcin
para convertir el
MBR de 8 bits en
una palabra de 32
bits es tratarlo como
un valor con signo
entre -128y+127 y
usar este valor para
generar una palabra
de 32 bits que tenga
el mismo valor
numrico.
Esta
conversin
se
efecta copiando el
bit de signo de
MBR (el bit de la
SEC. 4.1
UN EJEMPLO
DE MICROARQUITECTURA
211
4.1.2 Microinstrucciones
Para controlar la trayectoria de datos de
la figura 4-1 necesitamos 29 seales.
stas se pueden dividir en cinco grupos
funcionales, como se describe a
continuacin.
9 Seales para controlar la escritura
de datos del bus C en registros.
9 Seales para controlar la
habilitacin de registros en el bus B
para introduccin en la
ALU.
8 Seales para controlar las
funciones de la ALU y el
desplazador.
2 Seales (que no se muestran) para
indicar lectura/escritura de memoria
va MAR/MOR.
1 Seal (que no se muestra) para
indicar obtencin de memoria va
PC/MBR.
Los valores de estas 29 seales de
control especifican las operaciones
durante un ciclo de la trayectoria de
datos. Un ciclo consiste en colocar
valores de los registros en el bus B,
propa- gar las seales a travs de la ALU
y el desplazador, alimentarlas al bus C y
por ltimo escribir los resultados en el
registro o registros apropiados. Adems,
si una seal de lectura de datos de
memoria est habilitada, la operacin de
memoria se inicia al final del ciclo de la
trayecto- ria de datos, una vez que se ha
cargado MAR. Los datos de memoria
estn disponibles hasta el final del
siguiente ciclo en MBR o MOR y se usa
el ciclo que sigue. En otras palabras, una
lectura de memoria por cualquiera de
Jos puertos, iniciada al final del ciclo k,
proporciona datos que no se usan en el
ciclo k + 1, sino hasta el ciclo k + 2 o
uno posterior.
~"
212
CAP.4
EL NIVEL DE MICROARQUITECTURA
los cuales se podrn usar. Cabe sealar que es posible realizar lecturas una tras otra en dos
ciclos consecutivos puesto que una lectura slo tarda un ciclo. Adems, ambas memorias
podran operar al mismo tiempo. Sin embargo, tratar de leer y escribir el mismo byte simultneamente produce resultados no definidos.
Si bien podra ser deseable escribir la salida colocada en el bus C en ms de un registro,
nunca es conveniente habilitar ms de un registro para el bus B al mismo tiempo. (De
hecho, algunas implementaciones reales sufren daos fsicos si se hace esto.) Si se agregan
unos circuitos ms, podemos reducir el nmero de bits necesarios para seleccionar una de
las posibles fuentes que alimentan al bus B. Slo hay nueve registros de entrada que
pueden alimentar al bus B (si contamos por separado las versiones con signo y sin signo de
MBR). Por tanto, podemos codificar la informacin del bus B en cuatro bits y usar un
decodificador para generar las 16 seales de control, siete de las cuales no se necesitan.
En un diseo comercial, los arquitectos estaran fuertemente tentados a deshacerse de uno
de los registros para poder efectuar la tarea con slo 3 bits. Como acadmicos, podemos
darnos el lujo de desperdiciar un bit para contar con un diseo ms limpio y sencillo.
Bits
J J J
S Fo F1 E E 1 1 H O T C L
p V
p
N N N N
MA A L R
NEXT_ADDRESS
p M M L A
C N
A B V
8 1
e s
p MM
R F
DA R1 E E
R R T A
bus
B
E D H
SEC. 4.1
Dir
UN EJEMPLO DE MICROARQUITECTURA
213
~~~~~-~~~~~~~~~~~~~~~~~~~~~~~~~
Dir
JAM
ALU
Mem
= PC
2 = MBR
1
ti,
i
l!I 1
,,
= MBRU
4=SP
5 =LV
6=CPP
7=TOS
8=0PC
9-15 ninguno
dirlo con la memoria principal, a la que se accede a travs de MBR y MDR. Sin embargo, en lo
funcional, el almacn de control no es ms que una memoria que contiene microinstrucciones en lugar de
instrucciones ISA. En nuestra mquina de ejemplo, el almacn contiene 512 pala- bras, cada una de las cuales
consiste en una microinstruccin de 36 bits como las que se ilustran en la figura 4-5. En realidad, no se
214
necesitan todas estas palabras pero (por razones que se explicarn en breve) necesitamos
direcciones para 512 palabras distintas.
Es importante notar que el almacn de control es muy diferente de la memoria principal:
las instrucciones de la memoria principal tienen la propiedad de que se ejecutan en orden
CAP. 4
EL NIVEL DE MICROARQUITECTURA
SEC. 4.1
'
MPC
JAMN/JAMZ
Seales
de control
~ Colocar
en bus B
z
2
Escribir
busC
en registro
'
UN EJEMPLO DE MICROARQUITECTURA
215
Puesto que el almacn de control es funcionalmente una memoria (slo de lectura), necesita su propio registro de direcciones de memoria y su propio registro de datos de
memoria. No necesita seales de leer y escribir, porque continuamente se est leyendo.
Llamaremos al registro de direccin de memoria del almacn de control MPC (contador de
microprograma, MicroProgram Counter). Este nombre es irnico porque las localidades que
contiene no es- tn ordenadas, explcitamente, de modo que el concepto de contar no es til
(pero, quines somos nosotros para discutir con la tradicin?). El registro de datos de
memoria se llama MIR (registro de microinstruccin, Microlnstruction Register). Su
funcin es almacenar la microinstruccin actual, cuyos bits alimentan las seales de control
que operan la trayecto- ria de datos.
El registro MIR de la figura 4-6 contiene los mismos seis grupos de la figura 4-5. Los
grupos Dir y J (por JAM) controlan la seleccin de la siguiente microinstruccin y se
estudia- rn ms adelante. El grupo ALU contiene ocho bits que seleccionan la funcin de
la ALU y controlan el desplazador. Los bits C hacen que registros individuales carguen la
salida de la ALU desde el bus C. Los bits M controlan las operaciones de memoria.
Por ltimo, los cuatro bits finales controlan el decodificador que determina qu se
coloca en el bus B. En este caso hemos escogido un decodificador estndar 4 a 16, aunque
slo se requieren nueve posibilidades. En un diseo ms afinado se usara un decodificador
de 4 a 9. La ventaja aqu es poder usar un circuito estndar tomado de una biblioteca de
circuitos en lugar de disear uno a la medida. El uso del circuito estndar es ms fcil y
reduce la posibi- lidad de introducir errores. Crear circuitos propios ocupa menos rea de
chip pero tarda ms y podramos tener errores.
La operacin de la figura 4-6 es como sigue. Al principio de cada ciclo de reloj (el
flanco descendente del reloj de la figura 4-3), MIR se carga con la palabra del almacn de
control a la que MPC apunta. El tiempo de carga de MIR se indica en la figura con Llw. Si
pensamos en trminos de subciclos, MIR se carga durante el primero.
Una vez que la microinstruccin est en MIR, las diversas seales se propagan a la trayectoria de datos. Se coloca un registro en el bus B, la ALU sabe qu instruccin debe
ejecu- tar y ocurren muchas actividades ms. ste es el segundo subciclo. Despus de un
intervalo Llw +fu: a partir del principio del ciclo, las entradas de la ALU se han estabilizado.
Despus de transcurrir un tiempo Lly adicional, todo se ha calmado otra vez y las salidas
de la ALU, N, Z y el desplazador estn estables. Luego, los valores de N y Z se guardan en
un
secuencias de microinstrucciones tienden a ser cortas), as que
generalmente no tienen esta propiedad. En lugar de esto, cada
microinstruccin especifica explcitamente su sucesora.
par de flip-flops de un bit. Estos bits, al igual que todos los registros que se cargan a partir del bus C y la
memoria, se guardan en el flanco ascendente del reloj, cerca del final del ciclo de la trayectoria de datos. La
salida de la ALU no se almacena, slo se alimenta al desplazador. La actividad de la ALU y el desplazador
ocurre durante el subciclo 3.
Despus de un intervalo adicional, &:, la salida del desplazador ha llegado a los registros por el bus C.
Luego los registros pueden cargarse cerca del final del ciclo (en el flanco ascen- dente de la pulsacin de reloj
'
lt
216
EL NIVEL DE MICROARQUITECTURA
CAP.
= (JAMZ
Observe que, en todos los casos, MPC puede adoptar slo uno de dos posibles
valores:
1.
2.
SEC. 4.1
Direccin
Ox75
217
UN EJEMPLO DE MICROARQUITECTURA
Dir
Ox92
Ox92
JAM
001
Una
de
stas
seguir
a Ox75
dependiendo
deZ
Ox192
Figura 4-7. Una microinstruccin con JAMZ puesto en 1 tiene dos posibles
sucesoras.
La capacidad para calcular el OR de MBR con NEXT _AOORESS y almacenar el resultado en MPC hace posible una implementacin eficiente de una ramificacin (salto) de ml- tiples vas.
Observe que es posible especificar cualquiera de 256 direcciones, determinada exclusivamente por los bits
presentes en MBR. En un uso tpico, MBR contiene un cdigo de operacin, de modo que el uso de JMPC
har que se seleccione para ejecutarse en seguida una microinstruccin nica para cada posible cdigo de
operacin. Este mtodo es til para saltar directamente a la funcin que corresponde al cdigo de operacin
encontrado.
Para la explicacin que sigue es crucial entender la temporizacin de la mquina, as que tal vez valga la
pena repetirla. Lo haremos en trminos de subciclos, ya que esto es ms fcil de visualizar, los sucesos de reloj
reales son el flanco descendente, que inicia el ciclo, y el flanco ascendente, que carga los registros y los flipflops N y Z. Remtase por favor a la figura 4-3.
Durante el subciclo 1, iniciado por el flanco descendente del reloj, MIR se carga con la direccin que
actualmente est en MPC. Durante el subciclo 2, las seales de MIR se propa- gan hacia afuera y el bus B se
carga a partir del registro seleccionado. Durante el subciclo 3, la ALU y el desplazador operan y producen un
resultado estable. Durante el subciclo 4, el bus C, los buses de memoria y los valores de la ALU se estabilizan.
En el flanco ascendente del reloj los registros se cargan a partir del bus C, los flip-flops N y
Z se cargan, y MBR y MOR obtienen sus resultados de la operacin de memoria que se
inici al final del ciclo de trayec- toria de datos anterior (si se inici alguna de esas
operaciones). Tan pronto como est dispo- nible MBR, MPC se carga en preparacin para la
siguiente microinstruccin. As MPC obtiene su valor en algn momento durante la parte
media del intervalo en el que el reloj est alto pero despus de que MBR/MOR estn listos.
Esto podra ser disparado por nivel (en lugar de por flanco) o disparado por flanco con un
retraso fijo despus del flanco ascendente del reloj. Lo nico que importa es que MPC no se
cargue sino hasta que los registros de los que depen- de (MBR, N y Z) estn listos. Tan
pronto como el reloj baja, MPC puede direccionar el almacn de control y se puede
iniciar un ciclo nuevo.
Cabe sealar que cada ciclo es autosuficiente: especifica qu se coloca en el bus B,
qu deben hacer la ALU y el desplazador, dnde debe almacenarse el valor del bus C y,
por ltimo, qu valor debe tener MPC a continuacin.
!!
'
:'.
218
EL NIVEL DE MICROARQUITECTURA
CAP.4
SEC. 4.2
Vale la pena un ltimo comentario acerca de Ja figura 4-6. Hemos estado tratando a
MPC como un registro normal, con 9 bits de capacidad, que se carga mientras el reloj est
alto. En realidad, no hay necesidad de tener un registro ah. Todas sus entradas se pueden
almacenar directamente hasta el almacn de control. En tanto estn presentes en el almacn
de control en el flanco descendente del reloj cuando MIR se selecciona y lee, ser suficiente.
No hay necesidad de almacenarlas realmente en MPC. Por esta razn, MPC bien podra
implementarse como un registro virtual, que no es ms que un punto de reunin de seales,
ms parecido a un panel de conexiones electrnico que a un registro real. Hacer que MPC
sea un registro virtual simplifica la temporizacin: ahora slo ocurren sucesos en los
flancos descendentes y ascendentes del reloj, y en ningn otro momento. Pero si para usted
es ms fcil pensar en MPC como un registro real, tambin es un punto de vista vlido.
4.2.1 Pilas
219
SP
::J
a3
a2
1~ ~
a1
100
SP
LV
SP
LV
LV
a2
a1
a1
(a)
Figura 4-8. Uso de una pila para almacenar variables locales. (a) Mientras A est
activo. (b) Despus de que A llama a B. (e) Despus de que B llama a C. (d)
Despus de que C y B regresan y A llama a D.
ajust LV de modo que apunte a las variables locales de Ben lugar de a las de A. Podemos
hacer referencia a las variables locales de B dando su distancia respecto a LV. De igual manera, si B llama a C, LV y SP se ajustan nuevamente para asignar espacio a las dos variables
locales de C, como se ilustra en la fig. 4-8(c).
Cuando C regresa, B se activa nuevamente, y la pila se vuelve a ajustar como en la figura
4-8(b) de modo que ahora LV apunte otra vez a las variables locales de B. De igual modo,
cuando B regresa, volvemos a la situacin de la figura4-8(a). En todas las condiciones, LV
apunta a la base del marco de pila del procedimientoque est activo, y SP apuntaal tope del
marcode pila.
Supongamos ahora que A llama a D, que tiene cinco variables locales. Llegamos a la
situacin de la figura 4-8(d), en la que las variables locales de D usan la misma memoria que
usaron las de B, y tambin parte de las de C. Con esta organizacin de memoria, slo se
asigna espacio a los procedimientos que estn activos. Cuando un procedimiento regresa, se
libera la memoria que usaban sus variables locales.
Las pilas tienen otro uso, adems de contener variables locales: pueden servir para retener operandos durante el clculo de una expresin aritmtica. Cuando se usa de este modo, la
pila se llama pila de operandos. Suponga, por ejemplo, que antes de llamar a B, A tiene que
efectuar el clculo
a1 = a2 + a3;
Una forma de efectuar esta suma es meter a2 en la pila, como se muestra en la figura 4-9(a).
Aqu SP se increment tantos bytes como hay en una palabra, digamos 4, y el primer
operan- do se almacen en la direccin a la que ahora apunta SP. Luego se mete a3 en la
pila, como se muestra en la figura 4-9(b ). Como acotacin acerca de la notacin, usaremos
el tipo de letra Helvtica para todos los fragmentos de programa como el anterior. Tambin
usaremos este tipo de letra para los cdigos de operacin de lenguaje ensamblador y los
registros de la mquina, pero en el texto corrido las variables y procedimientos de los
programas se darn en cursivas. La diferencia es que Jos nombres de variables y
procedimientos son elegidos por el usuario; Jos cdigos de operacin y los nombres de
registros estn fijos.
Ahora puede efectuarse el clculo ejecutando una instruccin que obtiene dos palabras
de la pila, las suma y mete el resultado otra vez a la pila, como se muestra en la figura 4-9(c).
Por ltimo, saca la variable que est en la localidad ms alta de la pila y se almacena en la
variable local al, como se ilustra en la figura 4-9(d).
SPm
220
SP
SP
a3
1
1
'
1
1
ti
a2
a1
LV
(a)
SP
LV
a1
(b)
'
1 1
CAP.4
EL NIVEL DE MICROARQUITECTURA
LV
a2
a1
.....
LV .....
(c)
SEC. 4.2
a3
a2
a2 + a3
(d)
Los marcos de variables locales y las pilas de operandos se pueden entremezclar. Por
ejemplo, al calcular una expresin como x2 + f(x), parte de la expresin (digamos x2) podra
estar en la pila de operandos cuando se invoca una funcin f El resultado de la funcin se
deja en la pila, encima de x2, y la siguiente instruccin los suma.
Vale la pena sealar que si bien todas las mquinas usan una pila para almacenar variables locales, no todas usan una pila de operandos como sta para efectuar operaciones
aritm- ticas. De hecho, pocas lo hacen, pero JVM e IJVM trabajan as, y es por ello que
hemos presentado esta introduccin a las operaciones de pila. Las estudiaremos con mayor
detalle
en el captulo 5.
4. El rea de mtodos. Por ltimo, hay una regin de la memoria que contiene el
programa y que se llama rea de "texto" en el caso de un proceso UNIX. Existe un
registroimplcito que contiene la direccin de la instruccin que se traer a
continua- cin. Este apuntador es el Contador de Programa o PC. A diferencia de
las dems
regiones de memoria, el rea de mtodos se trata como una formacin de bytes. '
:..
Pila de
operandos
actual 3
k--
SP
Marco de
variables
locales
actual 3
221
Marco de
variables
locales 2
Reserva
de
constantes
L-
Marco de
variables
locales 1
..Ji---
CPP
LV
f.'.:
rea de
m todos
PC
todas las distancias empleadas como ndices dentro de estos marcos se dan en palabras. Por
ejemplo, LV, LV + 1 y LV + 2 se refieren a las primeras tres palabras del marco de variables
locales. En contraste, LV, LV+ 4 y LV+ 8 se refieren a palabras situadas a intervalos de
cuatro palabras (16 bytes).
En contraste, PC contiene una direccin de byte, y una resta o suma a PC altera la
direccin en cierto nmero de bytes, no de palabras. El direccionamiento de PC es distinto
Debemos dejar en claro algo acerca de los apuntadores. Los registros CPP, LV y SP son apuntadores a
palabras, no bytes, y las distancias se miden en palabras. Para el subconjunto entero que hemos escogido, todas
las referencias a elementos de la reserva de constantes, el marco de variables locales y la pila son palabras, y
222
CAP.4
EL NIVEL DE MICROARQUITECTURA
del de los dems registros, y esto se pone de manifiesto al haber un puerto de memoria espe- cial en Mic-1
para PC. Recuerde que el puerto slo tiene un byte de anchura. Incrementar PC en 1 e iniciar una lectura
hace que se traiga el siguiente byte. Incrementar SP en 1 e iniciar una lectura hace que se traiga la
siguiente palabra.
Mnemnico
Significado
SEC. 4.2
223
y guardarse en el marco de variables locales (ISTORE). Pueden efectuarse dos operaciones aritmticas
(IADD e ISUB) as como dos operaciones lgicas (booleanas) (IAND y IOR) utilizando como
operandos las dos palabras que estn en el tope de la pila. En todas las operaciones aritmticas y
lgicas se obtienen dos palabras de la pila y el resultado se almace- na en la pila. Se proporcionan cuatro
instrucciones de ramificacin, una incondicional (GOTO) y tres condicionales (IFEQ, IFLT e
IF_ICMPEQ). Todas las instrucciones de ramificacin, si se siguen, ajustan el valor de PC segn la
distancia (de 16 bits con signo) que sigue al cdigo de operacin en la instruccin. Esta distancia se
suma a la direccin del cdigo de operacin. Tambin hay instrucciones IJVM para intercambiar las
dos palabras que estn en el tope de la pila (SWAP), duplicar la palabra que est en el tope (DUP)
y sacarla (POP).
Algunas instrucciones tienen varios formatos, que incluyen una forma corta para las de uso comn.
Hemos incluido en IJVM dos de los diversos mecanismos que Ja JVM usa para implementar esto. En un
caso hemos pasado por alto la forma corta en favor de Ja ms gene- ral. En otro caso mostramos cmo se
puede usar la instruccin prefijo WIDE para modificar Ja instruccin subsecuente.
Por ltimo, hay una instruccin (INVOKEVIRTUAL) para invocar otro mtodo, y otra
instruccin (IRETURN) para salir de un mtodo y devolver el control al mtodo que Jo invoc.
Debido a Ja complejidad del mecanismo, hemos simplificado un poco la definicin, y esto hizo posible
crear un mecanismo sencillo para hacer una llamada y regresar. La restric- cin es que, a diferencia de
Java, slo permitimos a un mtodo invocar un mtodo que exista dentro de su propio objeto. Esta
restriccin obstaculiza severamente la orientacin a objetos pero nos permite presentar un mecanismo
mucho ms sencillo, al evitar la necesidad de lo- calizar el mtodo dinmicamente. (Si no est
familiarizado con la programacin orientada a objetos, puede hacer caso omiso de este comentario sin
problema. Lo que hemos hecho es convertir a Java en un lenguaje no orientado a objetos, como C o
Pascal.) En todas las computadoras excepto JVM, la direccin de procedimiento al que se llamar la
determina directamente la instruccin CALL, as que nuestro enfoque en realidad es el caso normal, no la
excepcin.
El mecanismo para invocar un mtodo es el siguiente. Primero, el invocador mete en la
pila una referencia (apuntador) al objeto que se llamar. (Esta referencia no se necesita en una IJVM
porque no se puede especificar otro objeto, pero se conserva para mantener la consis- tencia con JVM.)
En la figura 4-12(a) esta referencia se indica con OBJREF. Luego, el invocador mete Jos parmetros
del mtodo en la pila, en este ejemplo, Parmetro 1, Parmetro
2 y Parmetro 3. Por ltimo, se ejecuta INVOKEVIRTUAL.
La instruccin INVOKEVIRTUAL incluye un desplazamiento que indica la posicin en la reserva de
constantes que contiene la direccin, dentro del rea de mtodos, donde inicia el mtodo que se est
invocando. Sin embargo, si bien el cdigo del mtodo reside en la posi- cin a la que apunta este
apuntador, los primeros cuatro bytes en el rea de mtodos contie- nen datos especiales. Los primeros
dos bytes se interpretan como un entero de 16 bits que indica el nmero de parmetros del mtodo (los
parmetros se almacenaron previamente en Ja pila). En lo referente a esta cifra, OBJREF cuenta como
parmetro: el parmetro O. Este entero de 16 bits, junto con el valor de SP, da la ubicacin de
OBJREF. Observe que LV
224
EL
NIVEL
MICROARQUITECTURA
CAP.4
DE
SEC. 4.2
EJEMPLO
DE
UN
IJVM
ISA:
225
apunta a OBJREF y no al
primer parmetro real. La
decisin de a dnde apunta LV
es un tanto arbitraria.
Los siguientes dos bytes del rea de mtodo se
interpretan como otro entero de 16 bits
que indica el tamao del rea
de variables locales para el
mtodo que se est invocando.
Esto es necesario porque se
establecer una nueva pila para
el mtodo, que comenzar
inmediata- mente arriba del
marco de variables locales.
Por ltimo, el quinto byte del
rea de mtodos contiene el
primer cdigo de operacin a
ejecutar.
Pila despus de
INVOKEVIRTUAL
SP
Pil
a
an
te
s
Parmetr
de
os
almacen INVO
KEVIR
ados
TUAL
SP
d
e
B
a
s
e
I
N
V
O
K
E
V
I
R
T
U
A
L
d
e
l
a
p
i
l
a
d
e
s
p
LV
IRETURN
Base
Base
de
--
--~~--------t
SP
RETURN
LV anterior LV
LV anterior
PC anterior
PC anterior
LV
ant
eri
or
LV
ant
eri
or
Variables
Variables
locales
locales
P
C
an
teri
or
P
C
an
ter
ior
Marco
Variables de
Variables
locales del
locales del
variables
locales
locales
Base de la
del
pila despus de
invocador
Base de la
invocador
del invocador
del invocador
Parmetro 2
Parmetro 2
del
Parmetro 2
pila antes de
Parmetro 2
Apunt. enlace
Apunt.
----~~
enlace
Apunt. enlace
LV
invocador
Parmetro 1
INVOKEVIRTUAL
Parmetro 1
o 1
Parmetro 1
(a)
(b)
Figura 4-12.
(a) Memoria
antes de
ejecutar
INVOKEVIR
TUAL. (b)
Despus de
ejecutarlo.
(a)
(b)
apunta a la palabra
que est en el tope de
la pila. Si la pila est
vaca, SP apuntar a
226
Hasta
aqu,
nuestra
mquina no tiene instrucciones
de entrada/salida. Y no las
vamos a agregar, pues las
necesita tanto como las
necesita la Mquina Virtual
Java, en cuya especifi- cacin
oficial ni siquiera se menciona
E/S. La teora es que una
mquina que no efecta
entrada ni salida es "segura".
(La lectura y escritura se
efectan en JVM mediante
llamadas a mtodos especiales,
que realizan la E/S.)
UN EJEMPLO DE
IMPLEMENTACIN
227
La pila de operandos para el
programa IJVM de la figura 4- l 4(b)
se muestra en la figura
4-15. Antes de que el cdigo comience a
ejecutarse, la pila est vaca, lo que se
indica con la lnea horizontal arriba del
O. Despus del primer ILOAD,j est en
la pila, como indica la} en un rectngulo
arriba del 1 (que indica que ya se
ejecut la instruccin 1). Despus del
segun- do ILOAD hay dos palabras en la
pila, como se muestra arriba del 2.
Despus del IADD slo queda una
palabra en la pila, y contiene la suma}+
k. Cuando se saca la palabra del tope de
la pila y se guarda en i, la pila queda
vaca, como se muestra arriba del 4.
4.2.4 Compilacin de
Java a UVM
rn
j
j+k
EE
muestra
o
figura
4-
k =O;
3
Ox60
2
3
4
5
6
7
Ea
j-1
o
8
11
10
14
12
15
13
Figura 4-15.
La pila
despus de
cada
instruccin de
la figura 414(b).
La instruccin 8 es el principio de la
parte else del fragmento de programa
Java. La parte
IADD
1
3
Ll
BI
P
U
S
H
O
JI
k
=
O
O
x1
0
O
x
O
O
14
ISTORE k
Ox36
Ox03
15 L2:
(a)
(b)
(e)
F
i
g
u
r
a
4
1
4
.
i - j + k:
if(i=3)
else
j = j-1;
1
2
4
5
6
7
8
9
10
11
12
ILOAD j
ILOAD k
ISTORE i
ILOAD i
BIPUSH 3
IF_ICMPEQ L 1
ILOAD j
BIPUSH 1
ISUB
ISTORE j
GOTO L2
//i=j+k
JI if (i <3)
(a)
Fragm
//j-j-1
ento
en
Java.
(b) El
lengua
je de
ensam
blador
Java
corres
pondie
nte. (e)
El
progra
ma
IJVM
en
hexade
cimal.
El cdigo compilado es
sencillo. Primero j y k se meten
en la pila, se suman y el
resulta- do se guarda en i.
Luego i y la constante 3 se
meten en la pila y se comparan.
Si son iguales, se sigue una
ramificacin a Ll, donde k se
pone en O. Si son distintas, la
comparacin falla y se ejecuta
el cdigo que sigue a
IF_ICMPEQ.
Cuando el
programa termina de hacer
esto, salta a L2, donde se
fusionan las partes then y else.
Ox15 Ox02
Ox15 Ox03
Ox36 Ox01
Ox15 Ox01
Ox10 Ox03
Ox9F OxOO OxOD
q
Ox15 Ox02 u
Ox10 Ox01 e
Ox64
Ox36 Ox02
u
OxA7 OxOO Ox07
s
a
r
e
m
o
s
p
a
r
a
d
e
s
c
r
i
b
i
r
l
a
i
m
p
l
e
m
e
n
t
a
c
i
n
.
4
.
3
.
1
M
ic
ro
in
str
uc
ci
on
es
y
no
ta
ci
n
En principio, podramos describir el almacn de
control en binario, 36 bits por palabra. Sin
j
:i
' 'ji
; !
J . _:
I :
,1,:
.
!p
,.
1
1l'
I'
J
I
EL NIVEL DE
MICROARQUITECTURA
CAP.4
c
uU
n
R
e
a
d
R
e
g
i
s
t
e
r
=
S
P
,
A
L
U
=
I
N
C
,
W
S
P
,
R
e
a
d
,
N
E
X
T
_
A
D
D
R
E
S
S
=
1
2
2
d
o
SP = SP + 1; rd
Llamemos
a
nuestro
microlenguaje ensamblador "MAL"
(Micro Assembly Language) (que es
como usted se va a sentir si escribe
demasiado cdigo en l). MAL est
hecho a propsito para que refleje
las
caractersticas
de
la
microarquitectura. Durante cada
ciclo se puede escribir cualquiera
de los
registros,
aunque
normalmente slo se escribe uno.
Slo se puede colocar el contenido
de un registro en el lado B de la
ALU. En el lado A las opciones son
+ 1, O, -1 y el registro H. As,
podemos usar un sencillo enunciado
de asignacin, como en Java, para
indicar la operacin a ejecutar. Por
ejemplo, si queremos copiar algo de
SP a MDR, podemos decir
MDR = SP
SEC. 4.3
EJEMPLO
DE
UN
IMPLEMENTACIN
229
que suma el contenido del registro H a
SP y escribe el resultado en MDR. El
operador + es conmutativo (lo que
implica que el orden de los operandos
no importa), as que el enunciado
anterior tambin puede escribirse como
MDR = SP + H
E
x
Para
evitar
confusiones,
repetiremos que Mic-I tiene dos formas
de acceder a la memoria. Las lecturas y
escrituras de palabras de datos de 4
bytes usan MAR/MOR y se indican en
las microinstrucciones con rd y wr,
respectivamente.
Las lecturas de
cdigos de operacin de un byte del
flujo de instrucciones usan PC/MBR y
se indican con fetch en las
microinstrucciones. Ambos tipos de
operaciones de memoria pueden
efectuarse simultneamente.
Sin embargo, el mismo registro no
puede recibir un valor de la memoria y
de la trayecto- ria de datos en el mismo
ciclo. Considere el cdigo
SP = MOR = SP + 1
MAR= SP; rd
MOR=H
230
EL
NIVEL DE
MICROARQUITECTURA
CAP.4
DE
ST
=
H
DE
ST
=
SO
UR
CE
DE
ST
=
H
DE
ST
=
SP
UR
CE
DE
ST
=
H
+
UN
EJEM
PLO
DE
IMPL
EME
NTA
CIN
SOURCE
DEST = H +
SOURCE + 1
DEST = H + 1
DEST =
SOURCE + 1
DEST =
SOURCE - H
DEST =
SOURCE -1
DEST =- H
DEST = H
ANO SOURCE
DEST = H OR
SOURCE
DEST =O
DEST = 1
DEST =-1
Figur
a 416.
Toda
s las
oper
acio
nes
permitidas.
Cualquiera de
estas
operaciones se
puede
extender
aadindole
"<<8" para
desplazar el
resultado un
byte a la
i
z
q
u
i
e
r
d
a
.
P
o
r
e
j
e
m
p
l
o
,
u
n
a
o
p
e
r
a
c
i
n
c
o
m
n
e
s
H
=
M
B
R
<
<
8
.
li
El efecto de la
primera
microinstruccin
es asignar a MOR
un valor de la
memoria al
final de la segunda
contiene
un
campo
NEXT_AOORESS. Lo nico que goto
hace es ordenar al microensam- blador
que coloque ah un valor especfico en
lugar de la direccin donde el
microensamblador decidi colocar la
microinstruccin de la siguiente lnea.
En principio, toda lnea debera tener
un enunciado goto slo cuando es til
para el microprogramador; si
la
direccin obje- tivo es la siguiente
lnea, puede omitirse.
Necesitamos una notacin distinta
para los saltos condicionales. Recuerde
que JAMN y JAMZ usan los bits N y
Z. A veces es necesario probar un
registro para ver si es cero, por
ejemplo. Una forma de hacerlo sera
pasar el contenido del registro por la
ALU y almacenarlo de vuelta en el
mismo registro. El enunciado
TOS =TOS
parece extrao, aunque hace lo que
buscamos (establecer el flip-flop Z con
base en TOS). Sin embargo, con objeto
de que los microprogramas sean ms
elegantes,
extenderemos
MAL
aadiendo dos registros imaginarios, N
y Z a los cuales podemos hacer
asignaciones. Por ejemplo,
Z=TOS
pasa el contenido de TOS por la ALU y
establece los valores de los flip-flops Z
y N, pero no almacena un valor en un
registro. Lo que hacemos realmente al
usar Z o N como destino es decirle al
microensamblador que ponga en O
todos los bits del campo C de la figura
4-5. La trayectoria de datos ejecuta un
ciclo normal, con todas las operaciones
normales permitidas, pero no se escribe
en ningn registro. Observe que no
importa si el destino es N o Z; la
microinstruccin generada por el
microensamblador es idntica. A los
programadores
que
escojan
intencionalmente
el
destino
"incorrecto" se les debera obligar a
EL NIVEL DE
MICROARQUITECTURA
CAP. 4
goto (MBR)
Observe que slo los 8 bits de orden bajo
de MBR estn conectados permanentemente
con MPC (vea la figura 4-6), por lo que en
este caso no surge la cuestin de la extensin
de signo (es decir, MBR versus MBRU).
Observe tambin que el MBR que est
disponible al final del ciclo actual es el
mismo que se us. Una obtencin iniciada
en esta microinstruccin
llega demasiado
tarde para afectar la seleccin
de la
siguiente microinstruccin.
4.3.2
Implementaci
n de IJVM
utilizando el
Mic-1
Por fin hemos llegado a un punto en el que
podemos armar todas las piezas. La figura 417 es el microprograma que se ejecuta en
S
E
UN EJEMPLO DE
IMPLEMENTACIN
233
Mic-I e interpreta IJVM. Es un programa
sorpren- dentemente corto: 112
microinstrucciones en total. Se dan tres
columnas para cada microinstruccin: el
rtulo simblico, el microcdigo real y un
comentario. Cabe sealar que
microinstrucciones consecutivas no
necesariamente se encuentran en direcciones
consecuti- vas en el almacn de control,
como ya mencionamos.
A estas alturas los nombres que
escogimos para casi todos los registros de la
figura 4-1 debern tener un significado obvio:
CPP (Constant Pool Pointer), LV (Local
Variables) y SP (Stack Pointer) sirven para
almacenar los apuntadores a la reserva de
constantes, a las variables locales y al tope de
la pila, respectivamente, mientras que PC
(Program Counter) contiene la direccin del
siguiente byte que se obtendr del flujo de
instrucciones. MBR es un registro de un byte
que contiene los bytes del flujo de
instrucciones que llegan de la memoria para
interpretarse. TOS (Top Of Stack) y OPC
(OPCode) son registros extra. Su uso se
describe a continuacin.
En ciertos momentos, se garantiza que
cada uno de estos registros contiene cierto
valor, pero todos pueden
usarse como
2.
Iniciamos
la bsqueda del
siguiente byte para colocarlo en
MBR. Este byte se necesitar
tarde o temprano,
sea como
operando
para la instruccin
IJVM en curso
o como siguiente cdigo de
operacin (como en el caso de la
instruccin IADD,
Realizar
una
ramificacin
multivas a la direccin contenida
en MBR al principio de Main1.
Esta direccin es igual al valor
numrico del cdigo de operacin
que se est ejecutando.
La
microinstruccin
anterior
la
coloc ah. Tome nota de que el
valor que se est obteniendo en
esta
microinstruccin
no
desempea ningn pa- pel en la
ramificacin multivas.
r
234
CAP.4
"'
Mnemnico
UN EJEMPLO DE IMPLEMENTACIN
SEC. 4.3
235
H
~lf
EL NIVEL DE MICROARQUITECTURA
Mnemnico
Operaciones
O~eraciones
PC = PC + 1;
Main1
fetch; gato (MBR)
MBR contiene cdigo de
operacin;
Comentarios
Comentarios
obtener
iinc1
MBR contiene ndice; copiar LV en H
MAR= MBRU + H; rd
iinc2
gato Main1
variable nop1
PC = PC + 1; fetch
iinc3
iadd1
MAR = SP = SP - 1; rd
H=MDR
iinc4
iadd2
H =TOS
PC = PC + 1; fetch
iinc5
iadd3
MOR= TOS=
en tope
MOR+ H; wr; gato Main1
gato Main1
Sumar dos palabras del tope;
escribir
isub2
H =TOS
OPC = PC-1
MAR = SP = SP - 1; rd
PC = PC + 1; fetch H -tcpe de la pila
:,1
il_icmpeq2
.
swap4
swap5
MOR= TOS
pila
MAR = SP~i - 1; wr
;t
bipush1
bipush2
T
bi~ush3
.t
iload1
F
iload2
iload3
iload4
de pila
Guardar direccin de cdigo de
Leer 2a. palabra de la pila
MBR = 1 et byte de distancia;
goto1
op. isub1
goto2
traer 20.
isub3
goto3
iand1
MAR = SP = SP - 1; rd
PC = OPC + H; fetch
gotas
iand2
H =TOS
gato Main1
goto6
cod. op iand3
MOR= TOS= MOR ANO
tope de pila
ior1
MAR = SP = SP + 1;
rd
Leer 2a. palabra de
la pila
ior2
H =TOS
ifft2
temporalmente ior3 OPC =TOS MOR= TOS= MOR
escribir
en
tope
de
pila
Poner nuevo tope de pila en TOS
dup1
OPC;
if (N) gota
else gato
F
Ramificar
Incrementar
SP yT;copiar
en MAR
;,~
H =LV
pop1
MAR =TOS
= SP = SP -1; rd
Leer 2a. TOS
palabraen de
Guardar
OPCla pila
ifeq2
OPC
temporalmente
pop2
ifeq3
TOS= Esperar
MOR que se
lea nuevo
la memori
Poner
nuevoTOStopede de
pila ena TOS
pop3
TOS=
MOR;
gato
Main1
Z=
ifeq4
Copiar
TOSF
Ramificar segn bit Z
OPC; if nueva
(Z) gatopalabra
T; else engato
swap1
MAR = SP - 1; rd
Asignar SP-1 a MAR; leer 2a. palabra de pila
Leer 2a. palabra de la pila
if_icmpeq1
MAR = SP = SP - 1; rd
swap2
MAR=SP
Asignar palabra en tope a MAR
Ajustar MAR para leer nuevo tope de pila
MAR = SP = SP - 1
swap3
H =MOR; wr
Guardar TOS en H; escribir 2a. pal. en tope de
OPC =TOS
Copiar 2a. palabra il_icmpeq4
de pila en H
CopiarH =MOR;
TOS viejord en MOR
il_icmpeq3
Asignar SP-1 a MAR; escribir 2a. pal. en pila
if_icmpeq5
TOS= MOR
TOS= H; gato Main1
swap6
Actualizar TOS
Si 2 pal. en tope iguales,
if icmpeq6
Z = OPC - H; if (Z) gato T; else gato F
SP = MAR = SP + 1
MBR =byte que se meter en la pila
PC OPC
= PC =+PC
1; fetch
Incrementar
traer necesario
siguiente p/dir.
cd. op.
Mismo
quePC,goto1;
objetivo
- 1; fetch; gato goto2
MOR =TOS = MOR; wr; gato Main1
Extender signo de constante y meter en pila
MBR contiene ndice; copiar LVen H
H =LV
Saltardir.primer
byte delocal
distancia
PC=PC+1
MAR=
MBRU + H; rd
MAR=
de variable
que se meter
MAR = SP = SP + 1
SP apunta a nuevo tope de pila; preparar escrit.
PC = PC + 1; fetch; wr
lnc. PC; obt. sig. cd. op.; escribir en tope de pila
ir a T; si no, a F
PC =
F2
PC + 1; fetch
PC ahora apunta a siguiente
cd. op
gato
F3
Main1
Esperar que traigan cdigo
de operacin
invokevirtual1
PC =
PC + 1; fetch
MBR =byte ndice 1; inc.
PC, obt. 2o. byte
invokevirtual2
H=
MBRU 8
Desplazar y guardar primer
byte en H
iload5
invokevirtual3
istore1
invokevirtual4
Actualizar TOS
H = dist. de apunt. a mtodo, a CPP
MBR contiene ndice; copiar LV en H
Obt. apunt. al mtodo del rea de CPP
istore2
MAR= MBRU +invokevirtual5
H
OPC = PC + 1 MAR= dir. de var. local en la que seGuardar
guardar
temporalmente PC de retorno en OPC istore3
MOR= TOS; wrinvokevirtual6
PC = MOR; fetch
Copiar TOS en MOR; escribir palabra
PC apunta a nuevo mtodo; obt. cuenta de param. istore4
SP =invokevirtual
MAR = SP7 -1; rd PC = PC + 1; fetch
Leer
2a.
palabra
de
l
a
pila
Traer 2o. byte de cuenta de parmetros
istore5
PC = PC + 1; fetch
Incrementar PC; traer siguiente cd. op.
Desplazar y guardar primer byte en H
invokevirtual8
H = MBRU 8
istore6
TOS= MOR; gato Main1
Actualizar TOS
H = nmero de parmetros
invokevirtual9
H = MBRU OR H
wide1
PC = PC + 1; fetch; gato (MBR OR Ox100)
Ramif. multivas con bit
invokevirtual10
PC = PC + 1; fetch
alto encendido
Traer primer byte de # locales wide_iload1
PC = PC + 1 ; fetch
invokevirtual11
MBR contiene 1 er. byte ndice; traer 2o.
TOS = direccin de OBJREF - 1
TOS= SP-H
wide_iload2
H = MBRU 8
H = 1er.direcci
bytenndice
desplazado(nuevo
8 bitsLV)a la izq.
TOS=
de OBJREF
invokevirtual12
TOS = MAR = TOS + 1
wide_iload3
H = MBRU OR H
H =ndice de 16 bits de variable local
Traer 2o. byte de# locales
invokevirtual13
PC = PC + 1 ; fetch
wide_iload4
MAR= LV+ H; rd; gato iload3
MAR= dir. de variable local que se meter
Desplazar y guardar primer byte en H
invokevirtual14
H = MBRU 8
wide_istore1
PC = PC + 1; fetch
MBR contiene 1 er. byte ndice; traer 2o.
H =#locales
invokevirtual15
H = MBRU OR H
wide_istore2
H = MBRU 8
H = ter byte ndice desplazado 8 bits a la izq
Sobreescribir OBJREF con apunt. enlace
invokevirtual16
MOR = SP + H + 1 ; wr
wide_istore3
H= MBRU OR H
H =ndice de 16 bits de variable local
Asignar a SP, MAR, pos. p/guardar viejo PC
invokevirtual17
MAR = SP = MOR;
wide_istore4
MAR = LV+ H; gato istore3
MAR= dir. de variable local en que se
Guardar viejo
invokevirtual18
MOR= OPC; wr
guardar
PC arriba de variables locales
idc_w1
PC = PC + 1; fetch
MBR contiene 1 er. byte ndice;
invokevirtual19
MAR= SP = SP + 1
traer 2o.
SP apunta a pos. p/guardar viejo LV idc_w2
H = MBRU 8
invokevirtual20
MOR=
H = 1 er byte de ndice 8
Guardar viejo LV arriba de PC guardado idc_w3
LV; wr
H
= MBRU OR H
H = ndice de 16 bits en reserva de constantes
Traer 1er. cd. op. del nuevo
invokevirtual21
PC = PC + 1; fetch
mtodo idc_w4
MAR= H + CPP; rd; gato iload3
MAR= dir. de la constante
LV= TOS; gato Main1
en la reserva
invokevirtual22
Hacer que LV apunte a marco de var. loe.
Figura4-17. El microprograma del Mic-1 (parte l de 3).
Figura4-17. El microprograma del Mic-1 (parte 2 de 3).
Li
236
NIVEL DE MICROARQUITECTURA
EL
SEC.
4.3
U
N
Mnemni
co
Operacio
nes
Comenta
rios
ireturn1
ireturn2
ireturn3
ireturn4
ireturn5
ireturn6
ireturn7
ireturn8
MAR
= SP
= LV;
rd
LV=
MAR
=
MDR
; rd
MAR
=
LV+
1
PC =
MDR;
rd;
fetch
MA
R=S
P
LV=
MDR
MDR
=TOS
; wr;
goto
Main1
Restab.
SP,
MAR,
p/obten
er
apunt.
enlace
Espera
r
lectura
Asignar
apunt.
enlace
a LV;
obt.
viejo
PC
Aju
sta
r
MA
R
par
a
lee
r
viej
o
LV
Re
sta
ura
r
PC;
tra
er
sig
uie
nte
c
d.
op.
A
j
memori
a.
En
este
ciclo ese
sumand
o
se
suma al
contenid
o de H,
y
el
resultad
o
se
gu
ar
da
en
M
O
R
y
ta
m
bi
n
en
TO
S.
De
igua
l
ma
ner
a,
se
inic
ia
Figura 4-17. El
microprograma
del Mic-1 (parte
3 de 3).
l
-
1
!
1
1
1
M
a
L
S
L
a
'
1. TOS ya est
presente, pero se debe obtener de la memoria la
segunda palabra
desde el tope de la
pila hacia abajo.
2. TOS se debe
sumar a la segunda
palabra obtenida de la
memoria.
3.
El resultado, que se
colocar en la pila,
se debe almacenar
en la memoria y
tam- bin en el
registro TOS.
BYTE
Figura 4-18. El
formato de
instruccin
BIPUSH.
238
EL NIVEL DE
MICROARQUITECTURA
CAP.4
(Ox
15)
UN EJEMPLO DE
239
ILO
AD
SEC. 4.3
IMPLEMENTACIN
W
I(
I
L
(
N
D
I
C
E
B
Y
T
E
N
B
1
(a)
(b)
Orden de
ejecucin de
microinstruccio
nes
W
I
D
ISTOREes la operacinopuesta a
ILOAD, es decir, se saca una palabra del tope
de la pila y se almacena en la posicin
especificada por la suma de LV y el ndice
contenido en la instruc- cin. ISTORE
emplea el mismo formato que ILOAD
(figura 4-l9(a)), excepto que con el cdigo
de operacin Ox36 en lugar de Ox15. Esta
instruccin es un poco diferente de lo que
cabra esperar porque ya se conoce la palabra
que est en el tope de la pila (est en TOS),
as que puede almacenarse inmediatamente.
Sin embargo, es preciso traer la palabra que
ser el nuevo tope de la pila, as que se
requieren una lectura y una escritura, aunque
pueden efec- tuarse en cualquier orden (o
incluso en paralelo, si ello fuera posible).
Tanto ILOAD como ISTORE estn
restringidas en cuanto a que slo accesan las
prime- ras 256 variables locales. Si bien para
la mayor parte de los programas este espacio
de varia240
EL
NIVEL DE MICROARQUITECTURA
CAP.4
Figura 4-20. La
secuencia de
microinstrucciones inicial
para ILOAD y WIDE
ILOAD. Las direcciones
son ejemplos.
SEC. 4.3
IMPLEMENTACIN
UN EJEMPLO DE
241
Memoria
-1Byte--
n+2
DIST. BYTE 2
DIST. BYTE 2
BYTE 2
DIST. BYTE 2
DIST. BYTE 2
n+1
DIST. BYTE 1
DIST. BYTE 1
BYTE 1 n
MBR
GOTO (OxA7)
GOTO (OxA7)
DIST. BYTE 1
DIST.
11
GOTO
(OxA7)
OFFSET 1 8 (a)
(e)
Registros
(b)
(d)
(e)
PC
n+1
11
n+1
11
n+2
OPC
11
11
11
DIST. BYTE 1
BYTE 2
DIST.
GOTO (OxA7)
OxA7
DIST. BYTE 1
DIST. BYTE 1
DIST. BYTE 1
GOTO (OxA7)
DIST.
1
n
Figura 4-22.
n+2
La
situacin al principio de
diversas
microinstrucciones. (a)
Main1. (b) goto1. (e)
goto2. (d) goto3. (e)
goto4.
llNC
Figura 421. La
instruccin
IINC tiene
dos
campos de
operando
distintos.
instruccin
llNC usa
especificar
la
distancia desde el principio del
marco de variables locales. llNC
lee esa variable, la incrementa en
CONST, un valor conte- nido en
la instruccin, y la vuelve a
guardar en la misma localidad.
Cabe sealar que esta instruccin
puede incrementar negativamente,
es decir,
CONST es una
constante de 8 bits con signo en el
intervalo -128 a+ 127. La JVM
completa
incluye
una versin
ancha de llNC
La
NDICE para
La microinstruccin en goto2
inicia la bsqueda del segundo byte
de distancia, lo que da pie a la
figura 4-22(d) al principio de
goto3. Una vez que el primer
byte de distancia se ha
direccin que se calcula
sumando la distancia de
16 bits (con signo) a la
direccin del cdigo de
operacin de ramificar.
Una complicacin aqu
EL NIVEL
MICROARQUITECTURA
J
.
Lamentablemente
(en
nuestra
opinin), este mensaje slo aparece
cuando una clusula then
o else excede 32 KB,
que por lo regular
equivale a unas 50
pginas de Java.
Consideremos ahora las tres
instrucciones de ramificacin
condicional de IJVM: IFLT, IFEQ e
IF_ICMPEQ. Las primeras dos
sacan la palabra que est en el tope
de la pila y toman la rama si la
palabra es menor que cero o igual a
cero, respectivamente. IF_ICMPEQ
saca las dos palabras del tope de la
pila y toma la rama si y slo si son
iguales. En los tres casos es
l
u
g
a
r
d
el
b
it
N.
E
L
a
l
g
ic
a
p
a
r
a
I
F
_
I
C
M
P
E
Q
e
s
p
a
r
e
ci
d
a
a
la
d
e
I
F
L
T
SEC. 4.4
NIVEL
DE
DISEO DEL
MICROARQUITECTURA
243
4.4
DISEO
DEL NIVEL DE
MICROARQUIT
C
o
2. Simplificar la organizacin
para que el ciclo de reloj pueda
ser ms corto.
4
S
i
244
EL NIVEL DE
MICROARQUITECTURA
CAP.4
3. Traslapar la ejecucin de
instrucciones.
Las dos primeras son obvias, pero existe
una sorprendente variedad de decisiones
de diseo que pueden afectar
drsticamente ya sea el nmero de ciclos
de reloj, el periodo del reloj o, lo
independiente de la trayectoria de datos
principal. As, esos circuitos pueden traer el
siguiente cdigo de operacin u operando
por s solos,
tal vez operando
asincrnicamente respecto al resto de la
CPU y obteniendo una o ms instruc- ciones
por adelantado.
Una de las fases de la ejecucin de
muchas instrucciones
que ms tiempo
consume es traer una distancia de dos bytes,
extenderla de la forma apropiada,
y
acumularla en el registro H como preparacin
para una suma, por ejemplo, en una
ramificacin a PC n bytes. Una posible
solucin -hacer que el puerto de memoria
tenga un ancho de 16 bitscomplica
considerablemente la operacin, porque la
memoria en realidad tiene una anchura de 32
bits. Los 16 bits requeridos podran cruzar la
frontera entre dos palabras, de modo que ni
siquiera una sola
lectura
de 32 bits
necesariamente traera los dos bytes que se
necesitan.
Traslapar la ejecucin de las instrucciones
es por mucho el mtodo ms interesante y el
que ms oportunidades ofrece para aumentar
drsticamente la rapidez. El simple traslapo
de la bsqueda y la ejecucin de las
instrucciones es sorprendentemente eficaz.
Sin embargo, las tcnicas ms sofisticadas
van mucho ms lejos, pues traslapan la
ejecucin de muchas ins- trucciones. De
hecho, esta idea es fundamental para el
diseo de computadoras modernas. A
continuacin analizaremos algunas tcnicas
bsicas para traslapar la ejecucin de
instruccio- nes y delinearemos algunas de las
ms complejas.
La rapidez es slo la mitad de la
historia; la otra mitad es el costo. Adems,
hay varias formas de medir el costo, y definir
ste con precisin es problemtico. Algunas
medidas son tan sencillas como un recuento
del nmero de componentes. Esto era vlido
SEC. 4.4
NIVEL
DE
DISEO DEL
MICROARQUITECTURA
245
rea que se requiera
para las
funciones incluidas, ms grande ser el
chip. Y el costo de fabricacin del chip
crece con mucha mayor rapidez que su
rea. Por esta razn, los diseadores a
menudo hablan del costo en trminos de
"terreno", es decir, el rea requerida
para un circui- to (quiz medida en
picohectreas?).
Uno de los circuitos ms
minuciosamente estudiados en la
historia es el sumador binario.
Se han creado miles de diseos, y los
ms rpidos son mucho ms veloces
que los ms lentos, aunque tambin son
mucho ms complejos. El diseador de
sistemas tiene que decidir si el aumento
en Ja velocidad justifica ocupar ms
"terreno".
Los sumadores no son el nico
componente que ofrece muchas
opciones. Casi todos los
componentes del sistema se pueden
disear de modo que operen con mayor
o menor veloci- dad, pero con diferente
costo.
El reto del diseador es
identificar Jos componentes del sistema
que pueden mejorarlo ms si se hacen
ms rpidos. Resulta interesante que
muchos compo- nentes individuales se
pueden sustituir por un componente
mucho ms rpido sin que se observe
un efecto apreciable sobre la rapidez del
sistema. En las secciones que siguen
exami- naremos algunas cuestiones de
diseo y los equilibrios costo-rapidez
que implican.
Uno de los factores clave para
determinar con qu rapidez puede
operar el reloj es la
cantidad de trabajo que debe efectuarse
en cada ciclo de reloj. Obviamente,
cuanto ms trabajo haya que realizar,
ms largo ser el ciclo de reloj. Claro
que la cosa no es tan sencilla, porque el
hardware es muy bueno para hacer
cosas en paralelo, as que es realmente
la secuencia de operaciones que deben
:J
246
EL NIVEL DE
MICROARQUITECTURA
CAP.4
o .:
~:i ~)
SEC. 4.4
247
lamente al cdigo especfico de la
instruccin subsecuente, de modo que slo
se requiere un total de tres ciclos. Este
pequeo truco reduce el tiempo de
ejecucin de la siguiente microinstruccin
en un ciclo, de modo que, por ejemplo,
otras
estrategias.
Fusin del
ciclo del
intrprete
con el
microcdigo
En el Mic-1, el ciclo principal consiste en
una microinstruccin que debe ejecutarse al
prin- cipio de cada instruccin IJVM. En
algunos casos es posible traslaparla con la
instruccin anterior. De hecho, esto ya se
logr parcialmente. Observe que cuando se
ejecuta Main1 el cdigo de operacin que
se va a interpretar ya est en MBR. Est ah
porque el ciclo principal anterior la trajo (si
la instruccin anterior no tena operandos)
o bien porque se trajo durante la ejecucin
de la instruccin anterior.
Este concepto de traslapar el principio
de la instruccin puede llevarse ms lejos,
y en algunos casos el ciclo principal puede
reducirse a la nada. Esto puede ocurrir
como sigue. Consideremos las secuencias de
microinstrucciones que terminan con un
salto a Main1. En cada uno de estos puntos,
la microinstruccin del ciclo principal
puede anexarse al final de la sucesin (en
lugar de estar al principio de la sucesin
siguiente) de modo que la ramificacin
multivas est repetida en muchos lugares
(pero siempre con el mismo conjunto de
objeti- vos). En algunos casos la
microinstruccin Main1 se puede fusionar
con microinstrucciones previas, ya que tales
instrucciones no siempre se aprovechan
plenamente.
En la figura 4-23 se muestra la sucesin
dinmica de instrucciones
para una
- SP -1; rd
MBR contiene cd. op.:
traer siguiente byte
Copiar nva. pal. en TOS;
despachcar segn cd. op.
TOS=
MOR;
gota
(MBR)
MAR = SP = SP - 1; rd
Leer 2a. palabra de la pila
po
p3
Ma
in
TOS=
MOR;
goto Main
1
PC = PC +
1; fetch;
goto (MBR)
Esperar
lectura
de nueva
TOS de
la
memoria
Copiar
nueva
palabra en
TOS
MBR tiene
cd. op.; obt.
sig byte.
despachar
MBR
contiene
ndice;
copiar
LV en H
MAR=
dir. de
variable
local
que se
meter
SP
a nuevo
pila;apunta
preparar
escrit.tope de
lnc. PC; obt. sig. cd. op.:
escribir en tope de pila
Actualizar TOS
MBR tiene cd. op.: obt. sig.
byte; despachar
EL
248
NIVEL DE MICROARQUITECTURA
CAP.4
DISEO DEL
NIVEL DE
MICROARQU
ITECTURA
En el Mic-1,
podramos aligerar
mucho la carga de la ALU si creamos
una unidad inde- pendiente que traiga y
procese las instrucciones. Esta unidad,
llamada unidad de bsqueda de
instrucciones (IFU, Instruction Fetch
Unit) puede incrementar PC de forma
indepen- diente y traer bytes del flujo de
bytes antes de que se necesiten. Esta
unidad
slo
requiere
un
incrementador,un circuito mucho ms
sencillo que un sumador completo. Si
llevamos esta idea ms lejos, la IFU
tambin podra ensamblar operandos de
8 y 16 bits de modo que estn listos para
usarse de inmediato apenas se necesiten.
Hay al menos dos formas de lograr esto:
La IFU puede interpretar cada
cdigo de operacin, determinando
cuntos campos
1.
M
n
e
m
n
i
c
o
O
p
e
r
a
c
i
o
n
e
s
C
o
m
e
n
t
a
r
i
o
s
iload2
iload3
iload4
iload5
iload1
M
MAR = SP =ARSP + 1
PC = PC + =1; fetch; wr
TOS= MORM
PC = PC + BR
1; fetch; gato (MBR)
U
+
LV;
rd
2
4
adicion
ales
hay
que
traer, y
armarl
os en
un
registro
listos
para
que la
uni
da
d
de
eje
cuc
in
pri
nci
pal
los
u
s
e.
2.
L
a
I
F
U
Figu
ra
4-26.
Cdi
go
para
ejec
utar
ILO
AD
con
tres
buse
s.
U
n
a
u
n
i
d
a
d
d
e
o
b
t
e
n
c
i
n
d
e
i
n
s
puede
aprovechar
la
naturaleza de flujo de las
instrucciones, y proporcionar en todo momento los
siguientes fragmentos de 8 y
16 bits, sea que tenga sentido hacerlo o no. As, la
unidad
de
ejecucin
principal puede pedir lo que
necesite.
t
r
u
c
c
i
o
n
e
s
L
a
s
d
o
s
t
c
n
i
c
a
s
a
n
t
e
r
i
o
r
e
s
s
o
n
r
ecomendables, pero si
queremos lograr una
mejora
drstica
necesitamos
algo
mucho ms radical.
Retrocedamos
y
examinemos las partes
comunes de todas las
instrucciones:
la
obtencin
y
decodificacin de los
campos de la instruccin.
Obser-
=!
l.
J
ve que en cada
instruccin
podran ocurrir
las siguientes
operaciones:
El PC se pasa por la
ALU y se
incrementa.
2.
Se usa el PC para
3.
traer el siguiente
4.
5.
instrucciones. Se
MBR2
- - - -T--...---...
&....,><-><-.,_
_.
L- - - -L -
-'---..
,....1,---',
_.....'
t!I
De la
memoria _.
_
e
===
====
>
Registro de
desplazamiento
_...__
,'---...1....~--l
B
u
s
B
leen operandos de la
memoria.
Se escriben
operandos en la
memoria.
La ALU efecta un
clculo y los
resultados se
guardan.
Si una instruccin tiene
campos adicionales (para los
operandos), cada campo debe
traerse explcitamente, byte por
byte, y armarse antes de que
pueda usarse. Obtener y armar
un campo ocupa a la ALU
durante por lo menos un ciclo
por byte para incrementar el
PC, y luego otra vez para armar
el ndice o la distancia
resultante. La ALU se usa casi
en cada ciclo para efectuar
diversas
operaciones
.._ _
re
c
Escribir PC
obtenci
la
y
de
de
instruccin,
adems
trabajo
d
instruccin
250
EL NIVEL DE MICROARQUITECTURA
CAP.4
SEC. 4.4
De forma similar, MBR2 ofrece la misma funcionalidad pero contiene los dos bytes
siguientes, y tambin tiene dos interfaces con el bus B: MBR2 y MBR2U, que guardan los
valores extendidos a 32 bits con el signo y con ceros, respectivamente .
La IFU se encarga de traer una serie de bytes. Para ello, usa un puerto de memoria
convencional de 4 bytes, obtiene por adelantado palabras completas de 4 bytes y carga los
bytes consecutivos en un registro de desplazamiento que los proporciona de uno en uno o
dos a la vez, en el orden en que se obtuvieron de la memoria. La funcin del registro de
desplazamiento es mantener una cola de bytes de la memoria para alimentarlos a MBR1 Y
MBR2.
En todo momento MBR1 contiene el byte menos reciente de los que estn en el registro
de desplazamiento y MBR2 contiene los 2 bytes menos recientes (con el menos reciente a la
izquierda) para formar un entero de 16 bits [vea la figura 4-l 9(b)]. Los dos bytes que estn en
.1.
MBR2 podran provenir de diferentes palabras de Ja memoria, porque las instrucciones IJVM
no se alinean segn las fronteras de palabra en la memoria.
Cada vez que se lee MBR1, el registro de desplazamiento corre su contenido un byte a
la derecha. Cada vez que se lee MBR2, el desplazamiento es de dos bytes a la derecha. Luego
se vuelven a cargar MBR1 y MBR2 con el byte y el par de bytes menos recientes,
respectiva- mente. Si existe suficiente espacio en el registro de desplazamiento para otra
palabra entera, la IFU inicia un ciclo de memoria para leerla. Suponemos que cuando se lee
cualquiera de los registros MBR, se ha vuelto a llenar para cuando inicia el siguiente ciclo,
as que pueden leerse en ciclos consecutivos.
El diseo de la IFU se puede modelar con una mquina de estados finitos (FSM, Finite
State Machine) como se muestra en la figura 4-28. Todas las FSM constan de dos partes:
estados, que se indican con crculos, y transiciones, que se indican con flechas de un estado
a otro. Cada estado representa una posible situacin en que la FSM puede estar. Esta FSM
en particular tiene siete estados, que corresponden a los siete estados del registro de
desplaza- miento de la figura4-27. Los siete estados corresponden al nmero de bytes que
estn actual- mente en el registro de desplazamiento, un nmero entre O y 6, inclusive.
Cada flecha representa un suceso que puede ocurrir. Aqu pueden ocurrir tres sucesos
distintos. El primero es que se lea un byte de MBR1. Este suceso hace que el registro de
desplazamiento se active y desplace su contenido un byte hacia la derecha, "expulsando" un
byte por su extremo derecho y reduciendo su estado en 1. El segundo suceso es que se lean
dos bytes de MBR2, lo que reduce el estado en 2. Ambas transiciones hacen que MBR1 y
MBR2 se vuelvan a cargar. Cuando la FSM pasa a los estados O, 1 o 2, se inicia una
251
Traer palabra
Traer pala
- ~ ~+-~~~~~~~~~--br
MBR2
MBR2
Transiciones
referencia a la memoria para leer una nueva palabra (suponiendo que la memoria no est
ocupada leyen- do una palabra). La llegada de la palabra adelanta el estado en 4.
Para que funcione correctamente, la IFU debe bloquearse cuando se le pide que haga
algo que no puede hacer, como proporcionar el valor de MBR2 cuando slo hay un byte en el
registro de desplazamiento y la memoria sigue ocupada trayendo una nueva palabra. Ade- ms,
slo puede hacer una cosa a la vez, de modo que los sucesos deben colocarse en serie. Por
ltimo, cada vez que se modifique PC, habr que actualizar la IFU. Estos detalles hacen que la
IFU sea ms complicada de lo que se muestra. No obstante, muchos dispositivos de
hardware se construyen como mquinas de estados finitos.
MBR1:
Ocurre
cuando
se lee
MBR1
MBR2:
Ocurre
cuand
o se
lee
MBR2
La IFU tiene su propio registro de direccin de memoria, llamado IMAR, que se usa
para direccionar la memoria cuando es preciso traer una nueva palabra. Este registro
tiene su propio incrementador dedicado, as que no se necesita la ALU principal para
incrementarlo y as obtener la siguiente palabra. La IFU debe vigilar el bus C de modo
que, cada vez que se cargue PC, el nuevo valor de PC tambin se copie en IMAR. Puesto
que el nuevo valor que est en PC no necesariamente est en una frontera de palabra, la
IFU tiene que traer la pala- bra necesaria y ajustar el registro de desplazamiento de manera
acorde.
Con la IFU, la unidad de ejecucin principal escribe en PC slo cuando es necesario
alterar Ja naturaleza secuencial del flujo de bytes de las instrucciones. Esto ocurre cuando
252
EL NIVEL DE MICROARQUITECTURA
CAP. 4
l<~J=:::f-r-~-_,.J
t=:::::::t:.:=::::>
Seales de control
Colocar en el bus B
Contro
l
_....,6.
._
,,,,....
de
ALU
Bus A
1.
253
A
y de la
Unidad de
bsqueda
de instrucciones
(IFU)
SEC. 4.4
Registros
de control de
memoria
memoria
principal
BusB
a
t
r
e
s
.
El Mic-2 mejora algunas instrucciones
ms que otras. LDC_W baja de nueve
microins- truccionesa slo tres, lo que reduce
su tiempo de ejecucinpor un factor de 3. En
cambio, SWAP slo baja de ocho a seis
microinstruccion
es. En lo que
respecta
al
desempeo
global, lo que
cuenta realmente
es la ganancia
que se obtiene
en
las
instrucciones
ms
comunes.
sta
s
incl
uye
n
ILO
AD
(ant
es 6,
ahor
a 3),
IAD
D
(ante
s 4,
ahora
3) y
IF_I
CMP
EQ
(ante
s 13,
aho
ra
1 O
si
se
ram
ific
a;
ant
es
10,
CAP.4
EL NIVEL DE MICROARQUITECTURA
Mnemnico
Operaciones
inop1
add1
iadd2
iadd3
gato (MBR)
MAR=
SP= SP -1; rd
H =TOS
MOR= TOS= MDR+H; wr; gota (MBR1)
Comentarios
Saltar2a.a pal
la asibra
guientede la inpistruccin
Leer
la
H =tope de la pila
Sumar dos palabras del tope; escribir
en nvo. tope de la pila
isub1
MAR = SP = SP - 1; rd
Leer 2a. palabra de la pila
isub2
H =TOS
H = tope de la pila
MOR= TOS= MOR-H; wr; gato (MBR1)
isub3
Restar TOS del TOS-1 trado
iand1
MAR = SP = SP - 1; rd
Leer 2a. palabra de la pi la
iand2
H =TOS
H =tope de la pila
MOR= TOS= MOR ANO H; wr; gato (MBR1)
iand3
Hacer ANO del TOS-1 trado y TOS
MAR = SP = SP - 1 ; rd
ior1
Leer 2a. palabra de la pila
ior2
H =TOS
H =tope de la pila
MOR= TOS= MOR OR H; wr; gota (MBR1)
ior3
Hacer OR del TOS-1 trado y TOS
dup1
MAR = SP = SP + 1
Incrementar SP; copiar en MAR dup2
MOR= TOS; wr; gato (MBR1)
Escribir nueva palabra de la pila pop1
MAR = SP =
SP - 1; rd
Leer 2a. palabra de la pila
pop2
Esperar lectura
TOS= MOR; gato (MBR1)
pop3
Copiar nueva palabra en TOS
MAR = SP - 1 ; rd
swap1
Leer 2a. palabra de la pila; asignar SP a MAR
swap2
MAR =SP
Repararse para escribir nueva 2a. palabra swap3
H =MOR; wr
Guardar nuevo TOS; escribir 2a. pal. en pila swap4
MOR= TOS
Copiar TOS viejo en MOR
MAR = SP - 1 ; wr
swap5
Escribir TOS viejo en 2o. lugar de la pila
swap6
TOS = H; gota (MBR1)
Actualizar TOS
bipush1
SP = MAR = SP + 1
Reparar MAR p/escribir en nuevo tope de pila
bipush2
MOR= TOS= MBR1; wr; gato (MBR1)
Actualizar pila en TOS y memoria
MAR= LV+ MBR1 U; rd
iload1
Pasar LV + ndice a MAR; leer operando
,(. ~
ahora 8 si no se ramifica). Para medir la mejora sera necesario escoger algunos programas
de referencia y ejecutarlos, pero es evidente que las ganancias aqu son importantes.
Mnemnico
Operaciones
Comentarlos
ifeq2
ifeq1
ifeq3
ifeq4
if_icmpeq1
if_icmpeq2
if_icmpeq3
if_icmpeq4
if_icmpeq5
if_icmpeq6
MAR
SP = SP - 1; rd
OPC= =TOS
TOS= MOR
Z = OPC; if (Z) gato T; else gato F
MAR = SP = SP - 1; rd
MAR = SP = SP -1
H =MOR; rd
OPC =TOS
TOS= MOR
Z = H - OPC; if (Z) gato T; else gato F
H = PC - 1 ; gota goto2
LeerGuardar
2a. palaTOS
bra en
de OPC
la pila temporalmente
Poner nuevo tope de pila en TOS
Ramificar segn bit Z
Leer 2a. palabra de la pila
Ajustar MAR para leer nuevo tope de pila
Copiar 2a. palabra de la pila en H
Guardar TOS en OPC temporalmente
Poner nuevo tope de pila en TOS
Si 2 pal. en tope iguales, ir a T; si no, a F
Igual que gato 1
T
F
F2
i nvokevi rtual 1
invokevirtual2
invokevirtual3
invokevirtual4
invokevirtual5
invokevirtual6
invokevirtual7
invokevirtual8
invokevirtual9
invokevirtual10
invokevirtual11
ireturn1
ireturn2
ireturn3
ireturn4
ireturn5
ireturn6
ireturn7
ireturn8
H = MBR2
gota (MBR1)
MAR= CPP + MBR2U; rd
OPC = PC
PC =MOR
TOS = SP - MBR2U
TOS = MAR = H = TOS + 1
MOR= SP + MBR2U + 1; wr
MAR= SP =MOR
MOR= OPC; wr
MAR = SP = SP + 1
MDR=LV; wr
LV= TOS; gato (MBR1)
MAR = SP = LV; rd
LV = MAR = MOR; rd
MAR= LV+ 1
PC +MOR; rd
MAR =SP
LV= MOR
MOR= TOS; wr; gato (MBR1)
255
iloa
d2
MA
R
=
SP
=
SP
+1
Incr
em
ent
ar
SP;
pas
ar
nue
vo
SP
a
MA
R
iload3
istore1
istore2
istore3
istore4
istore5
wide1
wide_iload1
wide_istore1
idc_w1
iinc1
iinc2
i nc3
goto1
goto2
goto3
goto4
iflt1
iflt2
iflt3
gato ( MBR1)
MAR = SP = SP - 1; rd
OPC =TOS
TOS= MOR
Figura 4-30.
los procesen y luego escribe los resultados de vuelta en los registros. Fuera de la IFU, casi no
hay paralelismo. La adicin de paralelismo es una gran oportunidad.
Como dijimos antes, el ciclo de reloj est limitado por el tiempo que se requiere para que
las seales se propaguen por la trayectoria de datos. La figura 4-3 muestra un desglose del
retardo a travs de los diversos componentes durante cada ciclo. El ciclo de la trayectoria de
datos real tiene tres componentes principales:
iflt4
256
CAP.4
escribe en los Iatches en cada ciclo. De hecho, los latches dividen la trayectoria de datos en partes
discretas que ahora pueden operar de forma independiente. Llamaremos a este modelo Mic-3, o
modelo con filas de procesamiento.
Registros
de control de
memoria
A y dela
memoria
2.
3.
En la figura 4-31 mostramos una nueva arquitectura de tres buses que incluye la IFU
pero tiene tres latches (registros) adicionales, cada uno insertado en medio de un bus. Se
1.
SEC. 4.4
257
operar la ALU y el desplazador, adems de cargar el latch C, y uno para almacenar el conte- nido del
latch C de vuelta en los registros. Acaso estamos locos? (Sugerencia: No.) La ventaja de insertar
los latches es doble:
l.
2.
Podemos usar todas las partes de la trayectoria de datos durante cada ciclo.
principal
Unidad de
bsqueda
de instrucciones
(IFU)
cin de aproximadamente 1/3 de la original, as que podemos triplicar la velocidad del reloj.
(Esto no es del todo realista porque tambin aadimos dos registros ms a la trayectoria de datos, pero
sirve como primera aproximacin.)
Puesto que hemos estado suponiendo que todas las lecturas y escrituras de la memoria
pueden satisfacerse con el contenido de la memoria cach de nivel 1, y esta cach est hecha con el
mismo material que los registros, seguiremos suponiendo que una operacin de me- moria tarda un
ciclo. En la prctica, empero, esto podra ser difcil de lograr.
El segundo punto tiene que ver con el rendimiento ms que con la rapidez de una instruc- cin
individual. En el Mic-2, durante la primera y la tercera partes de cada ciclo de reloj, la ALU est ociosa.
Si dividimos la trayectoria de datos en tres partes, podremos usar la ALU en cada ciclo y obtener hasta
tres veces ms trabajo de la mquina.
Veamos ahora cmo funciona la trayectoria de datos del Mic-3. Antes de comenzar, necesitamos una notacin para manejar los latches. La obvia es llamar a los latches A, B y C y tratarlos como
registros, teniendo presentes las restricciones de la trayectoria de datos. La figura 4-32 muestra un ejemplo
de secuencia de cdigo, la implementacin de SWAP para el Mic-2.
1=:::::::s=~
Seales de control
t
t
Colocar en el bus B
Escribir el bus C en el registro
Mnemnico Operaciones
latch
swap1
swap2
swap3
swap4
swap5
swap6
e
Contro.
ALU
.---- de
Comentarios
MAR = SP - 1; rd
MAR= SP
H =MOR; wr
MOR= TOS
MAR = SP - 1; wr
TOS= H; gato (MBR1)
Cmo es posible que estos registros adicionales sirvan de algo? Ahora se requieren tres ciclos de
reloj para usar la trayectoria de datos: uno para cargar los latches A y B, uno para
258
EL NIVEL DE MICROARQUITECTURA
SEC. 4.4
CAP.4
Cic
1
2
3
4
Swap1
MAR=SP-1;rd
B=SP
C=B-1
MAR=C; rd
MDR=mem
Swap2
MAR=SP
B=SP
C=B
MAR=C
Swap3
H=MDR;wr
Swap4
MDR=TOS
Swap5
MAR=SP-1wr
Swap6
TOS=H;goto (MBR1)
259
5
6
7
8
9
B=MDR
C=B
H=C; wr
Mem=MDR
10
11
B=TOS
C=B
MDR=C
B=SP
C=B-1
MAR=C; wr
Mem=MDR
B=H
C=B
TOS=C
gato (MBR1)
Ciclo 1
EL NIVEL DE MICROARQUlTECTURA
(suponiendo que no hay paros). La regin sombreada en el ciclo 1 para la instruccin 1 indica
que la IFU est ocupada trayendo la instruccin 1. Un tic del reloj despus, durante el ciclo 2, los
registros que la instruccin 1 necesita se estn cargando en los latches A y B mientras la IFU
est ocupada trayendo la instruccin 2, lo que tambin se indica con los dos rectngulos
sombreados en el ciclo 2.
Durante el ciclo 3 la instruccin 1 est usando la ALU y el desplazador para efectuar su
.,
SEC. 4.4
261
De la
trayendo la instruccin 4.
memoria
ndice de
microoperaciones
en ROM
Longitud
de IJVM
Final
Goto
Unidad de cola de espera
ROM de microoperaciones
Unidad de
.....
...
Ciclo4
Ciclo 3
Tiempo~
cargado desde la memoria antes del inicio del ciclo 5. La situacin de que un micropaso no puede
iniciarse porque est esperando un resultado que un micropaso anterior todava no ha producido se
llama dependencia verdadera o dependencia RAW. Es comn llamar peli- gros a las
dependencias. RAW significa "lectura despus de escritura" (Read After Write) e indica que un
micropaso quiere leer un registro que todava no se escribe. La nica accin sensata aqu es retrasar
el inicio de swap3 hasta que MDR est disponible, en el ciclo 5. Detenerse para esperar un valor
necesario se denomina parar (stalling). Despus, podremos seguir iniciando microinstrucciones en
cada ciclo porque no hay ms dependencias, aunque swap6 apenas lo logra, ya que lee H en el ciclo
despus de que swap3 lo escribe. Si swap5 hubiera tratado de leer H, habra parado durante un
ciclo.
260
Ciclo2
~.
,;
G)
Si
hu
bi
r
a
m
os
m
ost
ra
do
el
cic
lo
y
los
su
bs
ec
ue
nt
es,
el
pa
tr
n
ha
br
a
sid
o
el
mi
sm
o
qu
e
en el ciclo 4: las cuatro partes de la trayectoria de datos que pueden operar de forma independiente estaran hacindolo. Este diseo representa una fila de procesamiento de cuatro etapas: para traer instrucciones, accesar operandos, hacer operaciones de ALU y para la escritura de
resultados en los registros. Esto es similar a la fila de procesamiento de la figura 2-4(a),
excepto que no tiene la etapa de decodificacin. El punto importante que debemos captar
aqu es que si bien una sola instruccin tarda cuatro ciclos de reloj en ejecutarse, en cada uno
de stos se inicia una nueva instruccin y otra vieja termina.
Otra forma de ver la figura 4-34 es seguir cada instruccin horizontalmente. Para la
instruccin l, en el ciclo 1 la IFU est trabajando en ella. En el ciclo 2, sus registros se estn
colocando en los buses A y B. En el ciclo 3 la ALU y el desplazador estn trabajando para
ella. Por ltimo, en el ciclo 4, sus resultados se estn guardando de vuelta en los registros. Lo
importante aqu es que se dispone de cuatro secciones del hardware, y durante cada ciclo una
instruccin dada utiliza slo una de ellas, con lo que las otras secciones quedan libres para
instrucciones diferentes.
Una analoga til de nuestro diseo con filas de procesamiento es una lnea de ensamble de
una fbrica que arma automviles. Para abstraer los aspectos esenciales de este modelo, imagine
que se golpea un gran gong cada minuto, y en ese instante todos los automviles avanzan a la
siguiente estacin de la lnea. En cada estacin, los trabajadores realizan alguna operacin en el
automvil que en ese momento est frente a ellos, como poner el volante o
instalar los frenos. En cada golpe del gong (un ciclo) se inyecta un nuevo automvil al prin-
cipio de la lnea de ensamble, y un automvil terminado sale por el otro extremo. As, aunque
armar un automvil podra tardar cientos de ciclos, en cada ciclo se termina un automvil
completo. La fbrica puede producir un automvil por minuto, sin importar cunto tarde
realmente el armado de un automvil. sta es la potencia de las filas de procesamiento, y
aplica tanto a las CPU como a las fbricas de automviles.
262
EL NIVEL DE MICROARQUITECTURA
CAP.4
bsqueda
de instrucciones
Unidad decodif.
!~~~ii~~~~
IADD
ISUB
ILOAD
IFLT
microope
Cola
de
raciones
pendientes
SEC. 4.4
263
.... ~
seguido de inmediato por otro cdigo de operacin. Cuando se detecta el prefijo WIDE, el
siguiente byte se transforma en un cdigo de operacin ancho especial; por ejemplo WIDE+
ILOAD se convierte en WIDE_ILOAD.
La unidad decodificadora enva el ndice para la ROM de microoperaciones, que encontr en su tabla, al siguiente componente, la unidad de cola de espera. Esta unidad contiene
algo de lgica y dos tablas internas, una en ROM y una en RAM. La ROM contiene el microprograma, y cada instruccin IJVM tiene cierto nmero de entradas consecutivas llamadas
microoperaciones. Las entradas deben estar en orden, por lo que no se permiten trucos como
que wide_iload2 salte a iload2 como en Mic-2. Cada secuencia IJVM debe detallarse totalmente, duplicando secuencias en algunos casos.
Las microoperaciones son similares a las microinstrucciones de la figura 4-5 excepto
que no existen los campos NEXT_ADDRESS ni JAM, y se necesita un nuevo campo codificado para especificar la entrada del bus A. Tambin se incluyen dos nuevos bits: Final y
Goto. El bit Final se enciende en la ltima microoperacin de cada secuencia de microoperaciones IJVM para marcarla. El bit Goto se enciende para marcar las microoperaciones que
son microrramificaciones condicionales. Su formato es diferente del de las microoperaciones
normales, pues consiste en los bits JAM y un ndice para la ROM de microoperaciones. Las
microinstrucciones que antes hacan algo con Ja trayectoria de datos y tambin efectuaban
una microrramificacin condicional (como iflt4) ahora tienen que dividirse en dos microoperaciones.
La unidad de cola de espera funciona como sigue. Recibe de la unidad decodificadora un
ndice para Ja ROM de microoperaciones. Con ese ndice, busca la microoperacin en la ROM
y la copia en una cola interna. Luego copia en la cola la siguiente microoperacin, y tambin
la que sigue a sa. Sigue haciendo esto hasta que llega a una que tiene el bit Final encendido
(en 1). Copia esa microoperacin y se detiene. Suponiendo que no encontr una microoperacin
con el bit Goto encendido y todava tenga mucho espacio en la cola, la uni- dad de cola de
espera enviar una seal de acuse a Ja unidad decodificadora. Cuando la unidad
decodificadora detecta este acuse, enva el ndice de Ja siguiente instruccin IJVM a la unidad
de cola de espera.
De este modo, la sucesin de instrucciones IJVM en la memoria se convierte en ltima
instancia en una sucesin de microoperaciones en una cola. Estas microoperaciones alimen- tan
a los MIR, que envan las seales que controlan la trayectoria de datos. Sin embargo, ahora
hay otro factor que es preciso considerar: los campos de cada microoperacin no estn
activos al mismo tiempo. Los campos A y B estn activos durante el primer ciclo. El campo
ALU est activo durante el segundo ciclo, el campo C est activo durante el tercer ciclo, y las
operaciones de memoria, si se requieren, se efectan en el cuarto ciclo.
Para que esto funcione correctamente, hemos introducido cuatro M 1 R independientes en la
figura 4-35. Al principio de cada ciclo de reloj (el tiempo ~w en la figura 4-3), MIR3 se
copia en MIR4, MIR2 se copia en MIR3, MIR1 se copia en MIR2 y MIR1 se carga con una
nueva microoperacin de la cola de microoperaciones. Luego cada MIR saca sus seales de
control, pero slo se usan algunas de ellas. Los campo~ A y B de MIR1 sirven para seleccionar los registros que alimentan los latches A y B, pero el campo ALU de MIR1 no se usa y no
est conectado a ninguna otra cosa en la trayectoria de datos.
264
EL NIVEL DE MICROARQUITECTURA
CAP.4
Un ciclo de reloj despus, esta microoperacin ha avanzado a MIR2 y los registros que
seleccion ya estn a salvo en los latches A y B, esperando nuevas aventuras. Su campo ALU se
usa ahora para alimentar la ALU. En el siguiente ciclo, el campo C escribir los resultados de
vuelta en los registros. Despus, pasar a MIR4 e iniciar cualesquier operaciones de memoria
que necesite utilizando el MAR que ya se carg (y MOR, si se trata de una escritura).
Hay un ltimo aspecto del Mic-4 que debemos tratar aqu: las microrramificaciones.
Algunas instrucciones IJVM, como IFLT, necesitan ramificar condicionalmente con base en,
digamos, el bit N. Cuando ocurre una microrramificacin, la fila de procesamiento no puede
continuar. Para resolver este problema, hemos aadido el bit Goto a cada microoperacin.
Cuando la unidad de cola de espera encuentra una microoperacin con este bit encendido al
copiarla en la cola, se da cuenta de que hay problemas en el futuro y no enva un acuse a la
unidad decodificadora. El resultado es que la mquina se para en este punto hasta que se
resuelve la microrramificacin.
Es concebible que algunas instrucciones IJVM posteriores a la ramificacin ya se hayan
alimentado a la unidad decodificadora (pero no a la de cola de espera), ya que no devuelve
una seal de acuse (o sea, de continuar) cuando encuentra una microoperacin que tiene el bit
Goto encendido. Se requieren hardware y mecanismos especiales para arreglar las cosas y
volver al carril, pero este tema rebasa el alcance del presente libro. Cuando Edsger Dijkstra
escribi su famosa carta "GOTO Statement Considered Harmful" ("El enunciado GOTO es
perjudicial") (Dijkstra, l 968a), no saba cunta razn tena.
Hemos llegado muy lejos desde el Mic-1. ste era un sistema de hardware muy sencillo,
con casi todo el control en software. El Mic-4 es un diseo con uso intensivo de filas de
procesamiento, con siete etapas y hardware mucho ms complejo. La fila de procesamiento se
muestra de forma esquemtica en la figura 4-36, donde los nmeros en crculos correspon- den a
los de la figura 4-35. El Mic-4 prebusca automticamente un flujo de bytes de la memoria, los
decodifica como instrucciones IJVM, convierte stas en una sucesin de microoperaciones
mediante una ROM, y las encola para usarlas conforme se vayan necesitando. Las primeras
tres etapas del conducto se pueden vincular con el reloj de Ja trayectoria de datos si se desea,
pero no siempre habr trabajo que efectuar. Por ejemplo, la IFU no puede alimentar un nuevo
cdigo de operacin IJVM a la unidad decodificadora en cada ciclo porque las instrucciones
IJVM tardan varios ciclos en ejecutarse y la cola se desbordara rpidamente.
IFU (Unidad
de instrucde bsqueda
ficador
Decodi-
Cola
r--
Operandos
r--
Ejecucin
r--
tura
Reescri-
Memoria
ciones)
En cada ciclo de reloj los MIR se desplazan hacia adelante y la microoperacin que est al
fondo de la cola se copia en MIR1 para iniciar su ejecucin. Luego las seales de control de
SEC. 4.5
265
Jos cuatro MIR se distribuyen por la trayectoria de datos y hacen que se efecten ciertas acciones.
Cada MIR controla una parte distinta de Ja trayectoria de datos y por tanto diferen- tes micropasos.
En este diseo tenemos una CPU con gran uso de filas de procesamiento que permite
pasos individuales muy cortos y por tanto una frecuencia de reloj alta. Muchas CPU se dise- an casi
de la misma manera, sobre todo las que tienen que implementar un conjunto de instrucciones ms
viejo (CISC). Por ejemplo, Ja implementacin del Pentium 11 es conceptualmente similar al
Mic-4 en algunos aspectos, como veremos ms adelante en este captulo.
EL NIVEL DE MICROARQUITECTURA
CAP. 4
de datos e instrucciones). Un tamao tpico para la cach L2 es de 512 KB a 1 MB. La cach de tercer
nivel est en la tarjeta del procesador y consiste en unos cuantos megabytes de SRAM, que es mucho
SEC. 4.5
267
bajo para reemplazarla. Existen muchas variaciones de este esquema, pero todas se basan en la idea
de mantener las lneas ms usadas en la cach el mayor tiempo posible, a fin de maximizar el
nmero de referencias a la memoria que se pueden satisfacer con la cach.
Paquete_._-..i
de CPU
La cach ms sencilla es la llamada cach con mapeo directo. En la figura 4-38(a) se mues- tra un
ejemplo de cach con mapeo directo de un solo nivel. Esta cach contiene 2048 entra- das. Cada
entrada (rengln) de la cach puede contener exactamente una lnea de cach de la memoria
principal. Con un tamao de lnea de cach de 32 bytes (para este ejemplo), la cach puede contener
64 KB. Cada entrada de cach consta de tres partes:
Chip de CPU
Memoria
principal
(DRAM)
Tarjeta del
procesador
Controlador
de teclado
Controlador
de grficos
Controlador
de disco
1.
2.
El campo Etiqueta (tag) consiste en un valor nico de 16 bits que identifica la lnea de
memoria de la cual provienen los datos.
3.
El campo Datos contiene una copia de los datos de la memoria. Este campo con- tiene
una lnea de cach de 32 bytes.
Etiqueta
Entrada
Las cachs dependen de dos tipos de localidad de direcciones para lograr su objetivo. Localidad
espacial es la observacin de que es probable que en el futuro cercano se acceda a localidades de
memoria con direcciones numricamente similares a una localidad de me- moria a la que se accedi
recientemente. Las cachs aprovechan esta propiedad trayendo ms
datos de los que se solicitaron, con la expectativa de anticipar solicitudes futuras. Ocurre
localidad temporal cuando se vuelve a acceder a localidades de memoria a las que se acce- di
recientemente. Esto puede ocurrir, por ejemplo, con localidades de memoria cercanas al tope de la
pila, o instrucciones dentro de un ciclo. La localidad temporal se aprovecha pri- mordialmente en los
diseos de cach al tomar la decisin de qu debe desecharse cuando no se encuentra algo en ella (fallo
de cach). Muchos algoritmos de reemplazo de cach aprove- chan la localidad temporal desechando
las entradas a las que no se ha accedido recientemente.
Todas las cachs usan el modelo que sigue. La memoria principal se divide en bloques de
tamao fijo llamados lneas de cach. Una lnea de cach por lo regular consta de 4 a 64
bytes consecutivos. Las lneas se numeran consecutivamente a partir del O, de modo que si el tamao
de lnea es de 32 bytes la lnea O comprende los bytes del O al 31, la lnea 1 compren- de los bytes del
32 al 63, etc. En cualquier instante dado, algunas lneas estn en la cach.
Cuando se hace referencia a la memoria, el circuito controlador de la cach verifica si la
palabra a la que se hizo referencia est actualmente en la cach. Si es as, puede usar el valor que
est ah y evitarse un viaje a la memoria principal. Si la palabra no est ah, se elimina una lnea de
la cach y la lnea requerida se busca de la memoria o de una cach de nivel ms
268
EL NIVEL DE MICROARQUITECTURA
CAP.4
2047
ll
Datos
165504-65535, 131040-131072,
...
;:;
7
6
5
4
3
2
1
L......1---.L.---------l
L......1---.L.---------l
L......J.
.
.
.
..
(a)
Bits
16
11
ETIQUETA
LNEA
1 PALABRA 1 BYTE 1
(b)
Figura 4-38. (a) Cach con mapeo directo. (b) Direccin virtual de 32 bits.
En una cach con mapeo directo, una palabra de memoria dada se puede almacenar en un y slo
un lugar dentro de la cach. Dada una direccin de memoria, slo hay un lugar en el
que se puede buscar en la cach. Si no est ah, entonces no est en la cach.
Para almacenar y recuperar datos de la cach, la direccin se divide en cuatro
componentes, como se muestra en la figura 4-38(b):
1.
El campo ETIQUETA corresponde a los bits Etiqueta almacenados en una entrada de cach.
2. El campo LNEA indica cul cach de entrada contiene los datos correspondientes, si estn presentes.
3.
4.
Cuando la CPU produce una direccin de memoria, el hardware extrae los 11 bits LNEA
de la direccin y los usa como ndice dentro de la cach para encontrar una de las 2048
entradas. Si esa entrada es vlida, se comparan el campo ETIQUETA de la direccin de
memoria y el campo Etiqueta de la entrada de cach; si coinciden, la entrada de cach contiene la palabra que se solicit, situacin que se denomina acierto de cach. Si se acierta, la
palabra que se desea leer se puede tomar de la cach, y ya no es necesario ir a la memoria.
Slo se extrae de la entrada de cach la palabra que se necesita; el resto de la entrada no se
SEC. 4.5
269
Las cachs con mapeo directo son las ms comunes, y son muy eficaces porque puede
hacerse que colisiones como la que acabamos de describir ocurran muy raras veces, o nunca.
Por ejemplo, un compilador muy inteligente puede tener en cuenta las colisiones de cach al
colocar las instrucciones y los datos en la memoria. Cabe sealar que el caso especfico que
acabamos de describir no ocurrira en un sistema con cachs de instrucciones y de datos
separados, porque las solicitudes en colisin seran atendidas por diferentes cachs. ste es un
segundo beneficio de tener dos cachs en lugar de una: ms flexibilidad para manejar
patrones de memoria en conflicto.
Cachs asociativas por conjuntos
Como ya mencionamos, muchas lneas de memoria distintas compiten por las mismas ranuras
de cach. Si un programa que usa la cach de la figura 4-38(a) usa mucho las palabras que estn
en las direcciones O y 65,536, habr conflictos constantes, y cada referencia podra expulsar a la
otra de la cach. Una solucin de este problema es permitir dos o ms lneas en cada entrada de
cach. Una cach con n posibles entradas para cada direccin se denomina cach asociativa
por conjuntos den vas. En la figura 4-39 se ilustra una cach asociativa de cuatro vas.
Bit de validez
Bit de validez
Bit de validez
Bit de validez
+Etiqueta
2047
Datos
tEliqueta
Datos
Etiqueta
Datos
Etiqueta
Datos
1.
r.,
no est presente en el cach, situacin que se denomina fallo de cach. En este caso, la lnea
de cach de 32 bytes se trae de la memoria y se guarda en la entrada de cach, sustituyendo lo
que estaba ah. Sin embargo, si la entrada que estaba antes en la cach se modific despus de
cargarse, deber volver a escribirse en la memoria principal antes de desecharse.
A pesar de la complejidad de la decisin, el acceso a una palabra requerida puede ser
notablemente rpido. Tan pronto como se conoce la direccin, se conoce la ubicacin exacta de la
palabra si est presente en la cach. Esto implica que es posible leer la palabra de la cach y
proporcionarla al procesador al mismo tiempo que se est determinando si era la palabra
correcta (comparando etiquetas). As, el procesador realmente recibe una palabra de la cach
simultneamente, o incluso antes de saber si la palabra es la que se solicit.
Este esquema de correspondencia coloca lneas de memoria consecutivas en entradas de
cach consecutivas. De hecho, se pueden almacenar hasta 64K bytes de datos contiguos en la
cach. Sin embargo, dos lneas que difieran en sus direcciones por exactamente 64K (65,536
bytes) o cualquier mltiplo entero de ese nmero no podrn guardarse en la cach al mismo
tiempo (porque tienen el mismo valor de LNEA). Por ejemplo, si un programa accesa a datos
que estn en la localidad X y luego ejecuta una instruccin que necesita datos que estn en la
localidad X+ 65,536 (o cualquier otra localidad dentro de la misma lnea), la segunda instruccin har que la entrada de cach se vuelva a cargar, sobreescribiendo lo que estaba ah. Si
esto sucede con suficiente frecuencia, el funcionamiento de la cach puede ser deficiente. De
hecho, el comportamiento de una cach en el peor de los casos, es peor que si no hubiera
cach, ya que cada operacin de memoria implica leer toda una lnea de cach en lugar de una
sola palabra.
;:::=~
'~
'"'~
;~
'"'"
'"
'~ "
'
'~
6
5
4
3
2
1
o
Entrada A
Entrada B
Entrada C
Entrada D
270
:L
EL NIVEL DE MICROARQUITECTURA
CAP. 4
Used). Este algoritmo mantiene un ordenamiento de cada conjunto de localidades a las que
podra accesarse desde una localidad de memoria dada. Siempre que se accede a alguna de
las lneas presentes, el algoritmo actualiza la lista, marcando esa entrada como la accesada
ms recientemente. Cuando se hace necesario reemplazar una entrada, se desecha la que est
al final de la lista: aquella a la que se acces menos recientemente.
Llevado al extremo, es posible tener una cach de 2048 vas que contiene un solo conjunto de 2048 entradas de lneas. Aqu todas las direcciones de memoria corresponden al
mismo conjunto nico, as que la bsqueda implica comparar la direccin con las 2048 etiquetas de la cach. Cabe sealar que en este caso cada entrada necesitara lgica de comparacin de etiquetas. Puesto que el campo LNEAtiene longitud O, el campo ETIQUETAes toda la
direccin excepto los campos PALABRA y BYTE. Adems, cuando se reemplaza una lnea
de cach, las 2048 posiciones son posibles candidatas para el reemplazo. Mantener una lista
ordenada de 2048 entradas requiere mucha contabilidad y hace imprctico el reemplazo LRU.
(Recuerde que esta lista tiene que actualizarse en cada operacin de memoria, no slo cuando
no hay un acierto.) Resulta sorprendente que las cachs con alta asociatividad no mejoran el
desempeo mucho ms que las de baja asociatividad en la mayor parte de las circunstancias,
y en algunos casos tienen un desempeo peor. Por estas razones, casi nunca se usa una
asociatividad mayor que de cuatro vas.
Por ltimo, las escrituras presentan un problema especial para las cachs. Cuando un
procesador escribe una palabra, y la palabra est en la cach, obviamente se debe actualizar la
palabra o bien desecharse la entrada de cach. Casi todos los diseos actualizan la cach. Pero,
y la actualizacin de la copia que est en la memoria principal? Esta operacin puede
diferirse hasta que la lnea de cach est lista para ser reemplazada por el algoritmo LRU.
Esta decisin es difcil, y ninguna de las opciones ofrece una ventaja clara. Actualizar inmediatamente la entrada en la memoria principal se conoce como escritura a travs. Este enfoque suele ser ms fcil de implementar y ms confiable, puesto que la memoria siempre est
al da; esto es til, por ejemplo, si ocurre un error y se hace necesario recuperar el estado de la
memoria. Lo malo es que casi siempre requiere ms trfico de escritura hacia la memoria, por
lo que las implementaciones ms complejas tienden a utilizar la alternativa, llamada escritura
diferida o reescritura. Hay un problema relacionado que debemos resolver cuan- do
escribimos: qu sucede si hay que escribir en una localidad que no est actualmente en
cach? Se debern traer los datos a la cach o simplemente escribirse en la memoria? Una
vez ms, ninguna de las respuestas es siempre la mejor. Casi todos los diseos que difieren
las escrituras en la memoria tienden a traer los datos viejos a la cach cuando no estn ya
en ella, tcnica llamada asignacin de escritura. En cambio, casi ningn diseo que practique la escritura a travs asignar una entrada en una operacin de escritura porque tal opcin
complicara un diseo por lo dems sencillo. La asignacin de escritura es mejor slo si se
repiten las escrituras a la misma palabra o a palabras que estn en la misma lnea de cach.
EL NIVEL DE MICROARQUITECTURA
CAP. 4
SEC. 4.5
271
procesamiento de diez etapas o ms. Las filas de procesamiento funcionan mejor con cdigo
line.al, pues as ~a unidad ~e obtencin puede leer palabras consecutivas de la memoria y
enviarlas a la unidad decodificadora antes de que se necesiten.
El nico problema menor con este maravilloso modelo es que no se ajusta para nada a la
realidad. Los programas no son secuencias lineales de cdigo; estn llenos de instrucciones de
ramificacin. Considere los sencillos enunciados de la figura 4-40(a). Una variable, i, se
compara con O (lo que probablemente sea la prueba ms comn en la prctica). Dependiendo
del resultado, se asigna a otra variable, k, uno de dos posibles valores.
if (i ==O)
k = 1;
else
k = 2;
(a)
Then:
Else:
Next:
CMP i,O
BNE Else
MOV k,1
BR Next
MOV k,2
; comparar i con O
; saltar a Else si no es igual
; poner 1 en k
; salto incondicional a Next
; poner 2 en k
(b)
Figura 4-40. (a) Fragmento de programa. (b) Su traduccin a un lenguaje de
ensamblador genrico.
En la figura 4-40(b) se muestra una posible traduccin a lenguaje ensamblador. Estudiaremos el lenguaje ensamblador ms adelante; los detalles no son importantes ahora, pero
dependiendo de la mquina y el compilador es probable que se produzca cdigo similar al de
la figura. La primera instruccin compara i con O. La segunda ramifica a la etiqueta Else (el
inicio de la clusula else) si i no es O. La tercera instruccin asigna 1 a k. La cuarta instruccin ramifica al cdigo para la siguiente instruccin. El compilador puso una etiqueta cmoda ah, Next, para tener a dnde ramificar. La quinta instruccin asigna 2 a k.
Lo que debemos observar aqu es que dos de las cinco instrucciones son ramificaciones.
Adems, una de ellas, BNE, es una ramificacin condicional (una rama que se sigue si y slo si
se cumple alguna condicin, en este caso, que los dos operandos del CMP previo sean
iguales). La secuencia de cdigo lineal ms larga aqu es de dos instrucciones. Por consiguiente, traer instrucciones a gran velocidad para alimentar los conductos no es fcil.
A primera vista, podra parecer que las ramificaciones incondicionales, como la instruccin BR Next de la figura 4-40(b) no presentan un problema. Despus de todo, no hay ambigedad respecto a dnde ir. Por qu la unidad de obtencin no puede seguir leyendo
instrucciones a partir de la direccin objetivo (el lugar a donde se saltar)?
El problema radica en la naturaleza de los conductos. En la figura 4-35, por ejemplo,
vemos que la decodificacin de instrucciones se efecta en la segunda etapa. As, la unidad
de obtencin tiene que decidir de dnde traer bytes a continuacin antes de saber qu tipo de
instruccin acaba de traer. Un ciclo despus, la unidad de bsqueda podr enterarse de que
dicha instruccin fue una ramificacin incondicional, pero para entonces ya empez a buscar
la instruccin que segua a la ramificacin incondicional. Es por esto que una proporcin
considerable de las mquinas que usan filas de procesamiento (como el UltraSPARC U) tienen la propiedad de que se ejecuta la instruccin que sigue a una ramificacin incondicional,
SEC. 4.5
273
aunque lgicamente no debera hacerse. La posicin que sigue a una ramificacin se llama
ranura de retraso. En Pentium 11 [y la mquina de la figura 4-40(b)] no tienen esta propiedad, pero la complejidad interna que se requiere para superar este problema suele ser enorme. Un
compilador optimante tratar de encontrar alguna instruccin til que pueda colocar en la
ranura de retraso, pero es comn que no haya nada disponible, y el compilador se ver obligado a insertar una instruccin NOP ah. Ello asegura que el programa sea correcto, pero lo
hace ms grande y lento.
Aunque las ramificaciones incondicionales son molestas, las condicionales son peores.
No slo tienen ranuras de retraso, sino que ahora la unidad de bsqueda no sabe de dnde
tendr que leer sino hasta mucho ms adelante en la fila de procesamiento. Las primeras
mquinas con fila de procesamiento simplemente paraban hasta que se saba si se iba a tomar la
rama o no. Parar durante tres o cuatro ciclos en cada ramificacin condicional,
sobre todo si el
20% de las instrucciones
son ramificaciones condicionales, arruina el desempeo.
Por ello, lo que la mayor parte de las mquinas hace cuando llega a una rama condicional
es predecir si se va a tomar o no. Sera bueno que pudiramos conectar una bola de cristal a
una ranura PCI libre para que nos ayudara con la prediccin, pero hasta ahora este enfoque no
ha sido fructfero.
Ante la falta de tal perifrico, se han ideado varias formas de efectuar la prediccin. Una
muy sencilla es la siguiente: suponer que se tomarn todas las ramas condicionales hacia
atrs y que no se tomar ninguna rama condicional hacia adelante. El razonamiento que
justifica la primera parte es que es comn encontrar ramas hacia atrs al final de un ciclo.
Casi todos los ciclos se ejecutan varias veces, as que adivinar que se tomar una rama hacia
atrs, hacia el principio del ciclo, es una buena apuesta.
La segunda parte no est tan bien fundamentada. Ocurren algunas ramas hacia adelante
cuando se detectan condiciones de error en software (por ejemplo, no se puede abrir un archivo). Los errores son raros, as que casi todas las ramas asociadas a ellos no se tomarn. Desde
luego, hay muchas ramas hacia adelante que no estn relacionadas con el manejo de errores,
as que la tasa de aciertos no es tan buena como con las ramas hacia atrs. Aunque no es una
maravilla, esta regla al menos es mejor que nada.
Si se predice correctamente una rama, no hay nada especial que hacer. La ejecucin
simplemente contina en la direccin objetivo. El problema surge cuando se predice errneamente una rama. Averiguar a dnde hay que ir e ir ah no es difcil. La parte difcil es anular
instrucciones que ya se ejecutaron y no debieron haberse ejecutado.
Hay dos formas de atacar el problema. La primera es permitir que las instrucciones que se
adquieren despus de una ramificacin condicional predicha se ejecuten en tanto no traten de
modificar el estado de la mquina (por ejemplo, guardar algo en un registro). En lugar de
sobreescribir el registro, el valor calculado se almacena en un registro de borrador (secreto) y slo se
copia en el registro real una vez que se sabe que la prediccin fue correcta. La segunda tcnica es
guardar el valor de cualquier registro que est a punto de sobreescribirse (digamos en un regis- tro
de borrador secreto) para que la mquina pueda revertirse al estado en que estaba cuando se lleg
a la rama predicha errneamente. Ambas soluciones son complejas y requieren una contabi- lizacin
muy estricta para funcionar bien. Y si se llega a una segunda ramificacin condicional antes de
que se sepa si la primera se predijo correctamente, las cosas pueden ponerse difciles.
no ramificar
Bit de validez
Ranur
,~,
ramificacin/etiqueta
Direccin
de
Bit de validez
Ranura ramificacin/etiqueta~
Bits de
B~~sd~:in
f
Bit de validez
prediccin
Ranura ramificacin/etiqueta
Direccin
Direccin de
objetivo
'~~
'~'
6
5
4
3
6 H------+-H
t-+------1-H
21-+------l-H
1 t-+------1-H
O H-------+H
(a)
(b)
6
5
4
3
'""
'"
2
1
(e)
EL NIVEL DE MICROARQUITECTURA
274
CAP.4
en una cach. Se puede aplicar la misma solucin: una entrada asociativa de 2, 4 o n vas. Al
igual que en una cach, el caso limitante es una sola entrada asociativa den vas, que requiere
una bsqueda con plena asociatividad.
Si la tabla es lo bastante grande y tiene suficiente asociatividad, este esquema funciona
bien en la mayor parte de las situaciones. Sin embargo, siempre se presenta un problema
sistemtico. Cuando por fin se sale de un ciclo, la prediccin de la ramificacin final siempre
ser errnea. Lo que es peor, el error en la prediccin har que se modifique el bit de la tabla
histrica para indicar una prediccin futura de "no tomar la rama". La siguiente vez que se
ingrese en el ciclo, la prediccin de ramificacin al final de la primera iteracin ser errnea.
Si el ciclo est dentro de un ciclo exterior, o en un procedimiento que se invoca a menudo,
este error podra ocurrir con mucha frecuencia.
Para eliminar esta falsa prediccin, podramos dar una segunda oportunidad a la entrada
de la tabla. Con este mtodo, la prediccin slo se cambia despus de dos predicciones incorrectas consecutivas. Esto requiere dos bits de prediccin en la tabla histrica, uno para lo que
"se supone" que debe hacer la ramificacin y otro para lo que hizo la ltima vez, como se
muestra en la figura 4-41 (b).
Una forma un poco distinta de ver este algoritmo es como una mquina de estados finitos
con cuatro estados, la cual se ilustra en la figura 4-42. Despus de una serie de predicciones
de "no tomar la rama" acertadas, la FSM estar en el estado 00 y su prediccin para la prxima vez ser "no tomar la rama". Si esa prediccin es errnea, pasar al estado 1 O, pero su
prediccin para la prxima vez seguir siendo "no tomar la rama". Slo si esta prediccin es
errnea la FSM pasar al estado 11 y comenzar a predecir "tomar la rama" todo el tiempo.
Efectivamente, el bit de la izquierda del estado es la prediccin, y el de la derecha es lo que se
hizo la vez anterior. Aunque este diseo usa slo 2 bits de historial, existen diseos que
siguen la pista a 4 u 8 bits de historial.
Tomar rama
No tomar rama
Tomar rama
SEC. 4.5
275
Hasta aqu hemos supuesto que se conoce el objetivo de cada ramificacin condicional,
casi siempre como una direccin explcita a la cual saltar (contenida en la instruccin misma)
0 como distancia relativa desde la instruccin actual (por ejemplo, un nmero con signo que
se suma al contador de programa). Con frecuencia este supuesto es vlido, pero algunas
instrucciones de ramificacin condicional calculan la direccin objetivo realizando operaciones aritmticas con registros, y luego saltan a la direccin calculada. Incluso si la FSM de la
figura 4-42 predice con exactitud la rama que se tomar, de nada sirve tal prediccin si no se
conoce la direccin objetivo. Una forma de manejar esta situacin es guardar en la tabla
histrica la direccin a la que se salt la ltima vez, como se muestra en la figura 4-41 (e). De
este modo, si la tabla dice que la ltima vez que tomamos la rama que sale de la direccin 516
nos llev a la direccin 4000, y lo que se predice es "tomar la rama", podremos suponer que
de nuevo se saltar a 4000.
Una estrategia de prediccin de ramificaciones distinta consiste en llevar un registro de
si se tomaron o no las ltimas k ramas condicionales que se encontraron, sin importar de cul
instruccin se trat (Pan et al., 1992). Este nmero de k bits, que se guarda en el registro
de desplazamiento histrico de ramificacin, se compara en paralelo con todas las entradas de una tabla histrica con una clave de k bits y, si coincide, se usa la prediccin que est
ah. Aunque parezca sorprendente, esta tcnica funciona muy bien.
Prediccin de ramificacin esttica
Todas las tcnicas de prediccin de ramificaciones que hemos visto hasta ahora son dinmicas, es decir, se ejecutan sobre la marcha durante la ejecucin del programa. Adems, se
adaptan al comportamiento actual del programa, lo cual es bueno, La desventaja es que requieren hardware especializado y costoso y chips muy complejos.
Una estrategia diferente es hacer que el compilador nos ayude. Cuando el compilador ve
un enunciado como
for (i =O; i < 1000000; i++) { ... }
No tomar rama
Figura 4-42. Mquina de estados finitos de dos bits para predecir ramificaciones.
sta no es nuestra primera FSM. La figura 4-28 tambin era una FSM. De hecho, todos
nuestros microprogramas pueden considerarse como mquinas de estados finitos, puesto que
cada lnea representa un estado especfico en el que puede estar la mquina, con transiciones
bien definidas a un conjunto finito de estados distintos. Las FSM se usan mucho en todos los
aspectos del diseo de hardware.
sabe muy bien que casi todas las veces se tomar la rama al final del ciclo. Si hubiera alguna
forma de decrselo al hardware, se ahorrara mucho trabajo.
Aunque ste es un cambio arquitectnico (y no slo una cuestin de implementacin),
algunas mquinas, como la UltraSPARC II, tienen un segundo conjunto de instrucciones de
ramificacin condicional adems de las normales (que se necesitan por compatibilidad hacia
atrs). Las instrucciones nuevas contienen un bit en el que el compilador puede especificar
que cree que la rama se tomar (o no se tomar). Cuando se llega a una de estas instrucciones,
la unidad de bsqueda hace lo que se le dice. Adems, no hay necesidad de desperdiciar
espacio valioso de la tabla histrica de ramificacin para estas instrucciones, lo que reduce el
nmero de conflictos en la tabla.
Nuestra ltima tcnica de prediccin de ramificaciones se basa en crear perfiles (Fisher
y Freudenberger, 1992). Esta tcnica tambin es esttica, pero en lugar de pedir al compilador
que trate de adivinar cules ramas se tomarn y cules no, el programa se ejecuta realmente
(por lo regular en un simulador) y se captura el comportamiento de ramificacin. Esta infor4
SEC. 4.5
277
CAP.
EL NIVEL DE MICROARQUITECTURA
276
especiales
de ramificacin
retir (termin).
Recuerde que en este ejemplo estamos exigiendo tanto emisin en orden como
terminacin en orden, de modo que la instruccin k + 1 no puede emitirse hasta que se ha emitido la
instruccin k, y la instruccin k + 1 no puede retirarse (despus de efectuarse la escritura de resultados
en el registro de destino) hasta que se ha retirado la instruccin k. A continuacin
explicaremos las
otras 16 columnas.
condi-
Cic.
Decodif.
Emit.
1
2
3
4
R3=RDR1
R4=RD+R2
R5=RO+R1
R6=R1+R4
1
2
3
Ret.
3
1
2
3
4
5
6
1
2
3
3
1
1
2
2
3
2
1
2 3 4
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
6 7
1
2
1
1
1
1
R1=RD-R2
5
7
R3=R3R1
6
7
11
12
R1=R4+R4
1
1
1
1
1
1
2
2
14
15
4
5
10
13
R7=R1R2
4
Registros escrit s o
Registros ledos
1
1
8
Figura 4-43. Funcionamiento
en orden.
Despus de decodificar una instruccin, la unidad decodificadora tiene que decidir si se puede
emitir de inmediato o no. Para tomar esta decisin, la unidad necesita conocer la situa- cin de todos los
registros. Si, por ejemplo, la instruccin en curso necesita un registro cuyo valor todava no se ha
calculado, la instruccin no podr emitirse y la CPU deber parar.
Seguimos la pista al uso de registros con un dispositivo llamado marcador, que se us
por primera vez en la CDC 6600. El marcador tiene un pequeo contador para cada registro
278
EL NIVEL DE MICROARQUITECTURA
CAP. 4
que indica cuntas veces ese registro es utilizado como fuente por las instrucciones que se
estn ejecutando. Si puede haber un mximo de, digamos, lS instrucciones en ejecucin en un
momento dado, basta con un contador de 4 bits. Cuando se emite una instruccin, se
incrementan las entradas del marcador correspondientes a sus registros operandos. Cuando se
retira una instruccin, las entradas se decrementan.
El marcador tambin tiene un contador para cada registro que sigue la pista a los registros que se estn usando como destinos. Puesto que slo se permite una escritura a la vez,
estos contadores pueden tener una capacidad de l bit. Las 16 columnas de la derecha de Ja
figura 4-43 muestran el marcador.
En las mquinas reales, el marcador tambin sigue la pista al uso de las unidades funcionales,
a fin de evitar emitir una instruccin para la cual no est disponible una unidad funcional. Para
simplificar, supondremos que siempre est disponible una unidad funcional apropiada, por lo que
no mostraremos las unidades funcionales en el marcador.
La primera lnea de la figura 4-43 muestra Il (instruccin l) que multiplica RO por R1 y
coloca el resultado en R3. Puesto que ninguno de estos registros se est usando todava,la instruccin se emite y el marcador se actualiza de modo que refleje que RO y R1 se estn leyendo y R3
se est escribiendo. Ninguna instruccin subsecuente podr escribir en ninguno de stos ni podr
leer R3 hasta que I 1 se haya retirado. Puesto que esta instruccin es una multiplicacin, terminar
al final del ciclo 4. Los valores del marcador que se muestran en cada lnea reflejan su estado
despus de emitirse la instruccin de esa lnea. Las entradas en blanco son ceros.
Puesto que nuestro ejemplo es una mquina superescalar que puede emitir dos instrucciones por ciclo, se emite una segunda instruccin (I2) durante el ciclo 1. sta suma RO y R2, y
guarda el resultado en R4. Para ver si es posible emitir esta instruccin, se aplican las reglas
siguientes:
3.
1.
2.
vimos las dependencias RAW, que ocurren cuando una instruccin necesita usar como
fuente un resultado que una instruccin anterior todava no produce. Las otras dos dependencias son menos graves. Se trata bsicamente de conflictos de recursos. En una dependencia
WAR (escritura despus de lectura, Write After Read), una instruccin est tratando de
sobreescribir un registro que una instruccin anterior tal vez no haya terminado de leer todava. Una dependencia WAW(escritura despus de escritura, Write After Write) es similar. En
muchos casos podemos evitar estas dependencias haciendo que la segunda instruccin coloque sus resultados en algn otro lugar (tal vez temporalmente). Si no existe ninguna de las
tres dependencias anteriores, y la unidad funcional que se necesita est disponible, la instruccin se emite. En este caso, 12 usa un registro (RO) que est siendo ledo por una instruccin
pendiente, pero este traslape est permitido, por lo que 12 se emite. De forma similar, 13 se
emite durante el ciclo 2.
Ahora llegamos a 14, que necesita usar R4. Por desgracia, vemos en la lnea 3 que se est
escribiendo en R4. Tenemos aqu una dependencia RAW, por lo que la unidad decodificadora
SEC. 4.5
279
parar hasta que R4 est disponible. Mientras est parada, la unidad deja de sacar instrucciones de la unidad de bsqueda. Cuando los buffers internos de la unidad de bsqueda se llenen, sta dejar de prebuscar instrucciones.
Vale la pena sealar que la siguiente instruccin en el orden del programa, IS, no tiene
conflictos con ninguna de las instrucciones pendientes; podra haberse decodificado y emiti- do
si no fuera por el hecho de que este diseo requiere emitir las instrucciones en orden.
Veamos ahora qu sucede durante el ciclo 3. 12, al ser una suma (dos ciclos), termina al
final del ciclo 3. Lamentablemente, no podemos retirarla (lo cual dejara libre R4 para 14).
Por qu no? La razn es que este diseo tambin requiere retirar en orden. Por qu? Qu de
malo podra tener realizar el almacenamiento en R4 ahora y marcar el registro como
disponible?
La respuesta es sutil, pero importante. Supongamos que las instruccines pudieran terminar en desorden. Si entonces ocurriera una interrupcin, sera muy difcil guardar el estado de
la mquina para poder restaurarlo despus. En particular, no sera posible decir que todas las
instrucciones hasta cierta direccin ya se ejecutaron y todas las instrucciones posteriores no.
Esto se llama interrupcin precisa y es una caracterstica deseable de una CPU (Moudgill y
Vassiliadis, 1996). El retiro en desorden hace que las interrupciones no sean precisas, y es por
esto que algunas mquinas exigen que las instrucciones terminen en orden.
Retomando nuestro ejemplo, al final del ciclo 4 se pueden retirar las tres instrucciones
pendientes, as que en el ciclo S ya es posible emitir por fin 14 junto con la recin decodificada
IS. Cada vez que se retira una instruccin, la unidad decodificadora tiene que verificar si hay
una instruccin en espera que ya sea posible emitir.
En el ciclo 6 16 se para porque necesita escribir en R1 y R1 est ocupado. 16 por
fin se inicia en el ciclo 9. Toda la secuencia de ocho instrucciones tarda l S ciclos en completarse debido a muchas dependencias, aunque el hardware es capaz de emitir dos instruccio- nes
en cada ciclo. Sin embargo, al examinar la columna Emit. de la figura 4-43 podemos ver que
todas las instrucciones se emitieron en orden. De igual manera, la columna Ret. muestra que las
instrucciones tambin se retiraron en orden.
Consideremos ahora un diseo alternativo: la ejecucin en desorden. En este diseo, las
instrucciones pueden emitirse en desorden y tambin retirarse en desorden. En la figura 4-44 se
muestra la misma secuencia de ocho instrucciones, slo que ahora permitiendo emisin y
retiro en desorden.
La primera diferencia ocurre en el ciclo 3. Aunque 14 est parada, podemos decodificar
y emitir IS porque no est en conflicto con ninguna instruccin pendiente. Sin embargo,
saltarse instrucciones causa un nuevo problema. Suponga que IS hubiera utilizado un operando calculado por Ja instruccin que se pas por alto, I4. Con el marcador actual, no nos
habramos dado cuenta de ello. Por consiguiente, tenemos que extender el marcador para
seguir la pista a las escrituras realizadas por instrucciones pasadas por alto. Esto puede hacerse
aadiendo un segundo mapa de bits, con un bit por registro, para contabilizar las escrituras
efectuadas por instrucciones paradas. (Estos contadores no se muestran en la figura.) Ahora es
necesario extender la regla para emitir instrucciones, a fin de prohibir la emisin de cual- quier
instruccin cuyo operando est programado para escritura por una instruccin que era anterior
pero se pas por alto.
CAP.4
EL NIVEL DE MICROARQUITECTURA
280
Registros ledos
R3=ROR1
1
2
R4=RD+R2
1
2
2
3
Decodif.
Cic.
1
R5=RD+R1
3
4 R6=R1+R4
5
6
R7=R1*R2
S1=R0-R2
7
8
R3=R3-S1
S2=R4+R4
5
6
Registros escritos
4 5
1
3 3
4 3
3 3
2
3
2
3 4
3 4
3 4
2 3
1 2
2
2
2
2
2
1
1
3
3
3
1
1
2
2
2
1
1
1
Ret.
5
6
Emit.
4
5
1
1
1
1
6 7
2 3 4 5 6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
En la seccin anterior presentamos el concepto de reordenar las instrucciones para mejorar el desempeo.
Aunque no lo mencionamos explcitamente,
lo que buscbamos ah era reordenar las instrucciones
dentro de un solo bloque bsico. Es momento de examinar este punto con ms detenimiento.
Los programas de computadora se pueden dividir en bloques bsicos, cada uno de los
cuales consiste en una secuencia lineal de cdigo con un punto de entrada arriba y uno de salida
abajo. Un bloque bsico no contiene estructuras de control (como enunciados if o enunciados
while), as que su traduccin a lenguaje de mquina no contiene ramificaciones. Los bloques bsicos se
conectan mediante enunciados de control.
Un programa que adopta esta forma se puede representar como grafo dirigido, como se ilustra en la
figura 4-45. Ah calculamos la suma de los cubos de los enteros pares e impares hasta cierto lmite y los
acumulamos en sumapar y sumaimpar, respectivamente.
Dentro de cada bloque bsico, las tcnicas de
reordena.miento de la seccin anterior funcionan de maravilla.
El problema es que casi todos los bloques bsicos son cortos y no contienen suficiente
paralelismo como para aprovecharlos de forma eficaz. Por consiguiente,
nuestro siguiente paso es permitir que el reordenamiento cruce las fronteras de los bloques bsicos en un intento
por llenar todas las ranuras de emisin. Las mayores ganancias se obtienen cuando una operacin que
7
Figura 4-44. Funcionamiento de una CPU superescalar con emisin en desorden y
terminacin en desorden.
Examinemos otra vez 16, 17e18 en la figura 4-43. Vemos que 16 calcula un valor en R1 que es
utilizado
por 17. Sin embargo, tambin vemos que el valor nunca se vuelve a usar porque 18
sobreescribe R1. No existe una razn de peso para usar R1 como lugar donde retener el resultado
de 16. Peor an, la decisin de usar R1 como registro intermedio es psima, aunque perfectamente
razonable para un compilador o programador acostumbrado a la idea de ejecucin secuencial sin
traslape de instrucciones.
En Ja figura 4-44 introducimos una nueva tcnica para resolver este problema: el cambio
de nombre de registros. La unidad decodificadora inteligente cambia el uso de R1 en 16 (ciclo 3) e
17 (ciclo 4) a un registro secreto, S1, que el programador no ve. Ahora 16 puede emitirse junto con 15.
Las CPU modernas suelen tener docenas de registros secretos que usan para cambiar el nombre de los
registros. En muchos casos esta tcnica puede eliminar las dependencias WAR y WAW.
En 18 podemos volver a usar el cambio de nombre de registros. Esta vez R1 cambia de
nombre a S2 para que la suma pueda iniciarse antes de que R1 se desocupe, al final del ciclo
6. Si en este caso el resultado realmente tiene que estar en R1, siempre cabe la posibilidad de
281
copiar S2 otra vez ah justo a tiempo. Mejor an, todas las instrucciones
SEC. 4.5
podra ser lenta se puede adelantar en el grafo e iniciarse antes. sta podra ser una instruccin LOAD,
una operacin de punto flotante o incluso el inicio de una cadena de dependencias larga. La accin de
adelantar cdigo que inicia despus de una ramificacin se denomina levantamiento de cdigo.
Imagine que en la figura 4-45 todas las variables se guardan en registros excepto sumapar
y sumaimpar (por falta de registros). Podra ser razonable adelantar sus instrucciones LOAD al
principio del ciclo, antes de calcular k, a fin de iniciarlas antes y que los valores cargados estn
disponibles cuando se necesiten. Desde luego, slo uno de ellos se necesitar en cada iteracin, y el
otro LOAD se desperdiciara, pero si la cach y la memoria usan filas de
'
SEC. 4.6
EL NIVEL DE MICROARQUITECTURA
282
sumapar =O;
sumapar =O;
sumaimpar = O;
i =O;
sumaimpar = O;
i =O;
i>=limit
while (i < limit)
k = i. i. i;
if ((i/2) 2) ==O)
sumapar
= sumapar
+ k;
else
sumaimpar
= sumaimpar
+ k;
i = i + 1;
(a)
(b)
Figura 4-45. (a) Fragmento de programa. (b) El grafo de bloque bsico correspondiente.
'
, .
1 .
r. ~ . "
CAP.4
procesamiento y hay ranuras de emisin disponibles, podra valer la pena hacerlo. La ejecucin de cdigo antes de saber si va a necesitarse se llama ejecucin especulativa. El uso de
esta tcnica requiere apoyo del compilador y del hardware, adems de ciertas extensiones
arquitectnicas. En casi todos los casos, reordenar las instrucciones ms all de las fronteras
de un bloque bsico rebasa la capacidad del hardware, por lo que el compilador debe cambiar de
lugar las instrucciones explcitamente.
La ejecucin especulativa introduce algunos problemas interesantes. Uno de ellos es que
es indispensable que ninguna de las instrucciones especulativas tenga efectos irrevocables,
porque despus podra resultar que no debieron de haberse ejecutado. En la figura 4-45 no
hay problema si buscamos sumapar y sumaimpar, y tampoco si efectuamos la suma tan
pronto como tenemos k (an antes del enunciado if), pero no sera correcto guardar los resultados en la memoria. En secuencias de cdigo ms complicadas, una forma comn de evitar
que el cdigo especulativo sobreescriba registros antes de que se sepa si es lo que debe hacerse es cambiar el nombre de todos los registros de destino empleados por el cdigo especulativo. De este modo, slo se modificarn registros de borrador, y no habr problema si despus
resulta que el cdigo no se necesitaba. Si el cdigo es necesario, los registros de borrador se
copian en los verdaderos registros de destino. Como podr imaginar, el manejo de contador
para llevar la contabilidad de todo esto no es sencillo, pero si se cuenta con suficiente hardware,
es factible.
Sin embargo, el cdigo especulativo introduce otro problema que no puede resolverse
cambiando el nombre de los registros. Qu sucede si una instruccin ejecutada especulativamente causa una excepcin? Un ejemplo doloroso, aunque no fatal, es una instruccin
LOAD que causa un fallo de cach en una mquina con tamao de lnea de cach grande
(digamos, 256 bytes) y una memoria mucho ms lenta que la CPU y la cach. Si un LOAD
283
que realmente se necesita para en seco la mquina durante muchos ciclos mientras la lnea de
cach se est cargando, pues ni modo: as es la vida; la palabra era necesaria. Por otra parte,
parar la mquina para traer una palabra que resulta innecesaria es contraproducente. Un nmero excesivo de tales "optirnaciones" puede hacer que la CPU sea ms lenta que si no las
tuviera. (Si la mquina tiene memoria virtual, que veremos en el captulo 6, un LOAD especulativo podra incluso causar un fallo de pgina, que requiere una operacin de disco para traer la
pgina requerida. Los fallos de pgina falsos pueden arruinar el desempeo, as que es importante evitarlos.)
Una solucin que implementan varias mquinas modernas es tener una instruccin especial de carga especulativa que trata de traer la palabra de la cach, pero si no est ah simplemente se da por vencida. Si el valor en realidad se necesita y est ah, podr usarse, pero si no
est el hardware deber ir por l en ese momento. Si resulta que el valor no era necesario,
no se habr pagado ningn precio por el fallo de cach.
El siguiente enunciado ilustra una situacin mucho peor:
if (x > O) z = y/x;
donde x, y y z son variables de punto flotante. Suponga que todas las variables se buscan y se
colocan en registros por adelantado y que la divisin de punto flotante (lenta) se levanta de
modo que se inicie antes de la prueba if. El problema es que x es O y el error de divisin entre
cero hace que el programa termine. El resultado neto es que la especulacin ha hecho que un
programa correcto falle. Peor an, el programador incluy cdigo explcito para evitar esta
situacin, y de todos modos ocurri. No es probable que el programador est muy contento.
Una posible solucin es tener versiones especiales de las instrucciones que podran causar excepciones. Adems, se aade a cada registro un bit, llamado bit venenoso. Cuando una
instruccin especulativa especial falla, en lugar de causar un error asigna 1 al bit venenoso
del registro de resultado. Si posteriormente una instruccin normal toca ese registro, ocurrir
el error (como debera). En cambio, si el resultado nunca se usa, el bit venenoso tarde o temprano se pone en O y no habr pasado nada.
"
284
EL NIVEL DE MICROARQUITECTURA
CAP4
SEC. 4.6
memoria principal a travs del bus local y de cargar todas las cachs. El Pentium 11 usa el
protocolo de coherencia de cachs MES], que describiremos cuando lleguemos a los
multiprocesadores en la seccin 8.3.2.
La unidad de Bsqueda/Decodificacin
La unidad de Bsqueda/Decodificacin usa filas de procesamiento intensivamente, con siete
etapas rotuladas IFUO a ROB en la figura 4-47 (Las unidades de Despacho/Ejecucin y de
Retiro tienen otras cinco, lo que hace que las filas de procesamiento tengan 12 etapas en
total.) Las instrucciones ingresan en la fila de procesamiento en la etapa IFUO, donde se
cargan lneas de 32 bytes enteras de la cach l. Siempre que el buffer interno est vaco, se
introduce otra lnea de cach. El registro NEXT IP gua el proceso de bsqueda.
Obtenedor de lineas
de cach
Siguiente 1 P
IFU1
Decodificador de longitud
de instruccin
Predictor de
ramificacin dinmico
IFU2
Alineador de instrucciones
IFUO
Al cach
de nivel 2
~- 1
Bus
local
al
puente
'."j
.'.'..l
.......,,
.) 5
,._,1
.-.,, .
,.
e:
IDO
: :~ ; ~-
101
RAT
Unidad de Bsqueda/
Decodificacin
Unidad de Despacho/
Ejecucin
Unidad de Retiro
285
Secuenciador
de microoperaciones
Encolador
de microoperaciones
Predictor de
ramificacin esttico
Asignador de registros
ROB
Las microoperaciones ingresan en el ROB
Puesto que el conjunto de instrucciones Intel, conocido como IA-32 tiene instrucciones
de longitud variable con muchos formatos, la siguiente etapa de la fila de procesamiento, IFU1,
analiza el flujo de bytes para localizar el principiode cada instruccin. Si es necesario, IFU1
puede examinar hasta 30 instrucciones IA-32 por adelantado. Lo malo es que adelantarse
tanto implica encontrar cuatro o cinco ramificaciones condicionales en promedio, no todas las
cuales pueden predecirse correctamente, por lo que el valor de poder ver tan lejos en el
futuro es dudoso. La etapa IFU2 alinea las instrucciones para que la siguiente etapa pueda
decodificarlas con facilidad.
286
EL NIVEL DE MICROARQUITECTURA
CAP.4
SEC. 4.6
es mucho ms importante que se ejecute una ramificacin que una instruccin aritmtica, ya que
la primera afecta el flujo del programa.
Estacin
de reservas
cuencia.
La etapa IDO tiene tres decodificadores internos. Dos de ellos son para instrucciones sencillas;
el tercero maneja las dems. Lo que sale de la etapa IDO es una secuencia de microoperaciones.
Cada una contiene un cdigo de operacin, dos registros fuente y un registro de destino.
Las microoperaciones colocadas en la cola de espera en la etapa ID 1, anloga a la unidad de
cola de espera de la figura 4-35. Esta etapa tambin detecta ramificaciones. Primero viene una
prediccin esttica, por si acaso. La prediccin depende de varios factores, pero en el caso de
ramificaciones relativas a la instruccin en curso se predice que las ramas hacia atrs se tomarn y
las ramas hacia adelante no. Despus viene el predictor de ramificacin dinmico que emplea un algoritmo basado en el historial, como el de la figura 4-42, slo que en
lugar de usar slo 2 bits de historial usa 4. Debe ser evidente que con una fila de procesamien- to
de 12 etapas el castigo por predecir mal es enorme, de ah el uso de tantos bits de historial.
Si la ramificacin no est en la tabla histrica, se usa la prediccin esttica.
Para evitar dependencias WAR y WAW, el Pentium 11 usa cambio de nombres de regis- tro,
como vimos en la figura 4-44. Los registros reales nombrados en las instrucciones IA-32 se pueden
sustituir en las microoperaciones por cualesquiera de 40 registros de borrador internos ubicados en
el ROB. Este cambio de nombres se efecta en la etapa RAT.
Por ltimo, las microoperaciones se depositan en el ROB a razn de tres por ciclo de
reloj. Los operandos tambin se renen ah, si estn disponibles. Si los operandos y el regis- tro de
resultado de una microoperacin estn disponibles, y la unidad de ejecucin est libre, la
microoperacin es elegible para emitirse; si no, permanece en el ROB hasta que se han
adquirido todos sus recursos.
La unidad de Despacho/Ejecucin
Ahora llegamos a la unidad de Despacho/Ejecucin, que se ilustra en la figura 4-48. Esta
unidad planifica y ejecuta las microoperaciones, resolviendo dependencias y conflictos de
recursos. Aunque slo se pueden decodificar tres instrucciones ISA por ciclo de reloj (en IDO),
se pueden emitir hasta cinco microoperaciones para ejecutarse en un ciclo, una por cada puerto.
Este ritmo no puede sostenerse porque excede la capacidad de la unidad de Retiro. Las
microoperaciones se pueden emitir en desorden, pero la unidad de Retiro las retira en orden. Se
emplea un marcador complejo para llevar la contabilidad de las microoperaciones pendientes,
registros y unidades de ejecucin. Cuando una microoperacin es elegible para ejecutarse, se le
puede iniciar, aunque otras que se colocaron antes en el ROB no estn listas. Cuando hay varias
287
~-----'"--..
Unidad de ejecucin
de enteros
i---......i
Del/Al
ROB
Unidad de eje~-----'"-~
cucin MMX
Unidad de ejecucin 1-------'
de punto flotante
Puerto
i---......i
Puerto 2
'---...-.i
Unidad de ejecucin de
enteros
Unidad de
carga
Cargas
Unidad de
Puerto 3
i---...-.i
almacenamiento
Puerto 4
i---......i
Unidad de
almacenamiento
1~.'.:~
Almacenamientos..;
~.q
~.l~
~ f~<
:::
~.1
microoperaciones elegibles para ejecutarse en la misma unidad de ejecu- cin, un algoritmo complejo
escoge la que ms conviene emitir a continuacin. Por ejemplo,
""'
La unidad de Despacho/Ejecucin contiene una estacin de reservas y unidades de ejecucin conectadas a cinco puertos. La estacin de reservas es una cola con 20 entradas para
las microoperaciones que ya tienen todos sus operandos. stas esperan su turno en la
estacin de reservas hasta que la unidad de ejecucin que necesitan se desocupa.
Hay cinco puertos que van de la estacin de reserva a las unidades de ejecucin.
Algunas unidades de ejecucin comparten un mismo puerto, como se muestra. Las unidades
de carga y almacenamiento establecen la informacin apropiada para las operaciones de
carga y alma- cenamiento, respectivamente. Hay dos puertos para los almacenamientos.
288
EL NIVEL DE MICROARQUITECTURA
CAP.4
lugar apropiado: al registro correcto, pero tambin a otras estaciones de la unidad de Despacho/Ejecucin que estn esperando ese valor. La unidad de Bsqueda/Decodificacin man- tiene los
registros "oficiales", es decir, los valores producidos por las instrucciones que ya terminaron. La
unidad de Retiro mantiene un conjunto de registros pendientes, es decir, los valores que se
calcularon en una instruccin que no ha terminado porque instrucciones pre- vias todava no terminan.
El Pentium 11 apoya plenamente la ejecucin especulativa, por lo que algunas instrucciones se habrn ejecutado en vano y no se retirarn. Aqu es donde reside la capacidad de
reversin. Si se determina que alguna microoperacin provino de una instruccin IA-32 que no
debi haberse ejecutado, sus resultados se desechan. Corresponde a la unidad de Retiro seguir la
pista a todo esto. Slo las instrucciones ejecutadas "oficialmente" pueden retirarse, y deben retirarse
en el orden del programa, aunque se hayan ejecutado fuera de orden.
Puesto que slo puede emitirse una microoperacin por puerto por ciclo, si dos microoperaciones
pendientes necesitan pasar por el mismo puerto una de ellas tendr que esperar.
La unidad de Retiro
Una vez que se ha ejecutado una microoperacin, regresa a la estacin de reservas y luego
al ROB para esperar que se le retire. La unidad de Retiro se encarga de enviar los resultados al
SEC. 4.6
289
A la memoria principal
Lgica de agrupamiento
Unidad de ejecucin
PREFETCH (prebsqueda) que no causa un fallo cuando no encuentra lo que busca en la cach.
De hecho, ni siquiera se bloquean los accesos subsecuentes a la memoria. Por tanto, un
compilador puede plantar uno o ms PRE FETCH en el flujo de cdigo mucho antes del
punto en el que se necesitan con la esperanza de tener los datos ah cuando se necesiten, pero
sin ser castigado en caso de ocurrir un fallo de cach.
de enteros
Registros enteros
Registros de PF
ALU
ALU
ALU de PF
La unidad de cach externa maneja los fallos de cach de nivel 1 buscando la lnea requerida
en la cach externa (de nivel 2). Si la bsqueda tiene xito, la lnea se copia en la cach de nivel 1
apropiado. Si no, la unidad de cach externa pide a la unidad de interfaz con la memoria que busque
la lnea de la memoria principal.
ALU de PF Unidad de
grficos
290
EL NIVEL DE MICROARQUITECTURA
CAP.4
Veamos ahora las unidades funcionales del UltraSPARC 11. La unidad de Prebsqueda/
Despacho es similar a la unidad de Bsqueda/Decodificacin
del Pentium 11 (vea la figura
4-46). Sin embargo, su tarea es ms fcil porque las instrucciones que llegan ya son
microoperaciones de tres registros, as que no necesitan desglosarse. La unidad puede buscar
instrucciones de la cach de nivel 1 o de la cach de nivel 2 sin prdida de tiempo. Se traen
cuatro instrucciones por ciclo de reloj.
Para reducir el efecto de las ramificaciones, cada grupo de cuatro instrucciones de la
cach I tiene una direccin que indica cul media lnea debe tomarse a continuacin. Adems, hay un predictor de ramificaciones completo dentro de la unidad de Prebsqueda/Despacho que usa un algoritmo de prediccin de 2 bits similar al de la figura 4-42. Adems, el
UltraSPARC II tiene un conjunto de instrucciones de ramificacin que permiten al compilador
decirle al hardware qu prediccin debe hacer, ya que en muchos casos tiene una muy buena
idea de qu rama se tomar. Las instrucciones prebuscadas se almacenan en una cola de 12
entradas que alimenta a la lgica de agrupamiento.
La lgica de agrupamiento es una unidad que selecciona de la cola cuatro instrucciones a la
vez para emitirlas. La cuestin es encontrar cuatro que se puedan emitir simultneamente. La
unidad de ejecucin de enteros tiene dos ALU discretas, lo que le permite ejecutar dos instrucciones en paralelo. De igual manera, la unidad de punto flotante tambin tiene dos ALU
de PF. Por tanto, un grupo podra contener dos de cada tipo, pero no cuatro de un mismo tipo.
.r.
Para que el agrupamiento sea ptimo, las instrucciones se deben emitir en desorden, lo cual
est permitido. El retiro tambin es entonces en desorden.
Las unidades de enteros y de punto flotante contienen sus respectivos registros, as que las
instrucciones recogen sus operandos dentro de la unidad y dejan sus resultados ah tambin. Los registros de enteros y de punto flotante son distintos, por lo que nunca hay transfe-
.'.~
rencia de valores de una unidad a la otra. La unidad de punto flotante contiene adems una
unidad de grficos que ejecuta instrucciones especiales para procesar imgenes 2D y 3D,
audio y video, anlogas a las instrucciones MMX del Pentium U.
La unidad de Carga/ Almacenamiento maneja las instrucciones LOAD y STORE. Si hay un
acierto en la cach D de nivel l, la ejecucin es inmediata; si no, se pide a la unidad de cach
externa que obtenga la lnea de la cach de nivel 2 o de la memoria principal (en un fallo de
LOAD) o escriba la palabra ah (en un fallo de STORE). Si la cach D hubiera sido de asignacin de escritura, en un fallo de STORE la lnea de cach requerida se habra trado de la cach de
nivel 2 o de la memoria principal. En cambio, la palabra que se va a almacenar simplemente se
escribe a travs de la cach de nivel 2 o, si no acierta ah, en la memoria principal. Para evitar un
bloqueo causado por un fallo de la cach D, la unidad de Carga/Almacenamiento mantiene colas
(individuales) de instrucciones LOAD y STORE pendientes para poder seguir procesan- do
nuevas instrucciones mientras espera que las anteriores terminen.
SEC. 4.6
291
ideales (sin fallos de cach, sin errores de prediccin, sin instrucciones difciles, la combinacin perfecta de instrucciones, etc.), esta etapa puede seguir trayendo y emitiendo cuatro
instrucciones por ciclo indefinidamente. La etapa de decodificacin aade algunos bits extra a
cada instruccin antes de depositarla en la cola de instrucciones de 12 entradas que mencionamos antes. Estos bits agilizan el procesamiento subsecuente (por ejemplo, indicando la
unidad de ejecucin apropiada).
Filas de procesamiento
Fila de procesamiento
de enteros
de punto flotante/grficos
se incluyen para mantener las dos filas de procesamiento sincronizadas. Que las instrucciones con enteros terminen unos cuantos nanosegundos ms tarde es un precio pequeo que se paga por
mantener un flujo continuo en las filas de procesamiento.
La unidad de punto flotante tiene cuatro etapas propias que inician aqu. La primera es
para acceder a los registros de punto flotante; las tres siguiente son para ejecutar la instruc- cin. Todas las
instrucciones de punto flotante se ejecutan en tres ciclos, con excepcin de la divisin (12 ciclos) y la raz
cuadrada (22 ciclos), por lo que una serie larga de las dems instrucciones de punto flotante no frena la fila
de procesamiento.
La etapa N3, que es comn a ambas unidades, sirve para resolver condiciones de excepcin
292
EL NIVEL DE MICROARQUITECTURA
CAP.4
y el bus de E/S
:,.,1,
32
32
Cach de
instrucciones
de 0-16 KB
Unidad de
prebsqueda,
decodificacin
y plegado
Unidad
de enteros
y punto flotante
SEC. 4.6
293
32
Unidad de
control
de ejecucin
El picoJava II puede ejecutar programas JVM binarios sin (mucha) interpretacin en software. Casi todas las instrucciones JVM son ejecutadas directamente por el hardware en un
solo ciclo de reloj. Cerca de 30 instrucciones JVM estn microprogramadas. Unas pocas
El picoJava 11 tiene una fila de procesamiento de seis etapas que se ilustra en la figura 4-52.
'"':~. :t
1t .
Cach de
datos
de 0-16 KB
32
que podran haber ocurrido, como la divisin entre cero. La ltima etapa es en la que se escriben los
resultados en los registros. Esta etapa es comparable a la unidad de Retiro del Pentium II en
cuanto a que una vez que una instruccin ha pasado por esta etapa, est confirmada,
2 x 32
las pliega (combina) de ciertas maneras que describiremos en breve. Lo que sale de la unidad
decodificadora es una secuencia de microoperaciones, cada una de las cuales contiene un
cdigo de operacin y tres nmeros de registro (dos registros fuente y un registro de destino). En
este sentido, el picoJava 11 es similar al Pentium 11: ambas mquinas aceptan una serie de
instrucciones CISC que se desglosan internamente para dar una secuencia de microoperaciones que
se alimentan a un ncleo RISC con filas de procesamiento. Sin embargo, a diferencia del
Pentium 11, el picoJava 11 no es superescalar y las microoperaciones se emiten y ejecutan en el
orden en que se emitieron. Si hay un fallo de cach, si hay que buscar un operando de la
memoria principal, la CPU se para y lo espera.
Figura 4-51. Diagrama de bloques del picoJava II con ambas cachs de nivel y
la unidad de punto flotante. Esta es la configuracin del microJava 70 I.
Traer
Decodificar
del
cach 1
r--
y plegar
,...._
Traer
operandos i--de la pila
Ejecutar
instruccin i---
Escribir
Acceder
a cach
de datos
resultados
en la pila
La tercera etapa de la fila de procesamiento busca operandos de la pila (en realidad del
archivo de registros) para que estn listos para la cuarta etapa, la unidad de ejecucin, donde
294
SEC. 4.6
EL NIVEL DE MICROARQUITECTURA
CAP. 4
se llevan a cabo las instrucciones. La quinta etapa accede a la cach de datos si es necesario;
por ejemplo, para guardar resultados ah. Por ltimo, la sexta etapa escribe resultados de
vuelta en la pila.
Plegado de instrucciones
Como dijimos antes, la unidad decodificadora puede plegar varias instrucciones para juntarlas. Como ejemplo de este proceso, consideremos la evaluacin del enunciado
n
= k + m;
Sin plegado
SP-
SP
8 f------1,
7 ti~i~~!JCtsff?1?
6 f------1
SP-
;;bf:;~ ,~~~~;
5 f------1
4f===""'
3 ~A~t\!t''til~1%;1
2 ,,,,,,,,,~,_.,.,,
1 J~;~?\m.)+/,;~
--~
Inicio
m
k
r--;k~...,
~/~i:~}'f'ri~~(:f~f:
Con plegado
~i1;~~~n<l!~1;i~i~l
'""'"'"'""'"'~
'"""'"\lij'i!iii
~~~~~;
_'f~1;N:fJlf~~~
c'~!rf~~;m.~~1~-;~1
~9,-~~rf.J)~~~~\
(a)
Despus
de IADD
Despus
de ISTORE n
Inicio
Despus de
la instruccin
plegada
(b)
Figura 4-53. (a) Ejecucin de una secuencia de cuatro instrucciones para calcular n
= k + m. (b) La misma secuencia plegada en una instruccin.
295
Sin embargo, el picoJava 11 hace mucho ms. Lo que la secuencia de cuatro instrucciones en realidad hace es sumar dos registros y guardar el resultado en un tercer registro. La
unidad decodificadora detecta esta condicin y emite una sola microoperacin: una instruccin ADD de tres registros. As, en lugar de tener cuatro instrucciones JVM que hacen un
total de nueve referencias a la memoria, tenemos una sola microoperacin de tres registros
para efectuar una suma, como se muestra en la figura 4-53(b). El resultado neto es que,
aunque instrucciones CISC con muchas referencias a la memoria ingresaron en la fila de
procesamiento, slo se ejecut realmente una microoperacin sencilla. Por tanto, el picoJava 11
puede ejecutar programas Java compilados para JVM con la misma rapidez que si se compilaran para el lenguaje mquina de una mquina RISC de extremo superior.
Como acabamos de ver, la capacidad para plegar varias instrucciones JVM en una
microoperacin es la clave para la ejecucin de alto desempeo con filas de procesamiento.
Por ello, vale la pena examinar brevemente cmo la unidad decodificadora realiza el plegado.
Para fines de plegado, las instrucciones se dividen en seis grupos, que se enumeran en la
figura 4-54. El primer grupo contiene instrucciones que no se pliegan. El segundo contiene
cargas de variables locales. IJVM tiene una variable de este tipo, !LOAD, pero JVM tiene otras
adems. El tercer grupo contiene almacenamientos, como por ejemplo ISTORE. El cuarto y
quinto grupos son para ramificaciones, con uno y dos operandos, respectivamente. El ltimo
grupo consiste en instrucciones que sacan dos operandos de Ja pila, realizan algn clculo
con ellos, y meten el resultado otra vez en la pila.
Grupo
k+m
i<~:::;~-fk~~;i~i
Despus
Despus
de ILOAD k de ILOAD m
Descripcin
no plegables
Ejemplo
NF
Instrucciones
LV
/LOAD
MEM
BG1
ISTORE
IFEQ
BG2
IF_CMPEQ
OP
IADD
GOTO
Suponiendo que las tres variables estn lo bastante alto en la pila como
para que todas estn contenidas en el archivo de registros, no es necesario
hacer ninguna referencia a la memoria para ejecutar esta secuencia de
instrucciones. La primera instruccin, ILOAD 7 copia en el tope de la pila la
palabra que est en la sptima variable local e incrementa el apuntador de la pila. Igualmente,
ILOAD 1 es tambin una copia de registro a registro. IADD suma dos registros e ISTORE
copia un registro en la porcin de variables locales del archivo de registros. Ya de por s,
ahorrarse todas las referencias a la memoria es una importante optimacin del desempeo.
EL NIVEL DE MICROARQUITECTURA
296
CAP.4
trabajo de toda la secuencia en un ciclo. Por ejemplo, una secuencia de cuatro instrucciones se
convierte en una sola microoperacin ADD de tres registros, como vimos en la figura 4-53. El
plegado slo funciona cuando las variables locales a las que se hace referencia estn lo bastante
cerca del tope de la pila como para estar contenidas en el archivo de registros.
Secuenciade instrucciones
Ejemplo
LV
LV
OP
LV
LV
OP
LV
LV
BG2
IF_CMPEQ
ILOAD, ILOAD, es
LV
ILOAD, IFEQ
LV
BG1
BG2
LV
MEM
ILOAD, ISTORE
OP
MEM
IADD, ISTORE
MEM
ILOAD, IF_CMPEQ
El plegado ocurre con suficiente frecuencia como para que una fraccin sustancial de un
programa NM se pueda ejecutar como si se hubiera compilado directamente para un pro- cesador
RISC con filas de procesamiento, lo que le confiere la transportabilidad de JVM combinada con el
alto desempeo de una mquina RISC. Mediciones realizadas muestran que el picoJava II ejecuta
programas en Java hasta cinco veces ms rpidamente que los mismos programas compilados a
lenguaje mquina en un Pentium con la misma frecuencia de reloj, y hasta 15 veces ms
rpidamente que si se ejecutaran interpretados en un Pentium.
El picoJava 11 tiene un algoritmo de prediccin de ramas muy primitivo: siempre predice que no
se tomar la rama. La justificacin para esto fue mantener el chip sencillo y econmi- co en lugar de
dedicar una porcin sustancial del rea del chip a circuitos de prediccin. Adems, debido a la
longitud del conducto (seis etapas, en lugar de 12 en el Pentium 11), el castigo por predecir
errneamente es de slo tres ciclos.
297
un cdigo de operacin, dos registros fuente y un registro de destino. Todas ellas pueden ejecutar
una microoperacin en un ciclo; todas ellas tienen filas de procesamiento profun- das y prediccin
de ramificaciones, y todas ellas tienen cachs I y D divididos, con 16 KB por cach.
Esta similitud interna no es accidental y ni siquiera se debe al incesante saltar de una empresa
a otra de los ingenieros del Valle del Silicio. Como vimos con nuestros ejemplos Mic-3 y Mic-4, es
fcil y natural construir una trayectoria de datos con filas de procesamiento
que tome dos registros fuente, los pase por una ALU y guarde el resultado en un registro. La
figura 4-34 muestra esta fila de procesamiento grficamente. Con la tecnologa actual, ste
el diseoLams
eficaz. primordial entre el Pentium 11, el UltraSPARC II y el picoJava 11 es la
diferencia
forma como llegan de su conjunto de instrucciones de ISA a la unidad de ejecucin. El Pentium
11
tiene que descomponer sus instrucciones CISC para ponerlas en el formato de tres registros
que la unidad de ejecucin necesita. De eso se trata la figura 4-47: partir instrucciones grandes en microoperaciones simples y precisas. El picoJava 11 tiene el problema opuesto: cmo
combinar varias instrucciones para obtener microoperaciones simples y claras. Eso es lo que
Nuestros tres ejemplos son muy diferentes pero es asombroso lo mucho que tienen en comn en el
fondo, y esto dice algo acerca de la forma ptima de disear una computadora. El Pentium II tiene un
conjunto de instrucciones CISC prehistrico que a los ingenieros de Intel les encantarla tirar a la baha
de San Francisco, slo que ello violara las leyes contra la contaminacin del agua de California. El
UltraSPARC 11 es un diseo RISC puro, con instrucciones magras y potentes. El picoJava 11 es una
mquina de pila, con instrucciones de longitud variable que hacen una enormidad de referencias a
memoria (que en principio son costosas).
A pesar de estas grandes diferencias, las tres mquinas tienen unidades de ejecucin muy
similares. Todas las unidades de ejecucin aceptan microoperaciones que contienen
hace el plegado. El UltraSPARC 11 no tiene que hacer nada porque sus instrucciones nativas ya son
microoperaciones. Es por esto que casi todas las ISA nuevas son del tipo RISC, a menos que tengan
algn motivo ulterior (como bajar programas en Java de Internet y ejecu- tarlos en una mquina
arbitraria).
Aprenderemos algo si comparamos nuestro diseo final, el Mic-4, con estos tres ejem- plos del
mundo real. El Mic-4 se parece ms al Pentium II. Ambos tienen que interpretar un conjunto de
instrucciones ISA no RISC. Ambos lo hacen descomponiendo las instrucciones ISA en
microoperaciones que tienen un cdigo de operacin, dos registros fuente y un regis- tro de destino.
En ambos casos, las microoperaciones se depositan en una cola para ejecutar- se posteriormente. El
Mic-4 tiene un diseo estricto de emisin en orden, ejecucin en orden y retiro en orden, mientras
que el Pentium 11 tiene una poltica de emisin en orden, ejecucin en desorden y retiro en orden. La
estructura interna de la fila de procesamiento del Pentium II, sobre todo la parte que se muestra en la
figura 4-47, tambin tiene algo en comn con el diseo del Mic-4.
298
EL NIVEL DE MICROARQUITECTURA
Comparemos ahora el Mic-4 con el picoJava 11. Aunque parece lgico que las dos arqui- tecturas
sean muy similares --despus de todo, interpretan el mismo conjunto de instruccio- nes ISA- no
son en realidad tan parecidas. La razn es que las unidades decodificadoras tienen estrategias
diametralmente opuestas. El Mic-4 toma cada instruccin IJVM que llega e inmediatamente la
descompone en microoperaciones, mientras que el picoJava 11 trata de combinar (plegar) varias
instrucciones JVM en una sola microoperacin. La sencilla asignacin i = j + k tarda 14 ciclos en el Mic-4 y un ciclo en el picoJava 11. En este caso, el plegado
gana por un factor de 14. Obviamente, el segundo mtodo da pie a una ejecucin mucho ms rpida,
pero la complejidad del proceso de plegado es sustancial.
El Mic-4 y el UltraSPARC 11 no se pueden comparar realmente porque el segundo tiene
instrucciones RISC (es decir, microoperaciones de tres registros) como conjunto de instruc- ciones
ISA. No hay necesidad de descomponerlas ni de combinarlas; se pueden ejecutar tal cual, cada una
en un solo ciclo de la trayectoria de datos.
CAP.4
Las cuatro mquinas hacen uso intensivo de filas de procesamiento. El Pentium 11 tiene
12 etapas, el UltraSPARC 11 tiene nueve, el picoJava II tiene seis y el Mic-4 tiene siete. El
Pentium 11 tiene unas pocas ms que los otros porque sus instrucciones no son fciles de
descomponer. El UltraSPARC 11 tiene ms de las que realmente necesita porque la fila de procesamiento de enteros se alarg artificialmente en dos etapas para hacer que las operaciones
con enteros tardaran el mismo tiempo que las de punto flotante. La conclusin aqu es que con
la tecnologa moderna y un conjunto de instrucciones razonable, lo ms recomendable es una
fila de procesamiento de seis o siete etapas que procese microoperaciones de tres registros. El
Mic-4 nos da una buena idea de cmo podra funcionar una fila de procesamiento semejante
(al menos con un conjunto de instrucciones no RISC).
4.7 RESUMEN
1::
... .
'
,,
. ,.
'
El corazn de una computadora es la trayectoria de datos. ste contiene algunos registros, dos o
tres buses y una o ms unidades funcionales como ALU y desplazadores. El ciclo de ejecucin
principal consiste en buscar algunos operandos de los registros y enviarlos por los
buses a la ALU y otras unidades funcionales para efectuar la ejecucin. Luego, los resultados
se vuelven a guardar en registros.
La trayectoria de datos puede controlarse con un secuenciador que busca microinstrucciones de un almacn de control. Cada microinstruccin contiene bits que controlan la
trayectoria de datos durante un ciclo. Dichos bits especifican qu operandos hay que seleccionar, cul operacin debe efectuarse y qu debe hacerse con los resultados. Adems, cada
microinstruccin especifica su sucesora, por lo regular de forma explcita al contener su direccin. Algunas microinstrucciones modifican esta direccin base calculando el OR de ciertos bits y la direccin antes de usarla.
La mquina IJVM es una mquina de pila con cdigos de operacin de un byte que
almacena palabras en la pila, sacan palabras de la pila y combinan (por ejemplo, suman)
palabras en la pila. Se dio una implementacin microprogramada para la microarquitectura
Mic-1. Mediante la adicin de una unidad para buscar las instrucciones y precargar los bytes
en el flujo de instrucciones, fue posible eliminar muchas referencias al contador de programa
y hacer la mquina mucho ms rpida.
SEC. 4.7
RESUMEN
299
res. El Pentium Il toma un conjunto de instrucciones tipo CISC y descompone las instrucciones en microoperaciones que se procesan en un ncleo superescalar con prediccin de ramificaciones, ejecucin en desorden y especulacin. El UltraSPARC 11 es una CPU moderna de
64 bits con instrucciones tipo RISC que tambin tiene prediccin de ramificaciones, ejecucin en desorden y especulacin. El picoJava 11 es una mquina ms sencilla diseada para
aparatos de bajo costo, por lo que carece de algunas funciones de extremo superior como
prediccin dinmica de ramificaciones. No obstante, gracias a que pliega las instrucciones,
puede ejecutar instrucciones JVM casi como si fueran instrucciones RISC orientadas a registros. Las tres mquinas tienen una unidad de ejecucin similar que maneja microoperaciones
de tres registros que fluyen por una fila de procesamiento profunda.
PROBLEMAS
1. En la figura 4-2 se muestra una forma de producir A como salida de la ALU. Sugiera otra forma.
2.
En
el
Mi
c-1
se
req
uie
re 1
ns
par
a
pre
par
ar
M1
R,
1
ns
par
a
col
oc
ar
el
co
nte
nid
o
de
un
reg
istr
o
en
el
bus B, 3 ns para operar la ALU y el desplazador, y 1 ns para que los resultados se propaguen
de vuelta a los registros. El ancho del pulso de reloj es de 2 ns. Esta mquina puede operar a
100 MHz? Y a 150 MHz?
3. En la figura 4-6 el registro del bus B se codifica en un campo de 4 bits, pero el bus C se
representa como mapa de bits. Por qu?
4. En la figura 4-6 hay un cuadro rotulado "Bit alto". Dibuje el diagrama de circuito correspondiente.
S. Cuando el campo JMPC de una microinstruccin est habilitado, se calcula el OR de MBR y
NEXT_ADDRESS para formar la direccin de la siguiente microinstruccin. Hay alguna situacin en la que sea lgico que NEXT_ADDRESS sea Ox lFF y se use JMPC?
6. Suponga que en el ejemplo de la figura 4-14(a) se aade el enunciado
i =O;
despus del enunciado if. Qu hara el nuevo cdigo de ensamblador? Suponga que el compilador
es optimante.
7. D dos traducciones a IJVM diferentes del siguiente enunciado en Java:
= j + k + 4;
300
EL NIVEL DE MICROARQUJTECTURA
CAP.4
= MDR - TOS;
rd
r::
=i + k;
),
CAP. 4
PROBLEMAS
301
19. Dibuje una mquina de estados finitos para llevar la puntuacin en un partido de tenis. Las reglas
son las siguientes. Para ganar se necesitan al menos cuatro puntos y es preciso tener al menos dos
puntos ms que el contrincante. Parta de un estado (O, O), que indica que nadie tiene puntos
todava. Luego aada un estado (I. O), que indica que A anot un punto. Rotule la flecha de (0, O)
a (1, O) con A. Ahora aada un estado (O, 1) que indique que B anot, y rotule la flecha de (O, O) con
B. Siga agregando estados y flechas hasta incluir todos los posibles estados.
20. Reconsidere el problema anterior. Hay estados que puedan colapsarse sin alterar el resultado del
juego? Si los hay, cules son equivalentes?
21. Dibuje una mquina de estados finitos para prediccin de ramificaciones que sea ms tenaz que la
figura 4-42. La prediccin slo deber cambiar despus de tres predicciones equivocadas consecutivas.
22. El registro de desplazamiento de la figura 4-27 tiene una capacidad mxima de 6 bytes. Podra
construirse una versin ms econmica de la IFU con un registro desplazador de 5 bytes? Y con
uno de 4 bytes?
12.
13.
14
.
i:
Re
pit
a
la
pre
gu
nta
ant
eri
'
.,.,
~;;:i~
or, slo que ahora para un Mic-2 de 200 MHz. Con base en este clculo,
cunto tardara en ejecutarse en el Mic-2 un programa que tarda 100 sen el Mic-1?
En la mquina JVM completa hay cdigos de operacin especiales de un byte para cargar las
variables locales O a 3 en la pila en lugar de usar la instruccin ILOAD general. Cmo debera
modificarse IJVM para aprovechar al mximo estas instrucciones?
La instruccin ISHR (desplazamiento aritmtico entero hacia la derecha) existe en JVM pero no
en IJVM. ISHR usa los dos valores del tope de la pila y los sustituye por un solo valor, el resultado.
La segunda palabra desde el tope de la pila es el operando a desplazar. Su contenido se desplaza
hacia la derecha entre O y 31 bits, inclusive, dependiendo del valor de los cinco bits menos significativos de la palabra que est en el tope de la pila (los otros 27 bits de esa palabra no se toman en
cuenta). El bit del signo se repite a la izquierda tantos bits como el contenido se desplaz. El
cdigo de operacin de ISHR es 122 (Ox7A).
a. Qu operacin aritmtica equivale a desplazar a la derecha con una cuenta de 2?
b. Extienda el microcdigo para incluir esta instruccin como parte de IJVM.
15. La instruccin ISHL (desplazamiento entero hacia la izquierda) existe en JVM pero no en IJVM.
ISHL usa los dos valores del tope de la pila y los sustituye por un solo valor, el resultado. La
segunda palabra desde el tope de la pila es el operando a desplazar. Su contenido se desplaza hacia
la izquierda entre O y 31 bits, inclusive, dependiendo del valor de los cinco bits menos significativos de la palabra que est en el tope de la pila (los otros 27 bits de esa palabra no se toman en
cuenta). Se introducen por la derecha tantos ceros como bits se desplaz el contenido. El cdigo de
operacin de ISHL es 120 (Ox78).
a. Qu operacin aritmtica equivale a desplazar a la izquierda con una cuenta de 2?
b. Extienda el microcdigo para incluir esta instruccin como parte de IJVM.
16. La instruccin INVOKEVIRTUAL de JVM necesita saber cuntos parmetros tiene. Por qu?
17.
Escriba microcdigo para implementar la instruccin POPTWO de JVM en el Mic-1. Esta instruccin obtiene dos palabras del tope de la pila.
18. Implemente la instruccin DLOAD de JVM en el Mic-2. La instruccin tiene un ndice de un byte y
almacena en la pila la variable local que est en esa localidad. Luego almacena tambin en la pila la
siguiente palabra ms alta.
23. Despus de examinar las IFU ms econmicas en la pregunta anterior, examinemos IFU ms
costosas. Tendra sentido incluir un registro de desplazamiento mucho ms grande en la IFU,
digamos de 12 bytes? Por qu s o por qu no?
24. En el microprograma para el Mic-2, el cdigo de if_icmpeq6 salta a T cuando Z se pone en l. Sin
embargo, el cdigo en Tes igual al de goto1. Habra sido posible ir a goto1 directamente? La
mquina sera ms rpida si as se hiciera?
25. En el Mic-4, Ja unidad decodificadora establece una correspondencia entre el cdigo de operacin
IJVM y el ndice en ROM en el que estn almacenadas las microoperaciones correspondientes.
Podra parecer ms sencillo omitir la etapa de decodificacin y alimentar el cdigo de operacin
IJVM directamente a la unidad de cola de espera. sta podra usar el cdigo de operacin IJVM
como ndice para el ROM, igual que se hace en el Mic-1. Qu defecto tiene este plan?
26. Una computadora tiene una cach de dos niveles. Suponga que el 80% de las referencias a la
memoria aciertan en la cach de nivel l , el 15% aciertan en la cach de segundo nivel y el 5%
fallan. Los tiempos de acceso son de 5 ns, 15 ns y 60 ns, respectivamente, y los tiempos para la
cach de nivel 2 y la memoria principal comienzan a contar en el momento en que se sabe que se
necesitan (por ejemplo, no se inicia un acceso a la cach de nivel 2 sino hasta despus de que
ocurre un fallo de cach de nivel 1). Calcule el tiempo de acceso promedio.
27. Al final de la seccin 4.5.1 dijimos que la asignacin de escritura es mejor slo si es probable que
vayan a efectuarse varias escrituras consecutivas en la misma lnea de cach. Qu sucedera en el
caso de una escritura seguida de varias lecturas? No habra tambin una ganancia apreciable?
28.
En el primer borrador de este libro, la figura 4-39 mostraba una cach asociativa de tres vas en
lugar de una de cuatro vas. Uno de los revisores se molest mucho, asegurando que ello creara
una confusin terrible entre los estudiantes porque tres no es una potencia de dos y las
computadoras hacen todo en binario. Puesto que el cliente siempre tiene la razn, se cambi la
figura a una cach asociativa de cuatro vas. Tena razn el revisor? Comente su respuesta.
29. Una computadora con una fila de procesamiento de cinco etapas maneja las ramificaciones condicionales parando durante los siguientes tres ciclos despus de encontrarse con una. Qu tanto
perjudica esto al desempeo si el 20% de todas las instrucciones son ramificaciones condicionales? No tome en cuenta otras cosas que podran parar la mquina, slo las ramificaciones condicionales.
302
EL NIVEL DE MICROARQUITECTURA
CAP. 4
30.
Suponga que una computadora prebusca hasta 20 instrucciones por adelantado. Sin embargo, cuatro de ellas en promedio son ramificaciones condicionales, cada una con una probabilidad del 90%
de ser predicha correctamente. Calcule la probabilidad de que la prebsqueda siga el camino correcto.
31.
Suponga que se modifica el diseo de la mquina de la figura 4-43 de modo que tenga 16 registros
en lugar de ocho. Luego modificamos 16 de modo que use R8 como destino. Qu sucede en los
ciclos a partir del sexto?
32.
Normalmente, las dependencias causan problemas en las CPU con filas de procesamiento. Existen optimaciones que puedan efectuarse con las dependencias WAW y que mejoren realmente la
situacin? Cules son?
33.
Reescriba el intrprete de Mic- l de modo que ahora LV apunte a la primera variable local en lugar
de al apuntador de enlace.
34.
Escriba un simulador de una cach con mapeo directo de una va. Haga que el nmero de entradas
y el tamao de lnea sean parmetros de la simulacin. Experimente con ella y prepare un informe
de sus hallazgos.
.,,
N,V.ERSIDAD
f'!~/.~; ;;:r11.T)
DE LA REPUnUct,A'
D'? IJ\'.GENIERIA
DCC"MEN.e:,:.lN
MON'.I'EV1Dl!:O
Y BIBLIOTJX::"''
URUGUAY
f ::
-~ - .
,.,!,,
r.,
....
En este captulo estudiaremos con detalle el nivel de arquitectura del conjunto de instrucciones (ISA, Instruction Set Architecture). Este nivel se ubica entre el nivel de
microarquitectura y el del sistema operativo, como vimos en la figura 1-2. Histricamente,
este nivel se desarroll antes que cualquiera de Jos otros niveles y, de hecho, originalmente
era el nico nivel. Aun hoy no es raro or hablar de este nivel simplemente como "Ja
arquitectura" de una mquina o a veces (incorrectamente) como "lenguaje ensamblador".
El nivel ISA tiene una importancia especial que lo hace crucial para los arquitectos de
sistemas: es la interfaz entre el software y el hardware. Si bien sera posible hacer que el
hardware ejecute directamente programas escritos en C, C++, FORTRAN 90 o algn otro
lenguaje de alto nivel, no sera una buena idea. Se perdera la ventaja en trminos de desempeo de la compilacin sobre la interpretacin. Adems, para ser tiles en la prctica, casi
todas las computadoras deben ser capaces de ejecutar programas escritos en varios
lenguajes, no slo en uno.
La estrategia que adoptan casi todos Jos diseadores de sistemas es hacer que programas
en diversos lenguajes de alto nivel se traduzcan a una forma intermedia comn -el nivel
ISA- y construir hardware que pueda ejecutar directamente programas en el nivel ISA. El
nivel ISA define la interfaz entre los compiladores y el hardware; es el lenguaje que ambos
tienen que entender. La relacin entre Jos compiladores, el nivel ISA y el hardware se muestra en la figura 5-1.
Idealmente, cuando los arquitectos disean una mquina nueva hablan tanto con los
escritores de compiladores como con los ingenieros de hardware para averiguar qu
caracte-
,(
303
304
CAP. 5
Programa en
FORTRAN 90
Programa en C
SEC. 5.1
rsticas quieren que se incluyan en el nivel ISA. Si los escritores de compiladores quieren
alguna caracterstica que los ingenieros no pueden implementar de forma econmica (por
ejemplo, una instruccin de ramificar y hacer la nmina), no se incluye. Asimismo, si la
gente de hardware tiene una maravillosa caracterstica nueva que quiere incluir (digamos
una memoria en la que las palabras cuyas direcciones son nmeros primos son superrpidas)
pero la gente de software no puede pensar en un cdigo que pueda aprovecharla, se queda-
regularidad y exhaustividad de una gama de opciones son rasgos importantes que no siempre
estn presentes en una ISA. stas son propiedades cruciales para un compilador, el cual
Eso es la teora. Ahora viene la triste realidad. Cuando llega una nueva mquina, la
primera pregunta que todos los clientes en potencia hacen es: "Es compatible con su predecesora?" La segunda es: "Puedo ejecutar mi sistema operativo antiguo en ella?" La
tercera es: "Ejecutar todos mis programas de aplicacin existentes sin modificacin?" Si
cualquiera de las respuestas es "no", los diseadores tendrn mucho que explicar. A los
clientes generalmente no les gusta tirar a la basura todo su software viejo y comenzar otra
vez desde cero.
Esta actitud somete a los arquitectos de computadoras a una presin enorme en favor
de mantener inalterada la ISA al cambiar de modelo, o al menos hacerla compatible con
modelos anteriores. Con esto queremos decir que la nueva mquina debe ejecutar programas viejos sin modificacin. Sin embargo, es perfectamente aceptable que la nueva mquina tenga nuevas instrucciones y otras caractersticas que aprovechar, adems del software
nuevo. En trminos de la figura 5-1, en tanto los diseadores hagan a la ISA compatible
con los modelos anteriores, gozan de libertad ms o menos completa para hacer lo que
quieran con el hardware, pues a casi nadie le interesa el verdadero hardware (o siquiera
saber qu hace). Los diseadores pueden cambiar de un diseo microprogramado a uno de
ejecucin directa, o aadir filas de procesamiento o recursos superescalares o cualquier
otra cosa que se les ocurra, siempre que mantengan la compatibilidad con la ISA anterior.
La meta es asegurarse de que los programas viejos funcionen en la mquina nueva. El reto
entonces es construir mejores mquinas sujetas a la restriccin de compatibilidad hacia
atrs.
podra tener problemas para escoger la mejor opcin entre alternativas limitadas, sobre todo
cuando la ISA no permite algunas alternativas aparentemente obvias. En pocas palabras,
dado que la ISA es la interfaz entre el hardware y el software, debe complacer a los diseadores
de hardware (debe ser fcil de implementar con eficiencia) y a los de software (debe ser fcil
generar buen cdigo para ella).
El programa en C
se compila a un
programa ISA
Nivel ISA
Software
Hardware
Hardware
f
\
.. ~ .
i ... t
t .. .r
305
Con lo anterior no queremos implicar que el diseo de ISA carezca de importancia. Una
buena ISA es mucho mejor que una mala, sobre todo en trminos de potencia de cmputo
bruta versus costo. Si dos diseos son equivalentes en todo lo dems, diferentes ISA podran
representar una diferencia de hasta un 25% en el desempeo. Lo que queremos destacar es
que las fuerzas del mercado hacen que sea muy difcil (aunque no imposible) desechar una
ISA antigua e introducir una nueva. No obstante, de vez en cuando surge una nueva ISA de
aplicacin general, y en mercados especializados (como sistemas incorporados o procesadores
multimedia) se dan con mucha mayor frecuencia. Por tanto, entender el diseo de la ISA es
importante.
Qu hace que una ISA sea buena? Hay dos factores primordiales. Primero, una buena
ISA debe definir un conjunto de instrucciones que se pueda implementar con eficiencia en las
tecnologas actuales y futuras y permita crear diseos econmicos durante varias generaciones. Un diseo deficiente es ms difcil de implementar; podra requerir muchas ms compuertas para implementar el procesador y ms memoria para ejecutar los programas. Tambin
podra ser ms lento porque la ISA no permite distinguir oportunidades para traslapar opera-
El programa en
FORTRAN 90 se
compila a un programa ISA
, . .,J.,,
.... ~1
306
CAP.
r
.
"
.,"""
sistema operativo y del lenguaje ensamblador simblico). Para producir cdigo en el nivel
ISA, el escritor de compiladores tiene que conocer el modelo de memoria, los registros
disponibles, los tipos de datos e instrucciones con que se cuenta, etc. El conjunto de toda
esta informacin es lo que define el nivel ISA.
Segn esta definicin, cuestiones como si la microarquitectura est microprogramada o
no, si usa filas de procesamiento o no, si es superescalar o no, etc., no forman parte del
nivel ISA porque el escritor de compiladores no las percibe. Sin embargo, esta afirmacin
no es del todo correcta porque algunas de esas propiedades afectan el desempeo, y el
escritor de compiladores s percibe eso. Consideremos, por ejemplo, un diseo superescalar
que puede emitir instrucciones una tras otra en el mismo ciclo siempre que una manipule
enteros y la otra sea de punto flotante. Si el compilador alterna instrucciones de enteros con
instrucciones de punto flotante, lograr un desempeo claramente mejor que si no lo hace.
Por tanto, los detalles del funcionamiento superescalar s son visibles en el nivel ISA, y la
separacin entre las capas no es tan ntida como podra parecer a primera vista.
En algunas arquitecturas el nivel ISA se especifica con un documento de definicin
for- mal, a menudo producido por un consorcio de la industria. En otras no hay tal
documento. Por ejemplo, tanto SPARC V9 (la versin 9 de SPARC) como la JVM tienen
definiciones oficiales (Weaver y Germond, 1994; y Lindholm y Yellin, 1997,
respectivamente). El prop- sito de un documento reglamentado es que diferentes
implementadores puedan construir la mquina y que todas ellas ejecuten exactamente el
mismo software y obtengan exactamente los mismos resultados.
En el caso de SPARC, lo que se busca es que diversos fabricantes de chips produzcan
chips SPARC que sean funcionalmente idnticos, con diferencias slo en el desempeo y el
precio. Para que esta idea funcione, los fabricantes de chips tienen que saber qu se supone
que hace un chip SPARC (en el nivel ISA). Por tanto, el documento reglamentado
especifica
el modelo de memoria, los registros presentes, lo que hacen las instrucciones, etc., pero no
la
microarquitectura
.
Talesdocumentosreglamentadoscontienen
seccionesnormativas,
que
imponen
requisitos, y seccionesinformativas, que ayudan al lector pero no forman parte de la
definicinformal. Las secciones normativasusan mucho palabras como debe, no puede y
debera, para requerir,prohi- bir y sugerir aspectosde la arquitectura, respectivamente. Por
ejemplo, un enunciado como
La ejecucin de un cdigo de operacin reservado debe causar una trampa.
dice que si un programa ejecuta un cdigo de operacin que no est definido, debe causar
una trampa (una interrupcin en software) y no hacer caso omiso de l. Una estrategia
alternativa podra ser dejar este aspecto abierto, en cuyo caso el enunciado podra ser
SEC. 5.1
307
Es evidente por qu el SPARC V9 tiene un documento que define su nivel ISA: para
que todos los chips SPARC V9 ejecuten el mismo software. Por lo mismo, existe un
documento reglamentado para JVM: a fin de que todos los intrpretes (o chips como el
picoJava 11) puedan ejecutar cualquier programa JVM vlido. No existe un documento de
definicin for- mal para el nivel ISA del Pentium II porque Intel no quiere que para otros
fabricantes sea fcil producir chips Pentium II. De hecho, Intel ha acudido a las cortes para
tratar de impedir que otros vendedores produzcan clones de sus chips.
Otra propiedad importante del nivel ISA es que en casi todas las mquinas hay al
menos dos modos. El modo de Kernel sirve para ejecutar el sistema operativo y permite Ja
ejecucin de todas las instrucciones. El modo de usuario sirve para ejecutar programas de
aplicacin y no permite que se ejecuten ciertas instrucciones peligrosas (como las que
manipulan directa- mente Ja cach). En este captulo nos concentraremos primordialmente
en las instrucciones y propiedades del modo de usuario.
24
Direccin
8 bytes
decisiones.
Casi
todas
las
especificaciones de arquitectura van
acompa
prueba que verifican si una implementacin que asegura cumplir con la especificacin realmente lo hace.
EL NIVEL DE ARQUITECTURA DEL CONJUNTO DE INSTRUCCIONES
CAP. 5
308
.r:
\ .. c.
l.
;''
.. .
Normalmente se exige la alineacin porque las palabras operan con mayor eficiencia as.
El Pentium JI, por ejemplo, que obtiene grupos de 8 bytes de la memoria, usa direcciones
fsicas de 36 bits, pero tiene slo 33 bits de direccin, como se muestra en la figura 3-44. As, el
Pentium 11 no podra hacer una referencia no alineada a la memoria aunque quisiera, por- que
los tres bits de orden bajo no se especifican explcitamente; siempre son ceros, lo que obliga a
todas las direcciones de memoria a ser mltiplos de 8 bytes.
Sin embargo, este requisito de alineacin a veces causa problemas. En el Pentium 11, los
programas ISA pueden hacer referencia a palabras que comienzan en cualquier direccin,
propiedad que se remonta al 8088, que tena un bus de datos de un byte de anchura (y por
ende ningn requisito de alineacin de las referencias a la memoria segn fronteras de 8
bytes). Si un programa del Pentium 11 lee una palabra de 4 bytes en la direccin 7, el hardware
tiene que hacer una referencia a la memoria para obtener los bytes del O al 7 y una segunda
referencia a la memoria para obtener los bytes del 8 al 15. Luego la CPU tiene que extraer los
4 bytes requeridos de los 16 bytes que se leyeron de la memoria y armarlos en el orden
correcto para formar una palabra de 4 bytes.
La capacidadpara leer palabras en direcciones arbitrariasrequiere lgica adicional en el chip,
lo que lo hace ms grande y ms costoso. A los ingenieros de diseo les encantara deshacerse de
esa capacidad y simplemente exigir a todos los programas que hagan referencias a Ja memoria
alineadas por palabra. El problema es que cada vez que los ingenieros dicen "A quin le interesa
ejecutar programas apolillados para el 8088 que no hacen referencia a la memoria como debe
ser?" la gente de comercializacin tiene una respuesta adecuada: "A nuestros clientes".
Casi todas las mquinas tienen un solo espacio de direcciones lineal en el nivel ISA, que se
extiende desde la direccin O hasta algn mximo, que suele ser 232 bytes o 264 bytes. Sin embargo,
unas cuantas mquinas tienen espacios de direcciones distintos para las instrucciones y para los
datos, de modo que una obtencin de instruccin en la direccin 8 acude a un espacio de direcciones distinto que una obtencin de datos en la direccin 8. Este esquema es ms complejo que tener
un solo espacio de direcciones, pero tiene dos ventajas. Primera, es posible tener 232 bytes de
programa y otros 232 bytes de datos usando slo direcciones de 32 bits. Segunda, como todas las
escrituras se efectan automticamente en el espacio de datos, es imposible sobreescribir accidentalmente el programa, con lo que se elimina una fuente de errores de programa.
Cabe sealar que tener espacios de direcciones distintos para instrucciones y datos no es lo
mismo que tener una cach de nivel 1 dividida. En el primer caso, la cantidad total de
espacio de direcciones se duplica y las lecturas a una direccin dada producen resultados
diferentes, dependiendo de si se est leyendo una palabra de instrucciones o de datos. Con una
cach dividida, sigue habiendo un solo espacio de direcciones, slo de diferentes cachs
guardan diferentes partes de ese espacio.
Otro aspecto del modelo de memoria en el nivel ISA es la semntica de memoria. Es
natural esperar que una instruccin LOAD que ocurre despus de una instruccin STORE y
que hace referencia a la misma direccin devuelva el valor que se acaba de guardar. Sin
embargo, como vimos en el captulo 4, en muchos diseos las microinstrucciones se reordenan, y
Palabra de 8 bytes
alineada en la direccin
8
Palabra de 8 bytes no
alineada en la direccin 12
(a)
(b)
Figura 5-2. Palabra de 8 bytes en una memoria little-endian. (a) Alineada. (b) No
alineada.Algunas mquinas requieren que las palabras estn alineadas en la memoria.
S
E
C
.
5.1
G
E
N
E
R
A
L
I
D
A
D
E
S
D
E
L
N
I
V
E
L
I
S
A
3
0
9
Los diseadores de sistemas pueden adoptar varias estrategias para resolver este problema. En un extremo, todas las solicitudes de memoria se pueden colocar en serie, de modo que
una se finalice antes de que se emita la siguiente. Esta estrategia perjudica el desempeo pero
simplifica al mximo la semntica de memoria (todas las operaciones se ejecutan en el orden
estricto del programa).
En el otro extremo, no se ofrecen en general garantas de ningn tipo. Para forzar un
ordenamiento de la memoria, el programa debe ejecutar una instruccin SYNC, que bloquea
la emisin de operaciones de memoria nuevas hasta que todas las anteriores hayan terminado. Este diseo somete a los compiladores a un gran esfuerzo porque tienen que entender los
detalles del funcionamiento de la microarquitecturasubyacente, pero ofrece a los diseadores de
hardware el mximo de libertad para optimar el uso de la memoria.
Tambin puede haber modelos de memoria intermedios, en los que el hardware bloquea
automticamente la emisin de ciertas referencias a la memoria (por ejemplo, las que implican
una dependencia RAW o WAR) pero no otras. Si bien es molesto que todas estas peculiaridades
causadas por la microarquitectura queden expuestas en el nivel ISA (al menos para los escritores de compiladores y los programadores en lenguaje ensamblador), es la tendencia actual. Dicha
tendencia se debe a las implementaciones subyacentes, como el reordenamiento de microinstrucciones, las filas de procesamiento de gran capacidad, las cachs con mltiples niveles, y
dems. Veremos ms ejemplos de tales efectos artificiales ms adelante en este captulo.
4-1, no son visibles en el nivel ISA. Sin embargo, unos cuantos de ellos, como el contador de
programa y el apuntador de la pila, son visibles en ambos niveles. Por otra parte, los registros
visibles en el nivel ISA siempre son visibles en el nivel de microarquitectura porque ah es
donde se implementan.
Los registros del nivel ISA se pueden dividir en dos categoras amplias: registros de
propsito especial y registros de propsito general. Los primeros incluyen cosas como el
contador de programa y el apuntador a la pila, adems de otros registros con funciones especficas. En contraste, los registros de propsito general sirven para guardar variables locales
clave y los resultados intermedios de los clculos. Su funcin principal es proporcionar acce- so
rpido a datos que se usan continuamente (bsicamente para evitar accesos a la memoria). Las
mquinas RISC, con sus CPU rpidas y memorias (relativamente) lentas, casi siempre tienen
por lo menos 32 registros de propsito general, y la tendencia en los nuevos diseos de CPU es
a tener an ms.
En algunas mquinas los registros de propsito general son totalmente simtricos e intercambiables. Si todos los registros son equivalentes, un compilador puede usar R1 para contener un resultado temporal, pero igual podra usar R25. El registro escogido no importa.
En cambio, en otras mquinas algunos de los registros de propsito general podran
tener algo de especial. Por ejemplo, en el Pentium II hay un registro llamado EDX que se
...
5.1.3 Registros
Todas las computadoras tienen algunos registros que son visibles en el nivel ISA. Su funcin
es controlar la ejecucin del programa, almacenar resultados temporales y otras cosas. En
general, los registros visibles en el nivel de rnicroarquitectura, como TOS y MAR en la figura
310
CAP. 5
SEC. 5.1
311
puede usar como registro general, pero que tambin recibe la mitad del producto en una
multiplicacin y que contiene la mitad del dividendo en una divisin.
ZAun
- Sesi.elos
nciende
si elde
resultado
fuegeneral
cero son totalmente intercambiables, es comn que
registros
propsito
el sistema operativo o los compiladores adopten convenciones sobre su uso. Por ejemplo,
C - Se enciendealgunos
si el resultado
un acarreo
deparmetros
salida del bit
la extrema izquierda
registroscaus
podran
contener
de de
procedimientos
invocados y otros podran
usarse
como
registros
de
borrador.
Si
un
compilador
coloca
una
variable
local
A- Se enciende si hubo un acarreo de salida del bit 3 (acarreo auxiliar)
P importante en
R1 y luego invoca a un procedimiento de biblioteca que cree que R1 es un registro de borraSe puede
encierule
si cuando
el resultado
tuvo paridad par
dor -que
usar,
el procedimiento
regrese, R1 podra contener basura. Si existen convenciones en el nivel de sistema sobre el uso de registros, es recomendable que los
compiladores
los programadores
en lenguaje
ensamblador
se ajusten
ellas.
Los
cdigos deycondicin
son importantes
porque
las instrucciones
de acomparacin
y ramifide los(es
registros
nivel ISA que
programas
de usuario
pueden
siem-la
cacinAdems
condicional
decir, en
laselinstrucciones
delos
salto
condicional)
los usan.
Por ver,
ejemplo,
pre
hay
una
cantidad
sustancial
de
registros
de
propsito
especial
que
slo
son
accesibles
instruccin CMP generalmente resta dos operandos y establece los cdigos de condicin en
con
modoendelakernel.
Estos Si
registros
controlanson
lasiguales,
diversaslacachs,
memoria,
dispositivos
de E/S el
base
diferencia.
los operandos
diferencia
ser cero
y se encender
y otras
caractersticas
de hardware
de PSW.
la mquina.
Slo el sistema
los siusa,
asiguales,
que
bit
de cdigo
.de condicin
Z de la
Una instruccin
BEQoperativo
(ramificar
son
compiladores
los usuariosprueba
no tienen
que
los
Branch
Equal) ysubsecuente
el bit
Z ysaber
tomadelaellos.
rama si est encendido.
UnPSW
registro
de control
una especie
de hbrido
kernel/usuario
registro detotal
banderas
La
contiene
msque
queesslo
los cdigos
de condicin,
peroeselelcontenido
vara
\.
r
o una
palabra
de estado
programa
Word).
registro
de
mquina
a otra. del
Otros
campos (PSW,
comunesProgram
indican Status
el modo
de laEste
mquina
(es contiene
decir, de
diversos
kernel
o de usuario), un bit de rastreo (que sirve para depurar), el nivel de prioridad de la CPU
que la CPU necesita.
Los bits ms
son es
losposible
cdigosleer
de condicin.
ybits
la habi.11:tacin
de interrupciones.
En importantes
muchos casos
la PSW enEstos
modobitsde
se
ajustan
en
cada
ciclo
de
la
ALU
y
reflejan
la
situacin
del
resultado
de
la
operacin
ms
usuario, pero algunos de los campos slo pueden modificarse en modo de kernel (por ejemreciente.
Entre
los
bits
de
condicin
ms
comunes
estn
plo, eil bit de modo de usuario/kernel).
EL NIVEL
ARQUITECTURA
DEL CONJUNTO DE INSTRUCCIONES
312N - Se enciende
si elDE
resultado
fue negativo
I
CAP. 5
mquina. Para ejecutar un programa para 8088, el sistema operativo crea un entorno aislado
;'
especial
V - Se
que
enciende
acta como
si el resultado
un 8088, caus
excepto
unque
desbordamiento
si su programa se cae se notifica al sistema
operativo en lugar de hacer que la mquina se caiga. Cuando un usuario de Windows inicia
una ventana Ms-oos, el programa que se ejecuta ah se inicia en modo 8086 virtual para
proteger a Windows de programas Ms-oos mal comportados.
El ltimo modo es el modo protegido, en el que el Pentium U realmente acta como
Pentium 11 y no como un 8088 muy costoso. Hay cuatro niveles de privilegio controlados
por bits de la PSW. El nivel O corresponde al modo de kernel en otras computadoras y tiene
pleno acceso a la mquina. El sistema operativo usa este nivel. El nivel 3 es para
programas
de el acceso a ciertas instrucciones y registros de control crticos para evitar
usuario;
bloquea
que un programa de usuario desbocado haga caer a toda la mquina. Los niveles 1 y 2 casi
nunca se usan.
El Pentium 11 tiene un espacio de direcciones enorme, con la memoria dividida en 16,384
L: .,
..
.~",
,,;
''!'''
. ..,
..
AH
BH
CH
DH
X
A
1
X
B
1
C X
1
D X
1
AL
EAX
BL
EBX
CL
ECX
DL
EDX
!----~~~~~~~~~~~~~~~~~~~,
!--~~~~~~~~~~~~~~~~~~~~~,
. ..
ESI
EDI
EBP
ESP
segmentos, cada uno de los cuales va desde la direccin O hasta la direccin 232 - 1. Sin
embargo, casi todos los sistemas operativos (incluidos UNIX y todas las versiones de Windows)
'I!'''
, J .,
5.1.4 Instrucciones
del espacio de
direcciones tiene su
propia direccin, y
las pala- bras son de
32 bits. El formato
pa
ra
gu
ar
da
r
las
pa
la
br
as
es
litt
le
en
di
an
(el
by
te
de
or
de
n
m
s
ba
jo
tie
ne
la
dir
ec
ci
n
m
s
ba
ja)
.
Los registros del Pentium 11 se muestran en la figura 5-3. Los primeros cuatro registros,
EAX, EBX, ECX y EDX son registros de 32 bits de propsito ms o menos general, aunque
cada uno tiene sus propias peculiaridades. EAX es el principal registro aritmtico; EBX es
bueno para contener apuntadores (direcciones de memoria); ECX desempea un papel en los
ciclos; EDX se necesita para la multiplicacin y la divisin donde, junto con EAX, guarda
productos y dividendos de 64 bits. Cada uno de estos registros contiene un registro de 16 bits
en los 16 bits de orden bajo y un registro de 8 bits en los 8 bits de orden bajo. Estos registros
facilitan la manipulacin de cantidades de 16 y 8 bits, respectivamente. El 8088 y el 80286
slo tenan los registros de 8 y 16 bits. Los registros de 32 bits se aadieron en el 80386, junto
con el prefijo E, que significa Extendido.
Los siguientes tres registros tambin son de propsito ms o menos general, pero con
es
SS
DS
ES
FS
GS
EIP
EFLAGS
Sun Microsystems introdujo la arquitectura SPARC en 1987. SPARC fue una de las primeras
arquitecturas comerciales calificadas como RISC, y se bas en gran medida en las investigaciones realizadas en Berkeley a fines de la dcada de los ochenta (Patterson, 1985; Patterson y
Squin, 1982). El SPARC original era una arquitectura de 32 bits, pero el UltraSPARC 11 es
una mquina de 64 bits basada en la versin 9 de la arquitectura, y es la que describiremos en
este captulo. Por congruencia con el resto del libro, nos referiremos al UltraSPARC 11 aqu,
pero en el nivel ISA todos los UltraSPARC son idnticos.
314
CAP. S
R31
17
Registro
Funcin
Nombre alt.
Conectado
GO
RO
G1
-G7
R8- R13
00-05
R14
SP
Apuntador a la pila
R15
07
Registro de borrador
R16-R23
LO-L7
R24-R29
10-15
R30
FP
invocado
Todos los registros de propsito general tienen una capacidad de 64 bits y, con excepcin de RO que
siempre es O, pueden ser ledos o escritos por diversas instrucciones de carga Y
SEC 5.1
315
almacenamiento. Los usos que se dan en la figura 5-4 se basan en parte en la convencin,
pero tambin en cmo el hardware los trata. En general, no es prudente darles un uso distinto
del que se indica en la figura 5-4 a menos que usted sea un Gur SPARC Cinta Negra y de
veras sepa perfectamente lo que est haciendo. Es responsabilidad del compilador o del programador asegurarse de que el programa accese a los registros correctamente y realice los
tipos correctos de operaciones aritmticas con ellos. Por ejemplo, es muy fcil cargar nmeros de punto flotante en los registros generales y luego realizar suma de enteros con ellos,
operacin que producir resultados sin sentido pero que la CPU realizar de buena gana si
se le pide.
Las variables globales sirven para retener constantes, variables y apuntadores que
se necesitan en todos los procedimientos, aunque pueden guardarse y volverse a cargar al
salir de un procedimiento y entrar en l si es necesario. Los registros lx y Ox se usan para
pasar parmetros a procedimientos y as evitar referencias a la memoria. Ms adelante
explicare- mos cmo funciona esto.
Tres registros dedicados se usan para cosas especiales. Los registros FP y SP delimitan
el cuadro vigente. El primero apunta a la base del cuadro vigente y sirve para direccionar
~--
variables locales, exactamente igual como haca LV en la figura 4-10. El segundo indica el
tope de pila actual y flucta a medida que se meten palabras en la pila y se sacan de ella. En
cambio, FP slo cambia cuando se invoca un procedimiento o cuando se regresa de un procedimiento. El tercer registro de propsito especial es R31; se usa en llamadas a procedimientos para guardar la direccin de retomo.
316
fS
R1
CAP. 5
SEC. 5.1
CWP:5
R13
R14
R15
Nombre alternativo
R16 :
CWP=7
R8
R13
R14
R15
R16
Traslapo
R29
R30
R31
~ii
317
R7
R7
1.1
.::)z
RO R1
RO
;_ .)
El nivel ISA de la JVM es poco comn, pero limpio y sencillo. Ya lo vimos en su mayor parte
cuando estudiamos la JVM. El modelo de memoria JVM es igual al modelo IJVM que presentamos en el captulo 4 e ilustramos en la figura 4.1 O, pero con una regin adicional, que
presentaremos en breve. El orden de los bytes es big endian.
La memoria tiene cuatro regiones principales: el marco de variables locales, la pila de
operandos, el rea de mtodos y la reserva de constantes. Recuerde que las implementaciones Mic-x
de IJVM tienen los registros LV, SP, PC y CPP que apuntan a estas regiones. Todos
los accesos a la memoria deben efectuarse como una distancia respecto a uno de estos registros; nunca se usan apuntadores ni direcciones de memoria absolutas. Aunque JVM no re- quiere estos
registros (ni los menciona), es probable que la mayor parte de las implementaciones los tengan o tengan
algo muy parecido.
La ausencia de apuntadores para accesar a variables locales y constantes no es un accidente; es crucial para alcanzar una de las principales metas de diseo de Java: que los usua- rios puedan
bajar un programa JVM (binario) de Internet y ejecutarlo de forma segura, sin que el programa pueda
espiar o daar la mquina en la que se est ejecutando. Al limitar el uso de apuntadores, puede
aumentarse la seguridad.
Recuerde que ninguna de las regiones de memoria definidas en IJVM poda ser muy gran-
Parte de la
de. El
rea
de
R23
64 KB. Tambin la reserva de constantes est limitada a 64 KB. JVM tiene exactamente las mismas
restricciones y por la misma razn exactamente: las distan- cias que se usan como ndices para
direccionar estas regiones estn limitadas a 16 bits.
Desde luego, el rea del marco de variables locales es distinta para cada procedimiento, de
modo que cada procedimiento recin invocado tiene 64 KB para sus propias variables locales.
Asimismo, la reserva de constantes es distinta para cada clase, de modo que cada una puede tener sus
propios 64 KB. Aun as, no hay lugar para guardar arreglos grandes o estructuras de datos que se
crean dinmicamente como las listas o los rboles. Para resolver este problema, JVM contiene una
regin extra de memoria, el montculo (heap), que se puede asignar para guardar objetos dinmicos o
muy grandes. Cuando el compiladorde Java ve un enunciadocomo
ventana anterior
R24
Parte de la ventana
anterior
R29
R30
R31
(a)
int a[]
(b)
El UltraSPARC II tambin tiene 32 registros de punto flotante, que pueden contener valores
de 32 bits (precisin sencilla) o bien de 64 bits (doble precisin). Tambin es posible usar pares de
estos registros para manejar valores de 128 bits (cudruple precisin).
La arquitecturadel UltraSPARC11 es una arquitectura de carga/almacenamiento.Es de- cir, las
nicas operacionesque accesan a la memoriadirectamenteson los LOAD y STO RE, ins- trucciones
para trasladar datos entre los registros y la memoria. Todos los operandos para
instruccionesaritmticasy lgicasdebenprovenirde registroso ser proporcionadospor la instruc- cin (no
la memoria), y todos los resultados se deben guardar en un registro (no en la memoria).
318
CAP.5
JVM no tiene registros de propsito general que puedan cargarse o almacenarse bajo control del
programa; es una mquina de pila pura. Si bien sta es una decisin poco comn en estos das, el
resultado es una ISA sencilla y elegante, para la cual es fcil compilar.
El problema principal de las mquinas de pila es el gran nmero de referencias a la
memoria que se requieren. Sin embargo, como vimos en la seccin 4.6.3, un diseo ingenio- so puede
eliminar una gran cantidad de ellas mediante el plegado de varias instrucciones JVM. Adems, la
sencillez de Ja arquitectura implica que se puede implementar en una can- tidad de silicio pequea, lo
que deja la mayor parte del rea del chip disponible para una enorme cach de nivel 1, lo que
reduce an ms el nmero de referencias a la memoria. (El picoJava 11 tiene un cach de cuando
ms 16 KB + 16 KB porque la meta era construir un chip de muy bajo costo ms que uno muy
veloz.)
= new int[4096]
genera una llamada al asignador de memoria de tiempo de ejecucin, que asigna el espacio en el
montculo y devuelve un apuntador a l. As pues, s se usan apuntadores en JVM, pero de una forma
muy controlada para que los programadores no puedan manipularlos directamente.
Si se crean suficientes estructuras de datos nuevas en el montculo, llegar un momento en el
que ste se quedar sin espacio. Cuando el sistema de tiempo de ejecucin de Java detecta que el
montculo est (casi) lleno, invoca un programa llamado recolector de basura que busca en el
montculo objetos que ya no se estn usando. Se emplea un algoritmo sofis- ticado (generacional).
Luego, los objetos no utilizados se desechan para desocupar espacio en el montculo. La asignacin
con new y la liberacin con el recolector de basura automti- co constituyen un esquema de gestin
de memoria totalmente diferente del uso de una pila para variables locales. Las dos tcnicas son
complementarias; cada una tiene su sitio.
particular. Apoyo de hardware significa que una o ms instrucciones esperan datos en un formato
dado, y el usuario no puede escoger un formato distinto. Por ejemplo, los contadores tienen el
peculiar hbito de escribir los nmeros negativos con el signo menos a la derecha del nmero, en
lugar de a la izquierda, donde lo ponen los especialistas en computacin. Suponga que, en un
intento por impresionar a su jefe, el encargado del centro de cmputo de un bufete contable cambia
todos los nmeros de todas las computadoras de modo que el bit de la extrema derecha (en lugar
del de la extrema izquierda) haga las veces de bit de signo. No cabe duda de que el jefe quedara
muy impresionado ... porque todo el software dejara de funcionar correctamente. El hardware
espera cierto formato para los enteros Y no funciona correctamente si recibe algo distinto.
Consideremos ahora otro bufete contable, uno que acaba de obtener un contrato para
verificar la deuda federal (cunto debe el gobierno federal a sus acreedores). No sera factible usar
aritmtica de 32 bits aqu porque los nmeros en cuestin son mayores que 232 (unos
4000 millones). Una solucin es usar dos enteros de 32 bits para representar cada nmero, lo
que da 64 bits en total. Si la mquina no reconoce este tipo de nmeros de doble precisin, todas
las operaciones aritmticas que se realicen con ellos se tendrn que efectuar en soft- ware, pero las
dos partes pueden estar en cualquier orden porque al hardware no le importa. ste es un ejemplo de
tipo de datos sin apoyo de hardware y por tanto sin una representacin obligatoria en hardware. En
las secciones que siguen examinaremos los tipos de datos que tienen apoyo de hardware y que por
ello requieren formatos especficos.
SEC. 5.2
TIPOS DE DATOS
319
r:;,
.. :t ..
11''
,,r,,
.,.
CAP.5
se delimitan con un carcter especial al final. Como alternativa, puede incluirse un campo de
longitud de cadena para saber dnde termina sta. Las instrucciones pueden realizar funciones de copiado, bsqueda, edicin y otras con cadenas.
Los valores booleanos tambin son importantes. Un valor booleano puede adoptar uno
de dos valores: verdadero (true) o falso (false). En teora, un solo bit puede representar un
valor booleano, con O como falso y 1 como verdadero (o viceversa). En la prctica se usa
un byte o una palabra para cada valor booleano porque los bits individuales de un byte no
tienen cada uno su propia direccin y por tanto el acceso a ellos no es fcil. Un sistema
comn sigue la convencin de que O significa falso y cualquier otra cosa significa verdadero.
La nica situacin en la que un valor booleano normalmente se representa con un bit es
cuando existe un arreglo de ellos, de modo que una palabra de 32 bits puede contener 32
valores booleanos. Semejante estructura de datos se denomina mapa de bits y se presenta en
muchos contextos. Por ejemplo, se puede usar un mapa de bits para seguir la pista a los
bloques libres de un disco. Si el disco tiene n bloques, el mapa de bits tiene n bits.
Nuestro ltimo tipo de datos es el apuntador, que es slo una direccin de mquina. Ya
hemos visto muchos apuntadores. En las mquinas Mic-x, SP, PC, LV y CPP son ejemplos
de apuntadores. Accesar a una variable que est a una distancia fija de un apuntador, que es
como funciona ILOAD, es de lo ms comn en todas las mquinas.
l.: .
- ~~
decimales como tipo de datos. Las mquinas diseadas para ejecutar con frecuencia progra- mas en
COBOL suelen manejar nmeros decimales en hardware, por lo regular codificando un nmero
decimal en 4 bits y empaquetando dos nmeros decimales en cada byte (formato decimal codificado
en binario). Sin embargo, la aritmtica no funciona correctamente con nmeros decimales
empaquetados, por lo que se requieren instrucciones especiales para co- rregir la aritmtica decimal.
Dichas instrucciones necesitan conocer el acarreo de salida del bit 3. Es por ello que el cdigo de
condicin a menudo incluye un bit de acarreo auxiliar. Por cierto, el tristemente famoso problema del
ao 2000 (Y2K) fue causado por programadores en COBOL que decidieron que sera ms
econmico representar el ao como dos dgitos decimales que como un nmero binario de 16 bits.
Vaya optimacin.
Tipo
Entero con signo
Entero sin signo
codificado
en binario
Punto flotante
16 bits
32 bits
Entero decimal
64 bits
X
X
128 bits
S
E
C
.
5.
2
T
IP
O
S
D
E
D
A
T
O
S
El UltraSPARC 11 tiene una fuerte orientacin hacia los registros y casi todas las instrucciones operan con registros de 64 bits. Los tipos de datos. de caracteres y cadenas no cuentan
con apoyo de instrucciones especiales en hardware .
3
2
1
8 bits
16 bits
32' bits
64 bits
128 bits
:
Tipo
8 bits
Punto flotante
16 bits
Figur a 5-6. Tipos de datos numricos del Pentium 11. Los tipos que se manejan se
indican con x.
DIRECCIN
1 CD.OP. I
(a)
CD.OP.
IDIRECCIN1 IDIRECCIN21
(b)
1 CD. OP. I
DIR1
DIR2
DIR3 (e)
(d)
Figura 5-9. Cuatro formatos de instruccin comunes: (a) Instruccin con cero
direcciones. (b) Instruccin con una direccin. (e) Instruccin con dos direcciones. (d)
Instruccin con tres direcciones.
JVM reconoce caracteres, pero como caracteres UNICODE en lugar de los caracteres
ASCII de 8 bits ms tradicionales. El apoyo para apuntadores est limitado en su mayor parte
al uso interno del compilador y del sistema de tiempo de ejecucin, pues los programas de
usuario no pueden accesar directamente a apuntadores, los cuales se usan principalmente
para hacer referencia a objetos.
El Pentium 11 tambin es bueno para manipular caracteres ASCII de 8 bits: hay instrucciones especiales para copiar y buscar cadenas de caracteres. Estas instrucciones se pueden
usar tanto cn cadenas cuya longitud se conoce desde antes, como con cadenas cuyo final
est marcado; se usan a menudo en bibliotecas de manipulacin de cadenas.
CAP. 5
128bits
en binario
Punto flotante
64 bits
322
32.bita
En algunas mquinas todas las instrucciones tienen la misma longitud; en otras podra haber
muchas longitudes distintas. La longitud de las instrucciones puede ser menor, igual o mayor que la
de una palabra. Exigir que todas las instrucciones tengan la misma longitud es ms sencillo y
facilita la decodificacin, pero a menudo desperdicia espacio, ya que todas las instrucciones tienen
que ser tan largas como la ms larga. En la figura 5-1 O se muestran algunas posibles relaciones
entre la longitud de las instrucciones y de las palabras.
~--
1 Palabra--~
~--1 Palabra--~
-----
1 Palabra--~
SEC. 5.3
FORMATOS DE INSTRUCCIONES
323
vir 20 aos o ms. La capacidad para aadir instrucciones nuevas y aprovechar otras oportu- nidades
que surgen durante un tiempo largo tiene gran importancia, pero slo si la arquitec- tura -y la
compaa que la construye- sobreviven el tiempo suficiente para que la arquitectura sea un xito.
La eficiencia de una ISA dada depende en gran medida de la tecnologa con que una
computadora se va a implementar. Con los aos, esta tecnologa sufrir grandes cambios, y en
retrospectiva se ver que algunas de las decisiones de la ISA no fueron las mejores. Por ejemplo, si
los accesos a la memoria son rpidos, un diseo basado en pila (como JVM) es bueno, pero si son
lentos entonces lo mejor es tener muchos registros (como en el UltraSPARC
11). Los lectores que creen que esta decisin es fcil podran tomar una hoja de papel y anotar
sus predicciones para (1) una velocidad de reloj de CPU tpica y (2) un tiempo de acceso a RAM
tpico, para las computadoras de 20 aos en el futuro. Doble bien la hoja de papel y gurdela 20
aos. Luego desdblela y lala. Quienes carezcan de humildad pueden olvidarse de la hoja de papel y
simplemente publicar sus predicciones en Internet ahora.
Instruccin
Instruccin
1 nstruccin
Instruccin
Instruccin
Instruccin
Instruccin
Instruccin
Instruccin
Instruccin
Instruccin
Instruccin
(a)
Instruccin
Instruccin
(b)
lnstr.
lnstr.
Instruccin
(e)
Figura 5-10. Algunas posibles relaciones entre la longitud de las instrucciones y de las
palabras.
CAP. 5
las instrucciones. El hecho de que las instrucciones sean ms cortas implica un procesador ms
rpido. Dado que los procesadores modernos pueden ejecutar varias instrucciones en cada ciclo de
reloj, es imperativo traer varias instrucciones en cada ciclo de reloj. Este aspec- to de la cach de
instrucciones hace que el tamao de las instrucciones sea un criterio de diseo importante.
Un segundo criterio de diseo es suficiente espacio en el formato de las instrucciones para
expresar todas las operaciones deseadas. No puede haber una mquina con 2" operacio- nes e
instrucciones de menos den bits. Simplemente no habra suficiente espacio en el cdigo de operacin
para indicar cul instruccin se necesita. Adems, la experiencia ha demostrado una y otra vez la
insensatez de no dejar libre un nmero sustancial de cdigos de operacin para adiciones futuras al
conjunto de instrucciones.
Un tercer criterio tiene que ver con el nmero de bits de un campo de direccin. Consi- dere el
diseo de una mquina con caracteres de 8 bits y una memoria principal que debe contener 232
caracteres. Los diseadores podran optar por asignar direcciones consecutivas a unidades de 8, 16, 24
o 32 bits, adems de otras posibilidades.
Imagine qu sucedera si el equipo de diseo degenerara en dos facciones opuestas, una que
propone que el byte de 8 bits sea la unidad bsica de la memoria, y otra partidaria de usar la palabra de
Desde luego, aun los diseadores con gran visin pueden tomar decisiones subptimas.
E incluso si pudieran tomar todas las decisiones correctas, tambin tienen que enfrentar el corto
plazo. Si esta ISA elegante es un poco ms costosa que sus competidoras actuales mucho menos
atractivas, la compaa podra no sobrevivir el tiempo suficiente para que el mundo aprecie la
elegancia de la ISA.
Si todo lo dems es igual, las instrucciones cortas son mejores que las largas. Un progra- ma que
consiste en n instrucciones de 16 bits ocupa la mitad del espacio de memoria que ocupan n
instrucciones de 32 bits. En vista de la tendencia descendente de los precios de las memorias, este
factor podra ser menos importante en el futuro, si no fuera por el hecho de que el software crece a un
ritmo ms rpido que aqul con que bajan los precios de la memoria.
Adems, minimizar el tamao de las instrucciones podra hacerlas ms difciles de
decodificar o de traslapar. Por tanto, la reduccin del tamao de las instrucciones al mnimo debe
compararse contra el tiempo que se requiere para decodificar y ejecutar las instrucciones.
Otra razn para minimizar la longitud de las instrucciones ya es importante y se vuelve
ms importante a medida que aumenta la rapidez de los procesadores: el ancho de banda de la
memoria (el nmero de bits/s que la memoria puede proporcionar). El impresionante aumen- to en la
rapidez de los procesadores durante la ltima dcada no ha ido acompaado por un aumento
comparable en el ancho de banda de las memorias. Una de las restricciones a las que cada vez estn
ms sujetos los procesadores tiene su origen en la incapacidad del sistema de
memoria para proporcionar instrucciones y operandos al mismo ritmo que el procesador
puede consumirlos. Cada memoria tiene un ancho de banda determinado por su tecnologa y su
diseo de ingeniera. El cuello de botella del ancho de banda aplica no slo a la memoria principal,
sino tambin a todas las cachs.
Si el ancho de banda de una cach de instrucciones es de t bps y la longitud media de las
instrucciones es de r bits, la cach podr suministrar cuando ms t/r instrucciones por segun- do.
Cabe sealar que ste es un lmite superior de la rapidez con que el procesador puede ejecutar
instrucciones, aunque se estn realizando investigaciones cuya meta es superar esta barrera al
parecer infranqueable. Es evidente que la rapidez con que se pueden ejecutar las instrucciones (es
decir, la velocidad del procesador) podra estar limitada por la longitud de
32 bits como unidad bsica de memoria. El primer grupo propondra una memoria de 232 bytes,
numerados O, 1, 2, 3, ... , 4,294,967,295. El segundo grupo propondra una memoria de 23 palabras numeradas O, l, 2, 3, ... , 1,073,741,823.
El primer grupo sealara que para comparar dos caracteres en la organizacin de 32 bits el
programa no slo tendra que obtener las palabras que contienen los caracteres, sino que tambin
tendra que extraer cada carcter de su palabra para poder compararlos. Ello costara instrucciones
adicionales y por tanto desperdiciara espacio. La organizacin de 8 bits, en cambio, asigna una
direccin a cada carcter, lo que facilita mucho las comparaciones.
Los partidarios de las palabras de 32 bits contraatacaran sealando que su propuesta slo
requiere 230 direcciones distintas, lo que implica direcciones de slo 30 bits, mientras que la
propuesta de bytes de 8 bits requiere 32 bits para direccionar la misma memoria. Direcciones ms
cortas implican instrucciones ms cortas, lo que adems de ocupar menos espacio requiere menos
tiempo para la obtencin. Como alternativa, podran conservarse las direcciones de 32 bits para hacer
referencia a una memoria de 16 GB en lugar de una misera- ble memoria de 4 GB.
Este ejemplo demuestra que para tener una definicin de memoria ms fina hay que pagar el
precio de direcciones ms largas y por tanto instrucciones ms largas. Lo mximo en definicin es una
organizacin de memoria en la que es posible direccionar cada bit indivi- dualmente (como en la
Burroughs B 1700). En el otro extremo est una memoria que consiste en palabras muy largas (como la
serie Cyber de CDC que tena palabras de 60 bits).
Los sistemas de cmputo modernos han llegado a un trmino medio que, en cierto sentido, captura lo
peor de ambos enfoques. Esta organizacin requiere todos los bits necesarios para direccionar bytes
individuales, pero todos los accesos a la memoria leen una, dos o a veces cuatro palabras a la vez. Por
ejemplo, la lectura de un byte de la memoria en el UltraSPARC lI trae por lo menos 16 bytes (vase la
figura 3-47) y probablemente toda una lnea de cach de
64 bytes.
SEC. 5.3
FORMATOS DE INSTRUCCIONES
325
14
13
Cdigo de operacin
12
11
Direccin 1
10
Direccin 2
Direccin 3
Figura 5-11. Instruccin con cdigo de operacin de 4 bits y tres campos de direccin
de 4 bits.
Sin embargo, si los diseadores necesitan 15 instrucciones de tres direcciones, 14 instruc- ciones de
dos direcciones, 31 instrucciones de una direccin y 16 instrucciones que no requie- ren una direccin,
pueden usar los cdigos de operacin del O al 14 como instrucciones de tres direcciones pero interpretar
el cdigo de operacin 15 de forma distinta (vea la figura 5-12).
El cdigo 15 indica que el cdigo de operacin est contenido en los bits 8 a 15, no en los bits
12 a 15. Los bits O a 3 y 4 a 7 forman dos direcciones, como siempre. Las 14 instrucciones de dos
direcciones tienen 1111 en los 4 bits de la izquierda, y nmeros del 0000 al 11O1 en los bits 8 a
11. Las instrucciones que tienen 1111 en los bits de la izquierda y 111 O o bien 1111 en los bits 8
a 11 reciben un trato especial: se tratan como si sus cdigos de operacin estuvieran en los bits
4 a 15. El resultado es 32 cdigos de operacin nuevos. Puesto que slo se necesi- tan 31, el cdigo
de operacin 111111111111 se interpreta como seal de que el cdigo de operacin real est en los
bits O a 15, lo que da 16 instrucciones que no usan ninguna direccin.
A medida que avanzaba nuestra explicacin, los cdigos de operacin iban creciendo:
las instrucciones de tres direcciones tienen un cdigo de operacin de 4 bits; las de dos
326
Cdigo de
operacin
de 4 bits
1100
1101
1110
Cdigo de
operacin
de 8 bits
1111 0000)
1111 0001
1111 0010
1111
1111
1111
CAP. 5
15 instrucciones
de 3 direcciones
yyyy
zzzz
14 instrucciones
de 2 direcciones
zzzz
yyyy
yyyy zzzz
1011 yyyy
1100 yyyy
1101 yyyy
zzzz
zzzz
zzzz
v .
::1
31 instrucciones
i!t"
....
;r
Cdigo de
operacin
de 12 bits
1111
1111
1110 0000>
1110 0001
zzzz
zzzz
de 1 direccin
~'
1111
1111
1111
1111
1110
1110
1111
1111
zzzz
zzzz
zzzz
zzzz
1110
1111
0000
0001
327
direcciones tienen un cdigo de operacin de 8 bits, las de una direccin tienen un cdigo de
operacin de 12 bits, y las de cero instrucciones tienen un cdigo de operacin de l 6 bits.
La idea de expandir los cdigos de operacin ilustra un equilibrio entre el espacio para cdigos de operacin y el espacio para otra informacin. En la prctica, la expansin de cdigos
de operacin no son tan ntidas y regulares como en nuestro ejemplo. De hecho, la capacidad
para usar cdigos de operacin con tamao variable se puede aprovechar de una de dos
maneras. Primera, puede hacerse que todas las instrucciones tengan la misma longitud,
asignando los cdigos de operacin ms cortos a las instrucciones que necesitan ms bits
para especificar otras cosas. Segunda, se puede minimizar el tamao medio de las instrucciones escogiendo cdigos de operacin ms cortos para las instrucciones comunes y ms largos
para las instrucciones menos usadas.
Llevando la idea de los cdigos de operacin de longitud variable al extremo, es posible
minimizar la longitud promedio de las instrucciones codificando cada instruccin de modo tal
que el nmero de bits requerido sea el mnimo. El problema es que entonces las instruc- ciones
tendran diversos tamaos que ni siquiera estaran alineados respecto a las fronteras de
bytes. Aunque han existido algunas ISA con esta propiedad (como el malhadado Intel 432),
la importancia de la alineacin es tan grande para decodificar rpidamente las instrucciones
que tal grado de optimacin es con toda seguridad contraproducente. No obstante, es comn
aplicarlo en el nivel de bytes. Ms adelante examinaremos la ISA de JVM, por ejemplo, para
ver cmo se han escogido cuidadosamente los formatos de las instrucciones a fin de minimizar el tamao de los programas.
Los formatos de instruccin del Pentium 11 son muy complejos e irregulares, con hasta seis
campos de longitud variable, cinco de los cuales son opcionales. El patrn general se muestra
en la figura 5-13. Se lleg a tal patrn porque la arquitectura evolucion a lo largo de muchas
generaciones e incluy algunas decisiones poco afortunadas en etapas tempranas. En aras de la
compatibilidad con modelos anteriores, se respetaron dichas decisiones en procesadores
16 instrucciones
de O direcciones
FORMATOS DE INSTRUCCIONES
zzzz
zzzz
SEC. 5.3
Nmero de bit
328
0-5
Bytes
0-1
CD.OP.
Bits
0-1
MODO
0-4
0-4
SIB
Bits
CAP. 5
INMEDIATO
INSTRUCCIN
IESCALAI
NDICE
BASE
3
MOD
3
REG
R/M
CAP. 5
SEC. 5.3
FORMATOS DE INSTRUCCIONES
329
Formato
1a
1b
2
31
41
DEST
CD.OP.
DEST
CD.OP.
DEST
1
4
IAI CONO
FTE1
FTE1
OP-PF
FTE2
CONSTANTE INMEDIATA
22
OP
CONSTANTE INMEDIATA
3 Registros
Inmediato
SETHI
22
OP
DESPLAZAMIENTO RELATIVO A PC
30
DESPLAZAMIENTO RELATIVOA PC
RAMIF
CALL
Los primeros dos bits de cada instruccin ayudan a determinar el formato de la instruc- cin y
le dicen al hardware dnde puede encontrar el resto del cdigo de operacin, si hay ms. En el
formato la, las dos fuentes son registros; en el formato lb, una fuente es un registro y la otra es
una constante dentro del intervalo -4096 a +4095. El bit 13 selecciona cul de las dos se usar. (El
bit de la extrema derecha es el bit O.) En ambos casos, el destino siempre es un registro. Hay
suficiente espacio de codificacin para un mximo de 64 instruc- ciones, algunas de las cuales estn
reservadas para uso futuro.
Con slo instrucciones de 32 bits, no es posible incluir una constate de 32 bits en la
instruccin. La instruccin SETHI establece 22 bits, y deja espacio para que otra instruccin
establezca los otros 10. SETHI es la nica instruccin que usa este formato.
Las ramificaciones condicionales sin prediccin usan el formato 3, y el campo COND
indica cul condicin debe probarse. El bit A tiene que ver con evitar ranuras de retraso en ciertas
condiciones. Las ramificaciones con prediccin usan el mismo formato, pero con un
desplazamiento de 19 bits, como se mencion antes.
El ltimo formato es para la instruccin CALL, que sirve para invocar un procedimiento. Esta
instruccin es especial porque es la nica en la que se requieren 30 bits de datos para especificar
una direccin. En esta ISA hay un solo cdigo de operacin de dos bits. La direc- cin es la
direccin objetivo dividida entre 4, lo que hace que el alcance sea de aproximada- mente 231
bytes relativo a la instruccin actual.
332
CAP. 5
SEC. 5.3
Bits
331
FORMATOS DE INSTRUCCIONES
a-----j
Formato
1
CD.OP.
CD.OP.
31
CD. OP.
41
CD.OP.
si
CD.OP.
NDICE
DIMENSIONES
61
CD.OP.
NDICE
NM. PARM.
CD.OP.
NDICE
CD.OP.
CD.OP.
LONGITUD VARIABLE...
BYTE
1 BYTE = ndice,
constante o tipo
1 CORTO=
CORTO
NDICE
CONSTANTE
CONSTANTE
que ocupa un byte en lugar de dos. Asimismo, ILOAD_ 1, ILOAD_2 e ILOAD_3 (cdigos de
operacin OxlB, OxlC y OxlD, respectivamente) almacenan las variables locales 1, 2 y 3 en la
pila. Cabe sealar que la variable local l, por ejemplo, se puede cargar de tres maneras: ILOAD_
1, ILOAD 1 o WIDE ILOAD 1.
Existen variaciones similares de muchas instrucciones, como instrucciones especiales
que equivalen exactamente a BIPUSH con constantes de O, 1, 2, 3, 4 y 5, as como -1.
Tambin hay instrucciones especiales para guardar variables de la pila en las primeras cuatro
palabras del espacio de variables locales.
Cabe sealar que estas variaciones no carecen de costo. Slo pueden especificarse256 instrucciones nicas con un byte. La decisin de dedicar cuatro de ellas a la carga de las primeras
cuatro variables locales consume cuatro de las 256 instrucciones disponibles. Y si aadimos la
instruccin ILOAD bsica vemos que ya se ocuparoncinco instrucciones. Desde luego, el prefijo
WIDE tambin consume uno de los 256 valoresdisponibles (y ni siquiera es una instruccin, slo un
prefijo), pero es ms general porque se aplica a muchos otros cdigos de operacin.
,.
SEC. 5.4
DIRECCIONAMIENTO
333
ficacin del registro objetivo. Por tanto, si un operando slo se va a usar una vez, no vale la
pena colocarlo en un registro.
Por fortuna, aos de mediciones muestran que los operandos se reutilizan mucho. Por
consiguiente, casi todas las arquitecturas recientes cuentan con un gran nmero de registros y
casi todos los compiladores hacen hasta lo imposible por mantener variables locales en esos
registros, lo que elimina muchas referencias a la memoria. Esto reduce tanto el tamao de los
programas como el tiempo de ejecucin.
Un segundo mtodo para reducir el tamao de la especificacin consiste en especificar
uno o ms operandos implcitamente. Hay varias tcnicas para hacerlo. Una de ellas es utilizar una sola especificacin para un operando fuente y para el destino. Mientras que una
instruccin ADD general de tres direcciones podra usar la forma
5.4 DIRECCIONAMIENTO
Un diseo cuidadoso de los cdigos de operacin es una parte importante de la ISA. Sin
embargo, una porcin considerable de los bits de un programa se gastan en especificar de
dnde provienen los operandos, ms que las operaciones que se efectuarn con ellos. Considere una instruccin ADD que requiere la especificacin de tres operandos: dos fuentes y un
destino. (Se acostumbra usar el trmino operando para referirse a los tres, pero el destino es el
lugar donde se coloca el resultado.) De alguna manera, la instruccin ADD debe indicar dnde
estn los operandos y dnde debe ponerse el resultado. Si las direcciones de memoria tienen 32
bits, la especificacin ingenua de esta instruccin requiere tres direcciones de 32 bits adems
del cdigo de operacin. Las direcciones ocupan muchos ms bits que el cdigo de operacin.
Se usan dos mtodos generales para reducir el tamao de la especificacin. Primero, si un
operando va a usarse varias veces, puede colocarse en un registro. El uso de un registro para
una variable tiene dos ventajas: el acceso es ms rpido y se requieren menos bits para
especificar el operando. Si hay 32 registros, cualquiera de ellos puede especificarse con slo
cinco bits. Si la instruccin ADD puede efectuarse usando slo operandos en registros, bastan
15 bits para especificar los tres operandos, en lugar de los 96 que se necesitaran si todos
estuvieran en la memoria.
Desde luego, el uso de registros no es gratuito. De hecho, hay ocasiones en que su uso
empeora el problema. Si primero hay que cargar en un registro un operando de la memoria, se
ocuparn ms bits de especificacin que si slo se especificara la posicin en memoria. Primero se necesita una instruccin LOAD para colocar el operando en un registro. Esto no slo
requiere un cdigo de operacin, sino tambin la direccin de memoria completa y la especi-
334
CAP. 5
R1
335
emplean este modo de direccionamiento exclusivamente. La nica ocasin en que no se usa este
modo de direccionamiento es cuando un operando se pasa de la memoria a un registro (instruccin
LOAD) o de un registro a la memoria (instruccin STORE). Incluso en el caso de esas instrucciones,
uno de los operandos es un registro: dnde est o dnde se colocar la palabra de memoria.
CICLO:
MOV R1,#0
MOV R2,#A
MOV R3,#A+ 1024
ADD R1 ,{R2)
ADD R2,#4
CMP R2,R3
BLTLOOP
El direccionamiento por registro es igual al directo en lo conceptual pero especifica un regis- tro en
lugar de una posicin de memoria. Dada la importancia de los registros (por su acceso tan rpido y
sus direcciones tan cortas) este modo de direccionamiento es el ms comn en Ja mayor parte de las
computadoras. Muchos compiladores se esfuerzan por determinar a cules variables se accesar con
mayor frecuencia (por ejemplo, el ndice de un ciclo) y colocan estas variables en registros.
Este modo de direccionamiento se conoce simplemente como modo de registro. En las
arquitecturas de carga/almacenamiento como el UltraSPARC 11, casi todas las instrucciones
336
DIRECCIONAMIENTO
SEC. 5.4
CAP.5
SEC. 5.4
DIRECCIONAMIENTO
337
No cabe duda de que esto funcionara, pero hay una forma mejor de hacerlo, como se muestra
en la figura 5-18.
mos producido un ciclo corto y rpido. Por cierto, este programa es realmente para el Pentium 11,
. ..
,.,~J
slo que cambiamos los nombres de las instrucciones y los registros, as como la notacin,
para hacerlo ms comprensible, ya que la sintaxis del lenguaje ensamblador estndar del
Pentium
(MASM) es rarsima, una reliquia de la anterior vida de la mquina como un
ADD11R1,A
8088.
Luego,
cada
iteracin
ciclo lahay
instruccin
podraeste
incrementarse
4, de
Vale
la en
pena
sealar
que, del
en teora,
otra formamisma
de realizar
clculo sin en
usar
modo
que
despus
de
una
iteracin
diga
direccionamiento indirecto por registro. El ciclo podra haber contenido una instruccin
que sumara
y R 1, como
ADD R1A ,A+4
y as hasta terminar.
Un programa que se modifica a s mismo de esta manera es un programa automodificable.
La idea se le ocurri al mismsimo John von Neumann y era razonable en las primeras computadoras, que no tenan direccionamiento indirecto por registro. Hoy da los programas
automodificables se consideran de muy mal gusto y difciles de entender; adems, no pueden
compartirse entre varios procesos al mismo tiempo. Otra desventaja es que ni siquiera funcionan correctamente en mquinas con cach de nivel 1 dividida, si la cach 1 no cuenta con
circuitos para efectuar escrituras de vuelta (porque los diseadores supusieron que los programas no se modifican ellos mismos).
MOVR2,#0
; R2 =ndice, i, del producto actual: A[i] AND B[i]
MOV R3,#4096 ; R3 = primer valor del ndice que no se usar
CICLO Figura
MOV5-18.
R4,A{R2)
Programa; R4=A[i]
genrico en ensamblador para calcular el OR de A; y B;
con AND
dos arreglos
de 1024; elementos.
R4,B{R2)
R4 = A[i] AND B[i)
OR R1,R4
; hacer OR de todos los productos booleanos y poner en
El funcionamiento
es sencillo. Necesitamos cuatro registros:
R1
ADD R2,#4 del programa
; i = 1 + 4 (incremento en unidades de 1 palabra= 4 bytes)
CMP R2,R3
l. R1BLTLOOP
- Contiene el OR; si
acumulado
productos
booleanos
ya
R2terminamos?
< R3, de
no los
hemos
terminado;
continuar.
2.
3.
4.
R4- Un registro de borrador para contener cada producto a medida que se forma.
Despus de inicializar los registros ingresamos en el ciclo de seis instrucciones. La instruccin que est en CICLO trae A; y lo coloca en R4. Aqu, el clculo de la fuente usa el modo
indizado. Un registro, R2, y una constante, la direccin de A, se suman y la suma se usa para
hacer referencia a la memoria. La suma de estas dos cantidades se enva a la memoria, pero no
se guarda en ningn registro visible para el usuario. La notacin
MOV R4,A(R2)
En muchos casos es til poder hacer referencia a palabras de memoria que estn a una distancia
conocida de un registro. Ya vimos algunos ejemplos con IJVM en los que se hace referencia a
variables locales indicando su distancia respecto a LV. Direccionar la memoria dando un
registro (explcito o implcito) ms una distancia constante se denomina direccionamiento
indexad~
El acceso a variables locales en IJVM utiliza un apuntador a la memoria (LV) en un
registro ms una distancia pequea en la instruccin misma, como se muestra en la figura
4-19(a). Sin embargo, tambin es posible hacerlo del otro modo: con el apuntador a la memoria
en la instruccin y la distancia pequea en el registro. Para ver cmo funciona esto, considere el
clculo siguiente. Tenemos dos arreglos unidimensionales A y B, de 1024 palabras cada uno,
y queremos calcular A; ANO B; para todos los pares y luego obtener el OR deestos 1024
productos booleanos para ver si hay al menos un par distinto de cero en el conjunto. Una
estrategia sera colocar la direccin de A en un registro, la direccin de B en un segundo
registro, y luego incrementarlas juntas, de forma anloga a como hicimos en la figura 5-17.
338
MOV R1,#0
indica que el destino usa modo de registro con R4 como el registro y la fuente usa modo indexado, con A como la distancia y R2 como el registro. Si A tiene el valor de 124300, por
ejemplo, la instruccin de mquina real para esto es probable que se parezca a la de la
figura 5-19.
MOV
R4
R2
124300
CAP. S
Este modo se conoce como direccionamiento basado indexado. Uno de los registros es la
base y el otro es el ndice. Un modo as habra sido til aqu. Afuera del ciclo podramos haber
colocado la direccin de A en RS y la direccin de B en R6. Luego podramos haber sustituido
la instruccin que est en CICLO y su sucesora por
CICLO:
. ,)
MOV R4,(R2+R5)
SEC. 5.4
339
DIRECCIONAMIENTO
b +e significa (ax b) +e y no ax (b +e) porque se defini arbitrariamente que la multiplicacin tiene precedencia sobre la suma. Pero, el desplazamiento a la izquierda tiene precedencia sobre el ANO booleano? Quin sabe? La notacin polaca inversa elimina esta
molestia.
Existen varios algoritmos para convertir frmulas infijas a notacin polaca inversa. La
que se da a continuacin es una adaptacin de una idea de E. W. Dijkstra. Suponga que una
frmula se compone de los siguientes smbolos: variables, los operadores dadicos (de dos
operandos)+ - */,y los parntesis izquierdo y derecho. Para marcar el final de una frmula,
insertamos el smbolo J. despus del ltimo smbolo y antes del primero.
California
Nueva York
Cambiavas
~
ANO R4,(R2+R6)
.-l
:I'
Si hubiera un modo de direccionamiento para acceder a la memoria de forma indirecta usando la suma de dos registros sin una distancia, habra sido ideal. Como alternativa, incluso una
instruccin con una distancia de 8 bits habra sido mejor que el cdigo original, porque podramos asignar O a ambas distancias. En cambio, si las distancias siempre son de 32 bits no
habremos ganado nada al usar este modo. En la prctica, las mquinas que manejan este modo
suelen tener una forma con una distancia de 8 bits o de 16 bits.
Texas
La figura 5-20 muestra una va de ferrocarril de Nueva York a California, con una desviacin a la mitad que lleva a Texas. Cada smbolo de la frmula se representa con U[1]J vagn
de ferrocarril. El tren se mueve hacia el poniente (a la izquierda). Cuando un vagn se acerca
a un cambiavas, debe detenerse justo antes de llegar y preguntar si debe ir a California directamente o desviarse hacia Texas. Los vagones que contienen variables siempre se van
directamente a California sin pasar por Texas. Los vagones . que contienen cualquier otro
smbolo deben indagar el contenido del vagn ms cercano en la va a Texas antes de ingresar
al cambiavas.
La tabla de la figura 5-21 muestra lo que sucede, dependiendo del contenido del vagn
ms cercano en la va a Texas y del vagn que est llegando al cambiavas. El primer J.
siempre va a Texas. Los nmeros se refieren a las siguientes situaciones:
2.
340
l.
3.
4.
5.
CAP.5
J_
Vagn en el cambiavas
+
X
I
(
DIRECCIONAMIENTO
SEC. 5.4
341
::r
O)
J_
~ +
><
.
.
.,.1..1 -
i,' .. ,
(/)
(!)
2
2
2
2
2
2
1
1
1
1
1
1
2
2
825x+132x+4-/
En la figura introdujimos
(8 + 2 X 5) / (1 + 3 X 2 - 4)
5-~
e <1l
O
<1l
O><1l
> >
.. ,
;)
.:
P
..
.
o .!!!
<1l
-5
.f
.:~;
Figura 5-21. Tabla de decisin del algoritmo para convertir notacin infija a polaca
inversa.
Despus de realizar cada accin, se hace una nueva comparacin entre el vagn que est
en el cambiavas, que podra ser el mismo vagn que en la comparacin anterior o bien el
siguiente vagn, y el vagn que ahora es el ltimo en tomar la va a Texas. El proceso contina hasta llegar al paso 4. Observe que la va a Texas se est usando como pila, en la que la
desviacin de un vagn a Texas equivale a la operacin de meter o apilar (push), y hacer que
un vagn que ya est en la va a Texas se d vuelta y se dirija a California es una operacin de
sacar o desapilar (pop).
Notacin infija
A+ B x
Ax
ABCx+
B+C
Ax B+Cx
A Bx
O
B) / (C - O)
Ax
B1
C+
ABxCDx+ (A+
AB+CO-/
((A + B) x
ABx
e + o) 1 (E + F = G)
e1
AB+Cx
D+EF+G+/
es significativo
(a diferencia de la suma y la multiplicacin).
En otras. palabras, IDN se defi- ni
cuidadosamente de modo que si primero se empila el numerador; luego se empila el denominador y
luego se efecta la operacin, se obtiene el resultado correcto- Observe lo fcil que es generar cdigo
(l)JVM a partir de notacin polaca inversa: basta coll recorrer la frmula y producir una instruccin por
smbolo. Si el smbolo es una constante o variable, se produce una instruccin que lo almacene en la pila. Si el
smbolo es un operador, se produce una instruccin que ejecute la operacin.
objetivo. Los modos que ya examinamos generalmente tambin funcionan para las
ramificaciones. El direccionamiento directo es una posibilidad obvia: la direccin objetivo
simplemente se incluye completa en la instruccin.
Sin embargo, otros modos de direccionamiento tambin tienen. sentido. El direccionamiento indirecto por registro permite al programa calcular la dmreccin oliljetivo, colocarla en
un registro, y luego saltar ah. Este modo es el que ms flexibilidad ofrece porque la direccin
objetivo se calcula en el momento de la ejecucin, pero tambin es la que crea ms
oportunidades de incluir errores que son casi imposibles de encontrar.
Otro modo razonable es el indexado, que salta una distancia conocida desde un registro.
Sus propiedades son las mi~mas que la del modo indirecto por registro.
Cadena restante
X +4-f
Instruccin
825 X +132
25x+132
5x+132
X +132
+132
132 x+4-/
BIPUSH 1
18, 1
32 X +4-/
BIPUSH 3
18, 1, 3
2 X +4-/
BIPUSH 2
18, 1, 3, 2
X+ 4-/
IMUL
18, 1, 6
10
+ 4-/
IADD
18,7
11
4-/
BIPUSH 4
18, 7, 4
12
-/
ISUB
18, 3
13
IDIV
x+4-/
x+4-/
x+4-/
CAP. 5
SEC. 5.4
Bits
Pila
x+4-/
BIPUSH 8
BIPUSH 2
8, 2
BIPUSH 5
8, 2, 5
IMUL
8, 10
IADD
18
Figura 5-23. Uso de una pila para evaluar una frmula en notacin polaca inversa.
5
FUENTE2
CD.OP.
1o1
DEST
FUENTE1
21
CD.OP.
l1
DEST
FUENTE1
31
CD. OP.
DISTANCIA
DISTANCIA
Figura 5-24. Diseo sencillo para los formatos de instruccin de una mquina de tres
direcciones.
Otra opcin es el direccionamiento relativo al PC. En este modo, la distancia (con signo) que
est en la instruccin se suma al contador de programa para obtener la direccin objetivo. De
hecho, esto no es ms que el modo indexado usando PC como el registro.
343
DIRECCIONAMIENTO
(por ejemplo, slo se podra cargar o almacenar RO), pero no se usaran con mucha frecuencia.
Consideremos ahora un diseo para una mquina de dos direcciones que puede usar una palabrade
memoria como uno de los operandos. El diseo se muestra en la figura 5-25. Una m- quina as puede
sumar una palabra de memoria a un registro, sumar un registro a una palabra de memoria, sumar un
registro a un registro, o sumar una palabra de memoria a una pala- bra de memoria. Actualmente, los
accesos a la memoria son relativamente costosos, por lo que este diseo no goza de popularidad, pero
si los adelantos en las tecnologas de cach o de memoria hacen que los accesos a sta sean baratos en
el futuro, ste es un diseo para el cual es muy fcil y eficiente la compilacin. La PDP-11 y la
VAXfueron mquinas con mucho xito que dominaron el mundo de las minicomputadoras durante dos
dcadas empleando diseos similares a ste.
Bits
344
4
CAP. 5
compilar y muy flexible, sobre todo si el contador de programa, el apuntador a la pila y el apunta- dor a las
variables locales estn incluidos entre los registros generales y se puede acceder a ellos.
El nico problema aqu es que con direccionamiento directo necesitamos ms bits para la direccin.
Lo que hicieron la PDP-11 y la VAX fue aadir una palabra extra a la instruccin, para la direccin de
cada operando direccionado directamente. Tambin podramos usar uno de los dos modos de
direccionamiento disponibles para un modo indexado con una distancia de 32 bits despus de la
instruccin. As, en el peor caso, como una ADD de memoria a memoria en la que ambos operandos se
direccionan directamente, o usando la forma indexada larga, la ins- truccin tendra 96 bits de largo y
usara tres ciclos de bus (uno para la instruccin, dos para datos). Por otra parte, casi todos los diseos
RISC requeriran al menos 96 bits, y probablemente ms, para sumar una palabra de memoria arbitraria a
otra, y usara al menos cuatro ciclos de bus.
Hay muchas posibles alternativas a la figura 5-25. En este diseo es posible ejecutar el enunciado
e ];
en una instruccin de 32 bits, siempre que i y j se cuenten entre las primeras 16 variables locales.
Por otra parte, para las variables despus de la 16, tenemos que usar distancias de 32 bits. Una opcin
sera otro formato con una sola distancia de 8 bits en lugar de dos distancias de 4 bits, ms una regla que
diga que la fuente o el destino podran usarla, pero no ambos. Las posibilidades y equilibrios son
ilimitados, y los diseadores de mquinas deben balancear
muchos factores para obtener un buen resultado.
l------~~~:_?!':_
:
l~?E.<?[
~~9
[!?~~~~~9~~]~~~?1
~~-~----[_D~~!~~-9~~~
~----------------------------------------------------------------------------
J
1
~--------------------~~e3~!?~-~~!.5~~~~~3~~~!'.l-~~~~-~~-c:i:_~~~~~-------------------J
Figura 5-25. Diseo sencillo para los formatos de instruccin de una mquina de dos
direcciones
En este diseo, tenemos otra vez un cdigo de operacinde 8 bits, pero ahoratenemos 12 bits
para especificar la fuente y 12 bits para especificar el destino. Para cada operando, 3 bits dan el
modo, 5 bits dan el registro y 4 bits dan la distancia. Con tres bits de modo podramos manejar
direccionamientoinmediato,directo,de registro,indirectopor registro,indexado y de pila, y tener
espacio para dos modos futuros ms. ste es un diseo limpio y regular para el cual es fcil
el campo R/M de 3 bits se enumeran en la figura 5-26. Por ejemplo, si ambos campos son cero, el
operando se lee de la direccin de memoria contenida en el registro EAX.
Las columnas O 1 y 1 O contienen modos en los que un registro se suma a una distancia de
8 o 32 bits que sigue a la instruccin. Si se selecciona una distancia de 8 bits, primero se extiende
su
a 32 de
bits6 antes
suma.dePor
ejemplo,
instruccin
ADD con R/M O 11, MOD O 1 y
unasigno
distancia
calculadelalasuma
EBX
y 6 y leeuna
la palabra
de memoria
que est en esa direccin para obtener uno de los operandos. EBX no se modifica.
La columna MOD = 11 permite escoger entre dos registros. Si la instruccin es de pala- bras, se
escoge el primero; si la instruccin es de bytes, se escoge el segundo. Observe que la tabla no es del
todo regular. Por ejemplo, no hay forma de direccionar indirectamente a travs de EBP ni de sumar
una distancia a ESP.
SEC. 5.4
345
DIRECCIONAMIENTO
MOD
R/M
00
01
10
11
000
M[EAX]
M[EAX + DISTB]
M[EAX + DIST32]
EAX o AL
001
M[ECX]
M[ECX + DISTS]
M[ECX + DIST32]
ECX o CL
010
M[EDX]
M[EDX + DISTB]
M[EDX + DIST32]
EDX o DL
M[EBX + DIST32]
EBX o BL
011
M[EBX]
M[EBX + DISTB]
100
SIB
ESP o AH
101
Directo
M[EBP + DISTS]
M[EBP + DIST32]
EBP o CH
110
M[ESI]
M[ESI + DISTS]
M[ESI + DIST32]
ESI o OH
111
M[EDI]
M[EDI + DISTS]
M[EDI + DIST32]
EDI o BH
Figura 5-26. Modos de direccionamiento de 32 bits del Pentium II. M[x] es la palabra de
memoria que est en x.
346
CAP. 5
laciones requieren tener una buena idea de la magnitud de la carga de trabajo. Podemos asegu- rar que
los diseadores del 8088 no incluyeron un navegador de Web en su conjunto de prueba. A pesar de ello,
no pocos de los descendientes de ese producto se usan ahora primordialmen- te para explorar la Web, y
es posible que las decisiones tomadas hace 20 aos sean totalmente inadecuadas para las aplicaciones
actuales. No obstante, en aras de la compatibilidad con mo- delos anteriores, una vez que se incorpora
una caracterstica, es imposible deshacerse de ella.
-----
SEC. 5.4
DIRECCIONAMIENTO
Modo de direccionamiento
X
a [O]
EBP + 8
a [1]
-----
EBP + 12
----- EBP + 16
347
relativa a algn registro implcito, por lo regular LV o CPP. Las instrucciones de ramificacin tambin
usan el modo indexado, con PC como registro implcito.
ien EAX
-----
a [2]
donde a es un arreglo de enteros de 4 bytes local respecto al procedimiento en curso. Por Jo regular,
se usa EBP para apuntar a la base del marco de pila que contiene las variables locales y arreglos, como
se muestra en la figura 5-27. El compilador podra mantener i en EAX. Para accesar a a[i], usara un
modo SIB en el que Ja direccin del operando es la suma de 4 x EAX, EBP y 8. Esta instruccin podra
guardar un valor en a[i] con una sola instruccin.
Vale la pena este modo? Es difcil saberlo. No hay duda de que esta instruccin, si se usa
correctamente, ahorra unos cuantos ciclos. La frecuencia con que se use depende del compilador y
de la aplicacin. El problema es que esta instruccin ocupa un rea dentro del chip que podra
haber tenido otro uso si la instruccin no estuviera presente. Por ejemplo, la cach nivel 1 podra haber
sido ms grande, o el chip podra haber sido ms pequeo, lo que tal vez habra permitido una
velocidad de reloj un poco ms alta.
stos son los tipos de decisiones que los diseadores enfrentan todo el tiempo. Por lo
regular se efectan simulaciones extensas antes de producir circuitos en silicio, pero esas simu-
EBP
Otras
variables
locales
Marco
de pila
En algunos modos un byte adicional, llamado SIB (escala, ndice, base) sigue al byte MODO
(vase la figura 5-13). El byte SIB especifica un factor de escala y dos registros. Cuando est
presente un byte SIB, la direccin del operando se calcula multiplicando el registro ndice por 1, 2, 4
u 8 (dependiendo de ESCALA), sumndolo al registro base, y por ltimo tal vez sumndole un
desplazamiento de 8 o 32 bits, dependiendo de MOD. Casi todos los registros pueden usarse como
ndice o como base.
Los modos SIB son tiles para accesar a elementos de un arreglo. Por ejemplo, considere el
enunciado en Java
Pentium 11
X
Registro
UltraSPARC 11
Directo
JVM Inmediato
X
cul registro usar. En el modo inmediato, una constante de 13 bits (con signo) pro- porciona los datos.
No hay otros modos para las instrucciones aritmticas, lgicas y similares.
Tres clases de instrucciones direccionan memoria: las LOAD, las STORE y una instruccin
de sincronizacin de multiprocesadores. Las instrucciones LOAD y STORE tienen dos modos para
direccionar la memoria. El primer modo calcula la suma de dos registros y luego la usa para acceso
indirecto. El otro es una indexacin tradicional, con una distancia de 13 bits (con signo).
348
CAP. 5
Indexado
Basado-indexado
Pila
todava est en la localidad 2000. Sera mejor llamar a las instrucciones de movimiento de datos
instrucciones de "duplicacin de datos", pero el trmino "traslado o movimiento de datos" ya est
establecido.
Hay dos razones para copiar datos de un lugar a otro. Una es fundamental: Ja asignacin de
valores a variables. La asignacin
A=B
se implementa copiando el valor que est en la direccin de memoria B en la posicin A porque
el programador dijo que se hiciera. La segunda razn para copiar datos es prepararlos para un
acceso y uso eficientes. Como hemos visto, muchas instrucciones slo pueden accesar a variables si
estn disponibles en un registro. Puesto que hay dos posibles fuentes para un dato (memoria o
registro), y hay dos posibles destinos para un dato (memoria o registro), hay cuatro posibles tipos
de copiado. Algunas computadoras tienen cuatro instrucciones, una para cada caso; otras tienen
una instruccin para los cuatro casos. Otras ms usan LOAD para copiar de la memoria a un
registro, STORE para copiar de un registro a la memoria, MOVE para copiar de un registro a otro,
y ninguna para copiar de una localidad de memoria a otra.
Las instrucciones de movimiento de datos deben indicar de alguna manera la cantidad de datos
que deben copiarse. En algunas ISA existen instrucciones para mover cantidades varia- bles de
datos que van desde un bit hasta toda la memoria. En las mquinas con longitud de palabra fija la
cantidad que se traslada suele ser exactamente una palabra. Para mover una cantidad mayor o
menor se requiere una rutina en software que usa desplazamiento y fusin. Algunas ISA ofrecen
capacidades adicionales para copiar menos de una palabra (general- mente en incrementos de bytes)
y tambin varias palabras. Copiar mltiples palabras no es
SEC. 5.5
TIPOS DE INSTRUCCIONES
349
fcil, sobre todo si el nmero mximo de palabras es grande, porque una operacin as puede tardar
mucho, y podra tenerse que interrumpir a la mitad. Algunas mquinas con longitud de palabra
variable tienen instrucciones que especifican slo las direcciones de origen y de des- tino pero no la
cantidad. El movimiento contina hasta que se encuentra un campo de fin de datos.
350
CAP. 5
punto flotante, que corresponden aproximadamente a las operaciones aritmticas con ente- ros.
Casi todas las mquinas ofrecen al menos dos tamaos de nmeros de punto flotante, los ms
cortos para efectuar operaciones rpidas y los ms largos para aquellas ocasiones en que se
necesitan muchos dgitos de precisin. Si bien hay muchas variaciones de formatos de punto
flotante posibles, se ha adoptado casi universalmente una sola norma: IEEE 754. Los nmeros de
punto flotante y la norma se describen en el Apndice B.
SEC. 5.5
Las operaciones mondicas tienen un operando y producen un resultado. Dado que se tiene que
especificar una direccin menos que en las operaciones didicas, las instrucciones a veces son
ms cortas, aunque en muchos casos tambin hay que especificar otra informacin.
Las instrucciones para desplazar o someter a rotacin el contenido de una palabra o byte
son muy tiles y a menudo se incluyen con variaciones. Los desplazamientos son operacio- nes en
las que los bits se recorren hacia la izquierda o la derecha, y los bits que son expulsa-
~5
tamente.
..;~ ;:,;
dos por un extremo se pierden. Las rotaciones son desplazamientos en los que los bits que
la
CAP. 5
t. ..
En general, el desplazamiento a la derecha introduce errores porque trunca hacia abajo (hacia':
el entero ms negativo), lo que es incorrecto en la aritmtica de nmeros enteros negativos .. :
En cambio, el desplazamiento a la izquierda s simula la multiplicacin por 2.
_ _ ._.
Las operaciones de rotacin son tiles para empacar y desempacar secuencias de bits de'.;~' ~''. las
palabras. Si queremos probar todos los bits de una palabra, girar la palabra de bit en bit en~~ cualquier
direccin coloca sucesivamente cada bit en el bit de signo, donde se le puede probar fcilmente, y tambin restaura la palabra a su valor original una vez que se han probado
todos los bits. Las operaciones de rotacin son ms puras que las de desplazamiento porque no se
pierde informacin: una operacin de rotacin arbitraria se puede anular con otra ope- racin de
rotacin.
Ciertas operaciones didicas ocurren tan a menudo con ciertos operandos que las ISA a
veces cuentan con instrucciones mondicas para efectuarlas rpidamente. Poner cero en una
palabra de memoria o un registro es muy comn al inicializar un clculo. Desde luego, mover un
cero es un caso especial de las instrucciones generales de movimiento de datos. Por efi- ciencia,
es comn que se incluya una operacin CLR ( Clear, borrar), con una sola direccin, la posicin
que se quiere borrar (es decir, igualar a cero).
Al contar tambin es comn sumar 1 a una palabra. Una forma mondica de la instruccin ADD es la operacin INC, que suma l. La operacin NEG es otro ejemplo. Negar X en
realidad es calcular O - X, una resta didica, pero por la frecuencia con que se usa a veces se
proporciona una instruccin NEG aparte. Es importante sealar aqu la diferencia entre la
operacin aritmtica NEG y la operacin lgica NOT. La operacin NEG produce el inverso
aditivo de un nmero (el nmero que sumado al original da 0). La operacin NOT simpleSEC. 5.5
352
351
TIPOS DE INSTRUCCIONES
TIPOS DE INSTRUCCIONES
353
'
mente invierte todos los bits individuales de la palabra. Las operaciones son muy similares y de hecho,
en un sistema que usa la representacin de complemento a uno, son idnticas. (En aritmtica de
complemento a dos la instruccin NEG se lleva a cabo invirtiendo primero todos los bits
individuales y sumando luego 1.)
Las instrucciones didicas y mondicas a menudo se agrupan por su uso, ms que por el
nmero de operandos que requieren. Un grupo abarca las operaciones aritmticas, incluida la negacin.
El otro incluye las operaciones lgicas y el desplazamiento, ya que estas categoras casi siempre se usan
juntas para obtener datos.
-JX.
354
CAP. 5
algn bit 1. El bit Z de la figura 4-1 normalmente se calculara haciendo OR con todos los bits
de salida de la ALU e invirtiendo despus el resultado.
Tambin es importante comparar dos palabras o caracteres para ver si son iguales o, si no lo son,
cul es mayor. Un ejemplo de aplicacin son los ordenamientos.
Para realizar esta prueba se
requieren tres direcciones: dos para los datos y una para la direccin a la que debe saltarse si la
condicin se cumple. Las computadoras cuyo formato de instrucciones permite tres direcciones por
instruccin no tienen problemas, pero las otras deben hacer algo para superar esta deficiencia.
Una solucin comn es proporcionar una instruccin que realice una comparacin y
establezca uno o ms bits de condicin para registrar el resultado. Una instruccin subsecuen- te puede
probar los bits de condicin y ramificar si los dos valores comparados son iguales,
o diferentes, o si el primero fue mayor, etc. Tanto el Pentium 11 como el U\traSPARC II
adoptan este enfoque.
La comparacin de dos nmeros tiene algunos aspectos sutiles. Por ejemplo, la compa- racin no
es tan sencilla como la resta. Si se compara un nmero positivo muy grande con un nmero negativo
muy grande, la resta producir un desbordamiento, porque el resultado de la resta no puede
representarse. No obstante, la instruccin de comparacin debe determinar si la prueba especificada
se cumple o no, y devolver la respuesta correcta; no hay desborda- miento en las comparaciones.
Otra cuestin sutil relacionada con la comparacin de nmeros es decidir si se debe considerar
que los nmeros tienen signo o no. Los nmeros binarios de tres bits pueden ordenarse de dos
formas. De menor a mayor:
Sin signo
000
001
010
Oll
100
101
110
111
Con signo
100 (menor)
101
110
111
000
001
010
011 (mayor)
La columna
regresar al enunciado que sigue a la llamada. Por tanto, la direccin de retomo se debe trans- mitir al
procedimiento o guardarse en algn lugar donde se le pueda encontrar cuando sea el momento de
regresar.
La direccin de retomo se puede colocar en cualquiera de tres lugares: la memoria, un
SEC. 5.5
TIPOS DE INSTRUCCIONES
355
terminacin todava no se satisface, salta a la primera instruccin del ciclo. De lo contrario, el ciclo
termina y se ejecuta la primera instruccin que sigue al ciclo. Esta forma de ciclo se describe
registro o la pila. Por mucho, Ja peor solucin es colocarla en una sola localidad fija de
memoria. Con esta tcnica, si el procedimiento invoca a otro procedimiento, Ja segunda lla- mada
har que la direccin de retomo de la primera se pierda.
Una solucin un poco mejor es hacer que Ja instruccin de llamada a procedimiento guarde
la direccin de retomo en la primera palabra del procedimiento, y que Ja primera direccin
ejecutable est en Ja segunda palabra. As, el procedimiento puede regresar to- mando una rama
indirecta a la primera palabra o, si el hardware coloca el cdigo de opera- cin de ramificacin en
la primera palabra junto con la direccin de retorno, tomando una
rama directamente a ella. El procedimiento podra invocar otros procedimientos, porque
cada procedimiento tiene espacio para una direccin de retorno. Si el procedimiento se invoca
a s mismo, este esquema falla, porque la primera direccin de retorno ser destrui- da por la
segunda llamada. La capacidad de un procedimiento para invocarse a s mismo, llamada
recursin, es en extremo importante tanto para los tericos como para los progra- madores
prcticos. Adems, si el procedimiento A llarnaial procedimiento B, y B llama al procedimiento
C, y C llama a A (recursin indirecta o encadenada), el esquema tambin falla.
Algo todava mejor es hacer que la instruccin de llamada a procedimiento coloque la
direccin de retorno en un registro, dejando la responsabilidad de guardarla en un lugar segu- ro al
procedimiento. Si el procedimiento es recursivo, tendr que poner la direccin de retor- no en un
lugar distinto cada vez que se invoque.
Lo mejor que puede hacer la instruccin de llamada a procedimiento con la direccin de
retorno es almacenarla en una pila. Una vez que el procedimiento termina, saca la direc- cin de
retorno de la pila y la coloca en el contador de programa. Si se cuenta con esta forma de
llamada a procedimiento, la recursin no causa problemas especiales; la direc- cin de retorno
se guarda automticamente de una forma tal que se evita la destruccin de direcciones de retorno
previas. Vimos esta forma de guardar la direccin de retorno en IJVM en la figura 4-12.
como ciclo con prueba al final y se ilustra en C en la figura 5-29(a). (No podramos usar Java aqu
porque no tiene una instruccin goto.)
i
1;
L 1: primer-enunciado;
ltimo-enunciado;
i = + 1;
f (i < n) goto L 1;
(a)
1;
ltimo-enunciado
= i + 1;
L2:
gato L 1;
(b)
Figura 5-29. (a) Ciclo con prueba al final. (b) Ciclo con prueba al principio.
Los ciclos con prueba al final tienen la propiedad de que el ciclo siempre se ejecuta al menos
una vez, incluso si n es O o menor que O. Considere, por ejemplo, un programa que mantiene los
expedientes de personal de una compaa. En cierto punto del programa, se lee informacin acerca
de un empleado en particular. Se lee n, el nmero de hijos que el emplea- do tiene, y se ejecuta un
ciclo n veces, una por cada hijo, leyendo el nombre del hijo, su sexo y su fecha de nacimiento para
que Ja compaa pueda enviarle un regalo de cumpleaos, lo cual es una de las prestaciones de Ja
compaa. Si el empleado no tiene hijos, n ser O pero el ciclo se ejecutar una vez y dar resultados
errneos.
La figura 5-29(b) muestra otra forma de realizar la prueba que funciona correctamente
incluso cuando n es O o menor que O. Observe que la prueba es diferente en los dos casos, de modo
que si una sola instruccin ISA realiza tanto el incremento como la prueba, los diseadores se
vern obligados a escoger un mtodo o el otro.
Considere el cdigo que se debe producir para el enunciado
for (i =O; i < n; i++) {enunciados}
356
'
CAP. 5
5.5. 7 Entrada/Salida
Ningn otro grupo de instrucciones exhibe tanta variedad de una mquina a otra como las
instruccio~es de E/S. En las computadoras personales actuales se usan tres esquemas de E/S
distintos. Estos son
l.
2.
3.
SEC. 5.5
TIPOS DE INSTRUCCIONES
357
el bit 7. Cuando esto sucede, el software lee el registro buffer del teclado para obtener el
carcter. La lectura del registro de datos del teclado hace que el bit CARCTER DISPONIBLE se ponga en O.
La salida funciona de forma parecida. Para escribir un carcter en la pantalla, el software
primero lee el registro de estado de la pantalla para ver si el bit READY vale 1. Si no, da
vueltas en un ciclo hasta que el bit se enciende, lo que indica que el dispositivo est listo para
aceptar un carcter. Tan pronto como la terminal est lista, el software escribe un carcter en
el registro buffer de pantalla, lo que hace que se transmita a la pantalla, y tambin hace que el
dispositivo apague el bit READY del registro de situacin de la pantalla. Una vez que el
carcter se exhibe y la terminal est lista para manejar el siguiente carcter, el controlador
enciende automticamente el bit READY.
Como ejemplo de E/S programada, considere el procedimiento Java de la figura 5-31.
Este procedimiento se invoca con dos parmetros: un arreglo de caracteres que se enviar a la
salida (buf[]) y el nmero de caracteres presentes en el arreglo (count), hasta lK. El cuerpo
del procedimiento es un ciclo que enva caracteres a la salida uno por uno. Para cada carcter,
primero la CPU debe esperar hasta que el dispositivo est listo, y luego se enva el carcter a la
salida. Los procedimientos in y out normalmente seran rutinas en lenguaje ensamblador para
leer y escribir los registros de dispositivo especificados por el primer parmetro, de o en la
variable especificada como segundo parmetro. La divisin entre 128 se deshace de los siete
bits de orden bajo y deja el bit READY en el bit O.
public static void output-buffer(int buf[], int count) {
11 Enviar un bloque de datos al dispositivo
int status, i, ready;
tor (i = O; i < count; i++) {
do {
status= in(display-status-reg);
ready =(status 7) & Ox01;
} while (ready == 1 );
out(display_buffer_reg, buf[i];
11 obtener situacin
11 aislar bit ready
}
Buffer de teclado
Buffer de pantalla
Carcter recibido
Carcter a exhibir
El registro de estado del teclado tiene dos bits que se usan y seis que no. El hardware
pone en 1 el bit de la izquierda (7) cada vez que llega un carcter. Si antes el software encendi el bit 6, se genera una interrupcin; si no, no (hablaremos de las interrupciones en breve).
Al usar E/S programada para obtener entradas, la CPU normalmente est dando vueltas en un
ciclo corto leyendo una y otra vez el registro de estado del teclado, esperando que se encienda
358
CAP. 5
La principal desventaja de la E/S programada es que la CPU pasa casi todo su tiempo en
un ciclo corto esperando que el dispositivo est listo. Este enfoque se llama espera activa. Si
la CPU no tiene nada ms que hacer (por ejemplo, la CPU de una lavadora de ropa), la espera
activa podra ser lo mejor (aunque incluso un controlador sencillo a menudo necesita monitorear
varios sucesos concurrentes). Pero si hay otras cosas que hacer, como ejecutar otros programas, la espera activa es un desperdicio de recursos y se necesita un mtodo de E/S distinto.
La forma de deshacerse de la espera activa es hacer que la CPU inicie el dispositivo de
E/S y le diga que genere una interrupcin cuando haya terminado. Mostraremos cmo se
hace esto con referencia a la figura 5-30. Si el software habilita el bit HABILITAR INTERRUPCIONES de un registro de dispositivo, el software puede solicitar que el hardware le enve
una seal cuando la E/S haya terminado. Estudiaremos las interrupciones con detalle en una seccin
posterior del captulo cuando lleguemos al tema de control de flujo.
Vale la pena mencionar que en muchas computadoras la seal de interrupcin se genera obteniendo
el AND del bit HABILITAR INTERRUPCIONES
y el bit READY. Si el soft- ware habilita las
interrupciones primero (antes de iniciar E/S), ocurrir una interrupcin de inmediato, porque el bit
READY ser 1. Por ello, podra ser necesario iniciar primero el dispositivo e inmediatamente
despus habilitar las interrupciones. La escritura de un byte en el registro de situacin no altera el bit
READY, pues es slo de lectura.
Aunque la E/S controlada por interrupciones es un gran adelanto en comparacin con la E/S
programada, le falta mucho para ser perfecta. El problema es que se requiere una inte- rrupcin por
cada carcter transmitido. El procesamiento de interrupciones es costoso. Nece- sitamos una forma de
deshacemos de la mayor parte de las interrupciones.
La solucin est en regresar a la E/S programada, pero encargrsela a alguien ms. (La solucin
de muchos problemas consiste en hacer que otra persona efecte el trabajo.) La figura 5-32
muestra cmo se logra esto. Hemos aadido un nuevo chip al sistema, un controla- dor de acceso directo a
la memoria (DMA, Direct Memory Access), con acceso directo al bus.
Terminal
SEC. 5.5
TIPOS DE INSTRUCCIONES
359
Para escribir un bloque de 32 bytes de la direccin de memoria 100 en una terminal (digamos,
el dispositivo 4), la CPU escribe los nmeros 100, 32 y 4 en los primeros tres registros de DMA, y
luego el cdigo de escribir (digamos, 1) en el cuarto, como se muestra en la figura 5-32. Una vez
inicializado con estos valores, el controlador de DMA emite una solicitud de bus para leer el byte 100 de la
memoria, del mismo modo como la CPU leera de la memoria. Una vez que obtiene el byte, el controlador
de DMA emite una solicitud de E/Sal dispositivo
4, para escribir el byte en l. Una vez completadas ambas operaciones, el controlador de DMA
incrementa en 1 su registro de direccin y decrementa en 1 su registro de cuenta. Si el registro de cuenta
sigue siendo mayor que O, se lee otro byte de la memoria y se escribe en el dispositivo.
Cuando la cuenta por fin llega a O, el controlador de DMA deja de transferir data y habilita
la lnea de interrupcin en el chip de CPU. Con DMA, la CPU slo tiene que inicializar unos cuantos
registros. Una vez hecho eso, queda libre para hacer otras cosas hasta que se completa la
transferencia, momento en el cual recibe una interrupcin del controlador de DMA. Algunos
controladores de DMA tienen dos, tres o ms conjuntos de registros, Jo que les permite controlar
varias transferencias simultneas.
Si bien el DMA alivia a la CPU de gran parte de la carga de E/S, el proceso no es totalmente gratuito. Si un dispositivo de alta velocidad, como un disco, se est controlando por DMA, se
requerirn muchos ciclos de bus, tanto para las referencias a la memoria como para las referen- cias al
dispositivo. Durante estos ciclos la CPU tendr que esperar (el DMA siempre tiene precedencia sobre
la CPU para usar el bus porque muchos dispositivos de E/S no pueden tolerar retrasos). El proceso por el
que el controlador de DMA quita ciclos de bus a la CPU se denomi- na robo de ciclos. No obstante, la
ganancia por no tener que manejar una interrupcin por byte
(o palabra) transferida rebasa por mucho la prdida debida al robo de ciclos.
Memoria
Contro'-~g~100
lador
RS232C
Bus
360
CAP.5
En esta seccin y las dos que siguen examinaremos los conjuntos de instrucciones de nues- tros tres
ejemplos de mquinas, el Pentium U, el UltraSPARC U y el picoJava 11. Cada una
tiene un ncleo de instrucciones que Jos compiladores normalmente generan, ms un grupo de
instrucciones que pocas veces se usan, o que slo el sistema operativo usa. En nuestra explica- cin nos
concentraremos en las instrucciones comunes. Comenzaremos con el Pentium 11.
El conjunto de instrucciones del Pentium lI es una mezcla de instrucciones que tienen sentido en
el modo de 32 bits y otras que se remontan a su anterior vida como un 8088. En la figura 5-33
mostramos algunas de las instrucciones para enteros que con ms frecuencia usan los compiladores y
programadores en la actualidad. La lista dista mucho de ser completa, pues no incluye instrucciones de
punto flotante, instrucciones de control, y ni siquiera algunas de las instrucciones para enteros ms exticas
(como usar un byte de 8 bits en AL para consultar una tabla). A pesar de todo, la lista nos da una buena
idea de las capacidades del Pentium 11.
Muchas de las instrucciones del Pentium 11 hacen referencia a uno o dos operandos, sea
en registros o en la memoria. Por ejemplo, la instruccin ADD de dos operandos suma la fuente y el
destino, y la instruccin INC de un operando incrementa su operando (le suma 1). Algunas de las
instrucciones tienen variantes ntimamente relacionadas con ellas. Por ejem- plo, las instrucciones de
desplazamiento pueden desplazar a la derecha o a la izquierda Y
dependiendo de la
naturaleza de los
opera
ndos.
Eh ta figura 5-33, los campos SRC (Source) son fuentes de informacin y no se modifi-
SEC. 5.5
361
TIPOS DE INSTRUCCIONES
Transferencia de control
Traslados
can. En contraste, los campos DST son destinos y la instruccin normalmente los modifica.
Existen reglas acerca de qu est permitido y qu no como fuente o destino, las cuales varan
de forma un tanto irregular de una instruccin a otra, pero no entraremos en detalles aqu. Muchas
instrucciones tienen tres variantes, para operandos de 8, 16 y 32 bits, respectivamen- te. stas se
distinguen por tener diferente cdigo de operacin y/o por un bit en la instruccin. En la lista de la
figura 5-33 se hace hincapi en las instrucciones de 32 bits.
Por comodidad,hemos divididolas instrucciones en varios grupos. El primer grupo contiene
instrucciones que trasladan datos dentro de la mquina, entre registros, la memoria y la pila. El
segundo grupoefectaoperaciones aritmticascon y sin signo. Para la multiplicacin y divisin, el
productoo dividendode 64 bits se guardaen EAX(parte de ordenbajo) y EDX(partede ordenalto).
El tercer grupo efecta operaciones aritmticas en decimal codificado en binario (BCD),
tratando cada byte como dos nibbles de 4 bits. Cada nibble contiene un dgito decimal (O a
9). Las combinaciones de bits 1010 a 11 l l no se usan. As, un entero de 16 bits puede conte- ner un
nmero decimal de O a 9999. Si bien esta forma de almacenamiento es poco eficiente, elimina la
necesidad de convertir entradas decimales a binario y luego otra vez a decimal para enviarlos a la
salida. Estas instrucciones sirven para realizar operaciones aritmticas con los nmeros BCD, y se
usan mucho en programas en COBOL.
Las instrucciones booleanas y de desplazamiento/rotacin manipulan los bits de una
MOV DST,SRC
JMPADDR
PUSH SRC
ADDR
POP DST
CALLADDR
LEA DST,SRC
CMOV DST,SRC
Traslado condicional
LOOPxx
DS1,DS2
Intercambiar DS 1 y DS2
Aritmtica
ADD DST,SRC
SUBDST,SRC
MULSRC
IMULSRC
SRC
acarreo a SRC
INC DST
DST
INTO
Cadenas LODS
Almacenar
Trasladar cadena
CMPS
SCAS
Examinar cadenas
Cdigos de condicin
STC
Restar 1 a DST
NEG DST
INT ADDR
Apagar
bit de
acarreo
en
reg.
Complementar bit de acarreo en reg. EFLAGS STO
CLD
Los dos grupos que siguen se ocupan de efectuar pruebas y comparaciones, para luego saltar
con base en los resultados. Los resultados de las instrucciones de prueba y comparacin se guardan
en diversos bits del registro EFLAGS. Jxx representa un conjunto de instruccio- nes de saltos
condicionales, dependiendo de los resultados de la comparacin anterior (es decir, los bits de
EFLAGS).
El Pentium 11 cuenta con varias instrucciones para cargar, almacenar, trasladar, comparar y
examinar cadenas de caracteres o palabras. Estas instrucciones pueden ir precedidas por un byte
especial llamado REP, que hace que se repitan hasta que se cumpla cierta condicin, como que
ECX, que se decrementa despus de cada iteracin, llegue a cero. Esto permite trasladar, comparar,
etc., bloques arbitrarios de datos.
El ltimo conjunto de instrucciones no puede clasificarse en ningn otro grupo. Incluyen
conversiones, administracin de pila, paro de la CPU, y E/S.
El Pentium 11 tiene varios prefijos, de los cuales ya mencionamos uno (REP). Cada uno de estos
prefijos es un byte especial que puede anteponerse a casi todas las instrucciones, anlogo a WIDE
en IJYM. REP hace que la instruccin que sigue se repita hasta que ECX sea cero, como ya
explicamos. REPZ y REPNZ ejecutan repetidamente la instruccin que sigue hasta que se enciende
el cdigo de condicin Z, o hasta que se apaga, respectivamente.
DAS
Ajuste decimal para restar AAA
Ajuste ASCII para sumar AAS
Ajuste
ASCII para restar AAM
Ajuste ASCII
para multiplicar AAD
Ajuste ASCII para
dividir
SAHF
Diversas
Booleanas
ANDDST,SRC
DST,SRC
SWAP DST
CWQ
XOR DST,SRC
NOT DST
SAUSAR DST,#
IN AL,PORT
HLT
Desplazamiento/rotacin
Parar
Aceptar un byte del puerto PORT en A OUT
Enviar un byte de AL al puerto PORT WAIT
SHUSHR DST,#
PORT,AL
ROUROR DST,#
Esperar interrupcin
RCURCR DST,#
Probar/comparar
Otros prefijos sirven para hacer que una instruccin opere en modo de 16 bits o en modo de
32 bits, lo que no slo altera la longitud de los operandos, sino que tambin redefine total- mente
los modos de direccionamiento. Por ltimo, el Pentium II tiene un esquema de seg-
SRC2
DST = destino
Figura 5-33. Algunas de las instrucciones del Pentium 11 que manejan enteros.
362
CAP. 5
mentacin complejo con segmentos de cdigo, datos, pila y extra, una reliquia del 8088. Se
incluyen prefijos para obligar a las referencias a memoria a usar segmentos especficos, pero
(por fortuna) no nos ocuparemos de stos.
CAP.5
can en la instruccin si el compilador cree que se tomar la rama o no. BPr prueba un registro y ramifica
segn la condicin detectada.
SEC. 5.5
363
TIPOS DE INSTRUCCIONES
Cargas
LOSB AOOR,OST Cargar byte con signo (8 bits) LOUB
AOOR,OST Cargar byte sin signo (8 bits) LOSH
AOOR,OST Cargar media palabra con signo (16 bits) LOUH
AOOR,OST Cargar media palabra sin signo (16 bits) LOSW
AOOR,OST Cargar palabra con signo (32 bits) LDUW
AOOR,OST Cargar palabra sin signo (32 bits) LOX
AOOR,OST
Cargar extendido (64 bits)
STB SRC,AOOR
STH SRC,AOOR
STW SRC,AOOR
STX SRC,AOOR
Almacenamientos
Almacenar byte (8 bits)
Almacenar media palabra (16 bits)
Almacenar palabra (32 bits)
Almacenar extendido (64 bits)
Aritmtica
Sumar
AOO R1 ,S2,0ST
AOOCC "
"
AOOC
AOOCCC "
SUB R1 ,S2,DST
"
SUBCC
Booleanas
ANO R1,S2,0ST
ANO booleano
ANOCC "
ANO booleano y fijar ice
ANON
"
NANO booleano ANONCC "
NANO booleano y fijar ice OR R1 ,S2,0ST
OR
booleano
"
ORCC
OR booleano y fijar ice
"
ORN
NOR booleano
"
ORNCC
NOR booleano y fijar ice
XOR R1 ,S2,0ST
XOR booleano
"
XORCC
XOR booleano y fijar ice
XNOR
"
XOR booleano
XNORCC "
XOR booleano y fijar ice
Transferencia de control
BPcc AOOR
Ramif. con prediccin
BPr SRC,AOOR
Ramif. segn registro
Sumar y fijar ice
CALL AOOR
Llamar procedimiento
Sumar con acarreo
RETURN AOOR
Regresar de procedimiento
Sumar con acarreo y fijar ice
JMPL AOOR,OST Saltar y vincular
Restar
SAVE R1 ,S2,0ST Adelantar ventana de registros
Restar y fijar ice
RESTORE "
Restaurar ventana de registros
ce = condicin
r = LZ,LEZ,Z,NZ,GZ,GEZ
SEC. 5.5
TIPOS DE INSTRUCCIONES
365
usa el formato 4 de la figura 5-14 con una distancia en palabras relativa al PC de 32 bits. Este valor
basta para alcanzar cualquier instruccin que est a menos de 2 gigabytes de Ja que invoca, en
cualquier sentido. La instruccin CALL deposita la direccin de retomo en R 15, que se convierte en
R31 despus de la llamada.
La otra forma de invocar un procedimiento es usar JMPL, que usa el formato la o lb, y
permite colocar la direccin de retomo en cualquier registro. Esta forma es til cuando la direccin
objetivo se calcula durante la ejecucin.
SAVE y RESTORE manipulan la ventana de registros y el apuntador de la pila. Ambas causan
una trampa cuando la ventana siguiente (anterior) no est disponible.
El ltimo grupo contiene diversas instrucciones. SETHI es necesaria porque no hay forma de
colocar un operando inmediato de 32 bits en un registro. La forma como se hace es usar SETH 1 para
establecer los bits del 10 al 31 y luego hacer que la siguiente instruccin proporcione los dems bits
empleando el formato inmediato.
La instruccin de cuenta de poblacin es un misterio: cuenta el nmero de bits 1 en una palabra.
Hay rumores de que es buena para simular explosiones de bombas, y que Los Ala- mos National
Laboratory (que no escatima en gastos) ve con buenos ojos las mquinas que cuentan con ella. Las
ltimas tres instrucciones son para leer y escribir registros especiales.
Varias instrucciones CISC conocidas que estn ausentes en esta lista se pueden simular usando
GO o un operando constante (formato lb). En la figura 5-35 se dan unas cuantas de ellas. El
ensamblador de UltraSPARC 11 las reconoce y los compiladores las generan con frecuencia. Muchas
de ellas aprovechan el hecho de que GO est conectado permanentemen- te a O y que escribir en l no
tiene ningn efecto.
el conjunto de
instrucciones NM completo, con sus 226 instrucciones, adems de 115 instrucciones extra cuyo propsito
es implementar C, C++ y el sistema operativo. Nos concentraremos primordialmente en las instrucciones
JVM, ya que stas son las nicas que produce el compilador de Java. La ISA JVM no tiene registros
visibles para el usuario ni las dems caractersticas que la mayor parte de las CPU tienen en comn. (El
picoJava II tiene 64 registros en el chip para el tope de la pila, pero los programas de usuario no pueden
verlos.) Casi todas las instrucciones de JVM meten palabras en la pila, operan con palabras que ya estn en
la pila, y obtienen palabras de la pila.
El hardware de picoJava 11 ejecuta directamente la mayor parte de las instrucciones JVM, pero unas
cuantas estn microprogramadas, y otras pocas saltan a travs de una trampa a un manejador en
software para su ejecucin. As, se requiere un sistema de tiempo de ejecucin pequeo en el nivel ISA
para que la mquina funcione, pero este sistema de tiempo de ejecu- cin es mucho ms pequeo que
el intrprete JVM completo y no se invoca muy a menudo. Dicho sistema contiene cdigo para interpretar
unas cuantas instrucciones complejas, el cargador de clases, el verificador de cdigos de byte, el gestor
de lneas y el recolector de basura.
366
typeLOAD IND8
typeALOAD
BALOAD
Apilar elemento
IF_ACMPEQ OFFSET16
Ramif.
de arreglo
IF_ACMPNE OFFSET16
Ramif. si apunt.
SALO AD
IFrel
CALO AD
AALOAD
Cargas
Apilar variable
Apilar apuntador
local
Almacenamientos
OFFSET16
si 2 apunt. iguales
CAP. 5
distintos
IFNULL OFFSET16
Ramif. si apunt. nulo
Comparacin
de un arreglo
IFNONNULL OFFSET16
Ramif. condicional
si apunt. no nulo
IF_ICMPrel OFFSET16
Ramificacin
LCMP
Comparar dos longs
FCMPL
Instruccin
Cmo hacerlo
MOV SRC,DST
GO
NEG DST
SUB 1 de
OR GO con GO y
guardar en DST
NOP
SETHI GO a O
RET
JMPL %17+8,%GO
Figura 5-35. Algunas instrucciones UltraSPARC II simuladas.
typeALOAD,
TIPOS DE INSTRUCCIONES
367
todas precargarse
las cuales almacenan
elementos
de un yarreglo
la pila.
En los cuatro
la pila
debe
con un apuntador
al arreglo
con el en
ndice
del elemento.
Estascasos,
instrucciomanera; la nica diferencia radica en el nmero de palabras que se apilan y en el tipo del valor.
nes desapilan el ndice y el apuntador, realizan el clculo necesario para localizar el elemento, y luego meten el elemento en la pila. El clculo necesita conocer el tamao de los
elementos,
SEC. 5.5
typeSTORE IND8
en var local
typeASTORE
BASTORE
Comparar
2 floats
DCMPL
Comparar
doubles si <
DCMPG
SASTORE
CASTOR E
IND16
AASTORE
Invocacin
de mtodo INVOKEINTERFACE
Invocacin
de mtodo
BIPUSH CON8
Empilado
Apilar constante pequea
SIPUSH
CON16
LDC IND8
typeCONST _#
Apilar constante
_NULL
inmediata ACONST
typeADD
Sumar
typeSUB
Restar
typeMUL
Multiplicar
Dividir
typeREM
Residuo
typeNEG
Negar
de control INVOKEVIRTUAL
IND16
..
RETURN
Devolver void
RET IND8
Regresar
GOTO OFFSET16
Ramif. incondicional
ANEWARRAY
NEWARRAY
de finally
ATYPE
IN16,[
ARRAYLENGTH
llNC IND8,CON8
ANO booleano
WIDE
ilOR
OR booleano
ilXOR
OR EXCLUSIVO booleano
ilSHL
-Desplazamiento
a la izq. ilSHR
variable
local
Prefijo ancho
NOP
Desplazamiento a la der.
Desplazam.
IND16
MULTINEWARRAY
Booleanas/desplazamiento
ilUSHR
Transferencia
Arreglos
typeDIV
ilAND
si >
FCMPG
IND16
IND16
IND16
Obt.
Crear
Conversin
objeto nuevo
INST ANCEOF OFFSET16
x2y
Convertir x en y
CHECKCAST
i2c
ATHROW
ABLESWITCH
Gestin de pila
Desapilar
Lanzar excepcin
LOOKUPSWITCH
DUPxx
IND16
Desapilar
Intercambiar
...
...
MONITORENTER
Ingresar en monitor
MONITOREXIT
Salir de monitor
type, x, y= 1, L, F, D
OFFSET16 para ramtt.
que est implcito en el tipo. Estas instrucciones obtienen el ndice del arreglo de la pila, por lo que
la instruccin misma no tiene operando.
Las ltimas cuatro instrucciones de este grupo tambin son para elementos de arreglo, pero de
otros tipos: manejan byte (8 bits), short (16 bits), char (16 bits) y pointer (32 bits). As, hay un total
de 12 instrucciones LOAD en este grupo.
Las instrucciones typeSTORE funcionan igual que las instrucciones typeLOAD, pero en el
otro sentido. Todas obtienen un elemento de la pila y lo guardan en una variable local.
Las instrucciones de empilado meten valores en la pila. Ya vimos BIPUSH. SIPUSH hace lo
mismo, slo que con un nmero de 16 bits. LDC almacena en la pila un valor de la reserva de
constantes. La siguiente instruccin representa todo un grupo de instrucciones inmediatas, de los
cuatro tipos bsicos (integer, long, jloat y double ). Todas consisten nica- mente en un cdigo de
operacin y cada cdigo almacena un valor especfico en la pila. Por ejemplo, ICONST_O (cdigo
Ox03) almacena una palabra O de 32 bits en la pila. Desde luego, puede hacerse la misma cosa
con BIPUSH, pero usando dos bytes. Al optimar los casos ms comunes, se reduce el tamao de
los programas JVM. Los valores que se manejan son los enteros -1, O, 1, 2, 3, 4, 5, los longs O y 1,
los floats O.O, 1.0 y 2.0, y los doubles O.O y
1.0. De forma similar, CONST_NULL almacena un apuntador nulo en la pila. La combina- cin de
cdigos de operacin con las direcciones ms comunes en una instruccin de un solo byte reduce
considerablemente el tamao del programa, ahorra memoria y acorta el tiempo que toma transportar
programas binarios en Java por Internet.
Las operaciones aritmticas son totalmente regulares, con seis operaciones para cada uno de
los cuatro tipos bsicos. Las tres operaciones booleanas y las tres de desplazamiento slo estn
disponibles para integers y longs. Tener una instruccin para efectuar un AND bit por bit con
nmeros de punto flotante habra sido contrario a las estrictas reglas de tipificacin de la JVM. La
entrada x2y de la tabla representa una matriz 4 x 4 de instrucciones de conver- sin. Valores de cada
tipo se pueden convertir a cada uno de los otros tipos (pero no al mismo tipo), as que hay 12
instrucciones aqu. Una instruccin representativa es 12F, que convierte un integer en un float.
El grupo de gestin de pila tiene instrucciones para duplicar el valor o los dos valores del tope,
colocarlos en diversos lugares de la pila (no siempre en el tope). Otras instrucciones
sacan valores de la pila, e intercambian los dos valores del tope.
CAP.5
Las instrucciones del grupo de comparacin sacan uno o dos valores de la pila y los examinan.
Cuando se sacan dos valores de la pila, se restan y se prueba el resultado. Cuando se saca un solo
valor, se prueba su valor. El sufijo rel representa Jos operadores relacionales LT, LE, EQ, NE, GE y
GT. Las instrucciones que tienen una distancia toman la rama si la prueba se satisface. Las dems
meten un resultado de vuelta en Ja pila.
El siguiente grupo permite invocar procedimientos y devolver valores. Vimos versiones
muy simplificadas de INVOKEVIRTUAL e IRETURN en IJVM. Las versiones completas tienen
muchas ms opciones, y hay varias instrucciones para cubrir muchos casos. Una expli- cacin
completa rebasara el alcance de este libro. Si quiere conocer toda la historia, vea Lindholm y
Yellin (1997).
El siguiente grupo contiene cuatro instrucciones para crear arreglos unidimensionales y
multidimensionales y preguntar por sus longitudes. Los arreglos se guardan en el montculo en JVM
y se recolectan dinmicamente como basura cuando ya no se necesitan.
El ltimo grupo es una coleccin miscelnea, cada una con un propsito especfico
relacionado con alguna caracterstica del lenguaje Java. Su explicacin rebasa el alcance de este
libro.
Hablemos ahora un poco acerca del nivel ISA del picoJava II. Se trata de una mquina
big endian (aunque hay unas cuantas instrucciones que se puede hacer que funcionen como Jittle
endian). Las palabras son de 32 bits, aunque hay instrucciones para manejar cantidades de 8, 16 y 64
bits. La pila crece hacia abajo en la memoria, de direcciones altas a direcciones bajas, al contrario
que en IJVM (la especificacin de JVM permite las dos cosas).
El picoJava II se dise para ejecutar programas en C y C++ adems de programas en
Java. Sin embargo, para hacerlo se requiere un compilador que convierta C o C++ a la ISA del
picoJava II. Una vez compilado a JVM un programa en C o C++, todas las optimaciones de
hardware que describimos en el captulo 4 para Java (como el plegado) tambin aplican aC o C++.
Para poder ejecutar programas en C y C++ en el picoJava 11, se aadieron 115 instrucciones al nivel ISA. Casi todas tienen dos o ms bytes de longitud y comienzan con uno de dos cdigos
de operacin JVM reservados (OxFE y OxFF)para indicar que sigue una instruccin extendida. A
continuacin presentaremos un breve resumen de las caractersticas ajenas a la JVM del picoJava 11
en el nivel ISA.
El picoJava 11 tiene 25 registros de 32 bits. Cuatro de ellos son funcionalmente equivalentes a Jos registros PC, LV, SP y CPP de IJVM. El registro OPLIM establece un lmite para
SP. Si SP rebasa OPLIM, ocurre una trampa. Esta caracterstica sirve para poder repre- sentar la pila
como una lista enlazada de trozos de pila, en lugar de un bloque contiguo de la memoria. El registro
FRAME marca el final de las variables locales y apunta a la palabra que contiene el contador de
programa del procedimiento invoc;..Ior.
Hay otros registros, como la palabra de situacin del programa, un registro que se mantiene al tanto de hasta dnde se ha llenado la cach de pila de 64 registros, y cuatro registros que
sirven para gestin de hilos. Tambin hay cuatro registros para trampas y puntos de ruptura, y
cuatro registros que los programas en C y C++ usan para invocar procedimientos y devolver valores.
Puesto que el picoJava II no tiene memoria virtual, dos registros acotan la parte de la memoria a la
que el programa vigente puede accesar, a fin de limitar los daos que
SEC. 5.5
TIPOS DE INSTRUCCIONES
369
podra causar un programa en C o C++ desbocado. Otros registros contienen el nmero de versin e
informacin sobre la configuracin del hardware.
Las instrucciones extendidas pertenecen a cinco categoras amplias. Primero estn las
instrucciones para leer los registros anteriores y escribir en ellos. Luego vienen las instruc- ciones
para manipular apuntadores. stas permiten leer o escribir palabras arbitrarias en la memoria. Casi
todas sacan una direccin de mquina de Ja pila y luego almacenan en Ja pila el byte, short, palabra,
etc., que est en esa direccin. Tales instrucciones violan descaradamen- te la seguridad de tipos de
Java, pero se necesitan para C y C++.
En tercer lugar estn las instrucciones tiles para programas en C y C++, como las que
invocan procedimientos y regresan de ellos sin usar las instrucciones JVM (de trabajo pesa- do). En
cuarto Jugar estn las instrucciones que manejan el hardware, como por ejemplo Ja cach. Luego
vienen varias instrucciones de diversa ndole, como para diagnstico al encen- der la mquina. Claro
que los programas que usan estas instrucciones extra no se pueden transportar a otras plataformas
JVM.
2.
3.
Dados Jos modernos avances tecnolgicos, nadie diseara ahora una mquina tan irregular con tan
pocos registros, todos distintos. Esto dificulta la escritura de compiladores. La falta de registros
tambin obliga a Jos compiladores a verter constantemente variables en la memo- ria y Juego
volverlas a cargar: actividades muy costosas aun con dos o tres niveles de cach. Es un tributo a la
calidad de los ingenieros de Intel que el Pentium 11 sea tan rpido, aun con las restricciones de esta
ISA. Sin embargo, como vimos en el captulo 4, la implementacin es en extremo compleja y
requiere dos veces ms transistores que el picoJava 11 y casi 50% ms que el UltraSPARC II.
El UltraSPARC II representa lo ms moderno en diseos de ISA: cuenta con una ISA
cabal de 64 bits (con un bus de 128 bits); tiene muchos registros, y un conjunto de instruccio370 -~
CAP.5
nes que hace hincapi en las operaciones de tres registros, adems de un pequeo grupo de
instrucciones LOAD y STORE. Todas las instrucciones tienen el mismo tamao, aunque el nmero
La JVM es harina de otro costal. La ISA se dise originalmente de modo que las applets
(programas pequeos) se pudieran transmitir por Internet e interpretarse en software de for- ma
eficiente en el destino. Tambin es un diseo para un solo lenguaje. Esto llev al uso de una pila e
instrucciones cortas pero de longitud variable con una densidad elevada (un pro- medio de slo 1.8
bytes por instruccin). Construir un dispositivo de hardware que realmente ejecutara una instruccin
JVM a la vez, haciendo dos o tres referencias a la memoria en cada instruccin, sera un desastre en
trminos de desempeo. Sin embargo, al colocar una pila de
64 palabras en el chip y plegar muchas instrucciones para convertir sucesiones enteras en
instrucciones RISC modernas de tres direcciones, el picoJava lI logra tomar una ISA muy
CAP.5
5.6.2 Procedimientos
La tcnica ms importante para estructurar programas es el procedimiento. Desde un punto de vista,
una llamada a un procedimiento altera el flujo de control como lo hace una ramifica- cin pero, a
SEC. 5.6
FLUJO DE CONTROL
371
Cll
E
O>e'.
o.
e
eo
o.
CI)
"O
"O
.l!l
Q)
"O
"O
.l!l
e:
e:
Saltos
Tiempo
Tiempo
(a)
(b)
Si un programa contiene ramificaciones, esta sencilla relacin entre el orden en que las
instrucciones aparecen en la memoria y el orden en que se ejecutan deja de ser real. Cuando hay
ramificaciones, el contador de programa deja de ser una funcin monotnicamente cre- ciente del
tiempo, como se muestra en la figura 5-37(b). El resultado es que no es fcil visualizar la secuencia
de ejecucin de las instrucciones a partir del listado del programa. Cuando los programadores tienen
dificultades para ver claramenteel orden en que el procesador ejecutar las instrucciones, tienden a
cometer errores. Esta observacin llev a Dijkstra ( 1986a) a escribir la carta, que tanta controversia
caus, intitulada "El enunciado GOTO se considera perjudicial", en la que sugera evitar los
enunciados gato. Esa carta dio origen a la revolucin de la programacin estructurada, uno de cuyos
preceptos es la sustitucin de enunciados goto por formas ms estructuradas de control de flujo,
como los ciclos while. Desde luego, la compilacin de estos programas produce programas de nivel
2 que podran contener muchas ramificaciones, porque la implementacin de if, while y otras
estructuras de control de alto nivel requiere ramificaciones.
diferencia de sta, cuando el procedimiento termina su tarea devuelve el control al enunciado o
instruccin que sigue a la llamada.
Desde otro punto de vista, el cuerpo de un procedimiento puede verse como la definicin
de una nueva instruccin en un nivel ms alto. Desde esta perspectiva, una llamada a un
procedimiento
puede verse como una sola instruccin, aunque el procedimiento
sea muy
complicado. Para entender un fragmento de cdigo que contiene una llamada a un procedi- miento,
basta con saber qu hace, no cmo lo hace.
SEC. 5.6
FLUJO DE CONTROL
373
La solucin para transferir n discos de la varilla 1 a la 3 consiste en trasladar primero n 1 discos de la varilla 1 a la 2, luego trasladar un disco de la varilla 1 a la 3, y por ltimo trasladar
n - 1 discos de la varilla 2 a la 3. Esta solucin se ilustra en la figura 5-39.
Estado inicial
,~
1~
,
!fr.,
ITT.
_L_
Primero pasar
2 discos de la
varilla 1ala2
decir, un procedimiento que se llama a s mismo, sea directamente o por medio de una cadena de
procedimientos distintos. El estudio de procedimientos recursivos ayuda mucho a entender cmo se
implementan las llamadas a procedimientos, y qu son realmente las variables lo- cales. A
continuacin veremos un ejemplo de procedimiento recursivo.
Las "Torres de Hanoi" son un antiguo problema que tiene una solucin recursiva sencilla. En cierto monasterio de Hanoi hay tres varillas de oro. Ensartadas en la primera haba una serie
de 64 discos de oro concntricos, cada uno con un agujero en el centro para la va- rilla. Cada disco
tiene un dimetro un poco menor que el del disco que est inmediatamente abajo. Las varillas segunda
y tercera estaban vacas inicialmente. Los monjes del lugar estn ocupados transfiriendo todos los discos
a la varilla 3, un disco a la vez, slo que en ningn mo- mento un disco mayor puede descansar sobre
uno ms pequeo. Se dice que cuando los mon- jes terminen, el mundo llegar a su fin. Si quiere
adquirir alp de experiencia prctica, puede usar discos de plstico y menos discos, pero cuando
resuelva el problema no suceder nada. Para lograr el efecto de fin-del-mundo se necesitan 64 discos, y
de oro. La figura 5-38 muestra
la configuracin inicial para n 5 discos.
'
Luego pasar
{ un
disco de la varilla 1
a la 3
Varilla 1
Varilla 2
Varilla 3
~
Figura 5-39. Pasos necesarios para resolver las Torres de Hanoi con tres discos.
Figura 5-38. Configuracin inicial del problema de las Torres de Hanoi con cinco discos.
torres(n,i, j)
374
CAP. 5
375
FLUJO DE CONTROL
SEC. 5.6
se imprimir la solucin.
procedimiento
primero
si n =a un
l. Si
es as, la solucin
es trivial.
namos,Elcada
una de las cuales
es prueba
una llamada
procedimiento
recursivo.
Basta con pasar el disco de i aj. Sin -1= l , la solucin consiste en las tres partes que ya mencio
La solucin completa se muestra en la figura 5-40. La llamada
SP
-- --
torres(3, 1, 3)
Viejo FP = 1024
k
Dir. retorno
j=3
SP
i =1
FP
SP
!+-
FP
n = 1
k=3
k=3
.-
_..
1056
i = 1
n = 1
k=3
1048
1044
1052
para resolver el problema de la figura 5-39 genera tres llamadas ms, a saber,
Viejo FP = 1000
torres(2, 1, 2) torres(1, 1,
3) torres(2, 2, 3)
:=: Viejo
FP = 1000
Viejo FP = 1000
z; Viejo FP = 1000
1040
La primera y la tercera generan tres llamadas cada una, para un total de siete.
torres(1, i, j);
torres(n - 1, k, j);
}
}
Figura 5-40. Procedimiento para resolver las Torres de Hanoi.
Para tener procedimientos recursivos necesitamos una pila en la cual guardar los par- metros
y variables locales de cada invocacin, como la que tenamos en IJVM. Cada vez que se invoca un
procedimiento, se asigna un nuevo marco de pila para el procedimiento en el tope de la pila. El
marco de creacin ms reciente es el marco vigente. En nuestros ejemplos la pila crece hacia arriba,
de direcciones de memoria baja a direcciones altas, igual que en IJVM.
Adems de apuntador de pila, que apunta al tope de la pila, suele ser conveniente tener un
apuntador de marco, FP (Frame Pointer), que apunta a una posicin fija dentro del marco. Podra
apuntar al apuntador de enlace, como en IJVM, o a la primera variable local. La figura
5-41 muestra el marco de pila para una mquina con palabras de 32 bits. La llamada original
a torres mete n, i y j en la pila y luego ejecuta una instruccin CALL que mete la direccin de
retomo en la pila, en la direccin 1012. Al entrar, el procedimiento invocado guarda el valor viejo
de FP ( l 000) en la pila en l O 16 y luego adelanta el apuntador de pila a modo de asignar espacio
para las variables locales. Ya que slo hay una variable local de 32 bits (k), SP se incrementa en 4,
a 1020. En la figura 5-4l(a) se muestra la situacin despus de hacerse todas estas cosas.
Lo primero que un procedimiento debe hacer cuando se le invoca es guardar el FP ante- rior
(para poder restaurarlo cuando se salga del procedimiento), copiar SP en FP, y tal vez
376
CAP.5
incrementarlo en una palabra, dependiendo de la parte del nuevo marco a la que FP apunta. En este
ejemplo, FP apunta a la primera variable local, pero en IJVM, LV apuntaba al apun- tador de
enlace. Las diferentes mquinas manejan el apuntador de marco de forma un poco distinta; a veces
lo colocan en la base del marco de pila, a veces hasta arriba y a veces a la mi- tad como en la figura
5-41. En este sentido, vale la pena comparar la figura 5-41 con la figura
4-12 para ver dos formas distintas de manejar el apuntador de enlace. stas no son las nicas
formas. En todos los casos, la clave es la capacidad para efectuar despus un retomo de
procedimiento y restaurar la pila al estado que tena justo antes de la llamada a procedimiento en
curso.
El cdigo que guarda el apuntador de marco viejo, ajusta el nuevo apuntador de marco y
adelanta el apuntador de pila a fin de reservar espacio para las variables locales se llama prlogo
del procedimiento. Cuando se sale del procedimiento, es preciso volver a limpiar la pila, es lo que
se conoce como eplogo del procedimiento. Una de las caractersticas ms importantes de
cualquier computadora es cun cortos y rpidos puede hacer al prlogo y al eplogo. Si son largos
y lentos, las llamadas a procedimiento sern costosas. Los programa- dores que veneran la
eficiencia aprenden a evitar la escritura de muchos procedimientos cor- tos y prefieren escribir
programas grandes, monolticos, no estructurados. Las instrucciones ENTER y LEAVE del
Pentium 11 se disearon a modo de efectuar la mayor parte de las tareas del prlogo y eplogo de
los procedimientos de manera eficiente. Desde luego, esas instrucciones tienen un modelo
especfico de la forma en que debe manejarse el apuntador de marco, y si el compilador tiene un
modelo diferente, no pueden usarse.
Volvamos al problema de las Torres de Hanoi. Cada llamada de procedimiento aade un
nuevo marco a la pila, y cada retomo de procedimiento elimina un marco de la pila. A fin de
SEC. 5.6
j =2
=1
finalizada i esa
ilustrar el uso de una pila al implementar procedimientos recursivos, seguiremos la pista a las
llamadas, comenzando con
torres(3, 1 , 3)
La figura 5-41(a) muestra la pila inmediatamente despus de que se efecta esta llamada. Lo
primero que hace el procedimiento es probar sin== 1, y al descubrir que n == 3 sustituye k por su
valor y efecta la llamada
torres(2, 1, 2)
SP
FP
377
FLUJO DE CONTROL
Dir. retorno
Dir. retorno
Dir. retorno
j = 2
=2
i = 1
Una vez
llamada, la
FP en el n=2
pila est
estado que se n=2
k
k=2
muestra en la figura 5-4l(b) y el
Viejo FP
Viejo FP
Viejo FP
procedimiento
vuelve
a comenzarDir. retorno
Dir.
retorno
Dir. retorno
desde
el
principio
(un j = 3
j =3
i=1
i= 1
procedimiento
invocado
siempre i = 1
n=3 Esta .....
n=3 en el principio).
inicia
vez la n=3
prueba
(b) tambin, por (c)
(a) de n == 1 falla
i = 1
n=2
Dir. retorno
La
torres(1,k=21, 3)
1020
1016
Dir.
1012tiene
eseretorno
momento
Viejo FP
pila en
el
1008 en la
muestra
1004
el contador
de
....
1000
programa apunta al principio
j = 3 aspecto que j se
=3
i = 1
i= 1
figura
5-41(c)
y
n=3
n=3
(d)
1036
1032
k=2
Viejo FP
Dir. retorno
j=2
(e)
del procedimiento. Esta vez la prueba tiene xito y se imprime una lnea. Luego, el procedimiento
regresa eliminando un marco de pila y restableciendo FP y SP a la figura 5-41(d). A continuacin, el
procedimiento contina su ejecucin en la direc- cin de retomo, que es la segunda llamada:
torres(1, 1, 2)
Esto aade un nuevo marco a la pila como se muestra en la figura 5-41(e). Se imprime otra lnea;
despus del retomo se elimina un marco de la pila. Las llamadas a procedimientos continan de
esta manera hasta que termina de ejecutarse la llamada original y el marco de la figura 5-41(a) se
elimina de la pila. Para entender mejor cmo funciona la recursin, se reco- mienda al lector simular
la ejecucin completa de
(a)
Procedimiento
invocador
(b)
Procedimiento
invocado
Se invoca A-+-+-----,
desde el
programa
principal
torres(3, 1 , 3)
usando lpiz y papel.
A regresa-~f----' al
programa principal
Figura 5-42. Cuando se invoca un procedimiento, la ejecucin del procedimiento siempre
inicia en el primer enunciado del procedimiento.
5.6.3 Corrutinas
En la secuencia de invocacin normal, hay una distincin clara entre el procedimiento que invoca
y el procedimiento invocado. Considere un procedimiento A, que llama a un procedi- miento B en
la figura 5-42.
El procedimiento B calcula durante un rato y luego regresa a A. A primera vista podra- mos
pensar que esta situacin es simtrica, porque ni A ni B son el programa principal; ambos son
procedimientos. (El procedimiento A pudo haber sido llamado por el programa principal, pero eso
no viene al caso.) Adems, el control se transfiere primero de A a B-la llamada-y luego se
transfiere de B a A -el retomo.
La asimetra surge del hecho de que cuando el control pasa de A a B, el procedimiento B
comienza a ejecutarse al principio; cuando B regresa a A, la ejecucin no inicia al principio de
378
(a)
invoca ----+---~
A desde el
programa principal
(b) Se
CAP.5
A, sino en el enunciado que sigue a la llamada. Si A trabaja durante un rato y luego vuelve a invocar
a B, la ejecucin inicia otra vez al principio de B, no en el enunciado que sigue al retomo anterior.
Si, durante su ejecucin, A llama a B muchas veces, B iniciar al principio en cada ocasin, mientras
que A nunca vuelve a iniciar.
Esta diferencia se refleja en el mtodo por el cual se transfiere el control entre A y B. Cuando
A llama a B, usa la instruccin de llamada a procedimiento, la cual coloca la direc- cin de retomo
(es decir, la direccin del enunciado que sigue a la llamada) en algn lugar til; digamos, en el tope de
la pila. Luego, la instruccin coloca la direccin de B en el contador de programa para completar
la llamada. Cuando B regresa, no usa la instruccin de llamada, sino la de retomo, que simplemente
saca la direccin de retomo de la pila Y la coloca en el contador de programa.
SEC. 5.6
FLUJO DE CONTROL
379
contenido del contador de programa en la pila, y por ltimo copiara el registro interno en el
contadorde programa. Dado que se saca una palabra de la pila y se mete una palabra en ella, el
apuntador de pila no cambia. Esta instruccin casi nunca existe, por lo que en la generalidad de los
casos se tiene que simular con varias instrucciones.
5.6.4 Trampas
A regresa
al programa
principal
Figura 5-43. Cuando se reanuda una corrutina, la ejecucin inicia en el enunciado donde
se suspendi en la ocasin anterior, no al principio.
A veces resulta til tener dos procedimientos, A y B, cada uno de los cuales invoca al otro como
procedimiento, como se muestra en la figura 5-43. Cuando B regresa a A, salta al enunciado que
sigue a la llamada a B, igual que antes. Cuando A transfiere el control a B, pasa no al principio
(excepto la primera vez) sino al enunciado que sigue al "retomo" ms recien- te, es decir, la llamada
ms reciente de A. Dos procedimientos que funcionan de esta forma se llaman corrutinas.
Un uso comn de las corrutinases simular un procesamientoen paralelo con una sola CPU. Cada
corrutina se ejecuta en seudoparalelo con las otras, como si tuviera su propia CPU. Este estilo de
programacin facilita la implementacin de algunas aplicaciones, y tambin es til para probar
software que despus se ejecutar en un multiprocesador.
Ni la llamadaCALLnormal ni la instruccinRETURN normal sirvenpara llamar corrutinas, ya
que la direccin a la que se saltar proviene de la pila como en un retomo pero, a diferencia de un
retomo, la llamada a la corrutina misma coloca una direccin de retomo en algn lugar para el
regreso subsecuente a ella. Sera bueno contar con una instruccin que intercambiara el tope de la
pila y el contador de programa. En detalle, esta instruccin primero sacara la antigua direccin de
retomo de la pila y la colocara en un registro interno, luego metera el
Una trampa es una especie de llamada a procedimiento automtica iniciada por alguna con- dicin
causada por el programa, casi siempre una condicin importante pero que raras veces ocurre. Un
buen ejemplo es un desbordamiento. En muchas computadoras, si el resultado de una operacin
aritmtica excede el nmero ms grande que se puede representar, ocurre una trampa, lo que
significa que el flujo de control se conmuta a alguna posicin de memoria fija en lugar de continuar
en sucesin. En esa posicin fija hay una ramificacin a un procedi- miento llamado manejador de
trampas que realiza alguna accin apropiada, como exhibir un mensaje de error. Si el resultado de
una operacin est dentro del intervalo, no ocurre ninguna trampa.
La caracterstica fundamental de una trampa es que es iniciada por alguna condicin especial
causada por el programa mismo y detectada por el hardware o el microprograma. Un mtodo
alternativo para manejar el desbordamiento es tener un registro de un bit que se enciende cada vez
que ocurre un desbordamiento. Un programador que quiera verificar si hubo o no desbordamiento
deber incluir una instruccin explcita "saltar si el bit de desbor- damiento est encendido" despus
de cada instruccin aritmtica. Esto es lento y desperdicia espacio. Las trampas ahorran tiempo y
memoria en comparacin con las verificaciones expl- citas controladas por el programador.
La trampa pod a implementarse con una prueba explcita efectuada por el microprograma (o el
hardware). Si se detecta un desbordamiento, Ja direccin de la trampa se carga en el contador de
programa. Lo que en un nivel es una trampa podra estar bajo el control del progra- ma en un nivel
ms bajo. Hacer que el microprograma realice la prueba ahorra tiempo en com- paracin con una
prueba del programador, porque se puede traslapar fcilmente con alguna otra cosa. Tambin se
ahorra memoria, porque slo necesita ocurrir en un Jugar, digamos el ciclo principal del
microprograma, sin importar cuntas instrucciones aritmticas haya en el programa principal.
Algunas de las condiciones comunes que pueden causar trampas son el desbordamiento de
punto flotante, el subdesbordamiento de punto flotante, el desbordamiento de enteros, una violacin
de la proteccin, un cdigo de operacin no definido, un desbordamiento de la pila, un intento por
iniciar un dispositivo de E/S inexistente, un intento por traer una palabra de direccin impar, y una
divisin entre cero.
5.6.5 Interrupciones
380
CAP.5
Las interrupciones son cambios en el flujo de control causados no por el programa en ejecu- cin
sino por otra cosa, casi siempre relacionada con E/S. Por ejemplo, un programa podria ordenar al
disco que comience a transferir informacin, y que genere una interrupcin apenas
interrumpido. El proceso interrumpido se debe reiniciar en el mismo estado exac- tamente en el que
estaba cuando ocurri la interrupcin, lo que implica restaurar todos los registros internos a su estado
previo a la interrupcin.
La diferencia fundamental entre las trampas y las interrupciones es sta: las trampas son
SEC. 5.6
FLUJO DE CONTROL
381
9.
Ahora puede leerse cualquier otra informacin que haya acerca de la interrupcin,
como cdigos de situacin.
. ......
382
1.
2.
Tan pronto como la CPU est lista para manejar la interrupcin, habilita una seal de
reconocimiento de interrupcin en el bus.
3.
Cuando el controlador de dispositivo ve que su seal de interrupcin ha sido reconocida, coloca un entero pequeo en las lneas de datos para identificarse. Este
nmero se llama vector de interrupcin.
4.
5.
Luego la CPU almacena el contador de programa y la palabra de estado del programa (PSW) en la pila.
6.
CAP. 5
~:-;;:
e:
~:;
, ..
} )::
:
;
., .,,.
14. Se ejecuta la instruccin RETURN FROM INTERRUPT (regresar de interrup-S ;;~ cin),
que coloca la CPU otra vez en el modo y el estado en que estaba antes de laS interrupcin.
La computadora contina con lo que estaba haciendo.
Un concepto fundamental relacionado con las interrupciones es la transparencia. Cuando
ocurre una interrupcin se efectan algunas acciones y se ejecuta cierto cdigo, pero una vez que
todo ha terminado la computadora deber volver al mismo estado exactamente en el que estaba
antes de la interrupcin. Se dice que una rutina de interrupcinque tiene esta propiedades
transparente. Si todas las interrupciones son transparentes es mucho ms fcil entenderlas.
Si una computadora slo tiene un dispositivo de E/S, las interrupciones siempre funcio- nan
como acabamos de describirlas, y no tenemos ms que decir al respecto. Sin embargo, una
computadora grande podra tener muchos dispositivos de E/S, y varios podran estar operando al
mismo tiempo, tal vez para diferentes usuarios. Existe una probabilidad finita de que mientras se
est ejecutando una rutina de interrupcin, un segundo dispositivo de E/S quiera generar su
interrupcin.
Este problema se puede atacar de dos maneras. La primera es que todas las rutinas de
interrupcininhabiliten las interrupcionessubsecuentes como primer paso, aun antes de guardar los
registros. Tal estrategia simplifica las cosas, ya que entonces las interrupciones se proce-
:: . ,
j
1
.
san en sucesin, pero puede causar problemas en el caso de dispositivos que no pueden tole- rar
mucho retraso. Por ejemplo, en una lnea de comunicacin de 9600 bps llegan caracteres cada 1042
s, estemos o no listos para recibirlos. Si el primero todava no se ha procesado cuando llega el
segundo, se podran perder datos.
Cuando una computadora tiene dispositivos de FJS para los que el tiempo es crtico, una
mejor estrategia de diseo es asignar a cada dispositivo de FJS una prioridad, alta para los disposi- tivos
crticosy baja para los ms tolerantes de retrasos. La CPU deber tener tambin prioridades, generalmente
determinadas por un campo de la PSW. Cuando un dispositivo con prio- ridad n interrumpe, la
rutina de interrupcin tambin deber ejecutarse con prioridad n.
Mientras una rutina de interrupcin con prioridad n se est ejecutando, se har caso omiso de
cualquier intento de un dispositivo con ms baja prioridad de causar una interrupcin, hasta que la
rutina termine y la CPU regrese para ejecutar un programa de usuario (prioridad 0). En cambio, las
interrupciones de dispositivos con ms alta prioridad se procesan sin retraso.
Ahora que las rutinas de interrupcin mismas estn sujetas a interrupciones, la mejor ma- nera de
organizar la administracin es asegurarse de que todas las interrupciones sean transpa- rentes.
Consideremos un sencillo ejemplo de mltiples interrupciones. Una computadora tiene tres dispositivos
de E/S, una impresora, un disco y una lnea RS232, con prioridades 2, 4 y 5, respectivamente. En un
principio (t =O) se est ejecutando un programa de usuario. En t = 10 ocurre una interrupcin de
impresora. Se pone en marcha la rutina de servicio de interrupcin (ISR, Interrupt Service Routine) de
la impresora, como se muestra en la figura 5-44.
Interrupcin de disco prioridad 4 queda
pendiente
ISR de RS232 termina ocurre
interrupcin de disco
Interrupcin RS232
prioridad 5
Interrupcin de
impresora prioridad 2
10
j
15
20
25
35
1
----
RS232
1
1
lusuariol
:
1
1
disco
1
1
Usuario
lm resora
: impre- :
1
1
sora
1
1
Usuario
lm resora
383
Un poco despus, en t = 20, el disco termina y quiere que lo atiendan. Sin embargo, su prioridad
(4) es menor que la de la rutina de interrupcin que se est ejecutando (5), por lo que el hardware de
la CPU no reconoce la interrupcin, y queda pendiente. En t = 25 termina la rutina de RS232, por lo
que la mquina regresa al estado en el que estaba justo antes de que ocurriera la interrupcin de
RS232, es decir, ejecutando la rutina de servicio de interrupcin de la impresora con prioridad 2. Tan
pronto como la CPU cambia a prioridad 2, antes de que pueda ejecutarse siquiera una instruccin, se
permite la entrada de la interrupcin de disco con prioridad 4, y se ejecuta la rutina de servicio de
disco. Cuando esta rutina termina, la rutina de la impresora puede continuar. Por ltimo, en t = 40,
todas las rutinas de servicio de interrupcin han terminado y el programa de usuario contina desde
donde se qued.
Desde el 8088, los chips de CPU de Intel han tenido dos niveles de interrupcin (prioridades): enmascarables y no enmascarables. Las interrupciones no enmascarables por lo regu- lar slo
se usan para avisar de posibles catstrofes, como errores de paridad de memoria. Todos los
dispositivos de E/S usan la interrupcin enmascarable.
Cuando un dispositivo de E/S emite una interrupcin, la CPU usa el vector de interrupcin como ndice de una tabla de 256 entradas para encontrar la direccin de la rutina de servicio de
interrupcin. Las entradas de la tabla son descriptores de segmento de 8 bytes y la tabla puede iniciar
en cualquier lugar de la memoria. Un registro global apunta a su principio.
Al tener un solo nivel de interrupcin utilizable, la CPU no puede permitir que un dispositivo con mayor prioridad interrumpa una rutina de servicio de interrupcin con prioridad intermedia
y al mismo tiempo prohba a un dispositivo con menor prioridad hacerlo. Para resolver este
problema, las CPU de Intel ahora se usan normalmente con un controlador de interrupciones externo
(por ejemplo, un 8259A). Cuando llega la primera interrupcin, con una prioridad de n, la CPU se
interrumpe. Si despus llega una interrupcin con mayor prioridad, el controlador de interrupciones interrumpe otra vez. Si la segunda interrupcin es de
menor prioridad, se detiene hasta que la primera termina. Para que este esquema funcione el
controlador de interrupciones debe poder detectar el momento en que la rutina de servicio de
interrupcin en curso termina, por lo que la CPU debe enviarle un comando al terminar de
procesar la interrupcin en curso.
Tiempo
. Programa
de usuario
1
----
lusuari~
Pila
En t = 15 la lnea RS232 necesita que la atiendan y genera una interrupcin. Puesto que la lnea
RS232 tiene mayor prioridad (5) que la impresora (2), la interrupcin ocurre. El estado de la
mquina, que ahora est ejecutando la rutina de servicio de interrupcin de la impresora, se almacena
en la pila, y se inicia la rutina de servicio de interrupcin de RS232.
384
40
'------y--'r---v--':
'------y----':'------y----'~:'------y----'
olSR de 1
ISR de
1
ISA de
olSR de 1 Programa
de usuario : impre- :
1
1
1sora1
SEC. 5.7
CAP. 5
Ahora que hemos estudiado la ISA de tres mquinas, armemos todas las piezas y examinemos de cerca el mismo programa de ejemplo para las tres ISA. Nuestro ejemplo ser el
programa de las Torres de Hanoi. Ya dimos una versin en Java de este programa en la figura
5-40. En las secciones que siguen presentaremos programas en lenguaje ensamblador para el
problema de las Torres de Hanoi.
Sin embargo, usaremos un pequeo truco. En vez de dar la traduccin de la versin en Java, para
el Pentium 11 y el UltraSPARC 11 daremos la traduccin de una versin en C con objeto de evitar
ciertos problemas de la E/S de Java. La nica diferencia ser la sustitucin de la llamada a println en
Java por el enunciado C estndar
printf("Pase un disco de %da %d\n", i, j)
SEC. 5.7
385
CAP.5
Para que funcione, el programa se tiene que procesar con otro programa llamado cpp, el
preprocesador de C, antes de ensamblarlo. Adems, hemos usado minsculas aqu porque el
ensamblador de UltraSPARC 11 lo exige (por si algn lector desea introducir el programa y
ejecutarlo).
.586
.MODEL FLAT PUBLIC
_torres EXTERN
_printf:NEAR
.CODE
_torres: PUSH EBP
MOV EBP, ESP CMP
[EBP+8], 1
JNE L 1
MOV EAX, [EBP+16]
PUSH EAX
MOV EAX, [EBP+ 12]
PUSH EAX
PUSH OFFSET FLATformat
CALL_pintf
ADD ESP. 12
; ; kya= terminamos
EAX
iniciar torres(n
k = 6 - -1,
i - j i, k)
; ; iniciar
AX=6-i
; ;EEAX
= i
; ; apilar
EAX = i 6- i - j
; EAX = n
;EAX=n-1
; apilar n - 1
; llamar a torres(n-1, i, 6- i-j)
; quitar parmetros de la pila
; iniciar torres(1, i, i)
; apilar j
; EAX = i
; apilar i
; apilar 1
; llamar torres(1, i, j)
; quitar parmetros de la pila
; iniciar torres(n -1, 6 - i - j, i)
; apilar i
; apilar 20
; apilar k
; EAX = n
;EAX=n-1
; apilar n -1
; llamar torres(n -1, 6 - i - j, i)
; ajustar apuntador de pila
; prepararse para salir
; regresar al invocador
; cadena de formato
SEC. 5.7
387
Por principio, el UltraSPARC 11 tiene que pasar la direccin de la cadena de formato a printf,
pero la mquina no puede limitarse a poner la direccin en el registro que contiene el parmetro de
salida porque no hay forma de colocar una constante de 32 bits en un registro con una sola
instruccin. Se requieren dos instrucciones para hacerlo, SETH y OR.
Otra cosa que debemos notar es que no es necesario ajustar la pila despus de la llamada
porque la instruccin RESTORE del final del procedimiento ajusta la ventana de registro. La
capacidad para colocar los parmetros de salida en registros y no tener que ir a la memoria aumenta
de manera considerable la rapidez si la profundidad de las llamadas no es excesiva, pero en general
es probable que la ventaja de contar con el mecanismo de ventanas de regis- tros no justifique el
aumento en la complejidad que implica.
Observe ahora la instruccin NOP que sigue a la ramificacin a Done. Se trata de una
ranura de retraso. Esta instruccin siempre se ejecutar, aunque sigue a una instruccin de
ramificacin condicional. El problema es que el UltraSPARC 11 tiene un conducto profundo, y para
cuando el hardware descubre que enfrenta una ramificacin, la siguiente instruccin prcticamente
ya termin de ejecutarse. Bienvenido al Mundo Maravilloso de la Programa- cin RISC.
Esta caracterstica tan divertida tambin se extiende a las llamadas a procedimientos.
Observe la primera llamada a torres en la clusula else: colocan - l en %00 y en %o l, pero efecta
la llamada a torres antes de colocar el ltimo parmetro. En el Pentium 11, primero se pasan los
parmetros y luego se hace la llamada. Aqu, primero se pasan algunos parmetros, luego se hace la
llamada, y luego se pasa el ltimo parmetro. Para cuando la mquina se da cuenta de que enfrenta
una instruccin CALL, la instruccin que le sigue ya est en un nivel tan profundo del conducto que
tiene que ejecutarse. Entonces, por qu no usar la ranura de retraso para pasar el ltimo parmetro?
Incluso si la primera instruccin del procedimiento invocado usa ese parmetro, el valor estar en su
lugar a tiempo.
Por ltimo, en Done, vemos que la instruccin RET tambin tiene una ranura de retraso, la
cual aprovechamos para la instruccin RESTORE, que incrementa CWP a fin de restaurar la
ventana de registros a la posicin que el invocador espera.
#define
#define
#define
#define
#define
#define
#define
#define
torres:
Else:
N %i0
1 %i1
J %i2
K %10
ParamO %00
Param1 %01
Param2 %02
Scrach %11
.proc 04
.global torres
save %sp, -112, %sp cmp
N, 1
bne Else
! si (n == 1)
1 si (n != 1), ir a Else
mov 6, K sub K,
J, K sub K, 1, K
! iniciar k = 6 - i - j
1 k =6-j
!k=6-i-j
formal;
! iniciar torres(1, i, j)
! parmetro 1 = i
! llamar torres ANTES DE preparar parmetro 2 (j)
! parmetro 2 = j
!
!
!
!
re!
resto re
.asciz "Pase un disco de %d a %d\n"
El cdigo de ensamblador JVM para la versin en Java de las Torres de Hanoi se da en la figura 547. La solucin es relativamente sencilla, con excepcin de la E/S. Este programa se gener con el
compilador de Java, se desensambl a lenguaje ensamblador simblico,
se edit para hacerlo ms comprensible y se le aadieron comentarios.
O*/
1 */
2 */
de comentarios de
! regresar
! usar ranura de retraso para restaurar ventanas
e */
388
,.
.
CAP. 5
CAP.5
SEC. 5.8
L1
389
EL IA-64 DE INTEL
ILOAD_O
ICONST_1
IF_ICMPNE L 1
11 local O= n: apilar n
11apilar1
11 si (n 1= 1 ), ir a L1
GETSTATIC #13
NEW#7
11 duplicar apuntador al buffer
LDC #2
INVOKESPECIAL #10
ILOAD_1
INVOKEVIRTUAL #11
LDC #1
INVOKEVIRTUAL #12
ILOAD_2
INVOKEVIRTUAL #11
INVOKEVIRTUAL #15
INVOKEVIRTUAL #14
RETURN
BIPUSH 6
ILOAD_1
11 tope de pila= 6- i ILOAD_2
local 2 = j; apilar j
ISUB
ISTORE_3
11 tope de pila= 6 - i - j
11local3 = k = 6 - i - j; la pila est vaca
11 iniciar trabajos de torres(n -1, i, k); apilar n
ILOAD_O
ICONST_1
ISUB
ILOAD_ 1
ILOAD_3
INVOKESTATIC #16
11apilar1
11 tope de pila= n -1
11 apilar i
//apilark
//invocar torres(n -1, 1, k)
ICONST_1
ILOAD_1
ILOAD_2
INVOKESTATIC
ILOAD_O
ICONST_ 1
ISUB
ILOAD_3
ILOAD_2
INVOKESTATIC
RETURN
#16
#16
i, k); apilar 1
Sin embargo, dejando eso a un lado, los investigadores en este campo ya conocen bien las ideas
fundamentales en que se apoya la IA-64, y bien podran aparecer en otros diseos. De hecho,
algunas de ellas ya estn presentes en diversas formas en sistemas (experimentales). En las secciones
que siguen examinaremos la naturaleza de los problemas que Intel enfrenta, el modelo que la IA-64
adopt para resolverlos, el funcionamiento de algunas de las ideas fundamentales, y lo que podra
suceder.
La raz de todos los problemas es el hecho ineludible de que la IA-32 es una ISA antigua cuyas
propiedades son totalmente inadecuadas para la tecnologa actual. Es una ISA CISC con
instrucciones de longitud variable y una multitud de formatos distintos que son difciles de
decodificar rpidamente sobre la marcha. La tecnologa actual funciona de manera ptima con las
ISA RISC que tienen una sola longitud de instruccin y un cdigo de operacin de longitud fija
fcil de decodificar. Las instrucciones de la IA-32 pueden descomponerse en microoperaciones tipo
RISC en el momento de la ejecucin, pero ello requiere hardware
(rea de chip), consume tiempo y aumenta la complejidad del diseo. se es el primer strike. *
Tambin, la IA-32 es una ISA de dos direcciones orientada hacia la memoria. Casi todas las
instruccioneshacen referenciaa la memoria, y pocos programadoresdudan en hacer referenciasa la
memoria a diestra y siniestra.La tecnologaactual favorece a las ISA de carga/almacenamiento que
slo hacen referenciaa la memoria para obtener los operandosy colocarlosen registros, pero por lo
dems realizantodos sus clculos con instrucciones de tres direccionesque manejan regis- tros. Y en
vistadel aumento mucho mayor de las velocidadesde reloj de las CPU en comparacin con las de
memoria, el problema va a empeorar con el tiempo. ste es el segundo strike.
Adems, la IA-32 tiene un conjunto de registros pequeo e irregular. Esto no slo hace que los
compiladoresparezcancontorsionistas,sino que el nmero tan reducidode registrosde prop- sito
general (cuatro o seis, dependiendo de cmo se cuenten ESI y EDI) obliga a verter a la memoria
continuamentelos resultados intermedios,lo que genera referencias a la memoria adi- cionalesaun
cuando ni siquierase necesitanlgicamente.se es el tercerstrike. La IA-32 est out.
Pasemos ahora a la segunda entrada (inning). La escasez de registros causa muchas dependencias, sobre todo dependencias WAR innecesarias porque los resultados tienen que colocarse
en algn lado y no hay registros extra disponibles. Para subsanar la falta de regis- tros, la
implementacin tiene que efectuar cambios de nombres internamente -un parche horrible- a
registros secretos dentro del buffer de reordenamiento. Para evitar bloqueos con demasiada
frecuencia cuando hay fallos de cach, las instrucciones tienen que ejecutarse en desorden. Sin
embargo, la semntica de la IA-32 especifica interrupciones precisas, por lo que las instrucciones en
desorden tienen que retirarse en orden. Todo esto requiere una gran cantidad de hardware muy
complejo, Cuarto strike.
Para poder efectuar todo este trabajo rpidamente se requiere una fila de procesamiento muy
grande (de 12 etapas). A su vez, la fila de procesamiento implica que las instrucciones ingresan en l
11 ciclos antes de que terminen. Por ello, es indispensable una prediccin de ramificaciones muy
exacta para asegurarse de que las instrucciones correctas ingresen en el
*El autor est usando aqu la terminologa de un juego de bisbol. (N. del T.)
r'
391
conducto. Dado que una prediccin errnea obliga a vaciar la fila de procesamiento, lo cual es una
operacin muy costosa, los errores de prediccin no tienen que ser muy frecuentes para que el
desempeo sufra una degradacin sustancial. Quinto strike.
Para aliviar los problemas que causan las predicciones errneas, el procesador necesita
efectuar ejecucin especulativa, con todos los problemas que conlleva, sobre todo cuando
referencias a la memoria en la rama equivocada causan una excepcin. Sexto strike.
No vamos a jugar el partido de bisbol completo aqu, pero a estas alturas ya debe ser
obvio que existe un problema real. Y ni siquiera hemos mencionado el hecho de que las direcciones
de 32 bits de la IA-32 limitan los programas individuales a 4 GB de memoria, lo cual es un
problema cada vez ms grave en los servidores de extremo superior.
En sntesis, la situacin de la IA-32 puede compararse favorablemente con el estado de la
mecnica celeste justo antes de Coprnico. La teora que entonces dominaba la astronoma era que la
Tierra estaba fija e inmvil en el espacio y que los planetas se movan a su alrede- dor en crculos
con epiciclos. Sin embargo, a medida que mejoraban las observaciones y era posible detectar ms
claramente desviaciones respecto a este modelo, se aadieron epiciclos a los epiciclos hasta que el
modelo completo se vino abajo por su propia complejidad interna.
Intel est en un aprieto comparable. Una fraccin enorme de todos los transistores del Pentium
II se dedica a descomponer instrucciones CISC, averiguar qu puede hacerse en paralelo, resolver
conflictos, hacer predicciones, reparar las consecuencias de predicciones equivocadas y otras tareas
contables, con lo que queda una cantidad sorprendentemente redu- cida de transistores para efectuar
el trabajo real que el usuario solicit. La conclusin a la que est siendo llevado inexorablemente
Intel es la nica conclusin razonable: tirar todo (la IA-32) a la basura y comenzar otra vez desde
cero (IA-64).
392
EL IA-64 DE INTEL
SEC. 5.8
CAP. 5
SEC 5.8
EL IA-64 DE INTEL
393
tt:
INSTRUCCIN 2
INSTRUCCIN 3
PLANTILLA
INSTRUCCIN 1
INSTRUCCIN 2
INSTRUCCIN 3
PLANTILLA
INSTRUCCIN 1
INSTRUCCIN 2
R1
INSTRUCCIN 3
R2
Las
instrucciones
pueden
encadenarse
PLANTILLA
R3
REGISTRO DE
PREDICADO
Planificar las instrucciones en el momento de la compilacin tiene varias ventajas. Primera, puesto que ahora el compilador est haciendo todo el trabajo, el hardware puede ser
mucho ms sencillo, lo que ahorra millones de transistores para otras funciones tiles, como
cachs de nivel 1 ms grandes. Segunda, para un programa dado la planificacin slo tiene
que realizarse una vez, en el momento de la compilacin. Tercera, puesto que el compilador
efecta todo el trabajo, un proveedor de software puede usar un compilador que dedique
horas a optimar su programa y as beneficiar a todos los usuarios cada vez que se ejecute el
programa.
La idea de haces de instrucciones puede servir para crear toda una familia de
procesadores. En las CPU de extremo inferior se podra emitir un haz cada ciclo de reloj. La
CPU podra esperar hasta que todas las instrucciones hayan terminado antes de emitir el
siguiente haz. En las CPU del extremo alto podra ser posible emitir varios haces durante el
mismo ciclo de reloj, como en los diseos superescalares actuales. Adems, en esas CPU, el
procesador po-
dra comenzar a emitir instrucciones de un nuevo haz antes de que terminen todas las instrucciones del haz anterior. Desde luego, tendra que verificar si los registros y la unidad funcional requeridos estn disponibles, pero no tiene que verificar si otras instrucciones de su propio
haz estn en conflicto con la instruccin actual porque el compilador ya garantiz que no
sucedera.
5.8.3 Predicacin
Otra caracterstica importante de IA-64 es el novedoso modo en que maneja las ramificaciones condicionales. Si hubiera alguna forma de deshacerse de casi todas ellas, las CPU poUna vez ms, ya vimos una de stas (ISTORE) en IJVM. En este caso tambin tenemos
dran ser mucho ms sencillas y rpidas. A primera vista podra parecer que es imposible
instrucciones para guardar elementos de un arreglo. En el tope de la pila hay un valor del
de las ramificaciones condicionales porque los programas estn llenos de enuntipodeshacerse
correcto.
de l est lael IA-64
ndice, usa
y debajo
de ste,
el apuntador
al arreglo.
La operacin
ciados Debajo
if. No obstante,
una tcnica
llamada
predicacin
que puede
reducir su
desapila
las
tres
cosas.
nmero considerablemente (August et al., 1998; Hwu, 1998). A continuacin la describiremos brevemente.
En las mquinas actuales, todas las instrucciones son incondicionales en el sentido de
que cuando la CPU llega a una instruccin simplemente la ejecuta. No hay ningn debate
interno del tipo de "Ejecutar o no ejecutar, he ah el dilema!". En cambio, en una arquitectura predicativa, las instrucciones contienen condiciones (predicados) que indican cundo deben ejecutarse y cundo no. Este cambio de paradigma, de instrucciones incondicionales a
instrucciones predicativas, es lo que permite deshacerse de (muchas) ramificaciones condicionales. En lugar de tener que escoger entre una sucesin de instrucciones incondicionales y
otra sucesin de instrucciones incondicionales, todas las instrucciones se fusionan en una
sola sucesin de instrucciones predicativas, empleando diferentes predicados para diferentes
instrucciones.
Para ver cmo funciona la predicacin, comencemos con el sencillo ejemplo de la figura 5-49, que muestra la ejecucin condicional, una precursora de la predicacin. En la figura
5-49(a) vemos un enunciado if. En la figura 5-49(b) vemos su traduccin a tres instrucciones:
una comparacin, una ramificacin condicional y una instruccin de traslado.
if (R1 ==O)
R2 = R3;
L1:
(a)
CMP R1,0
BNE l1
MOV R2,R3
(b)
CMOVZ R2,R3,R1
(e)
Figura 5-49. (a) Un enunciado if. (b) Cdigo de ensamblador genrico para (a).
(e) Una instruccin condicional.
En la figura 5-49(c) nos deshacemos de la ramificacin condicional empleando una instruccin nueva, CMOVZ, que es un traslado condicional. Lo que esta instruccin hace es
verificar si el tercer registro, R1, es cero. Si lo es, se copia R3 en R2; si no, no se hace nada.
Una vez que tenemos una instruccin que puede copiar datos cuando algn registro es
cero, no es difcil disear una instruccin que pueda copiar datos cuando algn registro no
F,
1.
li
EL NIVEL DE
394
ARQUITECTURA DEL CONJUNTO DE
CAP.5
INSTRUCCIONES
SEC. 5.8
EL IA-64 DE INTEL
395
CMP R1,R2
B
N
M
R3
=
R4
CMPEQ
R1
,R2,P4
<P4>
ADD
R3,R4,R
5
+
R5;
<P5>
SUB
R6,R4,R
5
R
6
ADD R3,R5
BRL2
L 1:
MOV R6,R4
SUB R6,R5
L2:
(a)
(b)
(e)
if
(R1
==
O) {
C
M
C
C
M
C
M
CM
P
R1,0
R2 = R3;
BNE L1
R4 = R5;
MOVR2,R3
1
j
1
j
,
}else {
MOVR4,R5
R
6
=
R
7;
B
R
L
2
(e)
RB =
R9;
L1:
MOV
R6,R7
}
MOV R8,R9
L2:
(
a
)
(
b
)
e
n
(
D
u
l
o
n
g
,
1
9
9
8
)
.
5
.
8
.
4
C
a
r
g
a
r; :.
Figura 5-50.
(a) Un
enunciado if.
(b) Cdigo de
ensamblador
genrico para
(a). (e)
Ejecucin
condicional.
condicionada a algn
registro de predica- do
(que se indica entre
parntesis angulares). Se
puede colocar aqu
cualquier
cdigo,
siempre
que
cada
instruccin tenga el
predicado correcto.
EL NIVEL DE ARQUITECTURA
DEL
CONJUNTO
CAP. 5
DE
INSTRUCCIONES
5
.
8
.
5
L
o
pe
nd
ie
nt
e
oc
ur
rir
en
es
e
pu
nt
o.
En sntesis, una mquina que
implementa la arquitectura IA-64
obtiene su velocidad de varias
fuentes. En lo fundamental, se trata
de una mquina RISC de vanguardia
con filas de procesamiento, de
carga/almacenamiento, y de tres
direcciones. Adems, la IA-64 tiene
un modelo de paralelismo explcito
que exige al compilador determinar
cules instrucciones se pueden
ejecutar al mismo tiempo sin
conflictos y agruparlas en haces. As,
la CPU podr programar ciegamente
un haz sin tener que romperse la
cabeza pensando. Luego, la predica-
s
p
i
e
s
e
n
l
a
t
i
e
r
r
a
SEC.
PROBLEMAS
5.8
397
5
.
9
R
E
S
U
M
E
N
El nivel de arquitectura del conjunto de
instrucciones es lo que la mayora de las
personas conoce como "lenguaje
de
mquina". En este nivel, la mquina tiene
una memoria orientada a bytes o palabras
que consiste en algunas decenas de
megabytes, e instrucciones como MOVE,
ADDy BEQ.
Casi
todas las computadoras
modernas tienen una memoria organizada
en forma de una secuencia de bytes, los
cuales se agrupan en palabras de 4 u 8
bytes cada una. Tambin es normal contar
con entre 8 y 32 registros, cada uno de los
cuales puede contener una palabra. En
algunas mquinas (como el Pentium 11),
las referencias a palabras de memoria no
'tienen que estar alineadas respecto a las
fronteras
naturales de la memoria,
mientras que en otras (como el
UltraSPARC 11) es obligatorio.
Las instrucciones
generalmente
tienen uno, dos o tres operandos, que se
direccionan empleando modos de
direccionamiento
directo, de registro,
indexado, etc. Algunas mquinas tienen un
gran
nmero
de
modos
de
direccionamiento complejos.
Por lo
regular se cuenta con instrucciones para
trasladar
datos, efectuar operaciones
didicas o mondicas que inclu- yen
operaciones aritmticas y booleanas,
ramificaciones,
llamadas
a
procedimientos, y ci- clos, y a veces para
E/S. Una instruccin
representativa
P
R
O
B
L
E
M
A
S
l.
EL NIVEL DE ARQUITECTURA
398
DEL
CAP.5
CONJUNTO
DE
INSTRUCCIONES
4.
5.
instrucciones contienenun
nmero
enterode palabras, es decir, un nme- ro
par de bytes. Cite una ventaja del esquema
del Pentium 11.
n
e
4
0
l
a
p
a
l
a
b
r
a
3
0
c
o
n
t
i
e
n
e
5
0
l
a
p
a
l
a
b
r
a
4
0
c
o
n
t
i
e
n
e
6
0
l
a
p
a
l
a
b
r
a
5
0
c
o
n
t
i
e
n
e
7
0
a
.
L
O
A
D
L
O
A
D
D
I
R
E
C
T
2
0
c. LOAD INDIRECT 20
d. LOAD IMMEDIATE 30
e. LOAD DIRECT 30
f. LOAD INDIRECT 30
6. Compare las mquinas de O, 1,
2 y 3 direcciones escribiendo
programas que calculen
X
=
(
A
+
B
x
C
)
/
(
D
-
I
M
M
E
D
I
A
T
E
2
0
O direcciones
direcciones
2
1 direccin
3 direcciones
PUSHM
MOV (X=Y)
LOADM
b
.
E
x
F
)
MOV
(X= Y) POPM
ADD
ADD
STORE M
(X=X+Y)
Y+Z) ADD
SUB (X= X-Y)
(X= Y-Z) SUB
SUBM
X*Y)
(X=
ADDM
SUB
MUL (X=
MUL (X= Y*Z)
MULM
MUL
(X= X/Y)
DIV
(X= Y/Z) DIV
DIVM
DIV
q
u
i
n
a
p
a
r
a
c
a
l
c
u
l
a
r
X
?
CAP5
PROBLEMAS
E
)
399
7.
/
Disee
un
mecanismo
de
direccionamiento que permita especificar
en un campo de 6 bits un conjunto
arbitrario de 64 direcciones,
no
necesariamente contiguas, de un espacio de
direcciones grande.
F
)
/
G
)
x
H
8.
Sugiera una desventaja del cdigo
automodificante que no se haya mencionado en el
texto.
9.
frmulas de notacin
frmulas de notacin
inversa. a. A+B+C+D+E
b
.
(
A
+
B
)
x
(
C
+
D
)
+
E
c
.
(
A
x
B
)
+
(
C
x
D
)
+
E
d
.
infija. a.AB+C+Dx
b
.
A
B
I
C
D
!
+
c
.
A
B
C
D
E
+
x
x
/
d
.
A
B
C
D
E
x
F
/
+
G
H
/
x
+
(
A
+
B
)
x
(
(
(
C
D
x
11.
B
+
C
+
(
A
B
)
A
B
C
+
+
b
.
A
B
C
y
A
B
C
c
.
A
B
x
C
+
y
A
B
C
+
x
12. Escriba tres frmulas en notacin polaca il!
versa que no puedan convertirse a notacin infija.
13. Convierta las siguientes
frmulas booleanas
infijas a notacin polaca
inversa. a. (AAND B)
OR c
b
.
O
R
A
N
D
(
A
O
R
C
)
c
.
(
A
A
N
D
B
)
O
R
(
C
A
N
D
D
)
14. Convierta la siguiente frmula infija a
notacin polaca inversa y genere cdigo JVM para
evaluarla.
(
2
X
+
4
)
-
(
4
s
d
i
f
e
r
e
n
t
e
f
2
+
1
)
e
l
M
O
V
o
r
d
e
n
R
E
G
,
A
D
D
R
d
e
l
o
s
o
p
e
r
a
n
d
o
s
?
L
O
A
D
A
D
D
R
,
R
E
G
P
o
r
17.
18.
q
u
e
400
EL NIVEL DE ARQUITECTURA
19.
20.
21.
El UltraSPARC
11 no tiene ninguna
instruccin para cargar un nmero de 32 bits
en un registro. En vez de ello, normalmente
se usa una secuencia de dos instrucciones,
SETHI y ADD. Hay ms de una forma de
cargar un nmero de 32 bits en un registro?
Comente su respuesta.
Uno de sus amigos irrumpe en su habitacin
a las 3 A.M.,jadeando, para contarle a usted
la brillan- te idea que se le acaba de ocurrir:
una instruccin
con dos cdigos
de
operacin.
A dnde debe enviar a su
amigo,
a Ja oficina de patentes
o al
psiquiatra?
n
d
e
4
b
i
t
s
a
if (n ==O) ...
if (i > j) ...
jf (k < 4) ...
son comunes en programacin. Genere una
instruccin que realice tales pruebas de
forma eficien- te. Qu campos contiene su
instruccin?
23. Para el nmero binario de 16 bits 1001 0101
1100 001 1, muestre el efecto de:
a.
Un
desplazamie
nto
de 4
bits a la
derecha
rellenando
con ceros. b.
Un
desplazamie
nto
de 4
bits
a Ja
derecha
extendiendo
el signo. c.
Un
desplazamie
nto
de 4
bits
a la
izquierda.
d
.
U
n
a
r
o
t
a
c
i
l
a
i
z
q
u
i
e
r
d
a
.
e
.
U
n
a
r
o
t
a
c
i
n
d
e
4
b
i
t
s
a
l
a
O
R
d
e
r
e
c
h
a
.
E
X
C
L
U
S
I
V
O
.
x
v
a
r
i
a
b
l
e
"
?
B=llll
llllOOOOllll
c = 0000 0000 oo 1 o 0000
26. Disee una forma de intercambiar dos
variables A y B sin usar una tercera variable o
registro.
S
u
g
e
r
e
n
c
i
a
:
p
i
e
n
s
e
e
n
l
a
o
p
e
r
a
c
i
28.
a
.
i
=
3
;
CAPS
PROBLEMAS
b
.
401
=
l
:
c
.
i
31.
32.
33.
34.
35.
36.
=
j
1
;
Escriba
una subrutina
ensamblador
que convierta
infija a notacin polaca inversa.
en lenguaje
una frmula
6
EL NIVEL DE MQUINA DE SISTEMA
OPERATIVO
El tema de este libro es que una computadora moderna consiste en una serie de niveles,
cada uno de los cuales aade funcionalidad al nivel que est abajo. Ya vimos el nivel de
lgica digital, el nivel de microarquitectura y el nivel de conjunto de instrucciones. Ha
llegado el momento de ascender al siguiente nivel, el mbito del sistema operativo.
Un sistema operatvi o es un programa que, desde el punto de vista del programador,
aade varias instrucciones y funciones nuevas, ms all de lo que el nivel ISA proporciona.
Normalmente, el sistema operativo se implementa casi totalmente en software, pero no existe
una razn terica para no colocarlo en hardware, como se hace normalmente con los
microprogramas (cuando estn presentes). Usaremos el acrnimo OSM (Operating System
Machine) para referimos al nivel que el sistema operativo implementa, el nivel de mquina
de sistema operativo, que se muestra en la figura 6-1.
Aunque tanto el nivel OSM como el nivel ISA son abstractos (en el sentido de que no son
el verdadero nivel de hardware), existe una diferencia importante entre ellos. El conjunto de
instrucciones del nivel OSM es el conjunto completo de instrucciones que pueden usar los
programadores de aplicaciones; contiene casi todas las instrucciones del nivel ISA, as como
el conjunto de instrucciones nuevas que el sistema operativo aade. Estas nuevas instrucciones se denominan llamadasal sistema. Una llamada al sistema invoca un servicio
predefinido
del sistema operativo, o sea, una de sus instrucciones. Una llamada al sistema tpica solicita
leer datos de un archivo. Usaremos el tipo de letra helvtica en minsculas para distinguir las
llamadas al sistema.
El nivel OSM siempre se interpreta. Cuando un programa de usuario ejecuta una instruccin OSM, como leer datos de un archivo, el sistema operativo ejecuta esta instruccin paso
403
404
CAP. 6
Nivel 3
Sistema operativo
Nivel 2
Nivel 1
Nivel de microarquitectura
por paso, igual que un microprograma ejecutara una instruccin ADD paso por
paso. Sin em- bargo, cuando un programa ejecuta una instruccin del nivel ISA, el
nivel de microarquitectura subyacente se encarga de llevarla a cabo directamente,
sin ayuda del sistema operativo.
En este libro slo podemos proporcionar una muy breve introduccin al tema
de los sistemas operativos. Nos concentraremos en tres importantes temas. El
primero es la memo- ria virtual, una tcnica que muchos sistemas operativos usan
para aparentar que la mquina tiene ms memoria de la que en realidad tiene. El
segundo es la E/S de archivos, un concepto de nivel ms alto que las instrucciones
de E/S que estudiamos en el captulo anterior. El tercer y ltimo tema es el de
procesamiento en paralelo: cmo varios procesos pueden ejecutarse, comunicarsey
sincronizarse. El concepto de proceso es muy importante,y lo describiremoscon
detalle ms adelante. Por ahora, podemos pensar en un proceso como un programa
en ejecu- cin y toda su informacin de estado (memoria, registros, contador de
programa, situacin de E/S, etc.). Despus de explicar estos principios en general,
veremos cmo se aplican a los sistemas operativos de dos de nuestras mquinas de
ejemplo, el Pentium II (Windows NT) y el UltraSPARC 11 (UNIX). Puesto que el
picoJava U normalmente se usa para sistemas incor- porados, no tiene un sistema
operativo con todas las de la ley.
6.1
MEMORIA
VIRTUAL
En los albores de la computacin, las memorias eran peque~as y costosas. El IBM
650, la principal computadora cientfica de su poca (fines de la dcada de los
cincuenta), slo tena
2000 palabras de memoria. Uno de los primeros compiladores de ALGOL 60 se
escribi para una mquina que slo tena 1024 palabras de memoria. Uno de los
primeros sistemas de tiempo compartido trabajaba de forma muy satisfactoria en
una PDP-1 con un tamao total de memoria de 4096 palabras de 18 bits para el
sistema operativo y los programas de usuario combinados. En esos das el
programador dedicaba gran parte de su tiempo a lograr que sus programas cupieran
en la diminuta memoria. En muchos casos era necesario usar un algorit- mo que
trabajaba mucho ms despacio que otro algoritmo mejor, simplemente porque el
algoritmo mejor era demasiado grande; es decir, un programa que usaba el
algoritmo mejor no caba en la memoria de la computadora.
SEC. 6.1
MEMORIA VIRTUAL
405
La solucin tradicional a este problema era usar memoria secundaria, como
un disco. El programador divida el programa en varios fragmentos, llamados
superposiciones, cada uno de los cuales caba en la memoria. Para ejecutar el
programa, se lea la primera super- posicin y se ejecutaba durante un rato.
Cuando terminaba, lea la siguiente superposicin y la invocaba, y as. El
programador tena la responsabilidad de dividir el programa en superposiciones,
decidir en qu lugar de la memoria secundaria se deba guardar cada superposicin, encargarse del traslado de superposiciones entre la memoria principal
y la memoria secundaria, y en general administrar el proceso de superponer
sin ayuda de la computadora.
Aunque se us ampliamente durante muchos aos, esta tcnica implicaba
mucho trabajo invertido en la gestin de superposiciones. En 1961 un grupo de
investigadoresde Manchester, Inglaterra, propuso un mtodo para realizar
automticamente el proceso de superponer, sin que el programador siquiera supiera
qu estaba ocurriendo (Fotheringham, 1961 ). Este mto- do, ahora conocido como
memoria virtual, tena la ventaja obvia de liberar al programador de una gran
cantidad de molestas tareas de contabilidad, y se us por primera vez en los aos
sesenta en varias computadoras, casi todas asociadas a proyectos de investigacin
sobre dise- o de sistemas de cmputo. Para cuando comenz la dcada de los
setenta casi todas las computadoras contaban con memoria virtual. Ahora hasta las
computadoras de un solo chip, incluidos el Pentium lI y el UltraSPARC 11,
tienen sistemas de memoria virtual muy sofisticados, que examinaremos en una
seccin posterior del captulo.
406
6.1.1 Paginacin
La idea sugerida por el grupo de Manchester fue la de separar los conceptos de
espacio de direcciones y posiciones de memoria. Consideremos, por ejemplo, una
computadora repre- sentativa de esa poca, con un campo de direccin de 16 bits
en sus instrucciones y 4096 palabras de memoria. Un programa para esta
computadora poda direccionar 65536 palabras de memoria. La razn es que
existen 65536 (216) direcciones de 16 bits, cada una de las cuales corresponde a
una palabra de memoria distinta. Cabe sealar que el nmero de palabras
direccionables depende nicamente del nmero de bits que tiene una direccin y
nada tiene que ver con el nmero de palabras de memoria con que se cuenta
realmente. El espacio de direcciones de esta computadora consiste en los nmeros
O, l , 2, ... , 65535, porque se es el conjunto de posibles direcciones. Sin
embargo, la computadora bien podra tener menos de
65535 palabras de memoria.
Antes de que se inventara la memoria virtual, la gente habra distinguido entre
las direc- ciones por debajo de 4096 y aquellas iguales o mayores que 4096.
Aunque pocas veces se deca explcitamente, estas dos partes se consideraban
como el espacio de direcciones tiles y el espacio de direcciones intiles,
respectivamente (las direcciones mayores que 4095 eran intiles porque no
correspondan a posiciones de memoria reales). La gente no distingua entre
espacio de direcciones y direcciones de memoria, porque el hardware exiga una
corres- pondencia uno a uno entre ellos.
La idea de separar el espacio de direcciones y las direcciones de memoria es la
siguiente. En cualquier momento dado, es posible acceder directamente a 4096
palabras de memoria,
CAP.6
d
e
i
o
d
i
r
e
c
c
i
o
n
e
s
Direccin
JO
Memoria
E
s
p
a
c
SEC. 6.1
MEMORIA VIRTUAL
407
ciones fsicas. Suponemos que hay suficiente espacio en el disco para guardar todo el
espacio de direcciones virtual (o al menos la porcin de ese espacio que se est usando).
Los programas se escriben como si hubiera suficiente memoria principal para todo
el espacio de direcciones virtual, aunque no sea as. Los programas pueden cargar valores
de, o guardarlos en, cualquier palabra del espacio de direcciones virtual, o saltar a
cualquier ins- truccin situada en cualquier punto del espacio de direcciones virtual, sin
tener en cuenta el hecho de que en realidad no hay suficiente memoria fsica. De hecho, el
8191
-------------
409~ :
Correspondencia pri
nc
ip
al
d
e
4
K
. . ------.e
=========------------- ~095
~'
l.
2.
3.
6.1.2 Implementacin
paginacin
de
408
EL NIVEL
la
DE
MQUINA
DE SISTEMA
OPERATIVO
CAP. 6
MEMORIA
SEC. 6.1
VIRTUAL
409
Pgina Direcciones
virtuales
L
""'
""'
La figura 6-3(b) muestra una memoria fsica que consiste en ocho marcos de
pgina de
4K. Esta memoria podra estar limitada a 32K porque (1) eso es todo lo que la
mquina tiene (un procesador incorporado en una lavadora de ropa o un horno de
microondas tal vez no necesite ms), o (2) el resto de la memoria se asign a otros
programas.
Considere ahora cmo puede hacerse corresponder una direccin virtual de 32
bits con
una direccin fsica en la memoria principal. Despus de todo, lo nico que la
memoria entiende son direcciones de la memoria principal, no direcciones virtuales,
as que eso es lo que debemos darle. Toda computadora con memoria virtual tiene
un dispositivo para efectuar el mapeo de virtual a fsico, llamado unidad de
gestin de memoria (MMU, Memory Management Unit). La MMU podra estar
en el chip de la CPU o en un chip aparte que funcione en estrecha colaboracin
con la CPU. Puesto que nuestra MMU de ejemplo estable- ce una correspondencia
entre una direccin virtual de 32 bits y una direccin fsica de 15 bits, necesita un
registro de entrada de 32 bits y un registro de salida de 15 bits.
Para ver cmo funciona la MMU, considere el ejemplo de la figura 6-4.
Cuando la MMU recibe una direccin virtual de 32 bits, la divide en un nmero de
pgina virtual, de 20 bits, y una distancia dentro de la pgina, de 12 bits (porque en
nuestro ejemplo las pginas son de 4K). El nmero de pgina virtual se usa como
ndice de la tabla de pginas para encontrar la entrada que corresponde a la pgina a
la que se hizo referencia. En la figura 6-4 el nmero de pgina
15
61440 - 65535
14
57344- 61439
13
53248 - 57343
12
49152 53247
11
4505649151
10
40960 45055
36864 40959
32768 36863
28672 32767
24576 28671
20480 24575
16384 20479
12288 16383
819212287
40968191
32K bajos
de la
Marco de memoria
principal pgina
Direcciones fsicas
7
32767
28672 -
6
28671
24576 -
5
24575
20480 -
4
20479
16384-
1228816383
819212287
O4095
1
8191
4096-
(
a
)
O4095
(
b
)
Figura 6-3. (a) Los primeros 64K del espacio de direcciones virtual
divididos en
16 pginas, cada una de las cuales tiene 4K. (b) Memoria principal de
32K dividida en ocho marcos de pgina de 4K cada uno.
EL NIVEL DE MQUINA DE SISTEMA OPERATIVO
410
CAP. 6
SEC.6.1
411
{I
P
gin
a
virt Tabla
de
pagina
ual s
Tabla
de
pginas
Pgina
Marco
virtual
de
pgina
l
I
1
Bit presen te!
ausente
15
14
15"'"-
13
14
12
13
o
o
o
o
11
12
10
11
10
o
o
Marco
de pgina
o
o
Pgina virtual 6
Pgina virtual 5
Pgina virtual 11
Pgina virtual 14
4
3
Pgina virtual 8
Pgina virtual 3
11 o
2
o
o
o
o
Pgina virtual O
Pgina virtual 1
1.-...
Registr
o
de
entrada
12 bits
1.-...--------
nas. Luego podr iniciarse la primera instruccin. Si dicha instruccin tiene dos
direcciones,
las dos estn en diferentes pginas y ambas pginas son diferentes de la pgina en
la que esta- ba la instruccin, ocurrirn otros dos fallos de pgina, y se traern dos
pginas ms antes de que la instruccin por fin pueda ejecutarse. La siguiente
instruccin podra causar ms fallos de pgina, y as sucesivamente.
Este mtodo de operar una memoria virtual se llama paginacin por
demanda, por
analoga con el conocido algoritmo de alimentacin por demanda para los bebs:
si el beb llora, hay que alimentarlo (en lugar de alimentarlo segn un programa
412
CAP.6
estricto). En la pagina- cin por demanda, slo se traen pginas cuando se solicita
realmente una pgina, no por adelantado.
La pregunta de si debe usarse o no paginacin por demanda slo es pertinente
cuando se
inicia un programa. Una vez que el programa ha estado trabajando durante cierto
tiempo, las pginas requeridas ya se habrn reunido en la memoria principal. Si la
computadora es de
SEC
. 6.1
MEMORIA
VIRTUAL
41
3
Pgina
virtual 7
Pgina virtual
7
Pgina
virtual 6
Pgina virtual
6
Pgina
virtual 5
Pgina virtual
5
Pgina virtual 4
Pgina
virtual 4
Pgina virtual
4
Pgina virtual 2
Pgina
virtual 3
Pgina virtual
3
virtual O
Pgina
virtual 2
Pgina virtual
2
Pgina
virtual 1
Pgina virtual
1
Pgina
virtual O
Pgina virtual
8
Pgina virtual 7
Pgina virtual 6
Pgina virtual 5
Pgina virtual 3
Pgina
Pgina
virtual 8
nece- sario enviar alguna otra pgina de vuelta al disco. Se necesita un algoritmo
que decida cul pgina debe quitarse.
Probablemente no es una buena idea escoger al azar la pgina que se quitar.
Si la pgina
que contiene la instruccin que caus el fallo es la que se escoge, ocurrir otro
fallo de pgi- na tan pronto como se intente traer la siguiente instruccin. Casi todos
los sistemas operativos tratan de predecir cul de las pginas de la memoria es la
menos til en el sentido de que su ausencia tendra el efecto adverso menos
sensible sobre el programa en ejecucin. Una forma de hacerlo es predecir cundo
ocurrir la siguiente referencia a cada pgina y quitar la pgina cuya siguiente
414
CAP. 6
(a)
(b)
(c)
MEMORIA
VIRTUAL
41
5
tencia, el programa use cientos de veces ms palabras de memoria virtual que las
palabras de memoria principal que tiene la mquina.
Si una pgina que est a punto de ser expulsada no se ha modificado desde
que se ley
(lo cual es muy probable si la pgina contiene programa, no datos), no es necesario
volver a escribirla en el disco, pues ya existe ah una copia exacta. Si la pgina se
6.1.5
Tamao de pgina y
fragmentacin
Si por casualidad el programa y los datos del usuario llenan exactamente un
nmero entero de pginas, no se desperdiciar espacio cuando estn en la
memoria. Pero si no sucede as, quedar cierto espacio sin utilizar en la ltima
pgina. Por ejemplo, si el programa y los datos necesitan 26,000 bytes en una
mquina que tiene 4096 bytes por pgina, las primeras seis pginas estarn llenas,
para un total de 6 x 4096 = 24,576 bytes, y la ltima pgina contendr
26,000 - 24,576 = 1424 bytes. Puesto que en cada pgina caben 4096 bytes, se
desperdiciarn 2672 bytes. Cada vez que la sptima pgina est presente en la memoria,
esos bytes ocuparn espacio en la memoria principal pero no servirn de nada. El
problema
de
estos
bytes
desperdiciados
se
denomina
fragmentacininterna(porque el espacio desperdiciado est adentro de una
pgina).
Si el tamao de pgina es de n bytes, la cantidad media de espacio
desperdiciado por
fragmentacin interna en la ltima pgina de un programa ser de n/2 bytes,
situacin que sugiere usar pginas pequeas para minimizar el desperdicio. Por
otra parte, un tamao de pgina pequeo implica muchas pginas, adems de una
tabla de pginas grande. Si la tabla de pginas se mantiene en hardware, y es
grande, se necesitarn ms registros para guardarla, y el costo de la computadora
aumentar. Adems, se requerir ms tiempo para cargar y guardar estos registros
cada vez que se inicie o detenga un programa.
Adems, las pginas pequeas utilizan de forma ineficiente el ancho de banda
del disco.
Si suponemos que hay que esperar 1 O ms para poder iniciar una transferencia
(retraso por bsqueda + latencia rotacional), las transferencias grandes sern ms
eficientes que las pe- queas. Con una tasa de transferencia de 1 O MB/s, transferir
8 KB tarda slo O. 7 ms ms que transferir 1 KB (10.1 ms versus 10.8 ms),
6.1.6
Segmentaci
n
La memoria virtual de la que hemos hablado aqu es unidimensional porque las
direcciones virtuales van de la O a alguna direccin mxima, una tras otra. Para
muchos problemas, tener dos o ms espacios de direcciones distintos podra ser
mucho mejor que tener slo uno. Por ejemplo, un compilador podra tener muchas
tablas que se van creando a medida que avanza la compilacin y que incluyen:
1. La tabla de smbolos, que contiene los nombres y atributos de las
variables.
2.
3. Una tabla que contiene todas las constantes enteras y de punto flotante
empleadas.
4.
5.
416
CAP.6
Libre {
las tablas que tienen mucho para drselo a las tablas que tienen poco. Esto es
factible, pero sera anlogo a gestionar sus propias superposiciones: una lata en el
mejor de los casos y un exceso de trabajo tedioso y ftil en el peor de los casos.
SEC.
6.1
20K
16K
Espacio de
direcciones
asignado a la pila de llamadas
Ocupado actualmente {
12K
~Tabl
ade
smb
olos
8K
Texto
fuente
4K
o
Segmento
,.~ .
~ (
: ~ :~
.. . .
"
.;.
:,.
...
.
4
1
7
MEMORIA
VIRTUAL
Segmento
Tabla
de
constant
es
~rbol
sintcti
co
Pil
a
de
~11am
adas
Segmento
Segmento
Segmento
2
3
4
es
p
a
ci
o
d
e
di
re
c
ci
o
n
es
c
o
n
lo
q
u
e
p
u
e
d
a
c
h
o
c
ar
.
D
es
d
e
lu
418
ego, un segmento podra llenarse, pero los segmentos suelen ser muy
grandes, y esto casi nunca sucede. Para especificar una direccin en este
memoria bidimensional segmentada, el pro- grama debe proporcionar una
direccin con dos partes: un nmero de segmento y una direc- cin dentro
de ese segmento. La figura 6-8 ilustra una memoria segmentada que se usa
para las tablas de compilador antes mencionadas.
Hacemos hincapi en que un segmento es una entidad lgica, de cuya
existencia el programador es consciente, y que usa como una sola entidad lgica. Un
segmento podra conte- ner un procedimiento, un arreglo, una pila o una
coleccin de variables escalares, pero por lo regular no contiene una
mezcla de diferentes tipos.
Las memorias segmentadas tienen otras ventajas adems de
simplificar el manejo de
estructuras de datos que crecen o se encogen. Si cada procedimiento
ocupa un segmento distinto, y la direccin O es su direccin de inicio, se
simplifica considerablemente la vincu-
CAP.6
SEC. 6.1
MEMORIA VIRTUAL
419
Consideracin
Segmentacin
Segment
o 4
(7K)
Paginacin
No
lineales hay?
Muchos
Para simular
memorias grandes
No
ria estar dividida en varios trozos, algunos con segmentos y otros con huecos.
Este fenme- no se llama fragmentacin externa (porque se desperdicia espacio
que est fuera de los segmentos, en los huecos que hay entre ellos).
La
fragmentacin externa tambin se conoce como cuadriculado.
Segmento 4
(7K)
S
e
g
m
e
n
t
o
5
(
4
K
)
Segment
o 3
(8K)
S
Para tener muchos
espacios de direcciones
Segment
o 2
(5K)
Segmento3
(BK)
Segmento3
(8K)
Segmento
(4K) 6
Segmentos
(
4
K
)
Segmento 2
(4K) (5K)
Segmento 2
(5K)
Seg
m
e
n
t
o
2
(
5
K
)
Segment
o 1
(8K)
Segmento
O (4K)
(
a
)
Segmento 7
Segmento 7
Segmento 7 (5K) (5K)
(5K)
Segmento 7
(5K)
Segmento O
Segmento O
Segmento O (4K)
(4K)
Segmento O
(4K)
(b)
Segmento 6
Segmento 2
(5K)
6.1.7
Implementacin
segmentacin
(c)
de
la
(d)
(4K)
(e)
420
CAP. 6
huecos requiere mantener una lista de las direcciones y tamaos de todos los
huecos. Un algo- ritmo muy popular, llamado de mejor ajuste, escoge el hueco
ms pequeo en el que cabe el segmento requerido. La idea es equiparar los
segmentos con los huecos y as evitar gastar un trozo de un agujero grande, que
podra necesitarse despus para un segmento grande.
Otro algoritmo muy utilizado, llamado de primer
ajuste,
explora
circularmente la lista de agujeros y escoge el primer agujero que es lo bastante
grande como para albergar el seg- mento. Esto obviamente toma menos tiempo
que examinar toda la lista hasta encontrar el mejor ajuste. Resulta sorprendente
que el de primer ajuste es tambin un mejor algoritmo en trminos de desempeo
global que el de mejor ajuste, porque este ltimo tiende a generar muchos huecos
pequeos totalmente intiles (Knuth, 1997).
El primero y mejor ajuste tiende a reducir el tamao medio de los huecos. Cada
vez que un
segmento se coloca en un hueco mayor que l, lo que sucede casi siempre (los ajustes
exactos son raros), el agujero se divide en dos partes. Una parte la ocupa el
segmento y la otra es el nuevo hueco. ste siempre es ms pequeo que el hueco
MEMORIA VIRTUAL
421
que hace mucho que MULTICS desapareci, su espritu sigue vivo porque la
memoria virtual de todas las CPU de Intel a partir del 386 ha seguido de cerca su
modelo.
Descriptor
Marco
de
pgin
a
Nm
tanto
el mejor
primer ajuste
como
el
~----~
segmento
Segm
ento
de descriptores
de
~----~
pgina
Ta
bl
a
de
pginas
422
CAP. 6
Palabr
a
~----~
Distancia
Pgin
a
Distancia dentro
de la pgina de 1
O bits
Nmero de
segmento
de 18 bits
figura 6- lO(d), los dos huecos que lo flanquean y los 4K utilizados por el segmento
se fusionaran en un solo hueco de 11 K.
Al principio de esta seccin dijimos que hay dos formas de implementar la
segmenta- cin: intercambio y paginacin. Nuestra explicacin hasta ahora se ha
centrado en el inter- cambio. Con este esquema, segmentos enteros se transfieren
entre la memoria y el disco por demanda. La otra forma de implementar la
segmentacin es dividir cada segmento en pginas de tamao fijo y paginarlas
por demanda. En este esquema, algunas de las pginas de un segmento podran
estar en la memoria y otras en disco. Para paginar un segmento se requiere una
tabla de pginas individual para cada segmento. Puesto que un segmento no es
ms que un espacio de direcciones lineal, todas las tcnicas que hemos visto
hasta ahora para la paginacin se aplican a cada segmento. La nica novedad aqu
es que cada segmen- to tiene su propia tabla de pginas.
Uno de los primeros sistemas operativos que combinaron la segmentacin con
la pagina- cin fue MULTICS (Sistema de Informacin y Cmputo
Multiplexado, MULtiplexed lnformation and Computing Service),
que
inicialmente fue un proyecto conjunto de MIT, Bell Labs y General Electric
(Corbat y Vyssotsky, 1995; y Organick, 1972). Las direcciones de MULTICS
tenan dos partes: un nmero de segmento y una direccin dentro del segmen- to.
Haba un segmento de descriptores para cada proceso, que contena un descriptor
para cada segmento. Cuando se presentaba una direccin virtual al hardware, se
usaba el nmero de segmento como ndice del segmento de descriptores para
localizar el descriptor del seg- mento accesado, como se muestra en la figura 6-11.
El descriptor apuntaba a la tabla de pginas, la que permita paginar cada
segmento
de la forma acostumbrada.
Para mejorar el desempeo, las
combinaciones segmento/pgina de uso ms reciente se guardaban en una
memoria asociativa de 16 entradas en hardware que permita buscarlas
rpidamente. Aun-
Nm.
de
Nmero de
pgina de 6
bits
Direccin MULTICS de dos partes
en el
Bit
s
~-----13
-~.....-1 2
-- .
SEC. 6.1
MEMORIA
tamao del segmento, pero slo se cuenta con 20 bits, as que se emplea un
esquema distinto. Si el campo G (Granularidad) es O, el campo LMITE da
el tamao exacto del segmento, hasta 1 MB; si es 1, LIMITE da el tamao
del segmento en pginas en lugar de bytes. El
tamao de pgina del Pentium 11 nunca es menor que 4 KB, por lo que 20
bits son suficientes
para segmentos de hasta 232 bytes.
Suponiendo que el segmento est en la memoria y la distancia no se
sale del intervalo, el
Pentium 11 suma el campo de 32 bits BASE del descriptor a la distancia
para formar una direccin lineal, como se muestra en la figura 6-14. El
campo BASE se descompone en tres fragmentos que se distribuyen por todo
el descriptor por razones de compatibilidad con el
80286, en el que BASE slo tiene 24 bits. As pues, el campo BASE permite
que un segmento inicie en cualquier punto dentro del espacio de direcciones
lineal de 32 bits.
N
D
I
C
E
O=GDT
1 LDT
Nivel de
privilegio (0-3)
Figura 6-12.
Selector de
Pentium 11.
Distancia
D
e
s
c
r
i
p
t
o
r
Direccin
base ..
~----------32
Bits----------~- Direccin
-----------~------------~ relativa
BASE 0-15
LMITE
o
BASE 24-3G1 DO
O :
...
.
,,
L
MI
T
E
es
t
en
by
te
s
VIRTUAL
423
P DPL
TIPO
BASE 16-23
1 : LMITE est en pginas
O: Segmento de 16 bits
1 : Segmento de 32bits
Lmite
Otros campos
4
Tipo de segmento y proteccin
'------- Nivel de privilegio (0-3)
O : El segmento no est en la memoria
1 : El segmento est en la memoria
,,
Direccin lineal
C
on
ve
rsi
Figura 614.
n de un par (selector,
distancia) en una
direccin lineal.
I!
424
Direccin lineal
10
Bits
10
DIRECTOR
O
DISTANCIA (a)
Directorio de pginas
Tabla de pginas
Marco de pgina
l
1
'
1
-
"'
t
D
.,
l;:;
1'
"'
Palabra
seleccionada
v.>
..>
:~
MEMORIA VIRTUAL
segmento
sistema
po de segmentos,
tal vez del
porque
serapertenece
demasiadoa un
problemtico y tardado verificar que todos
nivel
dado.
sean disjuntos.
I
L'.
R
Posibl
.
El formato del selector se escogi
ingeniosamente a modo de facilitar la localizacin del
Por otra parte, si la paginacin est habilitada la direccines
lineal se interpreta como una
descriptor. Primero se selecciona la LDT o bien la GDT, con base en el bit 2 del selector.
usos tablas de pginas,
direccin
virtual
y se transforma en una direccin fsica mediante
PAG.
de los
Luego el selector se copia en un registro de borrador de la MMU y los tres bits de orden bajo
prcticamente igual que en nuestros ejemplos. La nica complicacin niveles
es que con una direccin virse ponen en O, con lo que el nmero de selector det 13 bits se multiplica efectivamente por 8.
tual de 32 bits y pginas de 4 K, un segmento podra contener un milln de pginas, por lo
DIST.
Por ltimo, se le suma la direccin de la tabla LDT o GDT (que
se guarda en registros interque se usa un mapeo de dos niveles para reducir el tamao de la tabla de pginas cuando los
nos de la MMU) para dar un apuntador directo al descriptor. Por ejemplo, el selector 72 se
segmentos son pequeos.
(b)
refiere a la entrada 9 de la GDT, que se encuentra en la direccin GDT + 72.
Cada programa en ejecucin tiene un directorio de pginas que consta de 1024
Sigamos los pasos por los que un par (selector, distancia) se convierte en una direccin
de 32entradas
bits y se encuentra en una direccin a la que un registro global apunta. Cada entrada
fsica. Tan pronto como el hardware sabe cul registro de segmento se est usando, puede
de directorio apunta a una tabla de pginas que tambin contiene 1024 entradas de 32 bits.
este
encontrar el descriptor completo que corresponde a ese selector en sus registros internos. Si el
Las entradas de la tabla de pginas apuntan a marcos de pgina. El esquema se muestra en la
6-15.(Pes
Transformacin
de una
direccin
lineal en una direccin fsica.
segmento no existe (selector 0) o no est en laFigura
memoria
0), ocurre una
trampa.
El primer
figura 6-15.
caso es un error de programacin; el segundo obliga al sistema operativo a obtener el segmento.
En la figura 6-15(a) vemos una direccin lineal desglosada en tres campos: DIRECTOLuego, el sistema verifica si la distancia rebasa el final del segmento, en cuyo caso ocuRIO, PGINA y DISTANCIA. El campo DIRECTORIO se usa primero como ndice del
...
rre otra trampa. Lgicamente, debera haber un campo de 32 bits en el descriptor que diera el
directorio de pginas para localizar un apuntador a la ..tabla
de pginas apropiada. Luego se
..
.): .
':~
.
~ ,
datos son un poco diferentes.
......
...,.
SEC. 6.1
12
PGINA
u
s
a
el
c
a
m
p
o
P
G
I
N
A
c
o
m
o
n
di
c
e
d
e
la
ta
bl
a
d
e
p
f
i
'i
ginas para encontrar la direccin fsica del marco de pgina. Por ltimo,
DISTANCIA se suma a la direccin del marco de pgina para obtener la
direccin fsica del byte o palabra direccionado.
Las entradas de la tabla de pginas tienen 32 bits cada una, de los cuales
20 contienen un
nmero de marco de pgina. Los dems bits controlan el acceso e indican
si la pgina est limpia o no. El hardware ajusta estos bits que son
utilizados por el sistema operativo, los bits de proteccin y otros bits
utilitarios.
Cada tabla de pginas tiene entradas para 1024 marcos de pgina de
4K, por lo que una
sola tabla de pginas maneja 4 MB de memoria. Un segmento menor
que 4M tendr un directorio de pginas con una sola entrada, un apuntador
a su nica tabla de pginas. As, el gasto extra en el caso de un segmento
corto es de slo dos pginas, en lugar del milln de pginas que se
necesitara en una tabla de pginas de un solo nivel.
A fin de evitar referencias repetidas a la memoria, la MMU del
Pentium 11 cuenta con
hardware especial que busca las combinaciones DIRECTORIO-PGINA
utilizadas ms re- cientemente y las transforma en la direccin fsica del
marco de pgina correspondiente. Slo se llevan a cabo los pasos de la figura
6-15 si la combinacin actual no se us recientemente.
Si nos ponemos a pensar un poco, veremos que si se usa paginacin en
realidad no tiene caso que el campo BASE del descriptor sea distinto de
cero. Para lo nico que sirve BASE es para desplazarse un poco dentro del
directorio de pginas a fin de usar una entrada en ese punto en lugar de al
principio. La verdadera razn para incluir BASE es hacer posible la
segmentacin pura (no paginada), y mantener la compatibilidad con el viejo
80286, que no tena paginacin.
Tambin vale la pena sealar que si una aplicacin dada no necesita
segmentacin y se
conforma con un solo espacio de direcciones paginado de 32 bits, es fcil
satisfacerla. Se asigna
4
2
6
C
A
P.
6
SEC. 6.1
MEMORIA VIRTUAL
427
r.
Pg
ina
Pgi
virtua
na
Vl
fsic
l
ida
a
~.
;:. '
::
::,:
Dist.
.
..
t
t
).o .....
Direccide
n
Marco
Marco de
48
13
16
42
22
Nm. de pg.
Oist.
virtual de 64K
~:~:
51
t
t
t
Marco de
45
El
formato
est
definid
o
totalme
nte
La entrada O es
compartida
por todas las
pginas
virtuales que
terminan en 0...
Marco de
(b)
La entrada 1 es
compartida por todas
las pginas virtuales
que terminan
en 0... 0001
por el
sistema
operativ
o
0000
(e)
19
Figura 6-18. Estructuras de datos empleadas para traducir
direcciones virtuales en el UltraSPARC. (a) TLB. (b) TSB. (e)
Tabla de traduccin.
virtual de 512K
Tabla de
traduccin
(sistema
operativo)
P
gin
a
fsi
ca
(a)
Nm. de pg.
Vli de
da pgina
virtual
Bander
as
t
~ .. ,,
512K Dist.
fsica
pg. de 8K Oist.
pg. de 4M Dist.
pg. de 64K
Dist.
pg. de
Si ninguna de las entradas de la TLB concuerda, ocurre un fallo de TLB, que causa
un
Bits
19
28
22
13
25
16
virtual-fsica
22
19
en el UltraSPARC
jl
428
.
i.,.
t'
'" ..
.....
' - ~-
r
.
I
(
429
a
l
g
n
n
m
e
r
o
p
r
i
m
o
p
,
y
u
s
a
r
e
l
r
e
s
i
d
u
o
c
o
m
o
dice de una tabla de apuntadores, cada uno de los cuales apunta a una lista
enlazada de entradas de pgina virtual que danp por hashing. Cabe sealar
que estas entradas no son las pginas, sino entradas de TSB. El resultado
de buscar una pgina en Ja tabla de traduccin podra ser localizar la
pgina en la memoria, en cuyo caso se actualizar la entrada de TSB de la
cach en software, pero tambin podra ser el descubrimiento de que la
pgina no est en la memoria, en cuyo caso se inicia la accin estndar
de fallo de pgina.
Resulta interesante comparar los esquemas de paginacin del Pentium II
y el UltraSPARC
11. El Pentium 11 maneja segmentacin pura, paginacin pura y segmentos
paginados. El UltraSPARC II slo tiene paginacin. El Pentium 11 tambin
usa hardware para recorrer la tabla de pginas y volver a cargar el TLB
en caso de un fallo de TLB. El UltraSPARC II simplemente transfiere el
control al sistema operativo cuando hay un fallo de TLB.
La razn primordial de esta diferencia es que el Pentium II usa
segmentos de 32 bits, y
tales segmentos tan pequeos (slo un milln de pginas) pueden
manejarse con tablas de pginas convencionales. En teora, el Pentium II
tendra problemas si un programa usara miles de segmentos, pero dado que
ninguna versin de Windows ni de UNIX reconoce ms de un segmento por
proceso, el problema no se presenta. En contraste, el UltraSPARC 11 es una
mquina de 64 bits y puede tener hasta 2000 millones de pginas, por
lo que las tablas de pginas convencionales no funcionan. En el futuro,
todas las mquinas tendrn espacios de direcciones virtuales de 64 bits, por
lo que esquemas como el del UltraSPARC II se converti- rn en la norma.
En (Jacob y Mudge, l998b) se hace una comparacin del Pentium 11, el
UltraSPARC II y otros cuatro esquemas de memoria virtual.
6.2 INSTRUCCIONES
VIRTUALES
DE E/S
d
e
1.
2.
3.
4.
5.
l:t
430
CAP. 6
SEC. 6.2
431
6.
7.
8.
9.
6.2.1 Archivos
Una forma de organizar la E/S virtual es usar una abstraccin llamada archivo. En
su forma ms sencilla, un archivo consiste en una secuencia de bytes que se escriben
en un dispositivo de
E/S. Si el dispositivo de E/Ses un dispositivo de almacenamiento, como un disco, el
archivo se podr leer posteriormente; claro que si no se trata de un dispositivo de
almacenamiento (por ejemplo, una impresora), no podr leerse. Un disco puede
contener muchos archivos, cada uno con un tipo de datos especfico; por ejemplo,
una imagen, una hoja de clculo o el texto del
captulo de un libro. Los diferentes archivos tienen diferentes longitudes y otras
propiedades.
La abstraccin de archivo permite organizar la E/S virtual de una forma sencilla.
Para el sistema operativo, un archivo normalmente es slo una secuencia de
bytes, como dijimos antes. Cualquier estructura adicional es asunto de los
programas de aplicacin. La E/S con archivos se efecta con llamadas al sistema
para abrir, leer, escribir y cerrar archivos.
Antes de leer un archivo, es preciso abrirlo. El proceso de abrir un archivo permite
al sistema
operativo localizar el archivo en el disco y traer a la memoria la informacin
necesaria para accesar a l.
Una vez que se ha abierto un archivo, puede leerse. La llamada al sistema
read debe
tener, como mnimo, los siguientes parmetros:
Nmero
de
regi
stro
lgico
1 registro {
16 lgico
Siguiente
registro lgico
que se leer
16
17
18
Siguiente
registro lgico
que se leer
19
17
0
21
22
23
18
21
Me
mo
ria
prin
cip
al
22
Re
gist
ro
lgico
23
r-t-
}
Buffer
24
-B1uffer
24
25
25
26
Me
mor
ia
prin
cipa
l
"--Rl_geic_og_1is9_t_ro_}
(a)
l.
2.
3.
Pista4
SEC. 6.2
433
r.
'
(b)
Direccin de ro
a
r
c
h
i
v
o
SEC.
6.2
43
4
Pista Sector
Nmero
de sectores
en el hueco
Pista O
2 3 4
10 11
o
1
2
6
1
11
1
Sector
6
1
1
10
43
5
INSTRUCCIONES DE E/S
VIRTUALES
3
7
3
3
3
3
8
(a)
o o
o o
1 oo
1
2 o1
o
3 oo
o
4
o o o o
o o o o
e o o o o o
o 1 o o o 1
o o 1 1 1 1
1 o o o o
1
o o o
o o o
1 1 o
o o o
(
b
)
'
do se asigna 0 borra cualquier archivo del disco, la li~~a o ta . a e as1 gnac1 0 ~ se
t l ce
ac ua 1 .
Antes de abandonar el tema de la implementacton de sistemas de arch1v~s,
vale la p~na
comentar algo acerca del tamao de la unidad de asignacin. En este ~enudo
ha~ vanos factores importantes. Primero, el tiempo de bsqueda y el retraso
rot.ac1onal d?mm~? los accesos a disco. Habiendo invertido l O ms en llegar al
principio de una unidad de asignacin, es mucho mejor leer 8 KB (en
aproximadamente 1 ms) que 1 KB (en aproximadamente: 125 .ms), ya que leer 8 KB
como ocho unidades de 1 KB requerira oc~o b~~uedas. La eficiencia de
transferencia es un argumento a favor de tener unidades de asrgnacion grandes. .
, .
.
Otro argumento a favor es que tener unidades de asi.gnacin pe~ueas
tambin 1mpl.1ca
tener muchas de ellas. Esto, a su vez, implica que los ndices de archivos o las
tablas de lista enlazada en la memoria sern grandes. De hecho, la razn por la que
MS~oos ~uvo que cambiar a unidades de asignacin de varios sectores fue el hecho
de que las direcciones e? disco se
guardaban como nmeros de 16 bits. Cuando los discos comen.zaro~ ten,er
mas de 64K
sectores, Ja nica forma de representarlos era usar unidades de as1~nac10n m~~
grand~s, para
que el nmero de unidades de asignacin no excediera 64K. La pnmera vers1?n
de .Wmdows
reconoce
ambos
tamaos.
Por otra parte, un argumentoen favor de tener unidades de asig~aci~
~equeas es el hecho
de que pocos archivos ocupan un nmero entero de ~nida~:s de as1g.nac10n. Por
tan~o, se d.es- perdiciar algo de espacio en la ltima unidad de asignacron de
casi tod~s .los archivos. S'. el archivo es mucho mayor que la unidad de
asignacin, el espa~to desper~tcia~~ medto sera l~ mitad de una unidad de
asignacin. Cuanto mayor sea la unidad de asrgnacion, mayor sera la cantidad
de espacio desperdiciado. Si en promedio los archivos son mucho ms
pequeos
usar la memoria secundaria de Ja computadora (por ejemplo, Jos discos) como lugar
de almacenamiento para los programas y datos. La informacin a la que la computadora
puede acce- der directamente sin necesidad de intervencin humana se dice que est
en lnea, en contraste con la informacin fuera de lnea, que requiere intervencin
humana (por ejemplo, insertar un CD-ROM) para que la computadora pueda accesar
a ella.
La informacin en lnea se guarda en archivos, y los programas pueden accesar
a ella
usando las instrucciones de E/S de archivos que acabamos de explicar. Sin embargo,
se nece- sitan instrucciones adicionales para seguir la pista a toda la informacin
almacenada en lnea, reunirla en unidades convenientes y protegerla contra el uso no
autorizado.
La forma en que un sistema operativo acostumbra organizar los archivos en
lnea es
agrupndolos en directorios. En la figura 6-22 se muestra un ejemplo de
organizacin de directorios. Se incluyen llamadas al sistema para efectuar al menos
las siguientes funciones:
1.
436
CAP.6
.
,
Archi
Archivo 10
2.
3.
4.
437
Nombre:
Patio
vo O
Longitud:
1840
Archi
Tipo:
Anatidae dataram
vo 1
Fecha creado:
Marzo 16 de 1066
Archivo
2
ltimo acceso:
Septiembre 1 de 1492
Archivo
3
ltimo cambio:
Julio 4 de 1776
Archivo
4
Archivo 5
~
Archivo
6
Archivo
7
Archivo
8
Archivo
9
Bloque O:
Pista 4
Sector 6
Bloque 1:
Pista 19
Sector 9
Bloque 2:
Pista 11
Sector 2
Bloque 3:
Pista 77
Sector O
La figura 6-23
muestra la diferencia
entre el verdadero
procesamiento en
paralelo, con
ms de un procesador
fsico, y el procesamiento
paralelo simulado, con un
solo procesador fsico.
Aun cuando se simula el
procesamiento paralelo, es
til pensar que cada proceso
tiene su propio procesador
virtual dedicado. En el caso
simulado surgen los mismos
problemas de comunicacin
que se presentan cuando hay
un verdadero procesamiento
paralelo.
El proceso 3
Proceso 2
1
1
1
Proceso 1
Proceso
1
<.>
El proceso 1 se ejecuta
Tie
mpo
(
a
)
Tie
mp
o
(
b
)
cada proceso por turno durante un tiempo corto. En otras palabras, varios procesos
pueden compartir el procesador.
6.3.1 Creacin de
procesos
Cuando se va a ejecutar un programa, debe operar como parte de algn proceso.
Este proce- so, como todos los dems, se caracteriza por un estado y un espacio
de direcciones a travs del cual se puede accesar al programa y los datos. El
estado incluye como mnimo el contador de programa, una palabra de estado del
programa, un apuntador de pila y los registros gene- rales.
4
3
8
...
...
.
t
.,
'
.
1
.
.
'
6.3.2 Condiciones de
competencia
En muchos casos los procesos paralelos necesitan comunicarse y sincronizarse
para poder efectuar su trabajo. En esta seccin examinaremos la sincronizacin
de procesos y explicare- mos algunas de las dificultades con la ayuda de un
ejemplo detallado. En la seccin que sigue se presentar una solucin a estas
dificultades.
Considere una situacin que consiste en dos procesos independientes, el 1
y el 2, que se
comunican por medio de un buffer compartido en la memoria principal. Para
simplificar, llamaremos al proceso 1 el productor y al proceso 2 el consumidor.
El productor calcula nmeros primos y los coloca en el buffer, uno por uno. El
consumidor los saca del buffer uno por uno y los imprime .
Estos dos procesos se ejecutan en paralelo con diferente velocidad. Si el
productor des- cubre que el buffer est lleno, se "duerme"; es decir, suspende
temporalmente su operacin en espera de una seal del consumidor. Ms
adelante, una vez que el consumidor ha sacado un nmero del buffer, enva una
seal al productor para despertarlo; es decir, reiniciarlo. As mismo, si el
consumidor descubre que el buffer est vaco, se duerme. U na vez que el
produc- tor ha colocado un nmero en el buffer vaco, despierta al consumidor
dormido.
En este ejemplo usaremos un buffer circular para la comunicacin entre
procesos. Los
apuntadores in y out se usarn como sigue: in apunta a la siguiente
palabra
desocupada (don- de el productor pondr el siguiente nmero primo) y out
apunta al siguiente nmero que el consumidor quitar. Si in = out, el buffer
est vaco, como se muestra en la figura 6-24(a).
U
n
a
v
e
z
q
u
e
e
l
p
r
o
d
u
c
t
o
r
h
a
g
e
n
e
r
a
d
o
a
l
g
u
n
o
s
primos, la situacin es la que se muestra en la figura 6-24(b). La figura 624(c) ilustra el buffer despus de que el consumidor ha sacado algunos de
estos nmeros primos para imprimirlos. La figura 6-24(d)-(f) muestra el efecto
de una actividad de buffer constante.
El tope del buffer es lgicamente
contiguo a su base; es decir, el buffer da la vuelta.
Si hubo una rfaga
repentina de entradas e in dio la vuelta hasta estar slo una palabra detrs de
out (por ejemplo, in= 52 y out= 53), el buffer est lleno. La
ltima palabra no se usa; si se usara, no habra forma de saber si in = out
significa que el
buffer est lleno
o que est vaco.
.
'..;
SEC. 6.3
PARALELO
439
e
j
e
m
p
l
o, si in= 62 y out= 63), quiere decir que el buffer est lleno y el productor
se duerme llamando a suspenden P2. Si el buffer no est lleno, el nuevo
primo se inserta en el buffer (P3) e in se incrementa (P4). Si el nuevo valor
de in est 1 adelante de out (P5) (por ejemplo, si in= 17 y out= 16), quiere
decir que in y out deben haber sido iguales antes de que in se
I n,
ou t ,
i
n
c
r
e
(Cl) para ver si el buffer est vaco. Si as es, el consumidor no tiene nada
que hacer, por lo que se duerme. Si el buffer no est vaco, el consumidor
saca el siguiente nmero que se imprimir (C2) e incrementa out (C3). Si
out est dos posiciones adelante de in en este mo- mento (C4 ), debi haber
estado una posicin adelante de in antes de que ste se incrementara.
.
(a)
(e)
(b)
(f)
(e)
(d)
SEC
. 6.3
440
CAP.6
public class m {
final public static int TAM_BUFFER = 100;
final public static long MAX_PRIMO = 1 OOOOOOOOOOOL;
public static int in = O, out = O;
public static long buffer{] = new long[TAM_BUFFER];
public static productor p;
public static consumidor c;
public static void main(String
p = new productor( );
c = new consumidor( );
p.start( );
c.start( );
,.
',
"
.
11 buffer va de O a 99
11 parar aqu
11 apuntadores a los datos
11 los primos se guardan aqu
11 nombre del productor
11 nombre del consumidor
args[ ]) {
11 clase principal
11 crear el
productor
11 crear el
consumidor
11 iniciar el
productor
JI iniciar el
11 Funcin utilitaria para incrementar
consumidor
circularmente in y out
public static int siguiente(int k) {if (k < TAM_BUFFER - 1) return (k + 1 ); else return(O);}
11 clase de
productor
11 cdigo de
productor
11 variable de
borrador
'
'I
:::::1
w
h
i
l
e
(
p
r
441
Productor
en P1
Consumido
ren CS
100-----
imo e
m.MAX_PRIM
O) {
primo=
sig_primo(primo);
if (m.siguiente(m.in) ==
m.out) suspend();
m.buffer{m.in] = primo;
m.in = m.siguiente(m.in);
Productor en
P1
Consumidore
n C1
100-----
if
(
m
Productor en PS
enva seal de
despertar
Consumidoren C1
100-----
.siguiente(m.out) == m.in)
m.c.resume();
1
1
11 enunciado P2
11 enunciado P3
11 enunciado P4
11 enunciado P5
e
n
u
n
c
i
a
d
o
1 nmero
In= 22
In = Out
B
u
ff
e
r
22e
Out= 21
Primo
P
1
I
n
=
2
3
va
c
o
JI funcin que
prvate long sig_primo(long primo)
{... }
calcula el
siguiente
primo
Out
Primo
1 nmero
en el buffer
en el buffer
(a)
11 clase
consumidor
11 cdigo del
consumidor
11 variable de
borrador
11 enunciado C1
11 enunciado C2
11 enunciado C3
11 enunciado C4
11 enunciado C5
442
EL NIVEL
DE MQUINA
DE SISTEMA
OPERATIVO
CAP. 6
(b)
(c)
Figura 6-26. Fracaso del mecanismo de comunicacin
productor-consumidor.
depende de quin gana la competencia por pro- bar in y out despus de que out se
incrementa.
El problema de las condiciones de competencia se conoce bien. De hecho, es
tan grave
que varios aos despus de la introduccin de Java Sun modific la clase Thread y
recomen- d no usar las llamadas suspend y resume porque daban pie a
condiciones de competencia muy a menudo. La solucin que se ofreci fue una
basada en el lenguaje, pero como aqu estamos estudiando sistemas operativos
analizaremos una solucin distinta, que muchos sis- temas operativos manejan,
entre ellos UNIX y NT.
SEC. 6.3
INSTRUCCIONES
VIRTUALES
PARA PROCESAMIENTO
EN PARALELO
443
continuar. Una instruccin up con un semforo distinto de cero simplemente lo
incrementa en 1. En esencia, un semforo es un contador para guardar seales de
despertar que se usarn posteriormente, a fin de que no se pierdan. Una propiedad
indispensable de las instrncciones de semforo es que, una vez que un proceso ha
iniciado una instruccin con un .semforo '
ningn otro proceso podr acceder al semforo hasta que el primero haya
finalizado la instruccin o bien se haya suspendido tratando de ejecutar down con un O. La figura
6-27 resu- me las propiedades fundamentales de las llamadas al sistema up y
down.
Instruccin
Semforo= O
Semforo> O
Up
Down
Semforo = semforo + 1
semforo + 1:
si el otro proceso se detuvo tratando de l evar a
cabo una instruccin down con este
semforo, ahora puede finalizar la down y
continuar su ejecucin
El proceso se detiene hasta que el otro proceso hace
semforo -1 up con este semforo
Semforo =
Semforo=
Como se dijo antes, Java tiene una solucin basada en el lenguaje para manejar
condicio- nes de competencia, y ahora estamos hablando de sistemas operativos.
Por tanto, necesita- mos una forma de expresar el uso de semforos en Java, aunque
no forme parte del lenguaje ni de las clases estndar. Lo haremos suponiendo que se
escribieron dos mtodos nativos, up y down, que efectan las llamadas al sistema
up y down, respectivamente. Si invocamos estos mtodos con enteros ordinarios
como parmetros, podremos expresar el uso de semfo- ros en programas escritos
en Java.
La figura 6-28 muestra cmo puede eliminarse la condicin de competencia
mediante el
uso de semforos. Se aaden dos semforos a la clase m, disponible, que
inicialmente es 100 (el tamao del buffer), y lleno, que inicialmente es O. El
productor comienza a ejecutarse en Pl en la figura 6-28, y el consumidor comienza
a ejecutarse en Cl igual que antes. La llama- da down con lleno detiene el proceso
consumidor de inmediato. Cuando el productor encuen- tra el primer nmero primo,
invoca a down con disponible como parmetro, lo que decrementa disponible a 99.
En P5, el productor invoca a up con lleno como parmetro, lo que incremen- ta lleno
a 1. Esta accin libera al consumidor, que ahora puede finalizar su llamada down
suspendida. En este momento, lleno es O y ambos procesos estn en ejecucin.
Volvamos a examinar ahora la condicin de competencia. En cierto momento,
in = 22,
out= 21, el productor est en Pl y el consumidor est en CS. El consumidor
termina lo que estaba haciendo y pasa a Cl donde invoca down confilled, que
t
444
.,
'
;
.
SEC. 6.3
445
public class m {
final public static int TAM_BUFFER = 100;
final public static long MAX_PRIMO = 1
OOOOOOOOOOOL;
public static int in = O, out = O;
public static long buffer[] = new
long[TAM_BUFFER];
public static productor p;
public static consumidor c;
public static int lleno = O, disponible = 100;
public static void main(String args[ ]) {
p = new productor();
c = new consumidor( );
p.start( );
c.start( );
11 buffer va de O a 99
11 parar aqu
11 apuntadores a los datos
11 los primos se guardan
aqu
11 nombre del productor
11 nombre del consumidor
11 semforos
11 clase principal
11 crear el productor
11 crear el consumidor
11 iniciar el productor
11 iniciar el consumidor
11 clase productor
11 mtodos para
semforos
11 cdigo de
productor
11 variable de
borrador
. : .. 1
..J
J',-.r;
C
u
ando
algn
otro
.f
primo=
sig_primo(primo);
down(m.disponib
le);
m.buffer[m.in]
=
primo;
m.in =
m.siguiente(m.i
n);
up(m.lleno);
.-';.~
11
enunciad
o P1
-_;;;
11
_:;:
e~
enunciado
P2
11
enunciado
P3
11
enunciado
P4
~
1
enunciado
P5
esperan
do.
.
.
~..:1
:
1 t:
<
11
~~
..
;). S::]
~;:~'.
.--
~- ~
r : - e
~.~
)
11 funcin que
calcula
;T.~
. .... . .
e-~
,.. ..;
11 el siguiente primo
:'.J. ::-
11 clase
consumidor
...l--1
r.. )
P..1. ,.~
2: ~
11 mtodos para
semfor~
11 cdigo del consumidor
11 variable de borrador
11 enunciado C1
11 enunciado C2
11 enunciado C3
11 enunciado C4
11 enunciado C5
::.'
SEC. 6.4
6.4.1 Introduccin
En esta seccin presentaremos una breve introduccin a nuestros dos
sistemas operativos de ejemplo, UNIX y NT, concentrndonos en su historia,
estructura y llamadas al sistema.
UNIX
universitarios, y una opinin muy difundida tanto entre los profesores como los estudiantes
era que los sistemas operativos que venan con la PDP-11 eran horribles. UNIX pronto llen
el vaco, en buena medida porque vena acompaado por el cdigo fuente completo, Jo que
les ocurran.
permita
a los profesores
y estudiantes
las adiciones
y modificaciones que se
Una de las muchas
universidades
que adquirieron
UNIX hacerle
desde eltodas
principio
fue la University
of California en Berkeley. Puesto que contaba con el cdigo fuente completo, Berkeley pudo
447
Categora
Ejemplos
Gestin de archivos
Gestin de directorios
trasladar archivos
Gestin de procesos
Gestin de memoria
Obtener/fijar
parmetros
Fechas y horas
Establecer/aceptar
Diversas
Habilitar contabilizacin;
448
CAP.6
SEC. 6.4
449
Shell
1 Programa de
usuario 1
t
t
Interfaz de llamadas al sistema
Sistema de archivos
Gestin de procesos
IPC
Planificacin
Modo de usuario
Modo de kernel
Win
dow
sNT
Cua
ndo
Drivers de
dispositivos
Seal
es
IGes. de
1
memorial
H
a
r
d
w
a
r
e
SEC. 6.4
451
450
'
..
1.
Inc
lus
o
con
la
lleg
ada
de
Wi
ndo
ws
98
en
199
8,
Msoos
seg
ua
ah
(ah
ora
en
su
ver
si
n
7
.1)
y
s
e
g
Mod
o
de
usuari
o
Subsistema Win32
1 Subsistema POSIX
Subsistema OS/2 1
nectados simultneamente por una red, cada uno de los cuales accede a
sus propios archivos
1
1
Servic
ios
del
sistem
a
E/S
Ejecuti -<
Seguridad
vo
Cach
de
Memoria
virtual
Procesos
Win32
de forma protegida.
NT es un verdadero sistema operativo de 32 bits con
multiprogramacin. NT Apoya ml- tiples procesos de usuario, cada uno de
los cuales tiene un espacio de direcciones virtual completo de 32 bits
paginado por demanda. Adems, el sistema mismo se escribi como
cdigo de 32 bits exclusivamente.
Una de las mejoras originales de NT respecto a Windows 95 fue su
estructura modular que consista en un ncleo ms o menos pequeo que
operaba en modo de kernel ms varios procesos servidores que operaban
en modo de usuario. Los procesos de usuario interactuaban con los
procesos servidores empleando el modelo cliente-servidor: un cliente
enva un men-
enlaces
archivos
e Interfaz
Sist. de
Gestin de objetos
con
archivos
dispositivos
Drivers de dispositivos
Microncleo
grficos
Mod
o de
kern
el
...
,:;
e
r .
..
1
. 1
-:
::
:
Y
Arriba de la capa de abstraccin del hardware est una capa que contiene
el microncleo
y los drivers de dispositivos. El microncleo y todos los drivers tienen
acceso directo al hardware cuando lo necesitan, pues contienen cdigo
dependiente del hardware.
SE
C.
6.4
EJEMPLOS DE SISTEMAS
OPERATIVOS
4
5
3
m
or
ia
p
ar
a
a
gi
li
z
ar
el
a
c
c
es
o
a
el
lo
s
e
n
(e
l
pr
o
b
a
bl
e)
c
as
o
d
e
q
u
e
se
ne
ce
sit
en
ut
ili
za
el
su
454
bsistema Win32 para efectuar algunas de sus tareas, pero sin exportar la
interfaz Win32 completa a sus programas de usuario.
El subsistema os/2 tiene limitaciones similares de su funcionalidad y es
probable que se
SEC. 6.4
CAP. 6
455
Caracterstica
Windows 95/98
NT 5.0
API Win32?
No
No
Correspondencias
No
No
Opera de inmediato,
Reconoce UNICODE?
No
Se ejecuta en
lntel 80x86
80x86, Alpha
el
de archivos protegidas?
sin tener que configurarse?
Apoyo a multiprocesadores?
No
S
Cdigo reentrante descriptores
dentro del sistema
operativo?
No
S
UNIX no pueden pasarse a otros procesos y usarse ah). Sin embargo, en
tivo para aparatos electrnicos de consumo, Windows CE), con unas cuantas
excepciones. Por ejemplo, Windows 95/98 no tiene seguridad, por lo que las
llamadas API relacionadas con la seguridad simplemente devuelven cdigos de
error a Windows 95/98. Adems, los nombres de archivo de NT usan el conjunto
de caracteres Unicode, que no est disponible en Windows 95/98. Tambin hay
diferencias en los parmetros a algunas llamadas de funciones API. En NT, por
ejemplo, todas las coordenadas de pantalla dadas en las funciones de grficos son
verdaderos nmeros de 32 bits; en Windows 95/98 slo se usan los 16 bits de
orden bajo (por compatibilidad hacia atrs con Windows 3.1 ). La existencia de la
API Win32 en varios
datos
S
NT.
virtual
SE
C.
6.4
EJEMPLOS DE SISTEMAS
OPERATIVOS
empresa de
'
y
NT
4
5
7
Memoria
virtual
en Windows NT
r
.
,
.,
.!
t
:
:
.,
,,
,.
que hace corresponder longitud bytes que inician a dist_arch dentro del
archivo, con el espa- cio de direcciones virtual a partir de dir_virtual.
Como alternativa, se puede ajustar el parmetro banderas para pedir al
sistema que escoja una direccin virtual, que entonces devolver como
dir_ fisica. La regin mapeada debe ser un nmero entero de pginas y
estar alineada con una frontera de pgina. El parmetro prot puede
especificar cualquier combinacin de permisos de lectura, escritura o
ejecucin. La correspondencia puede eliminarse despus con unmap.
Varios procesos pueden establecer una correspondencia con el mismo
archivo al mismo tiempo. Se ofrecen dos opciones para compartir. En la
primera se comparten todas las pgi- nas, de modo que las escrituras
realizadas por un proceso sean visibles para todos los dems. Esta opcin
ofrece un camino de comunicacin entre procesos con gran ancho de
banda. La otra opcin comparte las pginas en tanto ningn proceso las
modifique. Apenas un proceso intente escribir en una pgina, obtendr un
fallo de proteccin, lo que har que el sistema operativo le entregue una
copia privada de la pgina para que escriba en ella. Este esquema,
llamado copiar al escribir, se usa cuando cada proceso necesita creer
que es el nico que tiene una correspondencia con el archivo.
o
ke
rn
el
.
El
es
pa
ci
('.:
!.
....
u
I
EJEMPLOS DE SISTEMAS
OPERATIVOS
45
9
6
3
4
.
T
o
d
a
s
e
l
l
a
s
o
p
e
r
a
n
s
o
b
r
e
u
n
a
r
e
g
i
n
~-
Virtual Free
Liberar o desconfirmar
una regin
VirtualProtect
Virtualuery
Virtuallock
inhabilitar
su paginacin) VirtualUnlock
de una regin
de la
forma normal
C reateFi leMappi ng
asignarle un nombre
MapViewOfFile
Quitar un
6.4.3
Ejemplos
de E/S virtual
La tarea fundamental de cualquier sistema operativo es proveer servicios a los
programas de usuario, principalmente servicios de E/S como leer y escribir
archivos. Tanto UNIX como NT ofre- cen una amplia variedad de servicios de E/S a
los programas de usuario. Para casi todas las llama- das al sistema de UNIX, NT
tiene una llamada equivalente, pero al contrario no se cumple, pues NT tiene
muchas ms llamadas y cada una es mucho ms complicada que su contraparte
en UNIX.
E/S
virtua
l en
UNI
X
Gran parte de la popularidad del sistema UNIX se debe directamente a su
sencillez, que a su vez es un resultado directo de la organizacin del sistema
de archivos. Un archivo ordinario es una sucesin
de bytes de 8 bits que
comienzan
en O y llegan hasta un mximo de 232 -1 bytes. El sistema
operativo en s no impone una estructura de registros a los archivos, aunque
muchos programas de usuario consideran a los archivos de texto ASCII como
secuencias de lneas, cada una de las cuales termina con un salto de lnea.
Cada archivo abierto tiene asociado un apuntador al siguiente byte que se
leer o escribir.
Las llamadas al sistema read y write leen y escriben datos a partir de la
posicin en el archivo indicada por dicho apuntador. Ambas llamadas adelantan
el apuntador despus de la operacin en una cantidad igual al nmero de bytes
transferidos. Sin embargo, se puede accesar aleatoriamente
a los archivos asignando explcitamente un valor especfico al
apuntador del archivo.
Adems de los archivos ordinarios, el sistema UNIX tambin reconoce
archivos especia- les, que sirven para accesar a dispositivos de E/S. A cada
dispositivo de E/S se le asigna por lo regular uno o ms archivos especiales.
Al leer del archivo especial asociado, y escribir en l, un programa puede
leer del dispositivo de E/S o escribir en l. Los discos, impresoras, terminales
y muchos otros dispositivos se manejan de esta manera.
Las principales llamadas al sistema de UNIX para archivos se enumeran en
la figura 6-35.
La llamada creat (sin la e final) se puede usar para crear un archivo
nuevo. Hoy da esta llamada no es estrictamente
necesaria, porque open
tambin puede crear un archivo nuevo.
Unli elimina un archivo, siempre que el archivo slo est en un directorio.
nk
que otro proceso pueda usarlo. Las dos funciones que siguen establecen y
anulan la corres- pondencia de archivos, respectivamente. Un proceso puede
usar la ltima para mapear un archivo que actualmente tambin est
mapeado por un proceso distinto. De este modo, dos o ms procesos
pueden compartir regiones de sus espacios de direcciones.
Estas funciones de la API son las fundamentales sobre las que se
construye el resto del sistema de administracin de memoria. Por ejemplo,
hay funciones API que asignan espacio
a estructuras de datos en uno o ms montculos, y que liberan ese espacio.
Se usan montculos para almacenar estructuras de datos que se crean y
destruyen dinmicamente. No se aplica recoleccin de basura a los
montculos, as que es responsabilidad del software usuario libe- rar los
bloques de memoria virtual que ya no se usan. (La recoleccin de basura es
la elimina- cin automtica de estructuras de datos no utilizadas, por
parte del sistema.) El uso de montculos en NT es similar al uso de la
funcin malloc en sistemas UNIX, excepto que ah puede haber mltiples
montculos administrados de forma independiente.
EL NIVEL DE MQUINA DE SISTEMA OPERATIVO
CAP.6
460
Llamada al sistema
creat(name, mode)
Significado
1
1 t,
... ,,.,,
1
...
j:
:!
~:
~
:'
:
'
w
stat(name, buffer)
'
Devolver informacin
461
Eliminar un archivo
mode)
Abrir o crear un archivo y devolver un descriptor de archivo close(fd)
Cerrar un archivo
read(fd, buffer, count)
Leer cuenta bytes y colocarlos en buffer
SEC. 6.4
d
o
d
o
{
}
w
hi
le
(c
u
e
nt
a
>
O)
;
/
/
C
e
r
r
a
r
l
o
s
cue
nta
=
rea
d(d
ain,
buff
er,
byt
es);
if
(cu
ent
a>
O)
writ
e(da
out,
buff
er,
cue
nta);
arc
hiv
os
clo
se(
dai
n);
!~
~t
c
l
o
s
e
(
d
a
o
u
t
)
;
Figura 6-36. Fragmento de programa para copiar un archivo
usando las llamadas al sistema UNIX. Este fragmento est en
C porque Java oculta las llamadas al sistema de bajo nivel y
estarnos tratando de exponerlas.
f:l
link("/usr/ast/bin/game3", "/usr/jim/jotto")
'1.
462
EL NIVEL
DE MQUINA DE SISTEMA
OPERATIVO
S
E
EJEMP
LOS
DE
SISTEM
AS
OPERA
TIVOS
CAP.6
Directori
o raz
Llamada al sistema
Significado
m
k
d
i
r
/lib
/usr
/dev
/bin ast
jim
(
n
a
m
e
,
m
o
d
e
)
C
r
e
a
t
e
u
n
d
i
r
e
c
t
o
r
i
o
o
n
u
n
d
m
e
b
r
i
m
n
a
i
r
c
t
c
t
o
l
v
ink(name1, name2)
Crear
una entrada de directorio nombre2 que
apunta a nombre!
1
o
readdi r( di rpoi nter)
Leer la siguiente entrada de un directorio
unlink(name)
Eliminar nombre de su directorio
closedir( dirpointer)
Cerrar un directorio
Figura 6-38.
Principales llamadas
para gestin de
directorios en UNIX.
chdir(dirname)
Cambiar el directorio de trabajo a
nombredir
'
"
"
t
o
o
.
e
/
u
s
r
,
j
r
/
/
u
s
r
/
j
i
a
s
t
/
b
i
n
m
g
b
i
n
j
a
m
e
o
t
t
o
g
a
m
e
d
a
t
a
game
464
CAP.6
open("foo.c",
O)
EJEMPLOS DE SISTEMAS
OPERATIVOS
465
3.
4.
466
ventaja.
S
E
EJEMPLOS DE SISTEMAS
OPERATIVOS
467
UNIX
CreateFile
open
Crear un archivo
o abrir un archivo existente; devolver una manija
DeleFile
archivo existente
unlink
Destruir un
r
a
d
a
C
o
p
i
a
r
s
a
l
i
d
a
.
=
mangoin
CreateFile("datos",
GENERIC_READ,
O,
NULL,
OPEN_EXISTING, O, NULL);
mangoout
= CreateFile("anuevo",
GENERIC_WRITE,
O,
NULL,
CREATE, ALWAYS,
FILE_ATIRIBUTE_NORMAL, NULL);
e
l
a
r
c
h
i
v
o
.
d
o
1
1
{
3.
Banderas que indican si varios
procesos pueden abrir el archivo a la
vez.
CloseHandle
archivo
close
Cerrar un
ReadFile
un archivo
read
Leer datos de
WriteFile
write
SetFilePointer
lseek
GetFileAtributes
stat
LockFile
fcntl
UnlockFile
fcntl
CreateFile puede
l.
Un apuntador al nombre del
archivo que se crear o abrir.
2. Banderas que indican si el
archivo puede leerse, escribirse o
ambas cosas.
del
4.
Un apuntador al descriptor de
seguridad, que indica quin puede
accesar el archivo.
5.
Banderas que indican qu hacer
si el archivo existe/no existe.
6.
Banderas que se ocupan de
atributos como archivado, compresin,
etc.
7.
La manija de un archivo cuyos
atributos debern clonarse para el
nuevo archivo.
a
n
g
o
o
u
t
)
;
Figura 6-40. Fragmento de
programa para copiar un
archivo usando las funciones
API de Windows NT. Este
fragmento est en C porque
Java oculta las llamadas al
sistema de bajo nivel y
estamos tratando de
exponerlas.
NT maneja
un sistema
de archivos
jerrquico similar al de UNIX. Sin embargo,
el separador de nombres componentes es\ en
lugar de/, un fsil heredado de Ms-oos. Existe
el concepto de directorio de trabajo vigente
y los nombres de ruta pueden ser relativos
o absolutos.
Una diferencia
importante
respecto a UNIX es que UNIX permite montar
sistemas de archivos que estn en diferentes
discos y mquinas juntos en un solo rbol
de nombres, lo que oculta la estructura de
discos de todo el software. NT 4.0 no tiene
esta propiedad, por lo que los nom- bres de
archivo absolutos deben comenzar con una
letra de unidad que indica de cul disco
lgico
se trata,
como
en
C:\windows\systemVoo.dll. A partir de
NT
Funcin API
UNIX
CreateDirectory
mkdir
RemoveD i rectory
rmdir
Eliminar un directorio vaco
archivos
al
sistema
de archivos
opendir
Inicializar para comenzar a leer las entradas de un directorio
propiamente dicho.
readdir
Leer la siguiente entrada del directorio
FindFirstFile
FindNextFile
MoveFile
SetCurrentoirectory
EL NIVEL DE
Pasar un archivo ele un
directorio a otro
MQUINA DE SISTEMA OPERATIVO
468
chdir
CAP.6
Significado
EJEMPL
OS DE
SISTEMA
S
OPERATI
VOS
UNIX
tiene con
1
Informacin
Nombre
Nombre
estndar
de
archivo MS-DOS
Seguridad
Datos
E
n
t
r
a
d
a
M
F
T
p
a
r
a
u
n
a
r
c
h
i
v
o
C
a
b
e
c
e
r
a
M
F
T
T
a
b
l
a
d
e
a
r
c
h
i
v
o
s
m
a
e
s
t
r
a
Figur
a 642.
La
tabla
maest
ra de
archi
vos
de
Wind
ows
NT.
470
471
EJEMPLOS
comn, a series de cmulos consecutivos, por lo que un solo nmero de cmulo y una longitud pueden representar una cantidad arbitraria de datos del archivo. Si una sola entrada de
MFT no basta para contener toda la informacin que se supone debe contener, se pueden
encadenar a ella una o ms entradas adicionales.
El tamao de archivo mximo es de 264 bytes. Para tener una idea de cun grande es un
archivo de 264 bytes, imagine que el archivo se escribe en binario y cada O o 1 ocupa J mm de
espacio. El listado de 267 mm tendra 15 aos luz de longitud, y podra salir del Sistema Solar,
l
l
e
g
a
r
a
A
l
p
h
a
C
e
n
t
a
u
r
i
,
y
r
e
g
r
e
s
a
r
.
El sistema de archivos NTFS
tiene muchas otras propiedades
interesantes que incluyen compresin
de datos y tolerancia de fallos
empleando transacciones atmicas.
Se puede en- contrar informacin
adicional al respecto en (Solomon,
1998).
6
.
4
.
4
E
j
e
m
p
l
o
s
d
e
g
e
s
t
i
n
d
e
p
r
o
c
e
s
o
s
Tanto UNIX como NT permiten dividir un
trabajo en varios procesos que se pueden
ejecutar en (pseudo)paralelo
y
comunicarse entre s,
como en el
ejemplo del productor y el consumidor
que vimos antes. En esta
seccin
explicaremos cmo se controlan los
procesos en ambos sistemas. Adems,
los dos sistemas apoyan el paralelismo
d
e
F
i
g
u
r
a
6
4
3
.
r
b
o
l
d
e
p
r
o
c
e
s
o
s
e
n
,,.
U
N
I
X
.
:
'
"
"
.
n
i
~~
;
:
f,
~
'
SEC. 6.4
DE SISTEMAS OPERATIVOS
EJEMPLOS
473
El estndar UNIX para enlaces se
llama pthreads y est definido por
rostx (Pl003.1C). El
estndar
contiene llamadas para
gestionar y sincronizar enlaces. No est
definido si los enla- ces estn bajo el
control del ncleo o totalmente en el
espacio de usuario. Las llamadas para
enlaces de uso ms comn se enumeran
en la figura 6-44.
Llamada para enlaces
Significado
pthread_create
Crear un enlace nuevo en el espacio
de direcciones del invocador
T
e
r
m
i
n
a
r
e
l
e
n
l
a
c
e
i
n
v
o
c
a
d
o
pt
hr
ea
d
_j
oi
n
Es
p
e
Los
enlaces
pueden
sincronizarse empleando candados
llamados mutexes. Por lo regular, un mutex protege a algn
recurso,
como
un
buffer
compartido por dos enlaces. Para
asegurarse de que slo un enlace
a la vez accese
al recurso
compartido, se espera que los
enlaces cierren el mutex antes de
tocar el recurso y lo abran
cuando hayan terminado. En tanto
todos los enlace~bedezcan este
protocolo,
podrn evitarse
condiciones de competen- cia. Los
mutexes
son como semforos
binarios, es decir, semforos que
slo pueden adoptar los valores O
y 1. El nombre "rnutex" proviene
de su uso para asegurar la mutua
exclusin en el uso de algn
recurso.
Los mutexes se pueden crear
y destruir con las llamadas
pthread_mutex_init y
pthread_mutex_destroy,
respectivamente. Un mutex puede
estar en uno de dos estados: cerrado
o abierto. Cuando un enlace trata
de cerrar un mutex abierto (usando
pthread_mutex_ lock), el
pthread_exit
p
t
h
r
e
a
d
_
m
u
t
e
x
_
i
n
i
t
o
p
t
h
r
e
a
d
_
m
u
t
e
x
_
d
e
s
t
r
o
y
D
e
s
t
r
u
i
r
u
n
m
u
t
e
x
p
t
h
r
e
a
d
_
m
u
t
e
x
_
l
o
c
k
C
e
r
r
a
r
u
n
m
u
t
e
x
p
t
h
r
e
a
d
_
m
u
t
e
x
_
u
n
l
o
c
k
A
b
r
i
r
u
n
m
u
t
e
x
p
t
h
r
e
a
d
_
c
o
n
d
_
i
n
i
t
C
r
e
a
r
u
n
a
v
a
r
i
a
b
l
e
d
e
c
o
n
d
i
c
i
n
pthread_cond_destroy
Destruir una variable de
condicin
pthread_cond_wait
Esperar por una variable de
condicin
pthread_cond_signal
Liberar un enlace que espera
por una variable de condicin
Fig
ura
644.
Prin
cipa
les
lla
ma
das
de
POSI
X
par
a
enl
aces
.
Examinemos
brevemente las llamadas
para enlaces que se
muestran en la figura 644. La primera llamada,
pthread_create,crea
un enlace nuevo. Si la
llamada se lleva a cabo
con xito, se estar
ejecutandoun
enlace
ms en el espacio de
direcciones que los que
se estaban ejecutando
antes de la llamada. Un
enlace que termin su
n
d
e
p
r
o
c
e
s
o
s
e
n
W
i
n
d
o
w
s
N
T
maneja mltiples procesos, que
pueden
comunicarse
y
sincronizarse.Cada proceso contiene
por lo menos un enlace, que a su vez
contiene al menos una fibra (enlace
ligero). Juntos, los procesos, enlaces y
fibras proveen un conjunto muy
general de herramientas para gestionar
paralelismo, tanto en uniprocesadores
NT
474
S
E
EJEMPL
OS DE
SISTEMA
S
OPERAT
IVOS
4
7
476
l
1
1
477
Los mutexes tambin son objetos
del ncleo que se usan para
sincronizacin, pero son ms sencillos
que los semforos porque no tienen
contadores. Los mutexes son
esencialmente candados, con funciones
API para cerrarse
(WaitForSingleObject) y abrirse
ReleaseMutex. Al igual que las manijas
de semforos, las manijas de mutexes
pueden duplicarse y pasarse de un
proceso a otro para que enlaces de
diferentes procesos puedan accesar al
mismo mutex.
El
tercer
mecanismo
de
sincronizacin se basa en secciones
crticas, que son similares a los mutexes
slo que son locales respecto al espacio
de direcciones del enlace que las crea.
Puesto que las secciones crticas no son
objetos del ncleo, no tienen manijas ni
descriptores de seguridad y no pueden
transferirse entre procesos. El cierre y
l
aE
lL
6
E
lL
Un archivo consiste
en una
secuencia de bytes o registros
lgicos
que se pueden leer y
escribir sin saber cmo fun- cionan
los
discos,
cintas y otros
dispositivos de E/S. El acceso a los
archivos
puede ser secuencial,
aleatorio por nmero de registro o
aleatorio por clave. Los directorios
sirven para agrupar archivos. Los
archivos se pueden almacenar en
sectores consecutivos o dispersarse
por todo el disco. En el segundo
caso, normal en los discos duros, se
requieren estructuras de
P
R
O
B
L
E
M
A
S
l.
2.
memoria
principal
3
no en la
memoria
principal
4
4
g
i
n
a
no en la
memoria
principal
v
i
r
t
u
a
l
no en la
memoria
principal
a. Haga una lista de
todas las direcciones
virtuales que causarn
fallos de pgina. b.
Qu direccin fsica
tienen O, 3728, 1023,
1024, 1025, 7800 y
4096?
M
a
r
c
o
d
e
p
g
i
n
a
4.
o
3
1
1
2
no en la
EL NIVEL
478
DE MQUINA DE SISTEMA
OPERATIVO
CAP.
6
!
l
.~
.
:
:
1
1
8.
CAP. 6
PROBLEMAS
479
10.
11.
12.
d
e
t
i
e
n
e
n
e
s
t
no en la
15
P
gi
na
M
ar
co
de
P
gi
na
M
ar
co
de
P
gi
na
M
ar
co
de
vi
rt
ua
4.
l
5. p
guardar datoso
6. gi
guardar datos4
na
vir
tu
al
p
gi
na
vi
rt
ua
l
p
gi
na
o
9
En
disco
Tabla
de
pgi
nas
14
l
3
1
2
3
8
3
En disco
2
memoria
6
12
3
principal
En disco
7. saltar a ellos
1
3
100
8. buscar datos
2
50
9. buscar datos
2
5
1 O. saltar a ellos
3
60
9.
Algunas computadoras
permiten E/S directamente al
espacio
de usuario.
Por
ejemplo, un progra- ma podra
iniciar una transferencia de
disco a un buffer dentro de un
proceso de usuario. Causa
esto problemas si se usa
compactacin
para
implementar
la
memoria
virtual? Comente.
<i
480
NIVEL DE MQUINA DE
SISTEMA OPERATIVO
CAP.6
EL
CAP.6
PROBLEMAS
481
a.
hay
una
sola
CPU
que
conm
uta
entre
proce
sos
cada
100
ms?
b. dos CPU comparten
una memoria comn
en la que se encuentra
el semforo?
1 ~:
22.
f
oF
u
nc
io
na
r
es
ta
id
ea
si
tr
es
o
m
s
pr
oc
es
os
us
an
el
se
m
f
or
o
?
Y
si
do
s
pr
o
ce
so
s
us
an
el
se
m
f
or
o?
e
j
e
c
u
t
a
d
o
w
n
E
n
t
d
o
w
n
E
n
t
=
5
0
0
P
I
3
0
0
P
2
e
j
e
c
u
t
a
u
p
E
n
e
j
e
c
u
t
a
d
o
w
n
E
n
t
=
6
0
0
23.
P
En t
= 100
P l
ejecu
ta
dow
n En
t
t
a
200
P 1
4
0
0
P
3
e
j
e
c
u
P
2
e
j
e
c
u
t
a
u
p
En t
=
700
P2
ejecu
ta
dow
n
En t
=
800
PI
ejecu
ta up
En t
=
900
PI
ejecu
ta up
E
n
u
n
si
st
e
m
a
d
e
re
s
er
v
a
ci
o
n
e
s
d
e
l
n
e
a
s
a
r
e
a
s
e
s
n
e
m
et
e
n
4
0
p
al
a
br
as
d.
S
e
sa
c
a
n
17
p
al
a
br
as
e.
S
e
m
et
e
n
12
p
al
a
br
as
f.
S
e
s
a
c
a
n
4
5
p
al
a
br
as
g.
S
m
e
t
e
n
8
p
a
l
a
b
r
a
s
h
.
S
e
unlink("/usr/ast/bin/game3")
se ejecuta en el contexto de la figura
6-37. Describa cuidadosamente los
cambios que se efectan en el sistema
de directorios.
29. Imagine que tiene que implementar el
sistema
UNIX
en una
microcomputadora con muy escasa
memoria principal. Por ms que trata
de meter a la fuerza el sistema en el
espacio disponible, no logra hacer que
quepa, as que escoge una llamada al
sistema al azar, la cual sacrificar por
el bien general. Se escogi pipe, que
crea los tubos empleados para enviar
flujos de bytes de un proceso a otro.
Sigue siendo posible implementar la
redireccin de E/S de alguna manera?
Y las filas de procesamiento?
Comente los problemas y posibles
soluciones.
30.
s
a
c
a
n
1
1
p
a
l
a
b
r
a
s
27. Suponga que una versin de UNIX
usa bloques de disco de 2K y
guarda 512 direcciones de disco
en cada bloque indirecto
(sencillo, doble y triple). Qu
tamao mximo podra tener un
archivo? (Suponga que los
apuntadores de archivo son de
64 bits.)
28. Suponga que la llamada al sistema
UNIX
'
;
l
.
~
1
't"
t~
1
482
n
:
(
n
o
u
t
i
l
i
z
a
d
o
)
.
CAP.6
A
D
O
R
EL
En los captulos 4, 5 y 6
examinamos tres niveles que
estn presentes en casi todas las
computadoras contemporneas.
Este captulo se ocupa
primordialmente de otro nivel
que tambin est presente en
prcticamente todas las
computadoras modernas: el nivel
de lengua- je ensamblador. El
nivel de lenguaje ensamblador
difiere en un aspecto importante
de los niveles de
microarquitectura, ISA y sistema
operativo: se implementa por
traduccin en lugar
d
e
i
n
t
e
r
p
r
e
t
a
c
i
n
.
r
eEs
im
por
tan
te
se
alar
la
dif
ere
nci
a
ent
re
tra
du
cci
n
e
int
erp
ret
aci
n.
En
la
tra
du
cci
n
no
s
484
NIVEL
DE
ENSAMBLADOR
EL
LENGUAJE
CAP. 7
te en un programa equivalente
llamado programa objeto o
programa binario ejecutable
que se ejecuta slo despus de
que se ha llevado a cabo la
traduccin. En la traduccin
hay dos pasos bien definidos:
1. Generacin de un
programa equivalente en
el lenguaje objetivo.
2. Ejecucin del
programa recin
generado.
Estos dos pasos no ocurren
simultneamente. El segundo
paso no se inicia hasta que el
pri- mero ha finalizado. En la
interpretacin slo hay un paso:
ejecutar el programa fuente
origi- nal. No es necesario
generar primero un programa
equivalente, aunque a veces el
programa fuente se convierte en
una forma intermedia
(por
ejemplo, cdigo de bytes Java)
para facilitar la interpretacin.
Mientras el programa
objeto se est ejecutando, slo
son evidentes tres niveles: el
nivel de microarquitectura, el
nivel ISA y el nivel de mquina
del sistema operativo. Por tanto,
en el momento de la ejecucin
pueden encontrarse tres
programas -el programa
objeto del usuario, el sistema
operativo y el microprograma
(si lo hay)- en la memoria de
la compu- tadora. Todos los
rastros del programa fuente
original han desaparecido. As
pues, el nmero de niveles
presentes en el momento de la
ejecucin podra diferir del
nmero de niveles presen- tes
antes de la traduccin.
No obstante, cabe
sealar que, si bien
definimos un nivel por
las instrucciones y
construcciones
lingsticas con que
cuentan sus
programadores (y no por
la tcnica de
implementacin), otros
autores a veces hacen
una distincin mayor
entre los nive- les
implementados con
intrpretes en el momento
de la ejecucin y los
niveles implementados
por traduccin.
7.1
INTR
ODU
CCI
N
AL
LEN
GUA
JE
ENS
AMB
LAD
OR
Los traductores pueden
dividirse a grandes
rasgos en dos grupos,
dependiendo de la
relacin entre el lenguaje
fuente y el lenguaje
objetivo. Si el lenguaje
fuente es en lo esencial
una representacin
simblica de un
lenguaje de mquina
numrico, el traductor
se llama ensamblador
y el lenguaje fuente se
llama lenguaje
ensamblador. Si el lenguaje
fuente es un lenguaje de alto
nivel como Java o C y el
lenguaje objetivo es un
lenguaje de mquina
numrico o una representacin
simblica de tal lenguaje, el
traductor se llama
c
o
m
p
i
l
a
d
o
r
.
7
.
1
.
1
Q
u
e
s
u
n
l
e
n
g
u
a
j
e
e
n
s
a
m
b
l
a
d
o
r
?
Un
lenguaje
ensamblador puro es un
lenguaje en el que cada
enunciado
produce
exacta- mente
una
instruccin de mquina.
En otras palabras, existe
una
correspondencia
uno a uno entre las
instrucciones
de
mquina
y
los
enunciados
del
programa
en
ensamblador. Si cada
lnea del programa en
lenguaje
ensamblador
contiene exactamente
un enunciado
:
cada palabra
de
mquina
contiene
exactamente
una
instruccin de mquina,
entonces un programa
en ensamblador
de n
lneas producir un
programa en lenguaje
de mquina de n o.ilabras.
SEC.7.1
LENGUAJE
INTRODUCCIN AL
ENSAMBLADOR
485
La razn por la que la gente usa lenguaje
ensamblador en lugar de programar en
lenguaje de mquina (en hexadecimal) es que es
mucho ms fcil programar en lenguaje
ensamblador. El uso de nombres simblicos y
direcciones simblicas en lugar de direcciones
binarias u octales representa una gran
diferencia. Casi toda la gente puede recordar
que las abreviaturas para sumar, restar,
multiplicar y dividir son ADD, SUB, MUL y
DIV, pero pocos pueden recordar los valores
numricos correspondientes que la mquina
usa. El programador en lenguaje ensamblador
slo tiene que recordar los nombres simblicos
porque el ensamblador Jos traduce a
instrucciones de mquina.
Los mismos comentarios aplican a las
direcciones. El programador en lenguaje
ensamblador puede asignar nombres simblicos a
posiciones
de memoria
y dejar que el
ensamblador se preocupe por insertar los
valores numricos correctos. El programador
en lenguaje de mquina siempre debe trabajar
con los valores numricos de las direcciones.
Es por esto que ya nadie programa en lenguaje
de mquina, aunque se haca hace algunas
dcadas,
antes
de
inventarse
los
ensambladores.
Los lenguajes ensambladores tienen otra
propiedad, adems de la correspondencia
uno a
uno entre enunciados en lenguaje ensamblador
e instrucciones de mquina, que los distingue de
los lenguajes de alto nivel. El programador en
ensamblador tiene acceso a todas las caractersticas e instrucciones disponibles en la
mquina objetivo. El programador en lenguaje
de alto nivel no. Por ejemplo, si la mquina
objetivo tiene un bit de desbordamiento, un
progra- ma en lenguaje ensamblador puede
probarlo, pero un programa en Java no puede
hacerlo directamente. Un programa en lenguaje
ensamblador puede ejecutar todas las
instrucciones del conjunto de instrucciones de
la mquina objetivo, pero el programa en
lenguaje de alto nivel no puede hacerlo. En
sntesis, todo lo que puede hacerse en lenguaje
7.
1.
2
P
or
q
u
u
sa
r
le
n
g
u
aj
e
e
n
sa
mblado
r?
No nos engaemos: la programacin en
lenguaje ensamblador es difcil; no es para los
dbi- les ni los cobardes. Adems, escribir un
programa en lenguaje ensamblador toma
mucho ms tiempo que escribir el mismo
programa en un lenguaje de alto nivel; y
!I.
486
EL
NIVEL DE LENGUAJE
ENSAMBLADOR
CAP. 7
487
k
"
.
"
... ,,.
.~
:
'i
'
INTRODUCCIN AL LENGUAJE
ENSAMBLADOR
Aosprogramad
orpara
Tiempoensamblador
de
Lenguaje
ejecucin
Lenguaje
de alto nivel
del
producirel
Estrategia
mixta antes de afinar
programa
Crtico 10%
programa
Otro 90%
en
segundos
d
eE
s
pr
o
ve
ch
os
o
co
m
pa
ra
r
la
es
tr
at
eg
ia
m
ix
ta
d
e
le
n
g
ua
je
d
e
al
to
ni
ve
l/l
en
g
ua
je
en
sa
m
bl
ad
or
c
Total
10
100
Estrategia mixta despus de afinar
Crtico 10%
6
30
Otro 90%
9
10
Total
15
40
Figura 7-1.
Comparacin de
programacin en
lenguaje
ensamblador y
lenguaje de alto
nivel, con y sin
afinacin.
estimado de 5 aos-programador
para reescribir los procedimientos
crticos
en excesivamen- te
conservador. Si esta recodificacin
en realidad slo requiriera un aoprogramador, la rela- cin de costos
entre la estrategia mixta y la
estrategia de lenguaje ensamblador
pura sera de ms de 4 a 1 en favor
de la estrategia mixta.
Un programador que usa un
lenguaje de alto nivel no est
absorto en pasar bits de aqu para
ac y a veces ve aspectos del
problema que permiten efectuar
mejoras reales en el de- sempeo.
Esta situacin pocas veces se
presenta con los programadores
de lenguaje ensamblador, quienes
por lo regular se la pasan haciendo
juegos malabares con las instrucciones a fin de ahorrarse unos
cuantos ciclos.
Dos experiencias
bien
documentadas
que
ocurrieron
durante la creacin de MULTICS
488
EL
NIVEL DE LENGUAJE
ENSAMBLADOR
CAP. 7
INTRODUCCIN
SEC. 7.1
AL LENGUAJE ENSAMBLADOR
489
Etigueta
Cd. o~.
Comentarios
O~erandos
EAX,I
MOV
FRMULA:
; registro EAX = 1
EAX,J
ADD
; registro EAX = 1 + J
MOV
N,EAX
; N = 1 +J
; reservar 4
bytes
inicializados
a3
.
.
.
.
;
D
O
;N=1+J
su
ensamblador).
4
3
4o
Etiqueta
Etiqueta
FRMULA:
Cd.op.
Cd.
SETHIop.
Operandos
Operandos
%Hl(l),%R1
FRMULA
MOVE.L
LO
ADD.L
SETHI
LO
NOP
ADD
SETHI
ST
1,[%R1+%LO(l)],
DO
J,%Hl(J),%R2
DO
[%R2+%LO(J)
almacena- dos. Si un
enunciado est
etiquetado, la etiqueta
(generalmente) inicia en
la columna I.
%R1 ,%R2,%R
%Hl(N),%R1
%R2,[%R1 +%
.WORD 3
1:
! reservar 4 bytes inicializados a 3
.WORD 4
J:
! reservar 4 bytes inicializados a 4
.WORD O
N:
! reservar 4 bytes inicializados a O
(
c
)
1
:
Cada una de las tres partes de la figura 72 tiene cuatro etiquetas: FRMUI.A, 1, l Y N.
1
i
490
DE
LENGUAJE
CAP. 7
EL NIVEL
ENSAMBLADOR
r
e
L
D
[
%
R
1
+
%
L
O
(l
)],
%
R
1
s
uL
a
s
f
a
m
il
i
a
s
P
e
n
ti
u
m
,
6
8
0
x
0
y
S
P
A
R
C
p
e
r
m
it
e
n
SEC.
INTRODUCCINAL
ENSAMBLADOR
7.1
LENGUAJE
491
7
A
7
d
-p
aL
A
E
B
A
S
E
E
Q
U
1
0
0
0
p
u
492
EL NIVEL DE
LENGUAJE ENSAMBLADOR
CAP. 7
ina
r
un
pro
Seud
oinstr
ucci
n
Signific
ado
ced
imi
ent
o
Iniciar un nuevo
SEGMENT
segmento (texto, datos, etc ) con ciertos atributos
ENDS
segmento actual
Terminar el
MA
CR
O
Inici
Controlar la
ALIGN
alineacin de la siguiente instruccin o datos
ar
Definir un nuevo
EOU
smbolo igual a una expresin dada
defi
Asignar memoria
DB
para uno o ms bytes (inicializados)
una
nici
n
Asignar
de
ma
de 16 bits (inicializadas) DW
cro
ENDM
definicin
DO
de 32 bits (inicializadas)
DO
Asignar memoria
para una o ms palabras dobles de 64 bits
(inicializadas)
P
R
O
C
Ini
cia
Terminar una
de macro
PUBLIC
definido en este mdulo
Exportar un nombre
EXTERN
nombre de otro mdulo
Importar un
INCLUDE
archivo
IF
Iniciar ensamblado condicional con base
en
una
expresin
Iniciar
ensamblado
dada ELSE
condicional
si la
condicin
un
pr
COMMENT
carcter de inicio de comentario
Definir nuevo
PAGE
pgina en el listado
Generar un salto de
END
programa de ensamblador
Terminar el
oc
ed
imi
en
to
EN
D
P
Te
rm
Pentium II (MASM).
SEC. 7.1
LENGUAJE
INTRODUCCIN AL
ENSAMBLADOR
493
tienen la misma funcin que en otros
lenguajes de programacin. As mismo,
MACRO y ENDM delimitan
una
definicin de macro. Estudiaremos las
macros ms adelante en este captulo.
Las siguientes dos seudoinstrucciones,
PUBLIC y EXTERN, controlan la
visibilidad de
los smbolos. Es comn escribir programas
como una coleccin de archivos. Con
frecuencia, un procedimiento de un
archivo necesita invocar un procedimiento
o accesar una palabra de datos definidos
en otro archivo. Para hacer posibles estas
referencias de un archivo a otro, un
smbolo que estar disponible para otros
archivos se exporta con PUBLIC. As
mismo, para evitar que el ensamblador
proteste por el uso de un smbolo que no
est definido en el archivo en curso, dicho
smbolo puede declararse como EXTERN,
lo que indica al ensamblador que se
definir en algn otro archivo. Los
smbolos que no se declaran en ninguna
de estas seudoinstrucciones tienen como
alcance el archivo local. Este default
implica que usar, diga- mos, FOO en
varios archivos no genera conflictos
porque cada definicin es local respecto a
s
u
p
r
o
p
i
o
a
r
c
h
i
v
o
.
LENGUAJE ENSAMBLADOR
CAP. 7
EL NIVEL DE
q
u
i
n
a
s
.
La seudoinstruccin COMMENT
permite al usuario cambiar el
delimitador de comentarios a algo distinto del signo de punto y
coma. PAGE sirve para controlar el
listado que el ensamblador puede producir
si se le solicita. Por ltimo, END marca el
final del programa.
Hay muchas otras seudoinstrucciones
en MASM. Otros ensambladores para
Pentium Il
cuentan con un conjunto diferente de
seudoinstrucciones
porque stas
no
dependen de la arquitectura subyacente,
sino del gusto de quien escribi el
ensamblador.
SEC. 7.2
MACROS
495
7.2 MACROS
Los programadores en lenguaje ensamblador a menudo necesitan repetir sucesiones de instrucciones varias veces dentro de un programa. La forma ms fcil de hacerlo es simplemente
escribir las instrucciones requeridas donde sea que se necesiten. Sin embargo, si una secuencia es larga, o debe usarse muchas veces, escribirla una y otra vez resulta tedioso.
Una estrategia alternativa sera convertir la secuencia en un procedimiento e invocarlo
cada vez que se necesite. Esta estrategia tiene la desventaja de que requiere la ejecucin de
una instruccin de llamada a procedimiento y una de retomo cada vez que se necesita la
secuencia. Si la secuencia es corta
hacer al programa apreciable- mente ms
-digamos, dos instruccionespero se
lento. Las macros son una solucin fcil
usa con mucha frecuencia, el gasto extra
y eficiente al problema de necesitar
de la llamada a procedimiento podra
A
X
7.2.1
Definicin,
llamada y
expansin
de macros
M
O
V
P
,
E
B
X
SWAP
(
a
)
(
b
)
Figura 7-4. Cdigo en
lenguaje ensamblador para
intercambiar P y O dos
veces. (a) Sin una macro.
(b) Con una macro.
Aspecto
Cundo se hace la llamada?
Llamada a macro
Al ensamblar
Llamada a procedimiento
Al ejecutarse el programa
El cuerpo se inserta en el
programa objeto en cada lugar
en el que se efecta la llamada?
No
EL
NIVEL DE LENGUAJE
ENSAMBLADOR
CAP. 7
En lo conceptual, es mejor
pensar que el proceso de
ensamblado ocurre en dos
pasadas. En la primera pasada,
todas las definiciones de macros
se guardan y las llamadas a
macros se expanden. En la
segunda pasada, el texto resultante
se procesa como si estuviera en el
progra- ma original. Desde este
punto de vista, el programa
fuente se lee y se transforma en
otro programa en el cual se han
eliminado todas las definiciones
Se inserta una
instruccin
No
S de llamada a
procedimiento en el
programa objeto y luego se ejecuta?
Se debe usar una
instruccin de
No
S retorno despus
de efectuarse la
llamada?
Cuntas copias del cuerpo aparecen
1
llamada a la macro
en el programa objeto?
Una por
';);'
Figura 7-5.
Comparacin de
llamadas a macros y
llamadas a
procedimientos.
de macros y en el que
todas las llamadas a macros
han sido sustituidas por sus
cuerpos. La salida
resultante, un programa en
lenguaje ensamblador que
no contiene macros, se
alimenta al ensamblador.
Es importante
tener
en cuenta que un programa
es una cadena de caracteres
que incluye letras, dgitos,
espacios,
signos
de
puntuacin y "retornos de
carro"
(cambio
a una
nueva lnea). La expansin
de macros consiste
en
sustituir ciertas subcadenas
parmetros
SEC. 7.2
MACROS
497
CAMBIAR P, Q
Pes el primer parmetro real y Q es el
segundo parmetro real. As, los
programas ejecutables que ambas partes
de la figura 7-6 producen son idnticos.
:J
El recurso
de macros
que
acabamos
de describir
puede
servir para acortar programas en
los que ocurre la misma secuencia
exacta de instrucciones
una y
otra vez. Sin embargo, es comn que un programa contenga
varias
secuencias
de
instrucciones
que son casi
idnticas pero no idnticas, como
se ilustra en la figura 7-6(a). Aqu
la primera secuencia intercambia
P
y
Q
,
y
l
a
s
e
g
u
n
d
a
s
e
c
u
e
n
c
i
a
i
n
t
e
r
c
a
m
b
i
a
R
y
S
.
MOV
EAX,P
CAMBIAR
MACRO P1,
P2
MOV
EBX,Q
MOV EAX,P1
MOV
Q,EAX
MOV EBX,P2
MOV
P
,
E
B
X
M
O
V
P
2
,
E
A
X
M
O
V
P
1
,
E
B
X
MOV
EAX;R
ENDM
MACRO
IF WORDSIZE GT 16
M
O
V
M
A
E
B
X
,
S
MO
V
S,E
AX'
CA
MBI
AR
P, Q
MO
V
R,E
BX
C
R
O
E
N
D
M
C
AMBI
AR R,
S (a)
(b)
M
A
C
R
O
ENDM
Figura 7-6.
Sucesiones casi
idnticas de
enunciados. (a)
Sin una macro.
(b) Con una
macro.
Los ensambladores
de
macros
manejan
el caso de
secuencias
casi
idnticas
permitiendo que las definiciones
de macros incluyan parmetros
formales y que las llamadas a
macros incluyan
parmetros
reales. Cuando una macro se
expande, cada parmetro formal
que aparece en el cuerpo de la
macro
es sustituido
por el
parmetro real correspondiente.
Los parmetros reales se colocan
en el campo de operandos
de la llamada a la macro. En
la figura
7-6(b) se muestra el
programa de la figura 76(a) reescrito empleando
una macro con dos
parmetros. Los smbolos P
1 y P2 son los parmetros
formales. Cada ocurrencia
de P 1 den-
ENDI
F
E
N
D
M
En cualquier caso, se definir la macro M2,
pero la definicin depender de si el programa
se est ensamblando en una mquina de 16
bits o en una de 32 bits. Si no se invoca M 1,
M2 no se definir.
498
NIVEL
DE
ENSAMBLADOR
CAP. 7
EL
LENGUAJE
7.2.4
Implementacin de
un
recurso
de
macros
en
un
ensamblador
Para implementar un recurso de
macros, un ensamblador debe
poder realizar dos funciones:
guardar definiciones de macros
y expandir llamadas de macros.
Examinaremos ambas funciones por tumo.
El ensamblador debe
mantener una tabla de
todos los nombres de
macros y, junto con
cada nombre, un apuntador a su
definicin almacenada para
poder recuperarla cuando la
necesite.
Algunos
ensambladores tienen una tabla
aparte para nombres de macros
y algunos tienen una tabla de
cdigos
de
operacin
combinada en la que se guardan
todas las instruc- ciones de
mquina, seudoinstrucciones y
nombres de macros.
Cuando se llega a una
definicin de macro, se crea
una entrada de tabla que da
el nombre
de la macro, el nmero
de parmetros formales y
un apuntador a otra tabla
-la
tabla de
definiciones de macrosen la que se guardar el
cuerpo de la macro. En
este momento tambin se
construye una lista de los
parmetros formales que
se usarn al procesar la
defini- cin. Luego se lee
el cuerpo de la macro y
se guarda en la tabla de
definiciones de macros.
Los parmetros formales
que ocurren dentro del
cuerpo se indican con
algn smbolo especial.
Por
ejemplo,
la
representacin interna de
la definicin de la macro
CAMBIAR con un signo
de punto y coma como
i
"retomo de carro" y el signo"&" como
smbolo de parmetro form
a
l
e
s
:
SEC. 7.3
DE
EL PROCESO
ENSAMBLADO
499
rada en un archivo, escribiendo al mismo
tiempo la lnea correspondiente del listado, si
se va a producir, en otro archivo. Este proceso
se repetira hasta haber traducido todo el
programa. Lo malo es que tal estrategia no
funciona.
Considere la situacin en la que el
primer enunciado es un salto a L. El
ensamblador no podr ensamblar este
enunciado hasta que no conozca la direccin
del enunciado L. Dicho enunciado podra
estar cerca del final del programa, y para el
ensamblador sera imposible encontrar la
direccin sin leer antes casi todo el programa.
Esto se conoce como el problema de la
referencia adelantada (hacia adelante),
porque se ha usado un smbolo, L, antes de
definirse; es decir, se ha hecho referencia a
un smbolo cuya definicin ocurrir
posteriorm
e
n
t
e
.
1
Dentro de la tabla de
definiciones de macros el
cuerpo de la macro no es ms
que una cadena de caracteres.
Durante la primera pasada
del ensamblador, se buscan
en tablas los cdigos de
operacin
y las macros se expanden. Cada
vez que se encuentra una
definicin de macro, se guarda
en la tabla de macros. Cuando
se invoca una macro, el
ensamblador suspende
temporalmente la lectura del
dispositivo de entrada y
comienza a leer del cuerpo
almacenado de la macro. Los
parmetros formales extrados
7
.
3
E
L
P
R
O
C
E
S
O
D
E
E
N
S
A
M
B
L
A
D
O
En las secciones que siguen
describiremos brevemente cmo
funciona un ensamblador. Aunque cada mquina tiene un
lenguaje ensamblador distinto, el
proceso de ensamblado tiene
sufi- cientes similitudes en las
distintas mquinas que es
posible describirlo en trminos
generales.
7
.
3
.
1
E
n
s
a
m
b
l
a
d
o
r
e
s
d
e
d
o
s
p
a
s
a
d
a
s
Dado que un programa en
lenguaje
ensamblador
consta de una serie de
enunciados de una sola
lnea, al principio podra
parecer natural tener un
ensamblador que lea un
enunciado, lo traduzca a
lenguaje de mquina y
luego
escriba
la
instruccin de lenguaje de
mquina gene-
7
.
3
.
2
P
r
i
m
e
r
a
500
LENGUAJE
CAP. 7
EL NIVEL DE
ENSAMBLADOR
p
a
s
a
d
a
La principal funcin de la primera
pasada es construir una tabla llamada
tabla de smbolos, que contiene los
valores de todos los smbolos. Un
smbolo es una etiqueta o bien un
valor al que se le asigna un nombre
simblico
mediante
una
seudoinstruccin como
BUFSIZE EQU 8192
EL
501
truccin y un nmero de tipo que divide
los cdigos de operacin en grupos
dependiendo del nmero y el tipo de
operandos.
Etiqueta
Cd. op.
Operandos Comentarios
Longitud
ILC
MARA:
EAX= 1
MOV
100
MOV
EBX=J
6
ROBERTA:
ECX= K
111
Smbolo
Valor
MARA
ROBERTA
100
111
MARILYN
125
STEPHANY
129
MARILYN
EAX=ll+JJ
STEPHANY:
Saltar a DONE
MOV
EAX,I
5
EBX, J
105
ECX,K
6
IMUL
EAX, EAX
Otra informacin
EAX=lI
117
2
IMUL
EBX, EBX
EBX = J J
3
119
IMUL
ECX, ECX
ECX = K K
3
122
EAX, EBX
ADD
2
125
ADD
EAX, ECX
EAX=ll+JJ+KK
2
127
JMP
DONE
5
1/Q
1
EAX
immed32
5
reg
reg
2
EAX
19
immed32
ANO
21
reg
reg
2
19
502
NIVEL
DE
EL
LENGUAJE
SEC. 7.3
PROCESO DE ENSAMBLADO
EL
503
//ensamblar la
primera instruccin
en O
//inicializacin
general
// END asigna false a
mas_entradas
//obtener una lnea
de entrada
//nmero de bytes
en la instruccin
//tipo (formato) de
la instruccin
if
(linea_n
o_es_
coment
ario(line
a})
(
facilidad
de
programacin. Si
el
ensamblador
est siendo escrito
por un grupo de
personas,
Jos
distintos
procedimientos
pueden repartirse
entre
los
programadores.
simbolo = verif_simbolo(linea);
//tiene rtulo esta lnea?
if (simbolo != null}
//en tal caso, registrar
smbolo y valor
ingresar_simbolo_nuevo(s
imbolo,
contador_posic);
(literal= verif_literal(linea);
//la lnea contiene una literal?
if (literal != null}
//en tal caso,
ingresarla en la tabla
ingresar_literal_nueva(li
teral);
//Ahora determinar el tipo del cd. op.
-1 indica cdigo no vlido.
codop = extraer_codop(linea);
//buscar mnemnico del cdigo de
operacin tipo=
buscar_tabla_cods(codop);
//buscar formato, por ejemplo, OP
REG1, REG2 if (lipo c O)
//si no es cd. op., es
seudoinstruccin?
tipo= buscar_tabla_seudo(codop);
switch(tipo) (
//determinar longitud de
esta instruccin case 1:
longitud =
obt_iong_de_tipo1 (linea);
break;
case 2: longitud=
obt_long_de_tipo2(1inea); break;
//otros casos aqu
or
de
na
n
la
ta
bl
a
de
s
m
bo
lo
y
la
de
literal
es si
es
neces
ario.
Tamb
in
se
busca
n y
se
elimi
nan
entra
escrib_arch_tem
p(tipo,
codop, longitud,
linea);
contador_po
sic =
contador_po
sic +
longitud if
(tipo ==
ENUNC_FIN
AL) (
m
a
s
_
e
n
t
r
a
d
a
s
=
f
a
l
s
e
;
r
e
b
o
b
_
t
e
m
p
_
s
e
g
u
n
d
a
_
p
a
s
a
d
a
(
);
ordenar_ta
bla_lit( );
quitar_litera
les_rep(
);
//como
rebobinar el
archivo
temporal
7
.
3
.
3
El funcionamiento de la segunda
pasada es parecido al de la primera: se
leen las lneas una por una y se
procesan una por una. Dado que ya
escribimos el tipo, cdigo de operacin
y longitud al principio de cada lnea
(en el archivo temporal), se leen todos
estos datos para
S
e
g
u
n
d
a
p
a
s
a
d
a
La funcin
de la segunda
pasada es generar el programa
objeto y posiblemente imprimir
el listado
de ensamblado.
Adems, la segunda pasada
debe
producir
cierta
informacin que el enlazador
necesita
para
enlazar
procedimientos ensamblados en
diferentes
momentos
para
producir un solo
archivo
ejecutable.
La figura 7-11
muestra
un bosquejo de
procedimiento para la segunda
pasada.
EL NIVEL DE
504
LENGUAJE ENSAMBLADOR
CAP. 7
EL
PR
OC
ES
O
DE
EN
SA
MB
LA
D
O
505
(t
i
p
o
=
=
E
N
U
N
C
_
FI
N
A
L)
{
m
1. Se us un smbolo pero no se
defini.
2. Se defini un smbolo ms de
una vez.
3.
4. Un cdigo de operacin no
tiene suficientes operandos.
5. Un cdigo de operacin tiene
demasiados operandos.
6. Un nmero octal contiene un 8
o un 9.
7. Uso incorrecto de registros (por
ejemplo, un salto a un registro).
8.
as_entradas
=false; finalizar();
//escribir el cdigo
binario
11 imprimir una lnea del
listado
//actualizar cont. pos.
//terminamos con las
entradas?
11 entonces, realizar tareas
de aseo
//diversas cosas
7
.
3
.
4
L
a
t
a
b
l
a
d
e
s
m
b
o
l
o
s
Durante la primera pasada del proceso
de ensamblado,
el ensamblador
acumula informacin acerca de los
smbolos y sus valores, la cual debe
guardarse en la tabla de smbolos para
consultarla durante la segunda pasada.
Hay varias formas de organizar la tabla
de smbolos, y a continuacin
describiremos brevemente algunos de
ellos. En todos los casos se intenta
simular una memoria asociativa, que
conceptualmente es un conjunto de
pares (smbolo, valor). Dado el smbolo,
la memoria asociativa debe producir el
valor.
La tcnica ms sencilla es
implementar la tabla de smbolos
como un arreglo de pares
haya escrito alguna vez un programa, en
cualquier lenguaje, sabe qu tan realista
es ese supuesto. Entre los errores ms
comunes estn:
U
n
a
f
o
r
m
a
t
o
t
a
l
m
e
n
t
e
d
i
s
t
i
n
t
SEC. 7.4
ENLAZADO Y CARGA
507
a
d
e
s
i
m
u
l
a
r
u
n
a
m
e
m
o
r
i
a
a
s
o
c
i
a
t
i
v
a
e
s
u
s
a
r
u
n
a
t
c
n
i
c
a
l
l
a
m
a
d
a
c
o
d
i
f
i
c
a
c
i
n
p
o
r
d
i
s
p
e
r
s
i
n
(
h
a
s
h
c
o
d
i
n
g
Si aplicamos este algoritmo recursivamente, una tabla con n entradas puede examinarse en
aproximadamente log, n intentos. Obviamente, este mtodo es mucho ms rpido que una
bsqueda lineal, pero requiere mantener ordenada la tabla.
)
.
que establece una correspondencia entre los smbolos y enteros dentro del intervalo O a k - l.
Una posible funcin sera multiplicar Eentre s los cdigos ASCII de los caracteres de los
s
t
e
e
n
f
o
q
u
e
n
e
c
e
s
i
t
a
u
n
a
f
u
n
c
i
n
"
h
a
s
h
"
'I
"!:
',
~I
~!
hech
o, se
pued
e
usar
casi
cual
quier
f
u
Hans
Henri
C
a
Jan
44546
4
75544
2
17097
5
Tabla
(a)
hash
Tabla enlazada
Andy
14025
23267
Maarten
Jaco
Reind
64533
6
63453
Maarte
n
23267
Reind
63453
1
Roel
76764
7
Willem
34544
6
de un programa
fuente requiere dos
pasos, como se
muestra en la figura
7-13:
l. Compilacin o
ensamblado de los
procedimientos fuente.
2. Enlazado de los
mdulos objeto.
El compilador o ensamblador
se encarga del primer paso, y
14332
Hans
Anto
n
31~
32334
Gerrit
Cathy
54
Frances
4
44546
34344
Dick
Henri
Frank
Wiebre
n
dimientos traducidos y
enlazarlos en forma correcta.
Si no se cuenta con memoria
virtual, el
programa enlazado tambin se
deber cargar explcitamente en
Ja memoria principal. Los proii
gramas que realizan estas
funciones reciben diversos nombres, como
enlazador (linker),
cargador de enlace (linking
loader) y editor de enlace
(linkage editor). La traduccin
completa
l
i
34344
2
75544
3
56445
5
17097
Wiebren
Jan
65254
6
64533
Jaco
Erik
473
34544
Willem
7
76764
Roel
(b)
instrucciones y notacin. El
proceso de enlazado,
en
cambio,
no representa un
cambio de nivel, ya que tanto
las entradas del enlazador
como sus salidas
son
programas para la misma
mquina virtual. La funcin
del enlazador es reunir
procedimientos traducidos por
separado y enlazarlos para que
se ejecuten como una unidad
llamada programa binario
ejecutable.
En
Ms-oos
Windows 95/98 y NT, los
mdulos
objeto tienen la
extensin .obj y los programas
binarios ejecutables tienen la
extensin .exe. En UNIX, los
mdulos
objetos tienen la
extensin
.o; los programas
binarios ejecutables no tienen
extensin.
EL NIVEL DE
508
LENGUAJE ENSAMBLADOR
CAP. 7
Pro
c
e
d
i
m
i
e
n
t
o
f
u
e
n
t
e
Los
compiladores
y
ensambladores
traducen
cada
procedimiento fuente como entidad
individual por una buena razn. Si un
compilador o ensamblador leyera una
serie de procedi- mientos fuente y
produjera directamente un programa
en lenguaje de mquina listo para
ejecutarse, la modificacin de un
enunciado de un procedimiento
fuente requerira volver a traducir
todos los procedimientos fuente.
Si se usa la tcnica de mdulos
objeto separados de Ja figura 7-13,
slo es necesario volver a traducir el
procedimientoque se modificy no los
dems, aunque s es necesariovolver
a enlazar todos los mdulos objeto.
Sin embargo, el enlazado suele ser
mucho ms rpido que la traduccin;
as, el proceso de dos pasos de
traducir y enlazar puede ahorrar
mucho tiempo durante el desarrollo
de un programa. Esta ganancia es
importante sobre todo si los programas tienen cientos o miles de
mdulos.
SEC. 7.4
ENLAZADO Y
CARGA
Mdulo
objeto
6
0
LLAMARAC
Procedimi
ento
Traduct
or
fuente
2
Pro
ced
imi
ent
o
Mdulo objeto A
P
r
b
i
400
400
e
j
L
L
A
P
A
Figur
a 713.
La
gener
acin
de un
progr
ama
binari
o
ejecu
table
a
partir
de
<
E
n
l
a
z
a
d
o
r
una
PASARQAX
fuente 3
eto 3
oS
coleccin de
procedimientos fuente
traducidos de forma
independiente requiere
un enlazador.
P.~:
~-1
A
L
T
A
R
A
3
0
0
, ,'
r
~
:Q
~
o <:
;-,..
;:}
C ..1
Mdulo objeto C
r~
:..
I~
:i
H
5
0
7.
4.1
Tar
eas
que
real
iza
el
enl
aza
dor
,l<i;
;
_.)
~
Al principio de la primera pasada del
proceso de ensamblado, el contador de
posiciones de
instrucciones se pone en O. Este paso
equivale a suponer que el mdulo
objeto estar en la
~:. J
~.
p:
.1.-.'.
L
L
\,.,!
. ....
3
0
0
e>
~
~l :
;
;>,
z
,-.
.
direccin (virtual)
O durante su
ejecucin. En la
figura 7-14 se
muestran cuatro
mdulos
objeto para una mquina genrica. En
este ejemplo, cada mdulo comienza
con una instruccin
deS
A
L
T
A
R
anaiu
nstru
cin
dA
eP
S
A
R
drent
od
elm
dulo
.
e:
C1
P
A
200 _
_:_:PA..:.:S::..A"R:...:S::..:A:..:..:
._..:X .
:1~
.
,
... ,
:;:i
'.)
<i
>
.-.
c.~
:1.~
[
;:i. ~
,._1
100
;::.'.:
100
1-:
1l -
, ,;
{'.
..:...
~.
.::.
.\
ol---SA-lTA_R
_A-200---1
, ..,
.
'
7
'
"
~-
se;
,,
e
~
constante
4.
P
A
S
A
R
1800
Se buscan
todas
las
instrucciones
que hacen
referencia
a
otros
procedimientos y se inserta
la
direccin
del
procedimiento en cuestin.
SEC. 7.4
ENLAZADO Y CARGA
511
1900
1900
de reubicacin
EL
NIVEL
DE
LENGUA
JE
ENSAM
BLADOR
51
0
Se buscan
todas
las
instrucciones
que hacen
referencia a la memoria y se
suma a cada una de ellas una
P
A
S
A
R
Mdul
o
1800
objeto
D
A
X
A
X
1700
1600
1500
S
A
S
A
L
L
L
L
L
o4
0
0
6
0
0
5
0
0
3
0
0
D
i
r
e
c
c
i
n
d
e
i
n
i
c
i
50
0
1:.
1
4
14
00
,I
1200
P
A
S
A
R
1100
R
A
X
1300
1300
1200
PAS
AR
RAX
1100
1000
1000
S
A
L
T
A
R
A
2
0
0
L
L
A
M
A
R
A
C
SALT
AR A
1300
LLAM
AR A
1100
00
1600
La figura 7-15(b) muestra el aspecto
que el espacio de direcciones de la
figura 7-15(a) tiene despus de que el
enlazador ha llevado a cabo estos pasos.
7
.
4
.
2
E
s
t
r
u
c
t
u
r
a
d
e
u
n
m
d
u
l
o
o
b
j
e
t
o
Los mdulos
objeto a menudo
contienen seis partes, que se muestran
en la figura 7-16. La primera parte
contiene el nombre del mdulo, cierta
inform
acin
que el
90
0
e
n
l
aza
dor
nec
esi
ta,
co
9
0
mo las longitudes
de las distintas
partes del mdulo, y a veces la fecha
de ensamblado.
du
~
~
<
800
P
A
S
A
R
Q
A
objeto
800
P
A
S
A
R
Q
A
X
;:.
.i.
.J
7
0
~)s
X
i
7
0
E
.
.
.
.
.
;
(:ri
~... ,
~
Instrucciones de mquina y
600
500
400
S
A
co
ns
S
A
L
L
es
L
L
T
a
T
a
~)
~ ,,.i
,
~E
~~
/l
'
e~
~:i
~::
M
Mdulo
~-.-~
E~
---~
~ ~
~~
C.?
.:-"' (~
300
200
P
A
S
A
R
P
A
X
objeto
300
A
200
P
A
S
A
R
P
A
X
o
A
t_)
;:.:
""..
t3
~
-
ta...
!',,)
r\
100
S
A
S
A
~,I
512
NIVEL
DE
ENSAMBLADOR
CAP. 7
EL
LENGUAJE
SEC. 7.4
D
ENLAZADO Y CARGA
220
0 M
210
0
PAS
AR
SA
X
200
0
513
;
.
'
"
I
'
.
'
l'
j
1
i
1
SA
ingreso y las referencias
LT
externas se combinan en
AR
una sola tabla.
A
180
La cuarta parte del
M
0
mdulo
objeto es el
d
cdigo ensamblado y las
u
LL
constantes. Esta parte del
l
AM
o
mdulo objeto es la
AR
A
nica que se cargar en
o
16
la
memoria
para
b
00
j
ejecutarse. Las otras
e
t
cinco
partes
sern
o
utilizadas
por el
e
P
enlazador
y
se
A
desecharn antes de que
S
A
se inicie la ejecucin.
R
La quinta parte del
mdulo objeto es el
R
diccionario
de
A
reubicacin. Como se
X
muestra en la figura 7-15,
es preciso sumar una
constante de reubicacin
a las instrucciones que
contie- nen direcciones
de memoria. Puesto que
el enlazador no tiene
forma de saber por
inspeccin cules de las
palabras de datos de la
parte
4
contienen
instrucciones
de
mquina y cules
contienen constantes,
esta tabla proporciona
informacin acerca de
cules direcciones deben
SALTAR A 1300
reubicarse. La informacin
podra estar en forma de una
tabla de bits, con un bit por
cada
direccin potencialmente reubicable, o una lista explcita de direcciones que deben reubicarse.
LLAMAR A 1100
detecta
r
errores
ocurrid
os
durante
la
lectura
del
mdulo, y la
direccin en la
que
debe
iniciar- se la
ejecucin.
C
a
si
to
d
o
s
lo
s
e
nl
a
z
a
d
o
re
s
re
q
ui
er
e
n
d
o
s
p
a
s
a
d
a
s.
D
u
r
a
n
te
la
p
ri
m
e
r
a
p
a
s
a
d
a
el
e
n
la
z
a
d
o
r
l
bic
ad
o
de
la
fig
ura
7- l
5(
b)
7
.
4
.
3
T
i
e
m
p
o
d
e
l
i
g
a
d
o
y
r
e
u
b
i
c
a
c
i
n
d
i
n
m
i
c
a
En
un
sistema
multiprogramacin
de
un
se
reubica
ra en
la
direcci
n 400
en
lugar
de la
direcci
n 100
donde
el
enlazad
or
lo
coloc
original
mente.
Todas
las
direcci
ones de
memor
ia son
incorre
ctas;
adems
,
la
inform
acin
de
reubica
cin
hace
mucho
que se
desech
.
Incluso
si
todava
estuvie
ra
disponible
dicha
informacin,
el
costo
de
reubicar todas
las direcciones
cada vez que el
programa
se
trae a la
1
2
400
1
1
d
u
l
o
1
0
o
b
j
e
t
o
9
0
8
0
d
u
l
o
o
b
j
e
t
o
A
7
0
6
0
5
0
514
NIVEL DE LENGUAJE
ENSAMBLADOR
CAP. 7
3. Cuando se
enlaza el programa
pero antes de
cargarlo.
4. Cuando se
carga el programa.
5. Cuando se
carga un registro
base que se usa
para
direccionamiento.
SEC.
ENLAZADO
7.4
CARGA
515
Este mecanismo es menos general que la
paginacin porque es preciso mover todo el
progra- ma como una unidad (a menos que
haya registros de reubicacin distintos para el
cdigo y los datos, como en el lntel 8088, en
cuyo caso tendr que moverse como dos
unidades).
En las mquinas que pueden hacer
referencia a la memoria relativa al contador
de pro- grama se puede usar un tercer
6. Cuando se
,
:,
ejecuta la
t
instruccin
que contiene
la direccin.
Si una instruccin que
contiene una direccin de
memoria se desplaza
despus del ligado,
ser incorrecta (suponiendo que
el objeto al que hace referencia
tambin cambi de lugar). Si el
traductor produce un binario
ejecutable como salida, el ligado
habr ocurrido en el momento
de la traduccin, y el programa
deber
ejecutarse
en
la
direccin en la que el traductor
esperaba que se ejecutara. El
mtodo de enlazado que se
describi en la seccin anterior
liga los nombres simblicos a
direcciones absolutas durante el
enlazado, y es por ello que el
desplazamiento de los programas
despus de enlazados causa
errores, como se muestra en la
figura 7-17.
Aqu intervienen dos
cuestiones relacionadas.
La primera es la cuestin
de cundo los
nombres simblicos se ligan a
direcciones
virtuales.
La
segunda es
cundo las
direcciones virtuales se ligan a
direcciones fsicas. Slo si ya se
llevaron
a
cabo
ambas
operaciones es com- pleto el
,j
7
.
4
.
4
E
n
l
a
z
a
d
o
d
i
n
m
i
c
o
La estrategia de enlazado que vimos
en la seccin 7.4. l tiene la propiedad
de que todos los procedimientos que
un programa podra invocar se enlazan
antes de que el programa pueda iniciar
su ejecucin. En una computadora con
memoria virtual, si se lleva a cabo
todo el enlazado antes de iniciar la
ejecucin no se aprovecharn todas
las ventajas de la memoria virtual.
Muchos
programas
tienen
procedimientos que slo se invocan
en condiciones ex- traordinarias. Por
ejemplo, los compiladores tienen
procedimientos para compilar enunciados que raras veces se usan, adems
de procedimientos para manejar
condiciones de error que casi nunca se
presentan.
Una forma ms flexible de enlazar
procedimientos
compilados
por
separado
es
enlazar
cada
procedimiento en el momento en que
se invoca por primera vez.
Este
proceso se llama enlazado dinmico y
m
i
c
o
e
n
M
U
L
T
I
C
S
S
e
g
m
e
n
t
o
SEC. 7.4
ENLAZADO Y CARGA
EL NIVEL DE LENGUAJE
ENSAMBLADOR
CAP. 7
517
Todas las referencias subsecuentes a
ese procedimiento se ejecutarn sin
causar un fallo
de
procedimien
to
P
a
LLAMAR
FUEGO
LL
LLAMAR NUBES
1-..,.....,-.-=-...,...,..,..,...,...,...rr1 para el
Segm
ento
de
pr
oc
ed
im
ie
nt
o
Informacin
de enlace
procedimiento
1----'~~""""";..u.""""~
deLUZ
Nombre del
procedimiento
almacenado
como cadena de
caracteres
(
a
Segmento
de enlace
E
n
l
a
z
a
d
o
d
i
n
m
i
c
o
e
n
W
i
n
d
o
w
s
Todas las versiones
del sistema
operativo Windows, incluido NT,
manejan enlazado dinmico y se
apoyan mucho en l. El enlazado
dinmico emplea un formato de archivo
especial llama- do DLL (biblioteca de
enlace dinmico, Dynamic Link
Library). Las DLL pueden contener
procedimientos, datos o ambas cosas,
y es comn usarlos para que dos o ms
procesos
pue- dan compartir
procedimientos o datos de biblioteca.
Muchas DLL tienen la extensin .dll,
pero tambin se usan otras extensiones
como .drv (para bibliotecas de drivers)
y .fon (para bibliotecas de tipos de
letra).
La forma ms comn de DLL es
una biblioteca que consiste en una
coleccin de proce- dimientos que se
pueden cargar en la memoria y a los
que varios procesos pueden accesar al
mismo tiempo. La figura 7-19 ilustra
dos programas que comparten
un
archivo DLL que contiene cuatro
procedimien
tos, A, B, C
y
P
r
o
c
e
s
o
Direccin de fuego
LLAMAR FUEGO
F
E G
d
e
Direccin no vlida
LLAM
AR
AGU
A
LLA
u
s
u
a
r
i
o
2
D
L
L
D
i
A
MAR
a
LUZ
b
e
LLA
c
e
MAR
r
NUB
a
A
ES
B
LLA
e
D
MAR
FUE
GO
LLA
MAR
NUB
ES
(
b
)
Despus de llamar a
FUEGO y enlazarlo.
518
LENGUAJE
EL NIVEL DE
ENSAMBLADOR
CAP. 7
SEC.
RESUMEN
7.5
519
E
n
l
a
z
a
d
o
d
i
n
m
i
c
o
e
n
U
N
I
X
7
.
5
R
E
S
U
M
E
N
Aunque casi todos los programas pueden y
deben escribirse en un lenguaje de alto
nivel, hay situaciones ocasionales en las
que se necesita lenguaje ensamblador, al
menos en parte. Los programas para
computadoras porttiles escasas de
recursos, como las tarjetas inteligen- tes,
procesadores incorporados a aparatos
domsticos y asistentes digitales porttiles
inalm- bricos son posibles candidatos. Un
programa en lenguaje ensamblador es una
representacin simblica de un programa
en lenguaje de mquina subyacente, y se
traduce al lenguaje de mquina con un
programa llamado ensamblador.
Cuando una ejecucin extremadamente
rpida es crucial para el xito de alguna
aplicacin, una estrategia mejor que escribir todo
en lenguaje ensamblador es escribir
primero todo el programa en un lenguaje
de alto nivel, luego determinar dnde pasa
ms tiempo el progra- ma, y finalmente
reescribir en lenguaje ensamblador slo
aquellas localidades del programa que se
usen mucho. En la prctica, una fraccin
pequea del cdigo representa una
EL NIVEL DE LENGUAJE
ENSAMBLADOR
CAP. 7
5
2
11
P
R
O
B
L
E
M
A
S
.
91< del cdigo ocupa el
50% del tiempo de ejecucin. Compare las
siguienl. En cierto programa, e o
.
el tiem o de ejecucin. Suponga que se
en las
que un lenguaje ensamblador permita
que una etiqueta sea igual a un cdigo
de operacin (por ejemplo, MOV como
rtulo)? Comente.
1
1
11.
a. Todo el programa en C.
b. Todo el programa en lenguaje
ensamblador.
, .
c. Primero todo en C, y luego se reescribe el
1 % crtico en ensamblador.
2.
Las consideraciones
esto?
hacerlo al revs?
5. . El s
. .
des una
amblarseEQU
en
dos
pasadas?
iguien
seudoinstruccin
que
te programa pue e ens
iguala el rtulo a la expresin que est en
el campo de operandos.
sumando
podran definir
smbolos
l,
14.
A
E
Q
U
B
C
E
O
U
D
B
E
Q
U
D
E
O
U
4
ue ;:~2~:c~~r~~mitar la lon.gitud de
los smbolos permitidos de mod~ que
cada sm~ol.o se m
'
bra Arnarrete declar que los smbolos
1
solo pueden cons1st1r en
pueda almacenar ~~ u;a lsoll:t~: ~ q~e
est prohibida (con objeto de hacer
patente ante los clientes
16.
1:
~~r;;~~~~pea:~~~c~~~
e~cienci;).
longitud mxima puede tener un
smbolo'l Descnba su
Qu
esquema de codificacin.
7.
EV
ER
EST
: K2:
WHI
TNE
Y:
MC
KIN
LEY
:
FUJI
:
KIB
O:
P
O
P
B
X
(
1
B
Y
T
E
)
P
U
S
H
B
P
(
1
B
Y
se asigna a la
un
.,
trayen
do
todos
Jos
proced
imient
os
5
2
que
estn
en la
lista
de
nomb
res
EL NIVEL
DE
LENGUAJE
ENSAMBL
ADOR
21.
24.
25.
ARQUITEC
TURAS
DE
COMPUTA
DORAS
PARALELA
S
5
2
3
S
5
2
a
l
.
,
1
9
9
7
;
y
W
i
l
k
i
n
s
o
n
,
1
9
9
4
)
.
l.
procesamiento
de
Los elementos de
procesamiento pueden
variar desde las ALU mnimas hasta las
CPU completas, con tamaos que van
desde una
pequea fraccin de un chip hasta un
metro cbico de circuitos electrnicos por
ARQUITECTURAS DE
PARALELAS
8
.
1
.
1
M
o
d
e
l
o
s
d
e
c
o
m
u
SEC. 8.1
527
(a)
(b)
C
P
U
S
E
ARQUITECTURAS DE
528
COMPUTADORAS PARALELAS
CAP.8
Red de
interconexi
n para paso
de
mensajes
R
e
d
e
hbri
dos
que
sean
relati
vame
nte
fcile
s de
const
ruir y
relati
vame
nte
fcile
s de
progr
amar.
Tales
trabajos
han
cond
ucido
a la
revel
acin
de
que
hay
varias
form
as de
impl
emen
tar
una
mem
oria
comp
artid
a,
cada
una
con
sus
ventaj
as y
desve
ntaja
s. De
h
eU
n
(a)
(b)
Figura
8-2.
(a)
Multicomputadora con 16
CPU, cada una de las cuales
tiene su propia memoria
privada. (b) La imagen de
mapa de bits de la figura 81 dividida entre las 16
memorias.
y STORE
es imposible en una
multicomputadora. Por ejemplo, si la CPU
O (la de la esquina superior izquierda) de la
figura 8-1 (b) descubre que parte de su
objeto se extiende hacia la seccin asignada
a la CPU 1, podr seguir leyendo la
memoria para acceder a la cola del avin.
Por otra parte, si la CPU O de la figura 82(b) efecta el mismo descubrimiento, no
puede leer simplemente Ja memoria de la
CPU l; tiene que hacer algo muy distinto
para obtener los datos que necesita.
En particular, la CPU O tiene que
descubrir (de alguna manera) cul
CPU tiene los datos
que necesita y enviar a esa CPU un mensaje
en el que solicita una copia de Jos datos.
Por Jo regular, lo que hara entonces la CPU
O sera bloquearse (es decir, esperar) hasta
recibir una respuesta a su solicitud. Cuando
el mensaje llega a la CPU 1, el software de
esa CPU debe analizarlo y devolver los
datos solicitados. Cuando el mensaje de
respuesta llega a la CPU O, el software se
desbloquea y puede continuar su ejecucin.
En
una
rnulticornputadora,
la
comunicacin entre procesos a menudo
utiliza primitivas en software como send
(enviar) y receive (recibir). Esto hace que
el software tenga una estructura diferente,
mucho ms complicada, que en un
multiprocesador, y tambin implica que la
divisin
correcta de Jos datos y su
colocacin en los lugares ptimos es una
cuestin
importante
en
una
multicomputadora.
Esto
es
menos
importante en un multiprocesador por- que
la colocacin no afecta la correccin ni la
programabilidad, aunque s podra afectar
el desempeo. En pocas palabras,
programar una multicomputadora es mucho
ms
difcil
que
programar
un
multiprocesador.
En estas condiciones, para qu
construir multicomputadoras, si los
multiprocesadores
son ms fciles de programar? La respuesta
es sencilla: las multicomputadoras grandes
son mucho ms sencillas y econmicas de
construir que los multiprocesadores con el
mismo
ARQUITECTURAS
DE
COMPUTADORASP
ARALELAS
Aplicacin
Aplicacin
Sistema
de
Sistema de
tiempo
de
tiempo
de
ejecucin
ejecucin
del
lenguaje
del lenguaje
Sistema
Sistema
operativo
operativo
Hard
ware
Hard
ware
A
p
l
i
c
a
c
i
S
i
s
t
e
m
a
d
SEC. 8.1
531
e
tiempo
de
ejecuci
n
del
lenguaje
Aplicacin
Hardw
are
Sistema operativo
Hardware
m
u
l
t
i
p
r
o
c
e
s
a
d
o
r
e
s
e
n
Aplicacin
Aplicacin
e
s
t
e
Sistema de
Sistema de
tiempo de
tiempo de
ejecucin
ejecucin
del lenguaje
del lenguaje
s
e
n
t
i
d
o
,
Sistema
Sistema
operativo
operativo
p
o
r
q
u
e
Hardware
Hardware
a
m
e
n
u
d
o
l
o
s
t
M
e
M
e
m
o
ri
a
c
o
m
p
a
rt
i
d
a
iene
n
vari
os
md
ulos
de
me
mor
ia
que
tam
bin
deb
en
con
ecta
rse
entr
e s
y
con
las
CP
U.
Por
ello,
el
M
e
(b)
(c
)
l.
CPU.
2.
3.
Mdulos de memoria.
Interfaces.
4.
Enlaces.
(a)
8
.
1
.
2
R
e
d
e
s
d
e
i
n
t
e
r
c
o
n
e
x
i
n
En la figura 8-2 vimos
que las
multicomputadoras deben su cohesin a las
redes de interco- nexin. Ha llegado el
momento de examinar con mayor
detenimiento
esas
redes.
Resulta
interesante y sorprendente lo parecido que
son
los
multiprocesadores
multicomputadoras
las
5.
Conmutadores.
ARQUITECTURAS DE
PARALELAS
a
La topologa de una red de interconexin
describe la forma como estn dispuestos los
enlaces y los conmutadores; por ejemplo, en
forma de anillo o de cuadrcula. Los
diseos topolgicos pueden modelarse
como grafos, en los que los enlaces son
aristas y los conmutadores son nodos,
como se muestra en la figura 8-4. Cada
nodo de una red de interconexin (o de su
grafo) tiene cierto nmero de enlaces
conectados a l. Los matemticos llaman al
nmero de enlaces grado del nodo; los
ingenieros lo llaman abanico de salida. En
general, cuanto mayor es el abanico de
salida, ms opciones de enrutamiento hay y
mayor es la tolerancia de fallos, es decir, la
capacidad para seguir funcionando aunque
falle un enlace, desviando el trfico por
otros caminos. Si cada nodo tiene k aristas y
el cableado es el debido, es posible disear
SEC. 8.1
ASPECTOS DEL DISEO
DE COMPUTADORAS PARALELAS
533
(
a
)
(
b
)
(
e
)
(
d
)
(e)
(f)
,,,,.. ......
---~::-~~--.. '
...
...........
=> '/
...
:::::.-........~~~:~~ ...... . .
(g)
(h)
Figura
8-4.
Diversas
topologas.
Los puntos
gruesos
representan
~~::~tJ.~~
conmutadores. No
se
muestran las CPU ni las
memorias. (a) Una estrella.
(b) Una interconexin
total. (e) Un rbol. (d) Un
anillo. (e) Una cuadrcula.
(f) Un toroide doble. (g)
Un cubo. (h) Un hipercubo
4D.
ARQUITECTURAS DE
PARALELAS
SEC. 8.l
DE
535
es el logaritmo base 2 del nmero de nodos,
de modo que, por ejemplo, un hipercubo
O-dimen- sional tiene l 024 nodos pero
un dimetro de slo 1 O, lo que da
excelentes propiedades de retraso. Observe
que, en contraste, 1024 nodos dispuestos en
una cuadrcula de 32 x 32 tiene un
dimetro de 62, ms de seis veces ms
grande que el del hipercubo. El precio que
se pa a por el dimetro ms pequeo es
que el abanico de salida y por tanto el
nmero de enlaces
el costo) es mucho mayor para el
hipercubo. No obstante, el hipercubo es
una opcin comn
e
n
l
t
o
d
e
s
e
m
p
e
s
i
o
.
s
t
e
m
a
s
C
o
n
m
u
t
d
e
a
c
i
n
Una red de interconexin consiste en
conmutadores y alambres que los conectan.
En Ja figura
8-5 vemos una red pequea con cuatro
conmutadores. Cada conmutador de este
lace. Puesto que normalmente hay
mucho trfico cerca de la parte alta
del rbol, los nodos de arriba se
convertirn en cuellos de botella.
Una forma de remediar este
problema es incre- mentar el ancho
de banda bisectriz dando a los
enlaces superiores mayor ancho de
banda. Por
ejemplo,
los tener
enlaces
nivel ms
bajo
podran
unadel
capacidad
de
b, el siguiente nivel
d
p
a
1::::1
I]
D
Conmutador de
p
u
d
e
'--y-'
--l-'-1---+-~
cuatro puertos
536
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP. 8
F
r
e
n
t
e
d
e
l
p
a
q
u
e
t
e
~
Conmutador
de
'::
'"""
e
B
A
p:~!
L:
J
RB
[
I
C D C
O
0a0
r
c
t:l
t:l
t:l
I]
I].
I]
anterior, la
latencia de la
:
$
C
[
[I
t:l
t:l
I]
I]
I]
t:l
t:l
P
a
q
u
e
t
e
e
n
t
e
r
o
(a)
(b)
(e)
Figura 8-6.
Conmutacin
de paquetes de
almacenamient
o y reenvo.
Los conmutadores de almacenamiento
y reenvo deben colocar los paquetes en
buffers porque cuando un origen (una
CPU, memoria o conmutador) presenta
un paquete, cabe la
538
COMPUTADORAS
CAP. 8
ARQUITECTURAS DE
PARALELAS
SEC. 8.1
ASPECTOS DEL DISEO
DE COMPUTADORAS PARALELAS
539
Conmutador de cuatro
puertos
8
.
1
.
3
M
t
r
i
c
a
s
D
e
s
e
m
p
e
d
e
ARQUITECTURAS DE
PARALELAS
h
a
r
d
w
a
r
e
Desde el punto de vista del hardware, las
mtricas de desempeo que interesan son
la veloci- dad de la CPU y de E/S, y el
desempeo de la red de interconexin.
Las velocidades de la CPU y de E/S son
las mismas que en el uniprocesador, de
modo que los parmetros clave de
tacin de circuitos, de almacenamiento y
reenvo, de corte a travs virtual y de
enrutamiento por tnel. En el caso de la
conmutacin de circuitos, la latencia es la
suma del tiempo de preparacin y el tiempo
de transmisin. Para preparar un circuito, es
preciso enviar un paque- te "de sondeo"
que reserve los recursos e informe de los
resultados de su gestin. Despus, hay que
armar el paquete de datos. Una vez que est
listo, sus bits pueden fluir a toda veloci- dad,
de modo que si el tiempo de preparacin
total es T,, el tamao del paquete es de p
bits y el ancho de banda es de b bits/s, la
latencia en un sentido ser T, + p/b. Si el
circuito es dplex, no habr tiempo de
preparacin para la respuesta, de modo que
la latencia mnima para en- viar un paquete
de p bits y obtener una respuesta de p bits
es de T, + 2p/b segundos.
En el caso de la conmutacin de
paquetes no es necesario enviar un
paquete de sondeo al
SEC. 8.1
DE
541
En la prctica es muy difcil
acercarse siquiera al ancho de banda
terico. Muchas fuen- tes de gasto extra
reducen la capacidad. Por ejemplo,
siempre hay cierto gasto extra asociado
a cada paquete: para armarlo, construir
su cabecera y ponerlo en marcha. El
envo de l
paquetes de 4 bytes nunca
024
lograr el mismo ancho de banda que el
envo de un paquete de
40:6 bytes. Lamentablemente, el uso de
paquetes pequeos es mejor para lograr
latencias bajas, puesto que los paquetes
grandes bloquean demasiado tiempo las
lneas y los conmuta- dores. As, hay un
conflicto inherente entre lograr una
latencia baja y aprovechar al mximo el
~nch? de banda. En,algunas aplicaciones,
una cosa es ms importante que la otra, y
en otras aplicaciones es al reves. No
obstante, cabe sealar que siempre es
posible comprar ms ancho de,ban~a
(instalando ms cables o cables ms
anchos), pero no es posible comprar
latencias
ma~
bajas.
Por
ello,
generalmente es mejor tratar de hacer que
las latencias sean lo ms bajas posibles, y
preocuparse por el ancho de banda
despus.
M
t
r
i
c
a
s
d
e
s
o
f
t
w
a
r
e
5
4
.... .
60
...
..
5
0
4
0
-
30
-s+Probem
a de
Aceleracin
lineal
.... /
N cuerpos
~
-
e:
o
.....
.....
~lll
. .~....
..
<
(
..
20
10
,,,. ....
_.,,.,
~
, -.
.
.
.
.
. ...
....
....
..
,
,
,
,
,
,
.,,,,
"""'
.
-
Aceleracin =
+ (n - 1)/
Con/=
O
podemos obtener una
aceleracin lineal, pero con/> O no es
posible lograr la acele- racinperfectaa
causa del componentesecuencial. Este
resultado se conocecomo ley de Amdahl.
S
E
ASPECTOS DEL
DISEO DE
COMPUTADORAS
PARALELAS
5
4
m
o
forma
ms
sencilla
de
m
e
j
o
re ese
al mpe
r o
d es
a
g
r
e
g
aP
a
-~--0--0---0--0---0--o--
-s+
m
v
e
r
s
t
o
n
m
e
r
o
d
e
d
e
m
a
t
r
i
z
C
P
U
d
e
p
e
r
f
i
l
a
d
o
CPU
1 11 1
t
Bus
n CPU activas
P
art
e
in
he
re
nt
em
ente
secuencial
P
a
t
1
1 - f
(
a
)
(
b
)
(
e)
(d)
16 CPU
basado en bus. (e) Sistema de
cuatro CPU basado en cuadrcula.
(d) Sistema de 16
CPU basado en cuadrcula.
Figu
ra
8-10.
(a)
Siste
~
-T
-~
(a)
m
a
..._fT-----(1
f)
T
/n
--(
b
)
545
8
.
1
.
4
S
o
f
t
w
a
r
e
Aunque este captulo trata primordialmente
las arquitecturas de computadora paralelas,
es apropiado hablar un poco acerca del
software tambin. Despus de todo, sin
software parale- lo el hardware paralelo no
sirve de mucho, y es por ello que los buenos
diseadores de hardware toman en cuenta
las necesidades del software al disear el
hardware. Si desea un tratamiento del
software para computadoras paralelas, vea
(Wilkinson y Allen, 1999).
Existen cuatro estrategias generales
para producir software para computadoras
parale- las. En un extremo est la adicin de
bibliotecas numricas especiales a lenguajes
secuenciales por lo dems normales. Por
ejemplo, se podra invocar desde un
programa secuencial un procedimiento de
biblioteca que invierta una matriz grande
o resuelva un conjunto de ecuaciones
diferenciales parciales en un procesador
paralelo sin que el procesador siquiera se d
cuenta de la existencia de paralelismo. El
problema con este enfoque es que el
paralelismo slo puede usarse en unos
cuantos procedimientos y el grueso del
cdigo seguir siendo secuencial.
Una segunda estrategia es la adicin de
bibliotecas especiales que contienen
primitivas
de comunicacin
y control. Aqu el
programador tiene la responsabilidad de
crear y controlar el paralelismo dentro de
un lenguaje de programacin convencional,
empleando estas primi- tivas adicionales.
El siguiente paso es aadir unas
cuantas construcciones especiales a
lenguajes de programacin existentes, como la capacidad
de bifurcar fcilmente nuevos procesos
paralelos, ejecutar las iteraciones de un
ciclo en paralelo, o efectuar operaciones
aritmticas con
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP.8
546
Modelos de control.
2.
3.
Paradigmas computacionales.
4.
Mtodos de comunicacin.
5.
Primitivas de sincronizacin.
Cada una
de estas
cuestiones
se estudiar
547
en su
oportunida
d. Modelos
de control
Tal vez la decisin fundamental que el
software debe tomar es si habr un solo
enlace de control o varios. En el primer
modelo hay un programa y un contador
de programa, pero varios conjuntos de
datos. Cuando se emite una instruccin, se
ejecuta con todos los conjun- tos de datos
simultneamente, con diferentes elementos
de procesamiento.
Por ejemplo, imagine un programa
meteorolgico que cada hora recibe
mediciones de temperatura de miles de
sensores
remotos que tienen que
promediar para cada sensor. Cuan- do el
programa emite la instruccin
CARGAR LA TEMPERATURA
PARA LA 1 A.M. EN EL
REGISTRO R1
cada procesador la ejecuta utilizando sus
propios datos y su propio R1. Despus,
cuando el programa emite la instruccin
SUMAR LA TEMPERATURA
PARA LAS 2 A.M. AL REGISTRO
R1
una vez ms, cada procesador lo hace
utilizando sus propios datos. Al final del
clculo, cada procesador habr calculado
la temperatura media para un sensor
distinto.
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP.8
549
Proceso
Paradigmas computacionales
Casi todos los programas paralelos, sobre
todo los que implican grandes nmeros de
enlaces o procesos independientes, usan
algn
paradigma subyacente
para
estructurar su trabajo. Existen muchos de
esos paradigmas. En esta seccin slo
mencionaremos algunos de los ms
utilizados.
Una generalizacin de la idea de tener
un programa paralelo que consta de un
enlace de control y mltiples unidades de
ejecucin es el paradigma de programa
nico, mltiples datos (SPMD, Single
Program Mu/tiple Data). La idea aqu es
que aunque el sistema consis- te en varios
procesos independientes, todos ejecutan el
(a)
(b)
(e)
(d)
t
o
d
o
s
d
e
c
o
m
u
n
i
c
a
c
i
n
Cuando un programa se divide en
fragmentos (digamos, procesos) que se
ejecutan en parale- lo, los fragmentos
(procesos)
a
menudo
necesitan
comunicarse entre s. Esta comunicacin
puede efectuarse de una de dos maneras:
variables compartidas
o transferencia
explcita de mensajes.
En el primer
mtodo, todos los procesos tienen acceso a
la memoria lgica
comn y pueden
comunicarse leyndola y escribiendo en
ella. Por ejemplo, un proceso puede ajustar
una variable y otro proceso puede leerla.
En un multiprocesador, las variables
pueden compartirse entre mltiples
procesos
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP.8
La alternativa a la comunicacin a
travs de memoria compartida es la
comunicacin por transferencia explcita
de mensajes. En este modelo, los procesos
usan primitivas como send y receive
para comunicarse. Un proceso emite un
send, nombrando a otro proceso como
destino. Tan pronto como el segundo emite
un receive, el mensaje se copia en el
espacio de direcciones del receptor.
La transferencia de mensajes tiene
muchas variaciones, pero todas se
reducen a tener dos
primitivas send y receive que sirven
para transmitir
mensajes.
stas
generalmente
se implementan como
llamadas al sistema. Veremos algunos de
los detalles ms adelante en este captulo.
Otro aspecto importante de la
transferencia de mensajes es el
nmero de receptores. El
caso ms simple es el de un transmisor y
un receptor, llamado transferencia
de
mensajes punto a punto. Sin embargo, a
veces es til entregar un mensaje a todos
los procesos, en lo que se conoce como
difusin
(broadcasting), o a un
subconjunto especfico de los procesos, en
lo que se conoce como multidifusin
(multicasting).
Cabe sealar que la transferencia de
mensajes es fcil de implementar en un
multipro- cesador con slo copiar del
transmisor
al receptor. Por tanto, las
cuestiones de memoria fsica compartida
(multiprocesador
versus
Lgico
(software)
Multiprocesador
Variables compartidas
Procesamiento de imgenes como en la figura 8-1
Multiprocesador
Transf. de mensajes
DSM, Linda,
Transf. de mensaies
P
r
i
m
i
t
i
v
a
s
5
5
d
e
s
i
n
c
r
o
n
i
z
a
c
i
n
Los procesos paralelos no slo necesitan
comunicarse; con frecuencia tambin
necesitan sincronizar
sus acciones. Un
ejemplo de sincronizacin es cuando los
procesos comparten variables lgicamente
y tienen que asegurarse de que mientras
un proceso est escribiendo en una
estructura de datos compartida ningn
otro proceso est tratando de leerla. En
otras palabras, se requiere alguna forma de
exclusin mutua para evitar que varios
procesos usen los mismos datos al mismo
tiempo.
Existen diversas primitivas de
software que pueden servir para
asegurar la exclusin
mutua. stas incluyen semforos, candados,
mutexes
y secciones crticas. La
caracterstica comn
de todas estas
primitivas es que permiten a un proceso
solicitar el uso exclusivo de algn recurso
(variable compartida, dispositivo de E/S,
etc.). Si se otorga el permiso, el pro-
8.1.5
Taxon
oma
de
comp
utado
ras
parale
las
Aunque podramos hablar mucho ms
acerca del software para computadoras
paralelas, las limitaciones de espacio nos
obligan a regresar al tema principal de este
captulo,
la arquitec- tura de las
computadoras paralelas. Se han propuesto
y construido muchos tipos de computadoras paralelas, por lo que es natural
preguntarse
si hay alguna forma de
clasificarlas dentro de alguna taxonoma.
Muchos investigadores lo han intentado,
con regular xito (Flynn, 1972; Gajski y Pier,
1985; Treleaven, 1985). Lamentablemente,
todavano ha surgido el Carlos Linneo+ de la
computacin en paralelo. El nico esquema
que se usa mucho es el de Flynn, pero
hasta el de l es, en el mejor de los casos,
una aproximacin muy burda (figura 8-13).
Flujos de
Flujos de
instrucciones
Ejemplos
datos
Nombre
SISO
Mquina
Varios
SIMD
vectorial, procesador de arreglos
Varios
ninguno
Varios
Multiprocesador,
MISO
Tal vez
Varios
MIMD
multicomputadora
Figura 813.
Taxonom
a de
Flynn
para
computad
oras
paralelas.
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP. 8
553
Hemos dividido a SIMD en dos subgrupos.
El primero es el de las supercomputadoras
numricas y otras mquinas que operan
con vectores, realizando la misma
operacin con cada elemento del vector. El
segundo es para las mquinas tipo paralelo,
como la ILLIAC IV, en las que una unidad
de control maestra, difunde instrucciones
a muchas ALU independientes.
Memoria
compartida
Transparencia
de mensajes
En nuestra taxonoma,
la categora
MIMD se ha dividido en multiprocesadores
(mqui- nas con memoria compartida) y
multicomputadoras
(mquinas
que
transfieren mensajes). Existen tres clases de
multiprocesadores, que se distinguen por la
forma en que se implementa la memoria
compartida:
acceso
uniforme
a la
memoria
(UMA,
Uniform Memory
Access),
acceso
no uniforme
a la memoria
(NUMA, NonUniform Memory Access) y
slo acceso a memoria cach (COMA,
Cache Only Memory Access).
Estas
categoras
existen
porque
en los
multiprocesadores
grandes
la memoria
normalmente se divide en varios mdulos.
Las mqui- nas UMA tienen la propiedad de
que cada CPU tiene el mismo tiempo de
acceso a todos los mdulos de memoria. En
otras palabras, cada palabra de memoria se
puede leer con la misma rapidez que
cualquier otra palabra de memoria. Si esto
es tcnicamente imposible, las referencias ms rpidas se frenan de modo que
tarden lo mismo que las ms lentas y los
programadores no noten las diferencias. ste
es el significado de "uniforme" aqu. Esta
uniformidad hace que el desempeo sea
predecible, lo cual es un factor importante
para escribir cdigo eficiente.
En contraste,
un multiprocesador
NUMA no posee esta propiedad. Es comn
que haya un mdulo de memoria cercano a
cada CPU y que el acceso a ese mdulo
sea mucho ms rpido que el acceso a
mdulos distantes. El resultado es que, por
razones de desempeo, es importante dnde
se coloquen el cdigo y los datos. Las
mquinas COMA tampoco son uniformes,
pero de diferente manera. Estudiaremos cada
uno de estos tipos y sus subcategoras con
detalle ms adelante.
La otra categora principal de mquinas
MIMD comprende las multicomputadoras
que, a diferencia de los multiprocesadores,
no tienen una memoria primaria compartida
en el nivel arquitectnico. En otras palabras,
el sistema operativo de una CPU de
multicomputadora no puede acceder a
memoria conectada a una CPU distinta
con slo ejecutar una instruccin LOAD;
tiene que enviar un mensaje explcito y
esperar una respuesta. La capacidad del
siste- ma operativo para leer una palabra
distante con slo emitir una LOAD es lo
que distingue a los multiprocesadores de las
multicomputadoras. Como ya dijimos, aun
en una multicompu- tadora los programas de
usuario podran tener la capacidad para
acceder a memoria remota usando
Access).
Las multicomputadoras
se pueden
dividir a grandes rasgos en dos categoras. La
primera categora contiene los procesadores
masivamente paralelos (MPP, Massively
Parallel
Processors),
que
son
supercomputadoras caras que consisten en
muchas CPU acopladas es- trechamente por
una red de interconexin patentada de alta
velocidad. La Cray T3E y la SP/2 de IBM
son ejemplos muy conocidos.
La otra categora consiste
en PC o
estaciones de trabajo normales, tal vez
montadas
en anaqueles,
y conectadas
ARQUITECTURAS DE
COMPUTADORASPARALELAS
CAP. 8
554
8
.
2
C
O
M
P
U
T
A
D
O
R
A
S
S
I
M
D
Las computadoras SIMD (un solo flujo de
instrucciones, mltiples flujos de datos; Single
trabajo
(COW,
Cluster of
Workstations).
En las secciones que siguen
examinaremos con cierto detalle las
principales categoras:
SIMD,
MIMD/multiprocesadores
y
MIMD/multicomputadoras.
La meta es
presentar un pa- norama general de cada
tipo, sus subcategoras y sus principios de
diseo fundamentales. Se usarn varios
ejemplos como ilustracin.
8
.
2
.
1
A
r
r
e
g
l
o
s
d
e
p
r
o
c
e
s
a
d
o
r
e
s
La idea de un arreglo de procesadores
surgi hace ms de 40 aos (Unger, 1958),
pero tuvie- ron que pasar 1 O aos para que
se construyera el primero, ILLIAC IV, y
entrara en servicio (para la NASA). Desde
entonces, varias compaas han construido
arreglos
de procesadores comerciales,
como el CM-2 de Think:ing Machines y el
Maspar MP-2, pero ninguno de ellos ha
tenido un xito comercial espectacular.
La idea en que se basa el arreglo de
procesadores es que una sola unidad de
control pro- porciona las seales que
controlan
muchos elementos
de
procesamiento,
como se muestra en la
figura 2-7.
Cada elemento de
procesamiento consiste en una CPU o
ALU ampliada y por lo regular un poco de
memoria local. Puesto que una sola unidad
de control est alimentando a todos los
elementos de procesamiento, stos operan
de forma sincronizada.
Aunque todos los
arreglos
de
procesadores siguen este modelo general,
hay varios as- pectos de diseo en los que
pueden diferir. El primero es la estructura
del elemento de proce- samiento. Dichos
elementos
pueden ir desde los
extraordinariamente simples hasta otros
ms complejos. En el extremo inferior, los
elementos de procesamiento pueden ser
poco ms que una ALU de un bit, como en
SEC.
COMPUTADORAS
8.2
SIMD
555
muchos problemas bidimensionales que
implican matrices e imgenes y su escala
se puede aumentar con facilidad ya que la
adicin
de
ms procesadores
automticamente aumenta el ancho de
banda.
Una tercera cuestin de diseo es el
grado de autonoma local que los
elementos de
procesamiento tienen. En el tipo de diseo
que estamos describiendo, la unidad de
control especifica la instruccin que debe
ejecutarse, pero en muchos procesadores de
arreglos cada elemento de procesamiento
puede optar por ejecutar o no ejecutar una
instruccin, con base en datos locales
como bits de cdigo de condicin. Esta
caracterstica aade mucha flexibili- dad.
Puesto que los procesadores de arreglos
tienen un futuro incierto, no
profundizaremos ms en ellos.
8
.
2
.
2
P
r
o
c
e
s
a
d
o
r
e
s
v
e
c
t
o
r
i
a
l
e
s
El otro tipo de mquina SIMD es el
procesador vectorial, que ha tenido un
xito comercial mucho mayor. Un linaje de
mquinas diseadas por Seymour Cray
para Cray Research (aho- ra parte de Silicon
Graphics), comenzando con la Cray-1 en
1976 y continuando hasta la C90 y La T90,
ha dominado la computacin cientfica
durante dcadas. En esta seccin examinaremos los principios fundamentales que se
aplican en estas computadoras de alto
desempeo. Una aplicacin de trituracin de
nmeros tpica contiene muchos enunciados
como
for (i =O; i < n; i++) a[i] = b[i] + c[i];
donde a, b y e son vectores, es decir,
arreglos de nmeros, casi siempre en punto
flotante. El ciclo ordena a la computadora
sumar los i-simos elementos de by e y
almacenar el resultado en el -simo
elemento de a. Tcnicamente, el programa
especifica que los elementos deben sumarse
en sucesin, pero normalmente el orden
no importa.
En la figura 8-15 se muestra una
posible arquitectura SIMD apropiada
para este tipo de
procesamiento vectorial. La mquina recibe
dos vectores den elementos como entradas
y ope- ra con
los
elementos
correspondientes
en paralelo utilizando
una ALU vectorial que puede operar con
los n elementos simultneamente y produce
como resultado un vector. Los vectores de
entrada y de salida se pueden almacenar en
La memoria o en registros
vectoriales
especiales.
Las computadoras vectoriales tambin
necesitan efectuar operaciones
escalares (no
vectoriales) y operaciones mixtas escalaresvectoriales.
Los tipos
bsicos de
operaciones vec- toriales se enumeran en la
CAP. 8
ARQUITECTURAS DE COMPUTADORAS
PARALELAS
5
COMPTADORAS SIMD
Paso
Nombre
Traer operandos
Ajustar exponente
1.082X1012-0.9212X1012
3
4
Ejecutar resta
0.1608 X 1012
Normalizar resultado
1.608 X 1011
ALU
F
i
g
u
r
a
Valore
r
i
a
l
.
vector
O
p
e
r
a
c
i
8
1
5
.
A
L
U
v
e
c
t
o
n
E
e
m
l
o
s
1.082X1012
- 9.212X1
=
A
;
2
(
(
8
s
u
,
r
a
z
c
u
a
d
r
a
d
a
E
s
c
a
l
a
r
,
m
n
i
m
o
A;= f3(Bi, e)
sumar, restar
13 =
14
En la prctica, pocas
supercomputadoras se construyen en
realidad como lo que se muestra en la figura
8-15. La razn no es tcnica ---ciertamente
es factible construir tales mquinas- sino
econmica. Un diseo con, digamos, 64
ALUs de muy alta velocidad sera
demasiado costoso, incluso para una
supercomputadora.
3
Buscar operandos
B4,
Ajustar exponente
B2. e2 B3,
Ejecutar operacin
B3. e,
resultado
81,
82
e,
85, es
e,
81,
82
B6.
e,
B4, e,
B4.
e,
e,
e,
e,
e,
B3,
e,
e,
B3.
87, el
81,
s, es 81, e1B6. e,
B2.
85, es Normalizar
e,
84,
e,
t
o
r
i
a
l
L
a
s
u
p
e
r
c
o
m
p
u
t
a
d
o
r
a
C
r
a
y
1
Las supercomputadoras por lo regular
tienen mltiples ALUs,
cada una
especializada
en
alguna
operacin
especfica, y todas capaces de operar en
paralelo. Por ejemplo, considere- mos la
Cray-1,
una
de
las
primeras
supercomputadoras. Aunque ya no se usa,
tiene una arqui- tectura simple tipo RISC
que la convierte en un buen objeto de
estudio, y su arquitectura perdura en
muchas
supercomputadoras vectoriales
modernas.
v
e
c
558
COMPUTADORAS
CAP. 8
el nmero de instrucciones
STORE.
ARQUITECTURAS DE
PARALELAS
T
64 elementos
por registro
8
r
e
g
i
s
t
r
o
s
d
e
8
6
4
r
e
g
i
s
t
r
o
s
r
e
t
e
n
c
i
n
r
e
g
i
s
t
r
o
s
r
e
g
i
s
t
r
o
s
64
LOAD y
de direccin
de retencin de
de 24 bits
64 bits para
de 24 bits
escalares
v
e
c
t
o
r
i
a
l
e
s
para
de 64 bits
8 registros vectodireccin
escalares
riales de
64 bits
l
a
r
e
s
/
v
e
c
t
o
r
i
a
l
e
s
A
D
D
U
n
i
d
a
d
e
s
D
D
e
n
t
e
r
a
s
e
s
c
a
l
a
r
e
s
A
D
D
d
e
p
u
n
t
o
f
l
o
t
a
n
t
e
O
O
L
e
n
t
e
r
a
s
E
A
N
Figur
a 819.
M
U
L
SHIFT
Unidades de direccin
RECIP.
SHIFT
POP. COUNT
U
n
i
d
a
d
e
s
e
s
c
a
U
n
i
d
a
d
e
s
Regis
tros y
unida
des
funci
onales
de la
Cray1.
La parte ms interesante del
conjunto de registros de la Cray-1 es el
grupo de ocho registros vectoriales. Cada
registro puede contener un vector de punto
flotante de 64 elemen- tos. Es posible
SEC. 8.4
CON
MEMORIA
MULTIPROCESADORES
COMPARTIDA
559
Al igual que muchas otras
computadoras vectoriales, la Cray-1
permite encadenar ope- raciones. Por
ejemplo, una forma de calcular
R1 = R1
R2 + R3
donde R1,
R2 y R3 son registros
vectoriales, sera efectuar la multiplicacin
vectorial, ele- mento por elemento, guardar
el resultado
en algn lugar, y Juego
efectuar Ja suma vectorial. Con el
encadenamiento, tan pronto como se han
multiplicado los primeros elementos, el
producto puede ir directamente al sumador,
junto con el primer elemento de R3. No
se re- quiere un almacenamiento intermedio.
Esta tcnica mejora considerablemente el
desempeo.
Como comentario final acerca de la
Cray-1, resulta interesante examinar su
desempeo
absoluto. El reloj opera a 80 MHz y tiene
una memoria principal de 8 MB. En su
poca (de mediados a fines de los aos
setenta) era la computadora ms potente
del mundo. Hoy da ya no es posible
comprar una PC con un reloj tan lento ni
una memoria tan pequea; ya nadie las
fabrica. Esta observacin es un testimonio
a la rapidez con que avanza la industria de
las computadoras.
8.3
MULTIPROCESADORES
CON
MEMORIA
COMPARTIDA
Como vimos en la figura 8-14, los sistemas
MIMD
se
pueden
dividir
en
multiprocesadores y multicomputadoras. En
esta
seccin
examinaremos
los
multiprocesadores; la siguiente estar
dedicada a las multicomputadoras. Un
multiprocesador es un sistema de cmputo
que tiene varias CPU y un solo espacio de
direcciones visible para todas las CPU. La
mquina ejecuta una copia del sistema
8
.
3
.
1
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP.8
560
S
e
m
n
t
i
c
a
d
e
l
a
m
e
m
o
r
i
a
Aunque todos
los
multiprocesadores
presentan a las CPU la imagen de un solo
espacio
de direcciones compartido, a
menudo hay muchos mdulos de memoria
presentes, y cada uno contiene alguna
porcin de la memoria fsica. Las CPU y
las memorias a menudo estn conectadas
por una red de interconexin compleja,
como se explic en la seccin 8.1.2. VaSEC. 8.3
MULTIPROCESADORES
CON MEMORIA COMPARTIDA
561
rias CPU pueden estar intentando leer una palabra de memoria al mismo tiempo que varias
otras CPU estn tratando de escribir la misma palabra, y algunos de los mensajes de
podran
solicitudrebasar a otros en el camino y entregarse en un orden distinto de aquel en que fueron
emitidos. Si a este problema sumamos la existencia de mltiples copias de algunos bloques
de memoria (por ejemplo, en cachs), el resultado puede convertirse fcilmente en un caos si
no se toman medidas estrictas para evitarlo. En esta seccin veremos lo que significa realmente la memoria compartida y cmo pueden responder razonablemente las memorias en
estas condiciones.
Una perspectiva de la semntica de memoria es verla como un contrato entre el software
y el hardware de memoria (Adve y Hill, 1990). Si el software acepta cumplir con ciertas
reglas, la memoria conviene en entregar ciertos resultados. La discusin se centra entonces
en la naturaleza de las reglas. Estas reglas se denominan modelos de consistencia y se han
s
e
c
u
e
n
c
i
a
l
El siguiente mejor modelo se llama
consistencia secuencial (Lamport, 1979).
La idea aqu es que, en presencia de
mltiples solicitudes
de lectura y
escritura, el hardware escoge (de forma
no determinista) cierta intercalacin de
todas las solicitudes, pero todas las CPU
perci- ben el mismo orden.
Para entender qu significa esto,
consideremos un ejemplo. Suponga
que la CPU l escribe el valor 100 en la palabra x, y 1 ns
despus la CPU 2 escribe el valor 200 en
la palabra x. Ahora suponga que 1 ns
despus de emitirse
la segunda
instruccin
de escritura (que no
necesariamente
ha terminado de
ejecutarse) otras dos CPU, la 3 y la 4, leen
la palabra x dos veces en rpida sucesin,
como se muestra en la figura 8-20(a). En
la figura 8-20(b)-(d)
se muestran tres
posibles ordenamientos de los seis sucesos
(dos escrituras y cuatro lecturas). En la
figura 8-20(b), la CPU 3 obtiene (200,
200) y la CPU 4 obtiene (200, 200). En la
figura
8-20(c), las CPU obtienen (IOO, 200) y
(200, 200), respectivamente. En la figura
8-20(d) las
SEC. 8.3
MULTIPROCESADORES
CON MEMORIA COMPARTIDA
563
Ambos puntos son importantes. El primero dice que si la CPU 1 emite escrituras con los
valores 1 A, 1 B y 1 Ca alguna localidad de memoria en ese orden, entonces todos los dems
procesadores las vern en ese orden tambin. En otras palabras, cualquier otro procesador
CPU 8
que est en un ciclo corto observando 1
2A
A, 1 B y 1 C leyendo las palabras escritas
28
nunca ver el
valor escrito por 1 B y luego el valor
escrito por lA, etc. El segundo punto es
necesario para
asegurar que cada localidad de memoria
tendr un valor inequvoco despus de que
varias CPU escriben en ella y despus se
detienen.
Todo mundo debe estar de
acuerdo en quin fue el ltimo.
Incluso con estas restricciones, el
diseador tiene mucha flexibilidad.
Considere lo que
CPUA
2C
20
porque la
primera operacin de
sincronizacin obliga a que 1 A, 1 B y 2A
terminen antes que se permita el inicio de
lC, 2B, 3A o 3B. As pues, al realizar
operacio- nes de sincronizacin,
el
software puede imponer cierto orden
sobre la secuencia de suce- sos, aunque no
sin costo porque el vaciado de la fila de
procesamiento de memoria toma cierto
tiempo.
CPUC
38
3A
3C
Puntode sincronizacin /
T
i
e
m
p
o
-
C
o
n
s
i
s
t
e
n
c
i
a
d
e
l
i
b
e
r
a
c
i
n
La consistencia dbil tiene el problema de
que es muy ineficiente porque debe terminar
todas las operaciones de memoria pendiente
y detener las nuevas hasta que terminen las
actuales. La consistencia de liberacin
ARQUITECTURAS DE
PARALELAS
SEC.
MULTIPROCESADORESCON
COMPARTIDA
8.3.2
Arquitectur
as
SMP
basadas en
el
bus
UMA
Memoria
M
e
m
o
ri
a
c
o
m
p
a
rt
i
d
a
(a)
(b)
(e)
Figura 8-22. Tres
multiprocesadores basados
en bus. (a) Sin cachs. (b)
Con cachs. (e) Con cachs
y memorias privadas.
565
M
e
m
ori
a
pri
va
da
---
8.3
MEMORIA
c
o
t
i
e
s
p
a
Aunque los argumentos de desempeo
antes mencionados
son ciertamente
vlidos, hemos pasado por alto un
Solicitud lo
Buscar datos en m
Actualizar datos e
Actualizar cach y
566
MULTIPROCESADOR
ES CON MEMORIA
COMPARTIDA
CPU 1
CPU 2
CPU 3
Memoria
La
CPU 1 lee el bloque
A
Exclusiva
Cach Bus
C
P
U
3
M
e
m
o
ri
a
La CPU 2 lee
el bloque A
E
]
.
aclarar un punto sutil, observe que en la
figura 8-23 un fallo remoto implica que
la palabra no
est presente en la cach del espa; no
importa si estaba en la cach del
originador o no. As, una misma
solicitud puede ser un acierto
localmente y un fallo en el espa, o
viceversa.)
S
u
p
o
n
g
a
a
h
ora que la
cach 1 escribe
una palabra
que s est
presente en la
cach 2
jcompartida
Compartida
C
P
U
CP
U2
I
T
J
Bus
M
e
m
o
ri
a
C
P
U
3
1
1
Bu
s
M
o
di
fic
a
d
a
C
P
U
1
c
;
;
J
La CPU 2
escribe el
bloque A
C
P
U
3
La CPU 3 lee
el bloque A
M
e
m
o
ri
a
CPU
2
1 Compartida
Compartida
B
us
M
e
m
o
ri
a
CPU 1
CPU 2
CPU 3
LJ
La CPU 2
escribe el
bloque A
CTJ
EJ
1 Modificada
1
1
B
us
probab
ilidad
hay de
q
u
e
u
n
a
palabra
recin escrita
se
escriba
CPU 1
CPU 2
~
EJ
1
M
o
dif
ic
a
d
a
C
P
U
3
E
]
M
e
m
o
ri
a
La CPU 1
escribe el
bloque A
1
1
Bu
s
ARQUITECTURAS DE
PARALELAS
o
d
e
c
o
h
e
r
e
n
c
i
a
d
e
c
a
c
h
M
E
S
I
MULTIPROCESADORES
SEC. 8.3
CON MEMORIA COMPARTIDA
569
r
e
(b)
1. No vlida - La entrada de
cach no contiene datos vlidos.
2. Compartida - Varioscachs
podran contener la lnea; la
memoria est actualizada.
3. Exclusiva - Ninguna otra
cach contiene Ja lnea; la
memoria est actualizada.
4. Modificada - La entrada es
vlida; la memoria no es vlida;
no existen copias.
Cuando la CPU arranca, todas las
entradas de cach se marcan como no
vlidas. La primera vez que se lee la
memoria, la lnea a la que se hace
(c)
I
n
d
e
(
a
El interruptor de
punto de cruce est abierto
SEC 8.3
CON
MEMORIA
MULTIPROCESADORES
COMPARTIDA
571
La bsqueda de informacin en la
memoria se efecta de punto a punto por el
conmuta- dor de barras cruzadas, de 16 en
16 bytes. El ciclo de bus es de 12 ns (83.3
MHz) y cada bus de direcciones se puede
espiar en un ciclo s y otro no, para un
total de 167 millones de espionajes/s. Cada
espionaje podra requerir la transferencia
de una lnea de cach de 64 bytes, de
modo que el conmutador podra tener que
transferir 9.93 GB/s (recuerde que J GB
Una de las peores propiedades del
conmutador de barras cruzadas es el
hecho de que el nmero de puntos de
cruce aumenta en proporcin a n2 Con
1000 CPU y 1000 mdulos de memoria
necesitamos un milln de puntos de cruce.
Un conmutador de barras cruzadas de ese
tamao no es factible. No obstante, para
sistemas de tamao mediano, un diseo de
barras cruzadas resulta prctico.
El Sun Enterprise 10000
Conmutador de barras
cruzadas de 16 x 16
(Gigaplane-XB)
C
P
U
14
U
lt
r
a
S
P
A
R
C
15
d
u
l
o
d
e
---E
m
e
m
o
r
i
a
by
te
s
d
e
64
La
tar
jet
a
ten
a
4G
B
+
4
C
P
U
1
G
B
--~---+-l----++----------1-t-----tde direccin
--~----"---+----------------para espiar
Figura 826.
Multiproce
sador
simtrico
Sun
Enterprise
10000.
Es evidente que el Enterprise 10000
est en el lmite; usa cuatro buses para
espiar en paralelo y un conmutador de
barras cruzadas muy ancho para transferir
datos. Si queremos ir mucho ms all de 64
CPU, vamos a necesitar algo muy distinto.
ARQUITECTURAS DE
PARALELAS
572
COMPUTADORAS
CAP.8
A---r--1--X
B---{
}-
Mdulo 1Direccin1
Cd-op
l _-i"~~;_]
8
2
8
.
(a)
(b)
R
e
d
d
e
F
i
g
u
r
a
c
o
n
m
u
t
a
c
i
n
o
m
e
g
a
.
SEC. 8.3
CON
MEMORIA
MULTIPROCESADORES
COMPARTIDA
573
A medida que el mensaje avanza por la
red de conmutacin, los bits del extremo
izquier- do del nmero de mdulo dejan de
necesitarse. Se pueden aprovechar para
registrar el nme- ro de lnea entrante, a fin
de que la respuesta pueda encontrar el
camino de regreso. En el caso del camino a,
las lneas entrantes son O (entrada superior
de 10), 1 (entrada inferior de 2D) y
1 (entrada inferior de 3D), respectivamente.
La respuesta se encamina de regreso
usando O 11,
s
l
o
q
u
e
e
s
t
a
v
e
z
s
e
l
e
e
d
e
d
e
r
e
c
h
a
a
i
z
q
u
i
e
r
d
a
.
Al mismo tiempo que est pasando
todo esto, la CPU 001 quiere escribir una
palabra en el mdulo de memoria 001. Aqu
ocurre un proceso anlogo, y el mensaje se
encamina por las salidas superior, superior
e inferior, respectivamente, camino que se
ha marcado con la letra b. Cuando el
mensaje llega, su campo Mdulo es 001, lo
que representa el camino que tom. Puesto
que estas dos solicitudes no usan los mismos
conmutadores, lneas ni mdulos de
memoria, pueden ocurrir en paralelo.
Considere ahora qu sucedera si
simultneamente la CPU 000 quisiera
acceder al m- dulo de memoria 000. Su
solicitud entrara en conflicto con la
solicitud de la CPU 001 en el conmutador
3A. Una de ellas tendra que esperar. A
diferencia del conmutador de barras
cruzadas, la red omega es una red
bloqueadora. No todos los conjuntos de
solicitudes
se
pueden
procesar
simultneamente. Puede haber conflictos
por el uso de un alambre o por el uso de un
conmutador, y tambin entre solicitudes a
la memoria y respuestas de la memoria.
Obviamente es deseable repartir las
referencias a la memoria de manera
uniforme entre
los mdulos. Una tcnica comn consiste en
usar los bits de orden bajo como nmero de
mdulo. Considere, por ejemplo, un espacio
de direcciones orientado a bytes para una
compu- tadora que por lo regular accede a
palabras de 32 bits. Los dos bits de orden
bajo normalmen- te son 00, pero los
siguientes 3 bits tienen una distribucin
uniforme. Si se usan estos 3 bits como
nmero de mdulo, las palabras con
direcciones consecutivas
estarn en
mdulos con- secutivos. Un sistema de
memoria en el que palabras consecutivas
estn en diferentes mdulos se describe
como
intercalado.
Las
memorias
intercaladas maximizan el paralelismo
porque casi todas las referencias a la
memoria son a palabras consecutivas.
Tambin es posi- ble disear redes de
conmutacin que sean no bloqueadoras y
que ofrezcan varios caminos de cada CPU a
cada mdulo de memoria, a fin de distribuir
el trfico mejor.
8
.
3
.
5
M
u
l
t
i
p
r
o
c
e
s
a
d
o
r
e
s
N
U
M
A
A estas alturas debe ser evidente que los
multiprocesadores UMA de un solo bus
general- mente estn limitados a unas
cuantas
docenas de CPU, y los
multiprocesadores de barras cruzadas o
conmutados necesitan mucho hardware
(costoso) y no son mucho ms grandes. Si
se quiere llegar a_ ms de 100 CPU, algo
tiene que ceder. Por lo regular, lo que cede
es la idea de que todos los mdulos de
ARQUITECTURAS DE
PARALELAS
MULTIPROCESADORES
SEC. 8 . .'
CON MEMORIA COMPARTIDA
575
Por lo regular existe un proceso demonio
llamado
explorador de pginas que se
ejecuta cada cierto nmero de segundos. Su
trabajo consiste en examinar las estadsticas
de utiliza- cin y cambiar de lugar las
pginas en un intento por mejorar el
desempeo. Si una pgina parece estar en el
lugar equivocado, el explorador de pginas
anula su correspondencia con la memoria de
modo que la siguiente referencia a ella cause
un fallo de pgina. Cuando ocurra el fallo,
se tomar una decisin acerca de dnde
debe colocarse la pgina, posiblemente en
una memoria distinta de aquella en la que
estaba antes. Para evitar la hiperpaginacin,
gene- ralmente hay una regla que dice que,
una vez que una pgina se coloca, no
podr cambiar- se de lugar durante un
tiempo l'lT. Se han estudiado diversos
algoritmos, pero la conclusin es de que
ningn algoritmo
tiene un desempeo
ptimo en todas las circunstancias (LaRowe
y Ellis, 1991 ).
CPU Memoria
CPU Memoria
CPU
Mem
oria
M
M
U
Bu
del
s
C
P
U
M
e
m
o
r
i
a
La coherencia
de memoria est
garantizada en una mquina NC-NUMA
porque no se usan cachs. Cada palabra de
memoria reside en una y slo una localidad,
por lo que no hay peligro de que una copia
tenga datos obsoletos:
no hay copias.
Desde luego, ahora es muy importante cul
pgina est en cul memoria porque el
menoscabo en el desempeo debido a que
est en el lugar equivocado es muy alto. Por
ello, las mquinas NC-NUMA utilizan software complejo para colocar las pginas de
modo que se maximice el desempeo.
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP. 8
MULTIPROCESADORES
SEC. 8.3
CON MEMORIA COMPARTIDA
576
Nod
oO
C
P
U
M
e
m
ori
a
Nodo 1
577
N
o
CPU
Memo
ria
C
P
Re
d
de
int
er
co
ne
xi
n
(a)
21-1
Bits
8
6
18
1.76%,
que generalmente
es aceptable
(aunque tiene que ser memoria de alta
velocidad, Jo que aumenta su costo). Aun con
lneas de cach de 32 bytes el gasto extra
sera de slo un 4%. Con lneas de cach de
128 bytes, el gasto extra sera de menos del
1 %.
Una limitacin obvia de este diseo es
que una lnea se puede colocar en cach
slo en
un nodo. Para poder colocar lneas en
cach en varios
nodos necesitaramos
alguna forma de localizarlas a todas, por
ejemplo para invalidarlas
o actualizarlas
cuando se efecta una escritura. Hay varias
opciones que permiten colocar en cach
en varios nodos al mismo tiempo.
Una posibilidad es dar a cada entrada de
directorio k campos para especificar otros
nodos,
lo que permite a cada lnea colocarse en
cach en hasta k nodos. Una segunda
posibilidad es
sustituir
el nmero de nodo de nuestro
sencillo diseo por un mapa de bits, con
un bit por nodo. Con esta opcin no hay
lmite para el nmero de posibles copias,
pero el gasto extra aumenta sustancialmente.
Tener un directorio
cada lnea de cach
Nodo
B
l
o
q
u
e
"
"
(b)
4 1
3
2
1
o
(
c
bytes
bits)Una
implica
un posibilidad
gasto extra de
ms
del(512
50%.
tercera
es
mantener
578
ARQUTTFCTURAS
COMPUTADORAS
DE
PARALELAS
CAP. 8
SLC ~.\
CON
l\JEl'vlORIA
MLLTJPROCl:::SADORES
COMPARTIDA
579
El espacio de direcciones total disponible
en el prototipo es de 256 MB. dividido en
16 regiones ele 16 MB cada una. La memoria
global del cmulo O contiene las direcciones()
a
l 6M. La memoria
global
del cmulo 1
contiene las direcciones
l 6M a 32M. etc.
La memoria se coloca en cach y se transfiere
en unidades de 16 bytes (lneas). de modo
que cada cmulo tiene 1 M lneas de memoria
dentro de su espacio ele direcciones.
Cada cmulo tiene un directorio que
se mantiene al tanto de cules cmulos
tienen ac- tualmente copias de sus lneas.
Puesto que cada cmulo posee 1 M lneas
ele memoria. tiene
1 M entradas en su directorio, una por lnea.
Cada entrada contiene un mapa de bits con
l15
c
=
.
12
(a)
0123456789
15
Directorio
.
den espiarse.
m
e
m
o
ri
a.
NO EN CACH
- La nica copia de la
1.
2.
C
Cmulo
11 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1
~~E~~~~~~~g~~
co
mp
a
111
111
111
111
111
=
COMPUTADORAS
CAP. 8
MODIFICADA - La memoria es
slo una cach contiene Ja
radicada aqui,
580
lnea.
Bloque
incorrecta;
~
~
~
;,
~
~:
del
3.
Estado
ARQUITECTURAS DE
PARALELAS
Los protocolos
DASH se basan en
propiedad e invalidacin. En cada instante,
cada lnea de cach tiene un dueo nico.
En el caso de lneas NO EN CACH o
COMPARTIDAS, el cmulo base de la
lnea es el dueo. En el caso de lneas
MODIFICADAS, el cmulo que contiene
la nica copia es el dueo. Para escribir
en una lnea COMPARTIDAprimero es
necesario encontrar e invalidar todas las
copias existentes. Es aqu donde entran los
directorios.
Para ver cmo funciona
este
mecanismo,
consideremos
primero la
forma en que una CPU lee una palabra de
memoria. Primero examina
su propio
cach. Si la cach no tiene la palabra, se
emite una solicitud por el bus de cmulo
local para ver si otra CPU del cmulo
SEC. 8.3
CON
MEMORIA
MULTIPROCESADORES
COMPARTIDA
581
E
l
m
u
l
t
i
p
r
o
c
e
s
a
d
o
r
S
e
q
u
e
n
t
N
U
M
A
Q
Aunque la mquina DASH tuvo una
influencia notable, nunca fue un producto
comercial. En vista de la importancia que
estn adquiriendo los multiprocesadores
CC-NUMA,
vale la pena examinar
tambin un producto comercial. Como
ejemplo usaremos la mquina Sequent
NUMA-Q 2000 porque utiliza un
protocolo de coherencia de cachs
interesante e importante llamado interfaz
coherente escalable (SCI,
Scalable
Coherent Interface). Este protocolo se
estandariz como IEEE 1596 y se usa
tambin en varias otras mquinas CCNUMA.
a
e
n
l
a
f
i
g
u
r
a
8
3
2
.
i
l
u
s
t
r
Tarjeta Quad
con
4 Pentium Pro y
hasta
4 GBde RAM
enva
un
paquete
al
cmulo base.
Aqu
podemos
distinguir
tres casos. Si
la lnea est
NO
EN
CACH, se
marca como
MODIFICAD
A y se enva
al solicitante.
Si la lnea
est
COMPARTIDA, todas
las copias se
invalidan y
luego
se
sigue
el
procedimient
o para NO
EN CACH.
Si la
est
lnea
MODIFICADA, la
solicitud se remite
al cmulo remoto
que actualmente
es dueo de la
lnea
(si
es
necesario).
Este
cmulo satisface
la solicitud y
luego invalida su
p
r
o
p
i
a
c
o
p
i
a
.
,..
T
a
r
j
e
t
a
Bomba de datos
RAM cach de 32
MB
1
0
Mantener la consistencia de la
memoria en DASH es relativamente
complejo y lento. Un solo acceso a la
memoria podra requerir el envo de un
nmero considerable de paquetes. Adems,
a fin de mantener la consistencia de la
memoria, el acceso por lo regular no puede
llevarse a cabo antes de que se haya
reconocido la recepcin de todos los
paquetes, lo que puede tener un efecto
notable sobre el desempeo. Para superar
estos problemas, DASH utiliza diversas
tcnicas especiales, como dos conjuntos de
enlaces intercmulos, escrituras por filas
de procesamiento y el uso de consistencia
de liberacin en lugar de consistencia
secuencial como modelo de memoria.
582
COMPUTADORAS
ARQUITECTURAS
PARAl,EL\S
DE
CAP. 8
contiene 32 M 8 de cach,
un directorio
que se mantiene al tanto de lo que est en
la cach, una interfaz de espionaje con el
bus local de la tarjeta quad. y un chip a la
medida llamado bomba
de datos que
conecta la tarjeta IQ-Link con otras tarjetas
IQ-Link. Bsicamente,
el chip "bombea"
datos del lado de la entrada al lado de la
salida. quedndose con los datos que van
dirigidos a su nodo y dejando pasar los
dems datos sin modificacin.
Juntas. todas las tarjetas
IQ-Link
forman un anillo, como se muestra en la
figura 8-32. El protocolo SCJ mantiene la
coherencia
de todas las cachs de tarjeta
IQ-Link
usando
el
anillo; no tiene
conocimiento del protocolo MES[ que se
usa para mantener la coherencia entre las
cuatro CPU y la cach de 32 MB en cada
nodo, as que este diseo tiene dos niveles
RAM
CPU
Figura 8-32. El
multiprocesador
NUMA-Q.
El tamao del sistema se expande
ms all de cuatro CPU insertando una
tarjeta de controlador de red en una ranura
de la tarjeta quad diseada para
controladores de red. Dicha tarjeta, llamada
tarjeta IQ-Link, es el adhesivo que
convierte todas las tarjetas quad en un solo
multiprocesador. Su labor primaria es
implementar el protocolo SCI. Cada
tarjeta IQ-Link
de protocolo
DASH.
de coherencia,
igual
que
MULTIPROCESADORES
SEC. 8J
CON MEMORIA COMPARTl!)A
583
Adems de la tabla de memoria local,
cada tarjeta IQ-Link tiene un directorio con
una entrada por cada lnea de cach que tiene
actualmente. Puesto que la cach tiene una
capacidad de 32 MB y las lneas de cach son
de 64 bytes. cada tarjeta IQ-Link puede
contener hasta 21'' lneas de cach. As pues,
cada directorio tiene 21'' entradas, una para
cada lnea de cach.
Si una lnea est en una sola cach, la
tabla de memoria local del nodo base
apunta al
nodo en el que se encuentra la lnea. Si
despus la lnea se coloca en cach en un
segundo nodo. el protocolo SCl har que el
directorio base apunte a la nueva entrada.
que a su vez apunta a la entrada vieja. De
este modo se forma una lista de dos
elementos. A medida que nuevos nodos
comparten la misma lnea. se agregan, por
turno. a la cabeza de la lista. Todos los nodos
que contienen la lnea de cach se enlazan
as en una cadena arbitrariamente larga.
Este encadenamiento se ilustra en la figura
8-33 para el caso de una lnea de cach que
se encuen- tra en los nodos 4, 9 y 22.
T
a
b
l
a
d
e
m
e
m
o
r
i
a
l
o
c
a
l
e
n
e
l
n
o
d
o
b
a
s
e
Bits 6
7
13
6
Adel.
Atrs
Atrs Edo. Etiq.
Edo. Etiq.
Adel.
Atrs Edo.
Etiq.
Adel.
219_11
J
1
1
1
1
1
memoria base.
Sin embargo, las lneas de cach a
menudo se encuentran en una o
ms caches remotas,
Dire
Direc
t
c
t
o
r
i
o
d
e
c
a
c
h
d
e
l
Direct
or
io
d
e
c
a
ch
d
el
n
o
d
o
2
2
n
o
d
o
584
COMPUTADORAS
CAP. 8
ARQUITECTURAS DE
PARALELAS
SEC. 8.3
MULTIPROCESADORESCON MEMORIA
585
COMPARTIDA
ARQUITECTURAS DE
PARALELi-\S
n
r
e
q
u
i
e
r
e
h
a
r
d
w
a
r
e
a
d
i
c
i
o
n
a
l
.
Una solucin
un poco distinta sera
mapear pginas enteras pero sin exigir
que estn presentes todas las lneas de cach.
En esta solucin. el hardware necesitara
un mapa de bits por cada pgina, con un bit
por cada lnea de cach para indicar la
presencia o ausencia de esa lnea. En este
diseo. llamado COMA simple, si una
lnea de cach est presente, deber estar
en la posicin correcta de su pgina, pero si
no est presente, cualquier intento de usarla
causar una trampa que permitir al
software ir a buscarla y traerla a la memoria.
Esto nos lleva a encontrar lneas que
son realmente remotas. Una solucin es
asignar a cada pgina una mquina base en
trminos de dnde est su entrada de
directorio. pero no dnde estn los datos.
As, puede enviarse un mensaje a la
mquina base para al menos localizar Ja
lnea de cach. Otros esquemas implican
organizar la memoria en forma de rbol
y
b
u
s
c
a
r
h
a
c
i
a
a
r
r
i
b
a
h
a
s
t
a
e
n
c
o
n
t
r
a
r
l
a
l
n
e
a
.
El segundo problema
de la lista
anterior tiene que ver con no eliminar la
ltima copia. Como en CC-NUMA, una
lnea de cach podra estar en varios
nodos al mismo tiempo. Cuando ocurre un
fallo de cach, se debe traer una lnea, lo
que normalmente
implica
que hay que
desalojar otra lnea. ,Qu sucede si la lnea
escogida para el desalojo
es la ltima
copia? En tal caso, no podernos eliminarla.
Una solucin es regresar al directorio
y verificar si hay otras copias. Si las
hay, la lnea
puede desalojarse sin peligro; si no, hay
que pasarla a otro lugar. Otra solucin
consiste en marcar una copia de cada lnea
de cach corno copia maestra y nunca
desalojarla. Esta solu- cin evita tener que
consultar el directorio. Tomando todo en
cuenta, COMA promete alcan- zar un mejor
desempeo que CC-NUMA, pero no se han
construido muchas mquinas COMA, as
que se necesita ms experiencia. Las dos
mquinas COMA que se han construido
hasta ahora son la KSR-1 (Burkhardt et al.,
1992) y la Data Diffusion Machi ne
(Hagersten et al.,
8.4
MULTICOM
PUTADORA
S DE
TRANSFER
ENCIA DE
MENSAJES
Como vimos en la figura 8-14, los dos
tipos de procesadores
paralelos
MlMD
son
los multiprocesadores
y las
multicomputadoras. En la seccin anterior
estudiamos los mul- tiprocesadores. Vimos
que, desde la perspectiva
del sistema
operativo,
los multiprocesadores parecen
tener una memoria compartida a la que se
accede con instrucciones LOAD y STO RE
SEC. X.4
DE TRANSFERENCIA
ML.'LTICOMPUTADOR/\S
DE MENSAJES
587
ordinarias. Corno vimos, esta memoria
compartida se puede implementar de
varias maneras, que incluyen espiar buses.
conmutadores de barras cruzadas. redes de
conmutacin mulrietapas.
y diversos
esquemas
basados
en
directorios.
No obstante,
los programas
escritos para un
multiprocesador pueden accesar a cualquier
localidad de memoria sin saber nada acerca
de la topologa interna ni del esquema de
implementacin.
Esta ilusin es lo que hace
a los multipro- cesadores tan atractivos.
Por otra parte, los multiprocesadores
tambin tienen sus limitaciones, y sta es
la razn por
la que las multicornputadoras
tambin son
importantes. En primer lugar, los
multiprocesadores no pueden escalarse a
tamaos muy grandes. Ya vimos la enorme
cantidad de hardware que Sun tuvo que usar
para escalar el Enterprise 10000 a 64
CPU. La Sequent NUMA-Q llega a 256
CPU, pero el precio que se paga es un
tiempo de acceso a memoria no uniforme.
En contraste,
ahora estudiaremos dos
multicomputadoras que tienen 2048 y
9152 CPU, respectivamente. Pasarn aos
antes de que alguien construya un
multiprocesador comercial con 9000
nodos, y para entonces ya se estarn usando
rnulticomputadoras de l 00,000 nodos.
Adems, Ja contencin por la memoria
en un multiprocesador puede afectar
mucho el
desempeo.
Si 100 CPU estn tratando
de leer y escribir las mismas variables
constantemente. la lucha por las distintas
memorias,
buses y directorios
puede perjudicar
enormemente el
d
e
s
e
m
p
e
o
.
Como consecuencia
de stos y otros
factores, ha surgido un gran inters por
construir y usar computadoras paralelas en
las que cada CPU tiene su propia memoria
privada, no acce- sible directamente
para
ninguna
otra CPU.
stas
son
las
multicomputadoras. Los programas en CPU
de multicomputadoras
interactan
empleando
primitivas como send
y
receive
para transferir
explcitamente
mensajes,
porque no pueden acceder
directamente a la memoria de otra CPU
con instrucciones
LOAD y STORE. Esta
diferencia cambia totalmente el modelo
d
e
p
r
o
g
r
a
m
a
c
i
n
.
Cada nodo de una multicornputadora
consiste en una o unas cuantas CPU, algo
de RAM, (tal vez compartida entre las CPU
de ese nodo nicamente), un disco u otros
dispositivos de E/S, y un procesador de
comunicaciones. Los procesadores de
comunicaciones estn conec- tados por una
red de interconexin de alta velocidad de
los tipos que vimos en la seccin
8. 1 .2. Se usan muchas
topologas.
esquemas de conmutacin
y algoritmos
de enrutarniento
distintos.
Lo
que
todas
las
multicornputadoras
tienen en comn es
que cuando
un programa de aplicacin
ejecuta la primitiva send, se avisa al
procesador
de comunicaciones
y ste
transmite un bloque de datos de usuario a
la mquina de destino (tal vez despus de
pedir Y obtener permiso). En la figura 8-34
se muestra una multicomputadora
genrica.
Hay rnulticornputadoras de todas las
formas y tamaos, por lo que es difcil dar
una taxonoma ntida. No obstante, destacan
paralelos
(MPP)
La primera categora consiste
en los
procesadores
masivamente
paralelos
(MPP, Massively Parallel Processors), que
son enormes supercornputadoras
que
cuestan muchos millones de dlares. stos
se usan en la ciencia,
ingeniera
y la
industria para clculos de gran envergadu-
8.4.1
Procesador
es
masivamen
te
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP. 8
N
o
CP
U
Mem
oria
Di
sc
o
Di
sE
/
E
/
S
MULTICOMPUTADORAS
DE TRANSFERENCIA DE
MENSAJES
588
P
r
o
c
e
s
a
d
o
r
T
3
E
La familia Cray T3E, sucesora de la T3D,
incluye
las
ms
modernas
supercomputadoras de una lnea que se
remonta a la innovadora 6600 de
Seymour Cray a mediados de los aos
sesenta. Los diversos modelos, el T3E,
T3E-900 y T3E-1200, tienen idntica
arquitectura, y slo difieren en su precio
y su desempeo (por ejemplo, 600, 900 o
1200 megaFLOPs por
d
e
c
o
m
u
n
i
c
a
c
i
o
n
e
s
R
e
d
d
e
i
n
t
e
r
c
o
n
e
x
i
d
e
a
l
t
o
d
e
s
e
m
p
e
F
i
g
u
r
a
8
3
4
.
M
u
l
t
i
c
o
m
p
u
t
a
d
o
r
a
g
e
n
r
i
c
a
.
ARQUITECTURAS
PARALEI .AS
Red
Disco
Cinta
Giga
Ring
Co
nc
ha
Nod
o
T
o
r
oi
d
e
3
0
d
pl
e
x
Figura 8-35.
El T3E de
Cray
Research.
DE
MULTICOMPUTADORAS
DE TRANSFERENCIA DE
MENSAJES
S
l Laboratory en
a
diciembre de
n
1996) se llama
d
Option
Red
i
(opcin roja), y
a
las
dos
siN
guientes
se
a
llaman Option
ti
Blue ( 1999) y
o
Option White (
n
1900),
a
respectivamente.
con otros nodos: sus vecinos
al norte,
oriente, sur, poniente, arriba y abajo. La
tasa de trans- ferencia por estos enlaces es
de 480 MB/s en cada direccin.
Los nodos tambin estn conectados
por uno o ms GigaRings, el subsistema de
E/S de gran ancho de banda conmutado por
paquetes.
Los nodos
lo usan para
comunicarse entre s y con las redes, discos
y otros perifricos enviando paquetes de
hasta 256 bytes por l. Cada GigaRing
consiste
en
un
par de anillos
contrarrotatorios
con una anchura de 32
bits que conectan los nodos de CPU con
nodos de E/S especiales.
Estos ltimos
contienen ranuras para insertar tarjetas de
red (por ejemplo, HIPPI, Ethernet, ATM,
FDDI o canal de fibra), discos, cintas y
otros dispositivos.
Como puede haber hasta 2048 nodos
en un sistema T3E, ocurren fallos con
cierta regularidad. Para resol ver este problema, por
cada 128 nodos de usuario,
el sistema
contiene un nodo de repuesto. Los nodos
muertos pueden sustituirse por nodos de
repuesto mientras est funcionando
el
sistema, sin necesidad de un rearranque.
Adems de los nodos de usuario y los
nodos de repuesto,
algunos
nodos se
dedican a ejecutar servidores de sistema
operativo porque los nodos de usuario no
ejecutan
el sistema operativo completo,
sino slo un ncleo bsico. El sistema
operativo que se usa es una versin de UNIX.
E
l
I
En
el resto de esta seccin nos
concentraremos en la primera de las
mquinas de teraflops, la Option Red.
La mquina Option Red consiste en
4608 nodos dispuestos en una malla
tridimensional. Las CPU estn instaladas
en dos tipos de tarjetas. Las tarjetas
kestrel se usan como nodos de
cmputo, y las tarjetas eagle (guila) se
usan como nodos de servicio, disco, red
y arranque.
n
t
e
l
/
S
a
n
d
i
a
O
p
t
i
o
n
R
e
d
Las computadoras del extremo superior y
las fuerzas armadas han estado entrelazadas
en Estados Unidos desde 1943, cuando el
ejrcito contrat a John Mauchly para
construir ENIAC, la primera computadora
electrnica moderna. La relacin entre las
fuerzas armadas estado-
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
CAP.8
Bu
s
loc
al
de
64
bits
Bu
s
loc
al
de
64
bit
s
T
a
MULTICOMPUTADORAS
DE TRANSFERENCIA DE
MENSAJES
Histricamente, el elemento
clave que hizo especiales a los
MPP fue su interconexin de alta
velocidad, pero la reciente
aparicin en el mercado de
interconexiones de alta velocidad
que se venden en tiendas ha
comenzado a cerrar la brecha. Por
ejemplo, el grupo de investigacin del autor ha ensamblado un
COW llamado DAS que consiste
en 128 nodos, cada uno de los
cuales contiene un Pentium Pro
de 200 MHz y 128 MB de
RAM (vea http:// www.cs.vu.nlz-bal/das.html). Los nodos estn
conectados por un toroide
bidimensional con enlaces que
pueden transferir 160 MB/s en
ambas direcciones a la vez. Estas
especificaciones no son muy
distintas de las de Option Red: los
5
9
enlaces
tienen la
(a)
(b)
m
iL
a
594
8
.
4
.
3
P
l
a
n
i
f
i
c
a
c
i
n
Una pregunta obvia es: "Qu diferencia
hay entre un COW descentralizado y una
LAN llena de mquinas de usuario?" La
respuesta tiene que ver con el software y la
utilizacin, no con el hardware. En una
LAN, los usuarios
tienen mquinas
personales y las usan para todo su trabajo.
En contraste, un COW descentralizado es
un recurso compartido al cual los usuarios
S
MULTICOMPUTADORAS
DE TRANSFERENCIA DE
MENSAJES
particular,
muchos
fabricantes
de
computadoras tambin entienden que
pueden construir COW con componentes
que se venden comercialmente y venderlos
como sistemas completos. El resultado ha
sido una rpida expansin del mercado.
R
e
d
e
s
d
e
i
n
t
e
r
c
o
n
e
x
i
n
c
o
m
e
r
c
i
a
l
e
s
Puesto que los COW tienen xito o
fracasan dependiendo de la cantidad de las
tarjetas de red insertables que pueden
obtenerse comercialmente, vale la pena
examinar algunas de las tec- nologas que
estn disponibles. Nuestro primer ejemplo
es Ethernet, que viene en tres versio- nes,
lenta, de media velocidad y rpida (o, ms
correctamente, Ethernet clsica, Ethernet
rpida y Ethernet de gigabits). Estos tres
tipos operan a 10, 100 y 1000 Mbps (l.25,
12.5 y
Grupo de CPU
Grupo de CPU
G
r
u
p
o
o
4 5
d
e
o
a.
C
P
U
E
Q)
F
o
2 3
4 5
6 7
CPU
CPU
(a)
(b)
(e)
Figura
8-37.(a)
Planificacin
de
COW.
FIFO. (b)
Sinun
bloqueo
de cabeza
de
lnea. (e) Mosaico. Las reas
sombreadas indican CPU ociosas.
Un mejor algoritmo de
planificacin evita el bloqueo de cabeza
de lnea pasando por alto trabajos que no
encajan y escogiendo el primero que s
quepa. Cada vez que un trabajo termi-
~
=----'
Tarjet
a de
lnea
Paquete
hacia
Paquete
hacia
el
orie
nte
el
poni
ente
(a
9 9 l
E
t
h
e
r
n
e
t
(
b
)
ARQUITECTURAS DE
COMPUTADORAS PARALELAS
C
A
SEC. 8.4
MULTICOMPUTADORAS DE
TRANSFERENCIA DE MENSAJES
597
Cuando un paquete llega a una tarjeta
de lnea, se almacena temporalmente
ah hasta que
la tarjeta solicita y le es concedido acceso
al plano posterior, el cual funciona de
forma pare- cida a un bus. Una vez que el
paquete se ha transferido a la tarjeta de
lnea a la que est conectada la mquina
de destino, se le puede enviar ah. Si cada
tarjeta de lnea tiene slo una Ethernet, y
sta slo tiene una mquina, ya no
ocurren colisiones, aunque sigue siendo
posi- ble perder un paquete por
desbordamiento de un buffer en una
tarjeta de lnea. Si se usa como
interconexin de multicomputadora, la
Ethernet de gigabits conmutada, con una
mquina por Ethernet y un plano posterior
muy rpido, tiene un desempeo potencial
(al menos en trmi- nos de ancho de
banda) de la cuarta parte del desempeo
circuitos virtuales.
C
P
U
Puerto
C
.c
u
.
.1
1
tr
to
v
1
rtu
a
l--i
1
11
2.
3.
SEC. 8.4
599
En la transferencia de mensajes no bloqueadora, se permite al transmisor continuar de
inmediato despus de efectuar la llamada. Lo nico que la biblioteca hace es pedir al
sistema
operativo que lleve a cabo la llamada despus, cuando tenga tiempo. El resultado es que el
transmisor prcticamente no se bloquea. La desventaja de este mtodo es que cuando el
trans- misor contina despus del send no puede reutilizar el buffer de mensajes, porque es
posible que el mensaje todava no se haya enviado. El transmisor necesita una forma de
averiguar si ya puede reutilizar el buffer. Una idea es hacer que le pregunte repetidamente al
sistema. La otra es recibir una interrupcin cuando el buffer est disponible. Ninguna de
estas cosas simplifica el software.
En las dos secciones que siguen examinaremos brevemente dos sistemas de transferencia de mensajes que se usan en muchas multicomputadoras: PVM y MPI. stos no son los
nicos, pero son los ms ampliamente utilizados. PVM es ms antiguo y fue el estndar de
facto durante aos, pero ahora MPI es el muchacho nuevo en el barrio y est retando al
campen reinante.
PVM - Mquina Virtual Paralela
PVM (Parallel Virtual Machine) es un sistema de transferencia de mensajes del dominio
pblico diseado inicialmente para ejecutarse en COW basadas en UNIX (Geist et al., 1994;
Sunderram, 1990). Posteriormente se le ha trasladado a muchas otras plataformas, incluidos
casi todos los MPP comerciales. Se trata de un sistema autosuficiente, que incluye gestin de
procesos y apoyo de E/S.
PVM consta de dos partes: una biblioteca que el usuario puede invocar y un proceso
demonio que se ejecuta todo el tiempo en cada mquina de la multicomputadora. Cuando se
inicia PVM, ste determina cules mquinas van a formar parte de su multicomputadora
600
CAP.8
desempacado. Si un receptor est preocupado por la posibilidad de bloquearse indefinidamente, puede invocar pvm_trecv, que bloquea al receptor durante cierto tiempo, pero si en ese
tiempo no llega un mensaje apropiado se desbloquea e informa del fracaso. Una opcin ms
es pvm_nrecv, que regresa inmediatamente, sea con un mensaje o con una indicacin de que
no ha llegado ningn mensaje. Esta llamada puede efectuarse una y otra vez para ver si han
llegado mensajes.
Adems de estas primitivas para mensajes de punto a punto, PVM tambin maneja difusin (pvm_bcast) y multidifusin (pvm_mcast). La primera transmite a todos los procesos de
un grupo; la segunda transmite a una lista especfica de procesos.
La sincronizacin entre procesos se efecta usando pvm_barrier. Cuando un proceso
invoca este procedimiento, se bloquea hasta que cierto nmero de otros procesos han llegado
tambin a la barrera y han efectuado la misma llamada. Hay otras llamadas PVM para
gestin de anfitriones, gestin de grupos, gestin de buffers, sealizacin, verificacin de
estado y funciones diversas. En sntesis, PVM es un paquete sencillo, directo, fcil de usar,
disponible en casi todas las computadoras paralelas, todo lo cual explica su popularidad.
virtual leyendo un archivo de configuracin. En cada una de esas mquinas se inicia un demonio PVM. Es posible aadir y eliminar mquinas emitiendo comandos en la consola
PVM.
PVM permite iniciar n procesos paralelos con el comando de consola
spawn -count n prog
Cada proceso ejecutar prog. PVM decide dnde colocar los procesos, pero un usuario
pue- de supeditar esa decisin con argumentos del comando spawn. Tambin se pueden
iniciar procesos desde un proceso en ejecucin invocando Pvm_spawn. Los procesos
pueden orga- nizarse en grupos cuya composicin cambia dinmicamente durante la
ejecucin.
La comunicacin en PVM se maneja con primitivas de transferencia de mensajes explcitas y de tal manera que se puedan comunicar mquinas que usen diferentes representaciones de los nmeros. Cada proceso PVM tiene un buffer de envo activo y un buffer de
recepcin activo en cualquier instante. Para enviar un mensaje, un proceso invoca procedimientos de biblioteca para empacar valores en el buffer de envo activo en un formato que
se describe a s mismo, de modo que el receptor pueda reconocerlos y convertirlos a su
formato nativo.
Una vez que se ha armado el mensaje, el transmisor invoca el procedimiento de biblioteca pvm_send, que es una transmisin bloqueadora. El receptor tiene varias opciones. La
ms sencilla es pvm_recv, que bloquea al receptor hasta que llega un mensaje apropiado.
Cuando la llamada regresa el mensaje est en el buffer de recepcin activo, y puede
desempacarse Y convertirse en valores apropiados para su mquina utilizando una serie de
procedimientos de
nal de MPI, ahora llamada MPI-1, fue aumentada por MPI-2 en 1997.A continuacin presen- taremos
una introduccin muy superficial a MPl-1, y luego hablaremos un poco acerca de lo que se aadi en
MPI-2. Si desea ms informacin acerca de MPI, vea (Gropp et al., 1994; y Snir et al., 1996).
MPI-1 no se ocupa de la creacin o gestin de procesos, como hace PVM. Corresponde al usuario
crear procesos utilizando llamadas al sistema locales. Una vez creados, los proce- sos se acomodan en
grupos estticos, inmutables. Es con estos grupos que MPI trabaja.
MPI se basa en cuatro conceptos ortogonales: comunicadores, tipos de datos de mensajes,
operaciones de comunicacin y topologas virtuales. Un comunicador es un grupo de proce- sos ms
un contexto. Un contexto es un rtulo que identifica algo, como una fase de ejecu- cin. Cuando se
envan y reciben mensajes, el contexto puede servir para evitar que mensajes no relacionados entre s se
interfieran.
Los mensajes se tipifican, y se reconocen muchos tipos de datos, que incluyen caracte- res,
enteros, cortos, normales y largos, nmeros de punto flotante de precisin sencilla y doble, etc. Tambin
es posible construir otros tipos derivados de stos.
MPI maneja un amplio conjunto de operaciones de comunicacin. La ms bsica sirve para
enviar mensajes como sigue:
MPl_Send(buffer, cuenta, tipo_datos, destino, etiqueta, comunicador)
Esta llamada enva al destino un buffer con cuenta de elementos del tipo de datos especifica- dos. El
campo etiqueta rotula el mensaje para que el receptor pueda decir que slo quiere recibir un mensaje
con esa etiqueta. El ltimo campo indica en cul grupo de procesos est el destino
1601
SEC. 8.4
(el campo destino slo es un ndice dentro de la lista de procesos para el grupo
especificado). La llamada correspondiente para recibir un mensaje es
MPl_Recv(&buffer, cuenta, tipo_datos, origen, etiqueta, comunicador,
&estado)
que anuncia que el receptor est buscando un mensaje de cierto tipo proveniente
de cierto origen, con cierta etiqueta.
MPI reconoce cuatro modos de comunicacin bsicos. El modo l es
sincrnico, en el
que el transmisor no puede comenzar a transmitir hasta que el receptor haya
invocado a MPl_Recv. El modo 2 usa buffers, por lo que no aplica la restriccin
anterior. El modo 3 es estndar, que depende de la implementacin y puede ser
sincrnico o usar buffers. El modo 4 es "listo", en el que el transmisor asegura que
el receptor est disponible (como en el sincr- nico), pero no se comprueba que
sea cierto. Cada una de estas primitivas tiene una versin bloqueadora y una no
bloqueadora, as que hay ocho primitivas en total. La recepcin slo tiene dos
variantes: bloqueadora y no bloqueadora.
MPI maneja la comunicacin colectiva, incluidas la difusin, dispersin/reunin,
intercambio total, agregado y barrera. En todas las formas de comunicacin colectiva,
todos los procesos de un grupo deben emitir la llamada con argumentos
compatibles. Si no se hace esto ocurre un error. Una forma tpica de comunicacin
colectiva aplica a procesos organizados en forma de rbol, en el que los valores se
propagan hacia arriba, desde las hojas hasta la raz, sufriendo cierto procesamiento en cada
paso; por ejemplo obteniendo la sumatoria o el mximo de los valores.
El cuarto concepto bsico en MPI es la topologa virtual, que permite acomodar los
procesos en un rbol, anillo, cuadrcula, toroide u otras topologas. Un acomodo as permite
nombrar caminos de comunicacin y facilita la comunicacin.
MPI-2 aade procesos dinmicos, acceso a memorias remotas, comunicacin colectiva
no bloqueadora, apoyo para E/S escalable, procesamiento en tiempo real y muchas caractersticas nuevas que rebasan el alcance de este libro. En la comunidad cientfica prevalece
actualmente una lucha entre los partidarios de MPI y de PVM. El lado de PVM dice que
PVM es ms fcil de aprender y ms sencillo de usar. El lado de MPI dice que MPI hace ms
y tambin seala que es un estndar formal con un comit de estandarizacin y un
documento de definicin oficial. El lado de PVM dice que es cierto, y asegura que la falta de
una burocra- cia de estandarizacin con todas las de la ley no necesariamente es una
desventaja.
602
ARQUITECTURAS DE COMPUTADORASPARALELAS
CAP. 8
Sin embargo, las multicomputadoras no tienen memoria compartida en el nivel de arquitectura, lo que dio pie al desarrollo de sistemas de transferencia de mensajes como PVM y
MPI. A muchos programadores no les gusta este modelo y quisieran tener la ilusin de memoria compartida, aunque no est realmente ah. Si se puede lograr este objetivo se tendra
lo mejor de dos mundos: hardware grande de bajo costo (al menos por nodo) y facilidad
de
programacin. ste es el Santo Grial de la computacin en paralelo.
Muchos investigadores han llegado a la conclusin de que si bien no es fcil aumentar la
escala de la memoria compartida en el nivel de arquitectura, puede haber otras formas de alcanzar la misma meta. En la figura 8-3 vemos que hay otros niveles en el que puede
introducirse una memoria compartida. En las secciones que siguen veremos algunas formas
de introducir memoria compartida en el modelo de programacin de una multicomputadora
sin que est
presente en el nivel de hardware.
SEC. 8.4
603
000
00B
@]~
Memoria
CPU3
CPU 2
CPU O
(a)
Red
pgina y otro proceso en una CPU diferente est activamente escribiendo ms palabras en
la parte inferior de la pgina. Puesto que slo existe una copia de la pgina, sta tiene que
rebotarse de un lado al otro constantemente, situacin que se conoce como compartimiento
falso.
000
0~
CPUO
O] 00
00B
@]~
CPU 1
@]@]
CPU2
1
CPU3
1
(c)
(b)
000
0~
CPUO
1
O] 00
0~
CPU 1
1
00B
@]@]
@]~
CPU2
1
CPU3
1
604
ARQUITECTURAS
DE COMPUTADORAS
PARALELAS
CAP. 8
SEC. 8.4
MULTICOMPUTADORAS
DE TRANSFERENCIA
DE MENSAJES
605
("abe", 2, 5)
("matrix-1", 1,6, 3.14)
("familia", "es hermana", Carolina, Leonor)
Figura 8-41. Tres tuplas Linda.
que produce una tupla con cuatro campos, de los cuales el segundo y el tercero estn
determi- nados por los valores actuales de las variables i y j.
Las tuplas se recuperan del espacio de tuplas con la primitiva in. El direccionamiento
es por contenido, ms que por nombre o direccin. Los campos de in pueden ser expresiones
o parmetros formales. Considere, por ejemplo,
in("abc", 2, ? i);
Esta operacin examina el espacio de tuplas en busca de una tupla que consista en la cadena
"abe", el entero 2 y un tercer campo que contenga cualquier entero (suponiendo que i es un
entero). Si se encuentra, la tupla se saca del espacio de tuplas y se asigna a la variable i el
valor del tercer campo. La comparacin y la eliminacin son atmicas, as que si dos procesos ejecutan Ja misma operacin in simultneamente, slo uno de ellos tendr xito, a menos
que estn presentes dos o ms tuplas que coincidan. El espacio de tuplas podra incluso
contener varias copias de Ja misma tupla.
El algoritmo de comparacin que in usa es sencillo. Los campos de la primitiva in, llamados plantilla, se comparan (conceptualmente) con los campos correspondientes de cada
tupla del espacio de tuplas. Hay coincidencia si se cumplen las tres condiciones siguientes:
1.
2.
3.
Los parmetros formales, que se indican con un signo de interrogacin seguido de un nombre
o tipo de variable, no participan en Ja comparacin (excepto para verificar el tipo), aunque a
los que contienen un nombre de variable se les asigna un valor si la comparacin tiene xito.
Si ninguna de las tuplas presentes coincide, el proceso invocador se suspende hasta que
otro proceso inserta la tupla requerida; en ese momento el invocadorse revive
automticamente y recibe la nueva tupla. El hecho de que los procesos se bloquean y
desbloquean automtica- mente implica que si un proceso est a punto de producir una tupla
y otro est a punto de cap- turarla, no importa cul vaya primero.
Adems de out e in, Linda tiene una primitiva read, que es igual a in slo que no elimina
la tupla del espacio de tuplas. Tambin hay una primitiva eval que hace que sus parmetros se
evalen en paralelo y la tupla resultante se deposite en el espacio de tuplas. Este mecanismo
606
CAP.8
puede servir para realizar un clculo arbitrario. Es as como se crean procesos paralelos en
Linda.
Un paradigma de programacin comn en Linda es el modelo de trabajador repetido.
Este modelo se basa en la idea de un almacn de tareas (task bag) llena de trabajos que hay
que realizar. El proceso principal inicia ejecutando un ciclo que contiene
out("task-bag", job);
en el que se introduce en el espacio de tuplas una descripcin de trabajo distinta en cada
iteracin. Cada trabajador inicia obteniendo una tupla de descripcin de trabajo mediante
SEC. 8.4
607
se ejecuta el bloque de enunciados que le siguen. En la figura 8-42 se muestra un objeto pila
con dos operaciones, meter y sacar.
in("task-bag", ?job);
y luego lleva a cabo el trabajo; cuando termina, obtiene otro trabajo. Tambin es posible
colocar trabajos nuevos en el almacn de tareas durante la ejecucin. De esta forma tan sencilla, el trabajo se reparte dinmicamente entre los trabajadores y todos los trabajadores se
mantienen ocupados continuamente, con muy poco gasto extra.
Existen diversas implementaciones de Linda en sistemas de multicomputadora. En todos
ellos, un aspecto clave es cmo se distribuyen las tuplas entre las mquinas y cmo se les
puede localizar si es necesario. Diversas posibilidades incluyen difusin y directorios. El
copiado es otro aspecto importante. Estos puntos se tratan en (Bjornson, 1993).
Orca
begin
tope: O;
end;
# inicializacin
operaciones.
y dos
Una estrategia un tanto distinta para tener memoria compartida en el nivel de aplicaciones
en a multicomputadora es usar como unidades de compartimiento objetos con todas las
de la
un
ley, en lugar de slo tuplas. Los objetos consisten en un estado interno (oculto) ms mtodos
para operar sobre ese estado. Como no se permite al programador acceder al estado directamente, se abren muchas posibilidades para poder compartir entre mquinas que no tienen
una memoria fsica compartida.
Un sistema basado en objetos que da la ilusin de una memoria compartida en sistemas de multicomputadora es Orca (Bal, 1991; Bal et al., 1992; Bal y Tanenbaum, 1988).
Orca es un lenguaje de programacin tradicional (basado en Modula 2) al cual se han
aadido dos caractersticas nuevas: objetos y la capacidad para crear procesos nuevos. Un
objeto Orca es un tipo de datos abstracto, anlogo a un objeto en Java o un paquete en Ada.
El objeto encapsula estructuras de datos internas y mtodos escritos por el usuario, llamados operaciones. Los objetos son pasivos, es decir, no contienen enlaces a los que puedan
enviarse mensajes. En vez de ello, los procesos acceden a los datos internos de un objeto
invocando sus mtodos.
Cada mtodo Orca consiste en una lista de pares (guardia, bloque de enunciados). Un
ll)~
ir
,.,.~
~-
.~.-.:.
l~
guardia (guard) es una expresin booleana que no contiene efectos secundarios, o el guardia
vaco, que equivale al valor true (verdadero). Cuando se invoca una operacin, todos sus
guardias se evalan en un orden no especificado. Si todos ellos sonfalse, el proceso invocador espera hasta que uno de ellos se vuelve true. Cuando la evaluacin de un guardia da true,
Una vez definida una pila, es posible declarar variables de este tipo, como en
s, t: pila;
qu~ crea dos objetos pil.a e inicializa la variable tope de cada uno con O. Podemos meter la~~
variable entera k en la pila s con el enunciado
,.
s$push(k);
etctera. La operacin sacar tiene un guardia, por lo que un intento por sacar una variable
de(~
una pila vaca suspender al invocador hasta que otro proceso haya metido algo en la pila.
g,~
Orca cuenta con un enunciado fork para crear un proceso nuevo en un procesador espe- 7~ - ,..
r
cificado por el usuario. El nuevo proceso ejecuta el procedimiento nombrado en el
~ -
enunciado-, fork. Es posible pasar parmetros, que podran ser objetos, al nuevo proceso, y es
as como se distribuyen los objetos entre las mquinas. Por ejemplo, el enunciado
r~
~
~~-~:
...
~"'
.c.,,
...
,~ .. '
-: :,;
~
;..
. ~
608
CAP. 8
SEC. 8.5
RESUMEN
609
situados dentro de cada copia del objeto y enviar actualizaciones a cada copia con un
protocolo de multidifusin confiable.
Lo que hace a Globe un tanto ambicioso es su meta de abarcar mil millones de usuarios
y un billn de objetos (posiblemente mviles). Localizar objetos, administrarlos y controlar
el cambio de escala son aspectos cruciales. Globe logra esto con la ayuda de un marco general en el que cada objeto puede tener su propia estrategia de copiado, estrategia de seguridad,
etc. Esto evita el problema "unitalla" que se presenta en otros sistemas, sin perder la
facilidad de programacin que ofrece la memoria compartida.
Otros sistemas distribuidos de rea extensa son Globus (Foster y Kesselman, l 998a;
Foster y Kesselman, l 998b) y Legion (Grimshaw y Wulf, 1996; Grimshaw y Wulf, 1997),
pero stos no ofrecen la ilusin de memoria compartida como Globe.
8.5 RESUMEN
Las computadoras paralelas pueden dividirse en dos categoras principales: SIMD y
MIMD. Las mquinas SIMD ejecutan una instruccin a la vez en paralelo con muchos conjuntos de datos. Estas mquinas incluyen los procesadores de arreglos y las computadoras
vectoriales. Las mquinas MIMD, que dominan la computacin en paralelo, ejecutan diferentes programas en diferentes mquinas. Las mquinas MIMD se pueden dividir en multiprocesadores, que comparten la memoria primaria, y multicomputadoras, que no lo hacen. Ambos
tipos de sistemas consisten en CPU y mdulos de memoria conectados por diversas redes de
alta velocidad que transfieren paquetes de solicitud y respuesta entre las CPU y la memoria y
entre las CPU. Se usan muchas topologas, que incluyen cuadrculas, toroides, anillos e
hipercubos.
Para todos los multiprocesadores, uno de los aspectos clave es el modelo de consistencia
de la memoria que se maneja. Entre Jos modelos ms comunes estn la consistencia secuencial,
Ja consistencia de procesador, la consistencia dbil y la consistencia de liberacin. Se pueden
construir multiprocesadores en los que se espa el bus (usando el protocolo MESI, por ejemplo). Tambin son posibles diseos de barras cruzadas y redes de conmutacin. Otras posibilidades son las mquinas NUMA y COMA basadas en directorios.
Las multicomputadoras se pueden dividir a grandes rasgos en MPP y COW, aunque la
frontera es un tanto arbitraria. Los MPP son enormes sistemas comerciales, como el Cray
T3E y el Intel/Sandia Option Red, que usan interconexiones de alta velocidad patentadas. En
contraste, los COW se construyen con piezas comerciales, como Ethernet, ATM o Myrinet.
Las multicomputadoras a menudo se programan empleando un paquete de transferencia de mensajes como PVM o MPI. Ambos cuentan con llamadas de biblioteca para enviar
y recibir mensajes, con muchas opciones, y se ejecutan encima de sistemas operativos existentes.
Una estrategia alternativa es usar memoria compartida en el nivel de aplicaciones, como
un sistema DSM basado en pginas, el espacio de tuplas Linda o los objetos Orca o Globe.
DSM simula una memoria compartida en el nivel de pginas, lo que lo hace similar a una
mquina NUMA, excepto que las referencias remotas son mucho ms lentas. Linda, Orca Y
Globe proporcionan al usuario Ja ilusin de un modelo de memoria compartida (restringido)
empleando tuplas, objetos locales y objetos globales, respectivamente.
610
CAP. 8
PROBLEMAS
l. Una maana, la abeja reina de cierta colmena llama a todas sus abejas obreras y les dice que la
tarea del da es recolectar nctar de calndula. Entonces, las obreras vuelan en diferentes
direccio- nes en busca de calndulas. Se trata de un sistema SIMD o MIMD?
2. Para cada una de las topologas de la figura 8-4, calcule el dimetro de la red.
3. Para cada una de las topologas de la figura 8-4, determine el grado de tolerancia ante fallos, que
se define como el nmero mximo de enlaces que pueden perderse sin partir la red en dos.
4. Considere la topologa de toroide doble de la figura 8-4(f) pero expandida a un tamao de k x k.
Qu dimetro tiene la red? Sugerencia: considere k par y k impar por separado.
S. Una red de interconexin tiene la forma de un cubo de 8 x 8 x 8. Cada enlace tiene un ancho de
banda dplex de 1 GB/s. Qu ancho de banda bisectriz tiene esta red?
6. En una red de interconexin con forma de cuadrcula rectangular de cuatro conmutadores de anchura por tres conmutadores de altura, los paquetes que parten de la esquina superior izquierda y
se dirigen hacia la esquina inferior derecha pueden seguir cualquiera de varias rutas distintas.
Numere la fila superior de conmutadores del 1 al 4, la siguiente del 5 al 8, y la de abajo del 9 al
12. Enumere todas las rutas en las que los paquetes slo se muevan hacia la derecha o hacia
abajo, partiendo del 1 y terminando en el 12.
7. La ley de Amdahl limita la aceleracin que puede lograrse en una computadora paralela. Calcule,
en funcin de f, la aceleracin mxima posible a medida que el nmero de CPU se acerca al
infinito. Qu implicaciones tiene este lmite paraf = 0.1?
8. La figura 8-10 muestra cmo falla el aumento de escala con un bus pero tiene xito con una
cuadrcula. Suponiendo que cada bus o enlace tiene un ancho de banda b, calcule el ancho de
banda medio por CPU para cada uno de los cuatro casos. Luego aumente la escala de cada
sistema a 64 CPU y repita los clculos. Cul es el lmite a medida que el nmero de CPU se
acerca a infinito?
9.
10. Cuando hablamos de los modelos de consistencia de la memoria, dijimos que un modelo de consistencia es una especie de contrato entre el software y la memoria. Por qu se necesita
semejante contrato?
11. Un procesador de vectores como el Cray-I tiene unidades aritmticas con filas de procesamiento
de cuatro etapas. Cada etapa tarda I ns. Qu tiempo toma sumar dos vectores de 1024
elementos cada uno?
12. Considere un multiprocesador que usa un bus compartido. Qu sucede si dos procesadores tratan
de acceder a la memoria global en el mismo instante exactamente?
13.
Suponga que por razones tcnicas slo es posible que una cach espa vigile lneas de
direcciones, no lneas de datos. Esto afectara el protocolo de escritura a travs?
CAP. 8
PROBLEMAS
611
14. Como modelo sencillo de sistema multiprocesador basado en bus sin cachs, suponga que una
instruccin de cada cuatro hace una referencia a la memoria, y que una referencia a la memoria
ocupa el bus durante todo un tiempo de instruccin. Si el bus est ocupado, la CPU solicitante se
coloca en una cola FIFO. Qu tanto ms veloz ser un sistema de 64 CPU que uno de una sola
CPU?
15. El protocolo de coherencia de cachs MESI tiene cuatro estados. Otros protocolos de coherencia
de cachs de escritura de vuelta slo tienen tres estados. Cul de los cuatro estados MESI podra
sacrificarse, y cules seran las consecuencias de cada opcin? Si tuviera que escoger slo tres
estados, cules escogera?
16. Existen situaciones con el protocolo de coherencia de cachs MESI en las que una lnea de
cach est presente en la cach local pero para la cual de todos modos se necesita una transaccin
de bus? Explique.
17. Suponga que hay n CPU conectadas a un bus comn. La probabilidad de que cualquier CPU trate
de usar el bus en un ciclo dado es p. Qu posibilidades hay de que
a. El bus est ocioso (O solicitudes)?
b. Se haya hecho exactamente una solicitud?
c. Se haya hecho ms de una solicitud?
18. Las CPU del Sun Enterprise 10000 operan a 333 MHz, pero los buses de espionaje operan a slo
83.3 MHz. Con 64 CPU, es evidente que los buses nunca podrn manejar la carga. Sin embargo, la
mquina funciona. Explique por qu.
19. En el texto calculamos que la capacidad del conmutador de barras cruzadas era suficiente para
manejar 167 millones de espionajes por segundo cuando hay 16 tarjetas conectadas a l, aun tomando en cuenta el hecho de que la contencin reduce el ancho de banda prctico al 60% del
valor terico. Un Enterprise 10000 pequeo podra tener slo cuatro tarjetas (16 CPU). Este
sistema podra operar a toda velocidad?
20. Suponga que el alambre entre el conmutador 2A y el 3B de la red omega se rompe. Quin queda
aislado de quin?
21. Los puntos lgidos (localidades de memoria a las que se hace referencia muy a menudo) son
obviamente un problema importante en las redes de conmutacin multietapas. Tambin son un
problema en los sistemas basados en bus?
22. Una red de conmutacin omega conecta 4096 CPU RISC que tienen un tiempo de ciclo de 60 ns,
con 4096 mdulos de memoria infinitamente rpidos. Cada elemento de conmutacin tiene un
retraso de 5 ns. Cuntas ranuras de retraso necesita una instruccin LOAD?
23. Considere una mquina que usa una red de conmutacin omega como la que se muestra en la
figura 8-28. Suponga que el programa y la pila para el procesador i se guardan en el mdulo de
memoria i. Proponga un cambio pequeo a la topologa que mejore mucho el desempeo (la IBM
RP3 y la BBN Butterfly usan esa topologa modificada). Qu desventajas tiene la nueva
topologa en comparacin con el original?
24. En un multiprocesador NUMA, las referencias a la memoria local tardan 20 ns y las referencias
remotas tardan 120 ns. Cierto programa efecta un total de N referencias a la memoria durante su
ejecucin, de las cuales 1 % son a una pgina P. Esa pgina inicialmente es remota, y se requieren
C ns para copiarla localmente. En qu condiciones deber copiarse localmente la pgina si otros
procesadores no hacen mucho uso de ella?
612
CAP.8
25. Un sistema DASH tiene b bytes de memoria divididos entre n cmulos. Cada cmulo tiene p
procesadores. El tamao de lnea de cach es de e bytes. D una frmula para la cantidad total de
memoria dedicada a directorios (excluidos los dos bits de estado por entrada de directorio).
26. Considere un multiprocesador CC-NUMA como el de la figura 8-30 excepto que con 512 nodos
de 8 MB cada uno. Si las lneas de cach son de 64 bytes, determine el porcentaje de gasto extra
que representan los directorios. Aumentar el nmero de nodos aumenta el gasto extra, reduce el
gasto extra o no tiene ningn efecto?
27. Cul es la operacin de peor caso (la que ms tiempo consume) en SCI?
28. Un multiprocesador basado en SCI tiene 63 nodos, una lnea de cach de 32 bytes y un espacio de
direcciones total de 232 bytes. La cach en cada nodo es de 1 MB. Cuntos bytes se necesitan en
cada directorio de sta?
29. Proponga un cambio a la implementacin NUMA-Q 2000 que permita tener 64 nodos en lugar de
63. Por qu cree que Sequent haya escogido 63 en lugar de 64 como mximo?
30. En el texto se habl de tres variaciones de send: sincrnica, bloqueadora y no bloqueadora. Proponga un cuarto mtodo que sea similar a la versin bloqueadora, pero que tenga propiedades
un poco distintas. Cite una ventaja y una desventaja de su mtodo en comparacin con un send
bloqueador.
31. Considere una multicomputadora que opera en una red con difusin por hardware, como
Ethernet.
Por qu importa la proporcin de operaciones de lectura (que no actualizan variables de estado
internas) por cada operacin de escritura (que s actualiza variables de estado internas)?
32.
En los ocho captulos anteriores se trat un gran nmero de temas con distintos grados de
detalle. El propsito de este captulo es ayudar a los lectores interesados a profundizar en el
estudio de Ja organizacin de las computadoras. La seccin 9 .1 contiene una lista de lecturas
sugeridas organizadas por captulo. La seccin 9.2 es una bibliografa alfabtica de todos
los libros y artculos citados en este libro.
614
SEC. 9.1
Patterson
y
Hennessy
,
Compute
r
Organiza
tion and
Design
Con casi 1000 pginas, este libro
monumental tiene mucho material sobre
arquitectura de computadoras, sobre todo
el diseo de CPU RISC. Se hace hincapi
en cmo obtener un alto desempeo
usando filas de procesamiento y otras
tcnicas.
P
r
i
c
e
,
o
s
A
.
c
.
H
i
s
t
o
r
y
h
a
s
t
a
C
a
l
c
u
l
a
t
i
n
g
M
a
615
c
h
i
n
e
s
"
"
A
o
f
CAP.9
p
r
i
n
c
i
p
i
o
s
d
e
l
s
i
g
l
o
x
x
.
S
l
a
t
e
r
,
P
o
r
t
r
a
i
t
s
i
n
S
i
l
i
c
o
n
Por qu Dennis Ritchie no entreg su
tesis de doctorado en Harvard? Por qu
Steve Jobs se convirti en vegetariano?
Las respuestas estn en este fascinante
libro que contiene biografas cortas de 34
personas que moldearon la industria de las
computadoras, desde Charles Babbage
hasta Donald Knuth.
Stallings,
Compute
r
Organiza
tion and
Architect
ure, 4a.
ed.
Texto general sobre arquitectura de
computadoras. Algunos de los temas que
9.1.2
Orga
nizac
in
de
siste
mas
de
cmp
uto
Ng,
"Advan
ces in
Disk
Techno
logy:
Perfor
mance
Issues"
La gente ha estado pronosticando el
fin del disco magntico desde hace
por lo menos
20 aos. Hasta ahora, los discos siguen
vivos. Y segn
este
artculo, su
tecnologa est avanzando rpidamente,
por lo que es probable que los tengamos
entre nosotros durante varios aos ms.
Messm
er, The
Indispe
nsable
PC
Hardw
are
Book,
Ja. ed.
Con 1384 pginas (divididas en 36
captulos y 13 apndices), este libro podra
ser indis- pensable o no, pero ciertamente
es grueso. Aqu encontrar prcticamente
todas las intimida- des de los procesadores
80x86, memorias, buses, chips de apoyo y
perifricos. Si ha ledo y digerido el libro
de Norton y Goodman (vea en seguida) y
quiere pasar al siguiente nivel de detalle
tcnico, comience aqu.
el diseo
es una
de lgica
circuitos
registros,
LISTA DE
LECTURAS Y BIBLIOGRAFA
CAP.9
1
S
617
E
C
.
9.1
9.1.4 El nivel de
microarquitectura
618
CAP.9
SEC. 9.1
619
explica cmo funcionan; tambin plantea y refuta numerosos mitos acerca de la memoria
con consistencia dbil.
Almasi y Gottlieb, Highly Parallel Computing, 2a. ed.
Si desea un panorama general de la computacin paralela, incluidas redes de interconexin, arquitectura, compiladores, modelos y aplicaciones, este libro es muy
recomendable. Su contenido est balanceado entre temas de hardware, software y
aplicaciones.
Hill, "Multiprocessors Shoud Support Simple Memory-Consistency Models"
La semntica de memoria relajada es un tema lgido del diseo de memorias para
multiprocesadores, y causa grandes controversias. Los modelos ms dbiles permiten ciertas optimaciones en hardware, como hacer referencias a la memoria en desorden, pero
hacen ms difcil la programacin. En este artculo el autor trata muchas cuestiones importantes para la consistencia de la memoria y luego concluye que la memoria relajada no vale
la pena.
Hwang y Xu, Scalable Parallel Computing
Al tratar tanto el hardware como el software, los autores logran presentar una resea
completa y amena de la computacin en paralelo. Los temas incluyen multiprocesadores
UMA y NUMA, MPP y COW, transferencia de mensajes y programacin paralela.
620
CAP.9
Benjamin/Cummings, 1994.
H., RAJAMONY,
R., YU,
W.,
Computing on a Network of
Workstations," IEEE Computer Magazine, vol. 29, pp. 18-28, Feb. 1996.
ANDERSON, D.: Universal Serial Bus System Architecture, Reading, MA: Addison-Wesley,
1997.
"A Case for NOW
(Networks of Workstations)," IEEE Micro Magazine, vol. 15, pp. 54-64, Feb. 1995.
ANDERSON, T.E., CULLER, D.E., PATTERSON, D.A., and the NOW team:
ANTONAKOS, J.L.:
621
SEC. 9.2
1997.
AUGUST, D.I., CONNORS, D.A., MSHLKE, S.A., SIAS, J.W., CROZIER, K.M., CHENG, B.-C., EATON,
P.R., OLANIRAN, Q.B., and HWU, W.-M.: "Integrated Predicated and Speculative Execu-
tion in the IMPACT EPIC Architecture," Proc. 25th Ann. lnt'l. Symp. on Computer
Arch., ACM, pp. 227-237, 1998.
Programming Distributed Systems, Hemel Hempstead, England: Prentice Hall
lnt'I., 1991.
BAL, H.E.:
C., LANGENDOEN,
A.S.: "Orca: A Language for Parallel Programming of Distributed Systems," IEEE Trans. on Software Engineering, vol. 18,
pp. 190-205, March 1992.
"Performance of Multiprocessor Interconnection Networks," IEEE Computer Magazine, vol. 22, pp. 25-37, Feb. 1989.
BJORNSON, R.D.:
Thesis, Yale
Univ., 1993.
E.W., LI, K., and MESARINA, M.R. : "VirtualMemory Mapped Network Interfaces," IEEE Micro Magazine, vol. 15, pp. 21-28,
Feb. 1995.
"A Survey and Comparison of FaultTolerant Multistage Interconnection Networks," IEEE Computer Magazine, vol. 20,
pp. 14-27, June 1987.
BODEN, N.J., COHEN, D., FELDERMAN, R.E., KULA WIK, A.E., SEITZ, C.L., SEIZOVIC, J.N., and
su, W.-K.: "Myrinet: A Gigabit per second Local Area Network," IEEE Micro Maga-
s.v., and HILL, M.: "Weak Ordering: A New Definition," Proc. llth Ann. Int'l.
Symp. on Computer Arch., ACM, pp. 2-14, 1990.
ADVE,
622
CAP.9
"The S/Net's Linda Kernel," ACM Trans. on Computer Systems, vol. 4, pp. 110-129, May 1986.
Context," Commun. of the ACM, vol. 32, pp.
CHARLESWORTH,
CHARLESWORTH, A., PHELPS, A., WILLIAMS, R., and GILBERT, G.: "Gigaplane-XB:
Extend-
ing the Ultra Enterprise Family," Proc. Hot Interconnects V, IEEE, 1998.
CODY, W.J.: "Analysis
Standard,"
IEEE Computer
and Overview
of the MULTICS
Sys-
DUKSTRA, E.W.:
Sequential Processes,"
Genuys (ed.), New York: Academic Press, 1968b.
Issues in Multiprocessor
Systems,"
IEEE Com-
PVM: Parallel Virtual Machine -A User's Cuide and Tutorial for Networked Parallel Computing, Cambridge, MA: M.I.T. Press, 1994.
GHARACHORLOO, K., LENOSKI, D., LAUDON, J., GIBBONS, P., GUPTA, A., and HENNESSY, J.:
"Mernory Consistency
Shared-Mernory
Multiproces-
sors," Proc. 13thAnn. Int'l. Symp. on Computer Arch., ACM, pp. 434-442, 1986.
"The IA-64 Architecture at Work," IEEE Computer Magazine, vol. 31. pp.
IEEE
NUMA: A Design Unifying S-COMA and CCNUMA," Proc. 25th Ann. Int'l. Symp. on Computer Arch., ACM, pp. 229-240, 1997.
S.M.: "Predicting Conditional Branch Directions from
Runs of a Program,"
Proc. 5th lnt'l. Conf. on Arch. Support for Prog.
Lang. and Operating Syst., ACM, pp. 85-95, 1992.
Previous
IEEE Trans. on
sors," Proc. 17th Ann. lnt'l. Symp. on Computer Arch., ACM, pp. 15-26, 1990.
DENNING, P.J.:
GEIST, A., BEGUELIN, A., DONGARRA, J., JIANG, W., MANCHECK, R., and SUNDERRAM, V.:
DULONG, C.:
623
Digital Fundamentals, 6th ed., Upper Saddle River, NJ: Prentice Hall, 1997.
FLOYD, T.L.:
SEC. 9.2
GRAHAM, R.:
Project MAC
GRIMSHAW, A.S., and WULF, W.: "The Legion Vision of a Worldwide Virtual Cornputer,"
with
York: McGraw-Hill,
1996.
624
HANDY,J.:
HART,J.M.:
CAP. 9
The Cache Memory Book, 2nd ed., Orlando, FL: Academic Press, 1998.
and Organization,
1998.
"VLSI Processor Architecture," IEEE Trans. on Computers, vol. C-33,
pp. 1221-1246, Dec. 1984.
HENNESSY, J.L.:
HILL, M.:
HOARE, C.A.R.:
Programming:
Seminumerical
Algorithms,
Jrd ed.,
Memory on Low Latency Remote Memory Access Networks, Proc. 24th Ann. Int'l.
Symp. on Computer Arch., ACM, pp. 157-169, 1997.
KORN, D.:
"Porting UNIX to Windows NT," Proc. Winter 1997 USEN/X Conf., pp. 43-57,
1997.
"Augmented Shuffle-Exchange Multistage Interconnection
Networks," IEEE Computer Magazine, vol. 20, pp. 30-40, June 1987.
"How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs," IEEE Trans. on Computers, vol. C-28, pp. 690-691, Sept. 1979.
"Experimental Comparison of Memory Management Policies for NUMA Multiprocessors," ACM Trans. on Computer Systems, vol. 9, pp.
319-363, Nov. 1991.
LENOSKI, D., LAUDON, J., GHARACHORLOO, K., WEBER, W.-D., GUPTA, A., HENNESSY, J.,
HOROWITZ, M., and LAM, M.: "The Stanford Oash Multiprocessor," IEEE Computer
K.L., KAASHOEK, M.F., and WALLACH, D.A.: "CRL: High-Performance AllSoftware Distributed Shared Memory," Proc. 15th Symp. on Operating Systems Principies, ACM, pp. 213-228, 1995.
JOHNSON,
Microprocessor
1991..
"IVY: A Shared Virtual Memory System for Parallel Computing," Proc. 1988 Jnt'l.
Ann. ACM Symp. on Prin. of Distr. Computing, ACM, pp. 229-239, 1986.
LINDHOLM, T., and YELLIN, F.: The Java
KATAYAMA, Y.:
r., VAN STEEN, M., and TANENBAUM, A.S.: "A Framework for
Consistent Replicated Web Objects," Proc. 18th Int'l. Conf on Distr. Computing
Syst., IEEE, pp. 276-284, 1998.
A.-M., KUZ,
&
Virtual Machine
Specification,
Reading, MA:
Addison-Wesley, 1997.
LOSHIN, D.: High Performance
KNUTH, D.E.:
KERMARREC.,
Fundamental Algorithms,
1997.
LAMPORT, L.:
HWU, W.-M.:
Magazine,
625
SEC. 9.2
Computing Demystified,
W.:
Syllogistic,
on
Design Fundamentals,
Upper Saddle
MARTIN, R.P., VAHDAT, A.M., CULLER, D.E., and ANDERSON, T.E.: "Effects
McGHAN, H. and O'CONNOR, J.M.: "picoJava: A Direct Execution Engine for Java
Bytecode," IEEE Computer Magazine, vol 31., Oct. 1998.
McKEE, S.A., KLENKE, R.H., WRIGHT, K.L., WULF, W.A., SALINAS, M.H., A YLOR, J.H., and BATSON, A.P.: "Smarter Memory: Improving Bandwidth for Streamed References," IEEE
Computer Magazine, vol. 31, pp. 54-63, July 1998.
McKUSICK, M.K., BOSTIC, K., KARELS, M., and QUARTERMAN, J.S.: "The Oesign and Implementation of the 4.4 BSD Operating System," Reading, MA: Addison-Wesley, 1996.
McKUSICK, M.K., JOY, W.N., LEFFLER, S.J., AND FABRY, R.S.: "A Fast File System for
UNIX," ACM Trans. on Computer Systems, vol. 2, pp. 181-197, Aug. 1984.
MESSMER, H.-P.: The lndispensible PC Hardware Book, 3rd ed., Reading, MA: AddisonWesley, 1997.
MORGAN, C.: Portraits in Computing; New York: ACM Press, 1997.
MORIN, C., GEFFLAUT, A., BANATRE, M., and KERMARREC, A.-M.: "COMA: An Opportunity
for Building a Fault-Tolerant Scalable Shared Mernory Multiprocessor," Proc. 24th
Ann. lnt'l. Symp. on Computer Arch., ACM, pp. 65-65, 1996.
MOUDGILL, M., and VASSILIADIS, S.: "Precise Interrupts," IEEE Micro Magazine, vol. 16,
pp. 58-67, Feb. 1996.
MULLENDER, S.J., and TANENBAUM, A.S.: "Irnmediate Files,"
Experience, vol. 14, pp. 365-368, 1984.
Software=Practice and
NELSON, V.P., NAGLE, H.T., CARROLL, B.D., and IRWIN, J.D.: Digital logic and Circuit
Analysis and Design, Englewood Cliffs, NJ: Prentice Hall, 1995.
NG, S.W.: "Advances in Disk Technology: Performance Issues," IEEE Computer Magazine, vol. 31, pp. 75-81, May 1998.
NORMOYLE, K.B., CSOPPENSZKY, M.A., TZENG, A., JOHNSON, T.P., FURMAN, C.D., and MOSTOUFI, J.: "UltraSPARC Ui: Expanding the Boundaries of a System on a Chip," IEEE
Micro Magazine, vol. 18, pp. 14-24, March/April 1998.
NORTON, P., and GOODMAN, J.: Inside the PC, 7th ed., Indianapolis, IN: Sams, 1997.
O'CONNOR, J.M., and TREMBLAY, M.: "Picolava-I: The Java Virtual Machi ne in
Hardware," IEEE Micro Magazine, vol. 17, pp. 45-53, March/April 1997.
ORGANICK, E.: The MULTICS System, Cambridge, MA: M.I.T. Press, 1972.
SEC. 9.2
627
PAPAMARCOS, M., and PATEL., J.: "A Low Overhead Coherence Solution for Multiprocessors with Prvate Cache Memories," Proc. l lth Ann. Int'l. Symp. on Computer Arch.,
ACM, pp. 348-354, 1984.
PATTERSON, D.A.: "Reduced Instruction Set Computers," Commun. of the ACM, vol. 28,
pp. 8-21, Jan. 1985.
PATTERSON, D.A., GIBSON, G., and KATZ, R.: "A case for redundant arrays of inexpensive
disks (RAID)," Proc. ACM SIGMOD lnt'l. Conf on Management of Data, ACM, pp.
l09-166, 1988.
PATTERSON, D.A., and HENNESSY, J.L.: Computer Organization and Design, 2nd ed., San
Francisco, CA: Morgan Kaufmann, 1998.
PATTERSON, D.A., and SEQUIN, C.H.: "A VLSI RISC," IEEE Computer Magazine, vol. 15,
pp. 8-22, Sept. 1982.
PAUL, R.P.: SPARC Architecture, Assembly Language, Programming, and C, Englewood
Cliffs, NJ: Prentice Hall, 1994.
PFISTER, G.F.: In Search of Clusters, 2nd ed., Upper Saddle River, NJ: Prentice Hall, 1998.
PILGRIM, A.: Build Your Own Pentium 11 PC, New York: McGraw-Hill, 1998.
POUNTAIN, D.: "Pentium: More RISC than CISC," Byte, vol. 18, pp. 195-204, Sept. 1993.
PRICE, D.: "A History of Calculating Machines," IEEE Micro Magazine, vol. 4, pp. 22-52,
Feb. 1984.
RADIN, G.: "The 801 Minicomputer," Computer Arch. News, vol. 10, pp. 39-47, March
1982.
RITCHIE, D.M., and THOMPSON, K.: "The UNIX Time-Sharing System," Commun. of the
ACM, vol. 17, pp. 365-375, July 1974.
ROSENBLUM, M., and OUSTERHOUT, J.K.: "The Design and lmplementation of a LogStructured File System," Proc. Thirteenth Symp. on Operating System Principies,
ACM, pp. 1-15, 1991.
SALOMAN, D.: Assemblers and Loaders, Englewood Cliffs, NJ: Prentice Hall, 1993.
SAULSBURY, A., WILKINSON, T., CARGER, J., and LANDIN, A.: "An Argument for Simple
COMA," Proc. of First IEEE Symp. on High-Performance Comp. Arch., IEEE, pp.
276-285, 1995.
SCALES, D.J., GHARACHORLOO, K., and THEKKATH, C.A.: "Shasta: A Low-Overhead
Software-Only Approach for Supporting Fine-Grain Shared Memory," Proc. 7th lnt'l.
Conf onArch. SupportforProg. lang. andOper. Syst.,ACM,pp. 174-185, 1996.
PAKIN, S., KARAMCHETI, V., and CHIEN, A.A.: "Fast Messages (FM): Efficienl, Portable
Communication for Workstation Cluster and Massively-Parallel Processors," IEEE
Concurrency, vol. 5, pp. 60-73, April-June 1997.
SECHREST, S., LEE, C.-C., and MUDGE, T.: "Correlation and Aliasing in Oynamic Branch
Predictors," Proc. 23th Ann. lnt'l. Symp. on Computer Arch., ACM, pp. 22-32, 1996.
s.-r., so, K., and RAHMEH, J.T.: "Irnproving the Accuracy of Dynamic Branch Prediction Using Branch Correlation," Proc. 5th lnt'l. Conf on Arch. Support for
Prog. lang. and Operating Syst., ACM, pp. 76-84, Oct. 1992.
SELTZER, M., BOSTIC, K., McKUSICK, M.K., and STAELIN, C.: "An Irnplerneruation of a LogStructured File System for UNIX," Proc. Winter /993 USEN/X Technical Conf., PP
307-326, 1993.
PAN,
628
CAP.9
1995a.
SEC. 9.2
THOMPSON, K.:
The Anatomy of a High-Performance Microprocessor: A Systems Perspective, Los Alamitos, CA: IEEE Computer Society, 1998.
"Superscalar Instruction Issue," IEEE Micro Magazine, vol. 17, pp. 28-39,
Sept./Oct 1997.
TRIEBEL, W.A.:
SHANLEY,
T., and
ANDERSON,
D.:
Addison-Wesley, l 995b.
SHRIVER, B., and SMITH, B.:
SIMA, D:
SLATER, R.:
SMITH, A.J.:
ISA & EISA Theory and Operation, San Diego, CA: Annabooks, 1993.
SOLOMON, D.A.:
/nside Windows NT, 2nd ed., Redmond, WA: Microsoft Press, 1998.
STALLINGS, W.:
"Trends
in Shared Memory Multiprocessing," IEEE Computer Magazine, vol. 30, pp. 44-50,
Dec. 1997.
STENSTROM, P., HAGERSTEN, E., LILJA, D.J., MARTONOSI, M., and VENUGOPAL, M.:
STETS, R., DW ARKADAS, S., HARDA VELLAS, N., HUNT, G., KONTOTHANASSIS, L.,
PARTHASARATHY, S., and SCOTT, M.: "CASHMERE-2L: Software Coherent Shared
Memory on Clustered Rernote-Write Networks," Proc. 16th Symp. on Operating Systems Principies, ACM, pp. 170-183, 1997.
"PVM: A Frarnework for Parallel Distributed Computing," Concurrency: Practice and Experience, vol. 2, pp. 315-339, Dec. 1990.
SUNDERRAM,
VB.:
TANENBAUM, A.S.:
"UNIX Implementation," Bell Syst. Tech. J., vol. 57, pp. 1931-1946,
July-Aug. 1978.
"Control-Driven, Data-Driven, and Demand-Driven Computer Architecture," Parallel Computing, vol. 2, 1985.
"UltraSPARC 1: A Four-Issue Processor Supporting
Multimedia," IEEE Micro Magazine, vol. 16, pp. 42-50, April 1996.
The 80386, 80486, and Pentium Processor, Upper Saddle River, NJ: Prentice HaJI, 1998.
"A Computer Oriented Toward Spatial Problems," Proc. /RE, vol. 46, pp.
1744-1750, 1958.
UNGER, S.H.:
"Cache Memories," Computing Surveys, vol. 14, pp. 473-530, Sept. 1982.
SNIR, M., OTTO, S.W., HUSS-LEDERMAN, S., WALKER, D.W., and DONGARRA, J.:
629
VAHALIA, U.:
VAN STEEN, M., HOMBURG, P.C., and TANENBAUM, A.S.: "The Architectural
Wide-Area Distributed System," IEEE Concurrency, 1999.
Design of Globe: A
WILKES, M.V.:
"Computers Then and Now," J. ACM, vol. 15, pp. 1-7, Jan. 1968.
WILKES.M.V.:
WILKINSON, B.:
WILSON, J.:
WILSON, P.:
"Floating-Point Survival Kit," Byte, vol. 13, pp. 217-226, March 1988.
A
,
NUMEROS BINARIOS
La aritmtica que las computadoras usan difiere en ciertos aspectos de la aritmtica que
aplica la gente. La diferencia ms importante es que las computadoras realizan operaciones
con nmeros cuya precisin es finita y fija. Otra diferencia es que casi todas las
computadoras usan el sistema binario en lugar del decimal para representar nmeros. Estos
temas son mate- ria del presente apndice.
NMEROS BINARIOS
632
APE. A
633
SEC. A.2
2.
Nmeros negativos.
3.
Fracciones.
4.
Nmeros irracionales.
5.
Nmeros complejos.
= ax
b - ax e
A.2
SIS
TE
MA
S
NU
M
RIC
OS
CO
N
BAS
E
050
=
250
0
007
/002
=
3.5
~r "T~
dcimas
Posicin
Posicin
Posicin
1Posicin
001 Posicin
"r
"'r
Las violaciones pueden dividirse en dos
clases
mutuamente
operaciones cuyo
exclusivas:
milsimas
v
i
o
l
a
c
i
o
n
e
s
a
.
.01 Posicin
al de un nmero
decimal.
delas
delas
delas
delas
delas
de las
dn
do
d_3
d1
d2
d.,
d_2
n
Nmer
o=
dx10
i =-k
F
i
g
u
r
a
A
1
.
F
o
r
m
a
g
e
n
e
r
d.,
p
l
o
,
)
-
c
o
n
s
i
d
e
r
e
m
o
s
l
a
l
e
y
a
s
o
c
i
a
t
i
v
a
:
a
+
(
b
e
)
=
(
a
+
b
634
NMEROS BINARIOS
APE. A
En contraste, los nmeros binarios no usan estos diez dgitos; todos se representan exclusivamente con los dos dgitos binarios
Binario
1 X 210 + 1 X 29 + 1 X 28 + 1 X 27 + 1 X 26 + 0 X 25 + 1 X 24 + 0 X 23 + 0 X 22 + 0 X 21 + 1 X 20
Octal
+256
+128
+64
+O
+16
+O
+O
+O
o
+1
1536 + 448 +
2
16 + 1
2X103+0X102+0X101
2000 +O
+o
Hexadecimal 7
+ 1 X 1 O
+ 1
7 X 162 + 13 X 161 + 1 X 16
1792 + 208
+1
635
Decimal
1024 + 512
SEC. A.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
20
30
40
50
60
70
80
90
100
1000
2989
Octal
Binario
o
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000
10100
11110
101000
110010
111100
1000110
1010000
1011010
11001000
1111101000
101110101101
1
2
3
3
5
6
7
10
11
12
13
14
15
16
17
20
24
36
50
62
74
106
120
132
144
1750
5665
Hex
o
1
2
3
3
5
6
7
8
9
A
B
E
F
10
14
1E
28
32
3C
46
50
5A
64
3E8
BA
NMEROS BINARIOS
636
APE. A
binario es en lo esencial igual a la de octal a binario, slo que cada dgito hexadecimal corresponde a un grupo de 4 bits, en lugar de 3 bits. La figura A-4 da algunos ejemplos de conversiones.
Ejemplo 1
,-------'--,
Binario
Hexadecimal
,-------'--,
8
,-------'--,
,-------'--,
Octal
o .
1492
o-----------.
373
186
j
o~---------..
,-------'--,
93
637
Residuos
746
B
~~~
Cocientes
,-------'--,
0001100101001000.101101100
~~~~~
SEC. A.4
0-------...
46
23
Ejemplo 2
Hexadecimal
1 1
,-------'--,
Binario
Octal
,-------'--,
,-------'--,
,-------'--,
,-------'--,
,-------'--,
0111101110100011.101111000100
,-------'--,
La conversin de nmeros decimales a binarios puede efectuarse de dos formas distintas. El primer mtodo es consecuencia directa de Ja definicin de nmeros binarios. Se resta
al nmero la potencia de 2 menor que el nmero. Luego se repite el proceso con la diferencia.
Una vez que el nmero se ha descompuesto en potencias de 2, el nmero binario puede
armarse con unos en las posiciones de bit que corresponden a potencias de 2 usadas en la
descomposicin, y ceros en las dems posiciones.
El otro mtodo (slo para enteros) consiste en dividir el nmero entre 2. El cociente se
escribe directamente debajo del nmero original y el residuo, O o 1, se escribe junto al cociente. Luego se considera el cociente y se repite el proceso hasta llegar a un cociente de O. El
resultado de este proceso es dos columnas de nmeros, los cocientes y Jos residuos. Ahora el nmero binario puede leerse directamente de la columna de los residuos comenzando desde
abajo. La figura A-5 muestra un ejemplo de conversin de decimal a binario.
Los enteros binarios tambin pueden convertirse a decimal de dos maneras. Un mtodo
consiste en obtener la sumatoria de las potencias de 2 que corresponden a los bits l del
nmero. Por ejemplo,
10110 es 24 + 22 + 21= 16 + 4 +2 = 22
En el otro mtodo, el nmero binario se escribe verticalmente, con un bit en cada lnea, con el
bit de la extrema izquierda hasta abajo. La lnea de hasta abajo se llama lnea 1, Ja que est
arriba, lnea 2, etc. El nmero decimal se construye en una columna paralela junto al nmero
binario. Comenzamos escribiendo un 1 en la lnea 1. La entrada de la lnea n corresponde a
dos veces la entrada de la lnea n - 1 ms el bit que est en la lnea n (O o 1 ). La entrada de la
0-----
-,
,.... ,-!
;~~
<;
.... ,
.-i
"'
/"
fd ~:-~
,,,
\,.)
L".:~ ~..:
. ..... . , ~'
~ - .
-
~,
o1o1oo
1 1 1
= 149210
Figura A-5. Conversin del nmero decimal 1492 a binario por divisin sucesiva entre 2, comenzando desde arriba y trabajando hacia abajo. Por ejemplo, 93 dividido
entre 2 da un cociente de 46 y un residuo de 1, que se escribe en la lnea de abajo.
La conversin de decimal a octal y de decimal a hexadecimal puede efectuarse convirtiendo primero a binario y luego al sistema deseado, o restando potencias de 8 o de 16.
638
...._
SEC. A.4
1
---
Resultado
,_
-N
comp. a 1
-N
-N
comp. a 2
exceso en 128
11111110
11111111
01111111
00000010
10000010
11111101
11111110
01111110
00000011
10000011
11111100
11111101
01111101
00000100
10000100
11111011
11111100
01111100
00000101
10000101
11111010
11111011
01111011
00000110
10000110
11111001
11111010
01111010
00000111
10000111
11111000
11111001
01111001
1 + 2 X 11 = 23
00001000
10001000
11110111
11111000
01111000
1+2
00001001
10001001
1111011
11110111
01110111
10
00001010
10001010
11110101
11110110
0111011
20
00010100
10010100
11101011
11101100
01101100
11100001
11100010
01100010
1 +2
374= 749
187 = 374
'--------------
-N
mag. e/signo
10000001
'
'
93 = 187
1 + 2 X 46
'-------------
N
binario
00000001
1 +2
-----------
decimal
639
l : :::::::~:::'
'----------1----------
APE. A
Se han usado cuatro sistemas distintos para representar nmeros negativos en las computadoras
digitales en un momento u otro de la historia. El primero se llama magnitud con signo. En
este sistema el bit de la extrema izquierda es el bit de signo (O es+ y 1 es-) y los bits restantes
contienen la magnitud absoluta del nmero.
El segundo sistema, llamado complemento a uno, tambin tiene un bit de signo, y se
usa O para el signo positivo y 1 para el signo negativo. Para negar un nmero, sustituya cada
1 por O y cada O por 1. Esto tambin se hace con el bit de sigpo. El complemento a uno ya es
obsoleto.
El tercer sistema, llamado complemento a dos, tambin tiene un bit de signo que es O
para el signo positivo y 1 para el signo negativo. La negacin de un nmero es un proceso de
dos pasos. Primero, cada 1 se sustituye por un O y cada O por un l , igual que en el complemento a 1. Luego se suma 1 al resultado. La suma binaria es igual a la suma decimal, excepto
'- ,
= 93
+ 2 X 23
= 46
,
'
11
-----------------1 +2x2=5
-----------------
-------------------
1+2
-,
+ 2 X 1=2
'
= 1
-------
Comience aqu
que se genera un acarreo si la suma es mayor que 1, no si la suma es mayor que 9. Por
ejemplo, la conversin de 6 a complemento a dos se efecta en dos pasos:
00000110 (+6)
11111001 (-6 en complemento a uno)
30
00011110
10011110
11111010 (-6 en complemento a dos)
positivo de 8 bits. Resulta interesante que este sistema es idntico al de complemento a dos
pero con el bit de signo invertido. La figura A- 7 proporciona ejemplos de nmeros negativos
en los cuatro sistemas.
Los sistemas tanto de magnitud con signo como de complemento a uno tienen dos
repre- sentaciones para el cero: un cero positivo y un cero negativo. Esta situacin es
indeseable. El sistema de complemento a dos no tiene este problema porque el
complemento a dos de ms cero tambin es ms cero. Sin embargo, este sistema tiene una
singularidad distinta. El patrn de bits que consiste en un 1 seguido de puros ceros es su
propio complemento. El resultado es
40
00101000
10101000
11010111
11011000
01011000
50
00110010
1011001
11001101
11001110
01001110
60
00111100
10111100
11000011
11000100
01000100
70
01000110
11000110
10111001
10111010
00111010
80
01010000
11010000
10101111
10110000
00110000
90
01011010
11011010
10100101
10100110
00100110
100
01100100
11011010
10011011
10011100
00011100
127
01111111
11111111
10000000
10000001
00000001
10000000
00000000
128
No existe
No existe
No existe
que la gama de nmeros positivos y negativos es asimtrica; hay un nmero negativo que
no tiene contraparte positiva.
La razn de estos problemas no es difcil de encontrar: queremos un sistema de
codifica- cin que tenga dos propiedades:
1.
2.
El problema es que cualquier conjunto de nmeros que tenga tantos nmeros positivos
como negativos y slo un cero tendr un nmero impar de miembros, mientras que m
bits dan origen a un nmero par de patrones de bits. Siempre habr un patrn de bits de
ms o de
640
NMEROS BINARIOS
APE. A
menos, sea cual sea la representacin que se escoja. Este patrn de bits extra se puede usar
para -O o para un nmero negativo grande, o para algo ms, pero sea cual sea el uso que se
le d, siempre ser un problema.
+O
o
o
+1
1
+O
1
+1
o
o
Complemento
a2
00001010
11111100
00000110
<,
PROBLEMAS
l. Convierta los siguientes nmeros a binario: 1984, 4000, 8192.
Decimal
641
3. Cules de los siguientes son nmeros hexadecimales vlidos? BED, CAB, DEAD, DECADE,
ACCEDED, BAG, DAD.
PROBLEMAS
Sumando
Sumando
Suma
Acarreo
APE. A
acarreo 1
00001010
11111101
00000111
se desecha
00000111
5. Cuntos enteros positivos distintos se pueden expresar con k dgitos empleando nmeros de base
r?
6.
Casi todos nosotros slo podemos contar hasta 10 con los dedos; sin embargo, los especialistas
en computacin pueden contar ms all del 1 O. Si consideramos cada dedo como un bit binario, y
un dedo extendido representa 1 mientras que uno doblado representa O, hasta qu nmero
podemos contar usando ambas manos? Y usando tambin ambos pies? Ahora use ambas manos
y ambos pies, pero el dedo gordo de su pie izquierdo har las veces de bit de signo para nmeros
en comple- mento a dos. Qu intervalo de nmeros podemos expresar?
7. Realice los siguientes clculos con nmeros de 8 bits en complemento a dos:
00101101
+01101111
11111111
+11111111
00000000
-11111111
11110111
-11110111
000
+111
100
+l ll
111
+110
100
+100
10. Los nmeros decimales con signo que constan den dgitos se pueden representar con n + 1 dgitos
sin usar un signo. Los nmeros positivos tienen O como dgito de la izquierda. Los nmeros negativos se forman restando cada dgito de 9. As, el negativo de 014725 es 985274. Tales nmeros
se llaman nmeros en complemento a nueve y son anlogos a los nmeros binarios en
complemento a uno. Exprese los siguientes como nmeros de tres dgitos en complemento a
nueve: 6, -2, 100,
-14, -1, O.
11. Determine la regla para la suma de nmeros en complemento a nueve y luego realice las
siguientes sumas.
0001
+9999
0001
+9998
9997
+9996
9241
+0802
642
NMEROS BINARIOS
APE. A
B
NMEROS DE PUNTO FLOTANTE
En muchos clculos el intervalo de nmeros que se usan es muy grande. Por ejemplo, en un
clculo astronmico podran intervenir la masa del electrn, 9 x 10-28 gramos, y la masa del
Sol, 2 x 1033 gramos. Este intervalo es mayor que 1060 Tales nmeros podran representarse
con
0000000000000000000000000000000000.0000000000000000000000000009
2000000000000000000000000000000000.00000000000000000000000
y todos los clculos podran efectuarse llevando 34 dgitos a la izquierda del punto decimal
y
28 posiciones a la derecha. Ello permitira tener 62 dgitos significativos en el resultado. En
una computadora binaria se podra usar aritmtica de mltiple precisin para tener
suficiente significancia. Sin embargo, la masa del Sol no se conoce ni siquiera con una
precisin de cinco dgitos significativos, mucho menos 62. De hecho, pocas mediciones de
cualquier tipo se pueden (o tienen que) efectuar con una precisin de 62 dgitos
significativos. Aunque sera posible llevar todos los resultados intermedios con 62 dgitos
significativos y luego desechar
50 o 60 de ellos antes de imprimir los resultados finales, hacerlo sera un desperdicio de
tiempo de CPU y de memoria.
Lo que se necesita es un sistema para representar nmeros en el que el intervalo de los
nmeros que pueden expresarse sea independiente del nmero de dgitos significativos. En
este apndice veremos un sistema as, que se basa en la notacin cientfica de uso comn en
fsica, qumica e ingeniera.
643
644
APE. B
SEC. B.l
3
Subdesbordamiento
Desbordamiento
-----1
3.14
0.000001
1941
= 0.314
X 101 = 3.14 X 10
= 0.1
X 10-5 = 1.0 X 10-6
= 0.1941X104
= 1.941X103
El intervalo est determinado por el nmero de dgitos del exponente, y la precisin est
determinada por el nmero de dgitos de la fraccin. Puesto que hay ms de una forma de
representar un nmero dado, normalmente se escoge una forma corno estndar. A fin
de investigar las propiedades de este mtodo de representacin de los nmeros, consideremos
una representacin, R, con una fraccin de tres dgitos y signo dentro del intervalo 0.1 ~ lfl <
1 o cero, y un exponente de dos dgitos con signo. La magnitud de estos nmeros vara entre
+ 0.100 x 10-99 y 0.999 x 1 Q+99, un intervalo de casi 199 rdenes de magnitud, y sin
embargo slo se necesitan cinco dgitos y dos signos para almacenar un nmero.
Podemos usar nmeros de punto flotante para modelar el sistema de nmeros reales de
las matemticas, aunque hay varias diferencias importantes. La figura B-1 muestra un esquema muy exagerado de la lnea de los nmeros reales. La lnea real se divide en siete
regiones:
5.
l.
2.
3.
Nmeros negativos pequeos con una magnitud menor que O. 100 x 10-99_
4.
Cero.
Nmeros positivos pequeos con una magnitud menor que 0.100 x J0-99.
6.
7.
Una diferencia importante entre el conjunto de los nmeros que pueden representarse
con tres dgitos en la fraccin y dos en el exponente, y los nmeros reales, es que los
primeros no se pueden usar para expresar nmeros en las regiones 1, 3, 5 o 7. Si el resultado
de una
Nmeros
Cero
Nmeros
-10'00
-------'----+---+-----
7
positivo
Desbordamiento
,-------A------
5
Subdesbordamiento
nega~tivo
4:Lpositivo
6
ositivos expresables
2
negativo
negativ
os
n =fX l O"
645
,-------A------
10100
Figura B-1. La lnea de los nmeros reales se puede dividir en siete regiones.
en la regin 3 o 5 tampoco puede expresarse. Esta situacin se llama error de subdesbordamiento. Este tipo de error es menos grave que el de desbordamiento, porque en
muchos casos O es una aproximacin satisfactoria para nmeros de las regiones 3 y 5. Un
saldo en el banco de 10-102 dlares no es mucho mejor que un saldo de O.
Otra diferencia importante entre los nmeros de punto flotante y los nmeros reales es
su densidad. Entre cualesquier dos nmeros reales x y y hay otro nmero real, por ms
cercano que est x a y. Esta propiedad proviene del hecho de que para cualesquier
nmeros reales
distintos, x y y, z = (x + y)/2 es un nmero real que est entre ellos. Los nmeros reales
forman
un continuo.
Los nmeros de punto flotante, en cambio, no forman un continuo. Se pueden expresar
exactamente 179,100 nmeros positivos en el sistema de cinco dgitos y dos signos que
usamos antes, 179,100 nmeros negativos y O (que se puede expresar de muchas formas),
para un total de 358,201 nmeros. Del nmero infinito de nmeros reales que hay entre
-10+100 y + 0.999 x 1099, slo 358,201 se pueden especificar con esta notacin. Dichos
nmeros se simbolizan con los puntos de la figura B-1. Es muy posible que el resultado de
un
clculo
uno de los otros nmeros, aunque est en la regin 2 o 6. Por ejemplo,
+ 0.100
x 10sea
3 dividido entre 3 no se puede expresar con exactitud en nuestro sistema. Si el
resultado de un clculo no se puede expresar en la representacin numrica que se est
usando, lo que obviamente debe hacerse es usar el nmero ms cercano que s pueda
expresarse. Este proceso se llama redondeo.
La distancia entre nmeros adyacentes que pueden expresarse no es constante a lo
largo de las regiones 2 o 6. La separacin entre + 0.998 x 1099 y + 0.999 x 1099 es
inmensamente mayor que la distancia entre+ 0.998 x 10 y+ 0.999 x 10. Sin embargo, s
operacin aritmtica es un nmero en las regiones 1 o 7 -por ejemplo, 106 x 106 = 1012ocurrir un error de desbordamiento y la respuesta ser incorrecta. La razn est en Ja
naturaleza finita de la representacin de los nmeros y es inevitable. As mismo, un resultado
de tres dgitos y un exponente de dos dgitos, las conclusiones que se sacan son vh~
tambin para otros sistemas de representacin. Modificar el nmero de dgitos de la fraccin
o exponente simplemente desplaza los lmites de las regiones 2 y 6, Y cambia el nmero.de
puntos expresables y que aqullas contienen. Incrementar el nmero de dgito~en l~
fraccin aumenta la densidad de puntos y por tanto mejora la precisin de las
aproxmaciones. In-
646
APE.
3
3
3
4
4
2
3
4
1
2
4
5
5
5
5
10
4
1
2
3
4
3
20
10 '~"
Cota inferior
10"
1o'u'
1o'W'
1 o-,uuu'
10-'J
10"
10999
10,UUUJ
10'"
10'u'
10'"""
10 VW"
10'w'
10 1011
109999
109
1099
10999
109999
10999
10999
r 1 r 1 r 1 r 1 r 1 r l 2tl 2t l
2-2
No normalizado:
O 1 O1 O1 OO
'-.-'
2-4
2-6
r10
2--e
r'4
2-12
o o o o o o o o o o o 1
Signo Exponente
+ exceso 64 es
84-64=20
Cota superior
109
1099
10999
109999
109
1099
647
SEC. B.2
2-16
1 o 1
2-12+ 1
+ 1 x
r'6)
= 432
1 = 22 (1
2-13+ 1
r15
~~-
0 1 001 001
'-.-'
1 0 1 1
Signo Exponente
+ exceso 64 es
73-64 = 9
0 0 0 0 0 0 0 0 0 0 0 = 29 (1
La fraccin es 1
+1x2-4
2-1 + 1
+ 1x2-s
r2
+1
r5)
r1+
2-2+ 1
2-4
= 432
Nonormalizado:
~.
O 1000101
'-.-'
Signo Exponente
+ exceso 64 es
69-64=5
0000
0000
0001
1011
~-----~------~
=165(1x16-3+Bx16-4)=432
~.
o 1000011
'-.-'
Signo Exponente
+ exceso 64 es
67 -64 = 3
0001
1o11
0000
A fin de rectificar esta situacin, a fines de los aos setenta el IEEE form un comit
para estandarizar la aritmtica de punto flotante. La meta no slo era poder intercambiar
datos de punto flotante entre diferentes computadoras, sino tambin proporcionar a los
diseadores de hardware un diseo que se saba era correcto. Los trabajos resultantes dieron
pie al estndar IEEE 754 (IEEE, 1985). Casi todas las CPU actuales (incluidas las lntel,
SPARC y JVM que estudiamos en este libro) tienen instrucciones de punto flotante que se
ajustan al estndar de punto flotante IEEE. A diferencia de muchos estndares, que tienden a
ser trminos medios con los que nadie est contento, ste no est nada mal, en parte porque
fue en gran medida el trabajo de una sola persona, el profesor de matemticas de Berkeley
William Kahan. En el resto de la seccin describiremos el estndar.
El estndar define tres formatos: precisin sencilla (32 bits), doble precisin (64 bits) Y
precisin extendida (80 bits). El formato de precisin extendida pretende reducir los errores
de redondeo; se usa primordialmente dentro de unidades aritmticas de punto flotante, por
lo que no hablaremos ms de l. Los formatos tanto de precisin sencilla como doble usan
la base 2 para las fracciones y notacin en exceso para los exponentes. Los formatos se
muestran en la figura B-4.
Ambos formatos comienzan con un bit de signo para el nmero en su totalidad: O para
positivo y 1 para negativo. Luego viene el exponente, que usa exceso en 127 en el caso de
la
APE. B
648
2_3
Concepto
1:. . :1_
Bits de la fraccin
,,....----------52
Fraccin
~onente
Signo
Figura B-4. Formatos de punto flotante IEEE. (a) Precisin sencilla. (b) Doble
precisin.
precisin sencilla y exceso en 1023 para la doble precisin. Los exponentes mnimo (0) y
mximo (255 y 2047) no se usan con nmeros normalizados; tienen usos especiales que se
describen ms adelante. Por ltimo, tenemos las fracciones, de 23 y 52 bits,
respectivamente.
Una fraccin normalizada comienza con unelpunto binario, seguido de un bit 1, y luego
resto de la fraccin. Siguiendo una prctica iniciada en el PDP-11, los autores del estndar
se dieron cuenta de que el bit inicial de la fraccin no tiene que almacenarse, ya que puede
simplemente darse por hecho que est presente. Por tanto, el estndar define la fraccin
de una forma un poco distinta a lo acostumbrado. La fraccin consiste en un bit 1 implcito,
un punto binario implcito, y 23 o 52 bits arbitrarios. Si todos los bits de la fraccin son
ceros, la fraccin tiene el valor numrico 1.0; si todos son unos, la fraccin es
numricamente un poco menos que 2.0. A fin de evitar confusiones con una fraccin
convencional, la combinacin del l implcito, el punto binario implcito y los 23 o 52 bits explcitos se llama significando en vez de fraccin o mantisa. Todos los nmeros normalizados tienen un
significando, s, dentro del intervalo 1 ::; s < 2.
Las caractersticas numricas de los nmeros de punto flotante IEEE se dan en la figura
B-5. Consideremos, por ejemplo, los nmeros 0.5, 1 y l.5 en formato de precisin sencilla
normalizado. stos se representan en hexadecimal como 3FOOOOOO, 3F800000 y 3FCOOOOO,
respectivamente.
Uno de los problemas tradicionales con los nmeros de punto flotante es cmo manejar
el subdesbordamiento, el desbordamiento y los nmeros no inicializados. El estndar IEEE
aborda los problemas explcitamente, tomando su enfoque en parte de la CDC 6600.
Adeins de los nmeros normalizados, el estndar tiene otros cuatro tipos numricos, que se
describen a continuacin y se muestran en la figura B-6.
Surge un problema cuando el resultado de un clculo tiene una magnitud menor que el
nmero de punto flotante normalizado ms pequeo que puede representarse en el sistema.
Antes, casi todo el hardware adoptaba uno de dos enfoques: igualar el resultado a cero y
continuar, o causar una trampa de desbordamiento de punto flotante hacia cero. Ninguno de
Precisin sencilla
1
--
- .
Doble precisin
1
11
23
52
32
64
Exceso en 127
Exceso en 1 023
-126a+127
2-126
-1022a+1023
2-1022
aprox. 2128
aprox. 10-311 a 1038
aprox. 21024
aprox. 10-300 a 1 ()308
aprox. 1 ()-15
aprox. 10-324
Intervalo decimal
(b)
Sistema de exponente
Total de bits
(a)
Bits 1
"\:Exponente
649
)~l~~~l~~-F_ra_cc_io_n~~~
Signo
SEC. B.2
Cero 11
Infinito 1 1
1 1 1 ... 1
1 1 1 ... 1
Desnormalizado
Ningn nmero
Bit de signo
stos es realmente satisfactorio, por lo que IEEE invent los nmeros desnormalizados.
Estos nmeros tienen un exponente cero y una fraccin dada por los siguientes 23 o 52 bits.
El bit implcito a la izquierda del punto binario ahora se convierte en O. Los nmeros
desnormalizados se pueden distinguir de los normalizados porque estos ltimos no pueden
tener un exponente cero.
El nmero de precisin sencilla normalizado ms pequeo tiene 1 como exponente y
O como fraccin, y representa l.O x 2-126. El nmero desnormalizado ms grande tiene O
como exponente y slo unos en la fraccin, y representa cerca de 0.9999999 x 2-121, que
es casi la misma cosa. Sin embargo, una cosa que debemos tener presente es que este
nmero slo tiene 23 bits de significancia, en vez de 24 como todos los nmeros normalizados.
Si los clculos reducen an ms este resultado, el exponente sigue siendo O, pero los
primeros bits de la fraccin se van convirtiendo en ceros, lo que reduce tanto el valor como el
nmero de bits significativos de la fraccin. El nmero desnormalizado ms pequeo distinto
650
APE. B
de cero consiste en un 1 en el bit de la extrema derecha, con todos los dems O. El exponente
representa 2-127 y la fraccin representa 2-23, de modo que el valor es 2-150 Este esquema hace
posible un subdesbordamiento "gradual", sacrificando significancia en lugar de saltar a O
cuando el resultado no puede expresarse como nmero normalizado.
Este esquema cuenta con dos ceros, positivo y negativo, determinados por el bit de signo. Ambos tienen un exponente de O y una fraccin de O. Aqu, tambin, el bit a la izquierda
del punto binario es implcitamente O en lugar de 1.
El desbordamiento no puede manejarse de forma gradual. No quedan ms combinaciones de bits. En vez de ello, se proporciona una representacin especial para infinito, que
consiste en un exponente solamente de unos (lo cual no est permitido en los nmeros normalizados) y una fraccin de O. Este nmero puede usarse como operando y se comporta
segn las reglas matemticas usuales para el infinito. Por ejemplo, infinito ms cualquier
cosa es infinito, y cualquier nmero finito dividido entre infinito es cero. As mismo, cualquier nmero finito dividido entre cero da infinito.
Y qu pasa con infinito dividido entre infinito? El resultado no est definido. Para manejar este caso se proporciona otro formato especial, llamado ningn nmero (NaN, Nota
Number), que tambin puede usarse como operando con resultados predecibles.
APE. B
PROBLEMAS
651
4. Los siguientes nmeros binarios de punto flotante consisten en un bit de signo, un exponente base
2 en exceso de 64 y una fraccin de 16 bits. Normalcelos,
a. O 1000000 0001010100000001
b. o 0111111 0000001111111111
e.O 10000111000000000000000
5. Para sumar dos nmeros de punto flotante hay que ajustar los exponentes (desplazando la fraccin) de modo que sean iguales. Luego se pueden sumar las fracciones y normalizar el resultado,
si es necesario. Sume los nmeros IEEE de precisin sencilla 3EEOOOOOHy 3D800000H y exprese el resultado normalizado en hexadecimal.
6. La Compaa de Computadoras Econmicas decidi sacar una mquina que maneje nmeros de
punto flotante de 16 bits. El Modelo 0.001 tiene un formato de punto flotante con un bit de signo,
un exponente de 7 bits en exceso de 64, y una fraccin de 8 bits. El Modelo 0.002 tiene un bit de
signo, un exponente de 5 bits en exceso de 16, y una fraccin de 1 O bits. Ambas usan
exponenciacin base 2. Cules son los nmeros normalizadosms grande y ms pequeo en cada
modelo? Cuntos dgitos decimales de precisin tiene aproximadamente cada uno? Comprara
alguno de ellos?
7. Hay una situacin en la que una operacin con dos nmeros de punto flotante puede causar una
reduccin drstica del nmero de bits significativosen el resultado. Cul es?
8. Algunos chips de punto flotante tienen incorporada una instruccin de raz cuadrada. Un posible
algoritmo es iterativo (por ejemplo, el de Newton-Raphson). Los algoritmos iterativos necesitan
una aproximacin inicial y luego la mejoran continuamente. Cmo se puede obtener una raz
cuadrada aproximada rpida de un nmero de punto flotante?
PROBLEMAS
9. Escriba un procedimiento que sume dos nmeros de punto flotante IEEE de precisin sencilla.
Cada nmero se representa con un arreglo booleano de 32 elementos.
1 O.
l. Convierta los nmeros siguientes al formato IEEE de precisin sencilla. Represente los
resultados como ocho dgitos hexadecimales.
a.
b.
c.
d.
5/32
-5/32
6.125
2. Convierta los siguientes nmeros de punto flotante IEEE de precisin sencilla de hexadecimal a
decimal:
a. 42E48000H
b. 3F880000H
c. 00800000H
d. C7FOOOOOH
3. El formato de los nmeros de punto flotante de precisin sencilla en la 370 tiene un exponente
de
7 bits en el sistema exceso de 64, y una fraccin que contiene 24 bits ms un bit de signo, con el
punto binario en el extremo izquierdo de la fraccin. La base de exponenciacin es 16. El orden
de los campos es bit de signo, exponente, fraccin. Exprese el nmero 7/64 como nmero
normaliza- do en este sistema, en hexadecimal.
Escriba un procedimiento para sumar dos nmeros de punto flotante de precisin sencilla que
usan base 16 para el exponente y base 2 para la fraccin pero no tienen un bit 1 implcito a la
izquierda del punto binario. Un nmero normalizado tiene 0001, 0010, ... , 1111 como los cuatro
bits de extrema izquierda de la fraccin, pero no 0000. Un nmero se normaliza desplazando la
fraccin a la izquierda 4 bits y sumando 1 al exponente.
NDICE
A
65
4
CE
Acceso
a memoria slo por cach, 553, 585-586
directo a la memoria, 90, 358
no uniforme a memoria, 553, 573-585
uniforme a memoria, 552
Acierto en cach, 268
Aciertos, tasa de, 66
ACL (vase Lista de control de acceso)
Acontecimientos importantes en arquitectura
de computadoras, 13-24
Actualizacin, estrategia de, 566
Acumulador, 18, 42, 333
Administracin
de directorios, 435-436
de procesos
en UNIX, 470-473
en Windows NT, 473-476
Administrador
de cach, en Windows NT, 452
de E/S, Windows NT, 452
de memoria virtual, Windows NT, 452
de objetos, Windows NT, 452
653
N
DI
PCI, 186
rbitro de bus, 90
Archivo, 430-431
C
E
Big endian, 59
a variable local, 205,BIOS
221, (vase Sistema bsico
de entrada/salida)
compartida,
519
224, 232 de cuadro, 312
BIPUSH IJVM, instruccin,
222, 237
de enlace
de pila, 205, 218-221, 224
dinmico, 517-518
Arbitraje de bus, 165-167
de importacin,
518
objetivo, 519
exe,50
6
inmedi
ato,
469
rea de mtodos, 221
Aritmtica binaria, 640
Arquitectura, 7, 44
acontecimientos
importantes, 13-24 de
carga/almacenamiento, 48,
316 de computadoras, 7
de conjunto de
instrucciones, 6 de
enlace escalable, 32
del directorio para memoria
compartida, Harvard, 67
industrial
estndar, 91
superescalar,
52
Arreglo
receptor, 158
Serie Universal,
189-193 160
multiplexado,
sincrnico, PCI,
160-163
183-189 (vase
tambin Bus de
interconexin de
componentes
perifricos)
tradicional, 170
USB, 189-193
Bs
q
u
e
d
a,
7
1
b
i
n
a
ri
a,
5
0
5
Byron, Lord, 15
Byte, 58, 307
prefijo, 239, 327, 360
e
Cach
asociativa por conjunto,
269-270
con mapeo directo, 267269
de asignacin de
escritura, 270, 566
Cerradura, 632
Certificado
de acceso,57468
Celda de memoria,
Ciclo
Celeron, 30
Centro,
596
c
mp
uto,
23
de bus, 160
de bsqueda-decodificacinejecucin,42,
2
0
4
de la trayectoria de datos, 41
Cilindro, 71
Circuito
combinacional,
129-134
aritmtico,
134-139
comparador,
131-132
decodificador,
130-131
multiplexor,
130-131
integrado, 128-129
uso en
computadoras, 21-23
lgico, 128-141
virtuoso, 25
B
Babbage, Charles, 13-14
anfitrion
a, 519
ma
est
ro,
15
8
6
5
6
Comparador, 131
NDICE
657
Con
de base, 635-637 vers
entre bases, 635-637
in
Copiar al escribir, 456
Corte virtual por enrutamiento, 537
Corrutina, 376-379
Cougar, 592
a unos, 637
5
Compuerta, 5,
3
117-127 de
principios de diseo, 47-49
llamada,
versus CISC, 46-47
425
del sistema numrico, 633-634
de saludo (handshaking),
164
Computadoras
Computadora
octal, 633
de transferencia de bloques,
168 aspectos
paralelas
con conjunto de instrucciones
(radix), 633
del sistema, 157
complejo,
de diseo, 524Baud, 107
EISA, 183
553 desempeo
4
BCD (vase Decimal codificado en6 binario)
esclavo, 158
de, 539-545
Bechtolsheim, Andy, 32
IBM PC, 183
software de, 545BGA (vase Ball Grid Array)
4
ISA, 181-183
546, 598-609
Biblioteca
7
ISA extendido, 91, 183 taxonoma de,
con conjunto de instrucciones
551-553
reducido, 24,
Comunicador, 600
4
Conjunto
6
D
DAS (vase Supercomputadora
ASCI
di
str
ib
ui
da
)
DASH, multiprocesador, 577-580
Datos obsoletos, 565
DEC PDP-1, 19
DEC PDP-8, 19
DECVAX, 45, 46
Decimal codificado en binario, 57
Decodificacin
de direcciones,
195-197 parcial
de direcciones,
197
Decodificador, 130
Demultiplexor, 130
Dependencia
de escritura despus de
escritura, 278 de escritura
despus de lectura, 278
verdadera, 258
WAR (vase Dependencia
de escritura despus de
lectura)
Desempeo de computadoras en
paralelo cmo lograr, 543-545
cmo mejorar, 264283 escalabilidad,
543-544 ley
deAmdahl, 541542
mtricas de hardware, 539541 mtricas de software,
541-543 ocultamiento de
latencia, 544-545
Dimetro de la red, 532
Difusin (Broadcasting), 550
Digital Equipment Corporation, 14, 19,
45
Dimensionalidad, 533
DIMM
de contorno pequeo, 68
(vase Mdulo de memoria dual en
lnea) Diodo emisor de luz, 100
DIP (vase Paquete dual en lnea)
Direccin
de memoria,
57-58 lineal,
423
Direccionamiento, 322
basado-indizado,
338 de nivel ISA,
342-347 de pila,
338-341
de registro, 334-335
de registro indirecto,
335-336 directo, 334
indirecto por registro,
335-336 indizado, 336338
inmediato, 334
instrucciones de ramificacin,
341-342 por bloque lgico, 74
Directorio, 435
de pginas,
423 de
trabajo,
461 raz,
461
Directriz de ensamblador, 491
Disco, 68-88
audiovisu
al, 72
CD-ROM, 80-83
658
de instrucciones,
42-45
especulativa, 281283 fuera de
orden, 276-281
Emisor, 118
Empaquetamiento de memoria,
67-68
Encadenamie
nto
circular,
165-167
de operaciones, 559
Endian, 59
ENIAC, 17
ENIGMA, 16
Enlace (thread), 547
Error
est
n
dar
,
461
rel
ati
vo,
64
5
Escala, ndice, base,
328, 345-346
Espacio
de
direccione
s, 405 de
tuplas,
f
l
e
x
i
b
l
e
,
7
3
IDE,
7375
mag
nti
co,
7080
pti
co,
8088
RAID, 76-80
SCSI, 75-76
nico, grande y caro, 76
6
0
4
fsico
de
direccio
nes,
406
virtual
de
direccio
nes,
406
Espera activa,
357
Estacin de
trabajo esclava,
593
Estado de
espera, 161
E
E/S (vase tambin Entrada/salida)
en UNIX, 459-465
en Windows NT,
465-470
implementacin,
431-435
instrucciones de,
356-359
por mapeo de memoria,
195-197 programada,
356
virtual, 429-436
Eagle, 591
Eckert, J. Presper, 17
ECL (vase Lgica de emisor
acoplado) Editor de enlace, 506
EDVAC, 17
EEPROM (vase PROM borrable
elctric
amente)
EIDE (vase IDE extendido)
EISA, bus (vase Bus ISA
extendido) Eje raz, 191
Ejecucin
condicional, 393
NDICE
Flujo de control
de procedimientos, 372-376
nivel ISA, 370-383 secuencial,
371
Flynn, taxonoma de, 551-553
Formatos de instruccin criterio
de diseo, 322-324 de
Pentium II, 327-328
de UltraSPARC II, 328-330
en el nivel ISA, 322-332
FORTRAN, 9-10
sistema monitor de, 10-11
659
1
IA-32, 285, 311
IA-64, 388-397
ca
rg
a
es
pe
cu
lat
iv
a,
39
539
6
ha
z,
39
2
modelo EPIC, 391393
tcnica de
predicacin, 393395
IADD IJVM,
instruccin, 222, 223,
233, 2362
3
7
IAS, mquina, 17
IBM 360, 21-22, 23
dinmico, 515
Estados finitos, mquina de, 250
en Java, 439
Estandarizacin, 306
en UNIX, 471-473
Estrategia de invalidacin, 566
llamada al sistema, 461
Estridge, Philip, 23-24
Enlaces (linking), 506-519
Etapa de fila de procesamiento, 49
en MULTICS, 515-516
Ethernet, 595-596
en UNIX, 519
conmu
tado,
en Windows, 517-518
596
Enlazado
Evolucin de las computadoras, 8explci
13
to, 518
Exclusin mutua, 550
implci
Executive, Windows NT, 452
to, 518
Expansin de cdigo de
Enlazador, 506
operacin, 325tareas del, 508-511
3
Enrutamiento
2
adaptativo, 538
7
algoritmos de,
Explorador de pginas, 575
538-539
Exponente, 644
adaptativos,
Extensiones
para multimedios, 30
538
dimensional
es, 538
F
dinmicos,
538
Fallo
estticos,
de
538
cach
de origen,
,
538
268
dimensiona
de
l, 538
pgi
esttico,
na,
538
409
por tnel, 537
Fanout, 532
Ensamblado, proceso de,
FAT (vase Tabla de asignacin de
498-506
de procesamiento,archivos)
49, 548 Fibra, 474
Ensamblador, 7, 484,
tabla de smbolos, 505-507
FIFO (vase Primero en entrar,
Mic-3, 253-260
498-506 de dos
Enterprise, Sun, 570-571
pasadas, 498-499
Mic-4, 260-264 primero en salir, algoritmo)
Entrada estndar, 461
Entrada/salida, 89-112 (vase tambin
Pentium, 51-52Fila, 470
primera pasada,
E/S)
picoJava II, 293-294
499-502
EPIC (vase Computacin con instrucciones
UltraSPARCII, 290-291
NDICE
6
Filtro, 461
explcitamente paralelas)
6
!LOAD
IJVM,
instruccin,
222,
237
con
dispositivos
grficos, Windows NT, 453
Eplogo de procedimiento, 375
Flash, memoria,661
153-154
0
de paso 143-145
de mensajes, 600-601
ILLIAC,
Flip-flop,
EPROM 17
(vase PROM borrable)
ILLIAC
IV, 53-54,
554
de
sistema
octal,
147 de cmputo pequeo, 75-76
Equivalencia
de circuitos,
123-127
ILC (vase Contador de
Impresora, 1O1-106
del sistema, 453 Interfaz
ubicacin de
a color, 104-106
grfica para el usuario,
K 449
instrucciones)
CYMK, 104
Interpretacin, 2
coherente escalable, 581-585
de cera, 106
Intrprete, 2, 42-43
de inyeccin de tinta, 102
Interrupcin, 90, 379-383
Foso, 80
Fraccin, 644
Fragmentacin
externa, 419
interna, 414-415
Frecuencia de pantalla de medio
tono,
1
0
4
FSM (vase Mquina de estados
finitos)
G
Gama, 105
de
colores
, 105
GDT (vase Tabla de descriptores
globales) Gigaplane-XB, 570
GigaRing, 590
Globe, 608-609
Goteo, 293
Gato, MAL, 230-232
GOTO IJVM, instruccin, 222, 223,
2402
4
1
Grado, 532
Granularidad del paralelismo, 547548
Grupo de estaciones de trabajo, 28,
553, 5925
9
H
3
GUI (vase Interfaz grfica para el
Habilitar, usuario)
143
Hamming, cdigo de, 62-64
Hardware, 8
Kestrel,
Haz,
392591
Khosla, Vinod,
32 534
Hipercubo,
red de,
Hiperpaginacin, 414
L
Land,80
Latch, 141-143
IBM701, 19
IBM 704, 19
IBM 709, 10
IBM 801, 46
IBM 1401, 21
IBM 7094, 14, 20, 21, 23
IBM Corporation, 18-19, 20, 21
IBMPC
bus de
la, 183
origen
de la,
24
IBM PS/2, 182-183
IC (vase Circuito
integrado) IDE,
disco, 73-75
Identificador de seguridad, 468
IF_ICMPEQ IJVM, instruccin, 222,
223,
242
IFEQ IJVM, instruccin, 222, 223, 242
IFLT IJVM, instruccin, 222, 223, 242
IFU (vase Unidad de
bsqueda de
instrucciones)
IINC IJVM, instruccin, 222, 240
IJVM, 203-213,
218, 227 rea
de mtodo,
221 cdigo
Java, 226-227
conjunto de instrucciones,
222-226 implementacin Mic-1,
232-243 implementacin Mic2, 253-255 implementacin
Mic-3,
implementacin
253-260 Mic-4, 260-264
marco de variable local, 218
modelo de memoria, 220-222
operacin de memoria, 209-210
pila, 218-220
pila de operandos, 221
NDICE
reserva constante,
220
espacial,
266 211-213
seal
de control,
temporal, 266 207-209
temporizacin,
Lgica
trayectoria de datos, 204-210
de
emisor
acoplado,
120
Little
endian,
59
de
transistor-transistor, 120
Localidad
negativa, 127
positiva, 127
Longitud de trayectoria, 244
de matriz, 101-102
de sublimacin de
colorante, 106 de tinta
slida, 105
lser, 102-104
monocromtica,
1O1-104
por sublimacin de colorante,
106
ndice de archivos, 432
Iniciador, bus PCI, 185
Instrucciones
comparaciones y ramificaciones,
3523
5
3
de control, 354-355
de E/S, 356-359
de movimiento,
348-349 de
Pentium II, 359362 de picoJava
II, 364-369
de UltraSPARC II,
362-364 didicas,
349-350
llamadas a procedimientos,
353-354 mondicas, 350352
operaciones, 349-352
Integracin a muy grande escala, 23
Intel 4004, 29, 30
Intel 8008, 29, 30
Intel 8080, 29, 30
Intel 8086, 29, 30
Intel 8088, 29, 30
Intel 8255A, 194-195
Intel 8259A, 169-170
Intel 80286, 30, 30
Intel 80386, 30, 30
Intel 80486, 30, 30
Intel Corporation, 29
Intel IA-64, 388-397
Intel Pentium II (vase Pentium II)
imp
recis
a,
279
prec
isa,
279
tran
spar
ente,
381
Inverso aditivo, 351
Inversor, 119
INVOKEVIRTUAL IJVM,
instruccin, 222225, 242-243
IOR IJVM, instruccin, 222,
223, 237
IQ-Link, tarjeta, 581
IR (vase Registro de
instrucciones) IRETURN IJVM,
instruccin, 222, 223, 2252
2
6
,
2
4
2
2
4
3
ISA, nivel, 6,
303-402
direccionamie
nto, 342-347
flujo de
control, 370383
formatos de instrucciones,
322-332
generalidades,
305-318 modelos
de memoria, 307309 propiedades,
305-307
J
Jerarqua de memoria, 69-70
Jobs, Steve, 23
JOHNIAC, 17
Joy, Bill, 32
JVM (vase Mquina Virtual Java)
Latch D, 143
con reloj, 143
Latch SR, 141142 con reloj,
142-143
Latencia, 51
rotaciona
l, 71
Latin-1, 111
LBA (vase Direccionamiento por
bloque
lg
ico
)
LCD (vase Pantalla de cristal
lquido) LDC_W IJVM,
instruccin, 222, 240
LDT (vase Tabla de descriptores
locales) LED (vase Diodo emisor de
luz) Lenguaje
de alto nivel, 7
de
mquina,
l
ensambla
dor
caractersticas, 484-485
enunciados, 488-491
razones para usar, 485488 seudoinstrucciones,
491-493
fuente,
483
objetivo,
483
Levantamiento de cdigo, 28 l
Ley
6
6
0
de Amdahl, 541
De Morgan, 125-126
Moore, 25
Libro
Amarillo, 81
Anaranjado, 84
Rojo, 80
Verde, 83
Linda, 604-606
Lnea de cach, 67, 266, 565
Lneas por pulgada, l 04
Lista
de control de acceso, 468
libre, 433
Literal, 501
M
Macro,
494-498
NDICE
definicin de,
494 expansin
de, 494
implementaci
n de, 498
llamada de, 494
parmetro de,
496
Macroarquitectura, 218
Magnitud con signo, 637
Mainframe, 28
MAL (vase Microlenguaje
ensamblador)
Manejador
de bus, 158
de dispositivo, en Windows NT, 452
de
interrupcion
es, 90 de
trampas,
379
MA
NIA
C
Man
tisa,
644
Mapa
de bits, 320
de memoria, 406
Mqui
na
ana
lti
ca,
14
de diferencias, 13
de estado, 204
NDICE
661
Kestrel, 591
Khosla, Vinod, 32
L
Land,80
Latch, 141-143
Little endian, 59
espacial, L266
temporal,o 266
c
Lgica
a
de emisorl acoplado, 120
i
de transistor-transistor,
120
negativa,da127
positiva, d127
Longitud de trayectoria, 244
de matriz, 101-102
de sublimacin de
colorante, 106 de tinta
slida, 105
lser, 102-104
monocromtica,
101-104
por sublimacin de colorante,
106
ndice de archivos, 432
Iniciador, bus PCI, 185
Instrucciones
comparaciones y ramificaciones,
3523
5
3
de control,
354-355 de
E/S, 356359
de movimiento,
348-349 de
Pentium II, 359362 de picoJava
II, 364-369
de UltraSPARC II, 362-364
didicas, 349-350
llamadas a procedimientos,
353-354 mondicas, 350352
operaciones, 349-352
Integracin a muy grande escala, 23
Intel 4004, 29, 30
Intel 8008, 29, 30
Intel 8080, 29, 30
Intel 8086, 29, 30
Intel 8088, 29, 30
Intel 8255A, 194-195
Intel 8259A, 169-170
Intel 80286, 30, 30
Intel 80386, 30, 30
Intel 80486, 30, 30
Intel Corporation, 29
Intel IA-64, 388-397
im
pre
cis
a,
27
9
pre
cis
a,
27
9
tra
ns
par
ent
e,
381
Inverso aditivo, 351
Inversor, 119
INVOKEVIRTUAL IJVM,
instruccin, 222225, 242-243
IOR IJVM, instruccin, 222,
223, 237
IQ-Link, tarjeta, 581
IR (vase Registro de
instrucciones) IRETURN IJVM,
instruccin, 222, 223, 225226, 242-243
ISA, nivel, 6,
303-402
direccionami
ento, 342347 flujo de
control, 370383
formatos de
instrucciones, 322332 generalidades,
305-318
modelos de
memoria, 307309 propiedades,
305-307
tipos de datos, 318-321
J
Jerarqua de memoria, 69- 70
Jobs, Steve, 23
JOHNIAC, 17
Joy, Bill, 32
JVM (vase Mquina Virtual Java)
Latch D, 143
con reloj, 143
Latch SR, 141-142
con reloj, 142-143
Latencia, 51
rotacional
, 71
Latin-1, 111
LBA (vase Direccionamiento por
bloque lgico)
LCD (vase Pantalla de cristal
lquido)
LDC_W IJVM, instruccin, 222, 240
LDT (vase Tabla de descriptores
locales) LED (vase Diodo emisor de
luz) Lenguaje
de alto nivel, 7
de
mquina,
1
ensambla
dor
caractersticas, 484485 enunciados, 488491 razones para usar,
485-488
seudoinstrucciones, 491493 fuente, 483
objetivo, 483
Levantamiento de cdigo, 281
Ley
de Amdahl, 541
De Morgan, 125-126
Moore, 25
Libro
Amarillo, 81
Anaranjado, 84
Rojo, 80
Verde, 83
6
6
2
Linda, 604-606
Lnea de cach, 67, 266, 565
Lneas por pulgada, 104
Lista
de control de
acceso, 468 libre,
433
Literal, 501
Macro, 494-498
definicin de,
494 expansin
de, 494
implementaci
n de, 498
llamada de, 494
parmetro de,
496
Macroarquitectura, 218
Magnitud con signo, 637
Mainframe, 28
MAL (vase Microlenguaje
ensamblador) Manejador
de bus, 158
de dispositivo, en Windows
NT, 452 de interrupciones,
90
de trampas, 379
MA
NIA
C
Man
tisa,
644
Mapa
de bits, 320
de memoria, 406
Mqui
na
ana
ltic
a,
14
de
diferencia
s, 13 de
estado,
204
NDICE
663
de estados finitos
prediccin de ramificacin,
274-275 unidad de bsqueda
de instrucciones,
2
5
0
-
2
5
1
de
impres
in,
103
mu
lti
niv
el,
4-
7 virtual,
2-4
Mquina virtual Java, 34-35
formatos de instruccin,
330-332 generalidades,
317-318 instrucciones,
364-368
modos de direccionamiento,
346-347 tipos de datos, 321
torres de Hanoi, 386-389
Mquina virtual paralela, 599-600
MAR (vase Registro de direccin de
memoria) Marcador, 277
Marco
de pgina, 408
de variable local, 218, 220
Mscara, 349
MASM,488
seudoinstrucciones, 491-493
Matriz activa, presentacin de, 95
Mauchley, John, 16-17
MBR (vase Registro de buffer de
memoria) McNealy, Scott, 32
MDR (vase Registro de datos de
memoria)
Medio sumador, 135-136
Medios tonos, 104
Mejor ajuste, algoritmo de, 420
Memoria, 56-68,
141-154 asociativa,
420-421, 505
cach, 30,65-67,
265-270
con mapeo directo, 267-269
de asignacin de escritura,
270, 566 de conjunto
asociativo, 269-270
de escritura diferida, 270
de escritura inmediata,
270, 565 de escritura
una vez, 568
de mltiples niveles,
265-266 de nivel 2,
265
de protocolo MESI,
568-569 de
reescritura, 270
dividida, 67,
265 espionaje
de, 564-569
estrategia de
actualizacin, 566
estrategia de
invalidacin, 566
unificada, 67
compartida a nivel de aplicaciones,
601-609
compartida distribuida,
DSM, 602 de acceso
aleatorio, 152-154
RAM dinmica, 152
RAM
esttica,
152 de
atraccin,
585
de salida de datos
extendida, 152-153 de slo
lectura, 153, 154
de video, 96
EDO, 152-153
(vase Memoria de
salida de datos extendida)
EEPROM, 152, 154
EPROM, 153, 154
flash, 153-154
FPM, 152
(vase Modo de pgina
rpida, memoria en)
primaria, 56-68
PROM, 153, 154
RAM dinmica, 152, 154
RAM esttica, 152, 154
ROM,
153,
154
secund
aria,
68-88
semntica de la (vase Semntica
de la
m
e
m
o
r
i
a
)
virtual, 404-429
de Pentium II, 421-426
de UltraSPARC II, 426-428
en comparacin con uso de
cachs, 4284
2
9
en UNIX, 455-456
en Windows NT, 456-458
Menos recientemente
algoritmo del,
2
6
9
,
utilizado,
4
1
2
4
1
3
Mensajes, paso de, 598-601
Merced
(vase
IA-64)
MESI, protocolo de cach, 568569
Mtodo, 354
de comunicacin, 549-550
MFT (vase Tabla
principal de archivos) Mic1, 213-252
trayectoria de
datos, 214
implementacin,
232-243
implementacin
IJVM, 232-243
microprograma,
234-236
optimacin, 243252
Mic-2, 252-255
trayectoria
de datos,
252
microprog
rama, 253255
prebsque
da, 253
Mic-3, 253-260
filas de procesamiento, 253260 trayectoria de datos, 256
Mic-4, 260-264
trayectoria de datos, 26 l
Mickey, 101
Microarquitectura
Pentium II, 283-288, 296298 picoJava II, 291-298
UltraSPARC II, 288-291, 296-298
Microinstruccin, 45, 211-213
MicroJava, 701
introduccin, 3536
vista a nivel de chip, 180-181
Microkernel, Windows NT, 452
Microlenguaje ensamblador, 227-232
Microoperacin, 262
Micropaso, 257
Microprograma, 6, 11-13
Microprogramacin, 8-9
Microsoft, 24
MIMD, computadora, 551-553
MIPS (acrnimo),
48 chip, 46
MIR (vase Registro de microinstruccin)
MISD, computadora, 551-552
MMU (vase Unidad de administracin
de memoria)
MMX (vase Extensiones multimedios)
Modelo(s)
de comunicacin, 526530 de consistencia, 560
del conjunto de trabajo, 412
Mdem, 98
Modo
8086 virtual, 312
de compartimiento falso,
603 de kernel, 307
de pgina rpida, memoria en,
152 de registro, 334
de transferencia asincrnica, 596-597
de usuario, 307
Modos de direccionamiento, 333342 explicacin, 347
JVM, 346-347
Pentium II, 344-346
UltraSPARC II, 346
Modulacin, 106-107
de
frecue
ncia,
107
dibit,
107
por desplazamiento
l 07
de frecuencia,
d
u
l
o
de memoria dual en lnea, 68
de memoria individual
en lnea, 68 objeto,
511-512
M
o
n
i
t
o
r
,
9
3
M
on
tc
ul
o,
31
7
Moore,
Gordon,
25, 29
M
O
S
,
1
2
0
M
o
t
i
f
6
6
4
4
4
9
Mo
tor
ola
68
00
0,
45
Movimiento
de datos,
instruccin de, 3483
4
9
MPC (vase Contador de
microprograma)
MPI
(vase Interfaz de paso de
mensajes) MPP
(vase
Enlace
masivamente
paralelo)
Multicomputadora,
56, 527,
552-553, 586-609
COW, 592-598
Cr
ay
T
3
E,
58
959
0
es
ca
la
bl
e,
52
9
MPI, 600-601
NOW, 592-598
Option
Red,
590-592
planifica
cin de,
593-595
PVM, 599-600
software de comu~icacin, 598-601
M
U
L
T
I
C
S
desarrollo de, 487
enlazado dinmico en,
515-516 memoria
virtual en, 420-421
Multidifus
in, 550
Multienla
ces, 544
Multihilos (Vase
Multienlaces)
Multiplexor, 130
Multiprocesador, 55, 526-530,
559-586 basado en
directorios, 575-585
DASH,
577-580
espionaje,
564-569
multietapas,
571-573
NUMA, 573-585
NUMA-Q,
581-585
simtrico, 559,
564-573
transversal,
569-57 l
UMA basada en bus, 564-569
Multiprogramac
in, 22
M
ut
ex
,
47
3
Myhrvold,
Nathan, 26
Myrinet,
597-598
NDICE
665
N
NaN (vase No es nmero)
NC-NUMA (vase NUMA no
coherente) Nemtica torcida, 94
Nibble, 360
NIC (vase Chip de
interfaz de red) Nivel, 2-4
de arquitectura del
conjunto de
instrucciones, 6
de dispositivos, 5, 118
de lenguaje ensamblador,
483-522 de lgica digital,
5, 117-202
de mquina del sistema operativo,
6, 403-482 de microarquitectura, 5,
203-302
No es nmero, 650
Nodoi,463
NOP IJVM, instruccin, 222, 236
NORMA (vase Sin acceso remoto a
memoria) Norma de punto flotante
IEEE 754, 646-650
Normalizado, 646
Notacin
de microinstruccin, 227-232
en exceso, 638
infija, 338
polaca, 338-342
inversa, 338-342
posfija, 338
NOW (vase Red de estaciones
de trabajo) Noyce, Robert, 21, 29
NTFS (vase Sistema de
archivos NT) Nueva
tecnologa de Windows, 450
NUMA (vase Acceso a memoria no
uniforme)
con cach coherente, 574,
575-585 no coherente,
574
NUMA-Q, multiprocesador, 581-585
Nmero(s)
binario, 631642
negativo,
637-640
de doble precisin, 318
de
precisin
finita,
631-633
de punto
flotante,
643-651
desnorma
lizado,
649
hexadeci
mal, 633
o
Obj archivo, 506
Objetivo, del bus PCI, 185
OC-12, 596
p
Pgina, 406
comprometid
a, 457 de
cdigo, 111
libre, 457
reservada, 457
Paginacin, 405-407
implementacin,
407-409 por
demanda, 409-412
Palabra, 58
de cdigo, 61
de estado del programa, 31 O
en Pentium
11, 425
Paleta de colores, 97
Pantalla
Paralelismo
a nivel de
bloques, 547 de
grano fino, 525
de grano grueso, 525
granularidad, 547-548
nivel de instrucciones,
49-53 nivel de
procesos, 53-56
Paro
de la cola de procesamiento, 258,
272
de la fila de procesamiento, 272
Pasada de ensamblador, 499
Pascal, Blaise, 13
PC (vase Contador de
programa) PDP-1, 19
PDP-8, 19
Peligro, 258
Pentium 11
bus en filas de procesamiento,
174-175 conexiones de
terminales, 172-174 control de
potencia, 171-172
empaquetado, 171
en modo real, 311
formatos de instruccin, 327328 generalidades a nivel de
chip, 170-175 generalidades del
nivel ISA, 311-313 instrucciones,
359-362
introduccin, 29-31
memoria virtual, 421-426
microarquitectura, 283-288,
296-298 modo 8086 virtual,
312
modos de direccionamiento,
344-346 registros, 312-313
tipos de datos, 320
torres de Hanoi, 384385 transaccin de
bus, 174-175
6
6
6
unidad de
bsqueda/decodificacin,
285-286 unidad de
despacho/ejecucin, 286287 unidad de retiro, 287288
PicoJava I, diseo en, 35
PicoJava II, diseo en
fila de procesamiento, 293294
formatos de instruccin de
JVM, 330-332
generalidades del nivel
JVM ISA, 317-318
instrucciones, 364-369
introduccin, 35
microarquitectura, 291-298
modos de
direccionamientode NM,
346-347 paso a paso, 293
perspectiva a nivel
de chip, 179-181
plegado, 294-296
plegado de
instrucciones, 294296 tipos de datos de
JVM, 321
torres de Hanoi, 386-389
Pila, 218-219
de operandos, 219-221, 226-227
PIO, chip, 194-195
Pista, 70
Pixel, 96
PLA (vase Arreglo lgico
programable) Planificacin de
multicomputadoras, 593-595
Plantilla, 605
Plegado de instrucciones, en picoJava
11, 294-296
Poltica de reemplazo de pginas,
412-414
POP IJVM, instruccin, 222, 223,
233, 237
Porcin de bit (bit slice), 139
Portadora, 106
POSIX, 447
Prembulo, 70
Prebsqueda, 544
Predicacin, 393-395
Prediccin de
ramificaciones, 270276 dinmica, 273275
esttica, 275-276
Primer ajuste, algoritmo de, 420
Primera
generacin de
computadoras, 16-19
ley del software de
Nathan, 26
Primero en entrar, primero en salir,
algoritmo,
4
1
3
Principio de localidad, 66
Principios de diseo RISC, 47-49
Problema del productor-consumidor,
438-445
Procedimiento,
372-376
recursivo,
372
Procesador, 39-56
masivamente paralelo, 553,
587-592 vectorial, 54, 555559
Procesamiento
con instrucciones explcitamente
paralelas,
3
9
1
3
9
3
en paralelo, 436-445
Proceso
hi
jo
,
47
0
lig
er
o,
54
7
Programa, 1
automodific
able, 336
binario ejecutable,
484, 506 objeto,
484
Programador de sistemas, 7
Prlogo de procedimiento, 375
NDICE
667
PROM
borrable, 153, 154
(vase ROM
programable)
Propiedad de
integridad, 123
Protocolo de bus, 157
Prueba comparativa
(Benchrnark), 486
PSW (vase Palabra de estado
del programa) Pthreads, 472
Punto(s)
de
cdigo
, 111
de
cruce
, 570
de
entrada,
511 por
pulgada,
102
PVM (vase Mquina virtual
paralela)
R
RAID, 76-80
RAM (vase tambin Memoria
de acceso aleatorio)
de video,
97
dinmica,
152, 154
esttica,
Ramificacin, instruccin de, 352-353
lgico, 431
152, 154
Ranura
vectorial, 54
de correo, 475
virtual, 218
de retraso, 272
Reloj, 139-141
conmutaci
n, 535538
topologa,
532-535
de malla, 534
digital de servicios
integrados, 108-109 en
estrella, 534
no bloqueadora, 570
Redondeo,645
Reed-Solomon, cdigo, 71
Ref
e
r
e
n
c
i
a
e
x
t
e
r
n
a
,
5
0
9
hacia adelante, problema de la,
499
Refresco de memoria, 152
Registro, 5, 145-146
de buffer de memoria, 209-212,
232, 238,
2
5
0
2
5
2
de datos de memoria, 209-211
de desplazamiento, para
almacenamiento de saltos, 275
de direccin de
memoria, 209-211 de
instrucciones, 40
de microinstruccin, 215
E,589
en el nivel ISA, 309-310
H, 205, 228-229
de control, 209
negada, 151
Separacin entre sectores, 71
Sequent NUMA-Q, multiprocesador, 581-
Sistema
bsico de
entrada/salida, 74
de archivos NT,
465
de archivos,
Windows NT, 452
de memoria
compartida (vase
Ratn, 99
RAW,dependencia, 258
Receptor-transmisor universal
asincrnico, 98,
1
9
3
Recolector, 118
de basura, 31 7
de conmutacin,
535-538 de
cuadrcula, 534
de doble cilindro, 534
de estaciones de trabajo, 28,
553, 592593
de interconexin, 530-532
biseccin del ancho de
banda, 532 comercial,
595-598
6
6
8
Mult
iproc
esad
or)
de memoria distribuida,
529, 602-604
hardware del, 574
dbilmente
acoplado,
525
escalable,
543
fuertemente
acoplado,
526
operativo, 911, 403
por lotes, 11
SLED (vase Disco nico,
grande y caro) SMP
(vase Multiprocesador
simtrico) Socket, 447
SO-DIMM (vase DIMM de
contorno pequeo)
Software para computadora paralela,
545-546 de comunicacin, 598609
de planificacin, 593-595
Solaris, 447
Solicitud de bus, 165-167
SP (vase Apuntador a la pila)
5
8
5
Servicios del sistema,
Windows NT, 453
Sesgo, 536
de bus, 160
Sesin, CD-ROM de, 85
Seudoinstruccin, 491
Rutina de servicio de
interrupcin, 380-383
en lnea)
Sin acceso remoto a
memoria, 553
Sincronizacin
de procesos con
semforos, 442-445
del bus,
160-165
primitiv
a, 550551
Sintonizacin de programas,
486
SISD, computadora, 551
s
Salida estndar, 461
Saludo completo, (Full
handshake), 164
SBus, 177
NDICE
669
ciclo de reloj,
139
de ligado, 512-515
Tabla
Tinta
de asignacin de
basada
en
archivos, 465 de
colorantes,
contenido del
105 basada en
volumen, 85 de
pigmentos,
descriptores globales,
105
de
421 de descriptores
impresora
a
locales, 421
color, 105
de memoria local, 582
Tipos de datos
de
no
pginas,
numricos,
406 de
319-321
smbolos,
numricos,
499 de
319-321
traduccin
Tipos de instrucciones, en el
, 428 de
nivel ISA, 348verdad,
370
120
TLB (vase Buffer de
principal de archivos, 469
consulta para
Tamao
traduccin)
de grano, 525
Tope del registro de pila, 205,
de pgina, 414-415
232
Tarjeta
Topolo
de
ga,
lnea
532,
535
596
virtu
mad
al,
re,
601
89
Recursin, 354
instrucciones reducido)
Quad, 581
Red
ROB (vase Buffer de resurtido)
Tasa de fallos, 66
bloqueadora, 573
Robo de ciclos, 90, 359
TAT-12/13, 26
conmutadora multietapas, 571-573
ROM
Taxonoma de computadoras
cbica, 534
programable, 153, 154
paralelas, 551de anillo, 534
(vase Memoria de slo lectura)
553
de rbol, 534
RS-232-C, terminal, 98-99
Teclado, 92
de rbol grueso, 534
Ruta absoluta, 461
Temporizacin de bus, 160-163
Tercera generacin de
computadoras, 21-23
Terminal, 91-99
de mapa de bits, 96-98
de mapa de caracteres, 96
Terminales de los circuitos
integrados, 154
Tiempo
compartido,
sistema de, 11 de
u
UART (vase Receptor Transmisor
Universal
Asincrnico)
UDB (vase Buffer de datos de
UltraSPARC) Ultra puerto, arquitectura
de, 177
UltraSPARC 1, 33
UltraSPARC 11
buffer de datos, 177
cola de procesamiento, 290-291
formatos de instruccin,
328-330 generalidades del
nivel ISA, 313-316
instrucciones, 362-364
introduccin, 31-34
memoria virtual, 426-428
microarquitectura, 288-291,
296-298 modos de
direccionamiento, 346
perspectiva a nivel de chip,
176-179 tipos de datos, 321
torres de Hanoi, 384-387
ventanas de registro, 315-316
UMA (vase Acceso uniforme a Ja
memoria) Un solo programa,
mltiples datos, 548
UNICODE, 111-112
Unidad
aritmtica lgica, 5, 40, 138-139,
204-209
central de procesamiento, 39-56
de administracin de
memoria, 409 de
almacenamiento temporal,
262
de bsqueda de instrucciones,
249-252 de
bsqueda/decodificacin,Penti
um 11,
2
8
5
2
8
6
de despacho/ejecucin, Pentium II,
285-286 de enteros, 33
de retiro, Pentium 11, 287-280
decodificadora, 261
UNIX
administracin de procesos, 470473
Berkeley, 447
cola de
procesamiento,
470 descriptor de
archivo, 459
directorio, 461463
E/S virtual, 459-465
enlace, 471-473
implementacin del sistema de
archivos,
461-465
introduccin,
446-449
llamadas al
sistema, 459-465
Solaris, 447
System V, 447
UPA (vase Arquitectura
ultrapuerto) USART, 193
USB (vase Bus Serie Universal)
Uso de buffer comn, 537
V
Variable de condicin, 473
VAX, 45, 46
V
e
c
t
o
r
,
5
5
5
de interrupcin, 169, 380
V
e
n
t
a
n
a
,
9
7
Ventanas
de
registros, 315-316
VIS
(vase
Conjunto
de
instrucciones
visuales)
VLSI
(vase Integracin a muy grande
escala) Von Neumann
John,
17-18
mqui
na de,
18, 41
VTOC (vase Tabla de
contenido del
v
o
l
u
m
e
n
)
w
W
E
I
ZAC
, 17
Whirlw
ind 1,
18
WIDE IJVM, instruccin, 222,
239-240
Wilkes,
Maurice, 44
Win32,
subsistema, 453
Win32
API,
454
Winchester,
disco, 71
Window
s 95, 449
Window
s 98, 450
Win
dow
sNT
administracin de procesos,
473-476 administrador de
memoria virtual, 452
administrador de objetos, 452
capa de abstraccin de hardware,
451
E/S virtual, 465-470
interfaz con dispositivos
grficos, 452 introduccin,
450-455
llamadas Win32API, 466-468
microkerne
l, 452
seguridad,
452, 468
sistema de archivos, 469-470
Wo
znia
k,
23
X
X
Window
s, 449
X
e
o
n
,
3
1
z
Zil
og
Z8000,
45
Zuse,
Konrad,
15
005.'ljJ
T1';4e4E4e
c.2.
53~5