domingo, 19 de julio de 2009

Sistema Multiprocesador

UNIVERSIDAD DE OCCIDENTE
CAMPUS CULIACAN


Titular:
Castaños Ibarra Armando
Materia:
Arquitectura De Computadoras
Trabajo:
Sistema Multiprocesador

Alumno:
Armienta Lerma Christopher Alejandro


Matricula:
0640493

Grupo:
E-2
---------------------------------------------------

INTRODUCCION


MULTIPROCESADOR




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 uniprocesador, dejando la opción obvia de colocar muchos procesadores para realizar cálculos cooperativamente.

Como toda nueva arquitectura, las máquinas paralelas poseen características, y plantean ventajas y desventajas, que obligan a considerar cuidadosamente su utilización. También, dentro del mundo de las máquinas paralelas, existen dos enfoques con distintas características: la arquitectura SMP (Symmetrical Multiprocessing, multiproceso simétrico) y la arquitectura MPP (Massively Parallel Processing, procesamiento masivamente paralelo).


I. SISTEMA MULTIPROCESADOR


¿Qué es un sistema multiprocesador?

En la actualidad se puede considerar que todas las computadoras modernas son de hecho máquinas con múltiples procesadores. De estos, los más comunes y útiles son los procesadores de los dispositivos de almacenamiento, dispositivos multimedia y de video/sonido, así como periféricos como el teclado y aparatos USB. Todos ellos son capaces de llevar a cabo transferencias de datos entre sí o entre ellos y la memoria RAM sin intervención alguna del procesador central, lo cual resulta en capacidad de procesamiento rápido mejorada.

Pero cuando se habla de múltiples procesadores es más común el estarse refiriendo a una máquina que posea más de un procesador central. A estas computadoras se les llama Multi-core.

Se trata de una verdadera implementación de multitareas en hardware. Cada procesador puede correr al menos un programa distinto al mismo tiempo, ya que los registros, cachés y espacio de procesamiento en general están separados. Idealmente debería existir un procesador físico para cada programa corriendo en un sistema. Si eso fuera posible, la ejecución de los programas sería increíblemente veloz y no existiría la necesidad vital de cambiar entre contextos de los diferentes programas en un mismo procesador.

Todas estas computadoras son realmente sistemas distribuidos que delegan funciones específicas a distintas partes, tanto de software como principalmente de hardware. Todos los componentes de hardware pueden acceder a la memoria RAM al mismo tiempo, por lo que un sistema operativo que corre en una de estas máquinas debe controlar en software que solamente un procesador y un programa acceda una variable o un búfer de datos al mismo tiempo, para asegurar que los datos del sistema sean consistentes en todo momento.

Incluso las computadoras con un solo procesador requieren ser tratadas en mayor o menor medida como máquinas multiprocesadores, para poder manejar casi serial mente todos los dispositivos y recursos de que dispone.

I.I MULTIPROCESO



Es tradicionalmente conocido como el uso de múltiples procesos concurrentes en un sistema en lugar de un único proceso en un instante determinado. Como la multitarea que permite a múltiples procesos compartir una única CPU, múltiples CPUs pueden ser utilizados para ejecutar múltiples hilos dentro de un único proceso.




El multiproceso para tareas generales es, a menudo, bastante difícil de conseguir debido a que puede haber varios programas manejando datos internos (conocido como estado o contexto) a la vez. Los programas típicamente se escriben asumiendo que sus datos son incorruptibles. Sin embargo, si otra copia del programa se ejecuta en otro procesador, las dos copias pueden interferir entre sí intentando ambas leer o escribir su estado al mismo tiempo. Para evitar este problema se usa una variedad de técnicas de programación incluyendo semáforos y otras comprobaciones y bloqueos que permiten a una sola copia del programa cambiar de forma exclusiva ciertos valores.


I.II MULTITAREA


Es la capacidad de un sistema operativo para ejecutar varios procesos al mismo tiempo corriendo sobre un procesador o sobre varios. Quienes hayan experimentado con sistemas MS-DOS durante la década del 80 recordarán su incapacidad para realizar este tipo de actividades, algo que fue superado con los primeros Windows de Microsoft, aunque la multitarea era común en otros sistemas operativos muchos años antes, tal es el caso de Unix y derivados.


Las multitareas se dividen en nulas, cooperativas, preferentes y reales. En el caso de las nulas, estamos hablando de un sistema operativo que, a pesar de carecer de esta característica, puede imitar del alguna forma el comportamiento en espacio de usuario o utilizando algunos trucos. Tal como mencionamos MS-DOS es un ejemplo típico en este sentido.

En el caso de las multitareas de tipo cooperativo, los procesos que corren en el espacio de usuario van cediendo el procesador al sistema operativo en intervalos regulares, siendo un esquema complicado y un tanto arcaico porque si uno de los procesos quedaría congelado sin ceder el procesador al sistema, todo el sistema operativo quedaría congelado también. Encontraremos ejemplos de multitareas cooperativas en los sistemas Microsoft Windows desde su inicio hasta la versión 95.

Las multitareas de tipo preferente se comportan de otra manera: en este caso es el sistema operativo mismo el que administra el procesador o los procesadores, mientras los procesos están esperando ejecutarse, repartiendo para cada uno un tiempo de utilización. Siendo el resultado final prácticamente igual al que se obtendría si estuviesen realmente corriendo al mismo tiempo, sin embargo cada proceso utiliza el procesador durante períodos cortos de tiempo. Como ejemplos podemos citar los sistemas de tipo Unix: GNU/Linux, FreeBSD, VMS, AmigaOS, y también Windows NT.

Si el hardware posee más de un procesador, entonces puede existir multitarea de tipo real, con cada proceso corriendo al mismo tiempo en cada CPU.


I.III MULTIHEBRA


Podemos definir la programación multihebra o multihilo como un estilo de ejecución en el que se conmuta entre distintas partes del código de un mismo programa durante la ejecución.

A cada una de estas partes individuales y atómicas (no divisibles) se les da el nombre de Threads. Los threads-traducidos como hilos, hebras o contextos de ejecución- son espacios de código que la JVM ejecutará de forma simultánea en una maquina multiprocesador y de forma conmutada en maquina de un solo procesador, este es, la ejecución de los threads se realizará asignando un determinado quantum o espacio de tiempo a cada uno de los threads.


La motivación inicial que dio lugar a este tipo de programación es la solución de problemas que conllevan la necesidad de estar ejecutando simultáneamente o pseudo-simultaneamente dos tareas al mismo tiempo por el mismo programa, como por ejemplo en el caso de un sistema de control climático de invernaderos que periódicamente ha de consultar el estado de una serie de sensores repartidos por el complejo.

Una primera aproximación a este problema podría ser el realizar un bucle continuo que consultara dentro del mismo proceso el estado de los sensores de forma secuencial, esto es uno tras otro, pero si se trata de sistemas críticos en los que los fallos no se pueden tolerar o bien el tiempo de respuesta en esencial podría darse el caso de que se activara un sensor justo después de que el bucle lo hubiera comprobado con lo que ese sensor tendría que esperar a que se comprobaran el resto para ser atendido por el programa, con el consiguiente retraso de la respuesta.

Otra posibilidad es la ejecución simultánea de múltiples procesos, cada uno de los cuales se encargaría de controlar un sensor individualmente pero esta aproximación adolece de un fallo grave, en cualquier contexto la conmutación o cambio entre procesos resulta una tarea extremamente lenta y pesada por lo que el rendimiento del sistema se degradaría.

Es en este punto donde cobran sentido los hilos: los hilos son procesos ligeros en el sentido de que cada uno posee su propia pila y conjunto de registros del procesador pero un espacio de direccionamiento compartido, esto es una memoria que puede ser compartida por varios hilos del mismo proceso simultáneamente.

La conmutación entre hilos es tremendamente más rápida que la conmutación entre procesos por lo que la alternancia de hilos podría ser una solución mucho más eficiente en el problema del sistema de control climático del invernadero. Inicialmente tendríamos un solo proceso que se encargaría de la gestión inicial de los hilos, de crear y destruir estos hilos y de dar respuesta a las situaciones de alarma, mientras que los hilos lanzados por este proceso atenderían a cada uno de los sensores.

II. PARALELISMO Y PROCESAMIENTO DE VECTOR



I.I PROCESAMIENTO PARALELO


El procesamiento paralelo es un término que se usa para denotar un grupo de técnicas significativas que se usan para proporcionar tareas simultáneas de procesamiento de datos con el fin de aumentar la velocidad computacional de un sistema de computadoras. En lugar de procesar cada instrucción en forma secuencial como es una computadora convencional, un sistema de procesamiento paralelo puede ejecutar procesamiento concurrente de datos para conseguir un menor tiempo de ejecución. Por ejemplo, cuando se ejecuta una instrucción en la ALU, puede leerse la siguiente instrucción de la memoria.

El sistema puede tener 2 o más ALUS y ser capaz de ejecutar dos o mas instrucciones al mismo tiempo. Además, el sistema puede tener dos o más procesadores operando en forma concurrente. EL propósito del procesamiento paralelo es acelerar las posibilidades de procesamiento de la computadora y aumentar su eficiencia, esto es, la capacidad de procesamiento que puede lograrse durante un cierto intervalo de tiempo. La cantidad de circuitería aumenta con el procesamiento paralelo y, con él, también el costo del sistema. Sin embargo, los descubrimientos tecnológicos han reducido el costo de la circuitería a un punto en donde las técnicas de procesamiento paralelo son económicamente factibles.

El procesamiento paralelo puede considerarse de diversos niveles de complejidad. En el nivel más bajo, distinguimos entre operaciones seriales y paralelas mediante el tipo de registros que utilizan. Los registros de corrimiento operan en forma serial un bit a la vez, mientras que los registros con carga paralela operan con todos los bits de la palabra en forma simultánea.


I.II PROCESAMIENTO VECTORIAL


Aplicaciones de operaciones lógicas o aritméticas repetidamente sobre vectores

Vector: Conjunto de datos escalares del mismo tipo almacenados en memoria

Operaciones vectoriales: repetición de la misma operación sobre conjunto de datos

Aplicaciones: Los supercomputadores vectoriales (NEC, Fujitsu, Hitachi, Cray) se usan habitualmente para predicción meteorológica, terremotos, dinámica fluidos en general

Las operaciones vectoriales se especifican mediante:

1. código de operación que selecciona la unidad funcional o reconfigura el cauce dinámico para la operación solicitada.

2. dirección base de los operadores fuente y destino o los registros vectoriales implicados en la operación.

3. incrementos de dirección entre elementos (en la mayoría de los casos este incremento tendrá el valor 1)

4. longitud de los vectores con los que se va a operar.

Elementos de la arquitectura vectorial :

Una computadora vectorial contiene un conjunto de unidades aritméticas especiales denominadas pipelines. Estas pipelines superponen la ejecución de las diferentes partes de una operación aritmética sobre los elementos del vector, produciendo una ejecución más eficiente de la operación aritmética que se está realizando. En muchos aspectos, una pipeline es similar a una cadena de montaje de una fábrica de coches, en la que los distintos pasos de la fase de montaje de un automóvil, por ejemplo, se realizan en distintas etapas de la cadena.

Consideremos, por ejemplo, los pasos o etapas necesarias para realizar una suma en punto flotante en una máquina con hardware que emplee aritmética IEEE. Los pasos para realizar la operación s = x + y son:

1. Se comparan los exponentes de los dos números en punto flotante que se quieren sumar para encontrar cuál es el número de menor magnitud.

2. El punto decimal del número con menor magnitud se desplaza de forma que los exponentes de los dos números coincidan.

3. Se suman los dos números.

4. Se normaliza el resultado de la suma.

5. Se realizan los chequeos necesarios para comprobar si se ha producido algún tipo de excepción en punto flotante durante la suma, como un overflow.

6. Se realiza el redondeo.

III. COMPUTADORAS CON MULTIPROCESADORES


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.

III.I IBM DEEP BLUE

Deep Blue fue una computadora de IBM que jugaba al ajedrez. Su nombre se podría traducir al español como "Azul Oscuro" o "Azul Profundo".





La segunda de las traducciones es más acertada, ya que se emplea un algoritmo de inteligencia artificial de la familia Minimax. La fuerza de juego de estos programas de juego automático es mayor cuanto mayor sea la profundidad (número de movimientos futuros) hasta la que llega la exploración, y por tanto mayor el número de nodos. De este modo, el nombre Deep Blue es un juego de palabras que relaciona el azul (color corporativo de IBM) con la gran profundidad de exploración gracias a la potencia de su hardware.

Deep Blue fue la primera computadora que venció a un Campeón del Mundo vigente, Garry Kasparov, con un ritmo de juego lento. Esto ocurrió el 10 de febrero de 1996, en una memorable partida. Sin embargo, Kasparov ganó 3 y empató 2 de las siguientes partidas, derrotando a Deep Blue por 4-2. El encuentro concluyó el 17 de febrero de 1996.

Deep Blue fue mejorando y jugó de nuevo contra Kasparov en mayo de 1997, ganando el encuentro a 6 partidas por 3'5-2'5, lo que lo convirtió en la primera computadora en derrotar a un campeón del mundo vigente, en un encuentro con ritmo de juego de torneo estándar. El encuentro concluyó el 11 de mayo. El sistema saca su fuerza de juego principalmente en la fuerza bruta que calcula el sistema central. Era una potencia paralela, de 30 nodos, RS/6000, SP-based el sistema informático realzado (mejorado) con 480 VLSI con el objetivo especial de jugar al ajedrez. Su programa de juego de ajedrez fue escrito en C y corrió bajo el sistema operativo AIX. Era capaz de calcular 200 millones de posiciones por segundo, dos veces más rápido que la versión de 1996. En junio de 1997, Deep Blue era el 259 superordenador más poderoso, capaz de calcular 11.38 gigaflops, aunque toda esta potencia no estaba pensada en realidad para jugar al ajedrez.


III. II SUPER COMPUTADORA CRAY

La supercomputadora Cray XD1 combina sistemas avanzados de interconexión, administración y tecnología computacional reconfigurable que satisface de manera confiable las demandas de procesamiento de alto rendimiento. Diseñada para cumplir con los requerimientos de cómputo de alto rendimiento (HPC) en áreas que van del diseño de productos, a predicción del clima, e investigaciones científicas. La Cray XD 1 es una poderosa herramienta para científicos e ingenieros que les permite simular y analizar problemas de mayor complejidad de forma rápida.


La Cray XD 1 está basada en la arquitectura de "Conexión Directa entre Procesadores (DCP)" lo que permite interconectar muchos procesadores como uno solo, optimizando las aplicaciones que hacen uso del envío de mensajes, enlazando un bloque de procesadores al siguiente a través de interconexiones (propietarias) de alto desempeño, eliminando la contención de la memoria compartida y de los cuellos de botella en los dispositivos PCI.

La Cray XD 1 es un sistema modular cuya unidad base es el chasis. En un gabinete se pueden instalar hasta 12 chasis, integrando múltiples gabinetes es posible integrar cientos de procesadores en un único sistema.

Las características del equipo son las siguientes:

HARDWARE

216 Procesadores AMD Opteron 275, x8664, 2.2 GHzz
216 Gbytes DDR 400 registered ECC de memoria RAM Total
4 Tbytes de almacenamiento principal
1 Tbyte de registros de memoria accesibles por procesador
Interconexion tipo Rapid Array Interconnect
1.7 µs Latencia MPI entre procesadores
Rendimiento Teórico Pico 0.95TFlops

IV. CARACTERISTICAS Y CLASIFICACION DE MULTIPROCESO

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 compleji­dad 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 sis­tema operativo para un computador multiprogramado se encuentran los es­quemas 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 eficien­te de recursos y por consiguiente, debe proporcionar esquemas de entrada-sa­lida 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 degradation) cuando ocurre un fallo. Por tanto, el sistema operativo también debe ser capaz de proporcionar esque­mas 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 estruc­tura de la interconexión entre ellos afecta 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 maestro-subordinado, supervisor separado para cada procesador y control supervisor flo­tante.
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 lla­mada 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 pro­voca 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 man­tener ocupados a los subordinados.

El modo maestro-subordinado es más efec­tivo 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 pro­cesador sirve sus propias necesidades. Sin embargo, ya que existen efectos entre los procesadores, es necesario que parte del código supervisor sea reen­trante o duplicado para proporcionar copias separadas a cada procesador. Esto crea problemas de ac­ceso 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 sis­tema. 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 generaliza­ció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.


· Requisitos software para multiprocesadores
Una de las preguntas básicas que hay que discutir es: ¿en que se diferencian los 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.

V. CONCLUSION

Con el paso del tiempo los multiprocesadores han evolucionado, esta tecnologia nos facilita y nos reduce el tiempo en que realizamos nuestros trabajos en la computadora, gracias a los multiprocesos que nos permite realizar tareas multiples y por lo tanto la eficiencia y rapidez con la que realizamos las activiades son en periodos cortos de tiempo.

En la actualidad los multiprocesadores juegan un rol importante en el desempeño y eficiencia de la computadora a tal grado que se invierten miles de millones de dolares para la investigacion y desarrollo de nuevos multiprocesadores mas potentes y eficientes.

VI. BIBLIOGRAFIA

http://es.wikipedia.org/wiki/Multiproceso
http://www.mastermagazine.info/termino/6039.php
http://www.tomechangosubanana.com/tesis/escrito-1-split/node11.html
http://www.svcommunity.org/forum/os/que-es-un-sistema-multiprocesador/
http://usuarios.lycos.es/manualesjava/manuales/threads/threads.pdf
http://www.monografias.com/trabajos16/arquitectura-paralela/arquitectura-paralela.shtml
http://mx.geocities.com/c_sinuhe/sist_oper/t8.html
http://atc2.aut.uah.es/~acebron/cap3vect.pdf
http://www.monografias.com/trabajos16/arquitectura-paralela/arquitectura-paralela.shtml
http://mx.geocities.com/c_sinuhe/sist_oper/t8.html
http://es.wikipedia.org/wiki/Deep_Blue
http://www.dei.uc.edu.py/tai2002/SMP/sistemas.htm
http://es.wikipedia.org/wiki/Supercomputadora