Inibição de Interrupções
Por: Jose.Nascimento • 21/2/2018 • 895 Palavras (4 Páginas) • 300 Visualizações
...
Antes de entrar em sua região crítica, um processo chama
enter region, que faz uma espera ociosa até que ele esteja livre de trava; então ele verifica a variável LOCK e retorna.
Depois da região crítica, o processo chama leave region, que põe um 0 na variável LOCK. Assim como todas as soluções baseadas em regiões críticas, o processo "trapacear" a exclusão mútua falhará.
Vantagens
- Simplicidade de uso.
- Funciona em máquinas com vários processadores.
- Presente em quase todos os processadores atuais.
- Não dá aos processos de usuário o poder de desabilitar interrupções.
- Espera ocupada (busy wait).
- Possibilidade de postergação infinita (starvation), “processo azarado” sempre pega a variável LOCK com o valor 1.
Por software com busy wait
Variáveis de Bloqueio[
Quando uma váriavel "lock" estiver como 0, significa que a região crítica esta livre, e 1 esta ocupada. Assim, antes de entrar cada processo testa o valor da variável "lock", se for 0, coloca como 1 e entra na região crítica, após sair coloca o valor 0, se o valor já for 1, aguarda até ser 0.
Alternância Estrita
Neste metodo, é criada uma variável "turn", com valor inicial 0, a imagem abaixo mostra dois processos 'a' e 'b' utilizando este metodo.
[pic 1]
Como "turn" esta como 0, o processo 'a' não fica "preso" no while, e assim executa a região crítica, após terminar, ele seta "turn" para 1 e parte para o resto do código, caso ocorra um chaveamento e o processo 'b' tente executar a região crítica antes que o processo 'a' sete "turn" como 1, ele ficara em um loop, apenas testando a variavel "turn"(espera ativa).
Solução de Peterson
Antes do processo entrar na região crítica ele executa o procedimento enter_region(), com o seu número. E após sair da região crítica, executa leave_region()
...