(Aula 13) 2 2 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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 (o que, em ltima instncia, ditado 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. A parte do programa (trecho de cdigo) que em que os dados compartilhados so acessados denominada de regio (ou seo) crtica. 3 3 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES Exemplo 1 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. Procedure echo(); var out, in: character; begin input (in, keyboard); out := in; output (out, display) end. 4 4 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 5 5 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES Exemplo 2 (2) P A eP B decidem colocar um arquivo no spool de impresso quase ao mesmo tempo. P A l in, armazena o seu valor (7) na varivel local next- free-slot e interrompido. P B escalonado, l in e coloca o nome do seu arquivo no slot 7, atualizando in para 8. P A retorna e escreve o nome do seu arquivo na entrada 7 (valor de next-free-slot), apagando o nome colocado por P B . A varivel next-free-slot passa a valer 8. O servidor no notar nada de errado (o diretrio est consistente) e P B nunca realizar qualquer sada. 6 6 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 7 7 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES Interao de Processos (1) Processos sem conhecimento uns dos outros: No so especificamente projetados para trabalharem juntos. Os resultados de um processo so independentes das aes dos outros. Tipo de relacionamento: Competio O S.O. precisa resolver a disputa por recursos existe uma interao indireta. Potenciais problemas: Acesso no controlado R.C. (controle de excluso mtua). Deadlock: (P 1 ,R 2 ) e (P 2 ,R 1 ),ambos precisam de (R 1 ,R 2 ). Starvation: alternncia entre P 1 e P 3 em detrimento de P 2 . 8 8 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES Interao de Processos (2) Cooperao via compartilhamento Processos podem usar e alterar dados compartilhados mas esto cientes de que outros processos podem acessar esses dados. Preocupao com a integridade dos dados compartilhados (coerncia dos dados), alm dos problemas de controle de excluso mtua, deadlock e starvation. Os resultados de um processo podem depender de informaes obtidas por outros. 9 9 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES Interao de Processos (3) Cooperao por comunicao Processos participam de um esforo comum na realizao de uma tarefa. A comunicao prov uma maneira de sincronizar ou coordenar as vrias atividades. Primitivas para o envio e recebimento de mensagens so providas como parte de uma linguagem de programao ou pelo kernel do sistema operacional. 10 10 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES Interao de Processos (4) Cooperao por comunicao (cont.) Como nada compartilhado pelos processos no existem condies de corrida. Assim, existncia de um mecanismo de excluso mtua no um requisito de controle. Pode ocorrer deadlock: Cada processo esperando por uma mensagem de um outro processo. Pode ocorrer starvation: Dois processos enviando repetitivamente mensagens um para o outro e um terceiro bloqueado, esperando por uma mensagem de um deles. 11 11 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 12 12 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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 13 13 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 14 14 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES Exemplo Problema do produtor-consumidor (varivel N indica quantos itens ainda podemser colocados no buffer). Pr odut or Consumi dor DI DI LDA N LDA N DCR A I NC A STA N STA N EI EI 15 15 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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). 16 16 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 17 17 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 18 18 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES A Instruo TSL (3) boolean testset (int lock) { if (lock == 0) { lock = 1; return true; } else { return false; } } 19 19 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES A Instruo TSL (4) 20 20 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES A Instruo TSL (5) 21 21 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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 22 22 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 23 23 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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 P i : ... while turn = 1 do {nothing}; turn := 1; < critical section > turn := 0; ... 24 24 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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. 25 25 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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; . P1: . . while turn 1 do {nothing}; < critical section > turn := 0; . 26 26 http://www.inf.ufes.br/~zegonc/so.htm Sistemas Operacionais 2007/2 Prof. J os Gonalves LPRM/DI/UFES 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.