Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sicronismo de Processos e Threads - Coggle Diagram
Sicronismo de Processos e Threads
Problema Produtor/Consumidor
Solução: contador inteiro acompanha o número de buffers cheios
Condição de corrida: ordem específica dos acessos a dados concorrentemente
Sincronização é necessária para consumidor não consumir itens ainda não produzidos
Processo produtor produz infos consumidas por um consumidor
Problema da Seção Crítica
Requisitos para boa solução
Progresso
Só processos que não estiverem exec suas seções remanescentes podem entrar na seleção para a RC
Espera Limitada
Há limite para o número de vezes que processos podem entrar na RC
Exclusão Mútua
Outros processos não podem executar suas RCs enquanto um processo já estiver exec.
Kernel com preempção
Permite processo ser interceptado enquanto executado em modo kernel
Vantagens
Menos chance de processo ficar muito tempo nesse estado, fazendo outros esperarem
Apropriado para programação em tempo real
Melhor capacidade de resposta
Desvantagens
Díficil projetar em arquiteturas SMP
Sujeito a condições de corrida
Problema
Projetar protocolo que processos possam utilizar para cooperação
Processo precisa solicitar permissão para entrar na SC
Seção de entrada implementa a solicitação
Kernel sem preempção
Não permite que processo executado em modo kernel seja interceptado
Processo será executado até sair do modo, ser bloqueado ou abandonar o controle da CPU
Vantagem: livre de condições de corrida
Desvantagem: não tem boa capacidade de resposta
Seção/Região Crítica
Código que pode alterar dados comuns a vários processos/threads
Garantir consistência de dados compart. só ocorre se um processo por vez adentrar na SC
Soluções para Problema Seção Crítica
Software com busy wait
Algoritmo de Peterson
Ao marcar intenção de entrar, o processo já indica que a vez é do outro
Software com bloqueio
Não há perda de tempo indesejada com processamento inútil (spinlock)
Não há espera ocupada (busy wait)
Primitivas Sleep/Wakeup
Evita desperdício de tempo de CPU
Sleep: suspende a execução do processo que fez chamada até um outro acorda-lo
Bloquear execução dos processos quando não é permitido entrarem em regiões críticas
Wakeup: acorda o processo anteriormente bloqueado
Semáforos
Release: Incrementa a variável, indica "liberação do semáforo"
Menos complicado
Acquire: Decrementa váriavel, indica "ocupação do semáforo"
Só é acessado por duas operações atômicas
Semáforo binário ou mutex
Deadlock: processos esperando eventos causados somente por um dos processos esperando
Starvation: lock indefinido, processo pode nunca ser removido da fila semáforo que foi suspenso
Uso incorreto pode dar erros de temporização difíceis de detectar
Monitores
Código da seção crítica não é mais duplicado em cada processo
Bloco que contém dados internamente e procedimentos para manipulá-los
Seções críticas codificadas como procedimentos do monitor
Única maneira de um processo acessar dados compart. é por meio de procedimentos
Hardware
Instrução Test and Set Lock
Soluciona problema da exclusão mútua quando se tem vários processadores
Processador que executa TSL bloqueia barramento de memória
Impede que outras CPUs acessem Memória Principal até instrução terminar
Lê conteúdo de um endereço de memória para registrador e armazena valor
Lock 0 = Região Crítica livre
Lock 1 = Região Crítica ocupada
Instrução TSL executada de forma atômica
Vantagens
Não dá poder de desabilitar interrupções a processos de usuário
Funciona em máquinas com vários processadores
Simplicidade de uso
Presente em quase todos processadores atuais
Desvantagens
Espera ocupada (busy wait)
Postergação infinita
Processo azarado sempre pegar Lock com valor 1
Inibição de Interrupções
Processo desativa todas interrupções antes de entrar na RC
Nenhum processo na RC pode ser interrompido
Par de instruções Disable Interrupt e Enable Interrupt
Garantindo acesso exclusivo aos dados compart.
Solução DI/DE não funciona com vários processadores
Inibir interrupções pode trazer perda de sincronização com periféricos
Problemas Clássicos de Sincronismo
Leitores e Escritores
Escritores com acesso exclusivo a dados compart.
Leitores com acesso simultâneo a dados compart.
Problema: Possível starvation dos escritores
Solução: atender processos por ordem de chegada (priorizando escritores)
Filósofos Glutões
5 filósofos compartilham uma mesa com comida no centro
Na mesa existem 5 pauzinhos, um do lado de cada
Filósofo fica com fome e pega 2 pauzinhos perto dele
Come até ficar saciado
Quando termina, repousa os pauzinhos e volta a pensar