Escolar Documentos
Profissional Documentos
Cultura Documentos
Operacionais
Aula 5: Exclusão Mútua
Diego Passos
Última Aula
Programação Concorrente
__asm__("cli");
/* Aqui começa a Região Crítica. */
x = x + 1;
y = x + 15;
...
/* Fim da Região Crítica. */
__asm__("sti");
Operações Atômicas: Possível
Implementação (mais)
Método traz uma série de problemas:
Instrução CLI é privilegiada.
Processos de aplicação em geral rodam em modo
usuário.
Sem interrupções, não há chamadas de sistema.
Qualquer E/S tem que ser feito pelo processo do
usuário.
Propenso a falhas e brechas de segurança:
E se o programador esquece (ou decide não
colocar) a instrução STI no final?
Não funciona em máquinas multiprocessadas.
Em geral, utilizado apenas em sistemas simples.
Sistemas embarcados.
Exclusão Mútua
Definição
Processo 0: Processo 1:
while(turn == 1) { while(turn == 0) {
// Espera ocupada. // Espera ocupada.
} }
// Início da região crítica. // Início da região crítica.
... ...
// Fim da região crítica. // Fim da região crítica.
turn = 1; turn = 0;
Alternância: Problemas
flag[0] = 0;
flag[1] = 1;
turn = 0; // Pode ser 1.
Processo 0: Processo 1:
flag[0] = 1; flag[1] = 1;
turn = 1; turn = 0;
while(flag[1] == 1 && turn == 1) { while(flag[0] == 1 && turn == 0) {
// Espera ocupada. // Espera ocupada.
} }
// Início da região crítica. // Início da região crítica.
... ...
// Fim da região crítica. // Fim da região crítica.
flag[0] = 0; flag[1] = 0;
Desvantagens dos Protocolos de
Acesso
Soluções complexas.
Principalmente quando há mais de dois processos
envolvidos.
Fazem espera ocupada (busy-waiting).
Pouco eficiente.
Processador fica ocupado inutilmente.
Soluções com Suporte do
Hardware
Spin-Lock: Intuição
Processo 0: Processo 1:
P(S); P(S);
x = x + 1; x = x + 1;
V(S); V(S);
Semáforos: Exemplos de Uso (mais)
Problema do Produtor-Consumidor
Inicialização:
s_mutex m = 1;
s_contador vagas = N;
s_contador dados = 0;
Produtor: Consumidor:
while (1) { while (1) {
P(vagas); P(dados);
P(m); P(m);
insere_dado(); remove_dado();
V(m); V(m);
V(dados); V(vagas);
} }
Semáforos: Implementação