Sunteți pe pagina 1din 8

LenguajesdeProgramacin DepartamentodeCs.

eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

LenguajesdeProgramacin
Concurrencia
Ma.LauraCobo

Procesosehilos
Procesos: un programa concurrente consiste de un nmero de

unidades que se ejecutan en paralelo (lgicamente o fsicamente). Cada una de esas unidades conforma un proceso
Hilo: este trmino se utiliza cuando las unidades concurrentes

comparten un solo espacio d di decir tienen t l i de direccionamiento, es d i ti i i t acceso al mismo entorno global.
La diferencia entre estos trminos es de suma importancia en sistemas operativos y programacin de sistemas. En el contexto de lenguajes de programacin, no se suele hacer una distincin entre ambos.

UniversidadNacionaldelSur DepartamentodeCienciaseIngenieradelaComputacin 2011

Si la mquina abstracta que ejecuta el programa no soporta concurrencia, es posible simularla mediante transferencias de control explicitas de una unidad a otra.
2

CategorasdeConcurrencia
La simulacin de concurrencia mediante transferencias de control explicitas resulta una aproximacin de bajo nivel, que es soportada por corrutinas. j Las corrutinas no definen un conjunto de unidades concurrentes. Solo una unidad se ejecuta por vez, la unidad en ejecucin debe transferir el control explcitamente a otra (va resume) el cual retoma la ejecucin en el lugar donde se haba suspendido. Las unidades se activan unas a otra en un modelo de interleaving, de acuerdo al patrn de comportamiento definido en el programa.

Corrutinas:ejemplo
Int i = 0; // variable compartida global

Unit client { int stop_value = .; while (i != stop_value){ .. resume give_me_next; } }

main { resume client; }

Unit give_me_next { int step(){ } for ( ; ;){ i += step(); resume client; } }


4

Concurrencia
La concurrencia puede ocurrir a cuatro niveles:
Nivel instruccin (ejecutar dos o mas instrucciones mquina
simultneamente)

Concurrencia
Evolucin de las arquitecturas multiprocesador:
Dcada del 50: un procesador de propsito general y uno o mas

Nivel sentencia de alto nivel (ejecutar dos o mas sentencias del


lenguaje de programacin simultneamente)

procesadores de propsito especial destinados a las operaciones de entradasalida. Este esquema no requiere soporte en el lenguaje de programacin. mltiples procesadores completos completos, utilizados para concurrencia a nivel programa. Estos procesadores eran utilizados por un planificador de tareas del sistema operativo, quien distribua trabajos de la cola en diferentes procesadores

Comienzo de la dcada del 60:

Nivel unidad (ejecutar dos o mas subprogramasunidades


simultneamente)

Nivel programa (ejecutar dos o ms programas simultneamente)

Como los lenguajes no proveen tems para realizar concurrencia a nivel instruccin ni a nivel programa, slo analizaremos los restantes dos niveles
5

Mediados de la dcada del 60: mltiples procesadores parciales,

utilizados para concurrencia nivel instruccin. Estos procesadores eran alimentados con instrucciones de una misma secuencia. El compilador debe decidir que instrucciones pueden ejecutarse simultneamente y planificarlas en forma acorde.
6

Prof.Ma.LauraCobo

Pgina1

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Concurrencia
Las categoras mas comunes de computadoras multiprocesador son: Arquitectura SIMD: instrucciones simples mltiples datos
Computadoras que tiene mltiples procesadores que ejecutan la misma instruccin simultneamente, cada una sobre diferentes datos. Caractersticas: 1. Cada procesador tiene su memoria local. 2. Un procesador controla la operacin del resto de los procesadores. Debido a que todos los procesadores excepto el controlador, ejecutan la misma instruccin al mismo tiempo, no se requiere sincronizacin en software

CategorasdeConcurrencia
Concurrencia fsica: asumiendo que hay mas de un procesador

disponible, varias unidades del mismo programa son ejecutadas simultneamente


mltiplesprocesadoresindependientes,mltipleshilosdecontrol Un hilo de control en un programa es la secuencia del puntos del programa alcanzados mientras el control fluye por el programa

Concurrencia lgica: una relajacin en el concepto de concurrencia,

Arquitectura MIMD: mltiples instrucciones mltiples datos


Computadoras con mltiples procesadores que operan independientemente pero cuyas operaciones pueden ser sincronizadas. Caractersticas: 1. Cada una ejecuta su propia secuencia de instrucciones. 2. Aparecen en dos configuraciones diferentes: sistemas distribuidos o sistemas memoria compartida 3. Requieren sincronizacin y soporta concurrencia a nivel unidad
7

permite al programador y al software de aplicacin suponer la existencia de mltiples procesadores. La ejecucin real del programa sucede sobre un solo procesador utilizando interleaving

Laaparienciadeconcurrenciafsicaespresentadaportiempocompartido sobreunprocesador(elsoftwaresepuedediseardemaneraquese simulelapresenciademltipleshilosdecontrol)


8

CategorasdeConcurrencia
Cadaprocesadorsehacecargodeunsolohilodecontrol Cuando un programa con mltiples hilos se ejecuta en una mquina con un solo procesador, los hilos son mapeados a un solo hilo. Convirtindose as en un programa mltihilos virtual

Concurrenciaanivelunidad:conceptos
Una tarea o proceso es una unidad que puede ser ejecutada en forma concurrente con otras unidades Caractersticas que diferencian una tarea de una unidad ordinaria:
Una tarea puede ser comenzada en forma implcita Cuando una unidad comienza la ejecucin de una tarea, no necesita

Los lenguajes que proveen corrutinas, son a veces llamados quasi concurrentes ya que solo cuentan con un hilo de control

suspenderse necesariamente
Cuando se completa la ejecucin de una tarea el control puede o no

retornar a la unidad que comenz su ejecucin

10

Concurrenciaanivelunidad:categoras
Categoras de tareas:
Heavyweight task: se ejecutan en su propio espacio de direcciones y

Concurrenciaanivelunidad:sincronizacin
La sincronizacin es el mecanismo que controla el orden en el cual las tareas se ejecutan
Tipos de sincronizacin:
Sincronizacin cooperativa:

tienen sus propias pilas de ejecucin


Lightweight task: corren todas en el mismo espacio de direcciones y

utilizan la misma pila de ejecucin tili l i il d j i Si una tarea no se comunica, ni afecta la ejecucin de otras tareas (de ninguna manera) se dice disjunta.

La tarea A debe esperar que la tarea B complete una actividad especfica antes que la tarea A puede continuar si ejecucin. Ejemplo el problema productorconsumidor
Sincronizacin competitiva:

Dos o mas tareas deben usar un recurso que no puede ser utilizado en forma simultnea. Ejemplo: contador compartido
La competicin es usualmente provista por acceso mutuamente excluyente
11 12

Prof.Ma.LauraCobo

Pgina2

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Concurrenciaanivelunidad:sincronizacin

Concurrenciaanivelunidad:planificador
Al proveer sincronizacin se requieren mecanismos para demorar la ejecucin de una tarea. El control de ejecucin de tareas es mantenido por un programa llamado planificador, que mapea la ejecucin de tareas sobre los procesadores disponibles Las tareas pueden estar en diferentes estados: 1. New: creado pero an no comenzado. 2. Ejecutable o listo: listo para ejecutar pero no corriendo (el procesador no est disponible) 3. Corriendo: ejecutando actualmente 4. Bloqueado: estuvo ejecutndose pero ahora no puede continuar (usualmente esta esperando por la ocurrencia de un evento) 5. Muerto: no est mas activo. Una tarea muere cuando se completa su ejecucin o es matado por el programa.
14

13

Concurrenciaanivelunidad:propiedades
Liveness o vivacidad significa que si un evento (terminacin del programa en forma completa) se supone que suceda, eventualmente ocurrir En programacin secuencial significa que eventualmente la unidad se completa. l En programacin concurrente, las tareas fcilmente pierden la propiedad de vivacidad. Si todas las tareas en un ambiente concurrente pierden su vivacidad, el sistema se encuentra en deadlock
15

Concurrenciaanivelunidad:diseo
Muchos lenguajes han sido desarrollados para soportar concurrencia: El primero fue PL/1, a mediados de la dcada del 60 Incluyendo lenguajes contemporneos como: Ada 95, Java y C# Aspectos de diseo Sincronizacin competitiva y cooperativa Cmo controlar la planificacin de tareas Como y cuando comenzar las tareas y terminar su ejecucin Como y cuando son creadas las tareas
Tres de las soluciones alternativas a los problemas de diseo para concurrencia: Semforos Monitores y Pasaje de mensajes
16

Semforos
Unsemforo esunaestructuradedatos,queconsistedeuncontadory unacolaparaalmacenarlosdescriptoresdelastareas Observacin Los semforos fueron desarrollados por Dijkstra en 1965 Pueden utilizarse para implementar guardas sobre el cdigo que accede a estructuras de datos compartidas. Solo utilizan dos operaciones wait and release. Se pueden utilizar tanto para sincronizacin cooperativa, como para sincronizacin competitiva

Semforos:sincronizacincooperativa
Ejemplo buffer compartido
El buffer es implementado como un tipo de dato abstracto, todo dato

entra al buffer a travs de la operacin DEPOSIT y sale a travs de la operacin FETCH. As la operacin DEPOSIT necesita chequear si el buffer tiene posiciones libres y la operacin FETCH necesita chequear si el buffer contiene al menos un tem. Utilizaremos dos semforos cooperativos: emptyspots y fullspots.

Los semforos llevan un recuento de los lugares vacios y

ocupados en el buffer

17

18

Prof.Ma.LauraCobo

Pgina3

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Semforos:sincronizacincooperativa
La operacin DEPOSIT
Primero chequea el semforo emptyspot para detectar si hay lugar en el

Semforos:sincronizacincooperativa
La operacin FETCH
Primero chequea el semforo fullspots para detectar si hay algn valor

buffer. o Si hay lugar, el contador del semforo emptyspots es decrementado y el valor insertado. o Si no hay lugar, el llamador es almacenado en la cola del semforo emptyspots Cuando la operacin termina se debe incrementar el contador del semforo fullspots.

almacenado en el buffer. o Si hay valores, el contador del semforo fullspots es decrementado y el valor es removido. o Si no hay valores almacenados, el llamador es almacenado en la cola del semforo fullspots Cuando la operacin termina se debe incrementar el contador del semforo emptyspots.

19

20

Semforos:sincronizacincooperativa
La interaccin de las operaciones DEPOSIT y FETCH con los semforos, son realizadas a travs de las operaciones Wait y Release de los semforos. La operacin Wait:
Wait(unSemaforo)
If el contador de unSemaforo > 0 l t d d S f then decrementar el contador de unSemaforo else poner el llamador en la cola de unSemaforo intentar transferir el control a una tarea lista (si la cola de tareas listas esta vaca, ocurre un deadlock) end

Semforos:cdigodelproductorconsumidor
Semaphore fullspot, empyspot; fullspot.count = 0; emptyspot.count = BUFFERLENGTH; Task producer; loop producir valor wait(emptyspot); {esperar por espacio} DEPOSIT(Valor); release(fullspot); {incrementar el nivel de llenado} end loop; end producer; Task consumer; loop wait(fullspot); {esperar hasta que no est vaco} FETCH(Valor); release(emptyspot); {incrementar la cantidad de vacios} consumir el valor end loop; end consumer;
22

La operacin Release:
Release(unSemaforo)
If la cola de unSemaforo est vaca then incrementar el contador de unSemaforo else poner la tarea que hizo el llamado en la cola de tareas listas transferir el control a una tarea de la lista de unSemforo end
21

Semforos:sincronizacincompetitiva
Los semforos para sincronizacin competitiva estn pensados para permitir el acceso de un solo proceso a los datos por lo que compiten Los semforos para sincronizacin competitiva son generalmente llamados semforos binarios, ya que solo toman los valores 0 y 1. Es importante notar que las operaciones wait y release deben ser atmicas Para controlar el acceso al buffer, en el ejemplo, un tercer semforo, access, es utilizado (sincronizacin competitiva)

Semforos:cdigodelproductorconsumidor
Semaphore fullspot, empyspot,access; access.count = 0 fullspot.count = 0; emptyspot.count = BUFFERLENGTH; Task producer; loop l producir valor wait(emptyspot); {esperar por espacio} wait(access); {esperar por acceso} DEPOSIT(Valor); release(access); {liberar el acceso} release(fullspot); {incrementar el nivel de llenado} end loop; end producer; Task consumer; p loop wait(fullspot); {esperar hasta que no est vaco} wait(access); {esperar por acceso} FETCH(Valor); release(access); {liberar el acceso} release(emptyspot); {incrementar la cantidad de vacios} consumir el valor end loop; end consumer; 24

23

Prof.Ma.LauraCobo

Pgina4

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Evaluacindelossemforos
El mal uso de los semforos puede causar fallas en la sincronizacin cooperativa. Puede producirse un overflow en el buffer si se omite accidentalmente el wait del semforo fullspots. De la misma manera p pueden p producirse fallas en la sincronizacin competitiva, conduciendo a deadlocks en caso de omitirse el release del semforo. Lossemforossonunaherramientadesincronizacineleganteidealpara losprogramadoresquenocometenerrores(BrinchHansen,1973)

Monitores
La idea es encapsular los datos compartidos y sus operaciones para restringir el acceso. Unmonitoresuntipodedatoabstractoparadatoscompartidos

Muchos lenguajes proveen la facilidad de definir monitores, algunos de ellos son: Concurrent Pascal, Modula, Mesa, Ada, Java, C#

25

26

Monitores:sincronizacincompetitiva
Los datos estn ahora dentro del monitor en lugar de en las unidades clientes Todos los accesos a los datos dentro del monitor se realizan a travs de sus operaciones Laimplementacindelmonitoraseguraelaccesosincronizado, La implementacin del monitor aseg ra el acceso sincroni ado permitiendosolounaaccesoalavez. Lasllamadasalasunidadesdelmonitorsonimplcitamente encoladassielmonitorestocupadoenelmomentoderealizarla llamada.

Monitores:sincronizacincooperativa
La cooperacin entre procesos sigue siendo un trabajo de programacin. El programador debe seguir garantizando, en la implementacin, que no se produzca overflow o underflow del buffer (en el ejemplo anterior) Los lenguajes proveen diferentes maneras de realizar sincronizacin cooperativa, cooperativa todos terminan estando relacionadas con los semforos semforos.

27

28

Monitores:evaluacin
Brindan un mejor soporte para sincronizacin competitiva que los

Pasajedemensajes
El pasaje de mensajes es un modelo general para concurrencia Puede modelar tanto semforos como monitores. No es solo para sincronizacin competitiva.
Idea central: la comunicacin entre tareas es como una persona

semforos Los semforos pueden utilizarse para implementar monitores Los monitores se pueden utilizar para implementar semforos El soporte para sincronizacin cooperativa es muy similar al que i i i i i il l se provee con semforos, por lo que tiene los mismo inconvenientes.

esperando por una llamada importante. A veces no queda otra que sentarse y esperar. En el caso de las tareas, si la tarea A quiere enviarle un mensaje a la tarea B, y B est esperando el mensaje, el mensaje es enviado. Esta transmisin se conoce como rendezvous. Para que el rendezvous se produzca el emisor y el receptor del mensaje deben querer que la comunicacin se produzca.

29

30

Prof.Ma.LauraCobo

Pgina5

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Pasajedemensajes:rendezvous
Un mecanismo que permite a la tarea indicar cuando esta

SoportedeconcurrenciaenAda
Las tareas en Ada tienen especificacin y cuerpo. Al igual que los paquetes la especificacin tiene la interface, que es una coleccin de puntos de entrada
task TareaEjemplo is entry ENTRY_1 (tem: in integer) end TareaEjemplo

disponible para aceptar mensajes. Las tareas necesitan algn modo de recordar quin est esperando por sus mensajes y una manera justa de elegir el prximo mensaje. mensaje El rendezvous se produce en la transmisin del mensaje; cuando el mensaje de la tarea emisora es aceptado por la tarea receptora Ejemplificaremos el pasaje de mensajes con el lenguaje Ada. Ada 83 soporta pasaje de mensajes sincrnicos, Ada 95 agrega soporte para pasaje de mensaje asincrnico.
31

El cuerpo de la tarea describe las acciones que toman lugar cuando ocurre un rendezvous La tarea que enva el mensaje suspende mientras espera el mensaje de aceptacin y durante el rendezvous. Los puntos de entrada en la especificacin son descriptos como clusulas accept en el cuerpo
accept NombreEntrada(parmetros formales) do .. end NombreEntrada
32

SoportedeconcurrenciaenAda
task body TareaEjemplo is begin loop accept ENTRY_1 (tem: in integer) do . end ENTRY_1; end loop end TareaEjemplo

SoportedeconcurrenciaenAda

La tarea ejecuta desde el comienzo hasta la clausula accept y espera por un mensaje. Durante la ejecucin del la clausula accept el emisor est suspendido. Los parmetros del accept pueden transmitir informacin en una o las dos direcciones. Cada clusula accept tiene asociada un cola que almacena los mensajes en espera.
33 34

SoportedeconcurrenciaenAda
Una tarea que tiene clausulas accept, pero no otro cdigo es llamada tarea servidora. Una tarea que no tiene clausulas accept es llamada tarea actora. Estos tipos de tareas pueden enviar mensajes a otras tareas. p (entry) y) Importante: el emisor debe conocer el nombre de la entrada ( del receptor pero no viceversa (comunicacin asimtrica)

SoportedeconcurrenciaenAda
Las tareas pueden tener mas un punto de entrada Cada uno requiere una clausula accept El cuerpo de la tarea tiene una clausula accept para cada entrada colocada en una clausula select dentro de un ciclo
task body TareaEjemplo is begin b i loop select accept ENTRY_1 (tem: in integer) do . end ENTRY_1; or accept ENTRY_2 (tem: in integer) do . end ENTRY_2; end select end loop end TareaEjemplo

35

36

Prof.Ma.LauraCobo

Pgina6

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

Semnticadetareasconmltipleselecciones
1. Si slo una cola de entry no est vaca, elegir un mensaje de ella. 2. Si hay mas de una cola no vaca, elegir una en forma no

Sincronizacincooperativa
Cada clausula accept puede tener una guarda adosada, en la forma de clausula when que puede demorar el rendezvous. Por ejemplo: When not lleno(buffer)=>acceptDeposit(nuevoValor)do Cada clausula accept puede estar entonces: 1. Abierta: si la expresin booleana sea verdadera. 2. Cerrada: en caso de que la expresin sea falsa. Las clausulas sin guarda siempre estn abiertas

determinista, y de ella aceptar un mensaje.


3. Si todas estn vacas entonces esperar

Al constructor usualmente se lo llama selective wait. Generalmente se encuentra dentro de un bucle infinito

37

38

Semnticadelselectconacceptsconguardas
La clausula select chequea las guardas de todas las clausulas 1. Si exactamente una esta abierta, se controla la cola por mensajes. 2. Si mas de una est abierta, de elige en forma no determinista una y se cheque por mensajes. h j 3. Si estn todas cerradas entonces se produce un error en ejecucin. La clausula select puede incluir una clausula else para evitar el error. Cuando la clausula else se completa se vuelve a repetir el ciclo

Terminacindetareas
La ejecucin de una tarea se completa si el control alcanza el fin del cdigo del cuerpo. Un tarea est terminada si la tarea no ha creado tareas dependientes y se completa Si una tarea se completa pero ha creado tareas dependientes no dependientes, est terminada hasta que las tareas dependientes terminen La clausula terminate en un select es solo una sentencia de terminacin. La clausula terminate solo puede seleccionarse cuando no hay clausulas abiertas en el select. La ejecucin de clausula terminate completa la tarea, la termina si sus dependientes estn terminados.
40

39

ConcurrenciaenAda95
Ada 95 agrega: Objetos protegidos: una manera ms eficiente de implementar datos compartidos y permitir el acceso a estructuras compartidas sin utilizar rendezvous. Comunicacin asincrnica C i i i i

EvaluacindelaconcurrenciaenAda

Modelodeconcurrenciabasadoenpasajedemensajes (mecanismogeneralpoderoso) Conausenciadeprocesadoresmltiples,elusodemonitoresy tareasquesecomunicanconmensajesessolounacuestinde gustos. gustos Parasistemasdistribuidoselmodelobasadoenmensajesesun mejormodelodeconcurrencia

41

42

Prof.Ma.LauraCobo

Pgina7

LenguajesdeProgramacin DepartamentodeCs.eIngenieradelaComputacin

UniversidadNacionaldelSur PrimerCuatrimestrede2011

ConcurrenciaenJava

ConcurrenciaenJava
Laclasethread tienevariosmtodosparacontrolarlaejecucinde loshilos: Yield:esunrequerimientodelhiloenejecucinacederel procesadorenformavoluntaria. sleep:esunmtodoquepuedeprovocarqueelllamadora unmtodobloqueeelhilo. d bl l hil join:esunmtodoqueseutilizaparaforzaraunmtodoa demorarsuejecucinhastaqueelmtodorundeotrohilo completesuejecucin

ElmodelodeconcurrenciaenJavaesrelativamentesimplepero efectivo. NoresultatanpoderosocomolastareasdeAda

y LaconcurrenciaenJavaestadadaanivelunidadysonmtodos llamadosrun. Unmtodorun puedeestarenejecucinconcurrentecon otrosprocesosrun. Elprocesoenelcualelmtodorun seejecutasellama thread.

43

44

ConcurrenciaenJava:sincronizacincompetitiva
Unmtodoqueincluyeelmodificadorsynchronized imposibilita queotromtodosepuedaejecutarsobreelobjetomientrasel primeroestenejecucin.
. Publicsynchronizedvoiddeposito(intmonto){.} Publicsynchronizedintextraccion(){}

ConcurrenciaenJava:sincronizacincooperativa
Lasincronizacincooperativaselograutilizandolosmtodos:wait, notify ynotifyall. Elmtodowait debeserllamadoenunciclo. Elmtodonotify esllamadoparaindicaraunhiloenespera queeleventoqueestabaesperandosucedi. que el evento que estaba esperando sucedi Elmtodonotifyall despiertaatodosloshilosqueestnen lalistadeesperadelobjeto.

Estosdosmtodossonsincronizadosporlosqueseevitaqueuno interfieraconelotro Siserequieresincronizarsolopartedelmtodosepuedeutilizarel atributosynchronized parasentencias


synchronized(expresion)sentencia
45

46

Concurrenciaanivelsentencia
Objetivo:proveerunmecanismoparaqueelprogramadorpueda utilizarparainformaralcompiladordemanerasenlasque puedemapearelprogramaenunaarquitectura multiprocesador. Seintentaminimizarlacomunicacinentreprocesadoresylas Se intenta minimizar la comunicacin entre procesadores y las memoriasdelosotrosprocesadores Lainstruccinforall esunejemplodeconcurrenciaanivel instruccin. Atravsdeellaseespecificanunalistadesentenciasquepueden ejecutarseenformaconcurrente
Forall(index=1:1000)list_1(index)=list_2(index) Indicaquetodoslosladosderechosdelas1000asignacionespueden evaluarseantesdequeseproduzcaalgunaasignacin

47

Prof.Ma.LauraCobo

Pgina8

S-ar putea să vă placă și