Вы находитесь на странице: 1из 65

*Programacin Concurrente

DAI - UNSAAC.

IVAN C. MEDRANO VALENCIA


MOTIVACION

*Se ha preguntado alguna


vez, de cmo se realizan los
siguientes sistemas?
*Simulador de vuelos
*Sistemas de tiempo real
*Modelamiento y simulacion
*Robotica
*Juegos de video
*Que es la Concurrencia?
*Definicin Real Academia Espaola.
Acaecimiento o concurso de varios sucesos
en un mismo tiempo.
*Una forma de ver la concurrencia es como
un conjunto de actividades que se
desarrollan en forma simultnea.
*En informtica cada una de esas
actividades se suele llamar proceso.
*Que es la Concurrencia?
(cont.)
*En informtica se habla de concurrencia
cuando hay una existencia simultnea de
varios procesos en ejecucin.
*Ojo.... existencia simultnea no significa
ejecucin simultnea.
Trataremos de explicar esto con el sgte. Ejemplo:
El amigo Waldo quiere poner en prctica la siguiente receta:

1.Verter ingrediente uno y dos en un


recipiente y batir durante 10 minutos.
2.Dejar reposar 2 minutos.
3.Mezclar el ingrediente tres y cuatro en
otro recipiente y batir durante 5 minutos.
4.Calentar 2 minutos
5.Verter la mezcla 1 con la 2.
6.Dejar enfriar y servir.
* Waldo advierte que hay varias formas de llevarlo a cabo:
1. Un paso tras otro de tal forma que el siguiente no se
completa hasta terminar el anterior, es decir en forma
SECUENCIAL

Moment Acciones
o

M1 1) Verter ingrediente uno y dos y batir 10 min.

M2 2) Dejar reposar 2 minutos.

M3 3) Mezclar ingredientes tres y cuatro y batir 5 min.

M4 4) Calentar 2 min.

M5 5) Verter mezcla 1 con la 2

M6 6) Dejar enfriar y servir


* 2. Un paso tras otro, pero si es posible, no es necesario
que un paso anterior se haya concluido. Ejecucin
CONCURRENTE.
Momento Acciones

M1 1) Verter ingredientes uno y dos y batir durante 5 minutos


(faltan 5 min. por batir)
M2 3) Mezclar ingredientes tres y cuatro y batir durante 3
minutos (faltan 2 min. por batir).
M3 1) Batir ingredientes uno y dos por los 5 minutos que faltan.

M4 2)Dejar reposar por 2 minutos


3)Completar el batido por 2 minutos de los ingredientes tres
y cuatro.
M5 4) Calentar por 2 minutos.
M6 5) Verter mezcla 1 con la 2
M7 6) Dejar enfriar y servir
* 3. Waldo, se da cuenta que puede realizar la receta ms
rpido si pide ayuda a su amigo Arturo; as que lo llama y
se reparten el trabajo de la siguiente manera: (ejecucion
PARALELA)
Mom Acciones de Waldo Acciones de Arturo
M1 1) Verter ingrediente unoMezclar el ingrediente tres
y dos en un recipiente y y cuatro en otro
batir 10 minutos. recipiente y batir por 5
minutos.
M2 (contina el paso 1) 1) Calentar 2 minutos
M3 1) Dejar reposar 2 min. (no hace nada)

M4 5) Verter la mezcla 1 con (no hace nada)


la dos
M5 (no hace nada) 6) Dejar enfriar y servir
P1

P2

Tiempo
* EJECUCION SECUENCIAL
P1

P2

Tiempo

* EJECUCION CONCURRENTE
P1

P2

Tiempo

* EJECUCION PARALELA
*Procesador
*Es un dispositivo hardware capaz de ejecutar
las instrucciones de un proceso. Un procesador
puede ejecutar una sola instruccin de un
programa a la vez.
*Existen computadores que tienen un solo
procesador y a los cuales se les denomina
monoprocesador y a las computadoras que
poseen varios procesadores se les llama
multiprocesador.
*Proces
*Cuando el computador ejecuta un conjunto de
instrucciones, se dice que esta realizando un proceso o
tarea, por lo que un proceso es una secuencia de
instrucciones o sentencias que se ejecutan
secuencialmente en un procesador
*Hil
*En un entorno multitarea a las tareas se les llama
procesos pesados, en un entorno multihilo se les denomina
procesos ligeros o hilos. La diferencia es que os procesos
pesados estn en espacios de direccionamiento distintos.
La comunicacin entre procesos y el cambio de contexto es
muy caro. Por el contrario, los hilos comparten el mismo
espacio de direcciones y comparten cooperativamente el
mismo proceso pesado
*Proceso e Hilo
hilos
Proceso Proceso
Pesado Pesado
1 3

PROCESADOR
*Estados de los proceso
INICIAL

Creacin

Ocurre Evento
LISTO

BLOQUEADO Despachar Desalojar FINALIZADO

EJECUCION
Espera Evento Terminar
*Ejecucion de los procesos
*Habiamos dicho que en informatica se
habla de concurrencia cuando hay una
existencia simultnea de varios procesos
en ejecucin.
*Pero no se dijimos nada que si esos procesos
se ejecutan sobre un solo procesador o varios
procesadores.
*Para aclarar este concepto nos pondremos
un ejemplo simple:
Programacion Concurrente.

Disciplina que se encarga del estudio de las


notaciones que permiten especificar la
ejecucin concurrente de las acciones de un
programa, as como las tcnicas para resolver
los problemas inherentes a la ejecucin
concurrente (comunicacin y sincronizacin)
*Programacion Concurrente.
*Tradicionalmente estuvo asociada al mundo de
losSistemas Operativos
* Primeros programas concurrentes:
Diferentes partes del SO en ejecucin sin un orden
predecible y compartiendo variables => nuevos
problemas
* Tres hitos importantes marcan su evolucin:
Hilo
Aparicin de lenguajes de alto nivel que da soporte
a la P.C.
La aparicin de Internet
*Programacion Concurrente
*EL trabajar con procesos concurrentes aade
complejidad a la tarea de programar
*cules son entonces los beneficios que aporta
la programacin concurrente?
*Beneficios de la Programaci
Concurrent

* Mejor aprovechamiento de la CPU


* Velocidad de ejecucin
* Solucin de problemas de naturaleza
concurrente
* Sistemas de control
* Tecnologas web
* Sistemas de Tiempo Real
* Simulacin
* SGDB
*Caractersticas de los
Programas Concurrentes

*Orden de ejecucin de las instrucciones


*Indeterminismo
*Orden de Ejecucin de las
instrucciones
*La programacin secuencial define un orden total de
las instrucciones.
*Ante un conjunto de datos de entrada, el flujo de
ejecucin es siempre el mismo.
*Ejemplo: P, Q
P: < p1 p2 p3 ... pm >
Q: < q1 q2 q3 ... qn >

*Secuencial
*< p1 p2 p3 ... pm q1 q2 q3 ...
*Orden de Ejecucin de las
instrucciones
*Un programa concurrente define un orden
parcial de ejecucin.
*Ante un conjunto de datos de entrada no se
puede saber cual va a ser el flujo de ejecucin.
*Indeterminismo
*El orden parcial implica el no determinismo de
los programas concurrentes.
*Es decir, puede producir diferentes resultados
cuando se ejecuta repetidamente sobre el mismo
conjunto de datos de entrada.
*El no determinismo es una propiedad inherente a
la concurrencia
*Por culpa del no determinismo, es ms difcil
analizar y verificar un algoritmo concurrente
*Ojo, que existan varias posibilidades de salida NO
significa necesariamente que un programa
*Peculiaridades de los
programas concurrentes
*Los programas concurrentes pueden no
terminar nunca y al mismo tiempo ser
correctos.
*Unprograma concurrente puede tener mltiples
secuencias de ejecucin.
*Cuando se dice que un programa concurrente
es correcto, seentiende que se refiere a todas
*
sus posibles secuencias de ejecucin.
secuencias de ejecucin
*Problemas inherentes a la
Programacin Concurrente

*Exclusin Mutua
*Condicin de Sincronizacin
*Verificacin.
*Exclusin Mutua
*Si dos hilos P1 y P2 utilizan una variable
compartida X, y ambos desean realizar alguna
actualizacin de sta en alguna parte de su
cdigo, tendramos:
Hilo P1 Hilo P2 inicio
inicio inicio X <-- 0
.... .... Ejecutar(P1)
X <-- X+1 X <-- X+1 Ejecutar(P2)
.... .... ....
fin fin JuntarHilos
escribir X
fin

Cul ser el resultado?


*Exclusin Mutua
en que consiste el problema?
Un lenguaje de alto nivel facilita la programacin
mediante la abstraccin de operaciones mquina en
operaciones de alto nivel. Asi, una operacin como:

A:= A+1

se traduce en el siguiente conjunto de operaciones


atmicas.

LOAD A, R
ADD R, 1
STORE R, A
*Exclusin Mutua
En la ejecucin del ejemplo podra darse el siguiente
escenario:

P1: LOAD RP1,X


P2: LOAD RP2,X
P1: ADD RP1,1
P2: ADD RP2,1
P1: STORE RP1,X
P2: STORE RP2,X

por lo que el resultado del programa podra ser


incorrecto.
*Seccin Crtica
Porcin de cdigo con variables compartidas y que
debe ejecutarse en exclusin mutua.
Los lenguajes concurrentes deben proporcionar
herramientas para resolver este tipo de problemas
*Exclusin Mutua

*Problema derivado de la abstraccin en los


lenguajes de alto nivel
*Una instruccin de alto nivel se convierte en un
conjunto de instrucciones mquina, stas son
las que realmente se ejecutan
concurrentemente.
* En el paradigma secuencial este hecho carece
de importancia pero en ejecuciones
concurrentes el resultado puede ser incorrecto.
*Exclusin Mutua
*Garanta de que un nico proceso o hilo accede a un
recurso en un determinado instante
*Exclusin Mutua
Solucin general:

inicio
.....
.....
<Fase de negociacin>
Seccin Crtica
<Fase de liberacin>
......
......
fin
*Soluciones de la Exclusin Mutua
Primer Algoritmo
Hilo P1 Hilo P2
inicio inicio
mientras true hacer mientras true hacer
inicio inicio
{seccin no crtica} {seccin no crtica}
repetir repetir

hasta que acceso=1 hasta que acceso=2


{seccin crtica} {seccin crtica}
acceso=2 acceso=1
fin fin
fin fin

acceso: entero en el rango 1..2 con valor inicial 1


*Primer algoritm
(comentari
La solucin anterior es incorrecta porque ambos
procesos examinan y actualizan una nica variable
global. As, si uno de los procesos muere se
producir una situacin de bloqueo en el otro.

Para solventar esta situacin, podemos pensar en


que cada proceso acte sobre su propia variable,
como se muestra en la figura siguiente.
*Soluciones de la Exclusi
Segundo
Mutu
Algoritmo
Hilo P1 Hilo P2
inicio inicio
mientras true hacer mientras true hacer
inicio inicio
{seccin no {seccin no
crtica} crtica}
repetir repetir

hasta que C2=1 hasta que C1=1


C1=0 C2=0
{seccin crtica} {seccin crtica}
C1=1 C2=1
fin fin
fin fin
C1, C2: entero en el rango 0..1 con valor inicial 1
*Segundo Algoritm
(comentario
Cada proceso Pi asigna a la variable Ci el valor 0 cuando desea
entrar en su seccin crtica y el valor 1 Ci cuando la ha concluido.
De esta manera, mientras un proceso no est en su seccin crtica
el valor de las variables de control es 1, con lo que si el proceso
entra en un estado de halt el resto puede seguir trabajando. Ahora
bien, aunque este segundo algoritmo garantiza la ausencia de
bloqueos,no existe exclusin mutua, ya que los dos procesos pueden
alcanzar sus secciones crticas simultneamente.
En la figura anterior, cuando un proceso concluye el bucle de
espera, inicia una secuencia de instruccin que permiten alcanzar
sin ninguna prevencin su seccin crtica. Este conjunto de acciones
puedne no ser, no lo son de hecho, atmicas. Por tanto el error est
en no considerar las actuaciones sobre las variables de control
como seccin crtica.
Para solucionarlo se puede utilizar el siguiente algoritmo,
*Soluciones de la Exclusi
Mutu
Tercer Algoritmo
Hilo P1 Hilo P2
inicio inicio
mientras true hacer mientras true hacer
inicio inicio
{seccin no crtica} {seccin no crtica}
C1=0 C2=0
repetir repetir

hasta que C2=1 hasta que C1=1


{seccin crtica} {seccin crtica}
C1=1 C2=1
fin fin
fin fin

C1, C2: entero en el rango 0..1 con valor inicial 1


*Soluciones de la Exclusin
Mutua
Cuarto Algoritmo
Hilo P1 Hilo P2
inicio inicio
mientras true hacer mientras true hacer
inicio inicio
{seccin no crtica} {seccin no crtica}
C1=0 C2=0
repetir repetir
C1=1 C2=1
C1=0 C2=0
hasta que C2=1 hasta que C1=1
{seccin crtica} {seccin crtica}
C1=1 C2=1
fin fin
fin fin
*Algoritmo de Dekke
Hilo p1 Hilo p2
inicio inicio
{seccin no crtica} {seccin no
C1 = 0 crtica}
repetir C2 = 0
if Acceso = 2 repetir
entonces if Acceso = 1
inicio entonces
C1 = 1 inicio
repetir C2 = 1
hasta Acceso = 1 repetir
C1 = 0 hasta Acceso =
fin 2
hasta que C2 = 1 C2 = 0
{seccin critica} fin
C1 = 1 hasta que C1 = 1
Acceso = 2 {seccin critica}
fin C2 = 1
Acceso
C1, C2: enteros en el rango 0..1 con valor= inicial
1 1
fin valor inicial 1
Acceso: entero en el rango 1..2 con
*Propiedades de la Programaci
Concurrent
*Propiedades de seguridad (safety)
*Exclusin mutua
* El acceso con exclusin mutua a secciones crticas esta garantizado
*Sincronizacin
* los procesos cumplen con las condiciones de sincronizacin
impuestos por el algoritmo

*Interbloqueo (pasivo) deadlock


* no se produce una situacin en la cual todos los procesos
participantes quedan atrapados en una espera a una condicin que
nunco se cumpla.
*Propiedades de la Programacin
Concurrente
*Propiedades de vivacidad (liveness)
* Interbloqueo (activo) livelock
* puede ocurrir el caso que varios procesos estn continuamente
competiendo por un recurso de forma activa, pero ningno de ellos lo
consigue (``livelock'')
* Inanicin starvation
* un proceso puede ``morirse'' por inanicin (``starvation''), es decir,
un proceso o varios procesos siguen con su trabajo pero otros nunca
llegan a utilizar los recursos por ser excluido de la competicin por los
recursos
*MECANISMOS DE COMUNICACIO
Y SINCRONIZACIO

*SEMAFOROS
*REGIONES CRITICAS CONDICIONALES
*MONITORES
*MENSAJES
*SEMAFORO

*Es un mecanismo introducido por Dijkstra y su


aplicacin permite controlar el acceso exclusivo a
recursos compartidos
*Su aplicacin tambien permite la sincronizacin
entre procesos
*Esta formado de un contador y una cola
asociada de procesos o hilos en espera
*Las operaciones bsica sobre el contador son
Wait o P y Signal o V
*TAD Semafor
Nombre del TAD: Semaforo
Descripcin Genrica del TAD:
Un semforo es un tipo de datos abstracto que permite el uso de un
recurso de manera exclusiva cuando varios procesos estn
compitiendo.
Descripcin Formal del TAD
Nombre: Semaforo
Elementos:
Semaforo(entero, lista)
Donde:
entero: contador del semaforo, numero entero mayor o igual a
0
lista : lista de procesos o hilos.
*TAD Semafor
Conjunto de Operaciones:
Semaforo (lista) ------> Semaforo
Semaforo (entero x lista) ------> Semaforo
Wait ------> Lista
Signal ------> Lista
Descripcin de las Operaciones:
Constructores.
Semaforo (lista) : crea un semaforo con valor inicial 0
Semaforo (entero x lista) : crea un semaforo con un valor inicial
mayor a cero
*TAD Semafor

Operaciones Primitivas.
Wait : si el contador del semforo es igual a 0
entonces
se lleva el proceso que realiza la operacin a la cola
asociada con el semforo suspendiendo su ejecucin y
abandonando el procesador a favor de otro proceso
sino
se decrementa el valor del contador del semaforo en
una unidad y el proceso que realiza la operacin sigue
ejecutndose. Esta operacin debe ser indivisible
*TAD Semafor

Signal : se incrementa el valor del contador del semaforo


en una unidad . Esta operacin debe ser indivisible.
Se toma uno de los procesos que esperan en la cola del
semforo (si hubira) y se le pone en un estado de preparado
para ejecutarse. El proceso que realiza la operacin sigue
ejecutndose
*Semaforo
Solucin al Problema de la exclusin mutua
Hilo P1 Hilo P2
inicio inicio
mientras verdad hacer mientras verdad hacer
inicio inicio
{seccin no crtica} {seccin no crtica}
wait(mutex) wait(mutex)
{seccin crtica} {seccin crtica}
signal(mutex) signal(mutex)
fin fin
fin fin
*Tipos de Semforo

*Semforos binarios.
* Toman valores de 0, 1
*Semforos generales.
* Toman valores de 0,1,2,3,4.....n
* Ejemplos
Problema de Productores y
consumidores
PROCESO productores PROCESO consumidores;
VAR pdato : dato; VAR cdato : dato;
inicio inicio
mientras true hacer mientras true hacer
inicio inicio
wait(producir); wait(consumir);
pdato := producir(); wait(cs);
wait(ps); cdato:= buffer[sal];
buffer[ent]:= pdato; sal := (sal mod MAX) + 1;
ent := (ent mod MAX) + 1; signal(cs);
signal(ps); signal(producir);
signal(consumir); consumir(cdato);
fin fin
fin; (* Productores *) fin; (* Consumidores *)

Inicio {programa principal} initial(ps,1);


CONS initial(cs,1);
MAX = .. ; (* Cap. Buffer *) initial(consumir,0);
TYPE initial(poducir,MAX);
dato: .. ; (* Tipo de datos*) ent:=1; sal:=1;
VAR {ejecutar concurrentemente}
buffer :array[1..MAX]of dato; productores;
producir, consumir:semaforo; consumidores
ps, cs: semaforo;
ent, sal: integer; fin. (* principal *)

Вам также может понравиться