SO Multiprocesador

SISTEMAS OPERATIVOS DE MULTIPROCESADOR 1.1. Descripcion general Los sistemas de multiprocesamiento tienen procesadores

Views 610 Downloads 4 File size 100KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

SISTEMAS OPERATIVOS DE MULTIPROCESADOR

1.1. Descripcion general Los sistemas de multiprocesamiento tienen procesadores múltiples corriendo al mismo tiempo. Los sistemas de multiprocesamiento tradicionales tienen de 2 a 128 procesadores. Más allá de ese número (y este límite superior sigue aumentando) de sistemas de multiprocesamiento se convierten en procesadores paralelos. Los sistemas de multiprocesamiento permiten que diferentes hilos funcionen en diferentes procesadores. Esta capacidad acelera considerablemente el funcionamiento de programa. Ahora dos hilos pueden funcionar más o menos independientemente uno de otro sin requerir que el hilo intercambia para conseguir los recursos del procesador. Los sistemas operativos de multiprocesador son en sí mismos con hilos múltiples y generan también hilos que pueden funcionar en los procesadores separados para mejor provecho.

Un sistema operativo multiproceso se refiere al número de procesadores del sistema, que es más de uno y éste es capaz de usarlos todos para distribuir su carga de trabajo. Generalmente estos sistemas trabajan de dos formas: simétrica o asimétricamente.

Cuando se trabaja de manera asimétrica, el sistema operativo selecciona a uno de los procesadores el cual jugará el papel de procesador maestro y servirá como pivote para distribuir la carga a los demás procesadores, que reciben el nombre de esclavos.

Cuando se trabaja de manera simétrica, los procesos o partes de ellos (threads) son enviados indistintamente a cualesquira de los procesadores disponibles, teniendo, teóricamente, una mejor distribución y equilibrio en la carga de trabajo bajo este esquema. Se dice que un thread es la parte activa en memoria y corriendo de un proceso, lo cual puede consistir de un área de memoria, un conjunto de registros con valores específicos, la pila y otros valores de contexto. Us aspecto importante a considerar en estos sistemas es la forma de crear aplicaciones para aprovechar los varios procesadores.

Existen aplicaciones que fueron hechas para correr en sistemas monoproceso que no toman ninguna ventaja a menos que el sistema operativo o el compilador detecte secciones de código paralelizable, los cuales son ejecutados al mismo tiempo en procesadores diferentes. Por otro lado, el programador puede modificar sus algoritmos y aprovechar por sí mismo esta facilidad, pero esta última opción las más de las veces es costosa en horas hombre y muy tediosa, obligando al programador a ocupar tanto o más tiempo a la paralelización que a elaborar el algoritmo inicial.

A medida que crece el número de usuarios de un sistema de computación, o bien las necesidades de los mismos, crece también el número de procesos a ejecutar. Así las cosas pueden llegar un momento en que un sistema operativo monoprocesador pueda verse desbordado en su labor. Lo que podemos es en primer lugar, y a nivel de hardware, incorporar más y mejores procesadores. En segundo lugar, vestir al sistema físico con un sistema operativo multiprocesador que sea verdaderamente capaz de aprovechar todos los procesadores instalados.

Las capacidades fundamentales son: ü Equilibrio de cargas de Entrada / Salida. ü Equilibrio de carga del procesador. ü Reconfiguración.

Los sistemas multiprocesadores proporcionan una alternativa arquitectónica atractiva para mejorar el rendimiento de los sistemas informáticos mediante la reunión de un cierto número de procesadores estándares de bajo coste. Un multiprocesador bien diseñado puede llegar al límite tecnológico de velocidad mediante la operación de varios procesadores de alta velocidad en paralelo. Alternativamente, un sistema multiprocesador compuesto de microprocesadores estándares de amplia disponibilidad puede lograr una mejor proporción costo/rendimiento que un monoprocesador de elevada velocidad basado en tecnologías exóticas. El coste relativamente alto de los sistemas multiprocesadores puede ser compensado si se les emplea como servidores de cálculo en sistemas distribuidos. En tal disposición, el trabajo de interfaz de usuario se delega a las estaciones de trabajo clientes, mientras que el

multiprocesador puede concentrarse en tareas computacionalemente intensivas, que es lo que generalmente hacen mejor. El multiprocesamiento puede aplicarse para proporcionar: · Aumento en la productividad del sistema: mediante la ejecución de una serie de diferentes procesos de usuario sobre diferentes procesadores en paralelo. · Ganancia de velocidad de la aplicación: mediante la ejecución de algunas partes de la aplicación en paralelo. En entornos de tiempo compartido, la productividad puede mejorarse ejecutando una serie de procesos de usuario no relacionados entre si sobre diferentes procesadores en paralelo. De este modo no se incrementa la velocidad de cada aplicación en particular, pero se puede mejorar la productividad del sistema al completar un mayor número de tareas por unidad de tiempo si reprogramación ni intervención explicita del programador. La ganancia de velocidad en las aplicaciones puede obtenerse explotando el paralelismo dentro de una aplicación y creando múltiples procesos o hebras que pueden ser planificados para ejecución sobre diferentes procesadores. Esta división puede efectuarse por medios automáticos, tales como compiladores paralelizantes, o explícitamente mediante sentencias en el programa de aplicación. La paralelizacion automática es un problema difícil que ha generado mucha investigación, pero su disponibilidad generalizada en la practica parece esta un tanto lejana. Con el método de división en tareas explicitas, el programador delinea las fronteras de tareas y hebras y asegura su apropiada sincronización mediante la invocación de las primitivas de sincronización adecuada. En el aspecto negativo, la programación paralela explicita es un proceso complejo y a veces arduo. En el estado actual del arte, los programas resultantes tienden a ser específicos de cada máquina y son difíciles de portar debido a considerables variaciones en las arquitecturas de los multiprocesadores y de los modelos de programación. Las diferentes partes de una aplicación paralelizada necesitan generalmente sincronizarse e intercambiar datos después de completar un etapa de cálculo. La comunicación y sincronización entre procesadores reduce la ganancia de velocidad global al frenar cálculos individuales y consumir ancho de banda de interconexión del sistema. Uno de los principales retos del diseño de los sistemas multiprocesadores es minimizar las interacciones entre procesadores y proporcionar un mecanismo eficiente para llevarlas a cabo cuando sean necesarias. 1.1.1 Caracteristicas o Sistemas multiprocesador con mas de una CPU en comunicación cercana

o Sistemas fuertemente acoplados –los procesadores comparten la memoria y el reloj, la comunicación por lo general se realiza a través de la memoria compartida o Cada procesador controla sus propios recursos dedicados. o La reconfiguración de los dispositivos de Entrada / Salida puede implicar el cambio de dispositivos a diferentes procesadores con distintos Sistemas Operativos. o La contención sobre las tablas del Sistema Operativo es mínima. o Los procesadores no cooperan en la ejecución de un proceso individual, que habrá sido asignado a uno de ellos. o Tratamiento Simétrico Es la organización más complicada de implementar y también la más poderosa y confiable. o El Sistema Operativo administra un grupo de procesadores idénticos, donde cualquiera puede utilizar cualquier dispositivo de Entrada / Salida y cualquiera puede referenciar a cualquier unidad de almacenamiento. o El Sistema Operativo precisa código reentrarte y exclusión mutua. o Es posible equilibrar la carga de trabajo más precisamente que en las otras organizaciones. o Adquieren significativa importancia el hardware y el software para resolución de conflictos. o Todos los procesadores pueden cooperar en la ejecución de un proceso determinado. o El procesador ejecutivo es el responsable (uno sólo) en un momento dado de las tablas y funciones del sistema; así se evitan los conflictos sobre la información global. o Incremento del rendimiento y la confiabilidad o Económicos o Sistemas de fallos controlados por software

1.2. HISTORIA Y EVOLUCION

El concepto de trabajo en equipo, el dividir una tarea entre varias unidades de ejecución para que pueda completarse más rápidamente, fue naturalmente llevado al mundo de las computadoras prácticamente desde sus inicios. David Slotnick, quien fuera colaborador de Von Neumann, le hizo la propuesta de una máquina que contara con varias unidades de procesamiento central; sin embargo, al sentir de Von Neumann, la tecnología de la época no permitía la realización de semejante proyecto. Aun así, Slotnick continuó con sus ideas, lo que eventualmente daría origen a la ILLIAC IV (1964), considerada una de las primeras computadoras masivamente paralelas de la historia. En la actualidad, las computadoras más rápidas del mundo son las máquinas masivamente paralelas. El cómputo paralelo ofrece una serie de ventajas que lo hacen particularmente atractivo para los requerimientos de capacidad de cómputo, en particular los de la comunidad científica. Una de estas ventajas es económica. El uso de componentes comúnmente disponibles, en grandes cantidades, permite ofrecer mayor rendimiento, a un precio menor que el de máquinas con procesadores especialmente diseñados (como por ejemplo las máquinas de procesadores vectoriales y de propósito específico). Adicionalmente, las computadoras paralelas son inherentemente escalables, permitiendo actualizarlas para adecuarlas a una necesidad creciente. Las arquitecturas ``tradicionales'' se actualizan haciendo los procesadores existentes obsoletos por la introducción de nueva tecnología a un costo posiblemente elevado. Por otro lado, una arquitectura paralela se puede actualizar en términos de rendimiento simplemente agregando más procesadores. En ocasiones se menciona también la limitante física; existen factores que limitan la velocidad máxima de un procesador, independientemente del factor económico. Barreras físicas infranqueables, tales como la velocidad de la luz, efectos cuánticos al reducir el tamaño de los elementos de los procesadores, y problemas causados por fenómenos eléctricos a pequeñas escalas, restringen la capacidad máxima de un sistema uní procesador, dejando la opción obvia de colocar muchos procesadores para realizar cálculos cooperativamente.

1.3. ESTRUCTURA Y COMPONENTES DEL SISTEMA Multiprocesamiento asimétrico y simétrico En el multiprocesamiento asimétrico, uno o más procesadores se dedican exclusivamente a tareas específicas, tales como corriendo el sistema operativo. Los procesadores restantes estaban disponibles para el resto de las tareas, generalmente aplicaciones del usuario. Esta configuración no es óptima. Los

procesadores del sistema operativo pueden funcionar en la capacidad 100%, mientras que los procesadores usuario-asignados no están haciendo nada. El multiprocesamiento simétrico (SMP) es una arquitectura que balancea la carga de proceso mejor: La “simetría” refiere al hecho que cualquier hilo - sea del sistema operativo o aplicación del usuario- puede funcionar en cualquier procesador. De esta manera, la carga computacional total es separada uniformemente por todos los recursos computacionales. Hoy, los sistemas de multiprocesamiento simétricos son la norma, y los diseños asimétricos han desaparecidos casi totalmente. external image clip_image003.jpg

Estructura_y_componentes_1.JPG Arquitectura de Multiprocesamiento Simétrico

La interacción del hilo tiene dos componentes: cómo manejan los hilos la competición para los mismos recursos, y cómo se comunican los hilos entre sí mismos. Cuando dos hilos quieren acceder al mismo recurso, uno de ellos tiene que esperar. El recurso puede ser un disk drive, un registro en una base de datos que otro hilo está escribiendo, o cualquier otra innumerable característica del sistema. Minimizar este retardo es un problema de diseño central para las instalaciones de hardware y el software que corre. Es generalmente el factor más grande en de proporcionar escalabilidad perfecta del funcionamiento de los sistemas de multiprocesamiento, porque corriendo hilos que nunca compiten por el mismo recurso es efectivamente imposible. Un segundo factor es la sincronización del hilo. Cuando un programa está diseñado en hilos, hay muchas ocasiones donde los hilos tienen que interactuar y los puntos de la interacción requieren control delicado. Por ejemplo, si un hilo está preparando los datos para que otro hilo procese, los retardos pueden ocurrir cuando el primer hilo no tiene los datos listos cuando el hilo de proceso los necesita. Más ejemplos convincentes ocurren cuando dos hilos necesitan compartir un área común de la memoria. Si ambos hilos pueden escribir a la misma área en memoria, entonces el hilo que escribió primero tiene que comprobar que lo que escribió no se ha sobreescrito, o debe aislar otros hilos hasta que haya terminado con los datos. Esta administración de sincronización e inter-hilo es claramente un aspecto que no se beneficia de tener más recursos disponibles procesando.

El encabezado del sistema es el manejo del hilo hecho por sistema operativo. Más procesadores en funcionamiento, más sistema operativo tiene que coordinar. Consecuentemente, cada nuevo procesador agrega incrementalmente al trabajo de la administración del sistema operativo. Esto significa que cada nuevo procesador contribuirá cada vez menos al rendimiento total del sistema. Un sistema de multiprocesadores debe tener capacidad para gestionar la repartición de memoria entre varios procesadores, pero también debe distribuir la carga de trabajo. Estructura_y_componentes_2.JPG - Los procesadores no cooperan en la ejecución de un proceso individual, que habrá sido asignado a uno de ellos. - Tratamiento Simétrico Es la organización más complicada de implementar y también la más poderosa y confiable. - El Sistema Operativo administra un grupo de procesadores idénticos, donde cualquiera puede utilizar cualquier dispositivo de Entrada / Salida y cualquiera puede referenciar a cualquier unidad de almacenamiento. - El Sistema Operativo precisa código reentrarte y exclusión mutua. - Es posible equilibrar la carga de trabajo más precisamente que en las otras organizaciones. Adquieren significativa importancia el hardware y el software para resolución de conflictos. Todos los procesadores pueden cooperar en la ejecución de un proceso determinado; El procesador ejecutivo es el responsable (uno sólo) en un momento dado de las tablas y funciones del sistema; así se evitan los conflictos sobre la información global. El rendimiento que pueda obtenerse en cualquier sistema informático es resultado de la combinación del hardware y del software; y como elemento radical del software, el sistema operativo. Con la aparición de máquinas de propósito general de más de un procesador, surge la necesidad de adaptar los sistemas operativos ya existentes para la gestión de un nuevo recurso con múltiples instancias: el procesador. Al hablar de sistemas operativos en entornos paralelos, hemos de distinguir cuidadosamente dos aspectos del trabajo paralelo. Por un lado, el sistema operativo como gestor de los recursos que utilizan los usuarios, ha de ser capaz de dar soporte a trabajos paralelos; por ejemplo, que un único programa pueda utilizar varios procesadores. Por otro lado, el propio sistema operativo

está corriendo en un sistema multiprocesador y, por tanto, él mismo es un programa paralelo. Las mismas rutinas del sistema operativo han de adaptarse al nuevo funcionamiento del entorno, ahora paralelo, y con problemas de concurrencia y exclusión mutua muchas veces encubiertos. La mayoría de las realizaciones de sistemas multiprocesadores suelen incluir el diseño de mecanismos para la sincronización y comunicación entre procesadores. Para una mayor eficiencia, se intenta incluso que estos mecanismos formen parte del hardware de la máquina, aumentando o modificando, si es posible, el conjunto de instrucciones del procesador. Tres configuraciones básicas han sido adoptadas a la hora de clasificar un sistema operativo, según su comportamiento en presencia de múltiples procesadores: supervisores separados, master/slave y simétricos [ALMA89].

El ordenador que cuenta con dos o más microprocesadores, que son un conjunto de circuitos electrónicos altamente integrados para el cálculo y control computacional es denominado multiprocesador. El microprocesador puede ejecutar simultáneamente varios hilos de un mismo proceso.

Los ordenadores multiprocesador presentan problemas de diseño, derivados del hecho de que 2 programas se ejecuten simultáneamente y potencialmente pueden interferirse entre si. Por ellos existen dos arquitecturas que resuelven dichos problemas; esta es una clasificación en función de la organización de la memoria:

· Arquitectura SMP (Uma)Uniform Memory Access. · Arquitectura DSM (Numa.) NonUuniform Memory Access. · Message Passing Machines (MPM).

1.3.1. Arquitectura SMP (Uma)

Los multiprocesadores simétricos (Symmetric Multiprocessor) son ordenadores con arquitectura de memoria compartida que presentan en la memoria principal un acceso simétrico desde cualquier procesador, es decir, el retardo en el acceso a cualquier posición de memoria es el mismo con independencia del procesador desde el que se realice la operación o tarea, dicha arquitectura es denominada como “Acceso Uniforma a Memoria” (UMA) y se lleva acabo con una memoria compartida pero centralizada. Estos multiprocesadores dominan el volumen como el capital invertido. Esta arquitectura a su vez se encuentra dividida en: SMP con bus SMP escalable

image_(2).JPG * * Características Generales: – Espacio de direcciones de memoria compartido – Tiempo de acceso uniforme para toda dirección – Hardware bastante simple. – El cuello de botella es el acceso a memoria principal, lo cual implica: • Grandes cachés en cada procesador • El número de procesadores no puede ser muy alto. Hoy en día N≤32.

* * Problema de coherencia en UMA: • El overhead por acceder a la memoria compartida es muy grande. Hay que usar cachés. • Debemos asegurar la coherencia de los datos en dichos dispositivos. • Cuando usamos un dato privado ⇒ traerlo a caché.

• Si accedemos a un dato compartido, hay que traerlo a caché, pero si otros procesadores también acceden al dato y se lo llevan a su caché, existirán varias copias distintas del mismo dato.

* * Solución: • Intentar evitar las incoherencias mediante hardware. • En UMA se usan protocolos de husmeo (snooping): – Se pueden utilizar gracias a tener un bus único y compartido de comunicación. – Los controladores de cachés locales espían el bus para ver si circula algún dato de alguna línea que tenga almacenada en su caché. – Los cachés deben de estar provistos de 2 puertos de acceso (p.e. replicando la memoria de etiquetas). » Uno para el acceso del procesador. » Otro para que el controlador pueda comparar las direcciones que aparecen por el bus. • Ejemplo: Protocolo de invalidación CB (MSI).

1.3.2. Arquitectura DSM (Numa).

La memoria compartida distribuida o DSM es una abstracción que se propone como alternativa a la comunicación por mensajes. Los multiprocesadores de memoria compartida y distribuida (DSM o Distributed Shared Memory), son ordenadores MIMID, en los cuales la memoria esta distribuida entre los nodos. Tomando en cuenta que el espacio de direccionamiento es global, el acceso a memoria principal es asimétrico. Esta arquitectura de memoria que se genera en retardo de acceso dependiente tanto la posición de memoria como el procesador se denomina Acceso No Uniforme a Memoria (NUMA), hace su aparición cuando la memoria compartida esta distribuida entre los nodos. De

esta manera, se mejora el retardo medio de acceso a memoria, ya que en cada ordenador los accesos a posiciones de su memoria local presentan un retardo sensiblemente inferior al caso en que es accedido a posiciones de memoria en otros ordenadores. Esta clase de ordenadores con arquitectura NUMA presentas escalabilidad. Propone un espacio de direcciones de memoria virtual que integre la memoria de todas las computadoras del sistema, y su uso mediante paginación. Las páginas quedan restringidas a estar necesariamente en un único ordenador. Cuando un programa intenta acceder a una posición virtual de memoria, se comprueba si esa página se encuentra de forma local. Si no se encuentra, se provoca un fallo de página, y el sistema operativo solicita la página al resto de computadoras. El sistema funciona de forma análoga al sistema de memoria virtual tradicional, pero en este caso los fallos de página se propagan al resto de ordenadores, hasta que la petición llega al ordenador que tiene la página virtual solicitada en su memoria local. A primera vista este sistema parece más eficiente que el acceso a la memoria virtual en disco, pero en la realidad ha mostrado ser un sistema demasiado lento en ciertas aplicaciones, ya que provoca un tráfico de páginas excesivo. De la misma manera que la arquitectura SMA se divide en:

ccNUMA docNUMA COMA SVM

image_(3).JPG

Características Generales: – Espacio de direcciones de memoria compartido. – Tiempo de acceso no uniforme para toda dirección. Depende de si accedemos a memoria local (no a caché) o a remota. – Debido al incremento de prestaciones del uniprocesador y del AB requerido, ésta es la única solución para sistemas con muchos procesadores. – tacc pequeño en accesos a memoria local.

– Hard de la red es complejo, necesita redes de interconexión especiales. Existen distintas líneas de comunicación separadas ⇒ mayor AB. – El problema de la coherencia es más difícil de mantener en hardware. – Estos multiprocesadores son escalables • Escalable: Si crece el número de procesadores N, entonces la memoria crece como orden(N). Esto es gracias a que cada procesador lleva su propia memoria. • Los procesadores UMA no son escalables, puesto que si aumentamos el número de procesadores, la memoria es la misma.

1.3.3. MPM (Message Passing Machines).

image_(4).JPG

– Espacio de direcciones de memoria distribuido. – Son compatibles en hardware a los NUMA. – Cada procesador es un computador independiente del resto. – Fácilmente escalable. • El mecanismo de comunicación es a través de mensajes (igual que la comunicación entre procesos del S.O.). No necesita mecanismos hardware ni para controlar la coherencia de cachés (pues son espacios distintos de direcciones), ni para implementar los accesos remotos. • La red es la parte más compleja de escalar.

1.4. VENTAJAS DE LOS SO DE MULTIPROCESADORES

Algunos de los argumentos a favor del multiprocesamiento incluyen:

· Rendimiento y potencia de cálculo: dedicando múltiples procesadores a la ejecución de una aplicación es posible obtener ganancias significativas de velocidad. Los problemas que suponen las interacciones más extensas o más frecuentes entre procesadores pueden resolverse más rápidamente que en un sistema distribuido ya que el ancho de banda de comunicación entre procesadores es más elevado. · Tolerancia a fallos: La redundancia inherente a los multiprocesadores puede emplearse para aumentar la disponibilidad y eliminar puntos de fallo. · Flexibilidad: Un sistema multiprocesador podría tener capacidad para reconfigurarse dinámicamente y ajustarse de tal modo que optimice diferentes objetivos para diferentes aplicaciones, tales como aumento de productividad, ganancia de velocidad de las aplicaciones o incluso ciertos aspectos de tolerancia a fallos. · Crecimiento modular: Hasta cierto punto, un diseño modular de un sistema puede adaptarse a las necesidades de una instalación específica añadiéndole exactamente el tipo de componente que mas probablemente alivie un cuello de botella importante, tal como procesadores, memorias o dispositivos de E/S. · Especialización funcional: Se puede añadir procesadores comerciales con relaciones coste/rendimiento varios órdenes de magnitud inferiores a la de los supercomputadores pueden estructurase en multiprocesadores con una relación coste/ efectividad adecuada a un amplio rango de aplicaciones.

1.5. CLASIFICACIÓN DE MULTIPROCESADORES

Existen varias clasificaciones de las arquitecturas informáticas paralelas. Flynn (1966) introdujo un esquema para clasificar la arquitectura de un computador basándose en cómo la máquina relaciona sus instrucciones (SI, single instrucción) o un flujo de múltiples instrucciones (MI). Esto da lugar a la clasificación siguiente: Ø SISD: Flujo de una sola instrucción, flujo de un solo dato. Esta categoría incluye a los computadores serie convencionales. Ø SIMD. Flujo de una sola instrucción, flujo de múltiples datos. Estos son típicamente los procesadores vectoriales y los computadores en array en los cuales una sola instrucción puede operar sobre diferentes datos en diferentes unidades de ejecución.

Ø MISD. Flujo de múltiples instrucciones, flujo de un solo datos. Esta es una organización raras veces utilizada en la cual múltiples instrucciones operan sobre un único flojo de datos en paralelo. Ø MIMD. Flujo de múltiples instrucciones, flujo de múltiples datos. La ejecución simultanea de múltiples instrucciones que operan sobre varios flujos de datos. Esta clase incluye los multiprocesadores de diferentes tipos.

1.6. ESTRUCTURAS FUNCIONALES

Es esta parte introducimos las estructuras funcionales de los sistemas multiprocesador. En términos muy generales podemos caracterizar a los multiprocesadores atendiendo a 2 criterios: Un multiprocesador es un único computador que incluye múltiples procesadores. Los procesadores se pueden comunicar y cooperar a diferentes niveles para resolver un problema dado. La comunicación se puede realizar enviando mensajes de un procesador a otro o compartiendo una memoria común. Existen algunas similitudes entre los multiprocesadores y los sistemas multicomputador, ya que ambos están motivados por el mismo objetivo básico: soportan operaciones concurrentes en el sistema. Sin embargo, existe una distinción importante entre ellos basada en el grado en que comparte recursos y cooperan en la solución de problemas. Un sistema multicomputador consta de varios computadores autónomos que pueden o no comunicarse entre ellos. Un sistema multiprocesador esta controlado por un sistema operativo que proporciona interacción entre los procesadores y sus programas a nivel de procesos. A continuación describimos 2 conjuntos diferentes de modelos arquitectónicos para un multiprocesador.

1.6.1. Ligeramente acoplados

Los procesadores individuales tienen memorias privadas y no existe una memoria global compartida. Cada procesador tiene un conjunto de dispositivos de entrada-salida y una gran memoria local a donde acceden la mayor parte de las instrucciones y datos. Para reverenciarnos al conjunto formado por el procesador, su memoria local y sus interfaces de E/S utilizaremos el término modulo computador. los procesos que se ejecutan sobre diferentes módulos de computador se comunican mediante intercambio de mensajes a través de un sistema de transferencia de mensajes (STM). Los sistemas ligeramente acoplados (SLA) resultan eficientes cuando las interacciones entre las tareas son mínimas.

1.6.2. Estrechamente acoplados

Los procesadores contienen memoria globalmente compartida a la que todos lo procesadores tienen acceso. se comunican a través de una memoria principal compartida, por lo que la velocidad a la que se pueden comunicar dato de un procesador a otro es del mismo orden que el ancho de banda de la memoria. En cada procesador puede existir una memoria cache. Existe una completa conectividad entre los procesadores y la memoria, esta conectividad se puede llevar a cabo bien insertando una red de interconexión entre los procesadores y la memoria bien por medio de una memoria multipuesto. Unos de los factores que limitan la expansión de un sistema estrechamente acoplado es la perdida de rendimiento debida a los conflictos que aparecen cuando 2 o mas procesadores intentan acceder a la misma unidad de memoria al mismo tiempo. Los sistemas estrechamente acoplados (SEA) pueden tolerar un alto grado de interacciones entre las tareas sin un deterioro significativo en el rendimiento. La división no es muy estricta ya que existen sistemas híbridos que tienen tanto memoria privada en cada procesador como memoria global compartida a la que muchos o todos los procesadores tienen acceso. La memoria compartida es fundamental para la comunicación y sincronización entre procesadores en sistemas fuertemente acoplados se han distinguido por un mayor ancho de banda y menores retardos en sus rutas de interconexión. En sistemas débilmente acoplados puros, el mecanismo principal de comunicación entre procesadores es el paso de mensajes.

Las configuraciones hibridas y algunos sistemas débilmente acoplados permiten a los procesadores acceder a un memoria no local e incluso a la memoria privada de otros procesadores. Existe generalmente una penalización por acceder a la memoria no local en forma de retardos añadidos provocados por el arbitraje de contención y el paso a través de las rutas de interconexión procesador-memoria. Estos factores dan lugar a al siguiente clasificación de los multiprocesadores de memoria compartida en base a la arquitectura de la memoria y los retardos de acceso. · Acceso uniforme a memoria (UMA, uniform memory acces): sistemas en donde los procesadores pueden acceder a toda la memoria disponible con la misma velocidad: esto incluye muchas arquitecturas con bus compartido. · Acceso no uniforme a memoria (NUMA, nonuniform memory acces): Sistemas en donde hay una diferencia de tiempo en el acceso a diferentes áreas de memoria, dependiendo de la proximidad a un determinado procesador y la complejidad del mecanismo de conmutación entre el procesador y la sección referenciada de la memoria del sistema. A veces, se añade a esta clasificación una tercera categoría denominada acceso no remoto a memoria (NORMA, no remote memory) para designar los sistemas sin memoria compartida. En multiprocesadores fuertemente acoplados si se desea alta velocidad o procesamiento en tiempo real, se pueden utilizar estos sistemas (SEA). La figura “1A” consta de una cantidad N de procesadores, L módulos de memoria y D canales de entrada-salida, estas unidades están conectadas a través de un conjunto de 3 redes de interconexión, la red de interconexión procesadoresmemoria (RIPM), la red de interconexión E/S-procesador (RIESP) y la red de interconexión Señal-Interrupción (RISI). LA RIPM es un conmutador que puede conectar cada procesador a cada modulo de memoria. Un conjunto de puntos de cruce par aun par particular procesador-memoria incluye (n+k) puntos de cruce, don de N es el ancho de la dirección dentro de un modulo y K es el ancho de caminos de datos. La complejidad de la memoria multipuesto es similar a la de barras cruzadas. Alternativamente, la RIPM puede ser una red multietapa. image_(5).JPG Figura "1A" Configuraciones de multiprocesadores estrechamente acoplados.

Un modulo de memoria puede satisfacer solamente la petición de un procesador en un ciclo de memoria dado. Por tanto, si 2 o más procesadores

intentan acceder al mismo modulo de memoria, ocurre un conflicto que se resuelve o arbitra mediante la RIPM. Otro método utilizado para reducir el grado de conflictos consiste en asociar un área de almacenamiento reservada con cada procesador. En la organización multiprocesador de la figura “1A” cada procesador puede hacer referencias a memoria principal. Ya que cada referencia a memoria se hace a través de la RIPM, sufre un retraso en el conmutador de memoria procesador y, por tanto, se incrementa el tiempo de ciclo de instrucción. El incremente en el tiempo de ciclo de instrucción reduce la productividad del sistema. Otra consecuencia de la cache es que el tráfico a través del conmutador de barras cruzadas se puede reducir, lo que reduce sustancialmente la contención en los puntos de cruce. En la Figura “1B” hay un modulo asociado a cada procesador que dirige las referencias a memoria bien a la memoria local no mapeada (MLNM ) bien a la cache privada de ese procesador. La sincronización entre procesadores se facilita por el uso de una red interprocesador. La RISI se puede también usar por un procesador que falla para emitir una alarma iniciada por el hardware para los procesadores que funcionan. La RIESP permite a un procesador comunicarse con el canal de E/S que esta conectado a dispositivos periféricos. image_(6).JPG Figura "1B". Modulo asociado a cada procesador que dirige las referencias a memoria bien a la MLNM.

La complejidad de la RISI puede variar desde un simple bus de tiempo compartido hasta un complejo conmutador de barras cruzadas. Un bus en tiempo compartido es mucho mas barato que un conmutador de barras cruzadas, pero encuentra más contenciones y retardos debido a la lógica de arbitraje del bus. Sin embargo, la razón de peticiones de interrupción es suficientemente bajas para hacer que el bus compartido sea una solución atractiva para la comunicación interprocesador. El conjunto de procesadores usados en un sistema multiprocesador pueden ser homogéneos o heterogéneos. Es homogéneo si los procesadores con funcionalmente idénticos, incluso de los procesadores son idénticos pueden ser asimétricos. Esto es, 2 componentes funcionalmente idénticos pueden diferir en otras dimensiones. En general, un sistema homogéneo es más fácil de programar al tiempo que elimina los problemas que aparecen al conectar 2 procesadores no similares. El

sistema simétrico normalmente puede facilitar la recuperación de errores en caso de fallo.

Asimetría entrada-salida: la asimetría también se puede extender a los dispositivos entrada salida con respecto a los procesadores. Una red de interconexión de E/S que tiene conectividad completa es simétrica. La figura “2” es un ejemplo de subsistema de E/S asimétrico. En tales sistemas los dispositivos asociados a un procesador no pueden ser accedidos directamente por otro procesador. image_(7).JPG

Figura " 2" En una estructura completamente simétrica, el fallo de un procesador central no excluye la accesibilidad de un dispositivo dado por otro procesador. En el caso asimétrico, el fallo de una CPU provoca que todos los dispositivos asociados a ese procesador resulten inaccesibles. El problema de la inaccesibilidad que encuentra un conjunto de dispositivos asociando a un procesador que falla puede superarse teniendo conexiones redundantes, como se muestra en la figura “3”. Figura "3" La desventaja del caso completamente simétrico es el coste del conmutador de barras cruzadas.

image_(8).JPG

1.7. CARACTERÍSTICAS DE UN PROCESADOR PARA MULTIPROCESAMIENTO

a) Recuperabilidad del proceso: la arquitectura de un procesador utilizado en un sistema multiprocesador debería reflejar el hecho de que le proceso y el procesador son 2 entidades diferentes. Si el procesador falla, debería ser posible que otro procesador recupere el estado del proceso interrumpido de manera a que la ejecución pueda continuar. Es deseable tener un archivo compartido por todos los procesadores para el caso que ocurra un modo de operación degradado.

b) Conmutación eficiente de contextos: para una utilización efectiva, es necesario que el procesador soporte más de un dominio de direccionamiento y por tanto, proporcionar operaciones de cambio de dominio o conmutación de contexto. Estas operaciones de conmutación requieren muchas operaciones sobre colas y pilas. La operación de conmutación de contexto salva el estado del proceso actual y conmuta a un proceso preparado para ejecución seleccionado mediante la restauración del estado del nuevo proceso. El estado de un proceso de ejecución lo indican los contenidos de los registros del procesador. Se puede crear una instrucción especial para llevar a cabo eficientemente la conmutación de contexto. Disponiendo de un amplio número de conjuntos de registros la conmutación de tareas puede realizarse eficientemente mediante el cambio del contenido del registro del proceso actual en el procesador que apunta al conjunto de registro que contiene el estado de proceso seleccionado como se muestra en la figura “4”. El registro de proceso actual apunta al conjunto de registro actualmente en uso. Las instrucciones de pila salvan y restauran rápidamente la palabra de estado del procesador a minimizar los recargos de conmutación. image_(9).JPG Figura "4" Conmutación de contexto en un procesador con múltiples conjuntos de registros."Arquitectura de computadoras y procesamiento paralelo, Kai Hwang" c) Grandes espacios de direcciones virtuales y físicos: un procesador que se vaya a utilizar en la construcción de un ultiprocesador de propósito general de media o gran escala debe soportar un gran espacio de direcciones físicas. Además de la necesidad de un gran espacio de direcciones físicas también es deseable un gran espacio de direcciones virtuales. Si fuera posible, el espacio de direcciones virtuales debería ser segmentado para fomentar la compartición modular y el chequeo de fronteras de direcciones para protección de memoria y fiabilidad software.

d) Primitivas eficientes de sincronización: el diseño del procesador debe proporcionar la implementación de acciones indivisibles que sirvan de base a las primitivas de sincronización. Estas primitivas necesitan mecanismos eficientes para establecer la exclusión mutua, que se requiere cuando dos o mas proceso están en ejecución concurrentemente y debes cooperar al intercambio de dato durante la computación.

e) Mecanismos de comunicación interprocesador: el conjunto de procesadores utilizado en un multiporcesador debe disponer de un medio eficiente para la comunicación entre ellos. Este mecanismo se deberá implementar en hardware. Un mecanismo hardware es muy útil para atraer la atención del procesador objeto. La necesidad del tal mecanismo resulta evidente aun cuando en un sistema multiprocesador asíncrono existen frecuentes peticiones de servicios de intercambio entre diferentes procesadores. El mecanismo interprocesador hardware puede también facilitar la sincronización entre los procesos. Este mecanismo se puede utilizar cuando ocurre un fallo al fin de indicar una señal hardware para todos los procesadores que están funcionando, que podrían entonces conocer del procesador que falla y comenzar una recuperación del error o procedimiento de diagnostico.

f) Conjunto de instrucciones: el conjunto de instrucciones de un procesador debe tener las suficientes facilidades para implementar lenguajes de alto nivel que permitan concurrencia efectiva al nivel de procedimientos y para manipular eficientemente estructuras de datos. Deberán disponer de instrucciones para enlace de procedimientos, construcción de bucles, manipulación de direcciones. Además, el conjunto de instrucciones deberá incluir también instrucciones para crear y finalizar caminos de ejecución paralela dentro de un programa.

Un sistema multiprocesador proporciona un entorno natural donde cada componente puede monitorizar a los otros de forma relativamente facil. Existen diferentes implementaciones de la técnica de detección de errores, pero la idea básica es que el temporizador hará aparecer de alguna manera un indicado de condición de error si no es desconectado dentro de un límite de tiempo especificado.

1.8. REDES DE INTERCONEXIÓN EN LOS MULTIPROCESADORES

La principal característica de un sistema multiprocesador es que cada procesador puede compartir un conjunto de módulos de memoria principal, y dispositivos de E/S. Esto se consigue a través de redes de conexión de

memoria-procesador y otra de conexión E/S-procesador. Existen diferentes formas físicas para las rede de interconexión (RI). Entre ellas:

Buses comunes o de tiempo compartido. El sistema RI más simple para múltiples procesadores es un camino de comunicación común que conecte a todas las unidades funcionales “5”. Este camino se denomina bus común o de tiempo compartido, es la organización menos compleja y la más facil de reconfigurar. Las operaciones de transferencia son controladas completamente por las interfase con e bus de las unidades de envió y recepción. Ya que el bus es un recurso compartido se dispone de mecanismos para resolver conflictos.

image_(10).JPG

Figura "5". Organización multiprocesador de bus único Los métodos de resolución incluyen a las prioridades fijas o estáticas, las colas y el encadenamiento mariposa. Un controlador central de bus aunque simplifica la solución de conflictos, puede tener efectos negativos sobre la fiabilidad y flexibilidad del sistema. Una unidad receptora reconoce su dirección colocada sobre el bus y responde a las señales del control del emisor, esto aunque básico tipifica las operaciones sobre el bus. Aunque la organización por bus único es fiable y relativamente barata, introduce un componente critico que puede ocasionar el conflicto del todo el sistema como resultado de una mal función en cualquiera de los circuitos interfaz del bus. La razón de transferencia total dentro del sistema esta limitada al ancho de banda y la velocidad de este camino único, por eso son altamente beneficiosos la memoria y dispositivos de E/S privados. Una extensión del camino único a dos caminos unidireccionales como se muestra en la figura “6”, alivia alguno de los problemas del sistema sin un incremento apreciable de la complejidad del sistema ni decremento de la fialidad. image_(11).JPG

Figura "6"

En vista del número cada vez mayor de dispositivos conectados a un bus central, así como las velocidades de estos, los buses pueden resultar fuertemente sobrecargados, por tanto el bus deteriora el rendimiento de los dispositivos y del sistema completo. Examinaremos algoritmos de arbitraje que controlan el acceso al bus de los dispositivos que lo solicitan: a) Algoritmo de Prioridad Estática: mucho buses digitales utilizados en la actualidad asignan prioridades estáticas únicas a los dispositivos solicitantes. Cuando varios dispositivos piden al mismo tiempo el uso del bus, el dispositivo con más alta prioridad obtiene el acceso. Esto se utiliza normalmente utilizando un esquema denominado encadenamiento margarita, en el que a todos los servicios se le asignan prioridades de acuerdo a su localización a lo largo de la línea de control de concesión del bus. Al dispositivo mas proximo al controlador del Bus se le asigna la prioridad mas alta, figura "7" image_(12).JPG

Figura "7". Implementación del encadenado mariposa estático de un bus de un sistema b) Algoritmo de Intervalo Fijo de Tiempo: este divide el ancho de banda disponible en unidades de tiempo de longitud fija que se asigna a cada dispositivo en forma rotatoria. Si un dispositivo no usa su tiempo este se pierde para los demás. Esta técnica denominada asignación fija de tiempo FTS) o multiplexacion por división en el tiempo (TMD), se usa en el enlace de comunicaciones en paralelo de Digital que también permite una asignación flexible de tiempo disponible a los dispositivos. c) Algoritmo de Prioridad dinámica: estos permiten conseguir la característica de equilibrado de carga de los algoritmos simétricos, tales como el FTS, sin tener elevados tiempos de espera. A los dispositivos se le asignan prioridades únicas para acceder al bus, pero estas prioridades son cambiadas para que cada dispositivo pueda acceder al bus. Si el algoritmo que se usa para las permutaciones de las prioridades no favorece dispositivos individuales (es simétrico), entonces la carga del sistema equilibra las peticiones del bus. Además utilizando las prioridades se supera la ineficiencia en el esquema FTS de asignar intervalos de tiempo completo a los dispositivos antes de colocar la petición. d) Algoritmo primero que llega, primero que se sirve (FCFS): en el esquema se respeta el orden de recepción de las peticiones, este esquema es simétrico porque no favorece ningún procesador particular ni dispositivo en el bus; por

tanto equilibra las peticiones de bus. En esencia FCFS es el algoritmo óptimo de arbitraje del bus. Pero FCFS es difícil de implementar por al menos 2 razones. Cualquier implementación de FCFS, a diferencia de los algoritmos precedentes, debe proporcionar un mecanismo para memorizar el orden de llegada de todas las peticiones de bus pendientes; pero más importante siempre es posible que dos peticiones lleguen dentro de un intervalo suficientemente pequeño para que su orden relativo no se pueda distinguir correctamente. Otras dos técnicas utilizadas en los algoritmos de control de bus son el sondeo (polling) y la petición independiente. En un controlador de bus que se usa sondeo, la señal de concesión del Bus (BGT) de la implementación del encadenamiento mariposa estática se sustituye por un conjunto de líneas de sondeo, ver figura “8”. image_(13).JPG

Figura "8". La unidad de control del bus finaliza el sondeo y el dispositivo D accede al bus. El acceso se mantiene hasta que el dispositivo pone en baja la línea SACK. * * Conmutador de barras cruzadas y memorias multipuesto. Si se incrementa el número de buses en tiempo compartido de un sistema, se alcanza un punto en el que hay un camino disponible para cada unidad de memoria, ver figura “9”. La red de interconexión se denomina entonces barras cruzadas sin bloqueo. El conmutador posee una conectividad completa con respecto a los modulo de memoria porque hay un bus separado asociado con cada módulo de memoria. Así el numero máximo de transferencias que pueden tener lugar simultáneamente esta limitado más por el numero de módulos de memoria y el producto ancho de banda-velocidad de los buses que el número de caminos disponibles.

image_(14).JPG Figura "9". (Cortesía de ACM computing Surveys, Enslow, 1977)

Las características importantes de un sistema que utiliza una matriz de interconexión de barras cruzadas son la simplicidad extrema de las interfaces conmutador-unidad funcional y la posibilidad de soportar transferencias simultáneas para todas las unidades de memoria. Cada lugar de cruce no solo debe ser capaz de conmutar transmisiones paralelas, sino también de resolver las múltiples peticiones de acceso al mismo módulo que ocurren durante un ciclo de memoria. Estas peticiones conflictivas se manejan normalmente sobre una base de prioridad predeterminada. El resultado de la inclusión de este tipo de capacidad es que el hardware necesario para implementar el conmutador puede llegar a ser bastante grande y complejo. En un dispositivo multipuesto los conflictos ocurren cuando 2 o más peticiones concurrentes se realizan sobre el mismo dispositivo destino. La figura “10” muestra un ejemplo de diseño funcional de un elemento del conmutador de barras cruzadas o memoria multipuesto para un módulo. Cada procesador genera una señal de petición de módulo de memoria (REQ) a la unidad arbitraje, la cual selecciona el procesador con más alta prioridad., esta seleccion se hace con un codificador de prioridad. El módulo de arbitraje devuelta una señas de reconocimiento (ACK) al procesador seleccionado, después que le procesador recibe la señal ACK inicia su operación de memoria.

image_(15).JPG Figura "10" El módulo mulltiplexor; multiplexa datos, direcciones de palabras dentro del módulo y señales de control desde el procesador hasta el módulo de memoria, el mismo esta controlado por el número codificado del procesador seleccionado. Teóricamente la expansión del sistema esta limitado sólo por la medida de la matriz del conmutador, que con frecuencia se puede expandir modularmente dentro del diseño inicial y otras limitaciones de ingeniería. Para proporcionar la flexibilidad que se requiere en el acceso a los dispositivos de E/S, una extensión del concepto de conmutador de barras cruzadas consiste en utilizar un conmutador similar en el lado del dispositivo de E/S o canal, como se ve en la figura “11”. El hardware necesario para la implementación es bastante diferente y no tan complejo porque los controladores y dispositivos están diseñados para reconocer su propia dirección única.

image_(16).JPG

Figura "11" El conmutador de barras cruzadas tiene capacidad para obtener el mayor ancho de banda y eficiencia del sistema. La fiabilidad del mismo es problemática; sin embargo se puede mejorar mediante segmentación y redundancia dentro del conmutador. Si el control, la conmutación y la lógica de arbitraje que distribuidos por toda la matriz del conmutador de barras cruzadas se distribuyen en los interfaces de los módulos de memoria, resulta un sistema de memoria multipuesto como en la Figura “12” image_(17).JPG

Figura "12" La flexibilidad para configurar el sistema también hace posible designar porciones de memoria privadas para ciertos procesadores, unidades E/S o combinación de ellos, así se ve en la figura “13”: en esta organización los módulos de memoria M0 y M3 son privador para los procesadores P0 y P1.

image_(18).JPG

Figura "13" La organización de memoria multipuerto también puede soportar accesos sin bloqueo a la memoria si se utiliza una topología completamente conectada. Es muy difícil justificar el uso de un conmutador de barras cruzadas para grandes sistemas de multiprocesamiento. La ausencia de un conmutador con un coste y rendimiento razonables es un o de los motivos que ha impedido el crecimiento de grandes sistemas multimicroprocesador. El coste elevado del conmutador se puede evitar utilizando un conmutador con un número restringido de permutaciones posibles.

* *

Comparación de 3 organizaciones Hardware multiprocesador.

Multiprocesadores con Bus de tiempo compartido: Coste del hardware del sistema mas bajo y menos complejo. Muy fácil de modificar físicamente la configuración del sistema hardware añadiendo o eliminando unidades funcionales. Capacidad del sistema total limitada por la razón de transferencia del bus. La expansión del sistema añadiendo unidades funcionales puede degradar el rendimiento total del sistema. La eficiencia alcanzable del sistema es la mas baja de los 3 sistemas básicos de interconexión. Esta organización es normalmente apropiada solo para los sistemas más pequeños.

Microprocesadores con Conmutador de barras cruzadas: Es el sistema de conexión más complejo. Tiene capacidad para alcanzar la razón más alta de transferencia total. Las unidades funcionales son las más simples y más baratas puesto que el control y la lógica de conmutación se encuentran en el conmutador. Puesto que se requiere una matriz de conmutación básica para ensamblar las unidades funcionales en una configuración de trabajo esta organización es normalmente de coste-efectivo solo para multiprocesadores. La expansión de los sistemas normalmente mejora el rendimiento del sistema. Existe la más alta capacidad para eficiencia del sistema, así como para la expansión del sistema sin reprogramación del sistema operativo. Teóricamente, la expansión del sistema esta limitada solo por la medida de la matriz del conmutador, que puede con frecuencia expandirse modularmente dentro del diseño modular u otras limitaciones técnicas. La fiabilidad del conmutador, y por tanto la del sistema, se puede mejorar por segmentación y/o redundancia dentro del conmutador.

Multiprocesadores con Memoria Multipuerto:

Requiere las unidades de memorias más caras puestos que la mayor parte de la circuitería de control y conmutación esta incluida en la unidad de memoria. Las características de las unidades funcionales permiten a un mono procesador de coste bajo ser ensamblado desde ella. Existe capacidad para una razón de transferencia total muy alta en el sistema completo. El tamaño y opciones de configuración posibles están determinadas por el número y tipo de los puertos de memoria disponibles. Se requiere un gran número de cables y conectores.

1.9. TIPOS DE SISTEMAS OPERATIVOS MULTIPROCESADOR

Existe poca diferencia conceptual entre las necesidades de un sistema operativo de un multiprocesador y las de un gran computador que utilice multiprogramación. Sin embargo, existe una complejidad adicional en el sistema operativo cuando múltiples procesadores han de trabajar simultáneamente. La complejidad también se origina por la necesidad de que el sistema operativo tenga que soportar múltiples tareas asíncronas que se ejecutan concurrentemente. Entre las capacidades funcionales que se necesitan frecuentemente en un sistema operativo para un computador multiprogramado se encuentran los esquemas de asignación y administración de recursos, la protección de memoria y conjuntos de datos, la prevención de bloqueos en el sistema y la terminación anormal de procesos o el manejo de excepciones. Además de estas capacidades, un sistema multiprocesador también necesita técnicas para la utilización eficiente de recursos y por consiguiente, debe proporcionar esquemas de entrada-salida y equilibrado de carga del procesador. Una de las principales razones para utilizar un sistema multiprocesador estriba en proporcionar una fiabilidad efectiva y una degradación ordenada (graceful degradación) cuando ocurre un fallo. Por tanto, el sistema operativo también debe ser capaz de proporcionar esquemas de reconfiguración del sistema para soportar degradación ordenada. Un sistema operativo que se comporte pobremente negará otras ventajas que están asociadas al multiprocesamiento.

Por tanto, es de la mayor importancia que el sistema operativo para un multiprocesador se diseñe eficientemente. La influencia de un gran número de procesadores sobre el diseño de un sistema operativo es todavía un problema de investigación. La modularidad de los procesadores y la estructura de la interconexión entre ellos afectan al desarrollo del sistema. Además, los esquemas de comunicación, los mecanismos de sincronización y las políticas de ubicación y asignación dominan la eficiencia del sistema operativo. Existen básicamente tres organizaciones que se han utilizado en el diseño de sistemas operativos para multiprocesadores, a saber: configuración maestrosubordinado, supervisor separado para cada procesador y control supervisor flotante. En un modo maestro-subordinado, un procesador, denominado el maestro, mantiene el estado de todos los procesadores del sistema y distribuye el trabajo entre todos los procesadores subordinados. Puesto que la rutina supervisora siempre se ejecuta en el mismo procesador, una petición del subordinado mediante un desvío (trap) o una instrucción de llamada al supervisor para un servicio ejecutivo, debe ser enviada al maestro, que reconoce la petición y realiza el servicio apropiado. Existen otras características del sistema operativo maestro-subordinado. Los conflictos de tablas y los problemas de bloqueo (lock-out) en las tablas de control del sistema se simplifican al obligar a que el ejecutivo corra sobre un único procesador. Sin embargo, este modo del sistema operativo provoca que todo el sistema sea muy susceptible a fallos catastróficos que requieren la intervención del operador para arrancar el procesador maestro cuando ocurre un error irrecuperable. Además de la inflexibilidad a nivel del sistema completo, la utilización del procesador subordinado puede llegar a ser apreciablemente baja si el maestro no puede distribuir procesos lo suficientemente rápido para mantener ocupados a los subordinados. El modo maestro-subordinado es más efectivo para aplicaciones especiales donde la carga de trabajo está bien definida o para sistemas asimétricos en los que los subordinados tienen menos capacidad que el procesador maestro. Este es el modo a veces utilizado si existen pocos procesadores involucrados. Cuando hay un sistema supervisor separado [núcleo (kernel) el sistemas maestro-subordinado tiene un sistema distinto con respecto a las características de un sistema operativo. Se trata de algo similar al pensar en las redes de computadores, donde cada procesador contiene una copia de un núcleo básico. Al compartir los recursos ocurre a un nivel más alto, por ejemplo, a través de una estructura compartida de archivos. Cada procesador sirve sus propias necesidades. Sin embargo, ya que existen efectos entre los

procesadores, es necesario que parte del código supervisor sea reentrante o duplicado para proporcionar copias separadas a cada procesador. Esto crea problemas de acceso a las tablas. Desafortunadamente, la copia del núcleo en los procesadores podría necesitar mucha memoria que pudiera quedar desutilizada, especialmente cuando se compara con la utilización de las estructuras de datos compartidas. En este sistema no se pueden evitar los problemas de acceso a las tablas y los atrasos de bloqueo de las mismas. Es importante controlar estos accesos de tal manera que quede protegida la integridad del sistema. Además, proporciona una mejoría verdadera y hace el uso más eficiente de los recursos disponibles. No obstante, la mayor parte de los sistemas operativos no son ejemplos propios de alguna de las tres clases que acabamos de decírselos. La única generalización posible es que el primer sistema que se produce es normalmente de tipo maestro-subordinado y el último pretende ser el control supervisor flotante. En la tabla siguiente resumimos las principales características, ventajas y problemas de los tres tipos de sistemas operativos para multiprocesadores.

* * Configuraciones de sistemas operativos para multiprocesadores.

Sistemas operativos en maestro-subordinado:

1. La rutina ejecutiva siempre se ejecuta en el mismo procesador. Si el subordinado necesita servicio que deba proporcionar el supervisor, debe pedido y esperar hasta que el programa actual sobre el procesador maestro sea interrumpido y que entre en acción el supervisor. El supervisor y las rutinas que usa no tienen que ser entrantes, ya que hay solamente un procesador que las utiliza. 2. Tener un único procesador ejecutando el supervisor simplifica los problemas de conflicto y bloqueo en el control de tablas. El sistema completo es comparativamente inflexible. Este tipo de sistema necesita comparativamente software y hardware simples.

3. El sistema completo está sujeto a fallos catastróficos que requieren la intervención del operador para reinicializarlo cuando el procesador diseñado como maestro tiene un fallo o un error irrecuperable. 4. El tiempo de desocupación del sistema subordinado puede aumentar y llegar a ser bastante apreciable si el maestro no puede ejecutar las rutinas de distribución (dispatching) con la velocidad suficiente para mantener ocupado(s) a el(los) subordinados(s). 5. Este tipo de sistema operativo es mas efectivo para aplicaciones especiales donde la carga de trabajo está bien definida o para sistemas asimétricos en los que los subordinados tienen menos capacidad que el procesador maestro.

Supervisor separado por cada procesador: 1. Cada procesador se sirve sus propias necesidades. En efecto, cada procesador (supervisor) tiene su propio conjunto de equipos de E/S, archivos, etc. 2. Es necesario que parte del código supervisor sea reentrante o duplicado para proporcionar copias separadas a cada procesador. 3. Cada procesador (realmente cada supervisor) tiene su propio conjunto de tablas privadas, aun que algunas tablas deben ser comunes para el sistema entero, lo que crea problemas de control de acceso a las tablas. 4. El sistema operativo de supervisor separado es tan sensible como el maestro-subordinado; sin embargo. La reinicialización de un procesador individual que ha fallado será probablemente bastante difícil. 5. Debido al punto anterior, la reconfiguración de la E/S normalmente requiere intervención manual y posiblemente conmutación manual.

Sistema Operativo de supervisor flotante 1. El “maestro” flota de un procesador a otro, aunque varios procesadores pueden calar ejecutando rutinas de servicio del supervisor al mismo tiempo. 2. Este tipo de sistema puede lograr mejor balance de carga sobre todo tipo de recursos. 3. Los conflictos en las peticiones de servicios se resuelven por prioridades que pueden ser estáticas o dinámicas.

4. La mayor paree del código supervisor debe ser reentrante, ya que varios procesadores pueden ejecutar la misma rutina de servicio al mismo tiempo. 5. Pueden ocurrir conflictos de acceso a las tablas y retardos de bloqueo, pero no hay forma de evitar esto con supervisores múltiples; el punto importante es que se deben controlar de tal manera que la integridad del sistema quede protegida.

1.10. REQUISITOS DE SOFTWARE PARA MULTIPROCESADORES

Una de las preguntas básicas que hay que discutir es: ¿en que se diferencian el software de los monoprocesadores de los multiprocesadores? Existen básicamente dos diferencias fundamentales. Estas diferencias justifican que tanto el hardware como el software de tales sistemas proporcionen facilidades diferentes tanto a un monoprocesador multiprogramado y a procesadores múltiples. Un monoprocesador multiprogramado puede simular mediante técnicas de múltiples “procesadores virtuales”; sin embargo, los procesadores múltiples aumentan normalmente la cantidad de software de administración que se debe dar.

1.11. REQUISITOS DE LOS SISTEMAS OPERATIVOS

Un sistema operativo multiprocesador gestiona los recursos disponibles y acrecienta la funcionalidad hardware para formar una abstracción que facilite la ejecución de programas y la interacción con los usuarios. Los tres tipos básicos de recursos que necesitan ser gestionados son: · Procesadores · Memoria · Dispositivos de E/S

1.11.1. Planificación De Procesadores

La planificación de procesadores es crucial para el uso efectivo de los multiprocesadores. Las principales tareas de un planificador multiprocesador son: · Asignar los procesadores a las aplicaciones de manera consistente con los objetivos del diseño del sistema. · Asegurar el uso eficiente de los procesadores asignados a una aplicación. Las dos facetas principales del soporte de SO para multiprocesamiento son: · Mecanismos de sincorinización flexibles y eficientes entre procesadores y entre procesos. · Creación y gestión eficiente de un gran número de hebras de actividad, tales como procesos o hebras.

1.11.2. Gestión de Memoria

La Gestión de Memoria en multiprocesadores es altamente dependiente de la arquitectura y del esquema de interconexión subyacentes. La memoria en sistemas débilmente acoplados se gestiona generalmente de forma independiente, procesador a procesador. En sistemas de memoria compartida, el sistema operativo debería proporcionar un modelo flexible de memoria que facilite al acceso seguro y eficiente a estructuras de datos compartidas y a variables de sincronización. Idealmente un sistema operativo multiprocesador debería proporcionar un modelo unificado de la memoria compartida, independiente del hardware, para facilitar el transporte de las aplicaciones entre diferentes entornos multiprocesadores. La memoria compartida puede ser simulada en sistemas débilmente acoplados por medio de un mecanismo de paso de mensajes. Y a la inversa, el paso de mensajes puede ser eficientemente implementando en sistemas fuertemente acoplados apoyándose en la memoria físicamente compartida. Tal modelo unificado de memoria, formado por mensajes y memoria compartida, proporciona un modelo flexible y un conjunto de herramientas para los programadores de aplicación.

1.11.3. Gestión de Dispositivos

La Gestión de Dispositivos ha recibido poca atención en los sistemas multiprocesador hasta la fecha. En parte se debe a que inicialmente a la atención se ha centrado en la ganancia de velocidad para aplicaciones intensivas en cálculo que tienden a estar ejecutándose durante extensos periodos de tiempo y no generan demasiada E/S tras la carga inicial. Sin embargo, conforme los multiprocesadores se apliquen a aplicaciones más equilibradas de propósito general, cabe esperar que sus necesidades de E/S aumenten en proporción con la productividad y la ganancia de velocidad conseguida. Los trabajos sobre arrays de disco (Katz et al., 1989) abordan algunos de estos problemas, pero será necesario investigar muchas otras nuevas técnicas innovadoras para obtener un rendimiento significativamente creciente utilizando dispositivos de E/S cuyas velocidades individuales permanecen esencialmente inalteradas. Es razonable esperar que la aplicación de técnicas de multiprocesamiento a la E/S y hacerlos funcionar en paralelo, produzca buenos resultados. En general los objetivos básicos de un sistema operativo consisten en proporcionar al programador una interfaz (entorno) con la máquina, manejo de recursos, mecanismos para implementar políticas (definibles por el usuario) y facilitar el afuste de las aplicaciones con la máquina. También debe ayudar a conseguir fiabilidad. Pero estos y otros atributos deseables suponen un coste que puede ser inaceptable. Se pueden establecer unas directrices, para compaginar el rendimiento y los atributos deseables. También se deberá determinar el grado de transparencia de la máquina detallada que se deberá poner a disposición del programador. Hay diferentes niveles de interacción en la especificación de un sistema operativos para multiprocesamiento. Los procesos supervisores asíncronos comparten la especificación de la administración del espacio de direcciones, administración de procesos y niveles de sincronización. Los sistemas operativos eficientes se diseñan para que tengan una estructura modular y una organización jerárquica. Las funciones clásicas de un sistema operativo incluyen la creación de objetos tales como procesos sus dominios, que incluye los segmentos de memoria. Los procesos de comunicación deben tener lugar a través de variables compartidas o globales. Los procesos cooperantes deben se deben comunicar para sincronizar o limitar su concurrencia.

En sistemas con múltiples procesos concurrentes, la presencia de recursos tales como unidades de registro periféricas y unidades de cinta que no se deben utilizar simultáneamente por varios procesos introduce la necesidad de acceso exclusivo a estos dispositivos. La comparticion de los múltiples procesadores se puede conseguir colocando los diferentes procesos juntos en memoria compartida y proporcionando un mecanismo para conmutar rápidamente la atención de un procesador de proceso a otro. Esta operación se denomina a menudo Conmutación de contexto. La comparticion de los procesos introduce tres problemas subordinados: · La protección de los recursos de un proceso contra daños intencionados o accidentales por parte de otros procesos. · La provisión de comunicación entre procesos y entre procesos de usuario y procesos del supervisor. La asignación de recursos entre procesos para que se pueda siempre satisfacer la demanda de recursos.