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
compartilham espaço lógico
Acesso concorrente pode gerar inconsistência de dados
Antecedentes
execução em paralelo
execução concorrente
escalonador alterna o uso da CPU entre processos
preempção tendo concluído parcialmente
Prob. Produtor/Consumidor
se count == 5
execução concorrente
count++
count--
temos 4, 5 ou 6
2 processos menipulam count de forma concorrente
há condição de corrida
Problemas
O problema da seção crítica
altera dados comuns a vários processos
garantir integridade de dados
apenas 1 processo por vez na RC
definir protocolo in/out da RC
3 requisitos obrigatórios
progresso
processos na região remanescente não disputam a RC
espera limitada
processo não espera eternamente
executa na (n+1)
sem furão de fila
exclusão mútua
nível de kernel
com preempção
melhor tempo de resposta
sujeito a condições de corrida
sem preempção
executado até
sair da modalidade
ser bloqueado
liberar voluntariamente a CPU
segmento de código
busy wait
"mãe, tá chegando?"
desperdício de tempo de CPU
inversão de prioridade
LowPriority na RC interrompido
HighPriority em busy wait
LowPriority nunca sai da RC
Soluções
de Hardware
diretamente no processador principal
limitações e problemas em potencial
Inibição de Interrupções
Disable/Enable Interrupt
antes da RC
DI
nenhum processo na RC pode ser interrompido
após RC
EI
Problemas
processos de usuários com poder de DI
ineficente para mulprocessing
DI por longos períodos trás danos
ex.: sincroniz. com periféricos
Instrução TSL
solução exclusão mútua
CPU executa TSL
lock barramento MP-CPU
impede que 2º CPU acesse a mesma região de memória
lock == 0
RC livre
lock == 1
RC ocupada
read/write in lock é indivisível
outra CPU só acessa lock quando instrução terminar
vantagens
processos de usuários não tem poder de DI
simplicidade de uso
funciona com vários processadores
presente nos processadores atuais
desvantagens
busy wait
risco de starvation
azarado sempre pega lock ==1
de Software com Busy Wait
Algoritmo de Peterson
atende aos 3 requisitos
processo informa intenção de entrar na RC
se há empate
entra quem tiver no seu turno
obsoletos
não garante funcionamento
de Software com bloqueio
não há busy wait e spinlock
Primitivas sleep/wakeup
sleep
bloqueia processo que faz chamada
wakeup
acorda processo suspenso
prob produtor/consumidor
com buffer limitado
buffer cheio
bloqueia produtor
buffer vazio
bloqueia consumidor
um processo por vez acessa buffer
pode haver condição de corrida
Semáforos
Semáforo S (var int)
Semáforos binários( 0 e 1)
mutex
S é modificada por
acquire()
wait(), P(), down()
lock(mutex)
incrementa S (ocupação)
release()
signal(), V(), up()
unlock(mutex)
decrementa S (liberação)
Solução prob pombo correio
RC user
colaPostIt
verifica se mochila está cheia
RC pombo
levaDeAparaBeVolta
esvaziaMochila
Solução prob produtor/cons
RC producer
insert_item
RC consumer
remove_item
Deadlock
starvation
processo nunca removido do semáforo
Monitores
soluciona problemas dos Semáforos
troca de ordam wait() signal()
Semáforo "inútil"
wait() e wait()
Deadlock
codifica seções críticas dentro do monitor
código da RC não fica duplicado
garante exclusão mútua
só um processo por vez ativo no dentro do monitor
Problemas Clássicos
Leitores/Escritores
solução
escritores tem prioridade sobre leitores
possível problema
starvation dos escritores
Filósofos Glutões
definição circular
left
(i + N-1) % N
right
(i + 1) % N
5 filósofos, 5 pauzinhos
1 filósofo usa 2 pauzinhos + próximos
filósofo quer comer
(Im HUNGRY) && (LEFT and RIGHT is not eating)?
Filósofo terminou de comer
testa LEFT
testa RIGHT
if(TRUE)
sai de take_forks() :
eat()