Extração Synccronização: problema de seção crítica no sistema operacional

O que é processo Synccronização?

Extração Synchronização é a tarefa de coordenar a execução de processos de forma que dois processos não possam ter acesso aos mesmos dados e recursos compartilhados.

É especialmente necessário em um sistema multiprocesso quando vários processos estão sendo executados juntos e mais de um processo tenta obter acesso ao mesmo recurso ou dados compartilhados ao mesmo tempo.

Isso pode levar à inconsistência dos dados compartilhados. Portanto, a alteração feita por um processo não se reflete necessariamente quando outros processos acessam os mesmos dados compartilhados. Para evitar esse tipo de inconsistência de dados, os processos precisam estar sincronizados entre si.

Como processar Synccronização Funciona?

Por exemplo, o processo A altera os dados em um local de memória enquanto outro processo B tenta ler os dados do mesmo localização da memória. Há uma grande probabilidade de que os dados lidos pelo segundo processo estejam errados.

Extração Synccronização funciona

Seções de um programa

Aqui estão quatro elementos essenciais da seção crítica:

  • Seção de entrada: Faz parte do processo que decide a entrada de um determinado processo.
  • Seção Crítica: Esta parte permite que um processo insira e modifique a variável compartilhada.
  • Seção de saída: A seção de saída permite que os outros processos que estão aguardando na seção de entrada entrem nas seções críticas. Também verifica se um processo que finalizou sua execução deve ser removido através desta Seção.
  • Seção restante: Todas as outras partes do Código, que não estão nas Seções Crítica, de Entrada e de Saída, são conhecidas como Seção Restante.

O que é o problema da seção crítica?

Uma seção crítica é um segmento de código que pode ser acessado por um processo de sinal em um ponto específico no tempo. A seção consiste em recursos de dados compartilhados que precisam ser acessados ​​por outros processos.

  • A entrada na seção crítica é tratada pela função wait() e é representada como P().
  • A saída de uma seção crítica é controlada pela função signal(), representada como V().

Na seção crítica, apenas um único processo pode ser executado. Outros processos, aguardando para executar sua seção crítica, precisam aguardar até que o processo atual conclua sua execução.

Regras para Seção Crítica

A seção crítica precisa aplicar todas as três regras:

  • Exclusão mútua: A exclusão mútua é um tipo especial de semáforo binário usado para controlar o acesso ao recurso compartilhado. Inclui um mecanismo de herança de prioridade para evitar problemas estendidos de inversão de prioridade. Não mais do que um processo pode ser executado em sua seção crítica ao mesmo tempo.
  • progresso: Esta solução é usada quando ninguém está na seção crítica e alguém deseja entrar. Então, os processos que não estão na seção de lembrete devem decidir quem deve entrar, em um tempo finito.
  • Espera Limitada: Quando um processo faz uma solicitação para entrar na seção crítica, há um limite específico sobre o número de processos que podem entrar na seção crítica. Assim, quando o limite for atingido, o sistema deve permitir a solicitação ao processo para entrar em sua seção crítica.

Soluções para a seção crítica

Em processo Syncsincronização, a seção crítica desempenha o papel principal para que o problema seja resolvido.

Aqui estão alguns métodos amplamente utilizados para resolver o problema da seção crítica.

Solução Peterson

A solução de Peterson é uma solução amplamente utilizada para problemas de seção crítica. Este algoritmo foi desenvolvido pelo cientista da computação Peterson, por isso é denominado solução de Peterson.

Nesta solução, quando um processo está sendo executado em estado crítico, o outro processo executa apenas o restante do código, podendo acontecer o contrário. Este método também ajuda a garantir que apenas um único processo seja executado na seção crítica em um momento específico.

Exemplo

Soluções para a seção crítica

PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
  • Suponha que existam N processos (P1, P2,… PN) e cada processo em algum momento requer a entrada na Seção Crítica
  • Uma matriz FLAG[] de tamanho N é mantida, que por padrão é falsa. Portanto, sempre que um processo precisar entrar na seção crítica, ele deverá definir seu sinalizador como verdadeiro. Por exemplo, se Pi quiser entrar, definirá FLAG[i]=TRUE.
  • Outra variável chamada TURN indica o número do processo que está aguardando entrada no CS.
  • O processo que entra na seção crítica ao sair mudaria o TURN para outro número da lista de processos prontos.
  • Exemplo: turn é 2 então P2 entra na seção Crítica e ao sair turn=3 e portanto P3 sai do loop de espera.

Synchardware de sincronização

Algumas vezes os problemas da Seção Crítica também são resolvidos pelo hardware. Alguns sistemas operacionais oferecem uma funcionalidade de bloqueio onde um Processo adquire um bloqueio ao entrar na seção Crítica e libera o bloqueio após sair dela.

Portanto, quando outro processo tentar entrar na seção crítica, ele não conseguirá entrar porque está bloqueado. Só poderá fazê-lo se for gratuito, adquirindo o próprio bloqueio.

Bloqueios mutex

SyncO hardware de sincronização não é um método simples de implementar para todos, então um método de software rigoroso conhecido como Mutex Locks também foi introduzido.

Nesta abordagem, na seção de entrada do código, um LOCK é obtido sobre os recursos críticos utilizados dentro da seção crítica. Na seção de saída esse bloqueio é liberado.

Semaphore Solução

Semaphore é simplesmente uma variável não negativa e compartilhada entre threads. É outro algoritmo ou solução para o problema da seção crítica. É um mecanismo de sinalização e um thread que aguarda um semáforo, que pode ser sinalizado por outro thread.

Ele usa duas operações atômicas, 1) espera e 2) sinal para a sincronização do processo.

Exemplo

WAIT ( S ):
while ( S <= 0 );
S = S - 1;
SIGNAL ( S ):
S = S + 1;

Resumo

  • A sincronização de processos é a tarefa de coordenar a execução de processos de forma que dois processos não possam ter acesso aos mesmos dados e recursos compartilhados.
  • Quatro elementos da seção crítica são 1) Seção de entrada 2) Seção crítica 3) Seção de saída 4) Seção de lembrete
  • Uma seção crítica é um segmento de código que pode ser acessado por um processo de sinal em um ponto específico no tempo.
  • Três regras obrigatórias que devem ser aplicadas por seção crítica são: 1) Exclusão mútua 2) Solução de processo 3) Espera limitada
  • A exclusão mútua é um tipo especial de semáforo binário usado para controlar o acesso ao recurso compartilhado.
  • A solução de processo é usada quando ninguém está na seção crítica e alguém quer entrar.
  • Na solução de espera vinculada, depois que um processo faz uma solicitação para entrar em sua seção crítica, há um limite para quantos outros processos podem entrar em sua seção crítica.
  • A solução de Peterson é uma solução amplamente utilizada para problemas de seção crítica.
  • Problemas da Seção Crítica também são resolvidos pela sincronização de hardware
  • SyncO hardware de sincronização não é um método simples de implementar para todos, portanto, o método estrito de software conhecido como Mutex Locks também foi introduzido.
  • Semaphore é outro algoritmo ou solução para o problema da seção crítica.