Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
* * * Faculdade Pernambucana - FAPE Sistemas Operacionais Prof. Flávio Gonçalves da Rocha * * * Comunicação entre Processos A solução de Peterson O algoritmo de Peterson fornece exclusão mútua Cada processo antes de entrar na memória compartilhada (região crítica) chama enter_region com seu próprio número como parâmetro (pode haver espera) Depois que terminou de trabalhar com as variáveis compartilhadas o processo chama leave_region para indicar que terminou * * * Comunicação entre Processos A solução de Peterson para obter exclusão mútua * * * Comunicação entre Processos A Instrução TSL Muitos computadores, especialmente aqueles projetados com múltiplos processadores em mente têm uma instrução TEST AND SET LOCK (TSL – Testa e Configura bloqueio) Para utilizar a instrução TSL é usada uma variável compartilhada chamada lock. Quando lock é 0 qualquer processo pode configurá-lo como 1 utilizando a instrução TSL e, então, ler ou gravar a memória compartilhada. Quando termina, o processo configura lock de volta para 0 utilizando uma instrução uma instrução MOVE comum. * * * Comunicação entre Processos A Instrução TSL enter_region: tsl register,lock | copia lock para o registrador e o configura como 1 cmp register,#0 | lock era zero? jne enter region | se não era zero, o bloqueio estava configurado, então inicia um laço ret | retorna para aquele que fez a chamada; entrada na região crítica leave_region: | armazena um 0 no bloqueio (lock) move lock, #0 | retorna para aquele que fez a chamada ret * * * Comunicação entre Processos Sleep e Wakeup Tanto a solução de Peterson como a solução que utiliza TSL são corretas mas têm o defeito de necessitarem de espera ativa. O processo espera em laço até que a entrada seja permitida (Desperdiça CPU e pode gerar o problema da inversão de prioridade) Algumas primitivas de comunicação interprocesso bloqueiam o processo quando ele não pode entrar na sua região crítica Uma das mais simples é o par SLEEP e WAKEUP * * * Comunicação entre Processos Sleep e Wakeup SLEEP Chamada de sistema que causa o bloqueio do processo que fez a chamada WAKEUP Possui um parâmetro que indica qual processo deve ser acordado * * * Comunicação entre Processos Sleep e Wakeup O Problema dos Produtores e Consumidores Também conhecido como o problema do buffer associado Dois processos compartilham um buffer de tamanho fixo. Um deles, o produtor, coloca as informações em um buffer e o outro, o consumidor, pega-as Problema surge quando o produtor quer colocar um novo item no buffer, mas este último já está cheio. Solução é fazer o produtor dormir até que o buffer tenha espaço * * * Comunicação entre Processos Sleep e Wakeup O Problema dos Produtores e Consumidores De modo semelhante o consumidor deve dormir se o buffer estiver vazio até que o produtor coloque algo no buffer e o acorde. Essa solução pode levar a condição de corrida uma que vez que há uma variável que controla o nº de itens no buffer, a variável count (compartilhada). O produtor e o consumidor testam e manipulam count O problema é que numa condição de corrida, haverá a possibilidade de em um dado momento ambos os processos (produtor e consumidor) estarem dormindo * * * Comunicação entre Processos O problema dos produtores e consumidores com uma condição de corrida fatal * * * Comunicação entre Processos Sleep e Wakeup O Problema dos Produtores e Consumidores Um bit de espera por despertar pode ser utilizado mas, nos casos em que há três ou mais processos um bit torna-se insuficiente sendo necessário tantos outros de acordo com o nº de processos (o problema persiste então) * * * Comunicação entre Processos Semáforos Em 1965 Dijkstra sugeriu utilizar uma variável inteira, chamada de Semáforo, para contar o número de wakeups salvos para uso futuro Semáforo igual a 0 indica que nenhum wakeup foi salvo Semáforo for igual a algum valor positivo se um ou mais wakeups estivessem pendentes Propôs duas operaçoes: DOWN e UP DOWN – verifica se o valor é maior que 0. Se for diminui o valor e simplesmente continua. * * * Comunicação entre Processos Semáforos Se o valor for 0, o processo é colocado para dormir sem completar o DOWN, por enquanto Verificar o valor, alterá-lo e, possivelmente, ir dormir é tudo feito como uma única ação atômica. Ao iniciar uma operação de semáforo, nenhum outro processo pode acessar o semáforo até que a operação tenha-se completado ou tenha sido bloqueada. A atomicidade é essencial para resolver problemas de sincronização e evitar condições de corrida. * * * Comunicação entre Processos Semáforos UP: incrementa o valor do semáforo endereçado Um up sobre um semáforo com processos dormindo resulta em um processo dormindo a menos A operação de incrementar o semáforo e acordar um processo também é atômica Semáforos que assumem somente os valores 0 (livre) e 1 (ocupado) são denominados semáforos binários ou mutex * * * Comunicação entre Processos Semáforos O problema dos produtores e dos consumidores utilizando semáforos
Compartilhar