Please enable JavaScript.
Coggle requires JavaScript to display documents.
SINCRONISMO DE PROCESSOS E THREADS - Coggle Diagram
SINCRONISMO DE PROCESSOS E THREADS
Antecedentes
O Problema do Produtor/Consumidor
produtor
produz informações
consumidor
processo que consome a informação
Necessidade de sincronização
consumidor não tente consumir um item que
ainda não foi produzido
O Problema da Seção Crítica
processo
Solicita permissão para
entrar em sua seção crítica
região crítica
Segmento de código que altera
dados comuns a vários
processos/threads
Apenas um processo por vez
Seção de entrada
Seção crítica
seção de saída
seção remanescente
Três requisitos obrigatórios de uma boa solução
Exclusão Mútua
Progresso
Espera limitada
Kernel COM ou SEM Preempção
Kernels com preempção
Processo pode ser
interceptado enquanto está sendo executado em modalidade de kernel
Melhor capacidade de resposta
Mais apropriado
para programação em tempo real
Sujeito a condições de corrida
Difíceis de projetar em arquiteturas SMP
Kernels sem preempção
Processo sendo executado em modalidade de kernel não pode ser interceptado
Livre de condições de corrida
Não tem as vantagens de um kernel com preempção
Soluções para o Problema da
Seção Crítica
A questão do busy wait
espera ativa ou espera ocupada
verifica se a
entrada é permitida
Se não, ele espera em um laço
(improdutivo) até que seja liberado
desperdício de tempo de CPU
Problema da inversão de prioridade
Soluções de Hardware
Inibição de Interrupções
DI = Disable Interrupt / EI = Enable Interrupt
Processo desativa todas as interrupções
antes de entrar na sua RC
Reativando imediatamente depois de sair dela
Problemas da Solução DI/DE
Não funciona com vários processadores
Interrupções por um longo período de tempo pode ter consequências danosas
Instrução TSL
Teste e atualize a variável de
trava
Processador que executa a TSL bloqueia o
barramento de memória
Lê o conteúdo de um endereço de memória
Armazena um valor diferente de zero
normalmente 1
variável
compartilhada “lock”
Se lock = 0 ⇒ RC livre
Se lock = 1 ⇒ RC ocupada
Simplicidade de uso
Presente em quase todos os processadores atuais
Espera ocupada
Possibilidade de postergação infinita
Soluções de Software com Busy Wait
Algoritmo de Peterson
"Ao marcar a sua intenção de entrar, o processo já indica que a vez é do outro"
(para o
caso de empate)
Soluções de Software com
Bloqueio
Soluções de Software com
Bloqueio
bloquear a execução dos
processos quando não é permitido entrar em
suas regiões críticas
sleep()
Bloqueia o processo e espera por uma sinalização
wakeup()
Acorda o processo anteriormente bloqueado
Semáforos
Ferramenta de sincronismo que não exige espera ocupada
acquire()
release()
“liberação do semáforo”
“ocupação do semáforo”
mutex (mutual exclusion)
lock(mutex)
unlock(mutex)
Deadlock
processos estão esperando por um evento
evento que só pode ser causado somente
por um dos processos esperando
Starvation
lock indefinido
Processo pode nunca ser
removido da fila de semáforo em que ele é suspenso
Monitores
bloco que contém
internamente dados para serem compartilhados
compartilhados por
todos os processos
única maneira pela qual um
processo pode acessar os dados
procedimentos
para manipular esses dados
executados de forma
mutuamente exclusiva
Problemas Clássicos de Sincronismo
Problema dos Leitores e Escritores
leitores
Acesso simultâneo aos
dados compartilhados
Possível starvation dos escritores
Solução
Atender aos processos pela ordem de chegada
dando prioridade aos escritores
escritores
Acesso
exclusivo aos dados compartilhados
Problema dos Filósofos Glutões
5 filósofos ao redor de uma mesa redonda
um prato de arroz ao centro
cinco pauzinhos,
colocados um de cada lado do
filósofo
Quando um filósofo fica com fome
ele pega os dois pauzinhos mais
próximos