Title: Concurrencia en Ada: Objetos protegidos
1Concurrencia en AdaObjetos protegidos
2Objetos protegidos
- Tipos abstractos de datos que garantizan acceso
en exclusión mutua ? monitores - Espera condicional mediante barreras (condiciones
de entrada a las operaciones)? como en las
regiones críticas condicionales
3Esquema general de un objeto protegido
protected type OBJETO is function XXX(params)
return tipo procedure YYY(params) entry
ZZZ(params) private --datos privados
--subprogramas privados end OBJETO protected
body OBJETO is -- cuerpos de los subprogramas
-- NO se pueden declarar datos -- (tienen que
ir en el private) end OBJETO
4Tipos de operaciones
- procedure
- Acceso exclusivo de lectura-escritura al objeto
- function
- Acceso concurrente de sólo lectura al objeto
- Excluye a cualquier escritor
- entry
- Como el procedure, pero además tiene asociada una
barrera de entrada (when condición)
5Barreras de entrada
- entry E() when condición
- Entry abierta condición de barrera cierta.
- Entry cerrada condición de barrera falsa.
- Una entry sólo se puede ejecutar si está abierta
y el objeto está disponible.
6Ejemplo Semáforo (1)
protected type Semaphore (Initial natural) is
entry Wait procedure Signal function Value
return natural private Val natural
Initial end Semaphore
7Ejemplo Semáforo (2)
procedure Signal is begin Val
Val 1 end Signal function Value return
natural is begin return Val end
Value end Semaphore
protected body Semaphore is entry Wait when
Valgt0 is begin Val Val 1 end wait
8Acceso a objetos protegidos
Tareas esperando fuera del OP
Tareas esperando en las barreras asociadas a las
entries
Una tarea dentro del OP
entry 1
. . .
entry N
9Cómo se gestionan las barreras?
- Para evaluar la barrera, la tarea debe adquirir
el cerrojo de lectura/escritura del objeto
protegido. - Si la entry está cerrada, la tarea se encola.
- Cada vez que se finaliza una operación (procedure
o entry), se reevalúan las condiciones de
barrera. - También se reevalúan las barreras cuando un
proceso se encola en una entry cerrada. - Si tras la reevaluación una o varias entries
quedan abiertas, se elige una de las tareas de
esas entries. - Elección arbitraria, salvo que se utilice el
Anexo de Tiempo Real de Ada.
10Reevaluación inteligente
- No se tienen por qué reevaluar todas las
barreras. - El compilador sabe qué atributos internos han
podido cambiar y por tanto puede restringir la
reevaluación a un conjunto reducido de entries. - Esto permite una implementación muy eficiente.
11Preferencia de las entries
- La reevaluación de barreras y posterior elección
de una entry abierta ocurre antes de que se
libere el objeto protegido. - Por tanto, las tareas bloqueadas en entries
SIEMPRE tienen preferencia sobre las que están
esperando por primera vez a obtener acceso al
objeto protegido. - Sólo cuando no quedan entries abiertas con
tareas, se libera el objeto para nuevas tareas.
12Atributo COUNT
- ECount ? nos devuelve cuántas tareas están
bloqueadas en la entry E. - Útil para algoritmos que toman decisiones en
función de la cantidad de procesos que están
esperando por un recurso. - NOTA el uso de COUNT es el motivo por el que se
reevalúan las barreras cuando una tarea se
bloquea en una entry
13Atributo COUNT ejemplo
protected EsperaTres is entry Espera private
SePuedebooleanfalse end EsperaTres
protected body EsperaTres is entry Espera
when EsperaCOUNT3 or SePuede is begin if
EsperaCOUNT 0 then SePuede false
else SePuede true end if end
Espera end EsperaTres
14Llamadas potencialmente bloqueantes
- Una operación de un objeto protegido no puede
realizar llamadas potencialmente bloqueantes - delay
- Llamadas a otros objetos protegidos y tareas
- Creación o activación de tareas
- Llamadas a subprogramas que contengan
instrucciones potencialmente bloqueantes