Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronismo de Processos e Threads, MAPA MENTAL 06 - SINCRONISMO DE…
Sincronismo de Processos e Threads
Antecedentes
Produtor/Consumidor
Paradigma comum para estudar processos concorrentes
Produtor gera dados para consumidor acessá-los
Sincronização necessária para consumidor não consumir mais do que o produtor produz
Produtor deposita os dados em um buffer para que consumidor acesse-o e consuma os dados
Buffer é limitado e tem um contador para definir seu tamanho
Concorrentemente executados, o produtor e consumidor podem causar tamanhos conflitantes
Problema da Seção Crítica
Segmento do código capaz de alterar dados compartilhados entre processos e threads
Para manter consistência, somente um processo acessa sua seção crítica por vez
A ideia é definir um protocolo para que os processo cooperem
Um bom protocolo é composto por três requisitos obrigatórios
Espera limitada
Limita o número de vezes que o processo acessa sua região crítica
Progresso
Processos que não estejam na seção remanescente participam da decisão de entrar na região crítica
Exclusão mútua
Sempre um processo executando sua região crítica por vez
O protocolo segue uma estrutura de seções para entrar na região crítica
Seção de entrada, implementa a solicitação para entrar na região crítica
Seção de saída, implementação seguida da saída da região crítica
Seção remanescente, basicamente, o resto do código
Muitos processos executando em modo kernel podem gerar diversas condições de corrida
Kernel preemptivo, permite a interceptação do processo
Vantajoso por ser mais responsivo, apropriado para programação em tempo real
Desvantajoso por permitir diversas condições de corrida
Alta dificuldade na projeção em arquiteturas de multiprocessamento simétrico
Kernel sem preempção, não permite a preempção
Vantajoso por não possuir condições de corrida
Desvantajoso por não ser responsivo
Soluções para Problema da Seção Crítica por Hardware
Inibição de interrupções
Implementa par de instruções de tipos Disable Interrupt (DI) e Enable Interrupt (EI)
Processo desativa todas as interrupções ao entrar na região crítica, reativando ao sair
Garante acesso exclusivo aos dados compartilhados
Desvantagens
Pode ser problemático desabilitar interrupções em processos de usuário
Não funciona em multiprocessamento, devido a demora de transmissão para as mensagens
A longo prazo pode causar perda de sincronização com periféricos entre outros problemas
Instrução Test and Set Lock (TSL)
Lê um conteúdo de um endereço de memória para registrador e trava a região crítica
Operações atômicas, outra CPU não pode acessar a trava enquanto a TSL não terminar
Vantajoso por ser simples, impede interrupções desabilitadas por processos de usuário e funciona em máquinas com vários processadores
Desvantajoso por implementar busy wait e pode gerar starvation
Starvation é um processo consumidor "passando fome", sempre pegando a trava bloqueada
Presente em quase todos os processadore atuais
Soluções para Problema da Seção Crítica por Software
Implementando busy wait
Algoritmo de Peterson
Ao marcar a intenção de entrar na região crítica, em caso de empate, o processo indica que é a vez do outro
Implementando bloqueio
Sleep/Wakeup
Bloquear execução de processos que tenham a entrada na região crítica proibida
sleep() bloqueia o processo e o deixa aguardando pela sinalização wakeup()
Semáforos
Variável inteira, podendo somente ser acessada por duas operações atômicas
acquire(), wait(), P(), down(), decrementa a variável, semáforo ocupado
lock(mutex)
release(), signal(), V(), up(), incrementa, libera o semáforo
unlock(mutex)
Semáforos binários, com valores 0 e 1, são conhecidos como mutex
Monitores
Obriga a exclusão mútua e tem os procedimentos da seção crítica codificados dentro de si
Ao codificar a seção crítica, os processos que queiram acessá-la devem implementar métodos do próprio monitor em questão
Como a exclusão mútua é obrigatória, somente um processo é executado por vez
MAPA MENTAL 06 - SINCRONISMO DE PROCESSOS E THREADS
DISCIPLINA: SO 2023/1
ALUNO: GIOVANNI SENCIOLES