Tema 06: Introducción a la Programación Concurrente
description
Transcript of Tema 06: Introducción a la Programación Concurrente
Tema 06:
Introducción a la Programación Concurrente
MAESTRÍA EN INGENIERIA DE SISTEMAS E INFORMÁTICA ADMINISTRACIÓN DE TECNOLOGÍAS DE INFORMACIÓN
E S P GE S P G
[email protected], [email protected], [email protected]
Prof: Alberto E. Cohaila Barrios
Introducción a la Concurrencia
¿Qué es la concurrencia? Programa Secuencial. Proceso Procesos Concurrentes. Programa y sistema
concurrente Relaciones entre procesos: Competencia y
Cooperación Actividades entre procesos: Sincronización y
Comunicación ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia? Conclusiones
¿Qué es la concurrencia?
El paradigma de la programación concurrente
Paradigma Conjunto de teorías, estándares y
métodos que juntos representan una forma de ver el mundo
Concurrencia Acaecimiento de varios sucesos al
mismo tiempo
¿Qué es la concurrencia?
Paralelismo Solapamiento
Simultaneidad
Tiempo
TiempoTiempo
• Los sucesos se producen en un mismo intervalo de tiempo intervalo de tiempo ((diferentes recursos)
• Los sucesos se producen en el mismo instante de tiempoinstante de tiempo
• Los sucesos se producen en intervalos intervalos de tiempo superpuestosde tiempo superpuestos
¿Qué es la concurrencia?
El paradigma de la programación concurrente se ocupa de desarrollar métodos de representación de procesos concurrentes y herramientas para especificar y verificar programas concurrentes
Lenguajes que soportan concurrencia Java, PascalFC, Ada, PAD, Parallel
C, OCCAM…
Introducción a la Concurrencia
¿Qué es la concurrencia? Programa Secuencial. Proceso Procesos Concurrentes. Programa y sistema
concurrente Relaciones entre procesos: Competencia y
Cooperación Actividades entre procesos: Sincronización y
Comunicación ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia? Conclusiones
Programa Secuencial. Proceso
Programa Secuencial Conjunto de declaraciones de datos e
instrucciones (o acciones) ejecutables, escrito en un lenguaje de programación
Estas instrucciones deben ejecutarse una a continuación de otra, siguiendo una secuencia determinada por un algoritmo, para resolver un cierto problema
Un programa en Pascal es un programa secuencial
Programa Secuencial. Proceso
Proceso Es la ejecución de un programa
secuencial en un sistema informático Pueden existir varios procesos de un
mismo programa secuencial porque se puede ejecutar el mismo programa secuencial varias veces y de forma simultánea
Programa Secuencial. Proceso
Se puede ver a dos niveles Nivel del Sistema Operativo
Programa Secuencial: Fichero ejecutable Proceso: Proceso que aparece en el
sistema cuando se ejecuta un fichero ejecutable
Nivel de un Programa Internamente Programa Secuencial: Fragmento de
código de un programa Proceso: Ejecución de las sentencias de un
fragmento de código
Programa Secuencial. Proceso
Nivel de un Programa Internamente Programa Secuencial
Un conjunto de sentencias y declaración de variables
Normalmente es un procedimiento o función Proceso
La ejecución del procedimiento o función En un programa Pascal internamente hay
solamente un único proceso En PascalFC, puede haber varios procesos
internamente Proceso ligero, Hilo de Ejecución o Thread
Programa Secuencial. Proceso
Sistema Operativo Programa Internamente
Programa Secuencial
Un fichero ejecutable (.exe)
Conjunto de sentencias (Procedimiento)
Proceso Ejecución de un .exeTiene memoria y usa el procesador Proceso Pesado
Ejecución de un procedimiento Proceso Ligero Hilo de Ejecución Thread
En este módulo nos centramos en los Programas Internamente
Introducción a la Concurrencia
¿Qué es la concurrencia? Programa Secuencial. Proceso Procesos Concurrentes. Programa y
sistema concurrente Relaciones entre procesos: Competencia y
Cooperación Actividades entre procesos: Sincronización y
Comunicación ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia? Conclusiones
Procesos Concurrentes. Programa y Sistema Concurrente
Procesos Concurrentes P1 y P2 se dice que son dos procesos
concurrentes si la primera instrucción de uno de ellos se ejecuta entre la primera y la última instrucción del otro
P1
P2
Tiempo
Procesos Concurrentes. Programa y Sistema Concurrente
Programa Concurrente Conjunto de varios programas
secuenciales, cuyos procesos pueden ejecutarse concurrentemente en un sistema informático
Procesos Concurrentes. Programa y Sistema Concurrente
Programa Concurrente Nivel de Sistema Operativo
Windows es un programa concurrente Linux es un programa concurrente MS-DOS no es un programa concurrente
Nivel de Programa Internamente Un programa en Pascal no es un programa
concurrente Un programa en PascalFC es un programa
concurrente
Procesos Concurrentes. Programa y Sistema Concurrente
Sistema Concurrente Sistema Informático (HW+SW) en el
que es posible ejecutar varios procesos concurrentemente
Introducción a la Concurrencia
¿Qué es la concurrencia? Programa Secuencial. Proceso Procesos Concurrentes. Programa y sistema
concurrente Relaciones entre procesos: Competencia y
Cooperación Actividades entre procesos: Sincronización y
Comunicación ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia? Conclusiones
Relaciones entre procesos: Competencia y Cooperación
Sin relación entre procesos (Independencia) No existe ninguna relación entre los procesos (No es
interesante) Con relación entre procesos (Interacción)
Competencia Varios procesos deben compartir recursos comunes
del sistema (procesador, memoria, disco, impresoras,…) por lo que compiten entre ellos para conseguirlo
Cooperación Varios procesos deben trabajar sobre distintas partes
de un problema para resolverlo conjuntamente
Relaciones entre procesos: Competencia y Cooperación
Competencia Webcam
Por ejemplo el acceso a una web-cam es un recurso de uso exclusivo por un único programa
El primer programa que use la cámara la controla hasta que decida dejar de usarla
Cooperación Envío de fichero por mail
Por ejemplo el OpenOffice genera un fichero en disco que debe leerse posteriormente por el lector de correo para ser enviado
Los procesos colaboran por medio de ficheros
Introducción a la Concurrencia
¿Qué es la concurrencia? Programa Secuencial. Proceso Procesos Concurrentes. Programa y sistema
concurrente Relaciones entre procesos: Competencia y
Cooperación Actividades entre procesos:
Sincronización y Comunicación ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia? Conclusiones
Actividades entre procesos: Sincronización y Comunicación
La competencia y la cooperación son relaciones de interacción entre procesos
Se llevan a cabo a través de las siguientes actividades Comunicación Sincronización
Sincronización condicional Exclusión mutua
Actividades entre procesos: Sincronización y Comunicación
Comunicación Es el intercambio de información entre
procesos Habitualmente cuando dos procesos
cooperan entre sí se intercambian información
Por ejemplo cuando un proceso quiere imprimir, envía la información al proceso encargado de la impresora
Actividades entre procesos: Sincronización y Comunicación
Sincronización La sincronización impone restricciones a la
ejecución de las sentencias de los procesos
Sincronización Condicional Uno o más procesos deben esperar a que se
cumpla cierta condición antes de continuar con su ejecución
Otro proceso es el que establece esa condición Por ejemplo para enviar un fichero por mail, el
proceso que tiene que enviar el fichero se tiene que esperar hasta que éste haya sido generado por el OpenOffice
Actividades entre procesos: Sincronización y Comunicación
Sincronización La sincronización impone restricciones a la
ejecución de las sentencias de los procesos
Exclusión Mutua Varios procesos compiten por un recurso
común de acceso exclusivo Sólo uno de los procesos puede estar
accediendo al recurso a la vez y los demás tienen que esperar
Por ejemplo en el caso de la webcam, sólo un proceso puede acceder a la cámara a la vez
Interacción entre procesos: Sincronización y Comunicación
Relaciones entre procesos
Competencia
Cooperación
Actividades entre procesos
Sincronización
Comunicación
SincronizaciónCondicional
ExclusiónMutua
Se lleva a cabo
mediante
A veces necesita
Hay diferentes
tipos
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia?
Arquitecturas físicas Asignación de Procesos a Procesadores
¿Cómo se usa la concurrencia? Conclusiones
¿Dónde se usa la concurrencia?
Arquitecturas de Sistemas Concurrentes En este módulo no vamos a entrar en
detalles de implementación Pero vamos a dar una visión general de
las diferentes arquitecturas de sistemas concurrentes
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia?
Arquitecturas físicas Asignación de Procesos a Procesadores
¿Cómo se usa la concurrencia? Conclusiones
Arquitecturas Físicas
Sistemas monoprocesador Sistemas con un único procesador Los PCs de sobremesa habituales hace
pocos años
Procesador
Memoria Entrada/Salida
Bus
Arquitecturas Físicas
Sistemas multiprocesador muy acoplados Varios procesadores en la misma máquina Usado en servidores
Procesador
Entrada/Salida
Procesador
MemoriaComún
ProcesadorMemoria
Local
Bus
MemoriaComún
Arquitecturas Físicas
Sistemas multiprocesador muy acoplados Actualmente se están integrando varios
procesadores en un único chip A los procesadores internos se les denomina
cores o núcleos de ejecución Al chip se le denomina “procesador” Todos los PCs actuales tienen esta arquitectura
Procesador
Memoria Entrada/Salida
Core Core
Bus
Arquitecturas Físicas
Sistemas multiprocesador poco acoplados Redes de Ordenadores (Granjas de
Ordenadores, LAN, Internet…) Sistemas Distribuidos
Servidor Web
Red
MóvilConsola
PC
Arquitecturas Físicas
Modelos de Concurrencia Memoria compartida
Los procesos pueden acceder a una memoria común
Existen variables compartidas que varios procesos pueden leer y escribir
Paso de mensajes Los procesos se intercambian mensajes
entre sí Un proceso envía mensaje y otro proceso
lo recibe
Arquitecturas Físicas
Modelos de Concurrencia
Arquitecturasde Sistemas Concurrentes
Paso de Mensajes
Memoria Compartida
Monoprocesador √ √
Multiprocesador Muy Acoplado √ √
Multiprocesador Poco Acoplado (Red) √ X
Arquitecturas Físicas
Vamos a centrarnos en el modelo de concurrencia de memoria compartida
El modelo de concurrencia de paso de mensajes se estudia en asignaturas de sistemas distribuidos (aplicaciones en red)
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia?
Arquitecturas físicas Asignación de Procesos a
Procesadores ¿Cómo se usa la concurrencia? Conclusiones
Asignación de Procesos a Procesadores
Un procesador sólo puede ejecutar un proceso a la vez
¿Qué ocurre si hay que ejecutar más procesos que los procesadores disponibles?
Asignación de Procesos a Procesadores
Multiproceso Cada proceso se ejecuta en su propio
procesador en un sistema de memoria compartida
Procesador1
Entrada/Salida
Procesador3
MemoriaComún
Proc1 Proc2 Proc3
Procesador2
Bus
Asignación de Procesos a Procesadores
Procesamiento Distribuido Cada proceso se ejecuta en su propio
procesador dentro de cada máquina de una red (Programa distribuido)
Máquina 1
Router
Máquina 3
Proc1 Proc2 Proc3
Máquina 2
Impresora
Red
Asignación de Procesos a Procesadores
Paralelismo Real Se obtiene cuando
hay un procesador por cada proceso
Se consigue un aumento de la velocidad de ejecución del programa con respecto a la ejecución secuencial
Paralelismo Real
Ejecución Secuencial
Proc1
Proc2
Proc1
Proc2
t
t
Asignación de Procesos a Procesadores
Multiprogramación Varios procesos se ejecutan en el mismo procesador Cada proceso se ejecuta durante un tiempo y luego
pasa a ejecutarse el siguiente proceso (Compartición de tiempo)
Entrada/SalidaMemoria
Proc2 Proc3
Procesador
Bus
Proc1
Asignación de Procesos a Procesadores
Paralelismo Simulado (Pseudoparalelismo)
Se obtiene cuando varios procesos comparten el mismo procesador
El usuario percibe una sensación de paralelismo real
No se consigue un aumento de la velocidad de ejecución del programa con respecto a la ejecución secuencial Paralelismo Simulado
Proc1
Proc2
Proc1
Proc2
Ejecución Secuencial
t
t
Asignación de Procesos a Procesadores
Asignación de Procesos a Procesadores
Paralelismo RealAumenta la velocidad de ejecución
Paralelismo SimuladoNo aumenta la velocidad de ejecución
En un sistema informático lo más habitual es que se use la Multiprogramación aunque disponga de varios procesadores, porque en la mayoría de las ocasiones hay más procesos que procesadores
Cada procesador ejecuta un proceso• Multiproceso• Procesamiento Distribuido
Cada procesador ejecuta varios procesos• Multiprogramación
Asignación de Procesos a Procesadores
Multiproceso Aumenta la velocidad de ejecución
Multiprogramación No aumenta la velocidad de ejecución Incluso puede disminuir debido a que el
reparto del procesador implica un coste adicional
¿Para qué sirve entonces la multiprogramación?
Asignación de Procesos a Procesadores
Ventajas de la Multiprogramación Dar un servicio interactivo a varios usuarios
simultáneamente Servidor Web
Atiende a varios cientos de usuarios a la vez Messenger o Pidgin
Permite conversaciones simultáneas Pestañas Firefox o Internet Explorer
Permite descargar simultáneamente varias páginas (cada una en una pestaña) mientras navegamos
Asignación de Procesos a Procesadores
Ventajas de la Multiprogramación Ciertos tipos de aplicaciones se
implementan de manera natural con programación concurrente
Aplicaciones gráficas El programa realiza un proceso en segundo
plano y también permite seguir trabajando Eclipse compila en segundo plano
Intercambio entre pares P2P (Emule) Se realizan descargas simultáneas de
múltiples usuarios para completar el mismo fichero
Asignación de Procesos a Procesadores
Ventajas de la Multiprogramación Aprovecha mejor el
procesador en procesos que se quedan esperando
Un proceso se puede bloquear a la espera de un dato del disco duro (entrada/salida)
Con Multiprogramación se puede aprovechar el procesador mientras los procesos esperan
Paralelismo Simulado
Ejecución Secuencial
Proc1
Proc2
Proc1
Proc2
ProcesoBloqueado
Asignación de Procesos a Procesadores
Ventajas de la Multiprogramación Los sistemas operativos
actuales usan la multiprogramación para ejecutar varios procesos simultáneamente
Permite: Tener varios programas
abiertos Imprimir o copiar
ficheros mientras se navega, etc…
Asignación de Procesos a Procesadores
Conclusión: La multiprogramación tiene ventajas Aplicaciones para varios usuarios Aplicaciones que realizan varias tareas
a la vez Sistemas operativos con muchas
aplicaciones Aprovechamiento del procesador
cuando los procesos necesitan esperar
Asignación de Procesos a Procesadores
Hay muchas arquitecturas diferentes en las que se puede ejecutar un programa concurrente
Para hacer programas concurrentes no vamos a pensar en si existe multiproceso o existe multiprogramación
Usamos simplificaciones o abstracciones que nos ayudan a centrarnos en los procesos y sus relaciones, y nos evitan pensar en la arquitectura del sistema
Asignación de Procesos a Procesadores
Esta abstracción permite tener en cuenta únicamente las interacciones entre los procesos derivadas de sus relaciones de competencia y cooperación
No nos tenemos que preocupar de si hay paralelismo real o paralelismo simulado
1ª Abstracción de la Programación ConcurrenteSe considera que cada proceso se ejecuta en su propio procesador
Asignación de Procesos a Procesadores
Tenemos que pensar lo que ocurriría con nuestro programa si el procesador de cada proceso tuviese una velocidad igual
También tenemos que pensar que pasaría si un procesador fuese muy lento y otro procesados fuese muy rápido
Pensar en todas las posibles situaciones permite que nuestros programas concurrentes funcionen correctamente en cualquier tipo de arquitectura y sistema
2ª Abstracción de la Programación ConcurrenteSe ignoran las velocidades relativas de cada proceso, lo que posibilita considerar sólo las secuencias de instrucciones que se ejecutan
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia?
PascalFC El orden de las instrucciones Instrucciones atómicas Intercalación Indeterminismo
Conclusiones
PascalFC
Para estudiar el desarrollo de programas concurrentes vamos a usar PascalFC
Es un lenguaje de programación basado en una simplificación de Pascal
Está orientado a la enseñanza de la concurrencia
Desarrollado por Alan Burns and Geoff Davies en la Universidad de York
http://www-users.cs.york.ac.uk/~burns/pf.html
PascalFC está incluido en EclipseGavabhttp://www.gavab.es/eclipse
PascalFC
Para hacer un programa concurrente hay que hacer dos cosas A) Crear un código que podrá ser
ejecutado concurrentemente con otros códigos (crear el programa secuencial)
B) Iniciar la ejecución de ese código (crear el proceso)
PascalFC
program prog; process type pr1(par:real); begin ... end; process type pr2(par:real); begin ... end;var ...begin ...end.
prog.pas
Se crea con las palabras reservadas process type
La sintaxis es igual a la de un procedimiento en Pascal
Puede recibir parámetros, declarar variables locales…
En PascalFC lo llamaremos tipo de proceso
Programa Secuencial
PascalFC
Hay que declarar una variable con el tipo del proceso
Se hace la llamada con el nombre de la variable entre cobegin coend
Se ejecutan concurrentemente todos los procesos
Es posible crear varios procesos del mismo tipo de proceso
program prog; process type pr1(par:real); begin ... end; process type pr2(par:real); begin ... end;var vPr1:pr1; vAPr2,vBPr2:pr2;begin cobegin vPr1(5.0); vAPr2(7.8); vBPr2(7.5); coend;end.
Creación de un proceso
prog.pas
PascalFC
cobegin coend Ejecuta de forma concurrente las
llamadas a los procesos entre ellas No importan el orden en el fichero Se crea un proceso por llamada Termina cuando han terminado todos
los procesos
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia?
PascalFC El orden de las instrucciones Instrucciones atómicas Intercalación Indeterminismo
Conclusiones
El orden de las instrucciones
En un programa secuencial, todas las instrucciones están ordenadas
Está claro el orden en el que se van ejecutando las instrucciones y la forma en la que van cambiando los valores de las variables
En la programación concurrente, diferentes ejecuciones del mismo programa pueden ejecutar las sentencias en orden diferente
El orden de las instrucciones
program maxmin; procedure min(var min,n1,n2:real); begin if n1 < n2 then min:=n1 else min:=n2; end; procedure max(var max,n1,n2:real); begin if n1 > n2 then max:=n1 else max:=n2; end;var n1,n2,nmax,nmin:real;begin n1:=3; n2:=5; (*I0*) min(nmin,n1,n2); (*I1*) max(nmax,n1,n2); (*I2*) writeln(nmax,nmin) (*I3*)end.
I0 I1 I2 I3
La Relación de Precedencia (->) entre las instrucciones
define una relación de orden
I0 -> I1 -> I2 -> I3
Programación Secuencial
Orden Total
Diagrama de Precedencia
El orden de las instrucciones
Existe determinismo Al ejecutar el programa con los mismos datos de
entrada se obtienen los mismos resultados
Hay veces que no es necesario que una sentencia sea ejecutada antes que otra, se podrían ejecutar en cualquier orden ¿Cómo lo podríamos especificar en el código?
Programación Secuencial
Orden Total
I0 I1 I2 I3
Diagrama de Precedencia
El orden de las instruccionesprogram maxmincon; process type min(var min,n1,n2:real); begin if n1<n2 then min:=n1 else min:=n2; end; process type max(var max,n1,n2:real); begin if n1>n2 then max:=n1 else max:=n2; end;var n1,n2,nmax,nmin:real; pMax:max, pMin:min; begin n1:=3; n2:=5; (*I0*) cobegin pMin(nmin,n1,n2); (*I1*) pMax(nmax,n1,n2); (*I2*) coend; writeln(nmax,nmin) (*I3*)end.
I0
I1
I2
I3
I0->I1, I0–>I2, I1->I3,I2->I3
I1 || I2
Programación Concurrente
Orden Parcial
Diagrama de Precedencia
El orden de las instrucciones
Programación Concurrente
Orden Parcial
I0
I1
I2
I3
No existe determinismo No se restringe el orden de ejecución de I1 e
I2. Podrían ejecutarse en cualquier ordena o de forma concurrentemente
I1 || I2
Diagrama de Precedencia
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia?
PascalFC El orden de las instrucciones Instrucciones atómicas Intercalación Indeterminismo
Conclusiones
Instrucciones atómicas
1ª Abstracción de la Programación ConcurrenteSe considera que cada proceso se ejecuta en su propio procesador
2ª Abstracción de la Programación ConcurrenteSe ignoran las velocidades relativas de cada proceso, lo que posibilita considerar sólo las secuencias de instrucciones que se ejecutan
Recordatorio
Instrucciones atómicas
La 1ª y 2ª abstracción nos permiten olvidarnos de detalles como el número de procesadores y su velocidad
Nos permiten pensar en la secuencia de instrucciones que ejecuta cada proceso
¿Exactamente qué instrucciones ejecuta un proceso?
Instrucciones atómicas
Una instrucción atómica es aquella cuya ejecución es indivisible
O se ejecuta completamente o no se ejecuta, nunca se queda “a medias”
Durante la ejecución de una sentencia atómica, otros procesos no pueden interferir en su ejecución
Instrucciones atómicas
Las instrucciones atómicas se usan mucho aplicaciones empresariales
Ejemplo: Reserva de vuelo con escala Un viajero quiere ir de Madrid a Los Ángeles Tiene que hacer escala en New York Se debe reservar el billete Madrid-New York y
también de New York-Los Ángeles La reserva no se puede quedar a medias,
reservando sólo un trayecto O se reservan ambos trayectos o no se reserva
ninguno
Instrucciones atómicas
En programación concurrente, es muy importante conocer las instrucciones atómicas que ejecuta el procesador
Esas instrucciones atómicas serán las que se ejecuten completamente sin interferencias de otros procesos
Pero hay que tener en cuenta que si una sentencia en PascalFC se ejecuta como varias sentencias atómicas, es posible que otros procesos interfieran con ella
Instrucciones atómicas
x:=x+1
LOAD R,xADD R,#1STR R,x
Sentencia PascalFC
Instrucciones Atómicas
Corresponde a las intrucciones atómicas
Incrementar una variable en 1
• Carga la variable x en el registro R del procesador• Suma 1 al registro R del procesador • Guarda el valor del registro R en la variable x
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia?
PascalFC El orden de las instrucciones Instrucciones atómicas Intercalación Indeterminismo
Conclusiones
Intercalación (Interleaving)
La 1ª y 2ª abstracción nos permiten pensar en la secuencia de instrucciones que ejecuta cada proceso en su procesador
Pero es bastante complicado pensar en la ejecución en paralelo de múltiples secuencias de instrucciones (una por cada proceso)
Lo que se hace para estudiar el comportamiento de un programa concurrente es considerar que todas las sentencias de todos los procesos se intercalan en una única secuencia
Intercalación (Interleaving)
No hay solapamientos La ejecución de dos instrucciones
atómicas en paralelo tiene los mismos resultados que una después de otra
3ª Abstracción de la Programación ConcurrenteSe considera que las secuencias de ejecución de las acciones atómicas de todos los procesos se intercalan en una única secuencia
Intercalación (Interleaving)
No hay que estudiar una única intercalación de instrucciones
Todas las intercalaciones son posibles Hay que estudiar lo que ocurre en
todas las posibles intercalaciones de instrucciones atómicas para comprender el comportamiento del programa en cualquier ejecución
Intercalación (Interleaving)
Multiprogramación Realmente las instrucciones se
ejecutan de forma intercalada Multiproceso
Si dos instrucciones compiten por un mismo recurso, el hardware las secuencializa
Si dos instrucciones no compiten, son independientes, el resultado es el mismo en paralelo que secuencializado
Intercalación (Interleaving)
Todas las abstracciones se pueden resumir en sólo una
Esta abstracción nos permite estudiar el comportamiento de los programas concurrentes
Abstracción de la Programación Concurrente
Es el estudio de las secuencias de ejecución intercalada de las instrucciones atómicas de los procesos secuenciales (Ben-Ari, 1990)
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia?
PascalFC El orden de las instrucciones Instrucciones atómicas Intercalación Indeterminismo
Conclusiones
Indeterminismo
Al ejecutar un programa concurrente, se ejecutarán las sentencias con una intercalación determinada y se obtendrá un resultado
Puesto que todas las intercalaciones de instrucciones atómicas son posibles, un mismo programa puede obtener resultados diferentes en diferentes ejecuciones
Cuando un mismo programa obtiene resultados diferentes dependiendo de la ejecución concreta, se dice que es indeterminista
Indeterminismo
BLP (06-07)
program incdec; process type inc(var x:integer); begin x:=x+1; end; process type dec(var x:integer); begin x:=x-1; end;var x:integer; pInc:inc; pDec:dec;begin x:=0; cobegin pInc(x); pDec(x); coend; writeln(x)end.
LOAD R,xADD R,#1STR R,x
Instrucciones atómicas del tipo de proceso inc
LOAD R2,xSUB R2,#1STR R2,x
Instrucciones atómicas del tipo de proceso dec
Indeterminismo
Una posible intercalación de instrucciones
inc dec x R R2
1 LOAD R2,x 0 0
2 LOAD R,x 0 0 0
3 SUB R2,#1 0 0 -1
4 ADD R,#1 0 1 -1
5 STR R2,x -1 1 -1
6 STR R,x 1 1 -1
Resultado Final: 1
LOAD R,xADD R,#1STR R,x
inc
LOAD R2,xSUB R2,#1STR R2,x
dec
Indeterminismo
Otra posible intercalación de instrucciones
inc dec x R R2
1 LOAD R2,x 0 0
2 LOAD R,x 0 0 0
3 ADD R,#1 0 1 0
4 SUB R2,#1 0 1 -1
5 STR R,x 1 1 -1
6 STR R2,x -1 1 -1
Resultado Final: -1
LOAD R,xADD R,#1STR R,x
inc
LOAD R2,xSUB R2,#1STR R2,x
dec
Indeterminismo
Otra más…
LOAD R,xADD R,#1STR R,x
inc
LOAD R2,xSUB R2,#1STR R2,x
dec
inc dec x R R2
1 LOAD R2,x 0 0
2 SUB R2,#1 0 -1
3 STR R2,x -1 -1
4 LOAD R,x -1 -1 -1
5 ADD R,#1 -1 0 -1
6 STR R,x 0 0 -1
Resultado Final: 0
Como se deben considerar todas las posibles intercalaciones, también hay que considerar que un proceso se ejecute completamente antes que el otro
Indeterminismo
Se han encontrado tres intercalaciones posibles de las instrucciones atómicas de un programa concurrente en las que se obtiene un resultado diferente
Hay 20 posibles intercalaciones En sólo 2 de ellas se obtiene un 0 En 9 intercalaciones se obtiene un 1 En 9 intercalaciones se obtiene un -1
Introducción a la Concurrencia
¿Qué es la concurrencia? ¿Dónde se usa la concurrencia? ¿Cómo se usa la concurrencia? Conclusiones
Conclusiones
Ventajas de la Concurrencia Aumento de la eficiencia: Aprovechamiento de
procesador o procesadores Hay tipos de programas que necesitan llevar a
cabo varias tareas de forma concurrente y por tanto es obligatoria la concurrencia
La posibilidad te tener tareas “en primer plano” y tareas en segundo plano
Tareas en primer plano: Interfaz de usuario Tareas en segundo plano: Antivirus, impresión,
…
Conclusiones
Ventajas de la Concurrencia La tendencia actual para aumentar la potencia
de cómputo de los sistemas informáticos consiste en la creación de procesadores con varios cores o núcleos
Sólo las aplicaciones concurrentes, que dividan las tareas que se deben realizar en varios procesos podrán aprovechar la potencia de calculo de los nuevos sistemas
Esto implica que aplicaciones que actualmente están desarrolladas de forma secuencial, sin concurrencia, deberán actualizarse para aprovechar la potencia de calculo
Apple Mac Pro. 8 cores
Conclusiones
Desventajas de la Concurrencia Desarrollar programas concurrentes es más difícil
que desarrollar programas secuenciales Son más difíciles de programar Es más difícil comprobar que su funcionamiento es el
correcto, porque hay que considerar todas las posibles intercalaciones
Que una ejecución sea correcta con unos datos de entrada no implica que todas las ejecuciones sean correctas con esos mismos datos (como ocurre con los programas secuenciales).
Hay intercalaciones “problemáticas” que pueden aparecer sólo en raras ocasiones
Conclusiones
Indeterminismo Cuando se implementa un programa
concurrente se necesita controlar el indeterminismo
No obstante, hay veces que permitiendo cierto indeterminismo se consiguen programas más eficientes
Ejemplo: En la descarga de ficheros del eMule, cada usuario puede descargarse cualquier fragmento de otro usuario, sin importar cual de ellos. Restringir e imponer un orden podría reducir el rendimiento de la aplicación
• Yela, A.; Arroyo, F.; Fernandez, L. Teoría y Práctica del Módulo de Programación Concurrente de la Asignatura de Programación II. Departamento de Publicaciones de la E.U.I. de la Universidad Politécnica de Madrid, 1997
• Palma, J.T. y otros. Programación Concurrente. Editorial Thomson, 2006
Bibliografía Básica