Escolar Documentos
Profissional Documentos
Cultura Documentos
ESCALONAMENTO
PARTE III – EXCLUSÃO MÚTUA
Prof. Raimundo BARRETO
DCC/ICE/UFAM
Baseado nas Notas de Aula do Prof.
Francisco Vasques, da Faculdade de
Engenharia da Universidade do Porto.
http://www.fe.up.pt/~vasques
EXCLUSÃO MÚTUA NO ACESSO A
RECURSOS
Noções básicas de sincronização
Objetivo da sincronização: esperar pela ocorrência de um
evento antes de executar uma tarefa.
Relações inter-tarefas de 3 tipos:
1. Relação de precedência (sincronização por ocorrência de
evento)
Noção de ordem entre a execução de instâncias de diferentes
tarefas.
2. Compartilhamento de variáveis / recursos
Troca de informação ou de resultados entre tarefas;
Necessidade de protecção através da utilização de semáforos,
para impedir que uma variável compartilhada seja acessada
simultaneamente em escrita por diferentes tarefas.
3. Comunicação (sincronização por envio de mensagem)
Precedência + transferência de informação: relação do tipo
produtor/consumidor;
EXCLUSÃO MÚTUA NO ACESSO A
RECURSOS
Gestão de comunicação entre tarefas
Modelo funcional
Classificação de sistemas de comunicação entre
tarefas por mensagens
síncrona / assíncrona
síncrona: a tarefa receptora coloca-se explicitamente à
espera da mensagem
assíncrona: um gestor de mensagem é activado à chegada
da mensagem.
com / sem colocação em fila de espera
Bloqueio Direto: tarefa mais prioritária é bloqueada por tarefas menos prioritárias
Bloqueio por Herança: tarefa de prioridade intermediária é bloqueada por tarefas
que herdaram prioridade
HERANÇA DE
PRIORIDADES
• Uma tarefa mais prioritária quando executando
sob o PHP pode sofrer dois tipos de bloqueios:
– Bloqueio direto: que ocorre quando a tarefa mais
prioritária tenta acessar o recurso compartilhado já
bloqueado pela tarefa menos prioritária.
– Bloqueio por herança: ocorre quando uma tarefa de
prioridade intermediária é impedida de continuar
sua execução por uma tarefa que tenha herdado a
prioridade de uma tarefa mais prioritária.
HERANÇA DE
PRIORIDADES
• Há um limite superior para o número de bloqueios que
uma tarefa pode sofrer de outras menos prioritárias.
• Se uma tarefa Ti pode ser bloqueada por n tarefas menos
prioritárias, isto significa que, em uma ativação, Ti pode
ser bloqueada por n seções críticas, uma por cada tarefa
menos prioritária.
• Por outro lado, se houverem m semáforos distintos
(recursos compartilhados) que podem bloquear
diretamente Ti, então essa tarefa pode ser bloqueada no
máximo a duração de tempo correspondente às m seções
críticas, sendo uma por cada semáforo.
• É então assumido que sob o PHP, uma tarefa Ti pode ser
bloqueada no máximo a duração de min (n, m) seções
críticas.
HERANÇA DE PRIORIDADES
Ou seja, uma tarefa não pode bloquear duas vezes outra tarefa.
O mesmo semáforo não pode bloquear duas vezes a mesma tarefa.
HERANÇA DE PRIORIDADES
B1? B2? B3
HERANÇA DE PRIORIDADES
LEMBRE-SE:
B1 = 7. Por quê?
B2 = 4. Por quê?
B3 = 0. Por quê?
B3 = 6, por quê?
B4 = 0, por quê?
T0
T1
LOCK(S2)
T2
t0 t1 t2
T1
T2
t0 t1 t2 t3
T0
T1
T2
t0 t1 t2 t3 t4
π(T0)=0
No tempo t3, T2 volta a ser executado π(T1)=1
π(T2)=1
PRIORIDADE TETO
S0 S1 S2
C(S0) = 0 C(S1) = 1 C(S2) = 1
T0
T1
T2
t0 t1 t2 t3 t4
No tempo t4, T0 é iniciado e preempta T2 (que ainda está em S2) π(T )=0
0
Por que T0 conseguiu preemptar T2? π(T1)=1
π(T2)=1
PRIORIDADE TETO
S0 S1 S2
C(S0) = 0 C(S1) = 1 C(S2) = 1
LOCK(S0)
T0
T1
T2
t0 t1 t2 t3 t4 t5
T0
T1
T2
t0 t1 t2 t3 t4 t5 t6 t7
T0
LOCK(S1)
T1
T2
t0 t1 t2 t3 t4 t5 t6 t7 t8 t9
T0
UNLOCK(S1
T1 )
UNLOCK(S2
)
T2
t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
T0
LOCK(S1)
T1
T2
t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
No tempo t10 a tarefa T1, tendo maior prioridade, preempta T2, π(T0)=0
retoma execução e fecha semáforo S1. π(T1)=1
π(T2)=2
PRIORIDADE TETO
S0 S1 S2
C(S0) = 0 C(S1) = 1 C(S2) = 1
T0
LOCK(S2)
T1
T2
t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11
π(T0)=0
No tempo t11 a tarefa T1 fecha semáforo S2 π(T1)=1
π(T2)=2
PRIORIDADE TETO
S0 S1 S2
C(S0) = 0 C(S1) = 1 C(S2) = 1
T0
UNLOCK(S2)
T1
T2
π(T0)=0
No tempo t12 a tarefa T1 libera o semáforo S2 π(T1)=1
π(T2)=2
PRIORIDADE TETO
S0 S1 S2
C(S0) = 0 C(S1) = 1 C(S2) = 1
T0
UNLOCK(S1)
T1
T2
π(T0)=0
No tempo t13 a tarefa T1 libera o semáforo S1 π(T1)=1
π(T2)=2
PRIORIDADE TETO
S0 S1 S2
C(S0) = 0 C(S1) = 1 C(S2) = 1
T0
T1
T2
π(T0)=0
No tempo t13 a tarefa T1 inicia execução de código não crítico π(T1)=1
No tempo t14 a tarefa T1 termina; tarefa T2 retoma execução π(T2)=2
No tempo t15 a tarefa T2 termina.
PRIORIDADE TETO
T0 nunca é bloqueado porque sua prioridade é
maior do que as prioridades teto dos semáforos S1
e S2
T1 foi bloqueado por T2 (menor prioridade)
somente no intervalo onde T2 precisa fechar S2.
Nesse caso, T1 foi bloqueado por não mais do que
a duração de uma região crítica de uma tarefa de
menor prioridade (T2).
PRIORIDADE TETO
Propriedades
nenhuma tarefa sofre mais do que uma situação de
inversão de prioridades durante a sua execução;
a hipótese de impasse (deadlock) é eliminada;
em contrapartida, uma tarefa pode sofrer uma
inversão de prioridades durante um intervalo de
tempo superior ao estritamente necessário.
O tempo máximo que uma tarefa pode permanecer
bloqueada (Bi) é igual ao tempo de execução da
mais longa seção crítica de prioridade inferior que
sejam acessados por tarefas de prioridade
superior.
PRIORIDADE TETO
Propriedades
Um teste suficiente de escalonabilidade para um
conjunto de tarefas com prioridades atribuídas pelo
algoritmo RM será: