Multiprocesadores+Simetricos

toc

Multiprocesadores Simetricos Este término se refiere a la arquitectura hardware del computador y también al comportamiento del sistema operativo que utiliza dicha arquitectura, consiste en un tipo de arquitectura de ordenadores en que dos o más procesadores comparten una única memoria central. Todos los microprocesadores compiten en igualdad de condiciones por dicho acceso, de ahí la denominación simétrico. Los sistemas SMP permiten que cualquier procesador trabaje en cualquier tarea sin importar su localización en memoria; con un propicio soporte del sistema operativo, estos sistemas pueden mover fácilmente tareas entre los procesadores para garantizar eficientemente el trabajo.

Un Multiprocesador presenta las siguientes características:


 * ~ Características de un SMP ||
 * < * Hay dos o más procesadores similares de capacidades comparables. ||
 * < * Comparten memoria principal y las E/S y están conectadas por un bus de forma que el tiempo de acceso sea el mismo para cada computador. ||
 * < * Todos los procesadores pueden desempeñar las mismas funciones. ||
 * < * El sistema está controlado por un sistema operativo integrado que proporciona la interacción entre los procesadores y sus programas a los niveles de trabajo. ||

Es importante resaltar que el buen funcionamiento del sistema operativo es de vital importancia en los multiprocesadores simétricos ya que marca la diferencia entre los sistemas de multiprocesador debilmente acoplados como los clusters, en estos la unidad de interacción física es normalmente un mensaje o un fichero completo, en cambio, en los SMP se puede producir a través de elementos de datos individuales, y puede existir un elevado nivel de cooperación entre procesadores. El sistema operativo de un SMP planifica la distribución de proceso o hilos entre todos los procesadores. Un SMP presenta las siguientes ventajas potenciales:


 * * //**Prestaciones:**// || Si el trabajo de un computdor puede organizarse de manera que los tares se pueden realizar en pararelo, entonces un sistema con varios procesadores proporcinará mejores prestaciones. ||
 * * //**Disponibilidad:**// || Todos los procesadores pueden realizar las mimas funciones, un fallo en un procesador no hará que el sistema se detenga. ||
 * * //**Crecimiento incremental:**// || Se puede aumentar las prestaciones del sistema añadiendo más procesadores. ||
 * * //**Escalado:**// || Se ofrecen gran cantidad de productos y prestaciones en función a la cantidad de procesadores que configuran el sistema. ||

Organización
Cada procesador es autónomo, incluyendo una unidad de control, una ALUm registros y, posiblemente cache. Cada procesadoror tiee acceso a una memoria principal compartida y a los dispositivos de E/S a travès de algun medio de interconexión. Los procesadores pueden comunicarse entre sí, mediante la memoria o tambien de procesador a procesador.

La memoria se organiza de manrea que sean posibles los accesos simultáneos a bloques de memoria separados. En algunas configuraciones, cada procesador puede tener tambien su propia memoria principal y sus canales de de E/S, ademàs de los recursos compartidos.

Bus de Tiempo Compartido
El bus de tiepo compartido es el mecanismo más simple para costruir un sistema multiprocesador. La estructura y las interfaces son básicamente las mismas que las de un sistema de un único procesador que utilice un bus para la interconexión, además se brindan los elementos para el:


 * **Direccionamiento:** en el cual debe ser posible distinguir los módulos del bus para determinar la fuente y el destino de los datos.
 * **Arbitraje:** Se proporciona un mecanismo para arbitrar entre las peticiones que compiten por el control del bus, utilizando algún ripo de esquema de prioridad.
 * **Tiempo Compartido:** Cuando un módulo esta controlando el bus, los otros módulso no tienen acceso al mismo y deben, suspender su opereación hasta que dispongan del bus.

La organización del bus presenta varias caracteristicas atractivas:


 * **Simplicidad:** es la aproximación más simple para organizar el multiprocesador. La interfaz física y la lógica de cada procesador para el direccionamiento, el arbitraje y para compartir tiempo del bus es el mismo que el de un sistema con un solo procesdor.
 * **Flexibilidad:** Es generalmente sencillo expandir el sistema conectando más procesadore al bus.
 * **Fiabilidad:** El bus es esencialmente un medio pasivo, y el fallo de cualquiera de los dspositivos conectados no provocará el fallo de todo el sistema.

La principal desventaja de la organización de bus son las prestacione. todas las referencias a memoria pasan pro el bus, en consecuencia la velocidad del sistema està limitado por el tiempo de ciclo. Para mejorar las prestaciones se debe equipar al procesador con una memoria cache. Típicamente si procesadores y las estaciones de trabajo de tipo SMP, cuentan con dos niveles de cache, una cache interna L1 y una cache externa L2.

Cada cache tiene una parte de la memoria, si e altera una palabra en una cache, es posible que eso podría invalidar la información en otra cache. Para evitarlo, se debe avisar a los otros procesadores de que se ha producido una actualizaciónde memoria. Este problema se conoce como problema de coherencia de cache, que es resuelto típicamente por el hardware más que por el sistema operativo.

Considradciones de diseño de un Sistema operativo de multiprocesador
El Sitema operativo de un multiprocesador simétrico gestiona los procesadores y demás recursos para que el usuaro perciba un solo sistsma conrolando los recursos del sistema. El sistea en sí debería parecerse a un sistema monoproesador con multiprogramación. Así un sistema operativo de multiprocesador debe proporcinar toda la funcionalidad de un sistema operativo con multiprogramación, más las caracteristicas adicinales que permitan utilizar varios procesadores.

Entre los puntos claves a tomar en cuenta en el diseño están:


 * **Procesos concurrentes simultáneos:** las rutinas del sistema operativo deber ser reenteantes para permitir que varios procesadores puedan ejecutar simultáneamente el mismo código.Las tablas y estructuras de gestión deben manejarse para evitar bloqueos u operaciones no válidas.
 * **Planificación:** la planificación puede realizarla cualquier procesador, por lo que deben evitarse conflictos. El planificador debe asignar los procesos preparados a los procesadores disponibles.
 * **Sincronización:** puesto que hay poocesos que pueden acceder a espacios de memoriay recursos de E/S compartidos, debe proporcionarse una sincronización efectiva.
 * **Gestión de memoria:** en un multiprocesador debe comprender todos los aspectos propios de los monoprocesadores, además de explorar el paralelismo que proporciona el hardware.
 * **Fiabilidad y tolerancia a fallos:** el sistema operativo debería hacer posible una degradación gradual cuando se produce un fallo en un procesador. El planificador y otros elementos del sistema deben reconocer la pérdida de un procesdor y reestructurar las tablas de gestión.

Un SMP como gran computador
Los componentes clave de la configuración son los siguientes:


 * **Chips con dos núcleos de procesamiento:** cada microprocesador incluye dos procesadores idénticos denominados procesdores centrales los cuales son procesadores de arquitecrura CISC.
 * **Cache L2**: Se organizan en grupos de cinco, de forma que cada grupo drecibe acceso de ocho duales y proporciona acceso a todo el espacio de memoria principal.
 * **Elemento de Control de Sistema**: Se encarga del arbitraje de la comunicación en el sistema y tiene un papel central en el mantenimiento de la coherencia de cache.
 * **Control de almacenamiento principal:** Interconecta las caches L2 y la memoria principal.
 * **Adaptador de bus de memoria**: proporciona interfaz a diversos canales de E/S, el tráfico a esoso canales araviesa directamente la cache L2.

Coherencia de la cache y protocolo MESI:
En los sistemas multiprocesaodres es común disponer de uno o dos nivels de cache asociados a cada proesador. Esta organización es escencial para conseguir unas prestaciones rezonalbes. Esto origina un problema conocido como la coherencia de la cache. La esencia del problema radica en que pueden esxistir varias copias del mismo dato simultáneamente en caches diferentes, y si los procesos actualizan sus copias, puede producirse una visión inconsistente de la memoria. Debido a esto se definieron dos politicas de escritura usuales:


 * **Postescritura:** las operaciones de escritura se hacen usualmente solo en la cache, la memoria principal solo se actualiza cuando la línea de cache correspondiente se reemplaza.
 * **Escritura directa:** Todas las opereaciones de escritura se realizan en memoria principal a la vez que en la cache, asegurándose que el contenido de la memoria principal siempre será válido.

Resulta evidente que una política de postescritura puede ocasionar inconsistencia. Si dos caches contienen ka misma línea y la línea se actualiza en una cahce, la otra cache tendrá un valor no vàlido, Las lecturas siguientes producirán resultados inválidos. Incluso con la política de escritura directa puede esxistir inconsistencia, ano ser que las otras caches comprueben los accesos a memoria principal o reciban algín tipo de notificación directa de la escritura realizada. Existe un protocolo para minimizar los problemas que se puedan presentar con el manejo de diversas caches es por ello que se creó el siguiente protocolo con el objetivo de situar variables locales utilizadas recientemente en la cache apropiada y mantenerlas alli para las distintas escrituras y lecturas, al mismo tiempo que se mantiene la consistencia de las variables compartidas que pudieran encontrarse en varias caches al mismo tiempo. Las aproximaciones de coherenia de cache generalmente se han dividido en aproximaciones software y hardware. Algunas implementaciones adoptan una estrategia que implica tanto elementos de software como de harware.

Soluciones Software:
Los esquemas software de coherencia de cache intentan evitar ka necesidad de circuitería y lógica hardware adicional, que el compilador y el sistema operativo se encarguen del problema, es decir transferir el costo de la detección de posibles problemas desde el hardware al software. En ciertas ocaciones el software debe tomar decisiones conservadoras lo que conlleva a una utilización ineficiente de al cache.

os mecanismos de cocherencia basados en el compilador realizan un análisis del codigo para determinar que datos pueden dar problemas al pasar a la cache. Despúes el sistema operativo impide que se pasen a cache los datos marcador como no almaceables en cache. El enfoque más secillo es impedir que cualquier dato compartido pase a cache. Esto es demasiado conservador puesto que una estructura de datos compartida puede utizarse de manera exclusiva durate ciertos periodos de tiempo y solo para lectura en otros periodos. Es solo durante aquellos periodos en los que al menos un procesador pueda actualizar una variable y otro procesador pueda acceder a la variable cuando hay que considerar la coherencia de al cache.

Soluciones Harware:
Se denominan protocolos de coherenia de cache. Estas soluciones permiten reconocer en el momento de la ejecución de las situacioens de incosistencia potenciales, puesto que el problema se considera solo en el momento en que aparece, existe un uso más efectivo de las caches, mejorándose las prestaciones en relación a las aproximaciones, reduciendo la complejidad en el desarrllo del software.

En general, los esquemas hardware se pueden dividir en dos categorías: los protocolos de directorio y los protocolos de sondeo.

**Protocolos de Directorio:**
Recogen y mantienen la información acerca de dónde residen las copias de las líneas, usualmente, hay un controlador centralizado que es parte del controlador de memoria principa, un directorio que se almacena en la mempria principal. El directorio contiene informacióninformación de estado global en relación con los contenidos de las diferentes caches locales. Normalmente, el controlador posee información acerca de los procesadores que tienen una copia de cada línea. Antes de que un procesador pueda escribir en una copia local de una línea, debe solicitar al controlador el acceso exclusivo a dicha línea. Antes de ceder este acceso, el controlador envia un mensaje a todos los procesadores con una copia de la línea en su cache, forzando a que cada procesador invalide su copia. Los esquemas de directorio presentan las desventajas propias de tenr qun cuello de botella central y del coste de comunición entre los controladores de las distintas caches y el controlador central. No obstante, son efectivos ensistemas de gran escala que poseen múltiples buses o algún esquema complejo de interconexión.

**Protocolos de Sondeo:**
Se distribuyen la responsabilidad de mantener la coherencia de cahce entre todos los controladores de cache del multiprocesador. una debe reconocer cuando una línea de las que contiene esta compartida con otras caches. Cuando se realiza una actualización en una línea de cache compartida, debe anunciarse a todas las otras caches mediante un mecanismo de difusión. Cada controador de cache es capaz de sondear la red para observar las notificiaciones que se difunden y reaccionar adecuadamente. Los protocolos de sondeo se adaptan bien a los multiprocesadores basador en un bus, puesto que el bus compartido proporciona una forma sencilla para la difusión y el sondeo. No obstante, puesto que uno de los objetivos de utilizar caches locales es evitar las accesos al bus, hay que cuidar que el incremento en el tráfico del bus que requiere la difusión y el sondeo no anule los beneficios de las caches locales. Se han explorado dos enfoques básicos del protocolo de sondeo: invalidar-si-escritura y actualizar-si-escritura. Con un protoclo de invalidar, puede haber múltiples procesadores que leen pero uno solo es el que escribe uen un momento dado. Con el protocolo de actualizar puede haber varios procesadores que escriben igual que varios procesadores que leen. Cuando un procesador desea escribir en una línea compartida, la palabra a actualizar se distribuye a los demás y las caches que continen la línea de código lo pueden actualizar.

Algunos sistemas implementan protocolos adaptivs tanto el mecanismo de invalidar como el de actualizar, ninguna de estas aproximaciones es mejor que la otra en todas las situaciones, las prestaciones dependen del número de caches locales y el patrón de escrituras y lecturas de memoria.

La aproximación de incalidar es la que más se utilia en los multiprocesadores comerciales, se marca el estado de cada línea de cache, usando dos bits adicionales en el campo de marca de la cache, como modificado, compartido, exclusivo,o no válido, por esta razón el protocoo de invalidar se llama MESI por su nombre en ingles.

Protocolo MESI
Para proporcionar coherencia de la cache en un SMP, la caché de datos usualmente implemente un protocolo conocido como MESI. Con el protocolo la cache de datos incluye dos bits de estado en la marca, puesto que cada línea puede estar en una de los cuatro estados:
 * **Modificado:** La línea de la cache ha sd modificada y está dispoible solo en esta cache.
 * **Exclusivo:** La línea de la cache tiene el mismo contenido que en memoria pincipal y no está en presente en ninguna otra cache.
 * **Compartido:** La línea de cahce tiene el mismo contenido que en memoria principal y puede estar presente en otras caches.
 * **No válido:** La línea de cache no contiene datos válidos.



Se producen ciertas transiciones debido a las acciones iniciadas por el procesador al qe pertenece la cache y ocasionadas por eventos producidos en el bus común a continuación se describen cada una de las acciones con más detalle:

**Fallo de Lectura:** El procesador inicial realiza una lectura en memoria para acceder a la línes de memoria principal que contiene la dirección que no está en cache. El procesador indica con una señal a todos los otros procesadores para que sondeen la transacción.
 * Acierto de Lectura:** Cuando se produce un acierto en una lectura dentro de una línes de la cache, el procesador lee el dato y no se realiza ningún cambio en el estado.
 * Fallo de escritura:** El procesador comienza una lectura de memoria para acceder a la línes de memoria principal que contiene la dirección que no está en cache. Para ello el procesador envía una señal a través del bus que indica lectura para modificarla, cuando se carga la línea, se marca la línea para inmediatamente modificarla.
 * Acierto de escritura:** Se produce un acierto en cache local, el efecto depende de la línea:
 * //**Compartida:**// Antes de realizar la actualización, el procesador debe conseguir el acceso exclusico a la línea. El procesador señala esta intención a través del bus. Todo el prcesador que tenga una copia de la línea cambia su estado de compartido al no válido, después el procesador inicial actualiza la línea y cambia su copia de la línea del estado compartido al estado modificado.
 * //**Exclusivo:**// puesto que el procesador tiene el control exclusivo de esta línea, sinplemente la actualiza y cambia el estado de la línea de exclusivo a modificado.
 * //**Modificado:**// puesto que el procesador tiene el control exlusivo de la línea marcada en el estado mofdificado, solo tiene que actualizarla.