Está en la página 1de 49

Temas fundamentales del Curso

Conceptos básicos. Concurrencia y arquitecturas de


procesamiento. Multithreading, Procesamiento Distribuido,
Procesamiento Paralelo.

Concurrencia por memoria compartida. Procesos y sincronización.


Locks y Barreras. Semáforos. Monitores. Resolución de problemas
concurrentes con sincronización por memoria compartida.

Concurrencia por pasaje de mensajes(MP). Mensajes asincrónicos.


Mensajes sincrónicos. Remote Procedure Call (RPC). Rendezvous.
Paradigmas de interacción entre procesos.

Introducción a la programación paralela. Lenguajes, compiladores,


bibliotecas y herramientas de desarrollo.

12-4-2004 1 1
Programación Concurrente 2004 - Clase
Metodología del Curso 2004

Teoría.
Material para leer (bibliografía, InterNet, etc).
Posibilidad de promoción de la Teoría.
Preguntas teóricas en las clases.
Pruebas teóricas para la promoción.

Práctica.
Explicaciones y atención de consultas.
Un examen parcial.
Es necesario aprobarlo para que se corrijan los exámenes teóricos de la
promoción.

Exposición final para los que tengan la promoción.


Coloquio sobre un tema preparado por el alumno.

Programación Concurrente 2004 - Clase 1


12-4-2004 2
Objetivos del Curso

Plantear los fundamentos de la programación concurrente,


estudiando su sintaxis y semántica, así como herramientas y
lenguajes para la resolución de programas concurrentes.

Analizar el concepto de sistemas concurrentes que integran la


arquitectura de hardware, el sistema operativo y los algoritmos que
permiten la resolución de problemas concurrentes.

Estudiar los conceptos fundamentales de comunicación y


sincronización entre procesos, por memoria compartida y por
mensajes.

Vincular la concurrencia en software con los conceptos de


procesamiento distribuido y paralelo, para tener los conceptos de
soluciones multiprocesador con algoritmos concurrentes.
12-4-2004 3 1
Programación Concurrente 2004 - Clase
El escenario de la Concurrencia

Múltiples automóviles tratando de ir desde el punto A al punto B.


Una ruta, un carril = secuencialidad, colisiones.
Una ruta, múltiples carriles  paralelismo, interacciones (?)
Múltiples rutas procesamiento distribuido, heterogeneidad.

El ejemplo tiene la esencia de la concurrencia:

Los automóviles son tareas que deben ejecutarse.


Los carriles y las rutas alternativas son los múltiples procesadores.
Siempre los automóviles deberán sincronizarse (por ejemplo por las
luces del tráfico) para no colisionar.
La noción de paralelo y distribuido.

Programación Concurrente 2004 - Clase 1


12-4-2004 4
Conceptos de Concurrencia
Un thread de control = programación secuencial, monoprocesador.
Múltiples threads de control procesos concurrencia.

Los procesos se comunican y sincronizan, en base a dos criterios:


Exclusión mútua en el acceso a secciones críticas de código.
Espera por condición.

La historia de la concurrencia=
En los 60’s == Evolución de los sistemas operativos. Controladores de
dispositivos independientes(canales). Multiprogramación.
En los 70´s== Formalización de la concurrencia en los lenguajes.
En los 80’s== Redes, procesamiento distribuido.
En los 90’s == MPP , InterNet, CS, Web computing...
Hoy== Cluster computing, Grid computing, Procesamiento masivo de
datos distribuidos, Real Time Distributed systems...
Programación Concurrente 2004 - Clase 1
12-4-2004 5
Algunos conceptos del Hardware.

Procesadores y niveles de memoria.


Memoria primaria. Memoria Caché.
Niveles de memoria Caché.

Multiprocesadores de memoria compartida.


Esquemas UMA (Uniform memory access) con Bus o Swith.
(arquitecturas SMP- Symmetric multiprocessors)
Esquemas NUMA para mayor número de procesadores distribuidos.

Multiprocesadores con memoria distribuida.


Grado de acoplamiento de los procesadores.
Memoria compartida distribuida.

Programación Concurrente 2004 - Clase 1


12-4-2004 6
Concurrencia: Clases de Aplicaciones

El primer tipo de aplicaciones se corresponde cuando ejecutamos N


procesos independientes sobre M procesadores, con N > M. Un sistema
de software de “multithreading” maneja simultáneamente tareas
independientes, asignando (por ejemplo por tiempos) los procesadores
de que dispone.

Ejemplos típicos:
Sistemas de ventanas en PCs o WS.
Time sharing en sistemas operativos multiprocesador.
Sistemas de tiempo real en plantas industriales.

Programación Concurrente 2004 - Clase 1


12-4-2004 7
Concurrencia: Clases de Aplicaciones

El segundo tipo de aplicaciones es el cómputo distribuido: una red de


comunicaciones vincula procesadores diferentes sobre los que se
ejecutan procesos que se comunican esencialmente por mensajes. Cada
componente del sistema distribuido puede hacer a su vez multithreading.

Ejemplos típicos:
Servidores de archivos (recursos) en una red.
Sistemas de Bases de datos distribuidas (bancos, reservas de vuelos).
Servidores WEB distribuidos.
Arquitecturas cliente-servidor.
Sistemas tolerantes a fallas.

Programación Concurrente 2004 - Clase 1


12-4-2004 8
Concurrencia: Clases de Aplicaciones
El procesamiento paralelo es el tercer tipo de aplicaciones. Se trata de
resolver un dado problema en el menor tiempo posible, utilizando una
arquitectura multiprocesador en la que se pueda distribuir la tarea global
en tareas (independientes? interdependientes?) que puedan ejecutarse
en diferentes procesadores.
Paralelismo de datos y paralelismo de procesos.

Ejemplos típicos:
 Cálculo científico. Modelos de sistemas (meteorología, movimiento
planetario).
Gráficos, procesamiento de imágenes, realidad virtual, procesamiento
de video.
Problemas combinatorios y de optimización lineal y no lineal. Modelos
econométricos.
Programación Concurrente 2004 - Clase 1
12-4-2004 9
Paradigmas de resolución de
programas concurrentes

Si bien el número de aplicaciones es muy grande, en general los


“patrones” de resolución concurrente son pocos:
1-Paralelismo iterativo, 2-paralelismo recursivo, 3-productores y
consumidores, 4-clientes y servidores, 5-pares que interactúan.

En el paralelismo iterativo un programa tiene un conjunto de procesos


(posiblemente idénticos) cada uno de los cuáles tiene uno o más loops.
Es decir cada proceso es un programa iterativo.
La idea es que si estos procesos cooperan para resolver un único
problema (ejemplo un sistema de ecuaciones) pueden trabajar
independientemente y sincronizar por memoria compartida o envío de
mensajes.

Programación Concurrente 2004 - Clase 1


12-4-2004 10
Paradigmas de resolución de
programas concurrentes

En el paralelismo recursivo el problema general (programa) puede


descomponerse en procesos recursivos que trabajan sobre partes del
conjunto total de datos.
Ejemplos clásicos son por ejemplo el sorting by merging o el cálculo de
raíces en funciones continuas.

Los esquema productor-consumidor muestran procesos que se


comunican. Es habitual que estos procesos se organicen en pipes a
través de los cuáles fluye la información. Cada proceso en el pipe es un
filtro que consume la salida de su proceso predecesor y produce una
salida para el proceso siguiente.

Programación Concurrente 2004 - Clase 1

12-4-2004 11
Paradigmas de resolución de
programas concurrentes

Cliente-servidor es el esquema dominante en las aplicaciones de


procesamiento distribuido. Los servidores son procesos que esperan
pedidos de servicios de múltiples clientes. Naturalmente unos y otros
pueden ejecutarse en procesadores diferentes. Los mecanismos de
invocación son variados (rendezvous y RPC por ejemplo). El soporte
distribuido puede ser muy simple (LAN) o extendido a toda la WEB.

En los esquemas de pares que interactúan los procesos (que forman


parte de un programa distribuido) resuelven partes del problema
(normalmente mediante código idéntico) e intercambian mensajes para
avanzar en la tarea. El esquema permite mayor grado de asincronismo
que C-S.

Programación Concurrente 2004 - Clase 1


12-4-2004 12
Procesamiento Secuencial y
Concurrente.

Analizar la resolución secuencial y mono-procesador (UNA


máquina) de la fabricación de un objeto compuesto por N partes o
módulos.

La solución secuencial nos fuerza a establecer un estricto orden


temporal. Al disponer de sólo una máquina el ensamblado final del
objeto sólo se podrá realizar luego de N pasos de procesamiento o
fabricación.

Programación Concurrente 2004 - Clase 1


12-4-2004 13
Procesamiento Secuencial y
Concurrente.

Ahora supongamos que tenemos N máquinas, una por componente o


módulo a fabricar para ensamblar el objeto. Si no hubiera dependencia
de la materia prima, cada una de las N máquinas puede trabajar al
mismo tiempo===>MENOR tiempo para completar el
proceso===>Paralelismo del hardware.

Dificultades: Distribución de la carga de trabajo, Necesidad de


compartir recursos, Necesidad de esperarse en puntos clave, Necesidad
de comunicarse, Dificultad con las fallas aisladas, Asignación de una de
las N máquinas para efectuar el ensamblado final (Cual??).

Un concepto importante que surge de este ejemplo es el de Speed-Up.

Programación Concurrente 2004 - Clase 1


12-4-2004 14
Procesamiento Secuencial y
Concurrente.
Hemos visto la solución secuencial directa y la solución paralela
(multiplicando el hardware) en el problema de la fabricación de un
objeto (sistema) de múltiples componentes (módulos). Ahora
supongamos otro enfoque: una sóla máquina le dedica una parte del
tiempo a cada componente del objeto final===> Concurrencia sin
paralelismo de hardware===> Menor speed-up.

Dificultades: Distribución de la carga de trabajo, Necesidad de


compartir recursos, Necesidad de esperarse en puntos clave, Necesidad
de comunicarse, Dificultad con las fallas de software aisladas,
Necesidad de recuperar el “estado” de cada proceso al retomarlo.

La concurrencia es un concepto de software no restringido a una


arquitectura particular de hardware ni a un número determinado de
procesadores.
Programación Concurrente 2004 - Clase 1
12-4-2004 15
Programa Concurrente

Un programa concurrente especifica dos o más programas


secuenciales que pueden ejecutarse concurrentemente en el
tiempo como tareas o procesos.

Un proceso o tarea es un elemento concurrente abstracto que


puede ejecutarse simultáneamente con otros procesos o tareas, si
el hardware lo permite. (recordar los TASKs de ADA).

Un programa concurrente puede tener N procesos habilitados


para ejecutarse concurrentemente y un sistema concurrente puede
disponer de M procesadores cada uno de los cuales puede
ejecutar uno o más procesos.

Programación Concurrente 2004 - Clase 1


12-4-2004 16
Objetivos de los sistemas
concurrentes

Ajustar el modelo de arquitectura de hardware y software al


problema del mundo real a resolver.

Incrementar la perfomance, mejorando los tiempos de respuesta de


los sistemas de procesamiento de datos, a través de un enfoque
diferente de la arquitectura física y lógica de las soluciones.

Algunas ventajas que merecen comentarse son la velocidad de


ejecución que se puede alcanzar, la mejor utilización de la CPU de cada
procesador, y la explotación de la concurrencia inherente a la mayoría
de los problemas reales.

Programación Concurrente 2004 - Clase 1


12-4-2004 17
Areas de estudio en Programación
Concurrente
ELECCION DE LA GRANULARIDAD :
Significa optimizar (para una dada aplicación) la relación entre el
número de procesadores y el tamaño de la memoria total.

MANEJO DE LOS RECURSOS:


Asignación de recursos compartidos, métodos de acceso a los recursos,
bloqueo y liberación de recursos, seguridad y consistencia de los
recursos.

SINCRONIZACIÓN:
Se debe asegurar el orden correcto (incluyendo el tiempo) de las
acciones que los procesos ejecutan. Este orden es dinámico e
interdependiente.El objetivo de la sincronización es restringir las
“historias”o “threads” de un programa concurrente sólo a las permitidas.

Programación Concurrente 2004 - Clase 1


12-4-2004 18
Sincronización en Programación
Concurrente
Sincronización por exclusión mútua
Significa asegurar que sólo un proceso tenga acceso a un recurso
compartido en un instante de tiempo.
Si el programa tiene “secciones críticas” que pueden compartir más de
un proceso, la exclusión mútua evita que dos o más procesos puedan
encontrarse en la misma sección crítica al mismo tiempo.

Sincronización por condición:


Debe permitir bloquear la ejecución de un proceso hasta que se cumpla
una condición dada.

Ejemplos de los dos mecanismos de sincronización en un problema de


utilización de un área de memoria compartida (buffer limitado con
productores y consumidores).

Programación Concurrente 2004 - Clase 1


12-4-2004 19
Comunicación y Prioridad en
Programación Concurrente

La comunicación entre procesos concurrentes indica el modo en


que se organiza y trasmiten datos entre tareas concurrentes.
Esta organización requiere especificar protocolos para controlar el
progreso y corrección de la comunicación.
Los protocolos deben contemplar la posibilidad de pérdida de
información.

Un proceso que tiene mayor prioridad puede causar la suspensión


(pre-emption) de otro proceso concurrente. Análogamente puede
tomar un recurso compartido, obligando a retirarse a otro proceso
que lo tenga en un instante dado.

Programación Concurrente 2004 - Clase 1


12-4-2004 20
Conceptos relacionados con la
Programación Concurrente

Dos o más procesos pueden entrar en deadlock, si por un error


en la programación concurrente ambos se quedan esperando que
el otro libere un recurso compartido.La ausencia de deadlock es
una propiedad necesaria en los procesos concurrentes.

Una propiedad deseable en los sistemas concurrentes es el equilibrio


en el acceso a los recursos compartidos por todos los procesos
(fairness).

Dos situaciones NO deseadas en los programas concurrentes son la


inanición de un proceso (no logra acceder a los recursos
compartidos) y el overloading de un proceso (la carga asignada
excede su capacidad de procesamiento).
Programación Concurrente 2004 - Clase 1
12-4-2004 21
Desventajas de la Programación
Concurrente
En Programación Concurrente los procesos no son completamente
independientes y comparten recursos. La necesidad de utilizar
mecanismos de exclusión mútua y sincronización agrega
complejidad a los programas ===> menor confiabilidad.

Los procesos iniciados dentro de un programa concurrente pueden


NO estar “vivos”. Esta pérdida de la propiedad de liveness puede
indicar deadlocks o una mala distribución de recursos.

Hay un no determinismo implícito en el interleaving de los procesos


concurrentes. Esto significa que dos ejecuciones del mismo programa
no necesariamente son idénticas ===> dificultad para la
interpretación y debug.

La comunicación y sincronización produce un overhead de tiempo,


inútil para el procesamiento  Perder perfomance
Programación Concurrente 2004 - Clase 1
12-4-2004 22
Problemas asociados con la
Programación Concurrente
La mayor complejidad en la especificación de los procesos
concurrentes significa que los lenguajes de programación tienen
requerimientos adicionales. ===> mayor complejidad en los
compiladores y sistemas operativos asociados.

Aumenta el tiempo de desarrollo y puesta a punto respecto de los


programas secuenciales. También puede aumentar el costo de los
errores ===> mayor costo de los ambientes y herramientas de
Ingeniería de Software de sistemas concurrentes.

La paralelización de algoritmos secuenciales NO es un proceso


directo, que resulte fácil de automatizar.

Para obtener una real mejora de perfomance, se requiere adaptar


el software concurrente al hardware paralelo.
Programación Concurrente 2004 - Clase 1
12-4-2004 23
Mecanismos de comunicación y
sincronización entre procesos.
Memoria compartida:
Los procesos intercambian mensajes sobre la memoria compartida o
actúan coordinadamente sobre datos residentes en ella. Lógicamente
los procesos no pueden operar simultáneamente sobre la memoria
compartida, lo que obligará a BLOQUEAR y LIBERAR el acceso a la
memoria.
La solución más elemental será una variable de control tipo “semáforo”
que habilite o no el acceso de un proceso a la memoria compartida.

Pasaje de Mensajes:
Es necesario establecer un “canal” (lógico o físico) para trasmitir
información entre procesos. También el lenguaje debe proveer un
protocolo adecuado.
Para que la comunicación sea efectiva los procesos deben “saber”
cuando tienen mensajes para leer y cuando deben trasmitir mensajes.
Programación Concurrente 2004 - Clase 1
12-4-2004 24
Mecanismos de comunicación y
sincronización entre procesos.

Independientemente del mecanismo de comunicación /


sincronización entre los procesos, los lenguajes de programación
concurrente deberán proveer primitivas adecuadas para la
especificación e implementación de las mismas.

De un lenguaje de programación concurrente se requiere:


 Indicar las tareas o procesos que pueden ejecutarse
concurrentemente.
 Mecanismos de exclusión mútua.
 Mecanismos de comunicación entre los procesos.

Recordar el ejemplo de ADA.

Programación Concurrente 2004 - Clase 1


12-4-2004 25
Resumen de conceptos

La Concurrencia es un concepto de software.


La Programación Paralela se asocia con la ejecución concurrente en
múltiples procesadores que pueden tener memoria compartida.
La Programación Distribuída es un “caso” de concurrencia con
múltiples procesadores y sin memoria compartida.

En Programación Concurrente la organización de procesos y


procesadores constituyen la arquitectura del sistema concurrente.

Especificar la concurrencia es esencialmente especificar los


procesos concurrentes, su comunicación y sincronización.

Programación Concurrente 2004 - Clase 1


12-4-2004 26
Paradigmas de resolución de
programas concurrentes

Si bien el número de aplicaciones es muy grande, en general los


“patrones” de resolución concurrente son pocos:
1-Paralelismo iterativo, 2-paralelismo recursivo, 3-productores y
consumidores, 4-clientes y servidores, 5-pares que interactúan.

En el paralelismo iterativo un programa tiene un conjunto de procesos


(posiblemente idénticos) cada uno de los cuáles tiene uno o más loops.
Es decir cada proceso es un programa iterativo.
La idea es que si estos procesos cooperan para resolver un único
problema (ejemplo un sistema de ecuaciones) pueden trabajar
independientemente y sincronizar por memoria compartida o envío de
mensajes.

Programación Concurrente 2004 - Clase 1


12-4-2004 27
Paralelismo iterativo: multiplicación de
matrices.

La solución secuencial:
double a[n,n], b[n,n], c[n,n];
for [i = 0 to n-1] {
for [j = 0 to n-1] {
# compute inner product of a[i,*] and b[*,j]
c[i,j] = 0.0;
for [k = 0 to n-1]
c[i,j] = c[i,j] + a[i,k]*b[k,j];
}
}

El loop interno (índice k) calcula el producto interior de la fila i de la matriz


a por la columna j de la matriz b y obtiene c[i,j].
Acciones paralelas posibles...
Programación Concurrente 2004 - Clase 1
12-4-2004 28
Multiplicación de matrices. Paralelismo
por filas o columnas.

co [i = 0 to n-1] { # Calcula las filas en paralelo


for [j = 0 to n-1] {
c[i,j] = 0.0;
for [k = 0 to n-1]
c[i,j] = c[i,j] + a[i,k]*b[k,j];
}
}

co [j = 0 to n-1] { # Calcula las columnas en paralelo


for [i = 0 to n-1] {
c[i,j] = 0.0;
for [k = 0 to n-1]
c[i,j] = c[i,j] + a[i,k]*b[k,j];
}
} Programación Concurrente 2004 - Clase 1
12-4-2004 29
Multiplicación de matrices. Ahora con
n2 procesos.

co [i = 0 to n-1, j = 0 to n-1] { # TODAS las filas y columnas


c[i,j] = 0.0;
for [k = 0 to n-1]
c[i,j] = c[i,j] + a[i,k]*b[k,j];
}

co [i = 0 to n-1] { # FILAS en paralelo


co [j = 0 to n-1] { # COLUMNAS en paralelo
c[i,j] = 0.0;
for [k = 0 to n-1]
c[i,j] = c[i,j] + a[i,k]*b[k,j];
}
}
Programación Concurrente 2004 - Clase 1
12-4-2004 30
Multiplicación de matrices.
P procesadores con N/P > 1.

Un procesador WORKER se encargará de un subconjunto de filas o


columnas de la matriz resultado. El tamaño del “strip” óptimo es un
problema muy interesante para balancear costo de procesamiento
con costo de comunicaciones.

process worker[w = 1 to P] { # strips en paralelo


int first = (w-1) * n/P; # Primer fila del strip
int last = first + n/P - 1; # Ultima fila del strip
for [i = first to last] {
for [j = 0 to n-1] {
c[i,j] = 0.0;
for [k = 0 to n-1]
c[i,j] = c[i,j] + a[i,k]*b[k,j];
}
}
}
12-4-2004 Programación Concurrente 2004 - Clase
31 1
Aspectos de la Programación
Secuencial
Toda la Programación Secuencial se puede expresar con 3
clases de instrucciones básicas: ASIGNACIÓN, ALTERNATIVA
(decisión) e ITERACION (repetición con condición).

 asignación simple: x = e,
 sentencia compuesta asignación: x = x + 1; y = y – 1; z= x+y;
 swap: v1 :=: v2
 skip Termina inmediatamente y no tiene efecto sobre ninguna
variable de programa.

Programación Concurrente 2004 - Clase 1


12-4-2004 32
Aspectos de la Programación
Secuencial

 Sentencias de alternativa: IF B  S
B expresión booleana (condición),
S una instrucción simple o compuesta
B “guarda” a S pues S no se ejecuta si B no es verdadera.
Puede existir una condición ELSE para ¬B.

En muchos casos pueden existir alternativas múltiples (CASE)


Las guardas son evaluadas en algún orden arbitrario.
Elección no determinística.
Si ninguna B es verdadera, el IF no tiene efecto

Programación Concurrente 2004 - Clase 1


12-4-2004 33
Aspectos de la Programación
Secuencial
 Sentencias de alternativa iterativa múltiple:
DO B1  S1
 B2  S2
.......
Bn  Sn
OD

Las sentencias guardadas son evaluadas y ejecutadas hasta que


todas las guardas sean falsas.
(relacionar con el SELECT –ACCEPT de ADA).
La elección es no determinística si más de una guarda es verdadera.

Programación Concurrente 2004 - Clase 1


12-4-2004 34
Aspectos de la Programación
Secuencial
La repetición e iteración tienen una forma general que se puede
expresar con una instrucción del tipo FOR-ALL:
FA cuantificadores = Secuencia de Instrucciones AF
Cada cuantificador especifica un rango de valores para una
variable de iteración (con un rango y una condición Such That):
variable = expr_inicial to expr_final st B

El cuerpo del for-all se ejecuta una vez por cada valor de la
variable de iteración.
Si hay cláusula such-that, la variable de iteración toma sólo los
valores para los que B es verdadera.
Si hay más de un cuantificador el cuerpo del fa se ejecuta para
cada combinación de valores.

Programación Concurrente 2004 - Clase 1


12-4-2004 35
Concurrencia y Sincronización

Programa concurrente  dos o más procesos cooperantes.

Múltiples threads de control (en el mismo t ?), uno por cada proceso.

Los procesos interactúan comunicándose  sincronización

Problema  interferencia: un proceso toma una acción que invalida


las suposiciones hechas por otro proceso.

co S1 // ..... // Sn oc ejecuta las Si concurrentemente


La ejecución del co termina cuando todas las Si teminaron

Programación Concurrente 2004 - Clase 1


12-4-2004 36
Acciones atómicas y sincronización
Ejecución de un programa concurrente  interleaving de las acciones
atómicas ejecutadas por procesos individuales
Interacción  no todos los interleavings son aceptables.

La sincronización debe prevenir los interleavings indeseables.

Sincronizar => Combinar acciones atómicas de grano fino (fine-


grained) en acciones (compuestas) de grano grueso (coarse grained)
que den la exclusión mutua.

Sincronizar=> Demorar un proceso hasta que el estado de programa


satisfaga algún predicado (por condición).

Programación Concurrente 2004 - Clase 1


12-4-2004 37
Acciones atómicas y sincronización.
Atomicidad de grano fino.
Acción atómica  hace una transformación de estado indivisible
Los estados intermedios en la implementación de la acción no
deben ser visibles para los otros procesos
= Se debe implementar por Hardware.

Analicemos la atomicidad de la operación de asignación...


a:=b

La lectura y escritura de las variables x,y,z son atómicas.


y = 1; x = 0; z=2;
co x = y + z // y = x + y // z = 4 oc
= Analicemos los posibles resultados si tenemos tres procesadores
ejecutando los procesos concurrentes (no necesariamente de la misma
velocidad)
Programación Concurrente 2004 - Clase 1
12-4-2004 38
Acciones atómicas y sincronización.
Atomicidad de grano fino.

Cuáles serían los posibles “threads” del programa concurrente


especificado??

Qué sucedería si tenemos un cambio en el tercer proceso:


y = 1; x = 0; z=2;
co x = y + z // y = x + y // z = z - 1 oc

Se podría probar corrección??

Programación Concurrente 2004 - Clase 1


12-4-2004 39
Acciones atómicas y sincronización

En lo que sigue, supondremos máquinas con las siguientes


características:
Los valores de los tipos básicos se almacenan en elementos
de memoria leídos y escritos como acciones atómicas

Los valores se cargan en registros, se opera sobre ellos, y


luego se almacenan los resultados en memoria

Cada proceso tiene su propio conjunto de registros

Todo resultado intermedio de evaluar una expresión se


almacena en registros o en memoria privada del proceso
Programación Concurrente 2004 - Clase 1
12-4-2004 40
Acciones atómicas y sincronización

= Si una expresión e en un proceso no referencia una variable


alterada por otro proceso, la evaluación será atómica, aunque
requiera ejecutar varias acciones atómicas de grano fino.

 Si una asignación x=e en un proceso no referencia ninguna


variable alterada por otro proceso, la ejecución de la asignación será
atómica

Pero... normalmente los programas concurrentes no son


disjuntos

 De algún modo habrá que “proteger” la variable compartida o


especificar un orden de precedencia en las posibles operaciones
concurrentes.
Programación Concurrente 2004 - Clase 1
12-4-2004 41
Especificación de la sincronización.

En general, necesitamos ejecutar secuencias de sentencias como


una única acción atómica

=Mecanismo de sincronización para construir una acción atómica de


grano grueso (coarse grained) como secuencia de acciones atómicas
fine grained que aparecen como indivisibles.

En lo que sigue e indica que la expresión e debe ser evaluada


atómicamente

Programación Concurrente 2004 - Clase 1


12-4-2004 42
Especificación de la sincronización.

await se debe implementar en su forma más general (exclusión mutua y


sincronización por condición)

Sólo exclusión mutua  S


Ejemplo: x=x+1;y=y+1

El estado interno en el cual x e y son incrementadas resulta


invisible a los otros procesos que referencian x o y.

Programación Concurrente 2004 - Clase 1


12-4-2004 43
Especificación de la sincronización.

Sincronización por condición   await B 


Ejemplo:  await count > 0 

await B puede ser implementado como busy waiting o spinning:

do (not B)  skip od

Acción atómica incondicional  no contiene una condición B

Acción atómica condicional  sentencia await con guarda B

Programación Concurrente 2004 - Clase 1


12-4-2004 44
Propiedades de seguridad(safety) y
vida(liveness) en Concurrencia
Una propiedad de un programa concurrente es un atributo que resulta
verdadero para cualquiera de los threads de ejecución del mismo.
Toda propiedad puede ser formulada en términos de dos clases de
propiedades: seguridad y vida.

La clase de propiedades de “seguridad” se refiere a la NO


ocurrencia de eventos “malos”.
Por ejemplo son clásicas las propiedades de seguridad ausencia de
deadlock y ausencia de interferencia (exclusión mútua) entre
procesos.

La clase de propiedades de “vida” se refiere a la posibilidad de


ocurrencia de eventos “buenos”. Por ejemplo son clásicas: asegurar
que un pedido de servicio será atendido, asegurar que un mensaje llega
a destino, que un proceso eventualmente alcanzará su sección crítica,
etc=> dependen de las políticas de scheduling.
Programación Concurrente 2004 - Clase 1
12-4-2004 45
Propiedades de procesos
concurrentes

Fairness: trata de garantizar que los procesos tengan chance de


avanzar, sin importar lo que hagan los demás

Una acción atómica en un proceso es elegible si es la próxima acción


atómica en el proceso que será ejecutado
Si hay varios procesos, hay varias acciones atómicas elegibles

Una política de scheduling determina cuál será la próxima en


ejecutarse

Programación Concurrente 2004 - Clase 1


12-4-2004 46
Propiedades de procesos
concurrentes

Fairness Incondicional. Una política de scheduling es


incondicionalmente fair si toda acción atómica incondicional que es
elegible eventualmente es ejecutada.

Fairness Débil. Una política de scheduling es débilmente fair si es


incondicionalmente fair y toda acción atómica condicional que se vuelve
elegible eventualmente es ejecutada si su guarda se convierte en true y
de allí en adelante permanece true.

No es suficiente para asegurar que cualquier sentencia await elegible


eventualmente se ejecuta: la guarda podría cambiar el valor (de false a
true y nuevamente a false) mientras un proceso está demorado.
(Recordar el caso de lectores-escritores de ADA)

Programación Concurrente 2004 - Clase 1


12-4-2004 47
Propiedades de procesos
concurrentes

Fairness Incondicional. Una política de scheduling es


incondicionalmente fair si toda acción atómica incondicional que es
elegible eventualmente es ejecutada.

Fairness Fuerte: Una política de scheduling es fuertemente fair si es


incondicionalmente fair y toda acción atómica condicional que se vuelve
elegible eventualmente es ejecutada pues su guarda se convierte en
true con infinita frecuencia.

Relacionar lo anterior con los esquemas de scheduling que tienen


“memoria”para favorecer a los procesos retrasados==> Prioridad
dinámica.
Programación Concurrente 2004 - Clase 1
12-4-2004 48
Tareas para la próxima clase
En lo posible leer los cápítulos 1 y 2 del texto “Foundations of Mutithreaded,
Parallel and Distributed Programming” de Gregory Andrews. Addison Wesley
2000. Leer los ejemplos de paralelismo recursivo, productores y
consumidores, clientes y servidores y el código de la multiplicación de
matrices distribuida del Capítulo 1 del Andrews.

Investigue las primitivas de programación concurrente de un lenguaje de


programación que NO sea ADA.

Analice un caso conocido de accion atómica de grano grueso: una


transacción completa sobre una BD. Explique como protegería la
atomicidad de la misma, suponiendo que hay acceso concurrente a la
BD. Qué significa el AWAIT en este caso?
Programación Concurrente 2004 - Clase 1
12-4-2004 49

También podría gustarte