Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronismo de Processos e Threads - Coggle Diagram
Sincronismo de Processos e Threads
Problema Produtor/Consumidor
Processo produtor produz informações
Consumidas por um processo consumidor
Necessidade de haver sincronização
Impede que consumidor consuma um item que não foi produzido
Condição de Corrida
Vários processos acessam e manipulam os mesmos dados concorrentemente
Garantir que apenas um processo manipule o arquivo por vez
Problema da Seção Crítica
Segmento de código que pode alterar dados
Solução
Apenas um processo por vez deve acessar a RC
Requisitos Obrigatórios
Exclusão Mútua
Outros processos näo poderão executar suas RCS
Enquanto um processo estiver executando sua RC
Progresso
Apenas processos que não estiverem executando suas seções remanescentes
Poderão participar da decisão sobre qual processo será o próximo a entrar em sua RC
Espera Limitada
Há um limite para o número de vezes em que outros processos podem entrar em suas RCs
Projetar um protocolo que processos possam utilizar
Cooperação
Solicitação de permissão
Seção de entrada
Seção crítica
Pode ser seguida de Seção de Saída
Código restante
Seção remanescente
Kernel
Com Preempção
Processo seja interceptado enquanto está sendo executado em modalidade de kernel
Sem preempção
não permite que um processo sendo executado em modalidade de kernel seja interceptado
Soluções para o Problema da Seção Crítica
Tipos
Soluções de Hardware
Inibição de Interrupções
DI - Disable Interrupt
EI - Enable Interrupt
Problemas
desaconselhável dar aos processos de usuário o poder de desabilitar interrupções.
Não funciona com vários processadores
Inibir interrupções por um longo período de tempo pode ter consequências danosas
Instrução TSL
Processador que executa a TSL bloqueia o barramento de memória
Executada de forma atômica
Vantagens
Simplicidade de uso
Não dá aos processos de usuário o poder de desabilitar interrupções
Presente em quase todos os processadores atuais.
Funciona em máquinas com vários processadores
Desvantagens
Busy Wait
Possibilidade de postergação infinita
Implementadas diretamente no processador principal
Soluções de Software com Busy Wait
Tentativas de resolver o problema da Seção Crítica
Algoritmo de Decker
Variável de Bloqueio
Algoritmo de Peterson
Problema da Execução Mútua
Intenção de entrada
Processo indica que é a vez do outro
Alternância Estrita
Soluções de Software com
Bloqueio
Não há espera Ocupada
Não há spinlock
Soluções
Primitivas Sleep/Wakeup
Bloquear a execução dos processos
Não é permitido adentrar na seção crítica
Sleep
Bloqueia o processo e espera por uma sinalização
wakeup
Sinaliza (acorda) o processo anteriormente bloqueado
Semáforos
Ferramenta de sincronismo que não exige espera ocupada
Menos complicado
Apenas acessado por duas operações indivisíveis
DeadLocks
Dois ou mais processos estão esperando
indefinidamente por um evento
Só pode ser causado somente
por um dos processos esperando
Starvation
Lock Indefinido
Monitores
Tornar obrigatória a exclusão mútua.
Colocar as seções críticas em uma área acessível somente a um processo de cada vez
Bloco que contém internamente dados para serem compartilhados
Dados declarados são compartilhados por todos os processos
Um processo pode acessar dados compartilhados por meio dos procedimentos
Problemas Clássicos de Sincronismo
Leitores e Escritores
Problema
text
Possivel Starvation dos Escritores
Solução
Atender aos processos pela ordem de chegada, mas dando prioridade aos escritores
Problema dos Filósofos Glutões