Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais Comunicação Interprocessos e Sincronização Prof. André Leon S. Gradvohl, Dr. andre.gradvohl@gmail.com Plano de Aula � Comunicação interprocessos � Sincronização � Termos importantes � Técnicas de sincronização �Suspensão de interrupções �Espera ocupada �Semáforos �Monitores � Trocas de mensagens �Barreiras Comunicação Interprocessos � Muitas vezes é importante que as tarefas (processos) cooperem para a solução de um problema. � As tarefas podem compartilhar a mesma área de memória em um mesmo processo (threads) ou em múltiplos processos. � As formas de comunicação podem ser: � através de trocas de mensagens; ou � compartilhando a mesma área de memória. Comunicação Interprocessos Memória Processo 0 Processo 1 Área Compartilhada XXX Referência Comunicação Interprocessos Memória Processo 0 Processo 1 Área Compartilhada XXX Referência � Que problemas podem acontecer com processos que compartilham memória? YYY Sincronização � Sincronizar é evitar que dois ou mais processos tenham acesso à mesma região crítica ao mesmo tempo. � Termos importantes: � Região crítica: recurso compartilhado entre dois ou mais processos. � Condição de corrida: situação onde dois ou mais processos concorrem pelo mesmo recurso. � Exclusão mútua: garantia que apenas um processo usará a região crítica em cada instante. Sincronização � As condições para prover a exclusão mútua são: 1. Jamais dois processos entrarão simultaneamente na mesma região crítica. 2. Nenhuma afirmação a respeito da velocidade dos processos. 3. Nenhum processo fora da região crítica pode bloquear os demais processos. 4. Nenhum processo deve esperar eternamente para entrar na região crítica. Sincronização � Existem várias técnicas de sincronização. As mais comuns são: � Suspensão de interrupções � Espera ocupada � Semáforos � Monitores � Trocas de mensagens � Barreiras Técnicas de Sincronização: Suspensão de instruções. � Ao entrar na região crítica o processo suspende as interrupções, para que não seja bloqueado até que saia da região crítica. � Problemas associados: � Ao desligar as interrupções, a preempção por tempo ou por recursos deixa de funcionar; caso a tarefa entre em um laço infinito dentro da região crítica, o sistema inteiro será bloqueado. � Enquanto as interrupcções estão desativadas, os dispositivos de entrada/saída deixam de ser atendidos pelo núcleo, o que pode causar perdas de dados ou outros problemas. � A tarefa que está na seção crítica não pode realizar operações de entrada/saída, pois os dispositivos não responderão. Técnicas de Sincronização: Soluções com espera ocupada � Essa técnica consiste em testar continuamente uma condição que indica se a região crítica desejada está livre ou ocupada. � Existem três técnicas: � Estrita alternância � Algoritmo de Paterson � Instrução TSL Técnicas de Sincronização: Soluções com espera ocupada Entra() Sai() Região Crítica P0 P1 Técnicas de Sincronização: Soluções com espera ocupada � Estrita alternância: int vez = 0 ; int num_tarefas; void entra( int tarefa ) { while (vez != tarefa) ; /∗ a tarefa espera seu turno ∗/ } void sai( int tarefa ) { if (vez < num_tarefas) /∗ o turno e da próxima tarefa ∗/ vez++ ; else vez = 1 ; /∗ volta `a primeira tarefa ∗/ } Técnicas de Sincronização: Soluções com espera ocupada � Solução de Paterson: int vez = 0 ; int querusar[2] = {0, 0}; void entra ( int tarefa ) /∗ tarefa pode valer 0 ou 1 ∗/ { int outra = 1 − tarefa; querusar[tarefa] = 1 ; vez = tarefa ; while ((vez == tarefa) && querusar[outra]) ; /∗ espera ocupada ∗/ } void sai( int tarefa ) { querusar[tarefa] = 0 ; } Técnicas de Sincronização: Soluções com espera ocupada � Test-and-set lock: � TSL é uma instrução atômica que permite o teste e a definição do valor de uma variável em uma única operação atômica. Técnicas de Sincronização: Semáforos � Apesar de ter sido inventado em 1965, por E. Dijkstra, os semáforos são a técnica mais usada atualmente. � Um semáforo é uma variável (s), associada a uma região crítica, sobre a qual podem incidir duas operações: � Operação Down: verifica se o valor de s é maior que zero. Se for, o valor é decrementado. Senão, a tarefa é bloqueada e o valor de s permanece zero. � Operação Up: incrementa o valor de s, e desbloqueia as demais tarefas se o valor for zero. Técnicas de Sincronização: Semáforos Região Crítica s P0 P1 P2 s Técnicas de Sincronização: Semáforos Região Crítica s P0 P1 P2 s Técnicas de Sincronização: Monitores � A técnica de monitores garante que apenas um processo está usando um procedimento ou função do programa em um dado instante. � Dessa forma, embute-se o acesso à região crítica em um procedimento ou função e assim evita-se que dois ou mais processos acessem a região em um mesmo instante. Técnicas de Sincronização: Troca de Mensagens � A técnica de troca de mensagens é mais útil na sincronização de sistemas distribuídos. � Nesse caso, um processo fica bloqueado até que receba uma mensagem de que pode usar a região crítica. Técnicas de Sincronização: Troca de Mensagens Região Crítica P0 P2Pc Posso usar? Posso usar? Agora pode Técnicas de Sincronização: Trocas de Mensagens Região Crítica P0 P2 Pc Posso usar? Vou sair! Agora pode Técnicas de Sincronização: Barreiras B a r r e i r a d e S o f t w a r e P0 P1 P2 P3 P0 P1 P2 P3
Compartilhar