Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais Comunicação entre Processos Parte I Prof. Sílvio Fernandes UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Comunicação Interprocessos Imagine que um sistema de reserva de linha aérea só possui um assento disponível, todos os demais já foram ocupados Dois clientes estão comprando seus bilhetes no mesmo instante em terminais diferentes 2 Negociação Comunicação Interprocessos Imagine um pipeline do interpretador de comandos A saída do 1º processo deve ser passada para o 2º, e isso prossegue até o fim da linha de comandos cat arq1 arq2 arq3 | sort > dev/lp cat: concatena; sort: ordena; >: redireciona a saída 3 Comunicação Interprocessos Se um processo A produz dados e o processo B os imprime B deve esperar até que A produza alguns dados antes de iniciar a impressão O que esses 3 exemplos tem em comum? Comunicação interprocessos = interprocess communication - IPC 4 Comunicação Interprocessos Frequentemente processos precisam se comunicar com outros processos Há uma necessidade de comunicação entre processos que deve ocorrer, de preferência, de uma maneira bem estruturada e sem interrupções 5 Comunicação Interprocessos Há 3 tópicos relacionados 1. Um processo passa informação para outro 2. Garantir que 2 ou mais processos não invadam uns aos outros 3. Sequência adequada quando existirem dependências Os mesmos problemas e soluções envolvendo comunicação entre processos também se aplica a threads (os 2 últimos tópicos) 6 Condições de disputa Processos que trabalham juntos podem compartilhar algum armazenamento comum (memória principal ou arquivo) a partir do qual cada um seja capaz de ler e escrever Ex: Quando um processo quer imprimir ele coloca o nome do arquivo em um diretório de spool e, outro processo, o daemon de impressão, verifica periodicamente se há algum arquivo para ser impresso 7 Condições de disputa 2 processos querem ter acesso simultaneamente à memória compartilhada 8 Condições de disputa Ex cont.: Um processo “A” requisita ao SO a próxima vaga na fila de impressão, e recebe a informação de que a próxima vaga é “7”. Nesse momento “A” é escalonado e “B” ganha a CPU. “B” requisita ao SO a próxima vaga e também recebe “7”, onde ele escreve seu arquivo e continua sua execução. Quando “A” volta a executar ele escreve seu arquivo na posição “7” (sobrescrevendo o arquivo de “B”) e atualiza a próxima vaga para “8”. “B” nunca receberá qualquer saída 9 Condições de disputa Essa situação é chamada de condição de corrida ou disputa (race conditions) 2 ou mais processos estão lendo ou escrevendo algum dado compartilhado e cujo resultado final depende das informações de quem e quando executa precisamente 10 Regiões críticas Para evitarmos condições de disputa precisamos de mecanismos para assegurar que outros processos sejam impedidos de acessar um recurso compartilhado qualquer que já esteja em uso por outro processo. Elas são conhecidas como técnicas de exclusão mútua O problema anterior aconteceu porque “B” começou a usar uma variável compartilhada antes que “A” terminasse de usá-la 11 Regiões críticas Regiões do código em que há acesso a um recurso compartilhado são chamadas de regiões críticas ou seção crítica Satisfazer 4 condições para uma boa solução 1. Nunca dois processos podem estar simultaneamente em suas regiões críticas 2. Nada pode ser afirmado sobre a velocidade ou sobre o número de CPUs 3. Nenhum processo executando fora de sua região crítica pode bloquear outro processo 4. Nenhum processo deve esperar eternamente para entrar em sua região crítica 12 Regiões críticas Exclusão mútua usando regiões críticas 13 Exclusão mútua com espera ociosa Enquanto um processo estiver ocupado atualizando a memória compartilhada em sua região crítica, nenhum outro processo cause problema invadindo-a Soluções Desabilitando interrupções Variáveis de impedimento Alternância obrigatória Solução de Peterson Instrução TSL 14 Exclusão mútua com espera ociosa Desabilitando interrupções A solução mais simples é aquela em que cada processo desabilita todas as interrupções lodo depois de entrar em sua região crítica e reabilita-as antes de sair dela A CPU não será alternada para outro processo Não é prudente dar aos processos o poder de desligar interrupções Em multiprocessadores, afetará apenas a CPU que executou a instrução disable, as outras poderão ter acesso a memória compartilhada 15 Exclusão mútua com espera ociosa Desabilitando interrupções Muitas vezes é uma técnica bastante útil dentro do próprio SO, mas inadequada como mecanismo geral de exclusão mútua para processos de usuário Mesmo assim está caindo em desuso em virtude do número crescente de chips mutinúcleo em PCs 16 Exclusão mútua com espera ociosa Variáveis de impedimento (lock variable) Uma única variável compartilhada (lock) incialmente com o valor 0 Para entrar na região crítica, um processo testa antes se há impedimento, verificando o valor de lock, quando tem acesso modifica para 1 Apresenta exatamente a mesma falha do diretório de spool 17 Exclusão mútua com espera ociosa Alternância obrigatória Utiliza uma variável compartilhada turn que indica a vez de qual processo pode entrar na região crítica, a qual deve ser modificada para o próximo processo antes de sair da região crítica Não é uma boa ideia quando um dos processos for muito mais lento que o outro Essa situação viola a condição 3: um processo bloqueia outro que não está em sua região crítica 18 Exclusão mútua com espera ociosa Alternância obrigatória (a) Processo 0. (b) Processo 1 19 Exclusão mútua com espera ociosa Solução de Peterson Consiste em 2 rotinas em ANSI C Antes de entrar na região crítica cada processo chama enter_region com seu número de processo (0 ou 1). Esta chamada fará com que ele fique esperando até que seja seguro entrar. Depois de terminar o uso da região crítica, o processo chama leave_region para permitir a outro processo entrar 20 Exclusão mútua com espera ociosa Solução de Peterson 21 Exclusão mútua com espera ociosa Instrução TSL Solução requer auxílio do hardware Muitos computadores (especialmente com multiplos processadores) possuem instruções test and set lock TSL RX, LOCK lê o conteúdo de memória (lock) no registrador RX e, então armazena um valor diferente de zero no endereço LOCK As operações de leitura e armazenamento da palavra são seguramente indivisíveis 22 Exclusão mútua com espera ociosa Instrução TSL Nenhum outro processador pode ter acesso à memória enquanto a instrução não terminar A CPU que está executando a instrução TSL impede o acesso ao barramento de memória TSL RX, LOCK copia o valor de RX para LOCK. Um processo pode entrar em sua região crítica apenas no caso de LOCK ser 0. A leitura do valor de LOCK e sua restauração para 0 podem ser feitas por instruções ordinárias 23 Exclusão mútua com espera ociosa Instrução TSL 24 Referências TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 3ª Ed., Prentice Hall, 2009. TANENBAUM,Andrew S.; WOODHULL, Albert S. Sistemas Operacionais: Projeto e Implementação. 3ª Ed., Prentice Hall, 2008. MACHADO, Francis B.; MAIA, Luiz P. Arquitetura de Sistemas Operacionais. 3a. Edição. LTC, 2004. DEITEL, Harvey; DEITEL, Pau; STEINBUHLER, Kate. Sistemas Operacionais. 3ª. Edição. Prentice Hall, 2005 SILBERSCHATZ, Abraham; GALVIN, Peter; GAGNE, Greg. Fundamentos de Sistemas Operacionais. 6ª. Edição. LTC, 2004. 25
Compartilhar