Sunteți pe pagina 1din 25

Lapso 2016-1

333-TP

- 1/6

UNIVERSIDAD NACIONAL ABIERTA


VICERRECTORADO ACADMICO
AREA: INGENIERA
TRABAJO PRCTICO
ASIGNATURA: Arquitectura del Computador
CDIGO:

333

FECHA DE ENTREGA AL ESTUDIANTE: Adjunto a la Primera


Prueba Parcial.
FECHA DE DEVOLUCIN POR PARTE DEL ESTUDIANTE:
Adjunto a la Prueba Integral.
NOMBRE DEL ESTUDIANTE:

JOS MANUEL AVILA DAZ

CDULA DE IDENTIDAD: V15486069


CORREO ELECTRNICO DEL ESTUDIANTE:

josem.avilad@gmail.com

TELFONO: 04129350595
CENTRO LOCAL:
CARRERA:

COJEDES

INGENIERA DE SISTEMAS

LAPSO ACADMICO: 2016/1


NUMERO DE ORIGINALES:
FIRMA DEL ESTUDIANTE:
UTILICE ESTA MISMA PGINA COMO CARTULA DE SU
TRABAJO PRCTICO

RESULTADOS DE CORRECCIN
OBJ N
0:NL

Especialista: Olga Rodrguez

1:L

Ingeniera de Sistemas

Evaluadora: Sandra Snchez

Indice
Pg.
Introduccin. 3
Fundamentos de la memoria cach

Esquemas de coherencia de las cachs.

El problema de coherencia de las cachs. 9


Protocolos de sondeo o snoopy.

10

Protocolo de invalidacin de 3 estados (MSI)...

12

Protocolo de invalidacin de 4 estados (MESI)

14

Protocolo Write Once

17

Protocolo de actualizacin de 4 estados (Dragn)

19

Protocolo Firefly. 22
Conclusiones

24

Bibliografa

25

Introduccin

El siguiente trabajo de investigacin est destinado a la asignatura Arquitectura del


computador, y tiene como finalidad extender los conocimientos del investigador en
relacin al problema de coherencia de la memoria cache y los diferentes protocolos de
sondeo que se han desarrollado para solucionarlo.
En una primera parte del contenido de la investigacin, se abordarn los conceptos
y fundamentos de la memoria cach: la localidad de referencia, poltica de ubicacin,
poltica de sustitucin y poltica de actualizacin; de esta manera el lector de ser necesario
comprender el funcionamiento y las operaciones bsicas que se realizan a nivel de la
memoria cach, para luego profundizar los conocimientos en los puntos siguientes.
Por otra parte en una segunda etapa, se abarcarn los temas relacionados al
problema de coherencia de las memorias caches; donde se expone el problema clsico de
coherencia que se origina en el procesamiento de datos dentro las memorias cachs. Los
esquemas que se han desarrollado para enfrentar el problema y los diferentes tipos de
protocolos que se han diseado de acuerdo a la arquitectura de la unidad central de
procesos para optimizar el rendimiento y el costo de la misma.

Fundamentos de la memoria cache


La efectividad del mecanismo de la memoria cach se basa en una propiedad de
los programas denominada localidad de referencia y que se explica a continuacin. El
principio de localidad de referencia dice que los accesos a memoria que realiza la CPU no
estn uniformemente distribuidos por todo el espacio de direcciones, sino que,
temporalmente, se concentran en reas de la memoria. Lo que establece este principio se
debe a que el contenido de cada programa no est esparcido por toda la memoria, sino
que sus instrucciones y datos estn contenidos en una o varias secciones de memoria
contigua, por lo que los accesos a la memoria se concentran en las reas donde estn las
instrucciones o los datos del programa en ejecucin.
El anlisis de los programas muestra que la mayora del tiempo de ejecucin se
dedica a rutinas en las que una serie de instrucciones se ejecutan repetidamente. Estas
instrucciones pueden estar formando parte de un bucle, bucles anidados, o unos cuantos
procedimientos a los que se llama iterativamente. Por esto, las referencias a memoria en
una porcin de tiempo dada, se concentran, concretamente, no en todo el programa que
se est ejecutando, sino, ms especficamente, en el fragmento del bucle que en ese
momento se est ejecutando. Segn esto, si el segmento activo de un programa se puede
ubicar en una memoria rpida, aunque pequea, el tiempo total de ejecucin puede verse
drsticamente reducido.
El principio de localidad se manifiesta en dos aspectos: temporal y espacial.
La localidad de referencia temporal se debe a la naturaleza repetitiva de los
programas o de porciones de los programas, y significa que, tal y como hemos visto en la
pgina anterior, una instruccin que se acaba de ejecutar recientemente es muy probable
que se vuelva a ejecutar en un futuro muy prximo. Ahora, la secuencia detallada de la
ejecucin de las instrucciones no es significativa, lo que realmente nos importa es que
muchas instrucciones localizadas en reas concretas del programa, debido a los bucles
que las encierran, se ejecutan repetidamente durante un periodo de tiempo, mientras que
al resto del programa o del resto de la memoria solo se accede muy de vez en cuando.
El aspecto espacial quiere decir que las instrucciones que se encuentran en la
proximidad de una instruccin recientemente ejecutada (en cuanto a sus direcciones en
memoria) tambin es muy probable que se ejecuten muy pronto. A los datos u operandos
de un programa les sucede lo mismo, no estn dispersos por toda la memoria, sino que
estn agrupados en una zona de la misma, y ocupando direcciones contiguas.

Dado que el tiempo de acceso a la memoria principal es muy costoso y teniendo en


cuenta lo que nos dice la localidad espacial, parece conveniente que cuando se accede a
ella para obtener un byte o una palabra necesitada por la CPU, en lugar de transferir
solamente el dato solicitado por la CPU, se aproveche el viaje para transferir, no
solamente ese byte o palabra, sino un bloque contiguo de informacin que contenga
dicho byte y unos pocos ms que estn en las direcciones cercanas. As, cuando se utiliza
una memoria cach, la unidad de transferencia entre sta y la memoria principal es el
bloque.
El tamao de un bloque suele ser el ancho del bus de datos o un mltiplo de l, es
decir, 2, 4, 8 bytes.

Conceptualmente el funcionamiento de una memoria cach es muy simple. La


circuitera de control de la memoria est diseada para aprovechar la localidad de
referencia. De acuerdo con el aspecto temporal de la localidad de referencia, siempre que
un dato se necesita por primera vez, se debe traer a la memoria cach, en la que
permanece, de tal forma que cuando se le vuelva a necesitar, se podr obtener muy
rpidamente.
Por su parte, la localidad espacial aconseja que en lugar de traer a la cach
solamente el dato referenciado, se traiga el grupo de datos que reside en direcciones
5

adyacentes a dicho dato. En el contexto de las cachs, se emplea el trmino bloque para
referirse a un conjunto de datos con direcciones contiguas que se utiliza como unidad de
transferencia entre la memoria principal y la cach. El espacio que tiene una cach para
albergar un bloque de memoria principal se denomina lnea.
Cuando se recibe una peticin de lectura de la CPU, el contenido del bloque
completo de memoria principal que contiene la direccin especificada se transfiere a la
cach. Posteriormente, cuando el programa referencia cualquiera de las direcciones del
bloque, el contenido correspondiente se lee directamente de la cach (solamente la
palabra o parte de la palabra referenciada, no el bloque completo).

Cuando la CPU intenta leer una palabra de memoria principal, se le presenta la


direccin a la memoria cach y sta comprueba si tiene el dato correspondiente a esa
direccin. Si es as, entrega el dato; si no, se produce una falta de cach, con lo que hay
que acudir a la memoria principal para leer un bloque de varias palabras adyacentes en
memoria. Como se ha mencionado anteriormente, el hecho de leer un bloque, y no
solamente la palabra concreta referenciada, se debe al principio de localidad de referencia
espacial, pues cuando en la CPU se genera una referencia a una palabra concreta, es muy
fcil que en las prximas lecturas se haga referencia a otras palabras cercanas a esa
palabra.
Normalmente la memoria cach puede almacenar un nmero de bloques de
memoria que es muy pequeo comparado con el nmero de bloques de la memoria
principal. La correspondencia entre los bloques de la memoria principal y los que se
encuentran en la cach se denomina funcin de correspondencia. La funcin de
correspondencia a utilizar se establece mediante la poltica de ubicacin. Cuando la cach
est llena, y se referencia una direccin cuyo bloque no est en la cach, el hardware de la
cach debe decidir qu bloque deber ser expulsado para dejar espacio al bloque que se

acaba de referenciar. El conjunto de reglas que se utilizan para tomar esta decisin se
denominan algoritmos o polticas de sustitucin.
La CPU no necesita conocer explcitamente la existencia de la cach, sino que
genera una peticin de lectura o escritura utilizando direcciones de memoria principal, y la
circuitera de la cach determina si la palabra solicitada est o no est en ese momento en
la cach. Si est (se dice que se ha producido un acierto de cach), la operacin de lectura
o escritura se realiza sobre la direccin correspondiente en la cach, y si la operacin es
de lectura, la memoria principal no se ve implicada en la ejecucin. Si la operacin es una
escritura, la palabra afectada en la memoria cach deber actualizarse, en algn
momento, en la memoria principal, para que el contenido de un bloque en la cach sea
idntico al de su correspondiente en memoria principal. En estos casos, la actualizacin en
memoria principal de los bloques modificados en la cach se realiza segn una poltica de
escritura o de actualizacin.
Cuando el dato referenciado por una lectura de la CPU no est en la cach, se
produce una falta o fallo de cach. En este caso, el bloque que contiene la palabra
referenciada se copia de la memoria principal a la cach, y a continuacin, la palabra
solicitada se enva a la CPU. Otra opcin consiste en enviarle la palabra directamente de la
memoria principal a la CPU y al mismo tiempo cargarla en la cach. Esta ltima tcnica,
denominada carga directa (load through), aunque reduce el tiempo de espera de la CPU,
requiere un hardware ms complejo.

Esquemas de coherencia de las cachs


Existen numerosos protocolos para mantener la coherencia de las cachs en un
sistema multiprocesador con memoria compartida. En primer lugar hay dos formas de
abordar el problema. Una forma es resolver el problema de la coherencia por software, lo
que implica la realizacin de compiladores que eviten la incoherencia entre cachs de
datos compartidos. La otra aproximacin es proveer mecanismos hardware que
mantengan de forma continua la coherencia en el sistema, siendo adems transparente al
programador. Como esta segunda forma es la ms utilizada, nos centraremos en ella de
manera que todos los protocolos que siguen se refieren a soluciones hardware al
problema de la coherencia.
Podemos distinguir tambin dos tipos de sistemas multiprocesadores; por un lado
estn los sistemas basados en un nico bus, con un nmero no demasiado grande de
procesadores, cada uno con su cach, y por otro lado estn los sistemas ms complejos
con varios buses o varias subredes con un gran nmero de nodos procesadores. En el
primero parece ms adecuado un tipo de protocolo que est continuamente sondeando o
fisgando el bus comn para ver qu transacciones podran introducir incoherencia y
actuar en consecuencia. A estos protocolos se les llama de sondeo o snoopy puesto que
fisgan el bus para detectar incoherencia. Bsicamente cada nodo procesador tendr los
bits necesarios para indicar el estado de cada lnea de su cach y as realizar las
transacciones de coherencia necesarias segn lo que ocurra en el bus en cada momento.
En el segundo tipo de sistemas, con varias subredes locales y un amplio nmero de
procesadores, un protocolo de sondeo es complicado de realizar puesto que las
actividades en los sub-buses son difciles de fisgar, ya que las transacciones van a ser
locales a estos. Para estos sistemas ms complejos se utiliza un tipo de protocolo basado
en directorio, que consiste en la existencia de un directorio comn donde se guardan el
estado de validez de las lneas de las cachs, de manera que cualquier nodo puede
acceder a este directorio comn.
Dado que los sistemas multiprocesadores basados en memoria compartida y cach
suelen estar basados en bus, o una jerarqua de buses con no muchos niveles, los
protocolos de coherencia suelen ser de sondeo, por esto se le dedica una atencin
especial a este tipo de protocolos.
Entre los protocolos de coherencia, tanto si son de sondeo como si no, existen en
general dos polticas para mantener la coherencia: invalidacin en escritura (write
invaldate) y actualizacin en escritura (write update).

El problema de coherencia de las cachs


El problema de la coherencia de cachs tiene que ver con la poltica de
actualizacin.
Aqu hay dos situaciones a considerar. En un ordenador puede haber ms de un
elemento que acceda a la memoria principal, pues en un ordenador actual no es raro
encontrarnos con varias CPUs o, simplemente, los dispositivos de entrada/salida
gobernados directamente desde alguna CPU o a travs del controlador de DMA. Segn
esto, cuando desde una CPU se modifica un dato en su cach, el correspondiente dato en
memoria principal queda obsoleto, con lo que si desde otra CPU o dispositivo se accede al
dato original en memoria principal, resulta que se accede a un dato que no est
actualizado.
Tambin puede suceder que sea un dispositivo de entrada el que modifica el dato
en memoria principal con un nuevo valor, con lo que entonces es el dato de la cach el
que queda obsoleto. Esto es lo que se conoce como el problema de la coherencia de las
cachs.

El problema de coherencia de las cachs depende de la poltica de escritura o


actualizacin que se utilice. La tcnica ms simple es la escritura o copia inmediata (write
through), segn la cual todas las escrituras se realizan tanto en la cach como en la
memoria principal, asegurando as que la memoria principal siempre est actualizada, lo
cual simplifica el problema de la coherencia en entornos multiprocesadores. El
inconveniente que presenta es el trfico que genera en los buses del sistema. Podra
pensarse que tambin supone una sobrecarga de tiempo, puesto que adems de escribir
en la cach, hay que escribir tambin en la memoria principal, pero est ltima operacin
puede realizarse en paralelo con la escritura en memoria cach o con otras actividades
por lo que, en la prctica, no supone un tiempo adicional.

La otra alternativa es la escritura o copia diferida (copy back), en la cual una


operacin de escritura solamente escribe en la cach. En esta ltima alternativa, cuando
se escribe o actualiza un bloque de la cach, se activa el bit modificado (dirty bit)
asociado a esa lnea, de tal manera que cuando hay que reemplazar un bloque, si su bit
modificado est activado entonces el bloque debe actualizarse en memoria principal,
por lo que hay que escribirlo en ella antes de ocupar la lnea de la cach con el nuevo
bloque. El problema que tiene es que, en un momento dado, hay datos en memoria
principal que no estn actualizados, lo cual puede originar problemas de coherencia de
datos.

Protocolos de sondeo o snoopy


Existen dos tipos de protocolos atendiendo al mecanismo que utilizan. As se
tienen el write-update o write-broadcast o actualizar en escritura, y el write-invalidate o
invalidar en escritura.
El primer mtodo, se basa en asegurar que un procesador tiene acceso exclusivo a
un dato antes de que acceda a l. Esto se consigue invalidando todas las lneas de todas
las cachs que contengan un dato que est siendo escrito en ese momento. Este
protocolo es con diferencia el ms usado tanto en protocolos de sondeo como en los de
directorio. El acceso exclusivo asegura que no hay otras copias legibles o escribibles del
dato cuando se realiza la escritura, ya que todas las copias del dato se invalidan en el
momento de la escritura. Esto asegura que cuando otro procesador quiera leer el dato
falle su cach y tenga que ir a memoria principal a buscarlo.
Si dos procesadores intentan escribir a la vez el mismo dato, hay uno que ganar
necesariamente, mientras que el otro deber esperar a que este escriba momento en el
cual deber volver a obtener la copia buena para poder volver a escribir. Por lo tanto, este
protocolo asegura la escritura en serie.
El segundo mtodo, es el de actualizar todas las copias de las cachs cuando se
escribe un determinado dato. Este protocolo se llama actualizar en escritura. Para
mantener los requisitos de ancho de banda de este protocolo bajo control, es interesante
realizar un seguimiento de si una palabra en la cach est compartida o no, o sea, que se
encuentra tambin en otras cachs. Si no est compartida entonces no es necesario
actualizar el resto de cachs.
Tipos de transacciones:


PrRd: El procesador inicia una lectura de un dato. Si est en su cach es un acierto,


sino es un fallo de cach.
10





PrWr: El procesador quiere escribir un dato en un bloque de cach. Para esto, el


bloque debe estar solamente en la cach local.
BusRd: A requerimiento de un procesador el bus solicita a alguna cach o a la
memoria una copia de un bloque para usarlo en modo lectura (PrRd).
BusRdX: A requerimiento de un procesador el bus solicita un bloque para ser
modificado por el procesador (PrWr). El bloque debe ser invalidado en el resto de
las cach.
BusWB: El controlador actualizar un bloque de su cach en memoria
(postescritura). El procesador no se entera de esta situacin.

Transaccin de escritura con invalidacin:


1. El procesador debe escribir un valor en un bloque.
2. Enva un PrWr a su controlador de cach.
3. El controlador debe asegurarse de tener en cach la UNICA copia vlida del
bloque por lo que enva al bus un BusRdX
4. En respuesta a esta transaccin, quien tenga la versin ms actual del bloque
(alguna cach o memoria) la entrega al controlador solicitante.
5. Todas las cachs que tienen el bloque lo invalidan.
6. La nica copia vlida del bloque queda en la cach del procesador que
realizar la escritura.
7. El procesador enva un Store a su controlador local para escribir el valor
deseado.

11

Protocolo de invalidacin de 3 estados (MSI)


El protocolo usa los tres estados necesarios en cualquier cach post-escritura para
distinguir bloques vlidos que no han sido modificados (clean) de aquellos que han sido
modificados (dirty). Especficamente, los estados son invlido (I), compartido (S, de
shared) y modificado (M). El estado de invlido tiene un significado claro. Compartido
significa que el bloque est presente en la cach y no ha sido modificado, la memoria
principal est actualizada y cero o ms cachs adicionales pueden tener tambin una
copia actualizada (compartida). Modificado significa que nicamente este procesador
tiene una copia vlida del bloque en su cach, la copia en la memoria principal est
anticuada y ninguna otra cach puede tener una copia vlida del bloque (ni en estado
modificado ni compartido). Antes de que un bloque compartido pueda ser escrito y pasar
al estado modificado, todas las dems copias potenciales deben de ser invalidadas va una
transaccin de bus de lectura exclusiva. Esta transaccin sirve para ordenar la escritura al
mismo tiempo que causa las invalidaciones y por tanto asegura que la escritura se hace
visible a los dems.

En la figura anterior, se muestra el diagrama de estados que gobierna un bloque en


cada cach en este protocolo. Los estados estn organizados de tal manera que conforme
un estado est ms cerca de la parte superior ms ligado est el bloque a ese procesador.
La lectura de un bloque invlido por parte de un procesador (incluyendo los no presentes)
produce una transaccin BusRd. El bloque recientemente cargado se promociona desde el

12

estado invlido al estado compartido dependiendo de si otra cach tiene una copia del
bloque. Cualquier otra cach con el bloque en el estado compartido observa el BusRd,
pero no toma ninguna accin especial, permitiendo que la memoria responda con el dato.
Sin embargo, si una cach tiene el bloque en el estado modificado (y nicamente puede
haber una) y observa una transaccin BusRd en el bus, debe participar en la transaccin ya
que la copia existente en memoria no es vlida. Esta cach enva los datos al bus en lugar
de la memoria y degrada su copia del bloque al estado compartido. La memoria y la cach
que peda el dato son actualizadas. Esto puede conseguirse mediante una transferencia
directa entre las cachs a travs del bus durante esta transaccin BusRd o indicando un
error en la transaccin BusRd y generando una transaccin de escritura para actualizar la
memoria. En el ltimo caso, la cach original volvera a realizar su solicitud para obtener el
bloque de la memoria. (Tambin es posible hacer que el dato puesto en el bus sea tomado
por la cach que realiz la peticin pero no por la memoria, dejando la memoria sin
actualizar, pero este caso requiere ms estados).
Una escritura en un bloque invlido implica cargar el bloque entero y despus
modificar los bytes que se deseen. En este caso se genera una transaccin de lectura
exclusiva en el bus, que causa que todas las otras copias del bloque sean invalidadas,
asegurando a la cach que realiza la peticin la propiedad exclusiva del bloque. El bloque
asciende al estado de modificado y despus se escribe. Si otra cach realiza una peticin
posterior de acceso exclusivo, en respuesta a su transaccin BusRdX el bloque se
degradar al estado de invlido despus de poner la copia exclusiva en el bus.
La transaccin ms interesante ocurre cuando se escribe en un bloque compartido.
El tratamiento en este caso es igual al de una escritura en un bloque invlido, usando una
transaccin de lectura exclusiva en el bus para adquirir la propiedad exclusiva del bloque.
Los datos que nos devuelve el bus pueden ser ignorados en este caso ya que ya existen en
la cach. De hecho, una optimizacin comn para reducir el trfico en el bus es introducir
una nueva transaccin, llamada actualizacin del bus o BusUpgr, para esta situacin. Un
BusUpgr obtiene la propiedad exclusiva al igual que un BusRdX, invalidando las dems
copias, pero no devuelve el bloque al que realiz la peticin. Independientemente de la
transaccin utilizada, el bloque pasa al estado modificado. Posteriores escrituras en el
bloque mientras permanece en ese estado no generan nuevas transacciones.
El reemplazamiento de un bloque de la cach lleva a dicho bloque al estado de
invlido (no presente) eliminndolo de la cach. Por lo tanto, un reemplazamiento supone
que dos bloques cambien de estado en la cach: el que es reemplazado pasa de su estado
actual al estado de invlido, el que ocupa su lugar de invlido a su nuevo estado. El ltimo
cambio no puede tener lugar antes del primero. Si el bloque a ser reemplazado estaba en
el estado de modificado, la transicin de reemplazamiento de M a I genera una
transaccin de post-escritura. Si estaba en el estado invlido o compartido, no es
necesario hacer nada.
13

Protocolo de invalidacin de 4 estados (MESI)


El protocolo MSI presenta un problema si se considera una aplicacin secuencial en
un multiprocesador. Cuando el programa lee y modifica un dato, el protocolo MSI debe
generar dos transacciones incluso en el caso de que no exista comparticin del dato. La
primera es una transaccin BusRd que obtiene el bloque de la memoria en estado S, y la
segunda en una transaccin BusRdX (o BusUpgr) que convierte el bloque del estado S al
M. Aadiendo un estado que indique que el bloque es la nica copia (exclusiva) pero que
no est modificado y cargado el bloque en ese estado, podramos evitarnos la ltima
transaccin, ya que el estado indica que ningn otro procesador tiene el bloque en cach.
Este nuevo estado indica un nivel intermedio entre compartido y modificado. Al ser
exclusivo es posible realizar una escritura o pasar al estado modificado sin ninguna
transaccin del bus, al contrario que en el caso de estar en el estado compartido; pero no
implica pertenencia, as que al contrario que en el estado modificado la cach no necesita
responder al observar una peticin de dicho bloque (la memoria tiene una copia vlida).
El protocolo MESI consiste en cuatro estados: modificado (M), exclusivo (E),
compartido (S) e invlido (I). I y M tienen la misma semntica que antes. El estado
exclusivo, E, significa que nicamente una cach (esta cach) tiene una copia del bloque, y
no ha sido modificado (es decir, la memoria principal est actualizada). El estado S
significa que potencialmente dos o ms procesadores tienen este bloque en su cach en
un estado no modificado.
Cuando un procesador lee por primera vez un bloque, si existe una copia vlida en
otra cach entra en la cach del procesador con el estado S. Sin embargo, si no existe otra
copia en ese instante (por ejemplo, en una aplicacin secuencial), entra con el estado E.
Cuando ese bloque se actualiza por medio de una escritura puede pasar directamente del
estado E a M sin generar otra transaccin en el bus, dado que no existe otra copia.
Estando una cache en estado E, si otra cach solicita copia del bloque, el estado del
bloque deber pasar de E a S.
Es importante sealar que este protocolo necesita que el bus proporcione una
seal adicional (S, de Shared) que est disponible para que los controladores puedan
determinar en una transaccin BusRd si existe otra cach que tenga el mismo bloque.
Durante la fase en la que se indica en el bus la direccin del bloque al que se quiere
acceder, todas las cachs determinan si tienen el bloque que se solicita y, si eso ocurre,
activan la seal compartida. Esta es una lnea cableada como un OR, con lo que el
controlador que realiza la peticin puede observar si existe otro procesador que tenga en
su cach el bloque de memoria referenciado y decidir si la carga del bloque se debe
realizar en el estado S o E.

14

El diagrama de transicin de estados para este protocolo se muestra a


continuacin:

En la figura anterior, se muestra el diagrama de transicin de estados para este


protocolo. La notacin BusRd(S) significa que cuando la transaccin de lectura en el bus
ocurre, se activa la seal S, y BusRd() significa que S no est activada. Una transaccin
BusRd significa que no nos importa el valor de S en esa transaccin. Una escritura a un
bloque en cualquier estado hace que este pase al estado M, pero si estaba en el estado E
no se necesita una transaccin del bus. La aparicin de un BusRd hace que el bloque pase
del estado E al S, dado que existe otra copia del bloque. Como ocurra anteriormente, la
aparicin de una transaccin BusRd hace que un bloque que estuviese en el estado M
pase al estado S y dicho bloque sea puesto en el bus. Tal como ocurra en el protocolo MSI
es posible hacer que dicho bloque no sea actualizado en la memoria principal, pero seran
necesarios nuevos estados. Obsrvese que es posible que un bloque est en el estado S
incluso sin existir otras copias, dado que estas copias pueden ser reemplazadas sin que las
dems cachs sean notificadas. Los argumentos para comprobar que el protocolo
mantiene la consistencia secuencial y la coherencia de las cachs es el mismo que en el
caso del protocolo MSI.
15

El nombre del protocolo (MESI) viene de los nombres de los estados que puede
tomar una lnea: modificada, exclusiva, compartida e invlida que en ingls significan
Modified, Exclusive, Shared y Invalid. Una lnea que es propiedad de cualquier cach
puede estar como exclusiva o modificada. Las lneas que estn en el estado compartida no
son propiedad de nadie en concreto. La aproximacin MESI permite la determinacin de si
una lnea es compartida o no cuando se carga. Una lnea modificada es enviada
directamente al peticionario desde la cach que la contiene. Esto evita la necesidad de
enviar comandos de invalidacin para todas aquellas lneas que no estaban compartidas.
Las transiciones segn las operaciones realizadas sobre las cachs:


Fallo de lectura: La lnea se coge de la cach que la tenga como propietaria. Si


ninguna la tiene como propietaria, se coge de la memoria principal. Si la lnea
que se coge est modificada en otra cache, entonces se escribe esta lnea
tambin a la memoria al mismo tiempo. Si es compartida, la cach con mayor
prioridad (la propietaria) es la que entrega la lnea (esto implica un bit
adicional por cache para indicar que cache es la propietaria). La cach que
entrega la lnea, y aquellas que la contienen, pasan al estado de compartida.
Sin embargo, si quien da la lnea es la memoria, entonces la cach que lee
pone su lnea en exclusiva y se hace propietaria de ella.
Fallo de escritura: En este caso la lnea se coge de la cach que la tenga. Si
ninguna la tiene, se coge de la memoria principal. Si la lnea que se coge est
16

modificada entonces se escribe esta lnea tambin a la memoria al mismo


tiempo. Si es compartida, la cach con mayor prioridad es la que entrega la
lnea. La lnea leda se actualiza y se pone en estado modificada. El resto de
lneas pasan al estado invlidas. Hay que hacer notar que este protocolo slo
permite un nico escribiente, es decir, una lnea modificada slo est presente
en una nica cach.
Acierto de escritura: Si la cach peticionaria es la propietaria (lnea modificada
o exclusiva), se actualiza la lnea en la cach sin ms. Si la lnea est
compartida por otras cachs (compartida), se actualiza la lnea despus de
haber invalidado el resto de lneas. Una vez actualizada la lnea pasa a ser
modificada en cualquiera de los casos anteriores.

Protocolo Write Once


A veces se le conoce tambin como write invalidate directamente, ya que es el
primero que se pens de este tipo y tambin es el primero de los protocolos de sondeo.
En ocasiones se le conoce como el protocolo de Goodman puesto que fue propuesto por
James Goodman en 1983.
Este protocolo de coherencia se puede describir mediante un grafo de transiciones
de 4 estados tal y como se muestra en la siguiente figura.

Los 4 estados son los siguientes:




Vlida: La lnea de cache, que es consistente con la copia en memoria, ha sido


leda de la memoria principal y no ha sido modificada.
17




Invlida: La lnea no se encuentra en la cache o no es consistente con la copia en


memoria.
Reservada: Los datos han sido escritos una nica vez desde que se ley de la
memoria compartida. La lnea de cache es consistente con la copia en memoria
que es la nica otra copia.
Sucia: La lnea de cache ha sido escrita ms de una vez, y la copia de la cache es la
nica en el sistema (por lo tanto inconsistente con el resto de copias).

Cada lnea de cache tiene dos bits extra donde se guarda el estado de esa lnea. As
a la lnea vlida se la conoce tambin como consistente mltiple, a la reservada como
consistente nica, y la sucia como inconsistente nica, la vlida se queda con el mismo
nombre.
Para mantener la consistencia el protocolo requiere dos conjuntos de comandos.
Los comandos emitidos por el procesador local; son fallo de lectura, acierto de escritura y
fallo de escritura. Siempre que se produce un fallo de lectura la lnea entra en el estado de
valida. El primer acierto de escritura lleva a la lnea a su estado de reservada. Los aciertos
de escritura posteriores cambian el estado a sucia.
Los comandos de invalidacin emitidos por el resto de procesadores a travs del
bus de sondeo compartido. El comando invalidar en lectura lee una lnea o bloque e
invalida el resto de copias. El comando invalidar en escritura invalida todas las copias de
una lnea. El comando lectura de bus se corresponde con una lectura normal a memoria
por otro procesador.
Los eventos y acciones que tienen lugar en el sistema de memoria son:


Fallo de lectura: Cuando un procesador quiere leer un bloque que no est en la


cach se produce un fallo de lectura. Entonces se inicia una operacin de lectura
en el bus. Si no hay copias de esta lnea en otras cachs entonces se trae la lnea
de la memoria principal, pasando el estado a exclusiva puesto que es la nica
cach con esa lnea. Si hay alguna copia exclusiva en alguna otra cach, entonces
se coge la copia de la memoria o de esa cach, pasando ambas copias al estado
de vlidas. Si existe alguna copia sucia en otra cach, esa cach inhibir la
memoria principal y mandara esa copia a la cach que hizo la peticin as como a
la memoria principal, ambas copias resultantes pasaran al estado de vlidas.
Acierto de escritura: Si la copia est sucia o reservada, la escritura se puede llevar
a cabo localmente y el nuevo estado es sucia. Si el estado es vlida entonces se
manda un comando de invalidar en escritura a todas las cachs invalidando sus
copias. A la memoria compartida se escribe al tiempo que a la propia cach,
pasando el estado a reservada. De esta manera se asegura de que slo hay una
copia que es reservada o sucia de una determinada lnea en todas las cachs.

18




Fallo en escritura: Cuando un procesador falla al escribir en la cach local, la copia


tiene que venir de la memoria principal o de la cach que est sucia. Esto se
realiza enviando un invalidar en lectura a todas las cachs lo que invalidar todas
las cachs. La copia local es actualizada terminando en un estado de sucia puesto
que no se ha actualizado la memoria despus de la escritura.
Acierto de lectura: Nunca hay una transicin en este caso, se lee de la cach local
y ya est.
Cambio de lnea: Si una copia est sucia debe escribirse en algn momento a la
memoria principal mediante un cambio de lnea (lo cual ocurrir cuando alguna
otra cach lea de esa lnea). Si la copia est limpia, es decir, es vlida, exclusiva o
invlida, no se realiza ningn cambio.

Para poder implementar este protocolo en un bus, son necesarias unas lneas
adicionales para inhibir la memoria principal cuando se produce un fallo de lectura y hay
copias sucias. Muchos de los buses estndar no incluyen estas lneas por lo que resulta
complicado implantar protocolos de coherencia de cach, a pesar de que estos buses
incluyen multiprocesadores.

Protocolo de actualizacin de 4 estados (Dragn)


El protocolo Dragn consta de 4 estados: exclusivo (E), compartido (SC),
compartido modificado (SM) y modificado (M). El estado exclusivo significa que slo existe
una cach (esta cach) con una copia del bloque y que dicho bloque no ha sido
modificado.
La causa de aadir el estado E en Dragn es la misma que en el protocolo MESI. SC
significa que potencialmente dos o ms procesadores (incluyendo esta cach) tienen este
bloque en su cach y que la memoria principal puede estar o no actualizada. SM significa
que potencialmente dos o ms procesadores tienen este bloque en su cach, la memoria
principal no est actualizada y este procesador es el responsable de actualizar la memoria
principal cuando este bloque sea reemplazado en la cach. Un bloque slo puede estar en
el estado SM en una nica cach en un momento dado. Sin embargo, es posible que una
cach tenga el bloque en estado SM mientras que en las otras aparezca en el estado SC. M
significa, como anteriormente, que el bloque ha sido modificado nicamente en esta
memoria, la memoria principal tiene un valor no valido, y este procesador es el
responsable de actualizar la memoria principal cuando el bloque sea reemplazado.
Obsrvese que no existe un estado explcito de bloque invlido (I) como en los protocolos
anteriores. Esto es debido a que el protocolo Dragn es un protocolo basado en la
actualizacin; el protocolo siempre mantiene los bloque de la cach actualizados, as que
siempre es posible utilizar los datos existentes en la cach.

19

Las peticiones del procesador, las transacciones del bus y las acciones a realizar por
el protocolo son similares a las vistas en el protocolo MESI. El procesador todava enva
peticiones de lectura (PrRd) y escritura (PrWr). Sin embargo, dado que no tenemos un

estado de invalidacin en el protocolo, para especificar las acciones a realizar cuando un


bloque de memoria se pide por primera vez, se han aadido dos tipos ms de peticiones:
lectura con fallo de cach (PrRdMiss) y escritura con fallo de cach (PrWrMiss). Para las
transacciones de bus, tenemos lectura en bus (BusRd), actualizacin en bus (BusUpd) y
escritura en bus (BusWB). Las transacciones BusRd y BusWB tienen la semntica usual
vista en los protocolos anteriores. BusUpd es una nueva transaccin que toma como
parmetro la palabra modificada por el procesador y la enva a todos los procesadores a
travs del bus de tal manera que se actualicen las cachs de los dems procesadores.
Enviando nicamente la palabra modificada en lugar de todo el bloque, se espera una
utilizacin ms eficiente del ancho de banda del bus. Al igual que en el caso del protocolo
MESI aparece la seal S para soportar el estado E.

La figura anterior, muestra el diagrama de transicin de estados para este


protocolo. A continuacin se describen las acciones a realizar cuando un procesador
incurre en un fallo de cach en una lectura, un acierto de cach en una escritura o un fallo
de cach en una escritura (en el caso de un acierto de cach en una lectura no hay que
realizar ninguna accin):


Fallo en una lectura: Se genera una transaccin BusRd. Dependiendo del estado de
la seal compartida (S), el bloque se carga en el estado E o SC en la cach local.
Ms concretamente, si el bloque est en el estado M o SM en una de las otras
cachs, esa cach activar la lnea S y proporcionar el ltimo valor para ese
bloque en el bus, y el bloque se cargar en la cach local en el estado SC (tambin
20

se actualiza la memoria principal; si no quisiramos hacerlo necesitaramos


estados adicionales). Si la otra cach lo tiene en estado M, cambiar al estado SM.
Si ninguna otra cach tiene una copia, la lnea S no se activar y el dato ser
proporcionado por la memoria principal y cargado en la cach local en el estado E.
Escritura: Si el bloque est en el estado SM o M en la cach local, no es necesario
realizar ninguna accin. Si el bloque est en el estado E en la cach local, el bloque
cambia internamente al estado M, no siendo necesaria ninguna accin adicional.
Sin embargo, si el bloque est en el estado SC, se genera una transaccin BusUpd.
Si alguna otra cach tiene una copia del dato, actualizan sus copias y cambian su
estado a SC. La cach local tambin actualiza su copia del bloque y cambia su
estado a SM. Si no existe otra copia del dato, la seal S permanecer inactiva y la
copia local se actualizar cambiando al estado M. Finalmente, si en una escritura el
bloque no est presente en la cach, la escritura se trata como una transaccin del
tipo fallo en la lectura seguida de una transaccin de escritura. Por lo tanto,
primero se genera un BusRd y si el bloque se tambin se encuentra en otras cachs
un BusUpd.
Reemplazo: En el caso de reemplazo de un bloque, el bloque se escribe en la
memoria principal utilizando una transaccin del bus nicamente si se encuentra
en el estado M o SM. Si est en el estado SC, existir otra cach con ese bloque en
estado SM, o nadie lo tiene en cuyo caso el bloque es vlido en memoria principal.

21

Protocolo Firefly
El protocolo Firefly tiene 3 estados que son: lectura privada os Exclusivo (E), lectura
compartida o Compartida Consistente (SC) y sucia privada o Modificada (M). El estado de
lnea invlida se utiliza slo para definir la condicin inicial de una lnea de cach. El Firefly

utiliza el esquema de actualizacin en vez del de invalidacin, es decir, las escrituras a la


cach son vistas por todos y se escribe a la memoria principal. El resto de cachs que
comparten la lnea, fisgan el bus actualizando sus copias. Por lo tanto, ninguna lnea de
cach ser invlida despus de ser cargada. Hay una lnea especial del bus, la
LneaCompartida, que se activa para indicar que al menos otra cach comparte la lnea.

En la figura anterior, se muestra el diagrama de transicin de estados del protocolo


Firefly. Las transiciones que se producen segn los casos:
Fallo de lectura: Si otra cach tiene una copia de la lnea, esta la entrega a la cach
peticionaria, activando la lnea LneaCompartida. Si el estado de la lnea era sucia privada
previamente, entonces debe actualizarse a la memoria principal. Todas las cachs que
comparten dicha lnea ponen su estado a lectura compartida. Si no hay cachs con esta
lnea, entonces se coge de la memoria y se pone el estado de lectura privada.
Fallo de escritura: La lnea se coge de otra cach o de la memoria. Cuando la lnea
viene de otra cach, est activa la lnea LneaCompartida que es reconocida por la cach
peticionaria. Por lo tanto, la lnea se pone en estado de lectura compartida y la escritura
se propaga a todas las cachs y a memoria, que actualizan sus copias. Si la lnea viene de la
memoria, se carga la lnea como sucia privada y se escribe sin propagar la lnea con los
nuevos datos.
Acierto en escritura: Si la lnea est privada sucia o lectura privada, se escribe a la
cach sin ms. En el ltimo caso se cambia el estado a privada sucia. Si el estado es el de
22

lectura compartida entonces adems de a la cach debe escribir a la memoria. El resto de


cachs que comparten la lnea capturan los datos del bus actualizando as sus lneas.
Adems, estas cachs activan la lnea LneaCompartida. Esto es necesario para que as la
cach que est escribiendo pueda saber si la lnea est compartida o no. Si la lnea no est
compartida, se puede evitar la escritura a todos (broadcast) aunque la transaccin se
debe realizar en cualquier caso. Si no est compartida el estado pasa a modificada, de otra
manera se carga como lectura compartida.

23

Conclusiones

El subsistema de memoria cach dentro de todo el conjunto de sistemas que


conforman la unidad central de proceso (CPU); es clave para mejorar exponencialmente el
rendimiento general de la CPU. Se utiliza como un puente de comunicacin entre la CPU y
la memoria principal de esta manera las peticiones de datos entre estos dos componentes
disminuyen considerablemente y por consiguiente el costo de procesamiento baja
enormemente.
Desde su inclusin en las primeras CPU hasta nuestros das la memoria cach ha
evolucionado en su diseo y operacin interna. La evolucin de estos sistemas de
memoria ha ido ligado a los cambios tecnolgicos originados en la CPU; con la inclusin de
mltiples procesadores dentro de una CPU se origin un problema clsico en las ciencias
de la computacin, y es el problema de coherencia de las memorias cachs que
bsicamente consiste en que cualquier lectura de un dato devuelve el valor ms
recientemente escrito de ese dato, sin importar fsicamente que procesador realiza la
peticin.
Para abordar la solucin al problema se han desarrollado alternativas dependiendo
de la arquitectura del computador, que van desde soluciones por hardware (protocolos de
sondeo o directorio) y por software (a travs del sistema operativo y los diferentes
compiladores). La primera solucin es la ms utilizada en la actualidad, donde se
implementan una serie de controladores dentro de las memorias cachs, que se
comunican a travs de una serie de protocolos capaces de sondear o espiar a las otras
caches, con el fin de identificar cada notificacin que se realiza y reaccionar
adecuadamente ante cualquier incoherencia.

24

Bibliografa

Organizacin de Computadores Universidad de Valencia (Vicente Arnau Llombart).


[Internet] Disponible en: http://www.uv.es/varnau/OC_T5_1.pdf
Multiprocesadores Universidad de Valencia (Ingeniera Informtica). [Internet]
Disponible en: http://informatica.uv.es/iiguia/AAC/AA/apuntes/aic_multiproc.pdf
Arquitectura de Computadores Universidad Politcnica de Madrid. Departamento de
Informtica Aplicada. (Escuela Tcnica Superior de Ingeniera de Sistemas Informticos).
[Internet] Disponible en: http://www.dia.eui.upm.es/Asignatu/arq_com/Paco/7-Cache.pdf
Arquitectura de Computadoras y tcnicas Digitales - Universidad Nacional del Centro de la
Provincia de Buenos Aires (Mag. Marcelo Tosini). [Internet] Disponible en:
http://www.exa.unicen.edu.ar/catedras/arqui2/arqui2/filminas/Sistemas%20de%20Proce
sadores%20paralelos_PARTE%20II.pdf
Ayuda del Simulador SMPCache - Universidad de Valencia. [Internet] Disponible en:
http://www.uv.es/varnau/SMPCache.pdf
BEHROOZ PARHAMI. Arquitectura de Computadoras, de los Microprocesadores a las
Supercomputadoras. McGraw-Hill. Mxico 2005.

25

S-ar putea să vă placă și