Universidade Federal do Acre Centro de Ciências Exatas e Tecnológicas Bacharelado em Sistemas de Informação Comunicação entre processos Macilon Araújo Costa Neto macilon@ufac.br Capítulo 2 do livro do Tanenbaum (2003)
Na aula anterior Conceitos Região crítica Condição de disputa Exclusão mútua Exclusão mútua com espera ociosa Inibição de interrupções Variáveis de travamento Estrita alternância Solução de Peterson Instrução TSL CCET182 Sistemas Operacionais 2
Agenda Exclusão mútua sem espera ociosa Acordar e dormir Semáforos Mutexes Monitores Troca de mensagens Barreiras CCET182 Sistemas Operacionais 3
Problemas com espera ociosa A maioria das soluções anteriores tem o defeito de usar espera ociosa Quando um processo deseja entrar em sua região crítica ele verifica se é possível Não havendo possibilidade naquele momento, ele executa um laço ocioso para esperar Além do gasto de tempo pelo processador pode ter efeitos colaterais indesejáveis Problema da inversão de prioridade CCET182 Sistemas Operacionais 4
Inversão de prioridade Dois processos H (alta prioridade) e L (baixa prioridade) H deve rodar sempre que estiver Pronto Em certo momento L está em sua região crítica H torna-se pronto (estava aguardando uma E/S) Então H inicia uma espera ocupada Como H tem prioridade sobre L L nunca conseguirá deixar sua região crítica H nunca deixará de esperar CCET182 Sistemas Operacionais 5
Dormir e acordar Bloquear o processo em vez de gastar tempo Forma mais simples é usar duas primitivas sleep é uma chamada de sistema que bloqueia o processo que a chamou wakeup tem um parâmetro, o processo que deverá ser acordado Ambas podem ter um outro parâmetro Endereço de memória para casar a sleep com a wakeup correspondente CCET182 Sistemas Operacionais 6
Problema do Produtor-Consumidor Também conhecido como problema do buffer limitado (bounded buffer) Dois processos compartilham um buffer de tamanho fixo O produtor coloca informações no buffer O consumidor retira informações do buffer Situação problemática o produtor quer colocar informações, mas o buffer está cheio o consumidor que retirar informações, mas o buffer está vazio Solução produtor deve dormir até que o consumidor retire algo do buffer consumidor deve dormir até que o produtor coloque algo no buffer CCET182 Sistemas Operacionais 7
Primitivas sleep/wakeup CCET182 Sistemas Operacionais 8
Primitivas sleep/wakeup, cont... Condição de disputa por ocorrer devido ao acesso à variável count Consumidor ler count (cujo valor é zero) Ocorre uma interrupção e o produtor começa a rodar Produtor coloca um item no buffer e incrementa count Verifica que count tinha zero então chama wakeup Porém o consumidor não está dormindo e o sinal emitido pela primitiva wakeup é perdido Consumidor volta a rodar baseado em count=0 vai dormir Mais cedo ou mais tarde o produtor vai encher o buffer Ambos vão dormir felizes para sempre CCET182 Sistemas Operacionais 9
Semáforos Em 1956 Dijkstra sugeriu o uso de uma nova variável inteira para controlar o numero de sinais armazenado para uso futuro Um semáforo pode ter valor 0 indicando que não há nenhum sinal armazenado ou um valor positivo indicando o número de sinais armazenados Uso de duas operações down e up CCET182 Sistemas Operacionais 10
Semáforos, cont... down verifica se o valor do semáforo é maior que zero Se for ele é decrementado e o processo continua sua progressão Se for igual a zero, o processo é posto para dormir up incrementa o valor do semáforo Se um ou mais processos estiverem dormindo neste semáforo, um deles será selecionado para que complete a operação down e o semáforo continuará com zero As ações de ler o semáforo, alterá-lo e acordar ou colocar para dormir um processo devem ser indivisíveis ou atômicas Essa é uma garantia para evitar condição de corridas Implementadas como chamadas ao sistema Esses mecanismos foram introduzidos na linguagem Algo 68 CCET182 Sistemas Operacionais 11
Semáforos, cont... CCET182 Sistemas Operacionais 12
Mutexes Quando não há a necessidade contar Versão simplificada de semáforos Gerenciar exclusão mútua de algum recurso ou parte de código compartilhada Um mutex (mutual exclusion) Variável com dois estados desimpedido e impedido Fornecem dois procedimentos mutex_lock e mutex_unlock CCET182 Sistemas Operacionais 13
Mutexes, cont... Implementação de mutex_lock e mutex_unlock são similares a enter_region e leave_region CCET182 Sistemas Operacionais 14
Situação de deadlock Problema com semáforos Os dois downs do código do produtor em ordem trocadas Sendo mutex decrementado antes do empty Se buffer estive cheio o produtor será bloqueado com mutex igual a zero Próxima vez que o consumidor tentar acesso ao buffer Irá executar um down sobre o mutex que é zero sendo também bloqueado Ambos os processos ficaram bloqueados indefinidamente Esta situação é denominada como deadlock CCET182 Sistemas Operacionais 15
Monitores Proposta de Hoare e Hansen para facilitar escrita de programas paralelos Conjunto de procedimentos, variáveis e estruturas de dados, tudo agrupado num módulo especial Processos podem chamar os procedimentos do monitor Não podem acessar diretamente as estruturas de dados e variáveis Apenas um processo pode está ativo dentro de um monitor CCET182 Sistemas Operacionais 16
Monitores, cont... Não bloqueia processos sem condições lógicas para continuarem Introdução de variáveis de condição com duas operações sobre elas wait: bloqueia o processo na fila associada à variável signal: acorda um processo que esteja bloqueado sob uma variável Para evitar que dois processos permaneçam no monitor ao mesmo tempo Exigi-se que um processo que emitir um signal saia imediatamente do monitor O signal deve ser o último comando num procedimento dentro do monitor CCET182 Sistemas Operacionais 17
Monitores, cont... CCET182 Sistemas Operacionais 18
Troca de mensagens Utiliza duas primitivas send e receive Algumas questões de projeto Operando em máquinas diferentes, mensagens podem se perder Tão logo receba uma mensagem deve-se enviar outra confirmando Se o transmissor não receber a confirmação num intervalo de tempo deverá retransmitir a mensagem Necessidade de números sequenciais nas mensagem para identificação Correta identificação da máquina na rede e do processo na máquina Questão de autenticação para evitar que se troque mensagens com impostores Quando operando na mesma máquina, esse processo demora mais que semáforos e monitores CCET182 Sistemas Operacionais 19
Troca de mensagens, cont... CCET182 Sistemas Operacionais 20
Barreiras Destinadas a grupos de processos Aplicações divididas em fases Nenhum processo pode avançar individualmente Ao chegar na barreira um processo é bloqueado Coloca-se uma barreira no final de cada fase Processos fazem chamadas à primitiva barrier CCET182 Sistemas Operacionais 21
Barreiras, cont... (a)processos se aproximando de uma barreira (b)todos os processos, exceto um, bloqueados pela barreira (c)último processo chega, todos passam CCET182 Sistemas Operacionais 22
Continua... Escalonamento de processos Escalonamento em sistemas em lote Escalonamento em sistemas interativos Escalonamento em sistemas de tempo real Política versus mecanismo CCET182 Sistemas Operacionais 23