La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Concurrente DAI - UNSAAC.

Presentaciones similares


Presentación del tema: "Programación Concurrente DAI - UNSAAC."— Transcripción de la presentación:

1 Programación Concurrente DAI - UNSAAC.

2 MOTIVACION Se ha preguntado alguna vez, de cómo se realizan los siguientes sistemas?

3 Simulador de vuelos

4 Sistemas de tiempo real

5 Modelamiento y simulacion

6 Robotica

7 Juegos de video

8 ¿Que es la Concurrencia?
Definición Real Academia Española. 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 simultánea. En informática cada una de esas actividades se suele llamar proceso.

9 ¿Que es la Concurrencia? (cont.)
En informática se habla de concurrencia cuando hay una existencia simultánea de varios procesos en ejecución. Ojo.... existencia simultánea no significa ejecución simultánea.

10 Trataremos de explicar esto con el sgte. Ejemplo:
El amigo Waldo quiere poner en práctica la siguiente receta: Verter ingrediente uno y dos en un recipiente y batir durante 10 minutos. Dejar reposar 2 minutos. Mezclar el ingrediente tres y cuatro en otro recipiente y batir durante 5 minutos. Calentar 2 minutos Verter la mezcla 1 con la 2. Dejar enfriar y servir.

11 Waldo advierte que hay varias formas de llevarlo a cabo: 1
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 Momento Acciones M1 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

12 2. Un paso tras otro, pero si es posible, no es necesario que un paso anterior se haya concluido. Ejecución CONCURRENTE. Momento Acciones M1 Verter ingredientes uno y dos y batir durante 5 minutos (faltan 5 min. por batir) M2 Mezclar ingredientes tres y cuatro y batir durante 3 minutos (faltan 2 min. por batir). M3 Batir ingredientes uno y dos por los 5 minutos que faltan. M4 Dejar reposar por 2 minutos 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

13 3. Waldo, se da cuenta que puede realizar la receta más rápido 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 Verter ingrediente uno y dos en un recipiente y batir 10 minutos. Mezclar el ingrediente tres y cuatro en otro recipiente y batir por 5 minutos. M2 (continúa el paso 1) Calentar 2 minutos M3 Dejar reposar 2 min. (no hace nada) M4 5) Verter la mezcla 1 con la dos M5 6) Dejar enfriar y servir

14 EJECUCION SECUENCIAL Tiempo P1 P2

15 EJECUCION CONCURRENTE
Tiempo P1 P2

16 EJECUCION PARALELA P1 P2 Tiempo

17 Procesador Es un dispositivo hardware capaz de ejecutar las instrucciones de un proceso. Un procesador puede ejecutar una sola instrucción 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.

18 Proceso 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

19 Hilo 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 están en espacios de direccionamiento distintos. La comunicación 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

20 Proceso e Hilo Proceso Pesado 1 3 PROCESADOR hilos

21 Estados de los procesos
INICIAL LISTO EJECUCION FINALIZADO BLOQUEADO Creación Ocurre Evento Despachar Desalojar Espera Evento Terminar

22 Ejecucion de los procesos
Habiamos dicho que en informatica se habla de concurrencia cuando hay una existencia simultánea de varios procesos en ejecución. 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:

23 Programacion Concurrente.
Disciplina que se encarga del estudio de las notaciones que permiten especificar la ejecución concurrente de las acciones de un programa, así como las técnicas para resolver los problemas inherentes a la ejecución concurrente (comunicación y sincronización)

24 Programacion Concurrente.
Tradicionalmente estuvo asociada al mundo de losSistemas Operativos Primeros programas concurrentes: Diferentes partes del SO en ejecución sin un orden predecible y compartiendo variables => nuevos problemas Tres hitos importantes marcan su evolución: Hilo Aparición de lenguajes de alto nivel que da soporte a la P.C. La aparición de Internet

25 Programacion Concurrente.
EL trabajar con procesos concurrentes añade complejidad a la tarea de programar ¿cuáles son entonces los beneficios que aporta la programación concurrente?

26 Beneficios de la Programación Concurrente
Mejor aprovechamiento de la CPU Velocidad de ejecución Solución de problemas de naturaleza concurrente Sistemas de control Tecnologías web Sistemas de Tiempo Real Simulación SGDB

27 Características de los Programas Concurrentes
Orden de ejecución de las instrucciones Indeterminismo

28 Orden de Ejecución de las instrucciones
La programación secuencial define un orden total de las instrucciones. Ante un conjunto de datos de entrada, el flujo de ejecución es siempre el mismo. Ejemplo: P, Q P: < p1 p2 p pm > Q: < q1 q2 q qn > Secuencial < p1 p2 p pm q1 q2 q qn >

29 Orden de Ejecución de las instrucciones
Un programa concurrente define un orden parcial de ejecución. Ante un conjunto de datos de entrada no se puede saber cual va a ser el flujo de ejecución.

30 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 más difícil analizar y verificar un algoritmo concurrente Ojo, que existan varias posibilidades de salida NO significa necesariamente que un programa concurrente sea incorrecto.

31 Peculiaridades de los programas concurrentes
Los programas concurrentes pueden no terminar nunca y al mismo tiempo ser correctos. Unprograma concurrente puede tener múltiples secuencias de ejecución. Cuando se dice que un programa concurrente es correcto, seentiende que se refiere a todas sus posibles secuencias de ejecución. secuencias de ejecución

32 Problemas inherentes a la Programación Concurrente
Exclusión Mutua Condición de Sincronización Verificación.

33 Exclusión Mutua ¿Cuál será el resultado?
Si dos hilos P1 y P2 utilizan una variable compartida X, y ambos desean realizar alguna actualización de ésta en alguna parte de su código, tendríamos: Hilo P1 Hilo P2 inicio inicio inicio X <-- 0 P1 X <-- X+1 X <-- X+1 P2 fin fin JuntarHilos escribir X fin ¿Cuál será el resultado?

34 Exclusión Mutua ¿en que consiste el problema?
Un lenguaje de alto nivel facilita la programación mediante la abstracción de operaciones máquina en operaciones de alto nivel. Asi, una operación como: A:= A+1 se traduce en el siguiente conjunto de operaciones atómicas. LOAD A, R ADD R, 1 STORE R, A

35 Exclusión Mutua En la ejecución del ejemplo podría 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 podría ser incorrecto.

36 Sección Crítica Porción de código con variables compartidas y que debe ejecutarse en exclusión mutua. Los lenguajes concurrentes deben proporcionar herramientas para resolver este tipo de problemas

37 Exclusión Mutua Problema derivado de la abstracción en los lenguajes de alto nivel Una instrucción de alto nivel se convierte en un conjunto de instrucciones máquina, é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.

38 Exclusión Mutua Garantía de que un único proceso o hilo accede a un recurso en un determinado instante

39 Exclusión Mutua Solución general: inicio .....
<Fase de negociación> Sección – Crítica <Fase de liberación> ...... fin

40 Soluciones de la Exclusión Mutua
Primer Algoritmo Hilo P1 inicio mientras true hacer {sección no crítica} repetir hasta que acceso=1 {sección crítica} acceso=2 fin Hilo P1 inicio mientras true hacer {sección no crítica} repetir hasta que acceso=1 {sección crítica} acceso=2 fin acceso: entero en el rango 1..2 con valor inicial 1

41 Primer algoritmo (comentario)
La solución anterior es incorrecta porque ambos procesos examinan y actualizan una única variable global. Así, si uno de los procesos “muere” se producirá una situación de bloqueo en el otro. Para solventar esta situación, podemos pensar en que cada proceso actúe sobre su propia variable, como se muestra en la figura siguiente.

42 Soluciones de la Exclusión Mutua
Segundo Algoritmo Hilo P1 inicio mientras true hacer {sección no crítica} repetir hasta que C2=1 C1=0 {sección crítica} C1=1 fin Hilo P1 inicio mientras true hacer {sección no crítica} repetir hasta que C1=1 C2=0 {sección crítica} C2=1 fin C1, C2: entero en el rango 0..1 con valor inicial 1

43 Segundo Algoritmo (comentario)
Cada proceso Pi asigna a la variable Ci el valor 0 cuando desea entrar en su sección crítica y el valor 1 Ci cuando la ha concluido. De esta manera, mientras un proceso no está en su sección crítica 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 exclusión mutua, ya que los dos procesos pueden alcanzar sus secciones críticas simultáneamente. En la figura anterior, cuando un proceso concluye el bucle de espera, inicia una secuencia de instrucción que permiten alcanzar sin ninguna prevención su sección crítica. Este conjunto de acciones puedne no ser, no lo son de hecho, atómicas. Por tanto el error está en no considerar las actuaciones sobre las variables de control como sección crítica. Para solucionarlo se puede utilizar el siguiente algoritmo,

44 Soluciones de la Exclusión Mutua
Tercer Algoritmo Hilo P2 inicio mientras true hacer {sección no crítica} C2=0 repetir hasta que C1=1 {sección crítica} C2=1 fin Hilo P1 inicio mientras true hacer {sección no crítica} C1=0 repetir hasta que C2=1 {sección crítica} C1=1 fin C1, C2: entero en el rango 0..1 con valor inicial 1

45 Soluciones de la Exclusión Mutua
Cuarto Algoritmo Hilo P2 inicio mientras true hacer {sección no crítica} C2=0 repetir C2=1 hasta que C1=1 {sección crítica} fin Hilo P1 inicio mientras true hacer {sección no crítica} C1=0 repetir C1=1 hasta que C2=1 {sección crítica} fin

46 Algoritmo de Dekker Hilo p2 Hilo p1 inicio inicio {sección no crítica}
repetir if Acceso = 2 entonces C1 = 1 hasta Acceso = 1 fin hasta que C2 = 1 {sección critica} Acceso = 2 Hilo p2 inicio {sección no crítica} C2 = 0 repetir if Acceso = 1 entonces C2 = 1 hasta Acceso = 2 fin hasta que C1 = 1 {sección critica} Acceso = 1 C1, C2: enteros en el rango 0..1 con valor inicial 1 Acceso: entero en el rango 1..2 con valor inicial 1

47 Propiedades de la Programación Concurrente
Propiedades de seguridad (safety) Exclusión mutua El acceso con exclusión mutua a secciones críticas esta garantizado Sincronización los procesos cumplen con las condiciones de sincronización impuestos por el algoritmo Interbloqueo (pasivo) – deadlock no se produce una situación en la cual todos los procesos participantes quedan atrapados en una espera a una condición que nunco se cumpla.

48 Propiedades de la Programación Concurrente
Propiedades de vivacidad (liveness) Interbloqueo (activo) – livelock puede ocurrir el caso que varios procesos están continuamente competiendo por un recurso de forma activa, pero ningúno de ellos lo consigue (``livelock'') Inanición – starvation un proceso puede ``morirse'' por inanición (``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 competición por los recursos

49 MECANISMOS DE COMUNICACION Y SINCRONIZACION
SEMAFOROS REGIONES CRITICAS CONDICIONALES MONITORES MENSAJES

50 SEMAFOROS Es un mecanismo introducido por Dijkstra y su aplicación permite controlar el acceso exclusivo a recursos compartidos Su aplicación tambien permite la sincronización entre procesos Esta formado de un contador y una cola asociada de procesos o hilos en espera Las operaciones básica sobre el contador son Wait o P y Signal o V

51 TAD Semaforo Nombre del TAD: Semaforo Descripción Genérica del TAD:
Un semáforo es un tipo de datos abstracto que permite el uso de un recurso de manera exclusiva cuando varios procesos están compitiendo. Descripción 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.

52 TAD Semaforo Conjunto de Operaciones:
Semaforo (lista) > Semaforo Semaforo (entero x lista) > Semaforo Wait > Lista Signal > Lista Descripción 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

53 TAD Semaforo Operaciones Primitivas.
Wait : si el contador del semáforo es igual a 0 entonces se lleva el proceso que realiza la operación a la cola asociada con el semáforo suspendiendo su ejecución 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 operación sigue ejecutándose. Esta operación debe ser indivisible

54 TAD Semaforo Signal : se incrementa el valor del contador del semaforo
en una unidad . Esta operación debe ser indivisible. Se toma uno de los procesos que esperan en la cola del semáforo (si hubira) y se le pone en un estado de preparado para ejecutarse. El proceso que realiza la operación sigue ejecutándose

55 Semaforos Solución al Problema de la exclusión mutua Hilo P1 Hilo P2
inicio mientras verdad hacer {sección no crítica} wait(mutex) {sección crítica} signal(mutex) fin Hilo P2 inicio mientras verdad hacer {sección no crítica} wait(mutex) {sección crítica} signal(mutex) fin

56 Tipos de Semáforos Semáforos binarios. Semáforos generales.
Toman valores de 0, 1 Semáforos generales. Toman valores de 0,1,2,3,4.....n

57 Ejemplos Problema de Productores y consumidores

58

59

60

61

62

63

64

65 PROCESO productores VAR pdato : dato; inicio mientras true hacer wait(producir); pdato := producir(); wait(ps); buffer[ent]:= pdato; ent := (ent mod MAX) + 1; signal(ps); signal(consumir); fin fin; (* Productores *) PROCESO consumidores; VAR cdato : dato; inicio mientras true hacer wait(consumir); wait(cs); cdato:= buffer[sal]; sal := (sal mod MAX) + 1; signal(cs); signal(producir); consumir(cdato); fin fin; (* Consumidores *) Inicio {programa principal} CONS MAX = .. ; (* Cap. Buffer *) TYPE dato: .. ; (* Tipo de datos*) VAR buffer :array[1..MAX]of dato; producir, consumir:semaforo; ps, cs: semaforo; ent, sal: integer; initial(ps,1); initial(cs,1); initial(consumir,0); initial(poducir,MAX); ent:=1; sal:=1; {ejecutar concurrentemente} productores; consumidores fin. (* principal *)


Descargar ppt "Programación Concurrente DAI - UNSAAC."

Presentaciones similares


Anuncios Google