Sistema de informação
Apesar de o algoritmo apresentado resolver a questão da sincronização condicional, o problema da espera ocupada também se faz presente, sendo somente solucionado pe-los mecanismos de sincronização semáforos e monitores.
7.7 Semáforos
O conceito de .semáforos foi proposto por E. W. Dijkstra em 1965, sendo apresentado como um mecanismo de sincronização que permitia implementar, de forma simples, a exclusão mútua e a sincronização condicional, entre processos. De fato. o uso de semá-foros tornou-se um dos principais mecanismos utilizados em projetos de sistemas operacionais e em aplicações concorrentes. Atualmente, a maioria das linguagens de programação disponibiliza rotinas para uso de …exibir mais conteúdo…
'* inicialização do semáforo *
: M * *
118 / Arquitetura de Sistemas Operacionais
O exemplo apresentado na Tabela 7.6 ilustra a execução do programa Semaforo_l, onde o Processo A executa a instrução DOWN, fazendo com que o semáforo seja decrementado de l e passe a ter o valor 0. Em seguida, o Processo A ganha o acesso à sua região crítica. O Processo B também executa a instrução DOWN no semáforo, mas como seu valor é igual a O ficará aguardando até que o Processo A execute a instrução UP, ou seja, volte o valor do semáforo para 1.
Tabela 7.6 Execução do Programa Semaforo_l
Processo|Instrução|S|Espera||
A|REPEAT|1|*||
B|REPEAT|1|*||
A|DOWN ( S )|0|*||
B|REPEAT|0|*||
A|Regiao_Critica_A|0|A||
B|DOWN ( S )|0|Processo|B|
A|up (s)|1|Processo|B|
B|DOWN ( s }|1|Processo|B|
A|REPEAT|1|Processo_|B|
B|Regiao_Critica_B|0|*||
7.7.2 sincronização condicional utilizando semáforos
Além de permitirem a implementação da exclusão mútua, os semáforos podem ser utilizados nos casos onde a sincronização condicional é exigida. Um exemplo desse tipo de sincronização ocorre quando um processo solicita uma operação de E/S. O pe-dido faz com que o processo execute uma instrução DOWN no semáforo associado ao evento e fique no estado de