Sei sulla pagina 1di 57

THE VON NEUMANN MODEL

En las primeras computadoras electrnicas, programar era sinnimo de conectar


cables. No exista la arquitectura en capas (layered architecture), por lo que
programar una computadora era ms una hazaa de ingeniera elctrica que un
ejercicio de diseo de algoritmos. Antes de que su trabajo en la ENIAC estuviera
completo, John W. Mauchly and J. Presper Eckert concibieron una manera ms fcil
de cambiar el comportamiento de su mquina calculadora.
Ellos estimaron que los dispositivos de memoria, en la forma de lneas de
retardo de mercurio, podan proveer una manera de almacenar instrucciones de
programa. Esto terminara por siempre con el tedio de recablear el sistema cada
vez que hubiera un nuevo problema por resolver, o uno viejo por depurar.
Mauchly y Eckert documentaron su idea proponindola como el fundamento de su
prxima computadora, la EDVAC. Desafortunadamente, mientras estaban envueltos en
el proyecto altamente secreto de ENIAC durante la segunda guerra mundial,
Mauchly y Eckert no podan publicar inmediatamente su revelacin.
Tales prohibiciones, no se aplicaban a un nmero de personas trabajando en la
periferia del proyecto ENIAC. Una de estas personas era un famoso matemtico
llamado John von Neumann. Despus de leer la propuesta de Mauchly y Eckert para
el EDVAC, von Neumann public y publicit la idea. Expres el concepto de manera
tan efectiva que la historia le ha acreditado su invencin. Todas las
computadoras de programas almacenados han llegado a conocerse como sistemas von
Neumann usando la arquitectura von Neumann.
La versin actual de la arquitectura de las computadoras de programas
almacenados (stored-program), satisface al menos las siguientes caractersticas:
Consiste de tres sistemas de hardware: una unidad central de proceso (CPU) con
una unidad de control, una unidad aritmtico lgica (ALU), registros (pequeas
reas de almacenamiento), un program counter, un sistema de memoria principal,
que almacena programas que controlan las operaciones de la computadora, y un
sistema de entrada y salida (I/O).
Capacidad para llevar a cabo procesamiento secuencial de instrucciones.
Contiene un solo camino (path), ya sea fsico o lgico, entre la memoria
principal del sistema y la unidad de control del CPU, forzando la alternacin de
ciclos de instruccin y ejecucin. Este camino es referido a menudo como el
cuello de botella von Neumann.

La figura muestra como estas caractersticas trabajan juntas en los sistemas de


computadoras modernos. El sistema pasa todas sus I/O a travs de la ALU (en
realidad a travs del acumulador, que es parte de la ALU). Esta arquitectura
corre programas en lo que se conoce como el ciclo de ejecucin von Neumann
(tambin llamado fetch-decode-execute cycle), el cual describe cmo trabaja la
mquina.
Una iteracin de este ciclo es la siguiente:
1. La unidad de control hace un fetch de la siguiente instruccin del programa de
la memoria, usando el PC para determinar la ubicacin de la misma.
2. La instruccin se decodifica en un lenguaje que la ALU puede comprender.
3. Cualquier dato (operando) requerido para ejecutar la instruccin es trado de
la memoria y ubicado en registros dentro de la CPU.
4. La ALU ejecuta la instruccin y ubica los resultados en registros o en la
memoria.
Las ideas presentes en la arquitectura de von Neumann han sido extendidas de
modo que los programas almacenados en medios de almaceniamento de acceso lento,

como discos duros, puedan ser copiados a medios de rpido acceso, voltiles,
como RAM, previo a la ejecucin. Esta arquitectura tambin se ha simplificado en
lo que actualmente se llama el modelo de sistema de bus (system bus model) que
se muestra en la figura 1.5. El bus de datos mueve datos de la memoria principal
a los registros del CPU y viceversa. El bus de direcciones contiene la direccin
del dato a la que el bus de datos est accediendo actualmente. El bus de control
lleva las seales de control necesarias que especifican cmo debe llevarse a
cabo la transferencia de la informacin.
Otras mejoras a la arquitectura de von Neumann incluyen utilizar registros
indexados para direccional, agregar datos de punto flotante, usar interruciones
y I/O asncronos, agregar memoria virtual y registros generales.

1.8 NONVON NEUMANN MODELS


Hasta recientemente, casi todas las computadoras de propsito general utilizaban
el dieo de von Neumann. Sin embargo, el cuello de botella de von Neumann
contina frustrando a los ingenieros que buscan maneras de construir sistemas
ms rpidos que sean econmicos y compatibles con el basto cuerpo de software
comercial disponible. Los ingenieros que no estn obligados a mantener
compatibilidad con los sistemas de von Neumann son libres de usar muchos modelos
distintis de computar. Un nmero de subreas cae en la categora no-von Neumann,
incluyendo redes neurales (usando ideas de modelos del cerebro como paradigma de
computacin), algoritmos genticos (explotando ideas de la biologa y la
evolucin del ADN), computacin cuntica y computadoras paralelas. Hoy, el
procesamiento paralelo resuelve algunos de los problemas ms grandes casi en el
mismo modo que los colonos del viejo oeste resolvan sus problemas usando bueyes
paralelos. Si estaban usando a un buey para mover un rbol y el buey no era lo
suficientemente grande o fuerte, ciertamente no necesitaban tratar de criar un
buey ms grande, usaban dos bueyes. Si una computadora no es lo suficientemente
rpida o poderosa, en lugar de tratar de desarrollar una computadora ms rpida

y poderosa, por qu no usar simplemente mltiples computadoras. Esto es


precisamente lo que hace la computacin paralela. Los primeros sistemas de
procesamiento paralelo se construyeron en los 60 y solo tenan dos procesadores.
Los 70s vieron la introduccin de las supercomputadoras con 32 procesadores y
los 80s trajeron los primeros sistemas con ms de 1000 procesadores. Finalmente
en 1999, IBM anunci la construccin de una super computadora llamada Blue Gene.
Este masivo computador paralelo contiene ms de un milln de procesadores, cada
uno con su memoria dedicada. Su primera tarea es analizar el comportamiento de
molculas de protenas.
Sin embargo, incluso la computacin paralela tiene sus lmites. A medida que
aumenta el nmero de procesadores, tambin lo hace la sobrecarga de manejar cmo
las tareas se distribuyen a esos procesadores. Algunos sistemas de procesamiento
paralelo requieren procesadores extra slo para manejar el resto de los
procesadores y los recursos que se les asignan.
Sin importar cuantos procesadores se pongan en un sistema, o cuantos recursos se
les asignen, de alguna manera, en algun lugar, un cuello de botella es propenso
a desarrollarse. Lo mejor que se puede hacer para remediar esto es asegurarse de
que las partes ms lentas del sistema sean las menos utilizadas. Esta es la idea
detrs de la ley de Amdahl, que asegura que la mejora obtenida en el rendimiento
de un sistema debido a la alteracin de uno de sus componentes est limitada por
la fraccin de tiempo que se utiliza dicho componente. La premisa subyacente es
que cada algoritmo tiene una parte secuencial que en ltima instancia limita el
aumento de velocidad que puede ser alcanzado por la implementacin del
multiprocesador.

CAPITULO 6 MEMORIA
La mayora de las computadoras se constuyen utilizando el modelo de Von Neumann,
el cual est centrado en la memoria. Los programas que desempean el
procesamiento estn almacenados en memoria.
Examinamos una pequea memoria de 4x3 bits en el captulo 3 y aprendimos a
direccional memoria en los captulos 4 y 5. Sabemos que la memoria est
lgicamente estructurada como un arreglo lineal de locaciones, que se
direccionan desde 0 hasta la mxima direccin de memoria que el procesador pueda
direccionar.
ETC

6.2 TIPOS DE MEMORIA


Continuamente se introducen nuevas tecnologas de memoria que tratan de igualar
las mejoras en el diseo de la CPU la velocidad de la memoria tiene que, de
alguna forma, mantener el ritmo de la CPU, o la memoria se convierte en un
cuello de botella.
Las mejoras en la memoria principal para mantener el ritmo de la CPU no son tan
crticas debido a la memoria cach. La memoria cach es un tipo de memoria
pequea, de alta velocidad (y por lo tanto alto costo), que sirve como buffer
para datos frecuentemente accedidos. El costo extra de usar tecnologas muy
rpidas para la memoria, no siempre puede ser justificado porque memorias ms
lentas pueden esconderse detrs de sistemas de cach de alta performance.
Sin embargo, antes de discutir la memoria cach vamos a ver las diversas
tecnologas de memoria.
Aunque existe un largo nmero de tecnologas de memoria, solo hay dos tipos
bsicos: RAM (random access memory) y ROM (read-only
memory). RAM es un nombre poco apropiado, ms apropiado sera llamarla de
lectura-escritura. RAM es la memoria a la que se refieren las especificaciones
de las computadoras. Es tambin la memoria principal a la que continuamente
hacemos referencia. Frecuentemente llamada memoria primaria, la RAM se utiliza
para almacenar programas y datos que la computadora necesita al ejecutar
programas, pero es voltil, y pierde su informacin una vez que se apaga. Hay
dos tipos generales de chips que se usan para construir el cuerpo de la memoria
RAM en las computadoras de hoy: SRAM y DRAM (static y dynamic RAM)
La RAM dinmica est construida de pequeos capacitores que pierden electricidad.
La DRAM requiere una recarga cada tantos milisegundos para mantener sus datos.
En contraste, la tecnologa esttica, mantiene su contenido mientras haya
electricidad. La SRAM consiste en circuitos similares a los flip-flops D, es ms
rpida y mucho ms cara que la DRAM, sin embargo, los diseadores usan DRAM
porque tiene mayor densidad (puede almacenar ms bits por chip), usa menos
energa, y genera menos calor que la SRAM. Por estas razones, ambas tecnologas
usualmente se combinan: DRAM para memoria principal y SRAM para cach. La
operacin bsica de todas las memorias DRAM es bsicamente la misma, pero hay
muchos sabores incluyendo:

Multibank DRAM (MDRAM), Fast-Page Mode (FPM) DRAM, Extended


Data Out (EDO) DRAM, Burst EDO DRAM (BEDO DRAM), Synchronous
Dynamic Random Access Memory (SDRAM), Synchronous-Link (SL) DRAM,
Double Data Rate (DDR) SDRAM, and Direct Rambus (DR) DRAM.
Los diferentes tipos de SRAm incluyen SRAM sincrnica, asincrnica y pipeline
Bursa SRAM.
Adems de la RAM, la mayora de las computadoras contienen una pequea cantidad
de ROM que almacena informacin crtica necesaria para operar el sistema como la
lo necesario para arrancar la computadora. ROM no es voltil y siempre mantiene
los datos. Este tipo de memoria es utilizada tambin en sistemas embebidos o
cualquier sistema donde la programacin no necesita cambiar. Muchos
electrodomsticos, juguetes y la mayora de los automviles utilizan chips de
ROM para mantener la informacin cuando no hay energa. Las ROM se utilizan
tambin en calculadoras y perifricos, como impresoras laser que almacenan sus
fuentes en ROMs. Hay cinco tipos bsicos diferentes de ROM:
ROM, PROM, EPROM, EEPROM y memoria flash.
PROM (programmable read-only memory) es una variante de la ROM. PROMs pueden
ser programadas por el usuario con el equipo apropiado, mientras que las ROMS
son hardwired, las PROMs tienen fusibles que pueden fundirse para programar el
chip. Una vez programado, los datos e instrucciones en los PROM no pueden
cambiarse.
EPROM (erasable PROM) es programable, con la ventaja de que es reprogramable
(borrar una EPROM requiere una herramienta especial que emite luz ultravioleta).
Para reprogramar la EPROM, todo el chip tiene que ser borrado primero.
EEPROM (electrically erasable PROM) elimina muchas de las desventajas de la
EPROM: no se requieren erramientas especiales para borrarla (esto se realiza
aplicando un campo elctrico) y se pueden borrar solo porciones del chip, un
byte por vez.
Flash memory es escencialmente EEPROM con el beneficio agregado de que la
informacin puede ser escrita o borrada en bloques, eliminando la limitacin de
un byte por vez. Esto hace que la memoria flash sea ms rpida que la EEPROM.

6.3 JERARQUIA DE LA MEMORIA


Una de las consideraciones ms importantes para comprender las capacidades de
performance de un procesador moderno es la jerarqua de la memoria.
Desafortunadamente, como hemos visto, no toda la memoria se crea de la misma
manera, y algunos tipos son mucho menos eficientes y por lo tanto ms baratos
que otros. Para manejar esta disparidad, los sistemas de las computadoras
actuales usan una combinacin de tipos de memoria para proveer la mejor
performance al mejor costo. Este enfoque se llama memoria jerrquica
Como regla, cuando ms rpida es la memoria, ms caro es su costo por bit de
almacenamieto. Utilizando una jerarqua de memorias, cada una con distintas

velocidades de acceso y capacidades de almacenamiento, un sistema de computadora


puede exhibir performance por sobre lo que sera posible sin una combinacin de
los varios tipos. Los tipos bsicos que normalmente constituyen la memoria
jerrcica incluyen registros, cach, memoria principal y memoria secundaria. En
cada una de las computadoras actuales hay una pequea porcin de memoria de muy
alta velocidad llamada cach, donde los datos de locaciones de memoria
frecuentemente utilizados pueden estar temporalmente almacenados. Esta cach es
conectada a una mucho ms grande memoria principal, la cual es tpicamente de
mediana velocidad. Esta memoria es complementada por una ms grande an memoria
secundaria, compuesta de un disco rgido y varios medios removibles. Utilizando
un sistema jerrquico, uno puede mejorar la velocidad de acceso efectiva de la
memoria, usando solo un pequeo nmero de chips rpidos (y caros). Esto permite
a los diseadores crear una computadora con performance aceptable a un costo
razonable.
Clasificamos la memoria de acuerdo a su distancia del procesador, con la
distancia medida por el nmero de ciclos de mquina requeridos para el acceso.
Cuando ms cerca est la memoria del procesador, ms rpido debera ser. A
medida que la memoria se aleja del procesador principal, podemos afrontar
tiempos de acceso ms largos.
De este modo, las tecnologas ms lentas se utilizan para estas memorias, y las
ms rpidas se utilizan para memorias ms cerca de la CPU. Cuanto mejor es la
tecnologa, ms rpida y ms cara se vuelve la memoria. As, las memorias ms
rpidas tienden a ser ms pequeas que las ms lentas, debido al costo.
La siguiente terminologa se utiliza para referirse a esta jerarqua de memoria:
HitEl dato requerido reside en un nivel de memoria dado (tpicamente, nos
importa el hit-rate solo en niveles ms altos de memoria)
MissEl dato requerido no se encuentra en el nivel dado de memoria.
Hit rateEl porcentaje de accesos a memoria encontrados en un nivel de memoria
dado.
Miss rateEl porcentaje de accesos a memoria no encontrados en un nivel de
memoria dado. Miss Rate = 1 - Hit Rate.
Hit timeEl tiempo requerido para acceder a la informacin en un nivel dado de
memoria.
Miss penaltyEl tiempo requerido para procesar un miss, el cual incluye
remplazar un bloque en un nivel de memoria superior, ms el tiempo adicional
para entregar los datos solicitados al procesador. (El tiempo para procesar un
miss es tpicamente significantmente ms largo que el tiempo para procesar un
hit.)

Este dibujo en forma de pirmide nos ayuda a indicad los tamaos relativos de
estas varias memorias. Las memorias ms cercanas al tope tienden a ser menores
en tamao, sin embargo, estas memorias ms pequeas tienen mayor performance y
por lo tanto mayor costo (por bit) que las memorias que se encuentran ms abajo
en la pirmide.
Los nmeros a la izquierda indican tiempos de acceso tpicos. Para cualquier
dato dado, el procesador enva su pedido a la particin ms rpida y pequea de
memoria (tpicamente cach, porque los registros tienden a ser de propsito ms
especial). Si el dato se encuentra en cach, puede ser cargado rpidamente en la
CPU. Si no, el pedido es reenviado al siguiente nivel ms abajo en la jerarqua
y el proceso de bsqueda comienza nuevamente. Si el dato se encuentra en este
nivel, todo el bloque en el que reside el dato es transferido a cach. Si no, el
pedido se reenva al siguiente nivel ms abajo, y as sucesivamente.
La idea clave es que cuando el ms bajo (lento, grande, y barato) de los niveles
de jerarqua responde a un pedido de ms altos niveles por el contenido de la
locacin X, tambin enve, al mismo tiempo, los datos localizados en las
direccines X+1, X+2 devolviendo de este modo un bloque completo de datos al
nivel mayor de memoria. La esperanza es que estos datos extras sean
referenciados en el futuro cercano, lo cual, en la mayora de los casos, sucede
as.
La jerarqua de la memoria es funcional porque los programas tienden a presentar
una propiedad conocida como localidad la cual frecuentemente permite al

procesador acceder a los datos devueltos por las direcciones X+1, X+2 y as
sucesivamente. De este modo, aunque haya un miss para el, digamos cach, para X,
puede que haya varios hits en cach con el recientemente devuelto bloque, debido
a la localidad.

6.3.1 Localidad de las referencias


En la prctica, los procesadores tienden a acceder a la memoria en siguiendo un
patrn. Por ejemplo, en ausencia de bifurcaciones, el PC en MARIE es
incrementado en uno despus de cada fetch. De este modo, si se accede a la
posicin de memoria X en un tiempo t, hay una alta probabilidad que la posicin
de memoria X+1 sea accedida en un futuro cercano. Esta agrupacin de referencias
a memoria es un ejemplo de localidad de referencias. Esta localidad puede ser
explotada implementando la memoria como jerarqua; cuando se procesa un miss, en
lugar de simplemente transferir el dato solicitado a un nivel ms alto, el
bloque completo que contiene el dato es transferido. Debido a la localidad de
referencia, es probable que los datos adicionales en el bloque se necesiten en
un futuro cercano, y de ser as, estos datos pueden ser cargados rpidamente de
la memoria ms rpida.
Hay tres formas bsicas de localidad:
Temporal localityLocalidad temporal: Datos accedidos recientemente tienden a
ser accedidos nuevamente en el futuro cercano.
Spatial localityLocalidad espacial: Los accesos tienden a estar agrupados en el
espacio de direcciones (por ejemplo en arreglos o loops)
Sequential localityLocalidad secuencial: las instrucciones tienden a ser
accedidas secuencialmente.
El principio de localidad provee la oportunidad para un sistema de usar una
pequea cantidad de memoria muy rpida para efectivamente acelerar la mayora de
los accesos a memoria.
Tpicamente, solo una pequea cantidad del espacio completo de memoria est
siendo accedido en un tiempo dado, y los valores en ese espacio se acceden
repetidamente. De esta forma, podemos copiar esos valores de una memoria ms
lenta a una ms pequea pero ms rpida que se encuentra ms alta en la
jerarqua. Esto resulta en un sistema de memoria que puede almacenar una larga
cantidad de informacin en una gran memoria de bajo costo, y an provee casi las
mismas velocidades de acceso que resultaran de usar una memoria muy rpida pero
muy cara.

6.4 MEMORIA CACH


El procesador de una computadora es muy rpido y est constantemente leyendo
informacin de la memoria, lo que significa que frecuentemente tiene que esperar
a que llegue la informacin, porque los tiempos de acceso de la memoria son ms
lentos que la velocidad del procesador. Una memoria cach es una pequea,

temporaria, pero rpida memoria que el procesador usa para informacin que es
probable que necesite en un futuro muy cercano.
Existen muchsimos ejemplos de caching fuera de las computadoras. Mantenerlos en
mente ayuda a entender el caching de la memoria de la computadora.
Pensemos en el dueo de una casa con un bal muy grande de herramientas en el
garage. Supongamos que tenemos que hacer un arreglo en el stano. Sabemos que
este arreglo va a requerir taladros, llaves inglesas, martillos, cinta mtrica,
varios tipos de sierras y varios tipos y tamaos de destornilladores. Lo primero
que hay que hacer es medir y cortar madera. Vamos a la cochera, tomamos la cinta
mtrica del bal de herramientas, volvemos corriendo al stano, medimos la
madera, volvemos al garage, dejamos la cinta, agarramos la sierra, volvemos al
stano, cortamos la madera. Ahora decidimos atornillar las maderas. Vamos al
garage, agarramos el taladro, volvemos al stano, agujereamos la madera,
volvemos al garage, dejamos el taladro agarramos una llave, volvemos al stano,
vemos que la llave es del tamao equivocado, volvemos al garage, agarramos otra,
volvemos a bajar. Trabajaras de este modo? No!
Siendo una persona razonable pensas si necesito una llave, es posible que
necesite una de otro tamao muy pronto, as que agarramos todo el set de llaves,
mejor an una vez que haya terminado con cierta herramienta seguramente
necesitar otra, as que juntamos una pequea caja de herramientas y la llevamos
al stano. De este modo, mantenemos las herramientas que necesitamos ms cercas,
para tenerlas rpido. Hemos agarrado algunas de las herramientas para fcil y
rpido acceso. Las herramientas que es menos probable que usemos, permanecen
almacenadas en el lugar que est ms lejos y requiere ms tiempo de acceso.
Esto es lo que hace la memoria cach: almacena datos que han sido accedidos y
datos que es posible que sean accedidos por el CPU en una memoria ms rpida y
ms cercana.
Otra analoga del cach est en la compra de comestibles: Rara vez vamos a
comprar un solo item, compramos los que vamos a requerir de inmediato y los que
posiblemente necesitemos en el futuro. La tienda es similar a la memoria
principal, tu casa es el cach.
Ms ejemplos: gua telefnica y agenda; cuando los estudiantes hacen
investigaciones, van a la librera (memoria principal) y traen a su casa
(memoria cach) todos los libros que podran llegar a necesitar; oficina cajones
(memoria principal) escritorio desorganizado (memoria cach)

La memoria cach trabaja con los mismos principios bsicos que los ejemplos
anteriores, copiando datos utilizados frecuentemente en el cach, ms que
requiriendo accesos a memoria para obtener los datos. La cach puede ser tan
desorganizada como un escritorio y organizada como una agenda. De cualquier
forma, los datos deben ser accesibles (locatable). La memoria cach en una
computadora difiere de los ejemplos cotidianos en un modo muy importante: La

computadora realmente no tiene forma de saber, a priori, cuales son los datos
ms probables de ser accedido, as que usa los principios de localidad y
transfiere bloques enteros de la memoria principal al cach siempre que tiene
que hacer accesos a memoria. Si la probabilidad de usar algo ms en ese bloque
es alta, entonces, tranferir el bloque completo ahorra tiempos de acceso. La
ubicacin de este bloque en memoria cach depende de dos cosas: La poltica de
mapeo del cach, y el tamao (que afecta al espacio que hay para el nuevo
bloque).
El tamao de la memoria cach vara enormemente. En una computadora personal
tpica, el cach de nivel 2 (L2) es de 256K o 512K. La cach de nivel 1 (L1) es
ms pequea, tpicamente 8K o 16K. L1 se encuentra en el procesador, mientras
que la L2 reside entre el CPU y la memoria principal. L1, por lo tanto, es ms
rpida que L2. La relacin entre estas dos puede ilustrarse usando el ejemplo
del almacn, si el almacn es la memoria principal, la heladera es la cach L2 y
la mesa la cach L1.
El propsito de la cach es acelerar los accesos a memoria almacenando data
recientemente utilizada ms cerca al CPU, en lugar de almacenarlo en memoria
principal. Aunque la cach no sea tan larga como la memoria principal es
considerablemente ms rpida. Mientras que la memoria principal est compuesta
tpicamente de DRAM con, digamos, 60ns de tiempo de acceso, la cach est
tpicamente compuesta de SRAM, proveyendo ms rpido acceso con un ciclo mucho
ms corto de tiempo que la DRAM (un tpico tiempo de acceso a cach es de 10ns).
La cach no nececesita ser muy grande para desempearse bien. La regla de oro
general es hacer la cach lo suficientemente pequea para que el costo por bit
se acerque a la memoria principal, pero lo suficientemente grande para ser
beneficiosa. Como esta memoria ms rpida es ms cara, no es viable usar la
tecnologa encontrada en la memoria cach para construir toda la memoria
principal.
Qu hace especial a la cach? La cach no se accede por direcciones si no por
su contenido. Por esta razn a veces se la llama memoria de contenido
direccionable (content addressable memory o CAM). Bajo la mayora de los
esquemas de mapeo de la cach, las entradas deben ser chequeadas o buscadas para
ver si el valor que se requiere est almacenado en la cach. Para simplificar
este proceso de encontrar el dato deseado, se utilizan muchos algoritmos de
mapeo.
6.4.1 Esquemas de mapeo de la cach
Para que la cach sea funcional, debe almacenar datos tiles. Sin embargo, estos
datos se vuelven intiles si el CPU no puede encontrarlos. Cuando accede a datos
o instrucciones, el CPU primero genera una direccin de memoria principal. Si el
dato se ha copiado en el cach, la direccin del dato en el cach no es la misma
que en la memoria principal. Por ejemplo, el dato que se encuentra en la
direccin de memoria principal 2E3 podra estar ubicado en la primer ubicacin
del cach. Cmo encuentra entonces el CPU los datos cuando han sido copiados

al cach? El CPU utiliza un esquema de mapeo especfico que convierte las


direcciones de memoria principal en una ubicacin de cach.
Esta conversin se hace dando especial significado a los bits en la direccin de
memoria principal. Primero dividimos los bits en distintos grupos que llamamos
campos. Dependiendo del esquema de mapeo puede haber dos o tres campos. Cmo los
utilizamos depende de el esquema de mapeo particular que estemos usando. El
esquema de mapeo determina donde se ubica el dato cuando es copiado
originalmente al cach y tambin provee un mtodo para que la CPU encuentre
datos previamente copiados cuando busca en el cach. La memoria principal y el
cach estn ambos divididos en el mismo tamao de bloques (el tamao de estos
bloques vara). Cuando se genera una direccin de memoria principal, primero se
busca en el cach para ver si la palabra solicitada est ah. Cuando la palabra
no es encontrada en cach, todo el bloque de memoria en el que reside la palabra
es cargado en el cach. Como se mencion anteriormente, este esquema es existoso
por el principio de localidad si una palabra ha sido referenciada, hay una
alta probabilidad de que las palabras en la misma vecindad general sean
referenciadas tambin. De esta forma, una palabra perdida usualmente resulta en
muchas palabras encontradas.
Por ejemplo, cuando ests en el stano y necesits herramientas por primera vez,
tens un miss y tenes que ir al garage. Si junts un grupo de herramientas que
podras necesitar y volvs al stano, esperas tener varios hits mientras
trabajs en tu proyecto, y no tener que hacer muchos viajes ms al garage.
Como acceder a una palabra en cach es ms rpido que acceder a una palabra en
memoria principal, la memoria cach acelera el tiempo total de acceso.
As que cmo utilizamos los campos en la direccin de memoria principal? Uno de
los campos apunta a la ubicacin en cach en donde reside el dato si es que est
en cach (cach hit), o donde tiene que ser ubicado si no est (cach miss).
Esto es un poco diferente para el mapeo asociativo.
El bloque de cach referenciado se chequea para ver si es vlido. Esto se hace
asociando un valid bit a cada bloque de cach. Si el bit es 0 significa que ese
bloque no es vlido (tenemos un miss) y debemos acceder a la memoria. Si es 1
significa que es vlido (podramos tener un hit pero falta un paso ms para
estar seguros). Entonces, comparamos el tag en el bloque de cach a el campo tag
de nuestra direccin. (El tag es un grupo especial de bits que se deriva de la
direccin de memoria principal y es almacenado con su correspondiente bloque en
cach). Si los tags son iguales entonces encontramos el bloque deseado (tenemos
un hit). En este punto, tenemos que encontrar la palabra deseada en el bloque.
Esto puede hacerse utilizando una porcin diferente de la direccin de memoria
principal llamada campo de palabra.Todos los mapeos de cach requieren un campo
de palabra; sin embargo, los campos restantes son determinados por el esquema de
mapeo. Veremos tres de estos posibles esquemas:
Cach de mapeo directo

La cach de mapeo directo asigna cach mappings utilizando un enfoque modular.


Como hay ms bloques en memoria principal que en Cach, debera quedar claro que
los bloques de memoria principal compiten por ubicaciones de cach. El mapeo
directo mapea el bloque X de memoria principal al bloque Y de cach, mod N donde
N es el nmero total de bloques en cach. Por ejemplo, si el cach tiene 10
bloques entonces el bloque 0 de memori principal mapea al bloque 0 de cach, el
1 al 1,, el 9 al 9, y el 10 al 0. Esto se ilustra en la figura 6.2 De este
modo, los bloques 0 y 10 (y 20, 30, etc) todos compiten por el bloque 0. Cmo
sabe la cach que bloque se encuentra residiendo en el bloque de cach 0 en un
tiempo dado? La respuesta es que cada bloque se copia a la cach y se identifica
con el tag previamente descripto. Si miramos ms de cerca la cach, almacena ms
que solo los datos copiados por la memoria. Como se indica en la figura 6.3. En
esta figura hay dos bloques vlidos, el bloque 0 contiene multiples palabras de
la memoria principal identificadas usando el tag 00000000. El bloque 1 tiene
las palabras identificadas con el tag11110101. Los otros dos bloques de
cach no son vlidos.

Comentario: Buscar traduccin

Para realizar el mapeo directo, la direccin de memoria principal en binario es


particionada en los campos que muestra la figura 6.4.
El tamao de cada campo depende de las caractersticas fsicas de la memoria
principal y del cach. El campo palabra (a veces llamado el campo offset)
identifica unvocamente una palabra de un bloque especfico; de este modo, debe
contener el nmero de bits apropiado para hacer esto. Esto tambin es cierto
para el campo bloque debe seleccionar un bloque nico en la cach. El campo
tag son los bits restantes. Cuando un bloque de memoria principal se copia al
cach, este tag es almacenado con el bloque y unvocamente identifica a este
bloque. El total de los tres campos debe por supuesto sumar el nmero de bits en
una direccin de memoria principal.
Ejemplo: supongamos que la memoria tiene 214 palabras, el cach 16 bloques y cada
bloque 8 palabras. De esto determinamos que la memoria tiene 211 bloques. Sabemos
que cada direccin de memoria requiere 14 bits. De estos 14 bits los 3 que estn
ms a la derecha reflejan el campo de la palabra (necesitamos 3 bits para
identificar unvocamente a las 8 palabras del bloque). Necesitamos 4 bits para
seleccionar un bloque especfico en la cach, por lo que el campo del bloque
consiste en los 4 bits del medio. Los restantes 7 son el campo tag.
Como se mencion anteriormente, el tag para cada bloque se almacena con ese
bloque en cach. En este ejemplo, como los bloques de memoria principal 0 y 16
ambos mapean al bloque 0 del cache, el campo tag le permite al sistema
diferenciar entre los bloques 0 y 16. Las direcciones binarias del bloque cero

difieren de las del blque 16 en los 7 bits ms a la izquierda, por loque los
tags son diferentes y nicos.
Para ver como difieren estas direcciones, miremos un ejemplo ms pequeo.
Supongamos que tenemos un sistema que usa mapeo directo con 16 palabras en
memoria principal dividido en 8 bloques (2 palabras por bloque). Asmiendo que la
cach es de 4 bloques en tamao (total 8 palabras), sabemos:
- Una direccin de memoria tiene 4 bits
- Los cuatro bits se dividen en tres campos. El de la palabra es de un bit (solo
necesitamos un bit para diferenciar las dos palabras del bloque); el campo del
bloque es de 2 bits (para diferencias 4 bloques en memoria principal); el tag es
de 1 bit (el restante).

Supongamos que generamos la direccin de memoria principal 9. Podemos ver por el


mapeo que est en el bloque 4 de memoria principal y debera mapear al bloque 0
(lo cual significa que los contenidos en el bloque de memoria principal 4
deberan copiarse al bloque de cach 0). La computadora, sin embargo, utiliza la
direccin actual de memoria para determinar el bloque de mapeo del cache. Este
direccin en binario es: 1001. Cuando el CPU genera esta direccin primero toma
los bits del campo de bloque 00 y los usa para dirigirlo al bloque apropiado en
cach. 00 indica bloque 0. Si el tag del cach es 1, entonces el bloque 4 ya se
encuentra actualmente en el bloque de cach. Si el tag es 0 entonces el bloque 0
de memoria principal se encuentra en el bloque 0 de cach. Asumiendo que los
tags son iguales, lo cual significa que el bloque 4 de memoria principal con las

direcciones 8 y 9 reside en el bloque de cach 0, el campo de la palabra, 1, se


usa para seleccionar una de las dos palabras del bloque. Como el bit es uno
seleccionamos la palabra con offset 1 lo cual resulta en la devolucin de los
datos copiados de la direccin de memoria principal 9.
Si tenemos un sistema con direcciones de memoria de 15 bits y 64 bloques de
cach cada uno de 8 palabras. Tenemos un campo de palabra de 3 bits, un campo de
bloque de 6 bits y un campo de tag de 6 bits.
(215 direcciones, direccionamiento a palabra, 26 bloques/lineas en cach cada uno
con 23 palabras => 29 palabras en cach => 215/29 = 26 bloques de memoria
principal ? Tag 6)

Fully Associative Cache

La cach de mapeo directo no es tan cara como otras porque el esquema de mapeo
no requiere de ninguna bsqueda. Cada bloque de memoria principal tiene una
ubicacin especfica a la que se mapea en cach; cuando una direccin de memoria
principal se convierte en una direccin de cach, el CPU sabe exactamente donde
buscar en el cach ese bloque de memoria, simplemente examinando el campo del
bloque. Esto es similar a las agendas, donde las pginas tienen un ndice
alfabtico.
En lugar de especificar una direccin nica para cada bloque de memoria, podemos
ver el extremo opuesto: permitir que un bloque de memoria principal de aloje en
cualquier parte del cach. El nico modo de encontrar un bloque mapeado de este
modo, es buscar en toda la cach. Esto requiere que toda la cach sea construida
de memoria asociativa as puede buscarse en paralelo. Esto es, una simple
bsqueda debe comparar el tag solicitado con todos los tags en cach para
determinar si el bloque deseado est en cach. La memoria asociativa requiere
hardware especial para permitir la bsqueda asociativa y, por lo tanto, es
bastante cara. Usando mapeo asociativo, la direccin de memoria principal se
particiona en dos, el tag y la palabra.
Por ejemplo con una memoria principal de 214 palabras, una cach con 16 bloques
de 8 palabras cada uno, el campo de palabra es 3, pero ahora el campo tag es de
11 bits.
Este tag debe ser almacenado con cada bloque en cach. Cuando se busca en cach
por un bloque especifico de memoria principal, el campo tag de la direccin se
compara con todos los tags vlidos en cach; si se encuentra una coincidencia el
bloque ha sido encontrado (el tag identifica unvocamente a un bloque de memoria
principal). Si no hay coincidencias, entonces tenemos un miss y el bloque debe
ser transferido de memoria principal.
Con el mapeo directo, si un bloque ya esta ocupando la posicin de cach en la
que un nuevo bloque debera ser ubicado, el bloque que est en cach debe
eliminarse (escribirse devuelta a memoria principal si fue modificado, o
sobrescribirlo si no fue modificado). Con el mapeo totalmente asociativo, cuando
se llena la cach, necesitamos un algoritmo de reemplazo para decidir qu bloque

vamos a sacar del cach (lo llamamos el victim block). Un sencillo algoritmo
FIFO podra funcionar, como tambin LRU. Existen muchos algoritmos de reemplazo
que pueden utilizarse.
Set Associative Cache

Devido a su velocidad y complejidad, la cach asociativa es muy cara. Aunque el


mapeo directo no es caro es muy restrictivo. Para ver como el mapeo directo
limita el uso de la cach, supongamos que estamos corriendo un programa en la
arquitectura descripta en ejemplos anteriores. Supongamos que el programa est
usando el bloque 0, despus el 16, despus el 0 despus el 16 y as sucesivamente
cuando ejecuta instrucciones. Como ambos bloques mapean a la misma direccin,
significa que el programa repetidamente va a tirar el 0 para traer el 16 y
viceversa, aunque el resto de los bloques de la cach no estn siendo utilizados.
La cach totalmente asociativa soluciona este problema permitiendo que el bloque
de memoria se ubique en cualquier lado. Sin embargo, requiere que un tag ms
largo se almacene con el bloque (lo cual resulta en una cach ms grande) adems
de requerir hardware especial para buscar simultneamente en todos los bloques
de la cach (lo que implica una cach mucho ms cara). Necesitamos un esquema
intermedio.
El tercer esquema de mapeo que introducimos es el de mapeo de cach asociativo
por conjuntos de n-vias (N-way set associative cache mapping), una combinacin de
los dos anteriores. Este esquema es similar al mapeo directo ya que usa la
direccin para mapear el bloque a una cierta ubicacin de cach.
La diferencia importante es que en lugar de mapear a un nico bloque de cach,
las direcciones mapean a un conjunto de varios bloques de cach. Por ejemplo, en
el cach asociativo por conjuntos de dos vas, hay dos bloques de cach por set.

La cach de mapeo directo es un caso especial de asociatia por conjuntos de Nvas donde el tamao del set es 1.
En el mapeo asociativo por conjuntos la memoria principal se particiona en tres:
el campo tag, el campo set y el campo palabra. El tag y la palabra tienen el
mismo rol que en los ejemplos anteriores. El campo set indica a que set de la
cach mapea el bloque de memoria principal. Supongamos que estamos usando mapeo
asociativo por conjuntos de dos vias. Con una memoria principal de 214 palabras,
una cach de 16 bloques cada bloque con 8 palabras. Si cada set tiene dos
bloques entonces hay 8 sets en cach, por lo tanto, el campo set es de 3 bits,
el campo palabra es de 3 bits y el tag de 8 bits.

6.4.2 Polticas de reemplazo


En la cach de mapeo directo, si hay disputa por un bloque en cach hay una
nica accin posible: eliminar el bloque existente para hacer espacio para el
nuevo. Este proceso se llama reemplazo. Con el mapeo directo, no se necesitan
polticas de reemplazo porque la ubicacin para cada nuevo bloque est
predeterminada.
Sin embargo, para la cach totalmente asociativa y la asociativa por conjuntos,
necesitamos polticas de reemplazo para determinar el bloque vctima que ser
removido de la cach. Cuando usamos cach totalmente asociativa hay K posibles
locaciones (donde K es el nmero de bloques en cach) para los cuales una
direccin de memoria principal dada podra mapear. Con el cach de mapeo
asociativo por conjuntos de N-vas, un bloque puede mapear a cualquiera de los N
bloques diferentes en un set dado.
El algoritmo que determina el reemplazo se llama poltica de reemplazo.
Hay varias politicas de reemplazo populares. Una que no es prctica que puede
usarse como punto de referencia (benchmark) para medir a todas las dems es el
algoritmo ptimo Queremos mantener valores en cach que van a necesitarse
pronto nuevamente y deshacernos de aquellos bloques que no volveremos a
necesitar o que no necesitaremos por algn tiempo. Un algoritmo que pudiera
mirar a futuro para precisar cuales bloques mantener o eliminar en base a estos
dos criterios sera el mejor. Esto es lo que hace el algoritmo ptimo. Queremos
reemplazar el bloque que no va a ser usado por mayor tiempo a futuro.
Desde un punto de vista prctico no podemos mirar en el futuro, pero podemos
correr un programa y volver a correrlo para, efectivamente, conocer el futuro.
Luego podramos aplicar el algoritmo ptimo en la segunda corrida. El algoritmo
ptimo garantiza la taza ms baja posible de miss. Como no podemos ver el futuro
en cada programa que corremos, el algoritmo ptimo solo se usa como medida para
determinar cuan bueno o malo es otro algoritmo. Cuanto ms se acerca el
desempeo al algoritmo ptimo, mejor.
Necesitamos algoritmos que se aproximen lo mejor posible al algoritmo ptimo.
Tenemos varias opciones. Por ejemplo, podramos considerar la localidad temporal.
Podemos adivinar que cualquier valor que no ha sido usado recientemente es poco
probable que se vuelva a necesitar pronto. Podemos mantener un registro de la
ltima vez a la que cada bloque fue accedido (asignarle un timestamp al bloque),
y elegir como vctima el bloque que ha sido menos utilizado recientemente. Este
es el algoritmo LRU. Desafortunadamente LRU requiere que el sistema mantenga la
historia de accesos por cada bloque de cach lo cual requiere un espacio
significante y disminuye la velocidad de operacin del cach. De todas formas,
hay maneras de aproximarse al LRU.
FIFO es otro enfoque popular. Con este algoritmo, el bloque que ha estado en
cach por mas tiempo (sin importar cuan recientemente haya sido usado) se
selecciona como vctima para remover del cach.
Otro enfoque es RANDOM El problema con LRU y FIFO es que hay situaciones de
referenciacion degeneradas que pueden hacer que constantemente estemos tirando
un bloque y volviendolo a traer a memoria repetidamente.

Alguna personas dicen que el reemplazo aleatorio, aunque a veces tira datos que
sern necesitados pronto, nunca colapsa
Desafortunadamente, es dificil tener un verdadero algoritmo de reemplazo
aleatorio, porque puede disminuir el desempeo promedio.
El algoritmo elegido por lo general depende de cmo ser usado el sistema. No
hay un nico algoritmo (prctico) que sea el mejor para todos los escenarios.
Por esa razn los diseadoras usan algoritmos que se desempean bien en una
amplia variedad de circunstancias.
6.4.3 Tiempo de acceso efectivo y tasa de hit
La performance de la memoria jerrquica se mide por su tiempo de acceso efectivo
(EAT), o por el tiempo promedio por acceso. EAT es una medida ponderada promedio
que usa el hit ratio y los tiempos relativos de acceso de los sucesivos niveles
de la jerarqua.
Por ejemplo, supongamos que cada tiempo de acceso a cach es de 10ns, el tiempo
de acceso a memoria principal es de 200ns y el hit rate es de 99%. El tiempo
promedio que le toma al procesador acceder a un item en su memoria de segundo
nivel sera entonces:

Si miramos a los tiempos de acceso durante un largo perodo de tiempo, este


sistema se desempea como si tuviera una nica gran memoria con un tiempo de
acceso de 11ns.
Una cach con hit rate de 99% permite al sistema desempearse muy bien, incluso
si la mayora de la memoria est construida utilizando tecnologa ms lenta con
un tiempo de acceso de 200ns.
La frmula para calcular el tiempo de acceso efectivo de una memoria de nivel
dos est dada por:

Donde H es el hit rate del cach, Accesscc es el tiempo de aceso del cach y
AccessMM es el tiempo de acceso a memoria.
Esta frumula puede extenderse par aplicarse a memorias de tercer o incluso
cuarto nivel.
6.4.4 When Does Caching Break Down?
Cuando los programas muestran localidad el cach trabaja bastante bien. Sin
embargo, si los programas tienen mala localidad, la memoria cach se rompe y
la performance de la memoria jerrquica es pobre. En particular, la programacin
orientada a objetos puede causar que los programas muestren localidad menor a la
ptima. Otro ejemplo de mala localidad puede verse en los accesos a arreglos de

Comentario: Buscar en inet un


termino ms amigable para never
trashes

dos dimensiones. Los arreglos se almacenan tipicamente por filas (en row-major
order
Supongamos que una fila ocupa exactamente un bloque de cach y que la cacll
puede contener todas excepto una de las filas del arreglo. Si el programa accede
al arreglo a una fila por vez, el primer acceso produce un miss, pero una vez
que el bloque est transferido al cach los accesos subsecuentes son hits. Por
lo que un arreglo de 5x4 producira 5 misses y 15 hits en 20 accesos (asumiendo
que estamos accediendo a todos los elementos del arreglo). Si el programa accede
al arreglo en por columnas, el primer acceso resulta en un mis despus del cual
toda la fila se transfiere a la cach. Sin embargo, el segundo acceso resulta en
otro miss, los datos que se estn transfiriendo de cada fila no estan siendo
usados porque se est accediendo al arreglo por columnas. Como la cach no es lo
suficientemente grande esto producira 20 miss en 20 accesos. Un tercer ejemplo
podra ser un programa que loopea sobre un arreglo lineal que no entra en cach.
Habra una significante reduccin en la localidad cuando la memoria se utiliza
de este modo.

6.4.5 Polticas de escritura en Cach


Adems de determinar qu vctima elegir para el reemplazo, los diseadores deben
decidir tambin que hacer con los llamados dirty blocks de la cach, o bloques que
han sido modificados. Cuando el procesador escribe a memoria principal, los
datos pueden ser escritos en la cach en su lugar, bajo la asuncin de que el
procesador probablemente vuelva a leerlos pronto. Si el bloque de cach es
modificado, la poltica de escritura de la cach determina cuando ser
actualizado el bloque de memoria principal para coincidir con el bloque de cach.
Hay dos polticas bsicas:
Write-throughActualiza tanto el cach como la memoria principal
simultaneamente en cada escritura. Es ms lenta que la poltica write-back, pero
asegura que el cach es consistente con el sistema de memoria principal. La
desventaja obvia es que cada escritura ahora requiere un acceso a memoria. Usar
esta poltica signficia que cada escritura en cach necesita una escritura en
memoria principal, por lo tanto disminuye la velocidad del sistema (si todos los
accesos son escrituras, esto esencialmente disminuye la velocidad del sistema a
la velocidad de la memoria principal). Sin embargo, es las aplicaciones reales,
la mayora de los accesos son lecturas por lo que esta disminucin de la
velocidad es despreciable.
Write-back Esta poltica, tambin llamada copyback solo actualiza los bloques
en memoria principal cuando el bloque de cach es seleccionado como vctima y
debe ser removido de la cach. Este metodo es normalmente ms rpido que el
anterior porque no se pierde tiempo en escribir informacin a la memoria con
cada escritura en cach. Tambin se reduce el trfico a la memoria. La
desventaja es que la memoria principal y el cach pueden no contener el mismo

Comentario: Chequear otras


traducciones de este trmino

valor en un instante dado, y si un proceso termina (crashes) antes de que se


haya escrito a la memoria principal, los datos en el cach pueden perderse
Para mejorar la performance del cach, uno debe incrementar el hit ratio usando
un mejor algoritmo de mapeo (aproximadamente un 20%), mejores estrategias para
operaciones de escritura (hasta un 10%) y mejores prcticas de cdigo, como
vimos en el ejemplo anterior accesos por filas vs. accesos por columnas (hasta
el 30%). Solo aumentar el tamao de la cach puede mejorar el hit ratio entre un
1 y un 4% pero no est garantizado.

6.6 UN EJEMPLO DE MANEJO DE MEMORIA REAL

El Pentium tiene dos cachs, L1 y L2, ambas utilizando un tamao de bloque de 32


bytes. L1 es la ms cercana al procesador mientras que la L2 est entre el
procesador y la memoria. El L1 son en realidad dos cachs; el Pentium (como
muchas otras mquinas) separa la cach entre la utilizada para instrucciones y
la utilizada para datos. Ambas L1 utilizan un bit LRU para el reemplazo de
bloques. Ambas utilizan mapeo asociativo por conjuntos de dos vas.
La L2 es de 512KB hasta 1MB, tambin usa mapeo asociativo por conjuntos de dos
vas.
La memoria de intrucciones y la L2 utilizan el protocolo de coherencia MESI.
Cada lnea tiene dos bits que almacenan los siguientes estados MESI:
(1) M: modified (cache is different than main memory);
(2) E: exclusive (cache has not been modified and is the same as memory);
(3) S: shared (this line/block may be shared with another cache line/block); and
(4) I: invalid (the line/block is not in cache).

REVIEW OF ESSENTIAL TERMS AND CONCEPTS


1. Which is faster, SRAM or DRAM?
2. What are the advantages of using DRAM for main memory?
3. Name three different applications where ROMs are often used.
4. Explain the concept of a memory hierarchy. Why did your authors choose to represent

it as a pyramid?
5. Explain the concept of locality of reference and state its importance to memory

systems.
6. What are
7. Give two
8. Which of
9. Cache is

the three forms of locality?


noncomputer examples of the concept of cache.
L1 or L2 cache is faster? Which is smaller? Why is it smaller?
accessed by its ________, whereas main memory is accessed by its

_______.
Exercises 267
10. What are the three fields in a direct mapped cache address? How are they used to
access a word located in cache?
11. How does associative memory differ from regular memory? Which is more expensive
and why?
12. Explain how fully associative cache is different from direct mapped cache.
13. Explain how set associative cache combines the ideas of direct and fully associative
cache.
14. Direct mapped cache is a special case of set associative cache where the set size is
1.
So fully associative cache is a special case of set associative cache where the set size
is ___.
15. What are the three fields in a set associative cache address and how are they used to
access a location in cache?
16. Explain the four cache replacement policies presented in this chapter.
17. Why is the optimal cache replacement policy important?
18. What is the worst-case cache behavior that can develop using LRU and FIFO cache
replacement policies?
19. What, exactly, is effective access time (EAT)?
20. Explain how to derive an effective access time formula.
21. When does caching behave badly?
22. What is a dirty block?
23. Describe the advantages and disadvantages of the two cache write policies.
24. What is the difference between a virtual memory address and a physical memory
address? Which is larger? Why?
25. What is the objective of paging?
26. Discuss the pros and cons of paging.
27. What is a page fault?
28. What causes internal fragmentation?
29. What are the components (fields) of a virtual address?
30. What is a TLB and how does it improve EAT?
31. What are the advantages and disadvantages of virtual memory?
32. When would a system ever need to page its page table?
33. What causes external fragmentation and how can it be fixed?

INPUT OUTPUT AND STORAGE SYSTEMS

Ac
Una computadora no tiene mucho uso sin medios para ingresar y sacar informacin
de ella. Cuando el tiempo de procesamiento excede el tiempo de pensar del
usuario, los usuarios se quejan de que es lenta. Esta lentitud puede tener un
impacto sustancial en la productividad. Es ms frecuente que la causa de este
problema no se encuentre en el procesador o en la memoria, si no en cmo el
Veremos como los I/O y la capacidad de almacenamiento pueden ser optimizados
permitiendo tomar la decisin correcta de almacenamiento.

7.2 AMDAHLS LAW


Aumentar el 40% la velocidad de un componente ciertamente no va a aumentar el
40% de la velocidad del sistema.
En 1967 George Amdahl reconoci la interrelacin de todos los componentes con la
eficiencia total de un sistema de computacin. Cuantific sus observaciones en
una frmula que hoy se conoce como ley de Amdahl. En esencia, establece que la
velocidad (speedup) total de un sistema de computacin depende tanto de la
aceleracin en un componente particular como de cuanto es utilizado ese
componente por el sistema. En smbolos:

Donde:
S es la velocidad;
f es la fraccin de trabajo que realiza el componente ms rpido; y
k es la velocidad de un nuevo componente.
Digamos que la mayora de tus procesos diarios pasan el 70% del tiempo corriendo
en la CPU y el 30% esperando servicios del disco.
Nos ofrecen un nuevo procesador que es 50% ms rpido del que tenemos por $10000
o un conjunto de discos que son 2,5 veces ms rpidos que tu disco actual por
$7000.
Entonces para el procesador tenemos:

y para el disco:

El aumento de performance es relativamente igual, aunque el costo por cada 1% de


mejora es menor en los discos.

7.3 ARQUITECTURAS I/O

Definimos input/output como un subsistema de componentes que mueve datos entre


componentes externos y un servidor (host system), consistente de una CPU y una
memoria principal.
Los subsistemas I/O incluyen, pero no estn limitados a:
Bloques de memoria principal que estn dedicados a funciones I/O
Buses que proveen los medios para mover los datos dentro y fuera del sistema
Mdulos de control en el servidor y en los perifricos.
Interfaces a componentes externos como teclados y discos
Cableado o links de comunicacin entre el servidor y sus perifricos.

Los mdulos I/O se ocupan de mover datos entre la memoria principal y la


interfaz de un dispositivo en particular. Las interfaces estn diseadas
especficamente para comunicarse con un cierto tipo de dispositivos como
teclados, discos y impresoras. Las interfaces manejan los detalles para
asegurarse de que los dispositivos estn listos para la prxima tanda de datos,
o que el servidor est listo para recibir la prxima tanda de datos que proviene
de un perifrico. La forma y significado exacto de las seales que se
intercambian entre emisor y receptor se llama protocolo Los Protocolos constan de
seales de control como Printer reset; seales de estado como tape ready; o
seales para el paso de datos. En la mayora de los protocolos de intercambio de

datos el receptor debe reconocer (acknowledge) los comandos y datos que se le


envan, o indicar que est listo para recibir datos. Este tipo de protocolo de
intercambio se denomina handshake.
Los dispositivos externos que manejan largos bloques de datos (como impresoras,
discos, y cintas) estn usualmente equipados con memoria buffer. Los Buffers
permiten al servidor enviar largas cantidades de datos a los perifricos de la
manera ms rpida posible, sin tener que esperar a que los dispositivos
mecnicos ms lentos hayan escrito los datos. La memoria dedicada en los discos
es usualmente del tipo de la cach ms rpida, mientras que las impresoras
usualmente tienen una RAM ms lenta.
Los circuitos de control de los dispositivos toman los datos de para o desde
buffers incorporados y se aseguran de que llegue a donde debe ir. En caso de
escribir en discos, esto incluye asegurarse de que el disco est posicionado de
la manera adecuada para que la informacin sea escrita en un lugar particular.
Para las impresoras, estos circuitos mueven el cabezal de impresin a la
posicin del siguiente carcter, activan el cabezal, eyectan el papel, etc.
Los discos y las sintas son formas de almacenamiento durable llamados as porque
los datos que son grabados en ellos duran ms de lo que duraran en memoria
principal voltil. Sin embargo, ningn mtodo de almacenamiento es permanente.
La vida esperada de los datos en estos medios es de aproximadamente 5 aos para
los medios magnticos y tanto como 100 aos para los medios pticos.
7.3.1 Mtodos de Control I/O
Los sistemas de computacin emplean cualquiera de los cuatro metodos de control
generales de I/O, estos son: I/O programado, I/O por manejo de interrupciones,
acceso directo a memoria y channel-attached I/O. Aunque ningn mtodo es
necesariamente mejor que el otro, la manera en que la computadora ontrola sus
I/O influencia enormemente el diseo y performance general del sistema. El
objetivo es saber cuando el mtodo I/O empleado por una arquitectura particular
es apropiado y cmo ser utilizado el sistema.

Programmed I/O (E/S por polling o programada)

Los sistemas que usan programmed I/O dedican por lo menos un registro para uso
exclusivo de cada dispositivo I/O. El CPU continuamente monitorea cada registro,
esperando que lleguen los datos, esto se llama polling. Por lo tanto se refiere
usualmente a la programmed I/O como polled I/O. Una vez que la CPU detecta la
condicin de dato listo, acta de acuerdo a las instrucciones programadas para
ese registro particular. El beneficio de usar este enfoque es que tenemos
control programtico sobre el comportamiento de cada dispositivo. Los cambios en
el programa pueden consistir en ajustes para el nmero y tipo de dispositivos en
el sistema, tanto como para sus prioridades e intervalos de polling.
Estar constantemente haciendo polling, sin embargo, es un problema. La CPU se
encuentra constantemente en un loop de busy wait hasta que empieza a atender
una solicitud de I/O. No realiza ningn trabajo til hasta que haya I/O para

Comentario: Ver qu sera esto

procesar. Debido a estas limitaciones, este mtodo es apropiado para sistemas de


propsito especial como cajeros automticos, o sistemas que controlan o
monitorean eventos ambientales.
Interrupt-Driven I/O (E/S por interrupcioneS)

Interrupt-driven I/O puede ser pensada como l contrario de programmed I/O.


En lugar de que la CPU este continuamente preguntando a sus dispositivos
conectados si tienen algn input, los dispositivos le dicen a la CPU cuando
tienen datos para enviar. La CPU continua con otras tareas hasta que la
interrumpe el pedido de un dispositivo. Las interrupciones son usualmente
sealadas con un bit en el registro de flags del CPU llamado interrupt flag.
Una vez que se setea el flag de interrupcin, el sistema operativo interrumpe el
programa que estaba ejecutando guardando el estado y la informacin variable. El
sistema luego hace un fetch del vector de interrupciones que apunta a la
direccin de la rutina del I/O. Luego de que la CPU haya terminado con la rutina,
restaura la informacin que haba guardado del programa que estaba corriendo
cuando ocurri la interrupcin, y contina la ejecucin del programa.
Este mtodo es similar al anterior en el sentido en que las rutinas de atencin
pueden ser modificadas para acomodarse a cambios de hardware. Como los vectores
de los distintos tipos de hardware usualmente se mantienen en las mismas
ubicaciones en sistemas que corren el mismo tipo y nivel de sistema operativo,
estos vectores pueden ser fcilmente cambiados para apuntar a cdigo especifico
del comerciante. Por ejemplo, si a alguien se ocurre un nuevo tipo de disco que
todava no es soportado por un SO popular, el fabricante de ese disco puede
actualizar el vector de I/O del disco para apuntar a un cdigo particular para
ese disco. Desafortunadamente, algunos algunos de los primeros escritores de
virus basados en DOS tambin tuvieron esa idea. Reemplazaban los vectores de I/O
para que apuntaran a su cdigo, erradicando muchos sistemas en el proceso. La
mayoria de los SO actuales emplean manejo de interrupciones. Afortunadamente,
estos tienen mecanismos para salvaguardarse contra este tipo de manipulacin del
vector.
Direct Memory Access (E/S por acceso directo a memoria)

Tanto con I/O como con interrupt-driven I/O, la CPU muvede datos desde y hacia
el dispositivo I/O. Durante el I/O, la CPU corre instrucciones similares al
siguiente pseudocdigo:
WHILE More-input AND NOT Error
ADD 1 TO Byte-count
IF Byte-count > Total-bytes-to-be-transferred THEN
EXIT
ENDIF
Place byte in destination buffer
Raise byte-ready signal
Initialize timer
REPEAT
WAIT
UNTIL Byte-acknowledged, Timeout, OR Error
ENDWHILE

Claramente estas instrucciones son lo suficientemente simples como para ser


programadas en un chip dedicado. Esta es la idea detrs de direct memory access
(DMA). Cuando un sistema usa DMA, la CPU se livera de la ejecucin de las
tediosas instrucciones de I/O. Para efectuar la transferencia, la CPU le provee
al control de DMA la locacin de los bytes a ser transferidos, el nmero de
bytes y el dispositivo de destino o la direccin de memoria. Esta comunicacin
usualmente tiene lugar a travs de registros de I/O especiales en la CPU.

Una vez que los valores apropiados se ubican en memoria, la CPU enva una seal
al subsistema de DMA y procede con su siguiente tarea, mientras el DMA se ocupa
de los detalles del I/O. Luego de que el I/O se completa (o termina en error),
el DMA enva una nueva interrupcin al CPU. El controlador del DMA y la CPU
comparten el bus de memoria. Solo uno de ellos a la vez puede tener control del
bus, esto es, ser el bus master. Generalmente, I/O tiene prioridad sobre los
fetches de memoria del CPU para instrucciones y datos, porque muchos
dispositivos de I/O operan con parmetros de tiempo ajustados. Si no detectan
actividad dentro de un perodo de tiempo especificado se produce un timeout y
abortan el proceso de I/O. Para evitarlos, el DMA usa ciclos de memoria que de
otra forma seran utilizados por el CPU. Esto se llama cycle stealing.
Afortunadamente I/O tiende a crear trfico en rfagas bursty en el bus: los datos
se envan en bloques o clusters.

La CPU debera tener el acceso permitido al bus entre rfagas, aunque este
acceso puede no ser de la duracin necesaria para ahorrarle al sistema la
acusacin de ir muy lento durante los I/O (crawling during I/O).
Channel I/O (Canal de E/S)

La I/O programada transfiere datos un byte por vez. La I/O por interrupciones
puede manejar datos de un byte por vez en pequeos bloques, dependiendo del tipo
de dispositivo que participa en el I/O. Los dispositivos ms lentos como los
teclados, generan ms interrupciones por numero de byte transferido que los
discos o las impresoras. Los mtodos DMA son todos orientados a bloques,
interrumpiendo la CPU solo despus de terminar (o fallar) la transferencia de un
grupo de bytes. Luego de que el DMA avisa el final del I/O, la CPU puede darle
la direccin para el siguiente bloque de memoria a ser leido o escrito.
En caso de que el evento falle, la CPU solo es responsable por tomar la accin
apropiada. As la DMA requiere solo un poco menos de participacin de la CPU de
lo que las interrupciones. Tal costo est bien para sistemas pequeos de un solo
usuario; sin embargo, no se comporta bien en sistemas grandes de mltiples
usuarios como computadoras mainframe (centrales). La mayora de las mainframes
utilizan un tipo inteligente de interfaz DMA conocida como I/O channel.
Con channel I/O, uno o ms procesadores de I/O controlan varios caminos de I/O
llamados channel paths. Los Channel paths para dispositivos lentos como
terminales e impresoras pueden ser combinados (multiplexados) permitiendo el
manejo de varios de estos dispositivos a travs de un solo controlador. En los
mainframes de IBM, un canal multiplexado es llamado un multiplexor channel. Los
canales para discos y otros dispositivos ms rpidos se llaman selector channels.
Los canales de I/O son manejado por pequeas CPUs llamadas I/O processors (IOPs),
las cuales estn optimizadas para I/O. A diferencia de los circuitos DMA, los
IOPs tienen la habilidad de ejecutar programas que incluyen lgica aritmtica y
bifurcacin de instrucciones. Estos ejecutan programas que son ubicados en la
memoria principal del sistema por el procesador servidor. Estos programas
consisten en una serie de channel command words
(CCWs), que incluyen no solo las instrucciones de la transferencia actual,
sino tambin comandos que controlan los dispositivos de I/O. Estos comandos
incluyen cosas como varios tipos de inicializacin de dispositivos, eyeccin de
pginas de la impresora, y comandos para rebobinar cintas, para nombrar algunos.
Una vez que el programa de I/O se ha ubicado en memoria el servidor expide un
comando de start subchannel (SSCH), informando al IOP de la ubicacin en memoria
donde puede ser encontrado el programa. Despus de que el IPO haya completado su
trabajo, ubica la informacin de terminacin en la memoria y enva una
interrupcin a la CPU. La CPU obtiene la informcin de termiacin y realiza las
acciones apropiadas para los cdigos devueltos.
La principal diferencia entre el DMA y el channel I/O reside en la inteligencia
del IOP. El IOP negocia protocolos, expide los comandos de los dispositivo,
traduce cdigo de almacenamiento en cdigo de memoria, y puede transferir
archivos completos o grupos de archivos independiente al CPU servidor. El

servidor solo tiene que crear las instrucciones de programa para la operacin
I/O y decirle al IOP donde encontrarlas.
Como la DMA, un IOP debe robar ciclos de memoria del CPU. A diferencia de la DMA
los sistemas de channel I/O estn equipados con buses de I/O separados lo cual
ayuda a aislar al servidor de la operacin de I/O. Cuando se copia un archivo de
disco a cinta, por ejemplo, el IOP usa el bus de memoria del sistema solo para
hacer el fetch de instrucciones de la memoria principal. El resto de la
transferencia se efecta utilizando solo el bus de I/O. Debido a su inteligencia
y el aislamiento del bus, channel I/O es utilizado en ambientes de procesamiento
de transacciones de alto rendimiento, donde su costo y complejidad puede ser
justificado.

7.3.2 I/O Bus Operation

De este diagrama podemos desprender las siguientes ideas:


Un bus de sistema es un recurso compartido entre muchos componentes de un
sistema de computacin.
El acceso a este recurso compartido debe ser controlado. Por esto se requiere
un bus de control
El bus de memoria y el de I/O pueden ser entidades separadas, de hecho, a menudo
es una buena idea separarlas. Una buena razn para que la memoria tenga su
propio bus es que las transferencias de memoria pueden ser sincrnicas,
utilizando muchos ciclos del CPU para recuperar datos de la memoria principal.
En un sistema que funciona correctamente, nunca es un problema de la memoria
encontrarse offline o mantener el mismo tipo de errores que afectan a los
perifricos, como que le falte papel a una impresora en uso.
Por otro lado, los buses de I/O no pueden operar sincrnicamente. Deben tener en
cuenta el hecho de que los dispositivos de I/O no siempre pueden estar listos
para procesar la transferencia I/O. Los circuitos de control ubicados en el bus
de I/O y en los dispositivos de I/O negocian entre ellos para determinar el
momento en el que cada dispositivo puede usar el bus. Como estos handshakes
tienen lugar cada vez que se accede al bus, los buses de I/O se denominan
asncronos. Solemos distinguir transferencias sincrnicas de asincrnicas
diciendo que una transferencia sincrnica requiere que tanto el emisor como el
receptor compartan el mismo clock. Pero los protocolos asincrnicos tambin
requieren un clock para bit timing (temporizacin de bit?) y para delinear las
transiciones de las seales.
Consideremos, una vez ms, la configuracin de la figura 7.2. No separamos las
lineas de datos, direcciones y control. La conexin entre el circuito DMA y los

circuitos de interfaz de los dispositivos puede verse ms claramente en la


siguiente figura que muestra los buses individuales de los componentes.

Esta figura detalla como la interfaz del disco se conecta a los tres buses. La
direccin en el bus de datos consiste de un nmero de conductores individuales
cada uno de los cuales lleva un bit de informacin. El nmero de lneas de datos
determina el ancho del bus. Un bus de datos con ocho lineas de datos lleva un
byte por vez. El bus de direcciones tiene suficientes conductores para
identificar unvocamente cada dispositivo en el bus. El grupo de lineas de
control que se muestran es el mnimo que necesitamos para un propsito
ilustrativo. Los buses I/O reales tienen tipicamente ms de una docena de lneas

de control (la PC original de IBM tena ms de 20). Las lneas de control


coordinan las actividades del bus y sus dispositivos asociados. Para escribir
datos en el disco el bus ejecuta la siguiente secuencia de operaciones.
1. El circuito DMA ubica la direccin del controlador de disco en las lneas de
direcciones y levanta las seales de Request y Write.
2. Con la lnea de Request levantada, los circuitos decodificadores en el
controlador leen las lneas de direccin.
3. Al leer su propia direccin, el decodificador habilita los circuitos de
control del disco. Si el disco est disponible para escribir datos, el
controlador sube la seal en la linea de Ready En este punto, el handshake entre
el controlador y el DMA est completo. Con la seal de Ready levantada, ningn
otro dispositivo puede usar el bus.
4. Los circuitos del DMA ubican los datos en las lineas y bajan la seal de
Request.
5. Cuando el controlador del disco ve la seal baja en Request transfiere el
byte de las lineas de datos al buffer del disco y luego baja la seal de Ready.

Para describir esto de manera ms precista, los ingenieros describen la


operacin del bus a travs de diagramas de tiempo. Las lneas t0 a t10
especifican la duracin de las varias seales. En un diagrama de tiempo real se

asigna una duracin exacta a los intervalos de tiempo, usualmente cerca de los
50 ns.
Las seales del bus pueden cambiar solo durante el ciclo de transicin de un
clock. Las seales no suben y bajan instantneamente, esot refleja la realidad
fsica del bus. Una pequela cantidad de tiempo debe permitirse para que la seal
se estabilice. Este settle time, aunque pequelo, contribuye a los largos restrasos
durante largas transferencias I/O.
Muchos buses I/O reales, no tienen lineas separadas de datos y direcciones.
Debido a la naturaleza asncrona de los buses de I/O, las lneas de datos pueden
ser usadas para llevar la direccin del dispoisitivo. Todo lo que necesitamos es
agregar otra lnea de control que indique si las seales en las lneas de datos
representan direcciones o datos. Este enfoque contrasta con el bus de memoria
donde las direcciones y los datos deben estar disponibles simultneamente.
7.3.3 Another Look at Interrupt-Driven I/O
Hasta este punto, hemos asumido que el equipamiento perfiderico se encuentra
inactivo en el bus hasta que un comando para hacer lo contrario aparece en la
lnea. En pequeos sistemas de computadoras este enfoque de habla solo cuando te
hablen no es muy til. Implica que toda la actividad del sistema se origina en
el CPU cuando, en realidad, la actividad se origina con el usuario. Para poder
comunicarse con la CPU, el usuario tiene que tener una forma de llamar su
atencin. Para este fin, los sistemas pequeos emplean I/O por interrupciones.
Todo es lo mismo que en los ejemplos anteriores, excepto que ahora los
perifricos tienen una forma de comunicarse con la CPU. Todo dispositivo
perifrico en el sistema tiene acceso a una lnea de pedido de interrupcin. El
chip de control de la interrupcin tiene un input por cada lnea de interrupcin.
Cuando se detecta una lnea de interrupcin, el controlador la decodifica y
levanta la entrada Interrupt (INT) del CPU. Cuando el CPU est listo para procesar
la interrupcin levanta la seal Interrupt Acknowledge(INTA). Una vez que el
controlador de interrupciones tiene este recocnocimiento, puede bajar su seal
INT.
Los diseadores de sistemas deben decidir que dispositivos debieran tener
precedencia sobre otros cuando ms de un dispositivo levanta las interrupciones
simultneamente. Este desicin de diseo est cableada en el controlador (hardwirerd). Cada sistema que utiliza el mismo SO y controlador de interrupcin,
conectar los dispositivos de alta prioridad (como el teclado) a la misma lnea
de interrupcin. El nmero de lineas de interrupcin es limitado en cada sistema,
y en algunos casos la interrupcin puede ser compartida. Las interrupciones
compartidas no causan problemas cuando es claro que ninguno de los dos
dispositivos necesitar la misma interrupcin al mismo tiempo. Por ejemplo, un
scanner y una impresora usualmente pueden coexistir perfectamente usando la
misma interrupcin. Este no es siempre el caso con un mouse serial y los modems,
donde sin el conocimiento del instalador, podran usar la misma interrupcin
causando comportamientos extraos en ambos.

4.1 MARIE
AMachine Architecture that is Really Intuitive and Easy
4.1.1 CPU Basics and Organization
La computadora manipula datos en cdigo binario. La memoria se usa tanto para
almacenar datos como instrucciones (Von Neumann). La unidad central de proceso
CPU es la responsable de hacer el fetch de las instrucciones, decodificarlas y
realizar la secuencia indicada de operaciones en los datos correctos.
Todas las computadoras tienen un procesador central. Esta unidad puede estar
dividida en dos partes. La primera es el datapath, el cual es una red de
unidades de almacenamiento (registros), y unidades aritmtico lgicas (para
realizar varias operaciones en los datos) conectados por buses (capaces de mover
data de un lugar a otro) donde el tiempo est controlado por clocks. El segundo
componente de la CPU es la unidad de control control unit, un mdulo responsable
por ordenar las operaciones y asegurarse de que los datos correctos estn donde
se necesitan en el momento correcto. Juntos, estos componentes realizan las
tareas del CPU: hacer el fetch de las instrucciones, decodificarlas y finalmente
realizar la secuencia indicada de operaciones. El desempeo de una mquina est
directamente relacionado con el diseo del datapath y la unidad de control.
Componentes:
The Registers

Los restistros se utilizan en los sistemas de computacin para almacenar una


variedad de datos, como direcciones, program counters, o datos necesarios para
le ejecucin del programa. Un registro es un dispositivo de hardware que
almacena datos binarios. Estn ubicados en el procesador para que la informacin
pueda ser accedida muy rpido.
Se pueden utilizar flip-flops D para implementar registros (uno por bit,
conectados juntos al mismo clock).
El procesamiento de datos de la computadora se hace por lo general con un tamao
fijo de palabra binaria que se encuentra almacenada en los registros. Por lo
tanto la mayora de las computadoras tienen registros de un cierto tamao:
16,32,64 bits (tipicamente una potencia de 2). Los registros contienen datos,
direcciones o informacin de control. Algunos registros tienen un propsito
especial y solo pueden contener datos, o solo pueden tener direccines o solo
informacin de control. Otros registros son ms genricos y pueden contener
cualquiera de estas cosas en distintos momentos. La informacin se escribe en
los registros, se lee de ellos y puede transferirse de uno a otro. Los registros
no se direccionan de la misma manera que la memoria (cada palabra de memoria
tiene una direccin binaria nica que comienza con la ubicacin 0). Los
registros son direccionados y manipulados por la misma unidad de control. En los
sistemas de computacin modernos, hay muchos tipos especializados de registros:
registros para almacenar informacin, registros para desplazar (shift) datos,
registros para comparar valores y registros que cuentan. Hay registros
anotadores que almacenan valores temporarios, registros ndice que controla los

loops de los programas, registros stack pointer que manejan pilas de informacin
para procesos, registros de status que mantienen el status o modo de operacin
(como condiciones overflow, carry o zero), y registros de propsito general que
estn disponibles para el programador. La mayora de las computadoras tiene sets
de registros y cada set se usa de una manera especfica. Por ejemplo, la
arquitectura Pentium tiene un conjunto de registros de datos y un conjunto de
registros de direcciones. Algunas arquitecturas tienen conjuntos muy largos de
registros que pueden usarse en formas bastante innovadoras para acelerar la
ejecucin de instrucciones.
The ALU

La unidad aritmtico lgica lleva a cabo las operaciones lgicas como


comparaciones y aritmticas como suma y multiplicacin, requeridas durante la
ejecucin del programa. Generalmente la ALU tiene dos entradas de datos y una
salida. Las operaciones que se realizan en la ALU usualmente afectan a los bits
en el registro de status (los bits se setean para indicar si ha ocurrido un
overflow por ejemplo). La ALU sabe qu operacin realizar porque est controlada
por las seales de la unidad de control.
The Control Unit

La unidad de control es el polica o agente de trfico de la CPU. Monitorea


la ejecucin de todas las instrucciones y la transferencia de toda la
informacin. Extrae instrucciones de la memoria, las decodifica y se asegura de
que los datos estn en el lugar correcto en el momento correcto, le dice a la
ALU que registros usar, sirve a las interrupciones y enciende la circuitera
correcta en la ALU para la ejecucin de la operacin deseada. La unidad de
control usa un registro program counter para encontrar la prxima instruccin a
ser ejecutada y un registro de status para llevar la cuenta de los overflows,
carries, borrows y el igual.
4.1.2 The Bus
El CPU se comunica con otros componentes a travs de un bus. Un bus es un
conjunto de cables que actan como caminos de datos compartidos para conectar
mltiples subsistemas dentro del sistema. Consiste en mltiples lineas que
permiten el movimiento paralelo de bits. Los buses son de bajo costo pero muy
verstiles y hacen facil conectar nuevos dispositivos entre ellos y al sistema.
En un momento dado, solo un dispositivo (sea un registro, la ALU, la memoria o
algn otro componente) puede usar el bus. Sin embargo, este uso compartido
usualmente resulta en cuellos de botella en las comunicaciones. La velocidad del
bus est relacionada con su longitud, tanto como el nmero de dispositivos que
lo comparten. Frecuentemente los dispositivos estn divididos en las categoras
master y slave, donde el dispositivo master es el que inicia las acciones y el
slave es el que responde a los requerimientos del master.
Un bus puede ser point-to-point, conectando dos componentes espefcos, o un common
pathway que conecta un nmero de dispositivos, teniendo estos dispositivos que
compartir el bus (conocido como un bus multipoint).

Debido a que se comparte, el protocolo del bus (reglas de uso) es muy importante.
Usualmente las lineas del bus que son dedicadas para mover los datos se llaman
el data bus. Estas lineas de datos contienen la informacin actual que debe ser
transferida de una locacin hacia otra. Las lneas de control indican qu
dispositivo tiene permiso para usar elbus y con qu propsito (leer o escribir
desde memoria, o de un dispositivo I/O por ejemplo). Tambin transfieren acuse
de recibo de los pedidos del bus, interrupciones y las seales de
sincronizacin del clock. Las lneas de direcciones indican la ubicacin (en
memoria, por ejemplo) de los datos que tienen que ser leidos o escritos. Las
power lines proveen la energa elctrica necesaria. Tpicamente las transacciones
del bus incluyen enviar direcciones (para leer o escribir), transferir data de
memoria a un registro (una lectura en memoria), transferir data de un registro a
la memoria (una escritura en memoria). Cada tipo de transferencia sucede dentro
de un ciclo del bus, el tiempo entre dos ticks del reloj del bus. Debido a los
diferentes tipos de informacin y diferentes tipos de dispositivos que usan los
buses, estos se han dividido en distintos tipos. Los buses procesador-memoria
(Processor-memory buses ) son buses cortos, de alta velocidad que estn ubicados
muy cerca del sistema de memoria de la mquina para maximizar el ancho de banda
(transferencia de los datos) y tienen usualmente un diseo muy especfico. Los
buses de I/O son tipicamente ms largos que el anterior y permiten muchos tipos
de dispositivos con anchos de banda variables. Estos buses con compatibles con
muchas arquitecturas. Un backplane bus (Figure 4.3) est construido en el chasis
de la mquina y conecta al procesador, los dispositivos I/O y la memoria (para
que todos compartan un bus). Muchas computadoras tienen una jerarqua de buses,
por lo que no es poco comn tener dos buses (por ejemplo uno procesador-memoria

y uno de I/O) o ms en el mismo sistema. Los sistemas de alto rendimiento


usualmente utilizan los tres tipos de buses.

Las computadoras personales tienen su propia terminologa en lo que se refiere a


buses. Tienen un bus interno, llamado bus de sistema que conecta la CPU, la
memoria y todos los otros componentes internos, y buses externos (llamados a
veces buses de expansin) que conectan los dispositivos externos, perifricos
slots de expansin y puertos de I/O al resto de la computadora. La mayora de
las computadoras tambin tiene buses locales, buses de datos que conectan los
perifricos directamente al CPU. Estos son buses de muy alta velocidad y pueden
utilizarse para conectar slo un nmero limitado de dispositivos similares. Los
buses de expansin pueden ser ms lentos pero permiten una conectividad mucho
ms genrica.
Los buses son esencialmente pequeos manojos de cables, pero tienen estndares
muy especficos para conectores, tiempo, seales de especificaciones y
protocolos exactos de uso.
Los buses sincrnicos tiene un reloj y las cosas solo pasan en los ticks del
clock (una secuencia de enventos es controlada por el reloj). Todos los
dispositivos son sincronizados por el ritmo al que corre el reloj. El tiempo del
ciclo del reloj es recproco al ritmo del clock del bus. Por ejemplo, si el
ritmo del reloj es 133MHz, entonces la longitud del ciclo del bus es de
1/133.000.000 o 7,52ns. Como el clock controla las transacciones, cualquier
distorsin del clock puede causar problemas, implicando que el bus debe
mantenerse lo ms corto posible para que la sincronizacin del reloj no se
vuelva muy grande (the clock drift cannot get overly large). Adems, el tiempo
del ciclo del bus no debe ser ms corto que la longitud del tiempo que le toma a
la informacin atravesar el bus. La longitud del bus, por lo tanto, impone
restricciones tanto al ritmo del clock del bus como el tiempo del ciclo del bus.
Con los buses asincrnicos, las lineas de control coordinan las operaciones y
complejo protocolo de handshaking debe utilizarse para reforzar la
sincronizacin. Para leer datos de memoria, por ejemplo, el protocolo requerira
pasos similares a los siguientes::

1. ReqREAD: Esta lnea de control del bus se activa y los datos de la direccin
de memoria se ubican en las lineas apropiadas del bus al mismo tiempo..
2. ReadyDATA: Esta lnea de control se sube cuando el sistema de memoria pone los
datos solicitados en las lneas de datos del bus.
3. ACK: Este lnea de control se utiliza para indicar que ReqREAD o ReadyDATA han sido reconocidas.
Usar un protocolo en lugar del reloj para coordinar las transaciones significa
que los buses asncronos se llevan mejor con tecnologas que pueden soportar una
variedad de dispositivos. Para usar el bus, un dispositivo debe reservarlo,
porque solo un dispositivo por vez puede usar el bus. Como se mencion
anteriormente, los master del bus, son dispositivos que tienen permitido iniciar
transferencias o informacin (control del bus) mientras que los slaves son
activados por un master y responden a los pedidos de leer y escribir datos (por
lo que solo los masters pueden reservar el bus). Ambos siguen un protocolo de
comunicacione para utilizar el bus, trabajando con requerimientos de tiempo muy
especficos. En un sistema muy simple, el procesador es el nico dispositivo que
puede convertirse en master del bus. Esto es bueno para evitar el caos, pero
malo porque el procesador se encuentra ahora envuelta en toda transaccin que
utilice el bus. En sistemas con ms de un dispositivo master, se requiere un
arbitraje. Los esquemas de arbitraje del bus deben proveer prioridades a ciertos
dispositivos master y al mismo tiempo asegurarse de que los dispositivos de
menor prioridad tambin tengan la posibilidad de transferir. (are not starved
out)
Los esquemas de arbitraje del bus se dividen en cuatro categorias:
1. Daisy chain arbitration: Este equema usa una linea de control perimitir el bus
(grant bus) que se pasa de los dispositivos de mayor prioridad a los de
menor prioridad (No se asegura la imparcialidad y es probable que a los
dispositivos de menor prioridad nunca se les permita utilizar el bus. Este
esquema es simple pero no es justo.
2. Centralized parallel arbitration: Cada dispositivo tiene una linea de control
request y un rbitro centralizado selecciona a quin le corresponde el bus.
Este tipo de arbitraje puede resultar en cuellos de botella..
3. Distributed arbitration using self-selection: Este esquema es similar al
centralizado pero en lugar de una autoridad central que elige quin utiliza el
bus, los mismos dispositivos determinan quien tiene la prioridad ms alta y
debera utilizarlo.
4. Distributed arbitration using collision detection: A cada dispoitivo se le permite
requerir el bus. Si el bus detecta colisiones (pedidos mtliples simultaneos),
el dispositivo debe hacer otro pedido (Ethernet usa este tipo de arbitraje).
4.1.3 Clocks
Toda computadora contiene un reloj interno que regula cuan rpido pueden ser
ejecutadas las instrucciones. El reloj tambin sincroniza todos los componentes
en el sistema. Con cada tick del reloj se marca el ritmo de todo lo que pasa en
el sistema, como un metrnomo o el conductor de una orqueta. El CPU utiliza este

reloj para regular su progreso, chequeando la velocidad de las puertas lgicas


digitales, impredecible de otra forma. La CPU requiere un nmero fijo de ticks
del reloj para ejecutar cada instruccin. Por lo tanto, el desempeo de las
instrucciones se mide frecuentemente en ciclos de reloj el tiempo entre los
ticks del mismo en lugar de en segundos. La frecuencia del reloj (a veces
llamada ritmo o velocidad) es medida en MHz, un MHz equivale a un millon de
ciclos por segundo. El tiempo del reloj (o perodo) es el recproco de la
frecuencia (1/f). Si una mquina tiene un tiempo de ciclo de 2ns es una mquina
de 500MHz. La mayora de las mquinas son sincrnicas: Hay una seal master de
reloj, que cambia de 0 a 1 a 0, etc, en intervalos regulares. Los registros
deben esperar al tick del reloj antes de poder cargar nuevos datos. Parece
razonable asumir que si aceleramos la velocidad del reloj la mquina correra
ms rapido. Sin embargo hay lmites de cuan cortos podemos hacer los ciclos del
reloj. Cuando hay un tick del reloj y se carga un dato en los registros, las
salidas de los registros pueden cambiar. Estos valores cambiados deben
propagarse a travs de los circuitos de la mquina hasta que alcancen la entrad
del siguiente conjunto de registros donde son almacenados. El ciclo del reloj
debe ser lo suficientemente largo como para permitir que estos cambios alcancen
el siguiente conjunto de registros. Si el ciclo es muy corto, podramos terminar
con algunos valores no alcanzando los registros. Esto resultaria en un estado
inconsistente en nuestra mquina, lo cual es algo que definitivamente debemos
evitar. Por lo tanto el tiempo mnimo del ciclo del clock debe ser por lo menos
tan grande como el mximo retardo de propagacin del circuito, desde cada salida
de un conjunto de registros a las entradas de los registros. Podramos acortar
la distancia entre los registros para acortar el retardo de la propgafacin
agregando registros entre los registros de salida y sus correspondientes
registros de entrada. Pero los registros no pueden cambiar sus valores hasta el
tick del reloj por lo que, en efecto, hemos incrementado el nmero de cilclos de
reloj. Por ejemplo, una instruccin que requerira 2 ciclos de reloj ahora podra
requerir tres o cuatro (o ms dependiendo de donde ubicamos a los registros
adicionales).
La mayoria de las instrucciones de las mquinas requieren entre uno y dos ciclos
de reloj, pero algunas pueden tomar 35 o ms. La siguiente formula relaciona los
segundos a los ciclos:

Es importante notar que la arquitectura de la mquina tiene un gran efecto en su


desempeo. Dos mquinas con la misma velocidad de reloj no necesariamente
ejecutan instrucciones al mismo nmero de ciclos.
En general, la multiplicacin requiere ms tiempo que la suma, las operaciones
en punto flotante requieren ms ciclos que las de enteros, y acceder a la
memoria toma ms tiempo que acceder a los registros.
Generalmente cuando nos refericmos al CLOCK, nos referimos al reloj del sistema,
o el reloj maestro que regula la CPU y otro componentes. Sin embargo algunos

buses tambin tienen su propio CLOCK. Los clocks de los buses son usualmente ms
lentos que los de la CPU causando problemas de cuello de botella. Los
componentes del sistema han definido lmites de desempeo, indicando el tiempo
mximo requerido para que los componentes efectuen sus funciones. Los
fabricantes garantizan que sus componentes correran dentro de estos lmites en
las circunstancias ms extremas. Cuando conectamos todos los componentes de
forma serial donde un componente debe terminar su tarea antes de que otro pueda
funcionar correctamente, es importante tener en cuenta estos lmites de
desempeo para poder sincronizar los componentes correctamente. Sin embargo,
mucha gente fuerza los lmites de algunos componentes del sistema para mejorar
el desempeo del mismo.
Overclocking es un mtodo que la mayora de la gente utiliza para lograr esta
meta. Aunque muchos componentes son candidatos potenciales, el componente ms
popular para realizar overlocking es el CPU. La idea basica es correr el CPU a
velocidades de clock o bus por encima de los lmites especificados por el
fabrincante. Aunque esto puede aumentar el desempeo del sistema, uno debe ser
cuidadoso de no crear fallas de sistema o, peor an, sobrecalentar la CPU.
Tambin se puede hacer overlock en el bus del sistema, lo que resulta en hacer
overlock de varios componentes que se comunican por ese bus. Esto puede generar
mejoras considerables en el desempeo, pero tambin puede daar los componentes
que utilizan ese bus haciendo que su desempeo sea poco confiable.
4.1.4 The Input/Output Subsystem
Los disposivos de entrada/salida I/O nos permiten comunicarnos con el sistema de
la computadora, I/O es la transferencia de datos entre la memoria primaria y
varios perfifricos I/O. Dispositivos de entrada como teclados, mouse, lectores
de tarjeta, scanners, sistemas de reconocimiento de voz y pantallas tctiles nos
permiten ingresar data en la computadora. Dispositivos de salida como monitores,
impresoras, plotters y parlantes nos permiten obtener informacin de ella.
Estos dispositivos no estn directamente conectados a la CPU. En su lugar hay
una interfaz que maneja la transferencia de datos. Esta interfaz convierte las
seales del sistema de bus en y hacia formatos que son aceptables por el
dispositivo dado. La CPU se comunica con estos dispositivos externos a travs de
registros de I/O. Este intercambio de datos se realiza de dos maneras. En I/O
mapeado a memoria(memory-mapped I/O), los registros en la interfaz aparecen en
el mapa de memoria de la computadora y no hay diferencia real entre acceder a la
memoria y acceder a un dispositivo I/O. Esto es ventajoso desde la perspectiva
de la velocidad, pero usa espacio de memoria en el sistema. Con instruction-based
I/O, la CPU tiene instrucciones especializadas que realizan las entradas y
salidas. Aunque esto no utiliza espacio de memoria, requiere instrucciones
especiales de I/O, lo cual implica que puede ser utilizado solo en CPUs que
pueden ejecutar estas instrucciones especficas. Las interrupciones juegan un
papel muy importante en el I/O porque son una forma eficiente de notificar a la
CPU que una entrada o salida est disponible para el uso.

4.1.5 Memory Organization and Addressing


Podemos ver a la memoria como una matriz de bits. Cada fila, implementada por un
registro, tiene una longitud tpicamente equivalente al tamao de palabra de la
mquina. Cada registro (ms conocido como ubicacin de memoria) tiene una nica
direccin; las direcciones de memoria usualmente empiezan en cero. Una direccin
casi siempre se representa por un entero sin signo. Normalmente la memoria es
direccionable a byte, lo que quiere decir que cada byte tiene una direccin
nica. Algunas mquinas pueden tener un tamao de palabra mayor pero an as
utilizar arquitectura direccionable a byte. En estos casos, cuando una palabra
utiliza mltiples bytes, el byte con la direccin ms baja determina la
direccin de toda la palabra. Una computadora tambin puede ser direccionable a
palabra. Una direccin de memoria generalmente se almacena en una mquina de una
sola palabra (?)
Las palabras son la unidad bsica de tamao que se utiliza en varias
instrucciones. Por ejemplo podemos leer o escribir una palabra a memoria,
incluso en una mquina direccionable a byte. Si la arquitectura es direccionable
a byte y la palabra del set de instrucciones es ms grandes se debe tener en
cuenta el problema del alineamiento. Por ejemplo, si queremos leer una palabra
de 32 bits en una mquina direccionable a byte debemos asegurarnos de que: (1)
la palabra est almacenada en los lmites de alineacin naturales y (2) el
accesos empieza en ese lmite. Esto se logra en el caso de palabras de 32 bits,
requiriendo que la direccin sea un mltiplo de 4. Algunas arquitecturas
permiten accesos desalineados, donde la direccin solicitada no tiene que
empezar en un lmite natural.
La memoria se componen de chips de RAM y es referida usualmente con la notacin
LxW (length X Width). Por ejemplo 4Mx16 significa que la memoria tiene 4M de
longitud (tiene 4M = 22 X 220 = 222 palabras) y tiene 16 bits de ancho (cada
palabra es de 16 bits). El ancho representa el tamao de la palabra. Para
direccionar esta memoria (asumiendo direccionamiento a palabra) necesitamos
poder identificar univocamente 212 items diferentes, lo que significa que
necesitamos esta cantidad de direcciones. Como las direcciones son numeros
binarios sin signo, necesitamos contar de 0 a 212 1 en binario. En general, si
una computadora tiene 2N unidades direccionables de memoria, necesitar N bits
para direccional unvocamente cada byte. La memoria principal es usualmente ms
grande que un chip de RAM. En consecuencia, estos chips estn combinados en un
nico mdulo para otorgar el tamao de memoria deseado. Por ejemplo para
construir una memoria de 32Kx16 con chips de 2Kx8 conectamos 16 filas y dos
columnas de chips.
Cada fila direcciona palabras de 2K pero requiere de 2 chips para manejar el
ancho completo. Las direcciones para esta memoria tienen que ser de 15 bits (hay
32K = 25 X 210 palabras que acceder). Pero cada par de chips (cada fila) requiere
solo 11 lneas de direccin (cada par tiene solo 211 palabras). En esta situacin
se requiere un decodificador para decodificar los 4 bits ms a la izquierda de
la direccin para determinar cual par de chips contiene la direccin deseada.
Una vez que el chip correcto ha sido localizado los 11 bits restantes se

ingresan en otro decodificador para encontrar la direccin exacta dentro de ese


par de chips. Un solo mdulo de memoria compartida provoca acceso secuencial
(sequentialization of acces). La intercalacin de memoria (Memory interleaving),
que divide la memoria en varios mdulos o bancos de memoria puede usarse para
aliviar esto. Con el low-order interleaving, los bits de ms bajo orden de la
direccin se utilizan para seleccionar el banco; en high-order interleaving, se
utilizan los bits de ms alto nivel.
High-order interleaving, la organizacin ms intuitiva, distrubuye las
direcciones para que cada mdulo contenga direcciones consecutivas:

La memoria de Low-order interleaved ubica palabras consecutivas de memoria en


diferentes mdulos:

Con los buses apropiados usando low-order interleaving, una lectura o escritura
usando un mdulo puede empezar antes que una lectura o escritura usando otro
mdulo haya terminado (se pueden superponer).
4.1.6 Interrupts
Las interrupciones son eventos que alteran (o interrumpen) el flujo normal de la
ejecucin en el sistema. Una interrupcin puede ser activada por una variedad de
razones incluyendo:
pedidos de I/O
Errores aritmticos (como divisin por cero)
underflow u overflow
Mal funcionamiento de hardware
Breakpoints definidos por el usuario (como al debuggear un programa)
Fallas de pgina
Instrucciones invlidas (que usualmente resultan de problemas de punteros)
Miscelanea
Las acciones que se realizan para cada uno de estos tipos de interrupcin (el
manejo de interrupciones) son muy diferentes. Decirle a la CPU que ha terminado

un pedido de I/O es muy diferente a terminar un programa por una divisin por
cero. Pero todas estas acciones se manejan por interrupciones porque requieren
un cambio en el flujo normal de la ejecucin del programa. Una interrupcin
puede ser iniciada por el usuario o el sistema, puede ser enmascarable (ser
desactivada o ignorada) o no (una interrupcin de alta prioridad no puede
enmascararse y debe ser reconocida), puede ocurrir durante o entre las
instrucciones, puede ser sincrnica (ocurrir en el mismo lugar cada vez que un
programa se ejecuta) o asincrnica (ocurrir inesperadamente) y puede resultar en
el programa siendo terminado o continuando la ejecucin una vez que se maneja la
interrupcin.

AC: The accumulator, which holds data values. This is a general purpose register
and holds data that the CPU needs to process. Most computers today have
multiple general purpose registers.
MAR: The memory address register, which holds the memory address of the
data being referenced.
MBR: The memory buffer register, which holds either the data just read from
memory or the data ready to be written to memory.
PC: The program counter, which holds the address of the next instruction to
be executed in the program.
IR: The instruction register, which holds the next instruction to be executed.
InREG: The input register, which holds data from the input device.
OutREG: The output register, which holds data for the output device.

4.2.3 The Instruction Set Architecture


El instruction set architecture (ISA) de una mquina especifica las instrucciones que
esa mquina puede llevar a cabo y el formato de cada instruccin. El ISA es
esencialmente la interfaz entre el software y el hardware. Algunas ISAs incluyen
cientos de instrucciones.
Las instrucciones en Marie consisten de un cdigo de operacin de 4 bits que
especifica la instruccin a ser ejecutada (16 posibles instrucciones). Los 12
bits restantes forman una direccin, lo cual permite un tamao mximo de memoria

de 2121. La mayora de las ISAs consisten en instrucciones para procesar datos,


mover datos y controlar la secuencia de ejecucin de un programa.

4.3 INSTRUCTION PROCESSING


Todas las computadoras siguen un ciclo de mquina bsico, el ciclo: fetchdecode- excecute.
4.3.1 The Fetch-Decode-Execute Cycle
El ciclo fetch-decode-execute representa los pasos que sigue una computadora para
correr un programa. El CPU hace el fetch de una instruccin (la transfiere de
memoria principal al registro de instruccin), la decodifica (determina el
cdigo de operacin y hace el fetch de cualquier dato necesario para llevar a
cabo la misma), y la ejecuta (realiza la operacin indicada por la instruccin).
Una gran parte de este ciclo se pasa en copiar datos de una locacin a otra.
Cuando un programa se carga inicialmente, la direccin de la primera instruccin
se ubica en el PC. Los pasos en este ciclo, que se llevan a cabo en ciclos
especficos del reloj se listan ms abajo (pasos 1 y 2 fetch, paso 3 decode,
paso 4 excecute):
1. Copia el contenido del PC al MAR: MAR <- PC
2. Va a memoria principal y hace el fetch de la instruccin que se encuentra en
MAR, ubicando esta instruccin en el IR; incremente el PC en un (ahora el PC
apunta a la siguiente instruccin del programa): IR <- M[MAR], PC<- PC+1 (como
MARIE es direccionable a palabra el PC se incrementa en uno por lo que la
direccin de la prxima palabra esta en el PC. Si MARIE fuera direccionable a
Byte, habra que aumentar el PC en 2 para que apuntara a la direccin de la
prxima instruccin)
3. Copia los 12 bits ms a la derecha del IR en MAR y decodifica los 4 bits ms
a la izquierda para determinar el cdigo de operacin: MAR <- IR[11-0],
decodifica IR[15-12].
4. De ser necesario, utiliza la direccin en MAR para ir a memoria a obtener el
dato ubicndolo en el MBR (y posiblemente en el AC), y luego ejecuta la
instruccin MBR <- M[MAR].

Incluso con sets de instrucciones muy grandes, largas instrucciones y memorias


muy grandes, las computadoras pueden ejecutar millones de estos ciclos en un
parpadeo.
4.3.2 Interrupts and I/O
MARIE tiene dos registros para ubicar entradas y salidas. El registro input
mantiene datos que estn siendo transferidos desde un dispositivo de entrada a
la computadora. El registro de salida mantiene informacin lista para enviarse a
un dispositivo de salida. El tiempo usado por estos dos registros es muy

importante. Por ejemplo, si estmos ingresando un input desde el teclado y


tipeamos muy rpido, la computadora debe ser capaz de leer cada carcter que se
ubica en el registro input. Si ingresa otro carcter en ese registro antes de
que la computadora pueda procesar el actual, entonces est perdido. Como el
procesador es muy rpido y la entrada del teclado muy lenta, es muy probable que
el procesador lea el mismo caracter en el registro de input muchas veces.
Debemos evitar ambas situaciones.
MARIE maneja estos problemas usando interrupciones. Cuando la CPU ejecuta una
instruccin de entrada o salida el dispositivo apropiado de I/O es notificado.
La CPU continua con otros trabajos hasta que el dispositivo este listo. En ese
punto, el dispositivo enva una seal de interrupcin al CPU. El CPU procesa
entonces la interrupcin luego de lo cual contina con el ciclo normal de fetchdecode-execute.
Este proceso requiere lo siguiente:
Una seal (interrupcin) desde el dispositivo I/O a la CPU indicando que la
entrada o salida est completa
Algunos medios para permitir a la CPU desviarse de su ciclo usual de fetchdecode-execute para reconocer esta interrupcin.
El metodo en que la mayora de las computadoras procesan una interrupcin es
chequear si hay alguna interrupcin pendiente al comienzo de cada ciclo. Si es
as, la interrupcin se procesa, tras lo cual el ciclo de ejecucin de la
mquina contina. Si no hay ninguna interrupcin el procesamiento continua
normal.

Tpucamente los dispositivos de I/O envan la interrupcin utilizando un


registro especial, el registro de status o flan. Un bit especial es seteado para
indicar que ha ocurrido una interrupcin. Por ejemplo, cuando una entrada
ingresa desde el teclado se setea este bit. La CPU chequea este bit al comienzo
de cada ciclo de mquina. Cuando est setead, la CPU procesa la interrupcin, si
no sigue normalmente procesando las instrucciones del programa que se encuentra
actualmente en ejecucin.
Cuando la CPU encuentra seteado el bit de interrupcin ejecuta una rutina de
interrupcin que est determinada por el tipo de interrupcin que ocurri. Las
interrupciones de I/O no son el nico tipo de interrupcin que puede ocurrir
cuando un programa se est ejecutando. Hay interrupciones externas generadas por
eventos externos (como I/O o fallas de energa), internas generadas por alguna
condicin de excepcin en el programa (como divisin por cero, stack overflow o
violaciones de proteccion) e interrupciones de software generadas al ejecutar
una instruccin en el programa (como una que requiere que un programa cambie de
correr en un nivel, como nivel usuario, a otro nivel, como nivel kernel).
Sin importar el tipo de interrupcin que ha sido invocada, el manejo de la
interrupcin es el mismo. Luego de que la CPU reconoce un pedido de interrupcin,
la direccin de la rutina de interrupcin es determinada (usualmente por
hardware) y la rutina es ejecutada. El CPU pasa de correr el programa a correr
un procedimiento especial para manejar la interrupcin. El ciclo normal de
fetch-decode-execute se corre en las instrucciones de la rutina de atencin de
la interrupcin hasta que se haya completado. Luego la CPU vuelve al programa
que estaba corriendo antes de que ocurriera la interrupcin. La CPU debe volver
al punto exacto en el que estaba corriendo el programa original. Por lo tanto,
cuando la CPU cambia a la rutina de atencin de la interrupcin, debe guardar el
contenido de el PC, el contenido de todos los registros en el CPU, y las
condiciones de estado que existen para el programa original. Cuando se termina
la rutina de atencin de la interrupcin, la CPU restablece el mismo exacto
entorno en que el programa original estaba corriendo, y luego empieza el ciclo
de fecth-decode-excecute del programa original.

4.5 A DISCUSSION ON ASSEMBLERS


In the program shown in Table 4.3 it is a simple matter to convert from the
assembly language instruction Load 104, for example, to the machine language
instruction 1104 (in hex). But why bother with this conversion? Why
not just write in machine code? Although it is very efficient for computers to
see these instructions as binary numbers, it is difficult for human beings to
understand and program in sequences of zeros and ones. We prefer words and
symbols over long numbers, so it seems a natural solution to devise a program
that does this simple conversion for us. This program is called an
assembler.
4.5.1 What Do Assemblers Do?
El trabajo de un programa ensamblador es convertir lenguaje ensamblador (usando
cdigos nemotcnicos) a lenguaje de mquina (el cual consiste enteramente en

valores binarios o cadenas de ceros y unos). Los ensambladores toman el lenguaje


ensamblador del programador, el cual es realmente una representacin simblica
de los nmeros binarios, y lo convierte en instrucciones binarias, o el cdigo
de mquina equivalente. El ensamblador lee el archivo fuente (programa de
ensablador) y produce el archivo objeto (object file, el cdigo objeto, de la
mquina).
el cdigo objeto es el resultado de la compilacin del cdigo fuente. Puede ser en lenguaje mquina o bytecode, y puede
distribuirse en varios archivos que corresponden a cada cdigo fuente compilado. Luego un enlazador (linker) se encarga
de juntar todos los archivos de cdigo fuente para obtener el programa ejecutable.
Cdigo objeto: Conjunto de instrucciones y datos escritos en un lenguaje que entiende el ordenador directamente: binario o
cdigo mquina. Provienen de la traduccin de cierto cdigo fuente, es un fragmento del programa final y es especfico de
la plataforma de ejecucin.

Sustituyendo los simples nombres alfanumericos por los cdigos de operacin hace
que programar sea mucho ms fcil. Tambien podemos sustituir etiquetas para
identificar o nombrar direcciones de memoria en particular, haciendo la tarea de
escribir programas ensambladores ms simple.
Por ejemplo, podemos utilizar etiquetas para indicar direcciones de memoria,
haciendo innecesario saber la direccin de memoria exacta de los operandos para
las instrucciones. Cuando el campo de direccin de una instruccin es una
etiqueta en lugar de una direccin fsica, el ensamblador tiene que traducirla
en una direccin fsica real de memoria principal. La mayora de los lenguajes
ensambladores permiten etiquetas. Los ensambladores tpicamente espeficican
reglas de formato para sus instrucciones incluyendo las etiquetas. Por ejemplo,
una etiqueta puede estar limitada a tres caracteres y puede ser requerido que
sea el primer campo en la instruccin. En MARIE por ejemplo se requiere que las
etiquetas estn seguidas de una coma.
Las etiquetas son buenas para los programadores. Sin embargo, hacen que el
ensamblador tenga ms trabajo. Debe hacer dos pasos por el programa para
realizar la traduccin. Esto significa que el ensamblador lee el programa dos
veces, de comienzo a fin cada vez. En la primera pasada, el ensamblador
construye un set de correspondencias llamado tabla de smbolos. Como el
ensamblador atraviesa el cdigo de principio a fin, no puede traducir toda la
instruccin en lenguaje de mquina en un paso; no sabe donde est ubicada la
porcin de datos de la instruccin si solo est dada por una etiqueta. Pero
luego de haber construido la tabla de smbolos, puede hacer una segunda pasada y
completar los espacios

En la primer pasada crea la siguiente tabla de smbolos;

Tambin empieza a traducir las instrucciones. Luego de la primer pasada, las


instrucciones quedan incompletas de la siguiente manera.

En la segunda pasada, el ensamblador utiliza la tabla de smbolos para completar


las direcciones y crear las correspondientes instrucciones en lenguaje de
mquina. As, en la segunda pasada sabe que X est en la direccin 104 y lo
sustituye.
Como la mayora de la gente no se encuentra cmoda leyendo hexadecimal, la
mayora de los lenguajes permiten que los valores de datos almacenados en
memoria sean especificados como binarios, hexadecimales o decimales. Tipicamente
algn tipo de directiva de ensamblador (una instruccin para el ensamblador que
no debe traducir a lenguaje de mquina) es dada para especificar qu base debe
usar para interpretar el valor.

Otra directiva comn en casi todos los lenguajes de programacin es el


delimitador de comentario, un carcter especial que le dice al ensamblador o
compilador que ignore todo el texto que siga despus de ese carcter.
4.5.2 Why Use Assembly Language?
La mayora de los programadores afirma que el 10% del cdigo en un programa
utiliza aproximadamente el 90% del tiempo de CPU. En aplicaciones de tiempo
crtico, usualmente necesitamos optimizar este 10% de cdigo. Tpicamente, el
compilador maneja esta optimizacin por nosotros. El compilador toma un lenguaje
de alto nivel (como C++) y lo convierte en lenguaje ensamblador (que luego se
convierte en cdigo de mquina). Los compiladores suelen hacer un gran trabajo.
Ocasionalmente, sin embargo, los programadores deben evitar algunas de las
restricciones que se encuentran en los lenguajes de alto nivel y manipular el
cdigo ensamblador ellos mismos. Haciendo esto, los programadores pueden hacer
el programa ms eficiente en trminos de tiempo (y espacio). Este enfoque hbrido
(la mayora del programa escrito en lenguaje de alto nivel, con parte reescrita
en ensamblador) permite al programador sacar ventaja de los mejor de ambos
mundos.
Si todo el programa o respuesta de tiempo es crtica, el lenguaje ensablador
usualmente se convierte en el lenguaje a elegir. Esto es porque los compiladores
tienden a ocultar informacin sobre el costo (en tiempo) de varias operaciones,
y los programadores usualmente encuentran dificl juzgar exactamente cmo se
desempearan sus programas compilados.
El lenguaje ensamblador pone al programador ms cerca de la arquitectura y, por
lo tanto, en mayor control. El lenguaje ensablador podra ser necesario si el
programador quiere lograr ciertas operaciones que no estn disponibles en un
lenguaje de alto nivel. Un ejemplo perfecto, en terminos de diseo de
performance de respuesta y espacio crtico, se encuentra en los sistemas
embebidos. Estos son sistemas en los cuales la computadora est integrada en un
dispositivo que tpicamente no es una computadora. Los sistemas embebidos deben
ser reactivos y usualmente son encontrados en ambientes de tiempo restringido.
Estos sitemas estn diseados para desempear una nica instruccin o un set muy
especfico de instrucciones. Es posible que todos los das usemos estos sistemas
todos los das.
Pequeos electrnicos (como cmaras, filmadores, celulares, juegos interactivos),
electrodomsticos (como lavarropas, microondas, lavavajillas), autos (en
particular el control del motor y sistema de antibloqueo de frenos),
instrumentos mdicos, etc son algunos ejemplos donde encontramos sistemas
embebidos. El software para un sistema embebido es crtico. Un programa de
software embebido debe desempeares en parmetros de respuesta muy especficos y
esta limitada la cantidad de espacio que puede consumir. Estas son aplicaciones
perfectas para la programacin en lenguaje ensamblador.

4.7 A DISCUSSION ON DECODING: HARDWIRED VS.


MICROPROGRAMMED CONTROL (PAG 179)

La unidad de control hace que la CPU ejecute una secuencia de pasos


correctamente. Para ello tiene que haber seales de control que hagan assert de
las lineas de los varios componentes digitales para que las cosas sucedan como
son descriptas. Para asegurar que las lineas de control se setean adecuadamente
hay dos enfoces.
El primero es conectar fsicamente las lneas de control a las instrucciones de
la mquina. Las instrucciones estn divididas en campos y los diferentes bits de
la instruccin se combinan a travs de varios componentes digitales lgicos para
manejar la lnea de control. Esto se llama hardwired control . La unidad de
control es implementada utilizando hardware (puertas NAND, flip-flops,
contadores, por ejemplo). Se necesita un circuito especial que utiliza, como
inputs, los bits del cdigo de operacin, los bits del registro de status
(flags), seales del bus y seales del clock. Produce como salidas, seales de
control que manejan los componentes en la computadora. Por ejemplo un
decodificador 4-to-16 podra utilizarse para decodificar el cdigo de operacin.
Utilizando el contenido del IR y el estado de la ALU, esta unidad controla los
registros, las operaciones de la ALU, los shifters y el acceso al bus.

Comentario: Chequear otra


traduccin

La ventaja del control cableado es que es muy rpido. La desventaja es que el


set de instrucciones y el control lgico estn directamente relacionados por los
circuitos especiales que son complejos y difciles de disear o modificar. Si
alguien disea una computadora hardwired y despus decide extender el cdigo de
instrucciones los componentes fsicos en la computadora tienen que cambiarse.
Esto es prohibitivamente caro, porque no solo tienen que fabricarse nuevos chips,
sino que los viejos deben ser reubicados y reemplazados.

El otro enfoque es la microporgramacin, utiliza software para control.


Todas las instrucciones de la mquina son entradas a un programa especial, el
microprograma, que convierte la instruccin en las seales de control apropiadas.
El microprograma es escencialmente un intrprete, escrito en microcdigo, que
est almacenado en firmware(ROM, PROM o EPROM) al cual se refiere usualmente
como control store. Este programa convierte las instrucciones de mquina de ceros
y unos en seales de control.
Esencialmente hay una subrutina en este programa para cada instruccin de
mquina. La ventaja de este enfoque es que si se requiere modificar el set de
instrucciones, simplemente se puede hacer un update del microprograma para
ajustarse, no se requiere ningun cambio de hardware.

La microprogramacin es flexible, simple en diseo y se presta a sets de


instrucciones muy poderosos. La microprogramacin permite convenientes
compensaciones de hardware/software: si lo que quers no est implementado en
hardware (por ejemplo tu mquina no tiene declarada la multiplicacin), puede
ser implementado en el microcdigo. La desventaja de este enfoque es que todas
las intrucciones deben pasar por un nivel adicional de interpretacin, haciendo
ms lenta la ejecucin del programa.
Adems de este costo en tiempo, hay un costo asociado con el desarrollo real,
porque se requieren herramientas apropiadas.
Es importante notar que cualquiera sea el enfoque, el tiempo es crtico. La
unidad de control es responsable de las seales de tiempo reales que dirigen
todas las acciones y transferencia de datos. Estas seales se generan en
secuencia con un simple contador binario. Por ejemplo las seales de tiempo para
una arquitectura podran incluir: T1, T2, T3, T4, T5, T6, T7, y T8. Estas seales
controlan cuando pueden ocurrir las acciones. Un fetch de una instruccin podra
suceder solo cuando se activa T1 mientras que el fetch de un operando podra
ocurrir solo cuando se activa T4. Sabemos que los registros pueden cambiar de
estado solo con el pulso del reloj, pero tambin estn limitados a cambiar en
conjunto con una seal de tiempo dado. Por ejemplo una memoria que incluye el
control Write Enable, este control podra estar en un AND con una seal de
tiempo para asegurarse de que la memoria cambie solo durante intervalos
especficos.

Potrebbero piacerti anche