Você está na página 1de 44

Sincronizao de Processos (1)

http://www.inf.ufes.br/~rgomes/so.htm

Condies de Corrida

Exemplo: Fila de impresso.


Qualquer processo que queira imprimir precisa colocar o seu documento na fila de impresso (compartilhada). O processo de impresso retira os documentos na ordem em que chegaram na fila Se a fila compartilhada, isto significa que seus dados, assim como os indicadores de frente e fim da fila tambm o so

LPRM/DI/UFES

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Condies de Corrida

1. 2.

fim++ (incrementa o indicador do fim da fila) coloca documento na posio do novo fim da fila

dois processos resolvem simultaneamente imprimir um documento o primeiro processo foi interrompido (por ter acabado o seu quantum) entre os comandos 1 e 2 o segundo processo insere seu documento na fila antes que o primeiro processo tenha acabado : qual o erro ???? H uma condio de corrida quando dois ou mais processos esto acessando dados compartilhados e o resultado depende de quem roda quando
LPRM/DI/UFES 3 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Condies de Corrida
Condies de corrida so situaes onde dois ou mais processos acessam dados compartilhados e o resultado final depende da ordem em que os processos so executados Ordem de execuo ditada pelo mecanismo de escalonamento do S.O. Torna a depurao difcil. Condies de corrida so evitadas atravs da introduo de mecanismos de excluso mtua: A excluso mtua garante que somente um processo estar usando os dados compartilhados num dado momento. Regio Crtica: parte do programa (trecho de cdigo) em que os dados compartilhados so acessados Objetivo da Excluso Mtua: Proibir que mais de um processo entre em sua Regio Crtica
LPRM/DI/UFES 4 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Exemplo 1
Procedure echo(); var out, in: character; begin input (in, keyboard); out := in; output (out, display) end.

P1 invoca echo() e interrompido imediatamente aps a concluso da funo input(). Suponha que x tenha sido o caractere digitado, que agora est armazenado na varivel in. P2 despachado e tambm invoca echo(). Suponha que y seja digitado (in recebe y), sendo ento exibido no dispositivo de sada. P1 retoma a posse do processador. O caractere exibido no o que foi digitado (x), pois ele foi sobreposto por y na execuo do processo P2. Concluso: o caractere y exibido duas vezes. Essncia do problema: o compartilhamento da varivel global in.
LPRM/DI/UFES 5 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Exemplo 2

(1)

Diretrio de spooler com n entradas, cada uma capaz de armazenar um nome de arquivo. Servidor de impresso verifica se existem arquivos a serem impressos. Caso afirmativo, ele os imprime e remove os nomes do diretrio. Variveis compartilhadas: out, que aponta para o prximo arquivo a ser impresso; e in, que aponta para a prxima entrada livre no diretrio.

LPRM/DI/UFES

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Exemplo 2

(2)

PA e PB decidem colocar um arquivo no spool de impresso quase ao mesmo tempo. PA l in, armazena o seu valor (7) na varivel local nextfree-slot e interrompido. PB escalonado, l in e coloca o nome do seu arquivo no slot 7, atualizando in para 8. PA retorna e escreve o nome do seu arquivo na entrada 7 (valor de next-free-slot), apagando o nome colocado por PB. A varivel next-free-slot passa a valer 8. O servidor no notar nada de errado (o diretrio est consistente) e PB nunca realizar qualquer sada.
LPRM/DI/UFES 7 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Concorrncia
Dificuldades:
Compartilhamento de recursos globais. Gerncia de alocao de recursos. Localizao de erros de programao (depurao de programas).

Ao necessria:
Proteger os dados compartilhados (variveis, arquivos e outros recursos globais). Promover o acesso ordenado (controle de acesso) aos recursos compartilhados sincronizao de processos.
LPRM/DI/UFES 8 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Abordagens para Excluso Mtua Requisitos para uma boa soluo:


A apenas um processo permitido estar dentro de sua R.C. num dado instante. Nenhum processo que executa fora de sua regio crtica pode bloquear outro processo (ex: processo pra fora da sua R.C.). Nenhuma suposio pode ser feita sobre as velocidades relativas dos processos ou sobre o nmero de CPUs no sistema. Nenhum processo pode ter que esperar eternamente para entrar em sua R.C. ou l ficar eternamente.
LPRM/DI/UFES 9 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Tipos de Solues
Solues de Hardware
Inibio de interrupes Instruo TSL (apresenta busy wait)

Solues de software com busy wait


Varivel de bloqueio Alternncia estrita Algoritmo de Decker Algoritmo de Peterson

Solues de software com bloqueio


Sleep / Wakeup, Semforos, Monitores
LPRM/DI/UFES 10 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Inibio de Interrupes
Usa um par de instrues do tipo DI / EI.
DI = disable interrupt EI = enable interrupt

O processo desativa todas as interrupes imediatamente antes de entrar na sua R.C., reativando-as imediatamente depois de sair dela. Com as interrupes desativadas, nenhum processo que est na sua R.C. pode ser interrompido, o que garante o acesso exclusivo aos dados compartilhados.
LPRM/DI/UFES 11 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Exemplo - Problema do produtor-consumidor

LPRM/DI/UFES

12

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Exemplo - Problema do produtor-consumidor


varivel N indica quantos colocados no buffer. Produtor DI LDA N DCR A STA N EI itens ainda podem ser Consumidor DI LDA N INC A STA N EI

LPRM/DI/UFES

13

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Problemas da Soluo DI/EI desaconselhvel dar aos processos de usurio o poder de desabilitar interrupes. No funciona com vrios processadores. Inibir interrupes por um longo perodo de tempo pode ter conseqncias danosas. Por exemplo, perde-se a sincronizao com os dispositivos perifricos.
OBS: inibir interrupes pelo tempo de algumas poucas instrues pode ser conveniente para o kernel (p.ex., para atualizar uma estrutura de controle).
LPRM/DI/UFES 14 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Tipos de Solues
Solues de Hardware
Inibio de interrupes Instruo TSL (apresenta busy wait)

Solues de software com busy wait


Varivel de bloqueio Alternncia estrita Algoritmo de Decker Algoritmo de Peterson

Solues de software com bloqueio


Sleep / Wakeup, Semforos, Monitores
LPRM/DI/UFES 15 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Solues com Busy Wait


Busy wait = espera ativa ou espera ocupada. Basicamente o que essas solues fazem :
Quando um processo quer entrar na sua R.C. ele verifica se a entrada permitida. Se no for, ele espera em um lao (improdutivo) at que o acesso seja liberado.
Ex: While (vez == OUTRO) do {nothing};

Conseqncia: desperdcio de tempo de CPU.

Problema da inverso de prioridade:


Processo LowPriority est na sua R.C. e interrompido. Processo HighPriority selecionado mas entra em espera ativa. Nesta situao, o processo LowPriority nunca vai ter a chance de sair da sua R.C.

LPRM/DI/UFES

16

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

1a. Tentativa - Varivel de Bloqueio


Varivel de bloqueio, compartilhada, indica se a R.C. est ou no em uso.
turn = 0 R.C. livre turn = 1 R.C. em uso

Tentativa para n processos:


var turn: 0..1 turn := 0 Process Pi: ... while turn = 1 do {nothing}; turn := 1; < critical section > turn := 0; ...
LPRM/DI/UFES 17 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Problemas da 1a. Tentativa A proposta no correta pois os processos podem concluir simultaneamente que a R.C. est livre, isto , os dois processos podem testar o valor de turn antes que essa varivel seja feita igual a true por um deles.

LPRM/DI/UFES

18

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Tipos de Solues

(cont.)

Solues de Hardware
Inibio de interrupes Instruo TSL (apresenta busy wait)

Solues de software com busy wait


Varivel de bloqueio Alternncia estrita Algoritmo de Dekker Algoritmo de Peterson

Solues de software com bloqueio


Sleep / Wakeup, Semforos, Monitores

LPRM/DI/UFES

19

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

2a. Tentativa Alternncia Estrita Varivel global indica de quem a vez na hora de entrar na R.C. Tentativa para 2 processos:
var turn: 0..1; P0: . . while turn 0 do {nothing}; < critical section > turn := 1; .
LPRM/DI/UFES 20

P1: . . while turn 1 do {nothing}; < critical section > turn := 0; .


Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Problemas da 2a. Tentativa


O algoritmo garante a excluso mtua, mas obriga a alternncia na execuo das R.C. No possvel a um mesmo processo entrar duas vezes consecutivamente na sua R.C.
Logo, a velocidade de entrada na R.C. ditada pelo processo mais lento.

Se um processo falhar ou terminar, o outro no poder mais entrar na sua R.C., ficando bloqueado permanentemente.
LPRM/DI/UFES 21 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

3a. Tentativa
O problema da tentativa anterior que ela guarda a identificao do processo que pode entrar na R.C. Entretanto, o que se precisa, de fato, de informao de estado dos processos (i.e., se eles querem entrar na R.C.) Cada processo deve ento ter a sua prpria chave de inteno. Assim, se falhar, ainda ser possvel a um outro entrar na sua R.C. A soluo se baseia no uso de uma varivel array para indicar a inteno de entrada na R.C.

LPRM/DI/UFES

22

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

3a. Tentativa
Antes de entrar na sua R.C, o processo examina a varivel de tipo array. Se ningum mais tiver manifestado interesse, o processo indica a sua inteno de ingresso ligando o bit correspondente na varivel de tipo array e prossegue em direo a sua R.C.
var flag: array[0..1] of boolean; flag[0]:= false; flag[1]:= false; Process P0: ... while flag[1] do {nothing}; flag[0] := true; < critical section > flag[0] := false; ...
LPRM/DI/UFES 23

Process P1: ... while flag[0] do {nothing}; flag[1] := true; < critical section > flag[1] := false; ...
Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Problemas da 3a. Tentativa


Agora, se um processo falha fora da sua R.C. no haver nenhum problema, nenhum processo ficar eternamente bloqueado devido a isso. Entretanto, se o processo falhar dentro da R.C., o problema ocorre. No assegura excluso mtua, pois cada processo pode chegar concluso de que o outro no quer entrar e, assim, entrarem simultaneamente nas R.C.
Isso acontece porque existe a possibilidade de cada processo testar se o outro no quer entrar (comando while) antes de um deles marcar a sua inteno de entrar.

LPRM/DI/UFES

24

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

4a. Tentativa
A idia agora que cada processo marque a sua inteno de entrar antes de testar a inteno do outro, o que elimina o problema anterior. o mesmo algoritmo anterior, porm com uma troca de linha.
Process P0: ... flag[0] := true; while flag[1] do {nothing}; < critical section > flag[0] := false; ...
LPRM/DI/UFES 25

Process P1: ... flag[1] := true; while flag[0] do {nothing}; < critical section > flag[1] := false; ...
Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Problemas da 4a. Tentativa


Garante a excluso mtua mas se um processo falha dentro da sua R.C. (ou mesmo aps setar o seu flag) o outro processo ficar eternamente bloqueado. Uma falha fora da R.C. no ocasiona nenhum problema para os outros processos. Problemo:
Todos os processos ligam os seus flags para true (marcando o seu desejo de entrar na sua R.C.). Nesta situao todos os processos ficaro presos no while em um loop eterno (situao de deadlock).

LPRM/DI/UFES

26

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

5a. Tentativa
Na tentativa anterior o processo assinalava a sua inteno de entrar na R.C. sem saber da inteno do outro, no havendo oportunidade dele mudar de idia depois (i.e., mudar o seu estado para false). A 5a. tentativa corrige este problema:
Aps testar no loop, se o outro processo tambm quer entrar na sua R.C, em caso afirmativo, o processo com a posse da UCP declina da sua inteno, dando a vez ao parceiro.

LPRM/DI/UFES

27

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

5a. Tentativa

(cont.)

Process P0: Process P1: ... ... flag[0] := true; flag[1] := true; while flag[1] do while flag[0] do begin begin flag[0] := false; flag[1] := false; <delay for a short time> <delay for a short time> flag[0] := true flag[1] := true end; end; < critical section > < critical section > flag[0] := false; flag[1] := false; ... ...

LPRM/DI/UFES

28

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

5a. Tentativa

(cont.)

Esta soluo quase correta. Entretanto, existe um pequeno problema: a possibilidade dos processos ficarem cedendo a vez um para o outro indefinidamente (problema da mtua cortesia)
Livelock

Na verdade, essa uma situao muito difcil de se sustentar durante um longo tempo na prtica, devido s velocidades relativas dos processos. Entretanto, ela uma possibilidade terica, o que invalida a proposta como soluo geral do problema.

LPRM/DI/UFES

29

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

5a. Tentativa Exemplo


P0 P1 P0 P1 P0 P1 P0 P1 seta flag[0] para seta flag[1] para testa flag[1]. testa flag[0]. seta flag[0] para seta flag[1] para seta flag[0] para seta flag[1] para true. true.

false. false. true. true.

LPRM/DI/UFES

30

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Soluo de Dekker
Trata-se da primeira soluo correta para o problema da excluso mtua de dois processos (proposta na dcada de 60). O algoritmo combina as idias de varivel de bloqueio e array de inteno. similar ao algoritmo anterior mas usa uma varivel adicional (vez/turn) para realizar o desempate, no caso dos dois processos entrarem no loop de mtua cortesia.

LPRM/DI/UFES

31

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Algoritmo de Dekker
var flag: array[0..1] of boolean; turn: 0..1; //who has the priority flag[0] := false flag[1] := false turn := 0 // or 1 Process p0: flag[0] := true while flag[1] { if turn 0 { flag[0] := false while turn 0 {} flag[0] := true } } // critical section ... // end of critical section turn := 1 flag[0] := false Process p1: flag[1] := true while flag[0] { if turn 1 { flag[1] := false while turn 1 {} flag[1] := true } } // critical section ... // end of section turn := 0 flag[1] := false

LPRM/DI/UFES

32

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Algoritmo de Dekker

(cont.)

Quando P0 quer entrar na sua R.C. ele coloca seu flag em true. Ele ento vai checar o flag de P1. Se o flag de P1 for false, ento P0 pode entrar imediatamente na sua R.C.; do contrrio, ele consulta a varivel turn. Se turn = 0 ento P0 sabe que a sua vez de insistir e, deste modo, fica em busy wait testando o estado de P1. Em certo ponto, P1 notar que a sua vez de declinar. Isso permite ao processo P0 prosseguir. Aps P0 usar a sua R.C. ele coloca o seu flag em false para liber-la, e faz turn = 1 para transferir o direito para P1.

LPRM/DI/UFES

33

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Algoritmo de Dekker

(cont.)

Algoritmo de Dekker resolve o problema da excluso mtua Uma soluo deste tipo s aceitvel se houver um nmero de CPUs igual (ou superior) ao nmero de processos que se devam executar no sistema. Porqu?
Poderamos nos dar 'ao luxo' de consumir ciclos de CPU, Situao rara na prtica (em geral, h mais processos do que CPUs) Isto significa que a soluo de Dekker pouco usada.

Contudo, a soluo de Dekker mostrou que possvel resolver o problema inteiramente por software, isto , sem exigir instrues mquina especiais. Devemos fazer uma modificao significativa do programa se quisermos estender a soluo de 2 para N processos:
flag[] com N posies; varivel turn passa a assumir valores de 1..N; alterao das condies de teste em todos os processos
LPRM/DI/UFES 34 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Soluo de Peterson
Proposto em 1981, uma soluo simples e elegante para o problema da excluso mtua, sendo facilmente generalizado para o caso de n processos. O truque do algoritmo consiste no seguinte:
Ao marcar a sua inteno de entrar, o processo j indica (para o caso de empate) que a vez do outro.

Mais simples de ser verificado

LPRM/DI/UFES

35

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Algoritmo de Peterson
flag[0] flag[1] turn := false := false := 0 Process P1: flag[1] := true turn := 0 while ( flag[0] && turn == 0 ){ // do nothing } // critical section ... // end of critical section flag[1] := false

Process P0: flag[0] := true turn := 1 while ( flag[1] && turn == 1 ){ // do nothing } // critical section ... // end of critical section flag[0] := false

LPRM/DI/UFES

36

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Soluo de Peterson

(cont.)

Excluso mtua atingida.


Uma vez que P0 tenha feito flag[0] = true, P1 no pode entrar na sua R.C. Se P1 j estiver na sua R.C., ento flag[1] = true e P0 est impedido de entrar.

Bloqueio mtuo (deadlock) evitado.


Supondo P0 bloqueado no seu while, isso significa que flag[1] = true e que turn = 1 se flag[1] = true e que turn = 1, ento P1 por sua vez entrar na sua seo crtica Assim, P0 s pode entrar quando ou flag[1] tornar-se false ou turn passar a ser 0.

LPRM/DI/UFES

37

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Tipos de Solues

(cont.)

Solues de Hardware
Inibio de interrupes Instruo TSL (apresenta busy wait)

Solues de software com busy wait


Varivel de bloqueio Alternncia estrita Algoritmo de Dekker Algoritmo de Peterson
A alterao do valor p/ trancado APS o teste permite que dois processos executem a R.C. ao mesmo tempo! O TESTE e a ALTERAO necessitam ser feitos de forma indivisvel...

Solues de software com bloqueio


Sleep / Wakeup, Semforos, Monitores

LPRM/DI/UFES

38

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

A Instruo TSL

(1)

TSL = Test and Set Lock Soluo de hardware para o problema da excluso mtua em ambiente com vrios processadores.
O processador que executa a TSL bloqueia o barramento de memria, impedindo que outras CPUs acessem a MP at que a instruo tenha terminado.

A instruo TSL faz o seguinte:


L o contedo de um endereo de memria (varivel compartilhada lock, usada para proteger a R.C.) para um registrador e armazena um valor diferente de zero (normalmente 1) nesse endereo.

LPRM/DI/UFES

39

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

A Instruo TSL (2)


Se lock = 0 R.C. livre; Se lock = 1 R.C. ocupada. (Lock iniciada com o valor 0). A instruo TSL executada de forma atmica.
As operaes de leitura e armazenamento da varivel lock so garantidamente indivisveis, sem interrupo. Nenhuma outra CPU pode acessar lock enquanto a instruo no tiver terminado.

LPRM/DI/UFES

40

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

A Instruo TSL (3)


Em ling. de alto nvel, seria o mesmo que fazer o seguinte de forma atmica: boolean testset (int lock) { if (lock == 0) { lock = 1; return true; } else { return false; } }
LPRM/DI/UFES 41 Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

A Instruo TSL (4)

LPRM/DI/UFES

42

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

A Instruo TSL (5)


Vantagens da TSL:
Simplicidade de uso (embora sua implementao em hardware no seja trivial). No d aos processos de usurio o poder de desabilitar interrupes. Presente em quase todos os processadores atuais. Funciona em mquinas com vrios processadores.

Desvantagens:
Espera ocupada (busy wait). Possibilidade de postergao infinita (starvation)
processo azarado sempre pega a varivel lock com o valor 1

LPRM/DI/UFES

43

Sistemas Operacionais

http://www.inf.ufes.br/~rgomes/so.htm

Referncias
Silberschatz A. G.; Galvin P. B.; Gagne G.; ''Fundamentos de Sistemas Operacionais'', 6a. Edio, Editora LTC, 2004.
Captulo 7 (at seo 7.3 inclusa)

A. S. Tanenbaum, ''Sistemas Operacionais Modernos'', 2a. Edio, Editora Prentice-Hall, 2003.


Seo 2.3 (at 2.3.3 inclusa)

Deitel H. M.; Deitel P. J.; Choffnes D. R.; Sistemas Operacionais, 3. Edio, Editora Prentice-Hall, 2005
Captulo 5 (at seo 5.4.2 inclusa)

LPRM/DI/UFES

44

Sistemas Operacionais

Você também pode gostar