Baixe o app para aproveitar ainda mais
Prévia do material em texto
* * SISTEMAS OPERACIONAIS SIMONE MARKENSON Rio de Janeiro, maio de 2011 CONTEÚDO DA AULA * REVISÃO: THREADS São fluxos de execução distintos dentro de um mesmo processo. É a unidade de execução de um sistema com suporte a threads. Threads de um mesmo processo compartilham espaço de endereçamento mas possuem contextos de hardware distintos. Podem ser consideradas funções “com vida própria”. * ATENÇÃO! Thread 1 Thread2 Linha 1 A= A * 2 B= B + 1 Linha 2 B= B * 2 A= A + 1 Caso 1: Thread 1 linha 1 e linha 2, thread 2 linha 1 e linha 2 Resultado final: A =3 B = 3 Caso 2: Thread 2 linha 1 e linha 2, thread 1 linha 1 e linha 2: Resultado final: A = 4 B= 4 Caso3: Thread1 linha1, thread 2 linha1 e linha 2, thread1 linha 2 Resultado final: A = 3 B = 4 * ATENÇÃO! Thread 1 Thread2 Linha 1 A= A * 2 B= B + 1 Linha 2 B= B * 2 A= A + 1 Caso 1: Thread 1 linha 1 e linha 2, thread 2 linha 1 e linha 2 Resultado final: A =3 B = 3 Caso 2: Thread 2 linha 1 e linha 2, thread 1 linha 1 e linha 2: Resultado final: A = 4 B= 4 Caso3: Thread1 linha1, thread 2 linha1 e linha 2, thread1 linha 2 Resultado final: A = 3 B = 4 O RESULTADO DEPENDE DA ORDEM DE EXECUÇÃO PROBLEMAS DA CONCORRÊNCIA!!!! * ERRO É ERRO. Erro “intermitente” do sistema operacional? Não existe erro intermitente de software Não existe “mau contato” dentro de um programa . Erro é erro e fim de papo. Motivos para este equívoco: Estas situações podem se repetir ou não com frequência. Repetição do contexto é muito difícil * CONCEITOS FUNDAMENTAIS Condição de corrida Eventos que geram resultados não determinísticos Região crítica Parte do código que utiliza recursos compartilhados Exclusão Mútua Mecanismo de proteção a uma região crítica * CONCEITOS FUNDAMENTAIS Condição de corrida Eventos que geram resultados não determinísticos Região crítica Parte do código que utiliza recursos compartilhados Exclusão Mútua Mecanismo de proteção a uma região crítica ENTRAR_RC() Código da região crítica SAIR_RC() * COMO FUNCIONA ENTRAR_RC() Espera ocupada OU bloqueio Código da região crítica SAIR_RC() Liberação do recurso * NA VIDA REAL Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE * NA VIDA REAL Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE COMPARTILHADO * NA VIDA REAL Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE (1) * NA VIDA REAL Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE (2) * NA VIDA REAL Processo 1 2 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE (3) * NA VIDA (mais) REAL Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE (1) Processo 2 * Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE (2) NA VIDA (mais) REAL Processo 2 * Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE (2) NA VIDA (mais) REAL Processo 2 TROCA DE CONTEXTO! * Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE NA VIDA (mais) REAL Processo 2 (1) * Processo 1 1 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE NA VIDA (mais) REAL Processo 2 (1) (2) * Processo 1 2 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE NA VIDA (mais) REAL Processo 2 (1) (2) (3) * Processo 1 2 Para imprimir: (1) Ler posição livre da fila (2) Incluir o arquivo na posição indicada (3) Atualizar próxima posição livre 3 2 1 0 PRÓXIMA LIVRE (3) NA VIDA (mais) REAL Processo 2 * O que aconteceu? PROC2 imprimiu Para o sistema operacional não houve erro Para o PROC1 também não houve erro mas... NÃO IMPRIMIU! NA VIDA (mais) REAL CADÊ O PAPEL? * SOLUÇÃO ENTRAR_RC() Ler posição livre da fila Incluir o arquivo na posição indicada Atualizar próxima posição livre SAIR_RC() ENTRAR_RC() Código da região crítica SAIR_RC() * EXCLUSÃO MÚTUA Somente um processo por vez pode executar uma região crítica Um processo interrompido fora de uma região crítica não pode impedir que outro processo tenha acesso a esta região crítica Não pode haver nem deadlock nem starvation Quando não houver processo executando uma região crítica qualquer processo que solicitar acesso deverá obtê-lo imediatamente Um processo deve permanecer executando uma região crítica por tempo finito Nada pode ser assumido sobre a velocidade relativa e dos processos nem o número de processadores * EFEITOS COLATERAIS Deadlock : impasse Starvation * EFEITOS COLATERAIS Deadlock Starvation: Adiamento P1 P2 R1 P3 * EFEITOS COLATERAIS Deadlock Starvation: Adiamento P1 P2 R1 P3 * EFEITOS COLATERAIS Deadlock Starvation: Adiamento P1 P2 R1 P3 * EFEITOS COLATERAIS Deadlock Starvation: Adiamento P1 P2 R1 P3 * DEADLOCK OU STARVATION? * SOLUÇÕES? NA PRÓXIMA AULA ! *
Compartilhar