Tema7 Acciones Atómicas, Tareas Concurrentes y Fiabilidad
Tema7 Acciones Atómicas, Tareas Concurrentes y Fiabilidad
Tema7 Acciones Atómicas, Tareas Concurrentes y Fiabilidad
Acciones atómicas
Acciones atómicas en Ada y Java
Independencia
Sin comunicación ni sincronización
Cooperación
Comunicación y sincronización de forma regular
Competencia
Comunicación y sincronización para acceder a recursos
Indivisibilidad (aislamiento)
No hay intercambio de información entre tareas dentro y fuera
de la acción (con excepción del gestor de recursos)
No hay sincronización entre las tareas al comienzo de la acción
Anidamiento
Las acciones atómicas pueden anidarse siempre que no haya
solapamiento entre distintas acciones anidamiento estricto
Concurrencia
Es posible ejecutar diferentes acciones atómicas de forma
concurrente
El efecto de la ejecución concurrente debe ser el mismo que el
de la ejecución secuencial
Las acciones atómicas deben permitir la
programación de procedimientos de recuperación
Acciones atómicas anidadas
Action A
Action B
P1 P2 P3 P4 P5 P6
time
Acciones atómicas en lenguajes concurrentes
Asumimos
Modos de uso de los recursos:
Compartible / no compartible
Todas las acciones son de dos fases
El gestor de recursos asegura un uso apropiado
Las tareas dentro de una acción sincronizan sus accesos al
recurso
Acciones atómicas en lenguajes concurrentes
Tarea 1
Procedimiento 1
Controlador de acción
Tarea 3
Procedimiento 3
Acciones atómicas en Ada
Programación
Crear un controlador de acción, programando la
sincronización requerida
Acciones atómicas en Ada
procedure Codigo_Primera_Tarea(--parámetros) is
begin
Controlador_Acción.Primera;
-- adquirir recursos
-- comunicación via recursos
Controlador_Acción.Terminada;
-- liberar recursos
end Codigo_Tarea1;
-- similar para las tareas Segunda y Tercera
begin
-- inicializar recursos locales
end Action_X;
Acciones atómicas en Java
Controlador(){
primeraAqui = false;
segundaAqui = false;
terceraAqui = false;
todoHecho = 0;
numeroParticipantes = 3;
aSalir = numeroParticipantes;
}
AccionAtomicaTernaria en Java
synchronized void primera() throws InterruptedException{
while(primeraAqui) wait();
primeraAqui= true;
}
//igual para segunda y tercera
synchronized void terminada() throws InterruptedException{
todoHecho++;
if(todoHecho == numeroParticipantes) {
notifyAll();
}else while(todoHecho != numeroParticipantes) {
wait();
}
aSalir--;
if(aSalir == 0){
primeraAqui = false;
segundaAqui = false;
terceraAqui = false;
todoHecho = 0;
aSalir = numeroParticipantes;
notifyAll();
} } }// final de la clase interna Controlador
AccionAtomicaTernaria en Java
Inconvenientes
Cuando falla la conversación, todos los procesos realizarán
módulos alternativos
Se fuerzan comunicaciones entre el mismo grupo de procesos
Acción A
Acción B Excepción
generada
P1 P2 P3 P4 P5 P6
time
Excepciones en acciones anidadas
Posibles soluciones
Retener la generación de la excepción hasta que finalice la
acción interna
Problemas con tiempos límite
La excepción puede estar relacionada con la acción interna
Requisito fundamental
Permitir que un proceso responda rápidamente a una
condición detectada por otro proceso
Ocasiones en que la notificación síncrona (esperas o
sondeos) no es adecuada:
Recuperación de errores
Cambios de modo de operación
Planificación utilizando computaciones parciales/imprecisas
Interrupciones de usuario
Notificaciones asíncronas en Ada
select
Trigger.Event;
-- secuencia opcional de sentencias que son
-- ejecutadas tras la recepción del evento
then abort
-- secuencia abortable de sentencias
end select;
Ej: cita disponible inmediatamente
Save state
Waiting on cleanup
Exit version normally
Raising exception for module failure
Enter Action
Exception handled
Waiting Cleanup
Terminación
Transferencia asíncrona de control (ATC)
Manejo de excepciones asíncronas para tiempo real
Manejo de eventos asíncronos en RT-Java
t.interrupt();
Semántica del ejemplo anterior
role1
AIE1
role2
AIE2.fire()
AIE2 role3
doInterruptible AIE1.fire() AIE3
doInterruptible
AIE3.fire() doInterruptible
Action
Action Action
EH
EH
EH
signalAbort
Controller
ATC Ada vs RT-Java
Similitudes
Es necesario indicar las regiones de código susceptibles de
recibir una ATC
ATC son diferidas durante la interacción y finalización de hilos
o tareas.
Diferencias
El modelo de RT-Java está integrado con el uso de excepciones
El modelo Ada está integrado en la sentencia select y el uso de
entries
Java requiere que los métodos indiquen si pueden recibir ATC,
en otro caso quedan pendientes
Respuestas diferidas a ATC en Ada deben hacerse explícitas
Resumen