INTRODUCCIÓN
La importancia de la información actualmente es tal que posiblemente en cuanto a valor para cualquier grupo u organización sea más relevante que cualquier otro recurso, todo ello debido a que sin el conocimiento no se puede proceder a realizar ninguna actividad sin un margen de error o de perdida, por ello el buen manejo y almacenamiento de ella son dos tareas que se han vuelto vitales.
Es por ello que en el presente trabajo se pretende abordar un tema que tiene impacto en cualquier lugar donde se maneje algún tipo de dato, y es el relacionado a el "Problema de la coherencia de caché", por lo que se tratará de explicar en que consiste dicho problema y en algunas soluciones que se han establecido para tratar de eliminarlo del todo dado el nivel de problemas que puede desencadenar.
DESARROLLO
El Problema De La Coherencia De Caché
La coherencia de cache hace referencia a la integridad de
los datos almacenados en las caches locales de los recursos compartidos. La
coherencia de la cache es un caso especial de la coherencia de memoria.
Cuando los clientes de un sistema, en particular las CPU’s
en un multiprocesador, mantienen caches de una memoria compartida, los
conflictos crecen. Haciendo referencia al dibujo, si el cliente de arriba tiene
una copia de un bloque de memoria de una lectura previa y el cliente de abajo
cambia ese bloque, el cliente de arriba podría estar trabajando con datos
erróneos, sin tener conocimiento de ello. La coherencia de la cache intenta
administrar estos conflictos y mantener consistencia entre las caches y la
memoria.
La memoria debe proporcionar un conjunto de direcciones para
almacenar valores, y cuando se lea una de estas direcciones debe devolver el último valor escrito en ella. Es en esta propiedad fundamental de las memorias
en la que descansan los programas secuenciales cuando usamos la memoria para
comunicar un valor desde un punto del programa donde se calcula a otros puntos
donde es usado. También nos basamos en esta propiedad cuando el sistema usa un
espacio de direcciones compartido para comunicar datos entre hilos o procesos
que se están ejecutando en un procesador. Una lectura devuelve el último valor
escrito en esa dirección, sin importar el proceso que escribió dicho valor. Las
cachés no interfieren con el uso de múltiples procesos en un procesador, ya que
todos ellos ven la memoria a través de la misma jerarquía de cachés. En el caso
de usar varios procesadores, nos gustaría poder basarnos en la misma propiedad
cuando dos procesos se ejecuten sobre diferentes procesadores de tal forma que
el resultado de ejecutar un programa que usa varios procesos sea el mismo
independientemente de si los procesos se ejecutan o no en diferentes
procesadores físicos. Sin embargo, cuando dos procesos ven la memoria
compartida a través de diferentes cachés, existe el peligro de que uno vea el
nuevo valor en su caché mientras que el otro todavía vea el antiguo.
El problema de la coherencia en sistemas multiprocesadores
se puede ver claramente mediante un ejemplo. Supongamos dos procesadores, cada
uno con su caché, conectados a una memoria compartida. Supongamos que ambos
procesadores acceden a una misma posición X en memoria principal. Después de
que el valor en X ha sido escrito por A, la caché de A y la memoria contienen
el nuevo valor, pero la cache de B no, y si B lee el valor de X, leerá 1 y no 0
que es el valor de la memoria. Este es el problema de la coherencia de cachés
en multiprocesadores.
Existen numerosos protocolos para mantener la coherencia de
las cachés 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 realización de compiladores
que eviten la incoherencia entre cachés de datos compartidos. La otra aproximación
es proveer mecanismos hardware que mantengan de forma continua la coherencia en
el sistema, siendo además transparente al programador y la más utilizada.
Podemos distinguir también dos tipos de sistemas
multiprocesadores; por un lado están los sistemas basados en un único bus, con
un número no demasiado grande de procesadores, cada uno con su caché, y por
otro lado están los sistemas más complejos con varios buses o varias subredes
con un gran número de nodos procesadores. En el primero parece más adecuado un
tipo de protocolo que esté continuamente sondeando o espiando el bus común para
ver que transacciones podrían introducir incoherencia y actuar en consecuencia.
A estos protocolos se les llama de sondeo o snoopy puesto que realizan un espionaje sobre el bus
para detectar incoherencia. Básicamente cada nodo procesador tendrá los bits
necesarios para indicar el estado de cada línea de su caché y así realizar las transacciones
de coherencia necesarias según lo que ocurra en el bus en cada momento.
En el
segundo tipo de sistemas, con varias subredes locales y un amplio número de
procesadores, un protocolo de sondeo es complicado de realizar puesto que las
actividades en los sub-buses son difíciles de espiar, ya que las transacciones
van a ser locales a estos. Para estos sistemas más complejos se utiliza un tipo
de protocolo basado en directorio, que consiste en la existencia de un
directorio común donde se guardan el estado de validez de las líneas de las cachés,
de manera que cualquier nodo puede acceder a este directorio común.
Entre los protocolos de coherencia, tanto si son de sondeo
como si no, existen en general dos políticas para mantener la coherencia: invalidación
en escritura (write invalidate) y actualización en escritura (write update). En
la política de invalidación en escritura (también llamada política de
coherencia dinámica), siempre que un procesador modifica un dato de un bloque
en la caché, invalida todas las demás copias de ese bloque guardadas en las
otras cachés. Por contra, la política de actualización en escritura actualiza
las copias existentes en las otras cachés en vez de invalidarlas.
Protocolos de sondeo o snoopy (medio compartido)
Tabla de protocolos sondeo para la coherencia de cachés
Esquemas de coherencia basados en directorio
Los protocolos de sondeo vistos con anterioridad precisan de
arquitecturas que tengan la facilidad de acceso “a todos” a un tiempo; una
arquitectura basada en bus es un buen ejemplo. El problema del bus es que no es
una arquitectura que pueda acomodar un número elevado de procesadores debido a
la limitación del ancho de banda. Para multiprocesadores con un número elevado
de procesadores se utilizan otro tipo de interconexiones como las mallas, hipercubos, etc. Sin embargo, estas redes más complejas no
poseen la capacidad de que cualquier nodo pueda espiar lo que hace el resto.
Para solucionar esto lo que se hace es introducir protocolos de coherencia
basados en un directorio al cual todos los procesadores y cachés tienen acceso.
Protocolos basados en directorio:
- Directorio centralizado: Fue el primer esquema propuesto
(1976). Consiste en un único directorio o tabla centralizada donde se guarda información
sobre el lugar donde se encuentra cada copia de la caché. Este directorio
centralizado es normalmente bastante grande por lo que la búsqueda se realiza de forma asociativa. La competencia por el acceso al directorio (contención), así
como los largos tiempos de búsqueda, son alguno de los inconvenientes de este
esquema. Los protocolos de directorio centralizado suelen ser o de mapeado
completo o con mapeado limitado que son dos protocolos que se explican más
adelante.
- Directorio distribuido: Dos años después se propuso otro
protocolo basado en la distribución del directorio entre las diferentes cachés.
En el directorio se guarda el estado de la caché así como su presencia. El
estado es local, pero la presencia indica qué cachés tienen una copia del
bloque. También hay dos protocolos típicos de mapeado distribuido que son los
protocolos con directorios jerárquicos y los protocolos con directorios
encadenados
CONCLUSIONES
A lo largo del desarrollo de este trabajo se abordo el "Problema de coherencia de caché" y las complicaciones que se derivan de él al no utilizarse algún mecanismo para contrarrestarlo, y como se pudo observar existen varios enfoques y soluciones a distintos niveles que tienen sus ventajas y desventajas, como estas soluciones planteadas existen muchas más cómo también información que detalla de mejor manera el funcionamiento de cada una de las soluciones presentadas en este trabajo y por ello dentro de las referencias se incluyen links a otras páginas con información más precisa obre el tema, el objetivo de este trabajo fue solamente servir de introducción y de motivación por indagar más en el tema.
De toda la información presentada un punto importante es el relacionado a la relevancia de nuestra información y en el cómo la administramos, actualmente tareas como el almacenamiento, modificación y consulta de la información recae en los programas que usamos para dichas actividades y si no estamos consientes de los posibles problemas al acceder de manera concurrida a dicha información podemos enfrentarnos a problemas como el presentado en este trabajo, por ello el uso responsable de la información se debería volver una tarea a tener presente por todos.
REFERENCIAS
Universidad de Valencia. Multiprocesadores. [archivo PDF]. Disponible en http://informatica.uv.es/iiguia/AAC/AA/apuntes/aic_multiproc.pdf
Simulador SMPCache 1.0. [archivo PDF]. Disponible en http://www.uv.es/varnau/SMPCache.pdf
Fernández C., Rodríguez J. Coherencia de caché. [archivo PDF]. Disponible en
http://www.dea.icai.upco.es/jarm/Asignaturas/ArquitecturaOrdenadores/Transparencias/Dmulticache.pdf
No hay comentarios.:
Publicar un comentario