Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronismo de Processos e Threads, Soluções - Coggle Diagram
Sincronismo de Processos e Threads
Processo cooperativo
Pode afetar ou ser afetado por outros processos em execução no sistema
Acesso concorrente aos dados compartilhados pode resultar em inconsistência de dados
O Problema do Produtor/Consumidor
Condição de Corrida (Race Condition)
Dois ou mais processos manipulam a mesma variável de forma concorrente
O resultado da execução depende da ordem específica em que ocorre o acesso
A seção crítica (SC) ou região crítica (RC)
Um segmento de código que pode alterar dados comuns a vários processos/threads
Para garantir a consistência de dados, apenas um processo por vez pode adentrar a sua seção crítica
O Problema da Seção Crítica
Projetar um protocolo que processos possam utilizar para a cooperação
Exclusão Mútua
Progresso
Espera limitada
Kernels com preempção (preemptive kernels)
Um processo pode ser interceptado enquanto está sendo executado em modalidade de kernel.
Melhor capacidade de resposta
Sujeito a condições de corrida
Difíceis de projetar em arquiteturas SMP
(Symmetric multiprocessing)
Kernels sem preempção (nonpreemptive kernels)
Não permite que um processo sendo executado em modalidade de kernel seja interceptado
Livre de condições de corrida
Busy wait
Espera ativa ou espera ocupada
Desperdício de tempo de CPU
while (vez == OUTRO) do {nothing};
Problema da inversão de prioridade
Soluções
Soluções de software com bloqueio
Sleep/Wakeup
Bloquea a execução dos processos quando não é permitido a sua entrar na RC
Pode colocar todos os processos para dormir acidentalmente, por causa do escalonador.
sleep() e wakeup()
Semáforos
acquire(), wait(), P() ou down()
release(), signal(), V() ou up()
semáforos binários ou mutex (mutual exclusion): lock(mutex) e unlock(mutex).
Deadlock
Varios processos estão esperando por um evento que só pode ser causado por um dos processos esperando
Starvation
Lock indefinido. Um processo pode nunca ser removido da fila de semáforo em que ele é suspenso.
Monitores
Um bloco que contém dados para serem compartilhados e procedimentos para manipular esses dados
Dados compartilhados só podem ser acessar indiretamente por meio dos procedimentos
As seções críticas são codificadas como procedimentos do monitor.
Os procedimentos do monitor são executados de forma mutuamente exclusiva
Soluções de Hardware
Instrução TSL (Test and Set Lock) (Teste e atualize a variável de trava)
Apresenta busy wait
Bloqueia o barramento de memória.
A instrução TSL é executada de forma atômica
Simplicidade de uso (embora sua implementação em
hardware não seja trivial)
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.
Possibilidade de postergação infinita (starvation)
Inibição de interrupções
Processo reativa as interrupções depois de sair da RC com DI = Disable Interrupt.
É desaconselhável dar aos processos de usuário o poder de desabilitar interrupções
Não funciona com vários processadore
Inibir interrupções por um longo período de tempo pode ter consequências danosas
O processo desativa todas as interrupções antes de entrar na RC com EI = Enable Interrupt
Soluções de software com busy wait
Algoritmo de Peterson
Não há garantias de que a funcione nas novas arquiteturas, Mas ele é didaticamente importante
Ao marcar a sua intenção de entrar, o processo já indica (para o caso de empate) que a vez é do outro.