2. Mutex
• mutual exclusion, o termo em inglês
• é uma técnica usada em programação
concorrente para evitar que dois processos ou
threads tenham acesso simultaneamente a
um recurso compartilhado (Região Crítica)
N processos competindo para utilizar
os mesmos dados compartilhados
3. Mutex
• Um meio simples para exclusão mútua é a utilização de
um semáforo binário
• Apenas 1 ou 0, onde 0 = impedido e 1 = Desimpedido
• O travamento por semáforo deve ser feito antes de
utilizar o recurso
• Enquanto o recurso estiver em uso, qualquer outro
processo que o utilize deve esperar a liberação.
4. “Efeitos Colaterais” Mutex
• Deadlocks
dois ou mais processos ficam impedidos
de continuar suas execuções, ou seja,
ficam bloqueados.
• Inanição
quando o processo nunca dispõe de
recursos suficientes para executar
plenamente.
5. Implementação
• Manipulação com:
– Mutex_lock():
• Testa o mutex e o coloca em impedido se
estiver desimpedido, bloqueia o processo caso
contrário
– Mutex_unlock():
• Coloca o mutex em desimpedido
7. Monitores
• uma técnica para sincronizar duas ou mais
tarefas que compartilham um recurso em
comum, geralmente um dispositivo de
hardware ou uma região da memória.
• Grande diferencial o trabalho com linguagem
de alto nível(mais transparente)
8. Monitores
• Desenvolvimento é mais fácil
• Existem linguagens que não possuem
monitores. Os monitores são um conceito de
linguagem de programação.
Java sempre
suportou
monitores !!!
9. Monitores
• originalmente implementado na linguagem
Concurrent Pascal
• O monitor é um conjunto de procedimentos,
variáveis e inicialização definidos dentro de
um módulo.
10. Exemplo de Código Monitor
monitor monitor-name
{
declaração de variáveis compartilhadas
procedure P1 (…) {
...
}
procedure P2 (…) {
...
}
procedure Pn (…) {
...
}
{
}
}
característica mais importante do
monitor é a exclusão mútua
automática entre os seus
procedimentos
código de inicialização
12. Monitor Variáveis
Variáveis de condição
são tipos de dados especiais dos monitores
duas instruções Wait e Signal
• Wait(C): suspende a execução do processo, colocando-o em estado
de espera associado a condição C
• Signal(C): permite que um processo bloqueado por wait(C)
continue a sua execução.
Se existir mais de um processo bloqueado, apenas um é liberado
Se não existir nenhum processo bloqueado, não faz nada
14. Referências Bibliográficas
Exclusão Mútua Disponível em :
<http://pt.wikipedia.org/wiki/Exclus%C3%A3o_m%
C3%BAtua>.
Acesso em : setembro de 2011.
Sistemas Operacionais Disponível em :
<http://www.inf.ufrgs.br/~asc/livro/transparencias/
cap3.pdf>.
Acesso em : setembro de 2011.
15. Monitor (concorrência)
Disponível em :
<http://pt.wikipedia.org/wiki/Monitor_%28concorr
%C3%AAncia%29>.
Acesso em : setembro de 2011.
TANEMBAUM ANDREW, S. WOODHULL ALBERTT, S:
Sistemas Operacionais: Projeto e Implementação.
2ed. Porto Alegre: Bookman, 2000