Condição de Disputa

Fazer download em doc, pdf ou txt
Fazer download em doc, pdf ou txt
Você está na página 1de 2

Condio de disputa: dois ou mais processos esto lendo ou escrevendo algum dado

compartilhado e cujo resultado final depende das informaes de quem e quando


executa.
Regies crticas: O que fazer para evitar condies de disputa? Precisamos de excluso
mtua, isto , algum modo de assegurar que outros processos sejam impedidos de usar
uma varivel ou um arquivo compartilhado que j estiver em uso por um processo.
Excluso mtua com espera ociosa:
* Desabilitando interrupes:
- a soluo mais simples aquela em que cada processo desabilita todas as interrupes
logo de entrar em sua regio crtica e reabilita-as imediatamente antes de sair dela.
- Com as interrupes desligadas, a CPU no ser mais alternada para outro processo.
- Essa abordagem no interessante porque no prudente dar aos processos dos
usurios o poder de desligar interrupes(Suponha que um deles tenha feito isso e nunca
mais as tenha ligado. Esse poderia ser o fim do sistema)
- Por outro lado, convm ao prprio ncleo desabilitar interrupes.
- Desabilitar interrupes uma tcnica bastante til dentro do prprio sistema
operacional, mas inadequada como um mecanismo geral de excluso mtua para
processos de usurio.
* Variveis de impedimento:
- uma soluo de SW. Considere que haja uma nica varivel compartilhada(lock),
inicialmente contendo valor 0. Para entrar em sua regio crtica, um processo testa antes
se h impedimento, verificando o valor da varivel lock. Se lock for 0, o processo altera
essa varivel para 1 e entra na regio crtica. Se lock j estiver com o valor 1, o processo
simplesmente aguardar at que ela se torna 0. Assim, um 0 significa que nenhum
processo est na sua regio crtica e 1 que algum processo est em sua regio crtica.
* Alternncia obrigatria.
While(True){ while(turn != 0) critical_region(); turn = 1; noncritical_region();}
While(True){ while(turn != 1) critical_region(); turn = 0; noncritical_region();}
Inicialmente, o processo 0 inspeciona a varivel turn, encontra l o valor 0 e entra em
sua regio crtica. O processo 1 tambm encontra l o valor 0 e ento fica em um lao
fechado testando continuamente para ver quando a varivel turn se torna 1.
Obs.: Testar continuamente uma varivel at que algum valor aparea chamada de
espera ociosa( busy waiting). A espera ociosa deveria em geral ser evitada, j que gasta
tempo de CPU. Somente quando h uma expectativa razovel de que a espera seja breve
que ela usada.
* Instruo TSL (Test and set lock teste e atualize varivel de impedimento)
- Requer um pequeno auxlio do hardware
- TSL RX, LOCK Ela l o contedo da palavra de memria lock no registrados RX e
ento armazena um valor diferente de zero no endereo de memria lock.
- Quando a varivel lock for 0, qualquer processo poder torn-lo 1 usando a instruo
TSL e ento ler ou escrever na memria compartilhada. Quando terminar, o processo
colocar a varivel lock de volta em 0, lanando mo de uma instruo ordinria move.

- Antes de entrar em sua regio crtica, um processo chama enter_region, que faz uma
espera ociosa at que ele esteja livre de impedimento; ento ele verifica a varivel lock
e retorna. Depois da regio crtica, o processo chama leave_region, que pe um 0 na
varivel lock. Assim como todas as solues baseadas em regies crticas, o processo
deve chamar enter_region e leave_region em momentos corretos para o mtodo
funcionar. Se um processo trapacear, a excluso mtua falhar.
Obs.: Essas solues esto corretas mas apresentam o defeito de precisar da espera
ociosa. Quando quer entrar em sua regio critica, um processo verifica se sua entrada
permitida. Se no for, o processo ficar em um lao ocioso esperando at que seja
permitida a entrada. Esse mtodo no s gasta tempo de CPU, mas pode tambm ter
efeitos inesperados.
Dormir e Acordar:
- Comunicao interprocessos que bloqueiam em vez de gastar tempo de CPU, quando a
elas no permitido entrar em suas regies crticas. Uma das mais simples o par sleep
e wakeup. Sleep uma chamada ao sistema que faz com que quem a chama durma, isto
fique suspenso at que um outro processo o desperte. A chamada wakeup tem um
parmetro, o processo a ser despertado.
Produtor-consumidor
- Dois processos compartilham um buffer comum e de tamanho fixo. Um deles, o
produtor, pe informao dentro do buffer e o outro, o consumidor, a retira.
- O problema se origina quando o produtor quer colocar um novo item no buffer, mas
ele j est cheio. A soluo por o produtor para dormir e s despert-lo quando o
consumidor remover um ou mais itens. Da mesma maneira, se o consumidor quiser
remover um item do buffer e perceber que o mesmo est vazio, ele dormir at que o
produtor ponha algo no buffer e o desperte.

Você também pode gostar