Programação Paralela e Distribuída Ordenação e Sincronização Prof. Msc. Marcelo Iury de Sousa Oliveira marceloiury@gmail.com http://sites.google.com/site/marceloiury/ Comunicação entre Processos Processos Independentes. Não afetam nem são afetados por outros processos. Processos Cooperados. Compartilham: Memória; Arquivos; Dispositivos de E/S; Etc. 1
Processos Cooperados Compartilhamento de dados. Processo produtor de dados. Processo consumidor de dados, Buffer: Limitado: Produtor e Consumidor. Ilimitado: Somente Consumidor. Implementação. Via memória compartilhada; Via IPC (Interprocess Comunication - SO) Buffer Circular Implementação como um array circular. próxima entrada 4 próxima saída 8 5 Contador Introdução de um contador de quantidade. Produtor e Consumidor manipulam o contador. 5 2
Condições de Corrida Mecanismo de Sincronização. Garante o compartilhamento de recursos e a comunicação entre os processos. Garante a integridade e a confiabilidade dos dados compartilhados. Condições de Corrida: Situações onde dois ou mais processos estão acessando dados compartilhados. O resultado final pode variar de acordo com a ordem de execução. Exemplo 1: Condições de Corrida 1 2 Processo Processo A B 3 4 +1-1 5 8 Resultado Final: Contador = (ERRO!) 3
Exemplo 2: Condições de Corrida 4 5 Processo A 10 Y 1 9 próxima entrada 3 8 2 8 suspenso recebe CPU Valor armazenado pelo processo B é perdido. X 4 Processo B 5 8 3 recebe CPU suspenso Condições de Corrida Região Crítica: Parte do código onde é feito acesso a recursos compartilhados, e que podem levar a condições de corrida. Ex: Processo A. Código normal Início da Seção Crítica (Protocolo de Entrada) Seção Crítica Término da Seção Crítica (Protocolo de Saída) Código normal 4
Concorrência em programas Enquanto um processo estiver usando um recurso, os outros devem aguardar até que o recurso esteja liberado. Exclusão Mútua. Exclusividade no acesso a um determinado recurso. A exclusão mútua deve afetar os processos concorrentes quando um deles estiver em uma região crítica. Problemas de Sincronização Velocidades muito diferentes dos processos: Podem causar problema de solução de sincronização entre processos. Ex: Problema produtor / consumidor. Starvation (Indefinitely Postponed): Um processo nunca consegue executar sua região crítica e acessar o recurso compartilhado. Outros processos são sempre prioritários. 5
Soluções de Hardware Desabilitação das interrupções: Solução mais simples para a exclusão mútua; Falha de Proteção: O processo precisa voltar a habilitar as interrupções. Instrução Test-and-Set. Utilização de uma variável para testar a possibilidade de executar a região crítica. O processo impedido de executar sua região crítica executa um loop de espera. Gasto de CPU. Soluções de Software Variável de Travamento; Gera condições de corrida. Estrita Alternância. Starvation. Em geral, as soluções por software resolvem a exclusão mútua, mas geram a espera ocupada (Busy Wait): Teste contínuo de uma variável até que ocorra uma mudança no seu valor; O processo impedido de executar sua região crítica executa um loop de espera. Gasto de CPU.
Soluções de Software Implementações de uso das regiões críticas sem a espera ocupada: Semáforos (Counting Semaphores); Semáforos Binários (Mutual Exclusion Semaphores); Mutex; Monitores. Semáforos Ferramenta de sincronização criada por Dijkstra (195); Características: Variável inteira; Não negativa. Manipulados por duas operações atômicas: DOWNou Wait (P - Proberen - Testar) UP ou Signal (V - Verhogen - Incrementar) Implementados como chamada ao sistema.
Semáforos Semáforos (Counting Semaphores); Sincronização entre processos. Full / Empty. Associado a um recurso compartilhado. Indica quando o recurso está alocado a algum processo. Semáforos Semáforos Binários (Mutual Exclusion Semaphores); Controle da exclusão mútua. Down / Wait: Antes da região crítica. Up / Signal : Após a região crítica. Chamados MUTEX ou BINÁRIOS, por só assumirem valores 0 e 1. 8
Mutex Estrutura de sincronização bastante simples que pode estar em dois estados: Locked; Unlocked. Duas operações são definidas sobre um mutex: Lock; Unlock. lock Processo 1 unlock lock Mutex unlock Processo 2 Monitores Mecanismo de sincronização de alto nível proposto por Hoare (194) e Brinch Hansen (195); Conjunto de procedimentos, variáveis e estruturas de dados agrupados em um módulo especial; Característica mais importante é a implementação automática da exclusão mútua: Somente um processo pode estar ativo em um monitor em um determinado instante de tempo. 9
Monitores A implementação da exclusão múltipla é de responsabilidade do compilador; Utilização de variáveis de condição com uma fila de processos associados a elas; Um processo em uma fila (bloqueado) só poderá prosseguir quando outro processo executar um SIGNAL sobre a respectiva variável de condição. Monitores A comunicação do processo com o monitor é feita unicamente através de chamadas a seus procedimentos e dos parâmetros passados para eles; Podem ser chamadas duas operações: Wait (variable) Signal (variable) 10