Escolar Documentos
Profissional Documentos
Cultura Documentos
http://www.inf.ufes.br/~rgomes/so.htm
Condies de Corrida
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
http://www.inf.ufes.br/~rgomes/so.htm
Tipos de Solues
Solues de Hardware
Inibio de interrupes Instruo TSL (apresenta busy wait)
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
LPRM/DI/UFES
12
Sistemas Operacionais
http://www.inf.ufes.br/~rgomes/so.htm
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)
http://www.inf.ufes.br/~rgomes/so.htm
LPRM/DI/UFES
16
Sistemas Operacionais
http://www.inf.ufes.br/~rgomes/so.htm
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)
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
http://www.inf.ufes.br/~rgomes/so.htm
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
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
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
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.
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.)
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)
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.
LPRM/DI/UFES
39
Sistemas Operacionais
http://www.inf.ufes.br/~rgomes/so.htm
LPRM/DI/UFES
40
Sistemas Operacionais
http://www.inf.ufes.br/~rgomes/so.htm
http://www.inf.ufes.br/~rgomes/so.htm
LPRM/DI/UFES
42
Sistemas Operacionais
http://www.inf.ufes.br/~rgomes/so.htm
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)
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