1 / 46

Seminario de Lenguajes A – Opción Ada

Tasking. Seminario de Lenguajes A – Opción Ada. Hasta ahora: Un conjunto de instrucciones que se ejecutan una después de otra Existe otra posibilidad: Varios conjuntos de instrucciones ejecutando al mismo tiempo Concurrencia y paralelismo

ellard
Download Presentation

Seminario de Lenguajes A – Opción Ada

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tasking Seminario de Lenguajes A – Opción Ada • Hasta ahora: • Un conjunto de instrucciones quese ejecutan una después de otra • Existe otra posibilidad: • Varios conjuntos de instruccionesejecutando al mismo tiempo • Concurrencia y paralelismo • En Ada, el mecanismo de especificación de concurrencia se llama TASK (tarea) • Un task es una entidad que se ejecuta simultáneamente con el resto del programa Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 1

  2. Tasking Seminario de Lenguajes A – Opción Ada • Task • Especificación • Declara la parte visible desde el exterior • Define cuáles son los “servicios” que provee • Cuerpo • Determina el comportamientode la tarea Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 2

  3. Tasking Seminario de Lenguajes A – Opción Ada • Ejemplo: • sumar los elementos de las columnas de una matriz deenteros generando un vector de enteros subtype Filas is integer range 1..7; subtype Columnas is integer range 1..5; type Vector is array (Columnas) of integer; type Matriz is array (Filas) of Vector; ---------------------------------- M: Matriz := (others => (others => 1)); V: Vector := (others => 0); ---------------------------------- task Sumador1; task body Sumador1 is begin for I in Filas loop V(1) := V(1) + M(I)(1); end loop; end Sumador1; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 3

  4. Tasking Seminario de Lenguajes A – Opción Ada • Si se precisan varias variables array, entonces se define un tipo array • De igual manera, si se precisan varias tareas iguales, entonces se define un “tipo tarea” • Ejemplo: • Programa y tareas que escriben “Hola Mundo” task type Tarea; task body Tarea is begin Put_Line("Hola Mundo 1 (Tarea)"); Put_Line("Hola Mundo 2 (Tarea)"); Put_Line("Hola Mundo 3 (Tarea)"); end Tarea; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 4

  5. Tasking Seminario de Lenguajes A – Opción Ada • Ejemplo: Trenes • 2 Trenes • Para entrar al cruce, cada tren debepedir permiso al guarda barrera • Al salir del cruce, el tren debeavisar al guarda barrera • 1 Guarda barrera • Publica 2 servicios • Pedido de permiso para entrar al cruce • Aviso de salida del cruce Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 5

  6. Tasking Seminario de Lenguajes A – Opción Ada • Ejemplo: Trenes Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 6

  7. Tasking Seminario de Lenguajes A – Opción Ada • Los entries pueden tener parámetros CantTrenes: constant integer := 5; subtype TrenId is integer range 1..CantTrenes; task type Tren is entry Identificacion(Id: in TrenId); end Tren; task GuardaBarrera is entry EntrarAlCruce(Id: in TrenId); entry SalirDelCruce(Id: in TrenId); end GuardaBarrera; Trenes: array (TrenId) of Tren; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 7

  8. Tasking Seminario de Lenguajes A – Opción Ada • Los entries pueden tener parámetros task body Tren is MiId: TrenId; begin accept Identificacion(Id: in TrenId) do MiId := Id; end Identificacion; loop -- girando GuardaBarrera.EntrarAlCruce(MiId); -- pasando por el cruce GuardaBarrera.SalirDelCruce(MiId); -- salío del cruce end loop; end Tren; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 8

  9. Tasking Seminario de Lenguajes A – Opción Ada • Los entries pueden tener parámetros task body GuardaBarrera is begin loop accept EntrarAlCruce(Id: in TrenId) do Put("Entro al cruce "); Put(Id); end EntrarAlCruce; accept SalirDelCruce(Id: in TrenId) do Put(" Salio del cruce "); Put(Id); New_Line; end SalirDelCruce; end loop; end GuardaBarrera; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 9

  10. Tasking Seminario de Lenguajes A – Opción Ada • Los entries pueden tener parámetros with Text_IO; use Text_IO; procedure Clase9_Trenes2 is ....... begin for I in TrenId loop Trenes(I).Identificacion(I); end loop; end Clase9_Trenes2; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 10

  11. Tasking Seminario de Lenguajes A – Opción Ada Entrycall • Rendezvouz (primero entry call) Running asynchronously Running asynchronously Suspended Suspended Requestor Rendezvouz Server Running synchronously Running asynchronously Running asynchronously Acceptstatement Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 11

  12. Tasking Seminario de Lenguajes A – Opción Ada Entrycall • Rendezvouz (primero accept) Running asynchronously Running asynchronously Suspended Requestor Rendezvouz Server Suspended Running asynchronously Running synchronously Running asynchronously Acceptstatement Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 12

  13. Tasking Seminario de Lenguajes A – Opción Ada Delay statementWait for acceptWait for entry call • Estados de ejecución de las tareas Executing Suspended Activation Delay completeRendezvouz completeRendezvouz starts Reach endof task body Completed Dependenttasks terminated Terminated Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 13

  14. Tasking Seminario de Lenguajes A – Opción Ada • Los recursos compartidos entre tareas deberían ser administrados (ej: variable compartida) task CountingTask is entry Add(Amount: in integer); end CountingTask; task body CountingTask is Runningtotal: integer := 0; begin loop accept Add(Amount: in integer) do Runningtotal := Runningtotal + Amount; end Add; end loop; end CountingTask; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 14

  15. Tasking Seminario de Lenguajes A – Opción Ada • Si pueden llegar dos posibles entries call => Selective accept task CountingTask is entry Add(Amount: in integer); entry CurrentTotal(Total: out integer); end CountingTask; task body CountingTask is RunningTotal: integer := 0; begin loop select accept Add(Amount: in integer) do RunningTotal := RunningTotal + Amount; end Add; or accept CurrentTotal(Total: out integer) do Total := RunningTotal; end CurrentTotal; end select; end loop; end CountingTask; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 15

  16. Tasking Seminario de Lenguajes A – Opción Ada • Guarda: un entry call se acepta o no según una condición task CountingTask is entry Add(Amount: in integer); entry CurrentTotal(Total: out integer); end CountingTask; task body CountingTask is RunningTotal: integer := 0; begin loop select when RunningTotal > 1000 then accept Add(Amount: in integer) do RunningTotal := RunningTotal + Amount; end Add; or accept CurrentTotal(Total: out integer) do Total := RunningTotal; end CurrentTotal; end select; end loop; end CountingTask; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 16

  17. Tasking Seminario de Lenguajes A – Opción Ada • Alternativa accept Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 17

  18. Tasking Seminario de Lenguajes A – Opción Ada • Más alternativas del select: temporizada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 18

  19. Tasking Seminario de Lenguajes A – Opción Ada • Más alternativas del select: else Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 19

  20. Tasking Seminario de Lenguajes A – Opción Ada • Más alternativas del select: terminación Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 20

  21. Tasking Seminario de Lenguajes A – Opción Ada • Resumen sintáctico del select Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 21

  22. Tasking Seminario de Lenguajes A – Opción Ada • Hasta acá => selective accept • Pero en realidad, las sentencias select tienen tres formas distintas: select_statement ::= selective_accept | conditional_entry_call | timed_entry_call Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 22

  23. Tasking Seminario de Lenguajes A – Opción Ada • Conditional entry calls • Si el entry call no es aceptado inmediatamente, se cancela y se ejecutan las sentencias del else Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 23

  24. Tasking Seminario de Lenguajes A – Opción Ada • Timed entry calls • Se ejecuta el entry call el cual es cancelado si no es aceptado antes de la expiración del tiempo. Si el tiempo expira, se ejecutan las sentencias del or delay Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 24

  25. Tasking Seminario de Lenguajes A – Opción Ada • Atributos de tareas y entries • Siendo T una tarea: • T’Callable: true si es callable y false si no. Una tarea es callable a menos que esté completada o haya terminado anormalmente • T’Terminated: true si T está terminada, false en caso contrario • Siendo E un entry de una tarea: • E’Count: cantidad de entry calls encolados en el entry E Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 25

  26. Tasking Seminario de Lenguajes A – Opción Ada • Concurrencia. Conceptos • Deadlock: abrazo mortal • Un subconjunto de procesos no puede continuar su ejecución pues cada uno de ellos espera por un evento que sólo puede producir otro de ellos • Inanición • En la competencia entre procesos por obtener acceso exclusivo a algún recurso, siempre resulta perjudicado el mismo proceso • Fairness • Acceso equilibrado o equitativo a los recursos Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 26

  27. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Filósofos • Problema • Propuesto por Dijkstra en 1965 • Una mesa con 5 plato y 5 palillos • Alrededor de la mesa, 5 filósofos generalmente piensan, pero cada tanto les agarra hambre • Para comer necesitan los 2 palillos • Primera solución • Tomar el palillo derecho y luego el izquierdo=> Posible deadlock Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 27

  28. Tasking Seminario de Lenguajes A – Opción Ada • Familia de entries • entry identifier [(discrete_subtype)][parameters]; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 28

  29. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Filósofos • Otra solución: con familia de entries Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 29

  30. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Lectores y Escritores • Problema • Propuesto por Courtois en 1971 • Control de acceso a base de datos compartida por procesos lectores y procesos escritores • Pueden acceder varios lectores simultáneamente • Un escritor accede en forma exclusiva con respecto tanto a los lectores como a los escritores • Primera aproximación • Administrador de acceso • Permiso a lectores si no hay escritor accediendo • Permiso a escrito si no hay lectores ni otro escritor accediendo Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 30

  31. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Lectores y Escritores Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 31

  32. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Lectores y Escritores Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 32

  33. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos:Lectores y Escritores • Con la primeraaproximación losescritores pueden sufrir de inanición • Segunda aproximación • Se incorpora un “turno” Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 33

  34. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos:Lectores y Escritores • Pero si no hay procesosdel turno correspondienteesperando acceder a labase de datos? • Tercera aproximación • Turno y cantidad de procesos en espera Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 34

  35. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Productores/consumidores • Problema • Buffer limitado • Procesos productores ponen elementos en el buffer • Si no hay lugares libres, deben esperar a que haya • Procesos consumidores quitan elementos del buffer • Si el buffer está vacío, deben esperar que haya algún elemento Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 35

  36. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Productores/consumidores Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 36

  37. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Productores/consumidores Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 37

  38. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Productores/consumidores con pares e impares • Problema • Buffer limitado • Procesos productores ponen elementos en el buffer • Si no hay lugares libres, deben esperar a que haya • Procesos consumidores quitan elementos pares del buffer • Si el buffer está vacío, deben esperar que haya algún elemento y que el próximo sea par • Procesos consumidores quitan elementos impares del buffer • Si el buffer está vacío, deben esperar que haya algún elemento y que el próximo sea impar Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 38

  39. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Productores/consumidores con pares e impares Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 39

  40. Tasking Seminario de Lenguajes A – Opción Ada • Problemas clásicos: Productores/consumidores con pares e impares Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 40

  41. Seminario de Lenguajes A – Opción Ada Tasking • Productores/consumidores en Java Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 41

  42. Seminario de Lenguajes A – Opción Ada Tasking • Productores/consumidores en Java Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 42

  43. Seminario de Lenguajes A – Opción Ada Tasking • Productores/consumidores en Java Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 43

  44. Seminario de Lenguajes A – Opción Ada Tasking • Comparación Concurrencia Ada - Java • Ada provee un modelo general de alto nivel, basado en la comunicación explícita (rendezvouz) • Mientras que Java se basa en los monitores clásicos, siendo entonces susceptible al problema de deadlock conocido como “nested monitor” y es propenso a errores. • Aunque ciertos elementos del modelo de threads de Java proveen funcionalidad que no se encuentra en Ada (ej.: grupos de threads), la aproximación de Ada a la concurrencia es más confiable y más “portable” que la de Java. • Ver “weblidi.info.unlp.edu.ar/catedras/ada/Brosgol_CRT.pdf” Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 44

  45. Tasking Seminario de Lenguajes A – Opción Ada • Problema: Concurrencia Recursiva • Buscar un elemento en un vector sin orden, utilizando búsqueda binaria concurrente • El vector es dividido recursivamente en dos partes. • Cada parte del vector es procesada por una nueva tarea • Cada tarea se fija si el elemento buscado es el del medio del vector, y si no lo es crea dos tareas y le asigna una mitad del vector a cada una Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 45

  46. Tasking Seminario de Lenguajes A – Opción Ada • Problema: Concurrencia Recursiva (2da. aproxim.) • En la solución anterior, la “rama” de tareas que no encuentra el elemento, sigue procesando hasta el final • Entonces, ponemos una tarea “global” a la que todas las demás le consultan si el elemento ya fue encontrado, y la que lo encuentra, le informa que ya se encontró • Cada tarea, antes de crear a sus dos hijas, pregunta a la tarea global si ya se encontró el elemento buscado. Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 46

More Related