Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronismo de Processos e Threads - Coggle Diagram
Sincronismo de Processos e Threads
Introdução
Processo cooperativo
Pode afetar ou ser afetado por outros processos
Compartilhamento de espaço de endereços lógicos (código e dados)
Acesso concorrente a dados compartilhados
Pode resultar em inconsistência de dados
Manutenção da consistência dos dados
Requer mecanismos
Garantir execução ordenada dos processos em cooperação
Antecedentes
Execução concorrente e paralela
Impacto na integridade de dados compartilhados
O Problema do Produtor/Consumidor
Paradigma comum para processos cooperativos
Produtor e consumidor
Produtor produz informações para o consumidor
Região de memória compartilhada (buffer)
Sincronização para evitar acesso incorreto
Buffer de tamanho limitado
Produtor e consumidor aguardam se necessário
Solução com contador inteiro
Incrementado pelo produtor, decrementado pelo consumidor
Condição de Corrida
Necessidade de sincronização para evita la
Situações comuns em sistemas operacionais
Manipulação concorrente de recursos
O Problema da Seção Crítica
Seção crítica (SC) ou região crítica (RC)
Area de dados compartilhados
Garantir consistência com acesso exclusivo
Projeto de protocolo para cooperação
Seção de entrada
seção crítica
seção de saída
seção remanescente
Três requisitos de uma boa solução:
Exclusão Mútua
Progresso
Espera limitada
Adicionalmente
Velocidade relativa dos processos
Kernel COM ou SEM Preempção?
Condições de corrida em sistemas operacionais
Estruturas de dados do kernel suscetíveis a condições de corrida
Abordagens para manipular seções críticas em sistemas operacionais:
Kernels com preempção
Melhor capacidade de resposta
Sujeito a condições de corrida (Por causa do SMP)
Kernels sem preempção
Livre de condições de corrida
Não tem as vantagens do kernel com preempção
Soluções para o Problema da Seção Crítica
Soluções de Hardware
Introdução
Soluções implementadas diretamente no processador
Limitações e problemas potenciais
Inibição de Interrupções (DI / EI)
Disable Interrupt / Enable Interrupt
Desativa todas as interrupções
Problemas da Solução DI/EI
Desaconselhável para processos de usuário
Não funciona com vários processadores
Demora em passar a mensagem
Consequências danosas de inibição prolongada
Instrução TSL (Test and Set Lock)
Solução para a exclusão mútua em vários processadores
bloqueia o barramento de memória
Executada de forma atômica
Vantagens e Desvantagens da TSL
Simplicidade de uso
Não dá poder de desabilitar interrupções aos processos
Espera ocupada (busy wait)
Possibilidade de postergação infinita (starvation)
Soluções de Software com Busy Wait
Algoritmos baseados em código
Variável de Bloqueio
Alternância Estrita
Algoritmo de Decker
Algoritmo de Peterson
Ao marcar a sua intenção de entrar, o processo já indica que a vez é do outro.
Desafios em processadores modernos
Reordenamento de instruções (out of order execution)
Afeta a eficácia do Algoritmo de Peterson
Soluções de Software com Bloqueio
Primitivas Sleep/Wakeup
Bloqueio de execução dos processos
Evita busy wait
sleep() e wakeup()
O Problema do Produtor e Consumidor c/ Buffer Limitado
Produtor gera dados, consumidor retira
Bloqueio do produtor se buffer cheio, consumidor se vazio
Semáforos
Ferramenta de sincronismo sem espera ocupada
Operações
acquire()
Decrementa a variável, indicando a “ocupação do semáforo”
release()
Incrementa a variável, indicando a “liberação do semáforo”
semáforos binários ou mutex (mutual exclusion)
Problemas possíveis em soluções com semáforos
Deadlock: Espera indefinida entre processos
Starvation: Bloqueio indefinido de um processo
Monitores
Semáforos vs. Monitores
Semáforos propensos a erros de temporização
Exemplos de erros
Troca de ordem wait() e signal() em mutex
Vários processos em seções críticas simultaneamente
Substituição de signal() por wait()
Deadlock
Omissão de wait() ou signal()
Violação de exclusão mútua ou deadlock
Monitores como Solução
Garantir exclusão mútua
Seções críticas em área acessível a um processo por vez
Estrutura de Monitor
Dados compartilhados e procedimentos
Procedimentos chamados por processos para manipular dados
Execução Mutuamente Exclusiva
Apenas um processo ativo no monitor
Sintaxe do Monitor
Implementado em linguagens como C# e Java
Importância Conceitual
Evita duplicação de código em seções críticas
Problemas Clássicos de Sincronismo
Problema dos Leitores e Escritores
Leitores podem acessar simultaneamente
escritores têm acesso exclusivo
Possível Starvation dos Escritores
Solução: Atendimento pela ordem de chegada com prioridade para escritores
Problema dos Filósofos Glutões
Cinco filósofos em uma mesa circular
Compartilham pauzinhos e um prato de arroz
Quando um filósofo fica com fome ele pega os dois pauzinhos mais próximos