Lección 9: Programación concurrente con semáforos
|
|
|
- Felisa Chávez Ortega
- hace 9 años
- Vistas:
Transcripción
1 Lección 9: Programación concurrente con semáforos Semáforos: sintaxis y semántica Técnicas de programación con semáforos: el ejemplo de la sección crítica un ejemplo de barreras el caso de productores/consumidores con buffer de capacidad 1 el caso de productores/consumidores con buffer de capacidad k>1 Más sobre sincronización en Ada: objetos protegidos J. Ezpeleta 1
2 Semáforos: sintaxis y semántica La sincronización por espera activa tiene inconvenientes: los algoritmos son difíciles de diseñar y verificar se mezclan variables del problema a resolver y del método de resolución en los casos de multi-programación, se ocupa innecesariamente el procesador haciendo nada Los semáforos son una de las primeras soluciones son una solución conceptual, que puede implemetarse de diferentes formas Propuestos por Dijkstra en 1968 J. Ezpeleta 2
3 Semáforos: sintaxis y semántica P V signal Semáforo: instancia de un tipo abstracto de dato, con sólo dos operaciones...: wait: el proceso se detiene hasta que ocurra cierto evento send: el proceso avisa de la ocurrencia de un evento... y la siguiente propiedad: Invariante de un semáforo: Sea S un semáforo con un valor inicial asociado entero S 0, sean nw y ns los números de operaciones wait y send ejecutadas sobre S. En todos los estados visibles del programa se ha de cumplir que I S : nw <= ns + S 0 Notar que puede obligar a que una operación wait se retrase: permite la sincronización J. Ezpeleta 3
4 Semáforos: sintaxis y semántica Una forma de ver un semáforo S: variable entera no negativa con un valor inicial S 0 el valor del semáforo es S = S 0 + ns - nw con lo que el invariante se puede escribir I S : S >= 0 Sintaxis y semántica de los operadores wait y send: wait(s): <await (S>0) S:=S-1> send(s): <S:=S+1> J. Ezpeleta 4
5 Semáforos: sintaxis y semántica Caso particular: semáforos binarios wait y send para semáforos binarios: I B : 0 <= B <= 1 wait(b): <await (B>0) B:=B-1> send(b): <await (B<1) B:=B+1> Asumiremos en nuestro lenguaje el tipo predefinido semáforo: Vars mutex:sem := 0 m:vector(1..n) de sem := (1..n,3) J. Ezpeleta 5
6 Semáforos: sintaxis y semántica Reglas para semáforos generales: (Q S>0) R S S {Q} wait(s) {R} Q R S S {Q} send(s) {R} Reglas para semáforos binarios: (Q B>0) R B B {Q} wait(b) {R} (Q B<1) R B B {Q} send(b) {R} Los semáforos se pueden usar para implementar protocolos de sección crítica vamos a ver algunos ejemplos J. Ezpeleta 6
7 El ejemplo de la sección crítica Vars en:vector(1..n) de Ent:=(1..n,0) P(i:1..n):: --en(i)=0 en(i):=1 --en(i)=1 seccrit en(i):=0 --en(i)=0 secnocrit I: en(1)+..+en(n)<=1 Vars en:vector(1..n) de Ent:=(1..n,0) P(i:1..n):: --en(i)=0 I <await???? en(i):=1 > --en(i)=1 I seccrit <await???? en(i):=0 > --en(i)=0 I secnocrit J. Ezpeleta 7
8 El ejemplo de la sección crítica Vars en:vector(1..n) de Ent:=(1..n,0) P(i:1..n):: --en(i)=0 I <await en(1)+..+en(n)=0 en(i):=1 > --en(i)=1 I seccrit en(i):=0 --en(i)=0 I secnocrit I: en(1)+..+en(n)<=1 Vars libre:sembin:=1 P(i:1..n):: --en(i)=0 I wait(libre) --en(i)=1 I seccrit send(libre) --en(i)=0 I secnocrit J. Ezpeleta 8
9 El ejemplo de la sección crítica Bajo determinadas condiciones, acciones atómicas se pueden sustituir por operaciones sobre semáforos Es necesario que concurran las siguientes circunstancias: guardas distintas se refieren a variables distintas, y éstas sólo se referencian en inst. atómicas cada guarda es (se puede poner) de la forma expr > 0 cada inst. atómica guardada contiene una asignación decrementando el valor de expr cada inst. atómica no guardada incremente expr en una unidad Entonces un semáforo para cada guarda variables en las guardas se convierten en auxiliares cada inst. atómica se puede poner como inst. sobre semáforos J. Ezpeleta 9
10 Un ejemplo de barreras Problema: algoritmo para dos procesos iterativos que sincronizan cada iteración mediante una barrera Sincronización: dos variables por proceso que contabilizan el número de veces que cada proceso alcanza o deja atrás la barrera de sincronización llega i : proceso i llega a la barrera (está esperando al otro) deja i : proceso i pasa la barrera (y vuelve a iterar) Objetivo: que un proceso no pueda pasar la barrera antes de que el otro llegue a la misma I: deja1<=llega2 deja2<=llega1 J. Ezpeleta 10
11 Un ejemplo de barreras Vars llega1:ent:=0,deja1:ent:=0 llega2:ent:=0,deja2:ent:=0 P1:: P2:: llega1=deja1 --llega2=deja2 <llega1:=llega1+1> <llega2:=llega2+1> --llega1=deja1+1 --llega2=deja2+1 <deja1:=deja1+1> <deja2:=deja2+1> --llega1=deja1 --llega2=deja I: deja1<=llega2 deja2<=llega1 J. Ezpeleta 11
12 Un ejemplo de barreras Vars llega1:=0,deja1:=0 llega2:=0,deja2:=0 --I P1::... --I llega1=deja1 <llega1:=llega1+1> --I llega1=deja1+1 <await deja1<llega2 deja1:=deja1+1 > --I llega1=deja1... I: deja1<=llega2 deja2<=llega1 P2::... --I llega2=deja2 <llega2:=llega2+1> --I llega2=deja2+1 <await deja2<llega1 deja2:=deja2+1 > --I llega2=deja2... J. Ezpeleta 12
13 Un ejemplo de barreras I: deja1<=llega2 deja2<=llega1 Vars bar1:sem:=0 bar2:sem:=0 P1:: P2:: send(bar1) send(bar2) wait(bar2) wait(bar1) J. Ezpeleta 13
14 El caso de los productores-consumidores... Problema tenemos un sistema con M productores y N consumidores para comunicar, disponen de un buffer compartido con capacidad para un único mensaje un productor pone mensajes en el buffer operación pon un consumidor consume mensajes del buffer operación quita requisitos: no debe haber pérdida de mensajes un mensaje no debe ser leído por más de un consumidor J. Ezpeleta 14
15 El caso de los productores-consumidores... Productor:: Vars m:mensaje prepara m pon m Consumidor:: Vars m:mensaje quita m usa m Vars buff:buffer ep:=0,tp:=0,ec:=0,tc:=0 Productor(1..M):: Vars m:mensaje prepara m <await ep<tc+1 ep:=ep+1 > buff:=m <tp:=tp+1> I: ep<=tc+1 ec<=tp Consumidor(1..N):: Vars m:mensaje <await ec<tp ec:=ec+1 > m:=buff <tc:=tc+1> usa m J. Ezpeleta 15
16 El caso de los productores-consumidores... Una solución con semáforos Vars buff:buffer I: huecovacio+huecolleno {0,1} huecovacio:sem:=1,huecolleno:sem:=0 Productor(1..M):: Vars m:mensaje produce m wait(huecovacio) buff:=m send(huecolleno) Consumidor(1..N):: Vars m:mensaje wait(huecolleno) buff:=m send(huecovacio) usa m J. Ezpeleta 16
17 El caso de los productores-consumidores... El problema es el mismo que antes, pero el buffer es capaz de almacenar K mensajes entonces: no K+1 pon seguidos, ni K+1 quita seguidos todo quita debe ir precedido por al menos pon La solución es análoga con las salvedades: una cola de hasta K mensajes el invariante será I: ep<=tc+k ec<=tp J. Ezpeleta 17
18 El caso de los productores-consumidores... un productor y un consumidor I: huecovacio+huecolleno {0..K} Vars buff:cola(k) huecovacio:sem:=k,huecolleno:sem:=0 Productor:: Vars m:mensaje prepara m wait(huecovacio) encolar(m,buff) send(huecolleno) Consumidor:: Vars m:mensaje wait(huecolleno) desencolar(m,buff) send(huecovacio) usar m J. Ezpeleta 18
19 El caso de los productores-consumidores... I: ep<=tc+k ec<=tp Vars buff:cola(k) ep:=0,tp:=0,ec:=0,tc:=0 Productor(1..M):: Vars m:mensaje prepara m <await ep<tc+k ep:=ep+1 > <encolar(m,buff)> <tp:=tp+1> Consumidor(1..N):: Vars m:mensaje <await ec<tp ec:=ec+1 > <desencolar(m,buff)> <tc:=tc+1> usa m J. Ezpeleta 19
20 El caso de los productores-consumidores... M productores N consumidores I: huecovacio+huecolleno {0..K}... Vars buff:cola(k) huecovacio:sem:=k,huecolleno:sem:=0 unopone:sem:=1,unoquita:sem:=1 Productor(1..M):: Vars m:mensaje prepara m wait(huecovacio) wait(unopone) encolar(m,buff) send(unopone) send(huecolleno) Consumidor(1..N):: Vars m:mensaje wait(huecolleno) wait(unoquita) desencolar(m,buff) send(unoquita) send(huecovacio) usar m J. Ezpeleta 20
21 El caso de los productores-consumidores... M productores N consumidores I: huecovacio+huecolleno {0..K}... Vars buff:cola(k) huecovacio:sem:=k,huecolleno:sem:=0 unopone:sem:=1,unoquita:sem:=1 Productor(1..M):: Vars m:mensaje prepara m wait(huecovacio) wait(mutexbuff) encolar(m,buff) send(mutexbuff) send(huecolleno) Consumidor(1..N):: Vars m:mensaje wait(huecolleno) wait(mutexbuff) desencolar(m,buff) send(mutexbuff) send(huecovacio) usar m J. Ezpeleta 21
22 Ejercicios Ejercicio 1: dar una solución al problema de la barrera para n procesos Ejercicio 2: completar los procesos siguientes de manera que d no se puede ejecutar hasta que a haya acabado P1:: a b P2:: c d Ejercicio 3: completar los procesos siguientes de manera que P2 puede ejecutar d si se ha ejecutado e ó a P1:: a b P2:: c d P3:: e f J. Ezpeleta 22
23 Implementación de semáforos en Ada Dos alternativas básicas para implementar semáforos: como tarea uso de objetos protegidos task type semaforo(valorinicial: natural) is entry wait; entry send; end semaforo; task body semaforo is elvalor: natural := valorinicial; begin loop select when elvalor > 0 => accept wait do elvalor := elvalor-1; end wait; or accept send do elvalor := elvalor+1; end send; or terminate; end select; end loop; end semaforo; J. Ezpeleta 23
24 Implementación de semáforos en Ada Como paquete, mejor: package semaforos is task type semaforo (valorinicial: natural) is entry wait; entry send; end semaforo; end semaforos; package body semaforos is task body semaforo is elvalor: natural := valorinicial; begin loop select when elvalor > 0 => accept wait do elvalor := elvalor-1; end wait; or accept send do elvalor := elvalor+1; end send; or terminate; end select; end loop; end semaforo; end semaforos; J. Ezpeleta 24
25 with semaforos; use semaforos; Implementación de semáforos en Ada procedure productoresconsumidoressimple is m: constant integer := 3; n: constant integer := 5; buff: integer; huecovacio: semaforo(1); huecolleno: semaforo(0); task type productor; task type consumidor; task body productor is mens: integer; begin loop mens :=...; huecovacio.wait; buff := mens; huecolleno.send; end loop; end productor; task body consumidor is mens: integer; begin loop huecolleno.wait; mens := buff; huecovacio.send; end loop; end consumidor; productores: array(1..m) of productor; consumidores: array(1..n) of consumidor; begin null; end productoresconsumidoressimple; J. Ezpeleta 25
26 Más sincronización en ADA: tipos protegidos Métodos de sincronización en ADA: variables compartidas citas objetos protegidos Objeto protegido encapsula datos restringe el acceso a los procs/funcs protegidos y a las entry protegidas ADA asegura que la ejecución de los procs/funcs y entry se lleva a cabo en exclusión mutua implica acceso en mutex a lectura/escritura sobre las variables funciones: no pueden modificar las variables varios accesos concurrentes a funciones (respetando lo anterior) J. Ezpeleta 26
27 Más sincronización en ADA: tipos protegidos Ejemplo: un entero con acceso en exclusión mutua protected type shared_integer(initial_value: integer) is function read return integer; procedure write(new_value: integer); procedure increment(by: integer); private the_data: integer := initial_value; end shared_integer; es un tipo limited (no = := ) interfaz: procs, funcs, entries discriminante: discreto/puntero Orden de servicio? el ARM no lo especifica Todos los datos en la parte privada (no en el body) protected body shared_integer is function read return integer is begin return the_data; end; procedure write(new_value: integer) is begin the_data:= new_value; end; procedure increment(by: integer)is begin the_data:= the_data + by; end; end shared_integer; J. Ezpeleta 27
28 Más sincronización en ADA: tipos protegidos Sobre las entries protegidas: también se ejecutan en mutex puede leer/escribir sobre las variables privadas siempre está guardada (barrera) si barrera no activa, la tarea que llama se queda en suspenso hasta que se haga cierta y no haya otra tarea activa en el cuerpo implementación natural para la sincronización por condición una estrategia FIFO (salvo cambio forzado, claro) el que llama puede poner la llamada en el marco de un select (con las mismas restricciones que quien acudía a citas ofertadas por tareas) Un ejemplo: un buffer limitado compartido por varias tareas J. Ezpeleta 28
29 Más sincronización en ADA: tipos protegidos buffer_size: constant integer := 10; type index is mod buffer_size; subtype count is natural range 0..buffer_size; type buffer is array(index) of data_item; protected type bounded_buffer is entry get(item: out data_item); entry put(item: in data_item); private first: index := index first; last: index := index last; number_in_buffer: count := 0; buf: buffer; end bounded_buffer; my_buffer: bounded_buffer... my_buffer.put(my_item)... protected body bounded_buffer is entry get(item: out data_item) when number_in_buffer /= 0 is begin item := buf(first); first := first + 1; number_in_buffer := number_in_buffer - 1; end; entry put(item: in data_item) when number_in_buffer < buffer_size is begin last := last + 1; buf(last) := item; number_in_buffer := number_in_buffer + 1; end; end bounded_buffer; J. Ezpeleta 29
30 Más sincronización en ADA: tipos protegidos Las barreras de las entradas protegidas se (re) evalúan cuando: una tarea invoca una entry vacía una tarea termina de ejecutar un procedimiento o entrada protegida y quedan tareas en la cola de alguna entrada cuya barrera usa alguna variable modificada desde la última vez que se evaluó Qué pasa en el caso de las funciones? ojo con el uso de variables modificables por una función interna o una tarea externa Ojo: no se reevalúan cuando se modifiquen variables globales por lo tanto, no conviene usar variables globales en barreras J. Ezpeleta 30
31 Más sobre uso de objetos protegidos Qué pasa cuando una tarea invoca un procedimiento/entrada protegida de un obj. protegido que está siendo usado por otra tarea? reglas definidas por el ARM (ver [Burns-Wellings]) Si alguien está ejecutando una función, el objeto protegido tiene un cerrojo de lectura (read lock) activo Si alguien está ejecutando un proc. o entrada protegida, el objeto protegido tiene un cerrojo de lectura-escritura (read-write lock) activo Lo que sigue, en orden, es una película de lo que ocurre cuando una tarea trata de invocar algo de un objeto protegido: J. Ezpeleta 31
32 Más sobre uso de objetos protegidos 1) si el objeto tiene un cerrojo de lectura activo, y se invoca una función, la función se ejecuta, y nos vamos al punto 14 2) si el objeto tiene un cerrojo de lectura activo y se invoca un proc. o entrada protegida, la ejecución de la llamada se retrasa hasta que no haya ninguna tarea usando el objeto 3) si el objeto tiene un cerrojo de lectura-escritura activo, la tarea se retrasa mientras hay tareas con requisitos de acceso en conflicto con él 4) si el objeto no tiene ningún cerrojo activo, y se invoca una función, se activa el cerrojo de lectura, y vamos a 5 5) la función se ejecuta, y vamos a 14 6) si el objeto no tiene ningún cerrojo activo y se invoca un proc. o entrada protegida, se activa el cerrojo de lectura-escritura, y vamos a 7 7) si la llamada es un proc., se ejecuta, y vamos a 10 8) si la llamada es una entrada, la barrera asociada se evalúa; si da cierto, el cuerpo se ejecuta, y vamos a 10 9) si la barrera da falso, la llamada va a la cola asociada a la entrada, y vamos a 10 J. Ezpeleta 32
33 Más sobre uso de objetos protegidos 10) todas las barreras con tareas en espera y que referencian variables que han podido cambiar desde la última vez que se evaluaron, son re-evaluadas, y vamos a 11 11) si hay varias barreras abiertas, se elige una, se ejecuta el cuerpo asociado, y vamos a 10 12) si no hay barreras abiertas con tareas en la cola, vamos a 13 13) si hay tareas esperando para acceder al objeto protegido, o bien una única que necesite el cerrojo de lectura-escritura accede al objeto, o bien todas que deseen ejecutar una función se activan, ejecutándose los pasos 5), 7) u 8), según sea el caso. Si no hay tareas esperando, el protocolo termina 14) si no hay ninguna tarea activa usando el objeto protegido vamos a 13. En caso contrario, el protocolo termina. J. Ezpeleta 33
34 Implementación de semáforos mediante objetos protegidos protected type semaforo (vi: natural) is entry wait; procedure send; private val: natural := vi end semaforo; protected body semaforo is begin entry wait when val>0 is begin val := val-1; end; procedure send is begin val := val+1; end; end semaforo; s: semaforo(3);... s.wait;... s.send;... tarea u objeto protegido? tarea: elemento activo terminación dependiendo de estructura objeto: elemento pasivo desaparece al terminar el bloque en que se declara J. Ezpeleta 34
35 La buena educación en el uso de objetos protegidos Recomendación: el código a ejecutar en un proc/func/entry de un objeto protegido debe ser tan pequeño como se pueda durante su ejecución, otras tareas están esperando Se considera un bounded error ejecutar operaciones potencialmente bloqueantes : instrucción select instrucción accept llamada a una entry instrucción delay creación o activación de tareas Si se detecta un bounded error salta la excepción Program_Error llamar a un subprograma con instrucciones potencialmente bloqueantes J. Ezpeleta 35
36 La buena educación en el uso de objetos protegidos También es de mala educación llamar a un proc. externo que invoque a un proc./entry interno el cerrojo de lectura-escritura ya está activo, por lo que seguro que se bloquea Bounded errors: The language rules define certain kinds of errors that need not be detected either prior to or during run time, but if not detected, the range of possible effects shall be bounded. The errors of this category are called bounded errors. The possible effects of a given bounded error are specified for each such error, but in any case one possible effect of a bounded error is the raising of the exception Program_Error. ARM95 J. Ezpeleta 36
37 La buena educación en el uso de objetos protegidos procedure malaeducacion is protected type uno is procedure p; end; u: uno; protected body dos is entry e when n>3 is begin null; end; end; protected type dos is entry e; private n: integer := 1; end; d: dos; protected body uno is procedure p is begin d.e; end; end; begin u.p; end; $> gnatmake malaeducacion gcc -c malaeducacion.adb malaeducacion.adb:27:18: warning: potentially blocking operation in protected operation ganatbind -x malaeducacion.ali gnatlink malaeducacion.ali J. Ezpeleta 37
Programación concurrente en Ada. Breve introducción
Programación concurrente en Ada. Breve introducción Joaquín EZPELETA Dept. de Informática e Ingeniería de Sistemas Universidad de Zaragoza J. Ezpeleta 1 Índice Declaración y uso de tareas Ada Dependencia
Lección 5: Sincronización de procesos mediante semáforos
Lección 5: Sincronización de procesos mediante semáforos Introducción Estados de un proceso Semáforos: sintaxis y semántica Técnicas de programación con semáforos: el problema de la sección crítica el
Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software.
Junio 2008 Programación Concurrente 1/6 Normas Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software Este examen es un cuestionario
TEMA 5. PROGRAMACIÓN CONCURRENTE.
TEMA 5. PROGRAMACIÓN CONCURRENTE. 5.1. Ejecución concurrente. 5.2. Representación de procesos. 5.3. Tareas en Ada. 5.4. Ejemplo. 5.5. Comunicación y sincronización con variables comunes. 5.6. Comunicación
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License
Semáforos. Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1
Semáforos Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons
Lección 7: Sincronización de procesos El problema de la sección crítica
Lección 7: Sincronización de procesos El problema de la sección crítica Metodología de resolución de problemas de sincronización El problema de la sección crítica Especificaciones de diseño Esquema algorítmico
Lección 10: Ejemplos de programación con semáforos
Lección 10: Ejemplos de programación con semáforos El problema de la cena de los filósofos El problema de los lectores y escritores Ejercicios Gestión de concurrencia mediante paso de testigo (implementación
Lección 6: Ejemplos de programación con semáforos
Lección 6: Ejemplos de programación con semáforos El problema de la cena de los filósofos El problema de los lectores y escritores Ejercicios Gestión de concurrencia mediante paso de testigo (implementación
MECANISMOS PARA SINCRONIZACIÓN. Semáforos
MECANISMOS PARA SINCRONIZACIÓN Semáforos Mecanismos para sincronización Una vez discutidos los principales problemas a enfrentar para coordinar procesos/hilos que comparten espacio de direccionamiento,
UPM Concurrencia en Ada
UPM Concurrencia en Ada Juan Antonio de la Puente DIT/UPM Objetivos Veremos el modelo de concurrencia de Ada tareas comunicación y sincronización con objetos protegidos otras formas de comunicación (citas)
Planificación de tareas en Ada
dit UPM Planificación de tareas en Ada Juan Antonio de la Puente DIT/UPM Características generales Modelo básico planificación con prioridades dinámicas» también EDF políticas de despacho para tareas con
Sistemas de Tiempo Real Planificación de Sistemas de Tiempo Real
Sistemas de Tiempo Real Planificación de Sistemas de Tiempo Real Javier García Martín Capítulo 4 Planificación de Sistemas de Tiempo Real 1. Introducción 2. Ejecutivo Cíclico 3. Prioridades de tareas en
Parte I: Programación en Ada
Parte I: Programación en Ada 1. Introducción a los computadores y su programación 2. Elementos básicos del lenguaje 3. Modularidad y programación orientada a objetos 4. Estructuras de datos dinámicas 5.
Programación concurrente
Programación concurrente Master de Computación I Conceptos y recursos para la programación concurrente: I.6 Sincronización basada en memoria compartida. J.M. Drake M. Aldea Procesos concurrentes y memoria
Concurrencia Monitores. Guillermo Román Díez
Concurrencia Monitores Guillermo Román Díez [email protected] Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Monitores 1/25 Recursos Compartidos Pregunta La especificación de
Programación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13
Programación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13 5 de febrero de 2013 Dpto. de Informática e Ingeniería de Sistemas Universidad de Zaragoza Ejercicio 1 (1.5 ptos.) Considérese
Acceso coordinado a recursos compartidos
Programación Concurrente en Linux Acceso coordinado a recursos compartidos Alberto Lafuente, Dep. KAT/ATC de la UPV/EHU, bajo Licencia Creative Commons 1 Contenido 1. Recursos compartidos 2. Mecanismos
Comunicación mediante mensajes
dit UPM Comunicación mediante mensajes Juan Antonio de la Puente DIT/UPM Objetivos Comprender los problemas relacionados con la comunicación entre procesos basada en el interambio de mensajes Estudiar
Concurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
Unidad 1: Gestión de Procesos
Unidad 1: Gestión de Procesos Tema 1, Concurrencia: Exclusión mutua y sincronización. 1.1 Problema de la sección crítica, alternativas al uso de semáforos: - Regiones críticas, Monitores, Variables de
PROBLEMAS CLÁSICOS. EL PROBLEMA DE LOS FILÓSOFOS COMENSALES.
PROBLEMAS CLÁSICOS. EL PROBLEMA DE LOS FILÓSOFOS COMENSALES. Cinco filósofos pasan su vida pensando y comiendo. Los filósofos comparten una mesa circular rodeada por cinco sillas, una para cada uno de
VHDL. Lenguaje de descripción hardware Estructura Básica de diseño
VHDL. Lenguaje de descripción hardware Estructura Básica de diseño 2007 A.G.O. All Rights Reserved Estructura de un diseño en VHDL LIBRARY declaraciones VHDL estructura básica ENTITY caja negra ARCHITECTURE
CDI Exclusión mutua a nivel alto. conceptos
conceptos El concepto de usar estructuras de datos a nivel alto libera al programador de los detalles de su implementación. El programador puede asumir que las operaciones están implementadas correctamente
Programación Concurrente y Distribuída Estado Compartido, 2010
Programación Concurrente y Distribuída Estado Compartido, 2010 Camilo Rueda 1 1 Universidad Javeriana-Cali 9 de abril de 2010 Concurrencia con estado: introducción problema: modelar con puertos un objeto
Sincronización de Procesos
Sincronización de Procesos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Sincronización de Procesos Fundamentos El Problema de la Sección Crítica Solución a la sección
Lección 7: Sincronización de procesos mediante monitores
Lección 7: Sincronización de procesos mediante monitores Introducción Qué es un monitor? Características y funcionamiento de un monitor Implementación de un monitor en C++ y Java Algunos ejemplos de aplicación:
Sistemas operativos: una visión aplicada. Capítulo 5 Comunicación y sincronización de procesos
Sistemas operativos: una visión aplicada Capítulo 5 Comunicación y sincronización de procesos Sistema multiprogramado con un una CPU Proceso A Proceso B Proceso C Tiempo Sistemas operativos: una visión
Programación Concurrente Recopilación de teoría referente a la materia
UNIVERSIDAD AMERICANA Programación Concurrente Recopilación de teoría referente a la materia Ing. Luis Müller Esta es una recopilación de la teoría referente a la asignatura Programación Concurrente, a
Paso de mensajes. Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura. Filosofía cliente-servidor.
Paso de mensajes Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons
Sincronización de procesos
Sincronización de procesos Contenido Procesos concurrentes. El problema de la seccion critica Problemas clásicos de comunicación y sincronización. Mecanismos de comunicación y sincronización. DSO 2014
Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA.
Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA. Carácterísticas: Construcción de alto nivel. Estructura de datos estática:
Estados de un proceso
Semáforos Estados de un proceso Inactivo Listo Ejecutando Completo Escribimos p.state := ready p. state := running Bloqueado Para indicar que un proceso cambia de estado Semáforo Es un tipo de dato abstracto
Concurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi
Concurrencia, exclusión mutua y sincronización Capítulo 5 HungriaBerbesi 1 Concurrencia Múltiples aplicaciones Aplicaciones estructuradas Estructura del sistema operativo 2 Concurrencia 3 Sección Crítica:
Introducción a los tipos de datos abstractos (TAD)
Introducción a los tipos de datos abstractos (TAD) SINTAXIS Y SEMÁNTICA DEL LENGUAJE Prof. Lic. Ma. Gabriela Cerra Definición de abstracción Abstracción: idea general que se concentra sobre las cualidades
Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales.
GRAFOS DE PRECEDENCIA Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales. Un arco de un nodo Si al nodo Sj significa que la sentencia Sj puede ejecutarse sólo cuando ha acabado
Resumen Examen de Septiembre programación Concurrente.
Resumen Examen de Septiembre programación Concurrente. Tema1: Introducción a la programación Concurrente. - Hay que evitar la espera activa (se denomina espera activa a una técnica donde un proceso repetidamente
Gestión del tiempo en Ada
dit UPM Gestión del tiempo en Ada Juan Antonio de la Puente DIT/UPM El tiempo en Ada La gestión del tiempo en Ada está integrada en el lenguaje y en el modelo de tareas relojes relojes de tiempo de ejecución
Los Tipos Abstractos de Datos. Estructuras de Datos y Algoritmos 03/04
Los Tipos Abstractos de Datos Estructuras de Datos y Algoritmos 03/04 Qué son los TAD s? Metodología de programación con TAD s Especificación Algebraica de TAD s Qué son los TAD s? Con los lenguajes de
Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez
Algoritmos y Estructuras de Datos Iteradores Guillermo Román Díez [email protected] Universidad Politécnica de Madrid Curso 2015-2016 Guillermo Román, UPM AED: Introducción 1/26 Iteradores Es muy común
3. Programación de los Sistemas de Tiempo Real
3. Programación de los Sistemas de Tiempo Real Contenido 3. PROGRAMACIÓN DE LOS SISTEMAS DE TIEMPO REAL... 1 3.1 INTRODUCCIÓN...2 3.2 PROGRAMACIÓN CONCURRENTE...2 3.2.1 Construcciones para la programación
INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 5
INGENIERÍA DE COMPUTADORES III Solución al Ejercicio de Autocomprobación 5 PREGUNTA 1 (2 puntos) Tomando como base el siguiente código VHDL, dibuje el cronograma de evolución de las señales x, z1 y z2
dit Programación concurrente Sincronización condicional UPM
20151028 dit UPM Programación concurrente Sincronización condicional Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons
Lección 3: Concurrencia y sincronización
Lección 3: Concurrencia y sincronización Composición concurrente de acciones Acciones atómicas y sincronización Atomicidad de una expresión Atomicidad de una acción de asignación Sincronización de acciones
Primitivas de Sincronización
Primitivas de Sincronización JUAN CARLOS CONDE RAMÍREZ DISTRIBUTED COMPUTING Introducción Todas las soluciones previas al problema de mutex fueron un desperdicio de algún modo: Si un proceso es incapaz
7. Programación Concurrente
7. Programación Concurrente 1. Qué es la programación concurrente? Se conoce por programación concurrente a la rama de la informática que trata de las técnicas de programación que se usan para expresar
Sistemas operativos. Comunicación y sincronización de procesos
Sistemas operativos Comunicación y sincronización de procesos Comunicación y sincronización de procesos Contenido 1. Introducción 2. Comunicación por memoria común 3. El problema de la sección crítica
Estructuras de control
Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando
4.5 Ligado de Variables en Scheme
4.5 Ligado de Variables en Scheme Referencia a variables, lambda, formas let y asignación a) Referencia a una Variable variable retorno: valor de la variable Cualquier identificador no citada en una expresión
PRÁCTICA: LENGUAJE VHDL
PRÁCTICA: LENGUAJE Introducción Los lenguajes permiten manejar mejor grandes tamaños Los lenguajes son más flexibles que las tablas Los lenguajes son légibles por las máquinas más fácilmente que los gráficos
Lección 15: Programación concurrente mediante paso síncrono de mensajes
Lección 15: Programación concurrente mediante paso síncrono de mensajes Limitaciones del paso asíncrono de mensajes Paso síncrono de mensajes: notación simplificada ejemplo: proceso filtro copiar notación
Parte I: Programación en Ada
Parte I: Programación en Ada 1. Introducción a los computadores y su programación 2. Elementos básicos del lenguaje 3. Modularidad y programación orientada a objetos 4. Estructuras de datos dinámicas 5.
Seminario de Programación en Ada
Seminario de Programación en Ada Bloque II Programación de tiempo real GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 19 Programación de Tiempo Real El Ada soporta
Lección 10: Coordinación mediante espacios de tuplas
Lección 10: Coordinación mediante espacios de tuplas Introducción El modelo de coordinación Linda Ejemplos Acceso a un espacio de tuplas en el mundo real Aproximación conceptual a los monitores Ejercicios
2. Indica cuál de las siguientes afirmaciones es cierta:
Nombre:. Indica cuál de las siguientes afirmaciones es cierta: El diseño de un programa procedural está guiado por la división en tareas a realizar, mientras que el diseño orientado a objetos está dirigido
Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema
Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,
dit Planificación de tareas de tiempo real Juan Antonio de la Puente DIT/UPM UPM Copyright 2007, Juan Antonio de la Puente
dit UPM Planificación de tareas de tiempo real Juan Antonio de la Puente DIT/UPM Copyright 2007, Juan Antonio de la Puente Objetivos Plantear los problemas básicos relacionados con el cumplimiento de los
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 4. (2 p) Dos procesos A y B se ejecutan concurrentemente en un determinado sistema. El proceso A ejecuta unas tareas ( Tareas
Sincronización entre procesos (aka: semáforos)
Sincronización entre procesos (aka: semáforos) DC - FCEyN - UBA Sistemas Operativos, 1c-2016 Dónde estamos? De dónde venimos? Race condition Semáforos Race condition Semáforos Primero repasemos brevemente
CAPÍTULO 3. PROCESOS VS. HILOS
CAPÍTULO 3. PROCESOS VS. HILOS 3.1 Primitivas de sincronización en Java Java no tiene semáforos como primitivas de sincronización. Sin embargo, proporciona otras primitivas diferentes con las cuales sí
UML (Unified Modeling Language) Octubre de 2007
UML (Unified Modeling Language) Octubre de 2007 UML un modelo o pieza de información producido en el proceso de desarrollo de software Un lenguaje para especificar, visualizar y construir artefactos de
PRÁCTICO 4. La evaluación de una expresión sólo debe esperar por la evaluación de sus subexpresiones.
Objetivos PRÁCTICO 4 Comprender el problema de la mutua exclusión y las dificultades de probar la correctitud de programas concurrentes Ver soluciones por software y por hardware al problema de la mutua
VHDL: Código Secuencial. Arquitectura del Computador 2017
VHDL: Código Secuencial Arquitectura del Computador 2017 PROCESSES, FUNCTIONS y PROCEDURES Solo se ejecuta secuencialmente el código que se encuentra dentro de PROCESSES, FUNCTIONS o PROCEDURES. Cualquiera
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS
SEMAFOROS. if hay procesos suspendidos en este semáforo then despertar a uno de ellos else S = S + 1
1 de 21 22/12/2007 21:48 SEMAFOROS 1. DEFINICIONES 1.1. Semáforo general 1.2. Semáforo binario 1.3. Semáforo con cola de procesos bloqueados 1.4. Semáforo con espera activa (busy-wait) 1.5. Consecuencias
Concurrencia. Programación Concurrente. Espera ocupada. Primitivas IPC con bloqueo
Concurrencia Programación Concurrente Espera ocupada. Primitivas IPC con bloqueo Programación concurrente Los lenguajes concurrentes tienen elementos para: Crear procesos Sincronizar procesos Comunicar
Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II)
Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II) Por Pablo Reyes Grupo Danysoft mayo de 2001 - (902) 123146 www.danysoft.com Segunda parte Este artículo es el segundo de una
LABORATORIO DE CIRCUITOS DIGITALES (2005-II) SEGUNDA CLASE DE VHDL
LABORATORIO DE CIRCUITOS DIGITALES (25-II) SEGUNDA CLASE DE VHDL TIPOS y MODOS DE DATOS DESCRIPCIÓN CONCURRENTE Sentencias de asignación: with select, when - else DESCRIPCIÓN COMPORTAMENTAL Procesos asíncronos
Los procedimientos almacenados son nuevas funcionalidades de la versión de MySQL 5.0. Un procedimiento
PROCEDIMIENTOS ALMACENADOS Los procedimientos almacenados son nuevas funcionalidades de la versión de MySQL 5.0. Un procedimiento almacenado es un conjunto de comandos SQL que pueden almacenarse en el
Esquemas repetitivos en Fortran 90
Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,
Cena de filosofos y sincronizacion java
Programación concurrente y Distribuída Curso 2011-12 Miguel Telleria, Laura Barros, J.M. Drake telleriam AT unican.es Computadores y Tiempo Real http://www.ctr.unican.es Objetivos Presentaros la aplicación
Introducción a PL/SQL
Introducción a PL/SQL Grupo de Ingeniería del Software y Bases de Datos Departamento de Lenguajes y Sistemas Informáticos Universidad de Sevilla noviembre 2011 Objetivos de este tema Conocer PL/SQL. PL/SQL
Lección 9: Programación mediante paso síncrono de mensajes
Lección 9: Programación mediante paso síncrono de mensajes Paso síncrono de mensajes: notación simplificada ejemplo: proceso filtro copiar notación general ejemplo: proceso servidor mcd Entrada selectiva
Por ejemplo, el siguiente error conduce inmediatamente a un deadlock:
Monitores Los semáforos, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles a errores. Su utilización exige disciplina.
