Unidad 1: Conceptos básicos

Anuncio
Programación
Concurrente y Paralela
Unidad 1 Introducción
Contenido
1.1 Concepto de Concurrencia
1.2 Exclusión Mutua y Sincronización
1.3 Corrección en Sistemas Concurrentes
1.4 Consideraciones sobre el Hardware
1.5 Sistemas Distribuidos
1.6 Sistemas de Tiempo Real
1.7 Procesamiento Paralelo
Concepto de concurrencia
 La concurrencia surge ante la necesidad de
plantear soluciones con el máximo rendimiento.
 Existen varias aplicaciones computacionales que
requieren una gran velocidad de cálculo:
 visualización
 bases de datos distribuidas
 simulaciones
 predicciones científicas.
 Dentro de las
tenemos:
áreas afines de la concurrencia
 sistemas distribuidos
 sistemas en tiempo real
Concepto de concurrencia
 Programación concurrente tiene sus raíces en
los sistemas operativos y en la programación
de sistemas (años 60’s).
 Sistemas operativos fueron organizados con
una colección de procesos ejecutándose
concurrentemente (“al mismo
tiempo” ),
algunos se ejecutaban en el procesador
principal y otros en los controladores llamados
canales.
 La administración de estos sistemas se hacía a
bajo nivel, en 1972 apareció el lenguaje Pascal
concurrente, era el primer lenguaje de alto
nivel para este objetivo.
Concepto de concurrencia
 Acontecimientos
que
programación concurrente:
impulsaron
la
 El concepto de hilo hizo que los programas puedan
ejecutarse con mayor velocidad comparados con los
procesos utilizados anteriormente.
 Los lenguajes orientados objetos como Java que
daban mejor soporte a la programación con la
inclusión de primitivas.
 La aparición de Internet dadas las aplicaciones como
el navegador, el chat están programados mediante
técnicas de concurrencia
Concepto de concurrencia
 Programa secuencial
 Programa concurrente
 Se
considera
un
programa
imperativo,
dado
que
las
instrucciones
son
ejecutadas
una
tras
otra.
 Existen
varios
programas
que
se
ejecutan
secuencialmente,
es
decir se encuentran
trabajando en paralelo.
 En
este
caso
las
instrucciones
pertenecen a un solo
proceso.
 Los
procesos
comparten el tiempo
de ejecución de un
único
procesador
disponible dada una
técnica
de
planificación.
 Se considera como un
simple hilo de ejecución
Concepto de concurrencia
 Se define como el conjunto de anotaciones y técnicas
utilizadas para describir mediante programas el
paralelismo potencial de los problemas, así como para
resolver los problemas de comunicación y sincronización
que se presentan cuando varios procesos que se
reportan concurrentemente comparten recursos.
 Una propiedad básica de este tipo de programación es el
no determinismo, se desconoce ante un instante de
tiempo que va ocurrir en el siguiente instante:
 En el caso de un único procesador se desconoce si después
la ejecución de una instrucción específica habrá alguna
interrupción para brindar el procesador a otro proceso.
 En el caso del sistema multiprocesador las velocidades de
los procesadores no están sincronizadas, por lo que se
desconoce a priori cuál procesador va ser el primero en
ejecutar su siguiente instrucción.
Corrección en sistemas
concurrentes
 Por tanto es necesario disponer de un modelo
abstracto que permita verificar y corregir los
sistemas concurrentes.
 Cada problema concurrente presenta un tipo
distinto de paralelismo, la implementación
depende de la arquitectura.
 Si se requiere trabajar en un ambiente
independiente de la arquitectura se debe
plantear un modelo para verificar que sea
correcto independientemente del hardware en
el que se ejecute.
Exclusión mutua
 La exclusión mutua es el mecanismo por medio del cual
se asegura que los procesos concurrentes no accedan a
un mismo recurso al mismo tiempo, dado que eso
puede causar inconsistencia en la información que se
procesa.
 Para evitar errores se puede identificar regiones en
donde los procesos tienen que acceder a variables
compartidas por lo que se requiere el concepto de
región crítica.
 Región crítica es la zona de código de un proceso
concurrente donde se utiliza un recurso compartido.
 De tal forma que deben determinarse los mecanismos
de bloqueo para garantizar que cuando salga uno de
sus procesos en ese momento participe otro en el
acceso a la región critica.
Sincronización
 Existen tres tipos de procesos:
 Procesos independientes son aquellos que no se
comunican entre sí y por tanto no requieren ponerse de
acuerdo ( sincronización).
 Procesos cooperativos son aquellos que colaboran en la
realización de un trabajo, y por tanto es requisito que se
comuniquen entre sí y sincronicen sus actividades.
 Procesos en competencia son aquellos que comparten un
número finito R de recursos del sistema por ejemplo
periféricos, memoria, capacidades de procesado por tanto
deben competir para tener el uso de los recursos del
sistema implica que deben comunicarse para sincronizase
aunque incluso sus labores sean independientes.
 La sincronización es la transmisión y recepción de señales
que tiene por objeto llevar a cabo el trabajo de un grupo
de procesos cooperativos o en competencia.
Ejemplo
 Supongamos que en un entorno LINUX se ejecuta la
instrucción
cat tema1 tema2 tema3 | wc -l
 Esta instrucción va a provocar que el intérprete de
comandos cree dos procesos concurrentes, el
primero ejecutará el programa cat, que concatenará
el contenido de los archivos de texto tema1, tema2
y tema3. El segundo ejecutará el programa wc, que
contará el número de líneas de la salida producida
por cat. Estos dos procesos cooperan, y será preciso
algún tipo de sincronización entre ellos,
concretamente hasta que cat no produzca alguna
salida wc debería bloquearse.
Consideraciones sobre el
hardware
Se tienen dos esquemas de
programación:
Programación asíncrona que utiliza los
multiprocesadores o sistemas distribuidos.
Programación síncrona donde se utilizan
vectores de procesadores.
Clasificación de Flynn (flujo de instrucciones
vs número de datos que utilizan)
 SISD: ejecutan una instrucción a la vez y utilizan un dato a la
vez
 SIMD: ejecuta una instrucción a la vez pero se encuentra
procesando más de un dato (se utilizan con paralelismo de
grano fino).
 MISD: ejecuta varias instrucciones a la vez con los mismos
datos.
 MIMD: tienen más de un procesador y cada uno ejecuta un
programa diferente con múltiples flujos de datos. Cada
procesador tiene acceso a una memoria global que reduce el
tiempo de comunicación (se utilizan para grano medio y
grano largo), se clasifican:
 Memoria compartida son multiprocesadores
 Memoria distribuida son multicomputadoras, clusters o grids.
Sistemas Distribuidos
Sistemas cuyos componentes hardware
y software, que están en computadoras
conectados en red, se comunican y
coordinan sus acciones mediante el
paso de mensajes, para el logro de un
objetivo.
Se establece la comunicación mediante
un protocolo prefijado por un esquema
cliente-servidor.
Sistemas Distribuidos
 Características:
 Concurrencia.- Esta característica de los sistemas
distribuidos permite que los recursos disponibles en la
red puedan ser utilizados simultáneamente por los
usuarios y/o agentes que interactúan en la red.
 Carencia de reloj global.- Las coordinaciones para la
transferencia de mensajes entre los diferentes
componentes para la realización de una tarea, no tienen
una temporización general, esta más bien distribuida a
los componentes.
 Fallos independientes de los componentes.- Cada
componente
del
sistema
puede
fallar
independientemente, con lo cual los demás pueden
continuar ejecutando sus acciones. Esto permite el logro
de las tareas con mayor efectividad, pues el sistema en
su conjunto continua trabajando.
Sistemas de Tiempo Real
Es un sistema que interacciona con su
entorno físico y responde a los estímulos
del entorno dentro de un plazo de
tiempo determinado.
No basta con que las acciones del
sistema sean correctas, sino que,
además, tienen que ejecutarse dentro de
un intervalo de tiempo determinado
Procesamiento Paralelo
El objetivo del paralelismo es conseguir
un programa inicialmente secuencial en
menos tiempo utilizando para ello varios
procesadores.
Esto se alcanza cuando a partir de un
problema grande se realiza una división
en subproblemas más pequeños (técnica
divide y vencerás) donde cada uno de
estos
son
repartidos
entre
los
procesadores disponibles.
Procesamiento Paralelo
 Para paralelizar resulta
necesario plantear una
estrategia adecuada de
diseño con el objetivo
de
aumentar
la
eficiencia del programa,
cabe mencionar que en
ocasiones:
 No es posible paralelizar
todo el programa
 El reparto de elementos del
programa
entre
los
procesadores no se hace de
forma equitativa.
Descargar