Programacion 2
Programacion 2
Programacion 2
Comunicación
• Mecanismos
– Variables compartidas
• Objetos a los que puede acceder más de un proceso
• Fáciles de usar si existe memoria compartida
– Paso de mensajes
• Intercambio de datos entre dos procesos por medio de un
mensaje que se envían
• La elección del mecanismo depende del lenguaje.
En los lenguajes de TR se suelen ofrecer ambos
• Con un mecanismo es posible implementar el otro
Programación (II) 2
1
Comunicación basada en memoria compartida
• Precisa de métodos de sincronización adicionales:
– Exclusión mutua : Secuencia de instrucciones que deben
ejecutarse en una operación indivisible (sección crítica)
– Sincronización condicional: Un proceso necesita esperar a
que se cumpla alguna condición que controla otro proceso
• Vamos a estudiar:
– Mecanismos: Distintas formas de implementar estos tipos de
sincronización
– Construcciones usadas en los lenguajes de programación que
facilitan la sincronización entre los procesos
Programación (II) 3
2
Construcciones en los lenguajes
• Regiones críticas condicionales
– Permite ejecutar una sección de código bajo exclusión mutua
• Monitores
– Agrupa las distintas operaciones de una sección crítica
• Objetos protegidos
– Monitores mas evolucionados con distintos tipos de acceso
Programación (II) 5
Programación (II) 6
3
Regiones CC (ejemplo)
program buffer_example
type buffer_t is record
slots: array(1..N) of character;
size: integer range 0..N;
head, tail: integer range 1..N;
end record;
buffer: buffer_t;
resource buf: buffer;
process producer;
...
loop
region buf when buffer.size < N do
-- place char in buffer
end region
...
end loop;
end
process consumer;
...
loop
region buf when buffer.size > 0 do
-- take char in buffer
end region
...
end loop;
end
end
Programación (II) 7
Monitores
• En las secciones críticas el código de una sección
queda desperdigado
• Los monitores agrupan todos los bloques de
código en una único elemento
• Las variables a las que se accede bajo exclusión
mutua quedan ocultas
• Todos los procedimientos se ejecutan bajo
exclusión mutua
• Pueden disponer de condiciones de acceso con las
operaciones wait y signal
Programación (II) 8
4
Semánticas de wait y signal
1. Una operación signal sólo se permite si es la última acción
que realiza un proceso antes de salir del monitor
2. Una operación signal tiene como efecto secundario la
ejecución de una instrucción return del procedimiento del
monitor, es decir, saldría del procedimiento
3. Una operación signal que desbloquea otro proceso tiene
como efecto secundario el bloquear al proceso llamante. La
ejecución del proceso se reanudará sólo cuando se libere el
monitor
4. Una operación signal que desbloquea otro proceso no lo
desbloqueará hasta que salga del procedimiento actual y libere
el monitor
Programación (II) 9
Monitores (ejemplo)
monitor buffer;
export append, take;
var (* declaracion de las variables utilizadas *)
begin
(* Inicializacion de las variables del monitor *)
end
Programación (II) 10
5
Objetos protegidos
• Encapsulan unos datos y permite el acceso sólo a
través de subprogramas protegidos
• Mejora el uso de las condiciones de acceso
• Ofrece exclusión mutua de escritura y de lectura
• Permite tres tipos de subprogramas
– Procedimiento, con ejecución bajo exclusión mutua
– Entradas, con condición de acceso
– Funciones, permitiendo varias lecturas simultaneas
Programación (II) 11
procedure signal is
begin
counter := counter + 1;
end signal;
end Semaforo;
Programación (II) 12
6
Evaluación de las barreras
• Ada optimiza la evaluación de las barreras para reducir
la sobrecarga
• Una barrera se reevalúa solo en los siguientes casos:
– Un proceso llama a una entrada de un objeto protegido y la
barrera asociada hace referencia a una variable o atributo que
puede haber cambiado desde que la barrera se evaluó por
última vez
– Una tarea abandona un procedimiento protegido o barrera
protegida y hay tareas en la cola de espera de las entradas en
las que se hace referencia a variables o atributos que pueden
haber cambiado desde que la barrera se evaluó por última vez
Programación (II) 13
Mecanismos de sincronización
Programación (II) 14
7
Eventos - Especificación
package Events is
type Event_State is (Up, Down);
Programación (II) 15
procedire Reset is
begin
Value := Down;
end;
procedure Toggle is
begin
if Value = Down then
Value := Up;
else
Value := Down;
end if;
end;
8
Eventos – Cuerpo (II)
entry Wait(S: Event_State) when True is
begin
if Value = Up then
requeue Wait_Up with abort;
else
requeue Wait_Down with abort;
end if;
end;
Programación (II) 17
Programación (II) 18
9
Sincronización entre procesos
• Existe una sincronización implícita
• Clasificación por el modelo de sincronización
– Asíncrono
– Síncrono
– Invocación remota
• Con el modelo asíncrono se pueden construir los otros
• Inconvenientes del modelo asíncrono
– Necesita buffers de tamaño infinito
– Para confirmar la lectura se requiere otro mensaje
– Se utilizan más envíos
– Es más difícil depurar los errores
Programación (II) 19
Programación (II) 20
10
Usos con el envío indirecto
• Tipos de comunicación
– De muchos a uno: Similar al modelo cliente-servidor
– De muchos a muchos: Pueden leer varios procesos
– De uno a uno: Comunicación entre dos procesos a través del
buzón
– De uno a muchos: Una petición se envía a un grupo de
procesos
• Cuando los que leen son muchos puede ocurrir:
– El mensaje lo lee solo un proceso (pool de servidores)
– Todos los procesos reciben una copia (tolerancia a fallos)
Programación (II) 21
Programación (II) 22
11
Espera selectiva
• Hasta lo que hemos visto, el proceso receptor queda
bloqueado hasta la recepción de un mensaje
• Esto es muy restrictivo. Puede interesar:
– Leer simultáneamente de varios buzones
– Leer un tipo de mensajes y dejar otros en espera
– Variar los tipos de mensajes que se quieren leer
– Dejar de leer al cabo de un tiempo
• Se resuelve con el mecanismo de la espera selectiva
– En Ada se dispone de la construcción select
– En las colas de de mensajes de UNIX se puede indicar el
tipo (o tipos) de mensaje a leer
– En los descriptores de UNIX se puede hacer una lectura con
la operación select
Programación (II) 23
Programación (II) 24
12