Sistemas Paralelos

Anuncio
FACULTAD DE CIENCIAS FISICAS Y MATEMATICAS
INGENIERIA CIVIL EN COMPUTACION E INFORMATICA
SISTEMAS OPERATIVOS
Sistemas Paralelos
Non Uniform Memory Access (NUMA)
Grupo 5
Profesor: Daniel Hormazábal
Curso: Sistemas Operativos
Integrantes
Felipe Calderón
Leonardo Pérez
Fernando Valdés
INDICE
1. Resumen Ejecutivo
3
2. Historia
4
3. Características
7
3.1. ¿Qué es un multiprocesador?
3.2. Tipo de acceso a los datos (UMA – NUMA)
3.3. Sistemas Operativos en multiprocesadores
3.4. Transporte de SO monoprocesador: UNIX
3.5. Diseño de sistemas operativos para multiprocesadores
3.6. Afinidad al procesador
4. Programación Paralela
4.1 Introducción
4.2 Estructura del lenguaje
7
8
10
11
11
12
13
13
13
2
1. RESUMEN EJECUTIVO
En el presente informe detallaremos parte de la historia y evolución que han
sufrido los Sistemas Operativos en paralelo y sus principales características
que hablan de un mejor desempeño de los actuales Sistemas.
Los sistemas operativos paralelos se refieren sobre todo a manejar los
recursos de máquinas paralelas. Describiremos las tendencias principales en
Sistemas Operativos paralelos. Hablaremos de las versiones actuales del Unix
y de Windows NT donde un solo sistema operativo centralmente maneja todos
los recursos. El trabajo con la memoria en un Sistema Operativo en paralelo es
de vital importancia y por lo mismo destacaremos la utilidad de la NUMA (NonUniform Memory Access) y sus características.
3
1. HISTORIA
1955
IBM introduce los 704. El arquitecto principal es gene Amdahl; es la primera
máquina comercial con hardware floating-point, y es capaz del kFLOPS
aproximadamente 5.
1956
IBM comienza el proyecto 7030 (conocido como ESTIRAMIENTO) para
producir el superordenador para el laboratorio nacional de Los Alamos (LANL).
Su meta es producir una máquina con 100 veces el funcionamiento de
disponible en ese entonces.
El proyecto de LARC (computadora automática de la investigación de
Livermore) comienza a diseñar el superordenador para el laboratorio nacional
de Lorenzo Livermore (LLNL).
El proyecto del atlas comienza en el Reino Unido como empresa a riesgo
compartido entre la universidad de Manchester y Ferranti Ltd. El arquitecto
principal es Tom Kilburn.
1962
La CDC entrega primera CDC 1604. La máquina es similar a IBM 7090,
ofreciendo 48 palabras del pedacito y una duración de ciclo de memoria de 6
microsec.
La computadora del atlas llega a ser operacional. Es la primera máquina para
utilizar memoria virtual y la paginación; se canaliza su ejecución de la
instrucción, y contiene las unidades aritméticas fijas y floating-point separadas,
capaces del kFLOPS aproximadamente 200.
C. A. Petri describe las redes de Petri, un marco teórico para describir y
analizar las características de sistemas concurrentes.
Burroughs introduce el multiprocesador simétrico de D825 MIMD. 1 a 4 CPU
tienen acceso a 1 a 16 módulos de la memoria usando un interruptor de barra
transversal. Las CPU son similares al B5000 más último; el sistema operativo
es simétrico, con una fila de procesos preparados compartida.
1965
Los laboratorios de GE, del MIT, y de AT&T Bell comienzan el trabajo sobre
Multics. La puntería del proyecto es desarrollar un sistema en tiempo repartido
del multiprocessing de uso general de la compartir-memoria.
Edsger Dijkstra describe y nombra el problema crítico de las regiones. El
trabajo en sistemas concurrentes se dedica mucho más adelante a encontrar
maneras seguras, eficientes de manejar regiones críticas.
4
James W. Cooley y Juan W. Tukey describe el Fourier rápido transforma el
algoritmo, que es más adelante uno de los solos consumidores más grandes de
ciclos floating-point.
1966
La CDC introduce CDC 6500, conteniendo dos procesadores de la CDC 6400.
El arquitecto principal es Jim Thornton.
La división de UNIVAC de Sperry Rand Corporation entrega el primer
multiprocesador 1108. Cada uno contiene hasta 3 CPU y 2 reguladores de la
entrada-salida; su sistema operativo de EXEC 8 proporciona el interfaz para la
ejecución de programa multithread.
Michael Flynn publica un papel que describe la taxonomía arquitectónica que
lleva su nombre.
El Minsk-222 terminó por el E. V. Yevreinov en el instituto de las matemáticas,
Novosibirsk.
1968
Duane Adams de la universidad de Stanford acuña el término “flujo de datos”
mientras que describe modelos gráficos del cómputo en su tesis de Ph.D.
El grupo formó en los datos de control para estudiar las necesidades que
computaban del proceso de imagen; esto conduce a la CDC AFP y a los
diseños de Cyberplus.
La máquina celular de IBM 2938 entregó a geofísico occidental (quién
puntualmente pintura que compite con rayas en ella). Primera máquina
comercial para sostener 10 MFLOPS en 32 operaciones floating-point del
pedacito. Un procesador programable de la señal numérica, prueba muy
popular en la industria petrolera.
Edsger Dijkstra describe los semáforos, e introduce el problema de los filósofos
que cena, que se convierte en más adelante un ejemplo estándar en teoría de
la concurrencia.
1969
George Paul, M. Wayne Wilson, y el Cree de Charles comienzan el trabajo en
IBM en VECTRAN, una extensión a FORTRAN 66 con los operadores poner en
orden-valorados, funciones, e instalaciones de la entrada-salida.
La CDC produce el superordenador canalizado de la CDC 7600 como
continuación a la CDC 6600.
El trabajo comienza en Compass Inc. en un recopilador de FORTRAN que
hacía parelelismo para el ILLIAC-IV llamó IVTRAN.
Honeywell entrega el primer sistema de Multics (multiprocesador simétrico con
hasta 8 procesadores).
5
1976
El sistema del recopilador de Parafrase se desarrolla en la universidad de
Illinois bajo dirección de David Kuck. Un sucesor a un programa llamado el
analizador, Parafrase se utiliza como testbed para el desarrollo de muchas
nuevas ideas en la transformación del vectorization y del programa. Carl
Hewitt, en el MIT, inventa a agentes modela, en quienes las estructuras del
control son patrones de mensajes. Este modelo es la base para un trabajo
mucho más último sobre modelos de alto nivel de la programación paralela.
Coma flotante Systems Inc. entrega su primera 38 máquina celular del pedacito
AP-120B. La máquina publica instrucciones canalizadas múltiples cada ciclo.
La investigación de Cray entrega el primer CRAY-1 Freón-refrescado al
laboratorio del nacional de Los Alamos. Fujitsu entrega el primer procesador
del vector FACOM-230 al laboratorio aeroespacial nacional japonés (NAL). El
tándem envía sus primeras máquinas fault-tolerant directas de la desunirmemoria con 2 a 16 procesadores de encargo, autobúses duales del interprocesador, y un sistema operativo mensaje-basado. Las máquinas se utilizan
sobre todo para el tratamiento transaccional en línea. El trabajo sobre el
multiprocesador PS-2000 comienza en el instituto de los problemas del control
en Moscú (IPU) y el instituto de investigación científico de las computadoras de
control en Severodonetsk, Ucrania (NIIUVM). La tesis de Utpal Banerjee en la
universidad de Illinois formaliza el concepto de la dependencia de los datos, y
describe y pone el algoritmo del análisis en ejecución nombrado después de él.
La CDC entrega el procesador flexible, una unidad de proceso programable de
señal con una palabra de la instrucción de 48 pedacitos. Borroughs entrega el
procesador sociable de PEPE. Coma flotante Systems Inc. describe el lazo
que se envuelve, que se utiliza para programar procesadores múltiples
canalizados de la edición de la instrucción.
6
3.1 CARACTERISTICAS
¿Qué es un multiprocesador?
A partir de la definición más sencilla -múltiples procesadores en una misma
máquina, empezaremos con una clasificación tradicional de los sistemas
paralelos, para ir determinando el sistema que ha sido objeto de nuestro
estudio.
Se han hecho diferentes clasificaciones de sistemas multiprocesadores
basándose en las características de sus diferentes componentes y la manera
de acceder a ellos:
 Homogéneos versus heterogéneos, según esté compuesto por
procesadores todos iguales o diferentes. En un sistema homogéneo,
todos los procesadores son de igual potencia e intercambiables.
 Fuertemente acoplados versus débilmente acoplados. En el primer caso,
cada procesador tiene memoria privada y recursos de entrada/salida
propios, y puede comunicar con otros procesadores por intercambio de
mensajes. En los procesadores fuertemente acoplados, cada procesador
tiene acceso directo a toda la memoria y a los dispositivos de
entrada/salida. El reloj también es común.
 Interconexión por bus versus interconexión por red, según el tipo de
interconexión para la comunicación con memoria: los sistemas basados
en el bus y los basados en la conmutación, también conocidos como
sistemas multi-etapa. El sistema de bus común, o bus de tiempo
compartido, es el sistema de interconexión más sencillo, aunque tiene
un grave problema de degradación en el rendimiento, debido a la
contención del bus y la memoria. Una solución a este problema es la
incorporación de una memoria cache entre el procesador y la memoria
principal que reduzca el tráfico del bus y los conflictos.
 Memoria compartida versus paso de mensajes, según el modelo
hardware subyacente. Programas que trabajen con memoria compartida
pueden ser ejecutados en un hardware de memoria compartida o de
paso de mensajes. El problema es cuán eficiente puede ser una
implementación en cada caso y cual será el rendimiento obtenido.
 Master/slave versus simétricos, según las funciones que lleguen a un
determinado procesador (por ejemplo, repartición de las interrupciones).
Aunque el software de sistema considere por igual a todos los
procesadores en cuanto a recurso que ofrece a las aplicaciones, es
normal encontrar sistemas con uno de sus procesadores dedicado a la
atención de interrupciones.
7
3.2 Acceso a los datos, nos encontramos con:
 Multiprocesadores de memoria compartida, donde cada módulo de
memoria es accesible desde todo procesador y compartido por todo
ellos. De acuerdo al coste del acceso a la memoria, pueden clasificarse
a su vez en:
o Multiprocesadores con Acceso Uniforme a Memoria (UMA), en los
que el tiempo de acceso a cualquier módulo de memoria es el
mismo para todos los procesadores del sistema. Un ejemplo son
las arquitecturas basadas en un bus común.
o Multiprocesadores con Acceso no Uniforme a Memoria (NUMA),
en los que el tiempo de acceso puede variar dependiendo del
módulo de memoria y del procesador que accede a ella.
Generalmente,
han
entrado
en
esta
categoría
los
multiprocesadores con memoria local asociada a cada
procesador: el acceso a la memoria local era más rápido que el
acceso a cualquier otro módulo. Ejemplos de estas arquitecturas
son el BBN Butterfly y el actual supercomputador Kendall Square
Research (KSR).
Las arquitecturas UMA son las más comunes para multiprocesadores en la
actualidad, debido en parte a que la mayoría de máquinas se emplea
únicamente para aumentar el throughput de la multiprogramación, en sistemas
multiusuario de tiempo compartido, más que para la ejecución de programas
paralelos de mayor escala.
Es interesante observar, sin embargo, que la tecnología actual está
implementando cada vez más las máquinas hacia el tipo de acceso NUMA.
En parte, debido a la distancia a la que se ha llegado entre la velocidad de los
componentes de cálculo, por un lado, y la velocidad de acceso a memoria y de
los componentes de comunicación, por otro. También por el incremento en el
uso de memorias locales y caches para reducir la contención en el acceso al
bus -o buses- compartidos.
Debido a que las arquitecturas NUMA permiten un orden más elevado en el
número de procesadores del sistema -de 128 a 512- y una mayor escalabilidad,
muchos sistemas experimentales son máquinas NUMA y su número y
popularidad se va incrementando en la actualidad.
Las máquinas NORMA, por su parte, son de un acoplamiento más débil que las
NUMA, ya que no tienen soporte hardware para acceder de manera directa a
módulos remotos de memoria.
Sin embargo, avances recientes en la tecnología de los supercomputadores
van acortando la diferencia de relación entre los accesos locales y los remotos
en arquitecturas NORMA (1:500 de un acceso local frente a uno remoto) que
las aproximan a los tiempos de acceso de máquinas NUMA, como la KSR
(1:100). Se intuye que en el futuro tanto las máquinas NUMA como las NORMA
van a requerir de un soporte similar por parte del sistema operativo y de unas
8
similares herramientas en el soporte de la programación para lograr un
rendimiento eficiente.
Vamos a centrarnos más en el primer aspecto del sistema operativo: como
gestor de recursos que proporciona la posibilidad de paralelismo a los usuarios.
A partir de los primeros sistemas operativos multiprocesadores, pensados
como una extensión de los monoprocesadores, surgen los SO propiamente
para arquitecturas multiprocesadores.
Es
un
tipo
de
arquitectura
de
procesamiento paralelo
en
que
cada
procesador tiene su
propia memoria local
pero puede también
tener acceso a la
memoria
de
otros
procesadores. Está es
llamada no-uniforme porque un procesador puede acceder su propia memoria
local más rápido que la memoria no local (memoria que está en otro
procesador o compartida entre procesadores).
La arquitectura NUMA ofrece la "escalabilidad" de MPP y la programación
simple de SMP.
MPP o procesamiento paralelo masivo (Massively Parallel Processing) es un
tipo de arquitectura que usa muchas CPUs separadas corriendo en paralelo
para procesar un solo programa. MPP es similar a procesamiento simétrico
(SMP: Symmetric Multiprocessing), con la principal diferencia que en los
sistemas SMP todas las CPUs comparten la misma memoria, mientras que en
los sistemas MPP cada CPU tiene su memoria propia. Los sistemas MPP son
por eso más difíciles de programar porque las aplicaciones se deben dividir en
tal manera que todos los segmentos que se ejecutan se puedan comunicar
unos con otros. En cambio, MPP no tiene los problemas de cuello de botella
inherente en los sistemas SMP cuando todas las CPUs intentan acceder la
misma memoria al mismo tiempo.
SMP o multiprocesamiento simétrico (Symmetric Multiprocessing) es una
arquitectura de computadores que provee un rápido desempeño haciendo que
múltiples CPUs estén disponibles para completar procesos individuales
simultáneamente (multiprocesamiento). En forma distinta a procesamiento
asimetrico, se le puede asignar a cualquier tarea cualquier procesador ocioso, y
se pueden agregar CPUs para aumentar el desempeño y así manejar el
aumento de cargas. Una variedad de sistemas operativos especializados y
arreglos de hardware estan disponibles para dar soporte a SMP. Las
aplicaciones específicas se pueden beneficiar de SMP si el códifigo permite
hacer multithreading.
9
SMP usa un solo sistema operativo y comparte porciones de memoria común y
recursos de entrada/salida de disco. Ambos UNIX y Windows NT soportan
SMP.
3.3 Sistemas Operativos en multiprocesadores
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.
En cuanto al sistema operativo, como programa paralelo, se puede decir que
su evolución ha pasado por diferentes etapas, como vamos a ver a
continuación.
10
3.4 Transporte de SO monoprocesador: UNIX
Por sus características y su popularidad en todo el mundo informático, el
sistema operativo más transportado a arquitecturas multiprocesador ha sido
UNIX. Pero el planteamiento de base sobre el que está construido pone un
límite a la explotación del paralelismo.
Por una parte, su construcción monolítica hace costoso el trabajo de paralelizar
todas las partes del sistema operativo. Choca, además, frontalmente con la
exclusión mutua implícita original que le hace trabajar en el código de kernel
comportándose como un monitor3 y despreocupándose, muchas veces, de
garantizar la ejecución atómica de ciertas partes de código.
Por otro lado, su diseño ya parte de limitaciones importantes en la granularidad
de recursos que puede ofrecer a las aplicaciones: a partir del proceso, ni puede
dar soporte a que el código de usuario trabaje con más de un procesador, ni
puede tampoco permitirlo a nivel de servicio del propio sistema.
3.5 Diseño de sistemas operativos para multiprocesadores
En las dos últimas décadas se construyen nuevos sistemas operativos para
máquinas multiprocesador, diseñados desde cero. Se rompe la atomicidad en
la ejecución de código de sistema, hasta donde lo permita la semántica de las
operaciones. Se separan los mecanismos -soportados por el kernel- de las
políticas -gestionadas a niveles superiores-, potenciando más la versatilidad de
las arquitecturas (Hydra ).
La solución definitiva es plasmar la sencillez de UNIX en las operaciones de
sistema a través de una realización multi-hebra. Los servicios del sistema
operativo ya no se realizan como secuencias de llamadas a rutinas, sino que
pasan a ser flujos con una identidad propia que pueden moverse en paralelo
por el código de sistema, respetando pequeñas partes que se acceden en
exclusión mutua (Sprite).
Hace falta, sin embargo, subir el paralelismo al nivel de usuario. Se hace
necesaria la aparición de nuevos objetos, de nuevas abstracciones que
permitan dar paralelismo también a los programas, limitados todavía a un único
fluir secuencial: el proceso.
11
3.6 Afinidad al procesador
En entornos multiprogramados, en los que el número de procesos es bastante
superior, a veces, al número de procesadores, una utilización eficiente de la
memoria cache puede ser un factor decisivo en el rendimiento del sistema.
A la hora de asignar un proceso a un procesador, puede ser determinante el
que, siendo el procesador en el que había corrido anteriormente dicho proceso
(afinidad al procesador), se mantengan todavía en la cache los datos, o la
mayoría de los datos, necesarios para empezar a arrancar el proceso
(footprint)6.
Existen diferentes tipos de scheduling basados en la afinidad de un proceso a
un procesador. La política más sencilla es la de scheduling fijo, consistente en
ligar un proceso a un procesador.
Otra política utilizada es la de mínima intervención, que consiste en
seleccionar, dentro de los procesos ejecutables, aquel que más recientemente
se ha ejecutado en dicho procesador, con lo cual la probabilidad de que todavía
queden datos suyos en la cache, en principio es más alta que para cualquiera
del resto de procesos seleccionables.
La decisión de elegir políticas que tengan en cuenta este hecho tendrá mayor o
menor repercusión según el tipo de aplicación (que tenga un footprint más o
menos grande o que se conserven sus datos de una a otra ejecución, por
ejemplo): aunque es un factor que puede influir decisivamente en el
rendimiento del sistema, pueden darse aplicaciones en las que de una ranura
de tiempo a la siguiente se haya cambiado todo el contenido de la cache, ante
lo cual, poco puede hacerse. En general, para cargas reales, se ha
comprobado que los beneficios de la afinidad son pequeños cuando los
procesadores son compartidos entre varias aplicaciones.
12
4. Introducción
4.1 Programación Paralela
Concurrencia es la noción de que dos o más cosas pueden suceder al mismo
tiempo. Cuando realmente suceden, hablamos de paralelismo. Desde la
aplicación, el concepto de concurrencia implica diferentes flujos de control en
un programa, independientemente del número de procesadores subyacente. El
número máximo de flujos que pueden ejecutarse concurrentemente en una
aplicación diremos que es su grado de concurrencia y de alguna manera, está
identificando el máximo potencial de paralelismo que se puede conseguir de
dicha aplicación.
Los sistemas multiprocesadores que han aparecido con las nuevas
tecnologías, permiten paralelismo en la multiprogramación entre diferentes
aplicaciones. Actualmente, el desarrollo del software y el mayor conocimiento
de las aplicaciones permiten además la ejecución de una aplicación con varios
flujos y explotar la concurrencia que, de manera inherente muchas veces se
Encuentra en los programas. Aunque se trabaje sólo con un procesador, la
programación paralela mejora la concurrencia y facilita la claridad y sencillez en
la resolución de los problemas. Uno de los objetivos principales en las
aplicaciones actuales es, pues, explotar al máximo el paralelismo que le ofrece
la tecnología; en definitiva, diseñar programas paralelos.
Programar con paralelismo supone una nueva filosofía en el modo de
programar, equivalente a la innovación que introdujo el objetivo de simplicidad
en el diseño de UNIX.
4.2 Estructuras del lenguaje
Algunos lenguajes permiten crear y destruir flujos que ejecuten rutinas en
paralelo. La idea que hay detrás del diseño de los “lenguajes paralelos” es que
el programador se encargue de identificar qué trabajos pueden realizarse
concurrentemente y tome las decisiones de cómo dividir ese trabajo,
a partir de procesos o tasks . Para ello, se ve un programa como compuesto de
una parte principal y de un conjunto de subrutinas o funciones que son
llamadas para ejecutar un determinado trabajo.
Cada una de estas rutinas y funciones, en un lenguaje imperativo, consta de un
bloque de activación propio, que define su punto actual de ejecución, sus
variables locales y su pila. Si en lugar de una secuencia de ejecución, se
permiten varias, pueden definirse procesos que ejecuten las funciones y
subrutinas en paralelo, con puntos de comunicación entre ellos para recoger
los resultados.
13
BIBLIOGRAFIA
Fuentes obtenidas desde Internet:
http://www.dcc.uchile.cl/~rbaeza/cursos/proyarq/choviedo/numa_definicion.html
http://www.infor.uva.es/~bastida/Arquitecturas%20Avanzadas/Memoria.pdf
http://www.dynamics.unam.edu/DinamicaNoLineal/Proyectos/Supercomputo/Co
mputacionParalela.pdf
http://www.tesisenred.net/TESIS_UPC/AVAILABLE/TDX-0621101121305//1partei.pdf
http://dac.escet.urjc.es/docencia/LAAC/LAAC_Tema1.pdf
http://ei.cs.vt.edu/~history/Parallel.html
Libro de Sistemas Operativos:
Tannenbaum
14
15
Descargar