Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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
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.
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
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).
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
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.
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:
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
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.
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
_______.
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?
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.
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:
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
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
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.
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
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
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
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
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
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.
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.
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