Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronismo de Processos e Threads, MAPA MENTAL 6 DISCIPLINA: SO 2025/2 …
Sincronismo de Processos e Threads
6.1 ANTECEDENTES
Execução Concorrente/Paralela
Processos podem ser interrompidos
Núcleos diferentes simultâneos
Problema Produtor/Consumidor
Buffer compartilhado
Sincronização necessária
HTML/Navegador Web
Condição de Corrida
Acesso concorrente dados compartilhados
Resultado depende ordem de acesso
Exemplo: count++ e count--
T0 a T5: intercalação
Resultado incorreto
6.2 PROBLEMA SEÇÃO CRÍTICA
Conceito
Segmento código altera dados comuns
apenas um processo por vez
Processo Permisão
Seção entrada
Seção crítica
Seção saída
Seção remanescente
3 Requisitos Solução
Exclusão Mútua: 1 processo por vez na RC
Progresso: Decisão não adiada; Quem não está na seção remanescente decide
Espera Limitada: Limite de vezes para entrar; Sem espera eterna
Kernel Preempção
COM preempção: Melhor resposta; Tempo real; Sujeito condições corrida
SEM preempção: Livre condições corrida; Pior tempo resposta
6.3 SOLUÇÕES
6.3.1 SOLUÇÕES HARDWARE
6.3.1.1 Inibição Interrupções
DI/EI (Disable/Enable)
Desativa interrupções antes RC
Problemas:
Não funciona multiprocessador
Poder indevido ao usuário
Perde sincronização periféricos
6.3.1.2 Instrução TSL
Test and Set Lock
Bloqueia barramento memória
Atômica: leitura + escrita
lock = 0 → RC livre
lock = 1 → RC ocupada
Vantagens: Simples; Múltiplos processadores
Desvantagens: Busy wait; Possível starvation
6.3.2 SOLUÇÕES SOFTWARE BUSY WAIT
6.3.2.1 Algoritmo Peterson
2 processos
Variáveis compartilhadas:
int turn
boolean flag[2]
Marca intenção de entrar
Indica vez do outro
Atende 3 requisitos
Obsoleto: processadores modernos (reordenamento instruções)
6.3.3 SOLUÇÕES SOFTWARE COM BLOQUEIO
6.3.3.1 Primitivas Sleep/Wakeup
sleep(): Bloqueia processo; Espera sinalização
wakeup(): Acorda processo bloqueado
Problema: Sinal perdido (wakeup antes sleep)
6.3.3.2 Semáforos
Variável inteira S
2 Operações Atômicas:
acquire() / wait / P / down: Decrementa S; Ocupa semáforo
release() / signal / V / up: Incrementa S; Libera semáforo
Tipos:
Binário (mutex): S = 0 ou 1; lock/unlock
Contagem: S ≥ 0; Controla recursos
Implementação:
Com busy wait: while S ≤ 0
Com bloqueio: Lista processos; block() e wakeup()
Problemas:
Deadlock: Espera circular
Starvation: Bloqueio indefinido
segurar a cadeira antes de sentar
ocorre de maneira indivisivel
6.3.3.3 Monitores
Bloco dados + procedimentos
Exclusão mútua automática
1 processo ativo por vez
Dados só via procedimentos
Evita erros semáforos:
Troca ordem wait/signal
Omissão operações
Linguagens: Java, C#
6.4 PROBLEMAS CLÁSSICOS
6.4.1 LEITORES/ESCRITORES
Leitores: acesso simultâneo
dados compartilhados
Escritores: acesso exclusivo
Variáveis
rc: contador leitores
mutex: protege rc
db: protege dados
Problema: starvation escritores
Solução: prioridade escritores
wc: contador escritores
r_db e w_db: controle
6.4.2 FILÓSOFOS GLUTÕES
5 filósofos mesa circular
5 pauzinhos
Comer: 2 pauzinhos
Estados: THINKING, HUNGRY, EATING
Funções: philosopher(i), take_forks(i), put_forks(i), test(i)
LEFT: (i+N-1) % N
RIGHT: (i+1) % N
Semáforos: mutex = 1; philo[N] = {0...0}
Previne deadlock: Testa vizinhos antes comer
MAPA MENTAL 6
DISCIPLINA: SO 2025/2
ALUNO(A): Raquel Nascimento