Ouihio
1221 palavras
5 páginas
Sistemas OperacionaisIvan Saraiva Silva
Ciência da Computação
2005.1
Aula 7
Programação concorrente
• Composta por um conjunto de processos seqüenciais que executam concorrentemente
• Processos disputam recursos comuns
– variáveis, periféricos, etc...
• Um processo é dito de cooperante quando pode afetar, ou ser afetado, por outro processo
• Programação complexa
– Aos erros “comuns” adicionam-se erros próprios ao modelo – Aspecto não-determinístico
• Difícil depuração
Condições de corrida
• Condições de corrida
– Situações onde dois ou mais processos acessam dados compartilhados e o resultado final depende da ordem de execução – A ordem de execução é não determinística, é ditada pelo mecanismo de escalonamento do S.O.
• Evitando condições de corrida
– Tornar os processos imunes a ordem de execução
• Forçar ordem de execução (sincronização)
– Introdução de mecanismos de exclusão mútua.
• Só um processo estará usando os dados compartilhados num dado momento. • Região crítica (ou seção crítica )
– Trecho de código em que os dados compartilhados são acessados. Exemplo 1
Procedure echo(); var out, in: character; begin input (in, keyboard); out := in; output (out, display) end. Exemplo 1
• P1 invoca echo() e é interrompido imediatamente após a conclusão da função input(). Suponha que x tenha sido o caractere digitado, que agora está armazenado na variável in.
• P2 é despachado e também invoca echo(). Suponha que y seja digitado (in recebe y), sendo então exibido no dispositivo de saída.
• P1 retoma a posse do processador. O caractere exibido não é o que foi digitado (x), pois ele foi sobreposto por y na execução do processo P2.
– Conclusão: o caractere y é exibido duas vezes.
• Essência do problema: o compartilhamento da variável global in.
Exemplo 2
•
•
•
Diretório de spooler com n entradas, cada uma capaz de armazenar um nome de arquivo. Servidor de impressão verifica
se