Sincronização de processos: problema de seção crítica no sistema operacional

Índice:

Anonim

O que é sincronização de processos?

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.

É especialmente necessário em um sistema de vários processos 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 mudança 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 ser sincronizados entre si.

Neste tutorial de sistema operacional, você aprenderá:

  • O que é sincronização de processos?
  • Como funciona a sincronização de processos?
  • Seções de um programa
  • O que é o problema da seção crítica?
  • Regras para seção crítica
  • Soluções para a seção crítica

Como funciona a sincronização de processos?

Por exemplo, o processo A altera os dados em um local da memória enquanto outro processo B tenta ler os dados do mesmo local da memória. Há uma grande probabilidade de que os dados lidos pelo segundo processo sejam errôneos.

Seções de um programa

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

  • Seção de entrada: é 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 concluiu sua execução deve ser removido por meio desta seção.
  • Seção Remanescente: Todas as outras partes do Código, que não estão na Seção Crítica, de Entrada e Saída, são conhecidas como Seção Remanescente.

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 do tempo. A seção consiste em recursos de dados compartilhados que precisam ser acessados ​​por outros processos.

  • A entrada para a 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 esperar até que o processo atual conclua sua execução.

Regras para seção crítica

A seção crítica deve cumprir todas as três regras:

  • Exclusão mútua: Exclusão mútua é um tipo especial de semáforo binário que é 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 quer 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 em sua seção crítica. Assim, quando o limite é atingido, o sistema deve permitir que a solicitação ao processo entre em sua seção crítica.

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

Na Sincronização de Processos, a seção crítica desempenha o papel principal para que o problema seja resolvido.

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

Peterson Solution

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

Nesta solução, quando um processo está sendo executado em um estado crítico, o outro processo apenas executa o restante do código, e o contrário pode acontecer. Esse 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

PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
  • Suponha que haja N processos (P1, P2, ... PN) e cada processo em algum ponto do tempo requer a entrada na seção crítica
  • Um array FLAG [] de tamanho N é mantido, o qual é falso por padrão. Portanto, sempre que um processo requerer a entrada na seção crítica, ele deve definir seu sinalizador como verdadeiro. Por exemplo, se Pi quiser entrar, ele definirá FLAG [i] = TRUE.
  • Outra variável chamada TURN indica o número do processo que atualmente espera entrar 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.

Hardware de Sincronização

Algumas vezes os problemas da Seção Crítica também são resolvidos por 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 está tentando entrar na seção crítica, ele não será capaz de entrar porque está bloqueado. Ele só pode fazer isso se estiver livre, adquirindo a própria fechadura.

Mutex Locks

Hardware de sincronização não é um método simples de implementar para todos, então o método de software estrito 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 usados ​​dentro da seção crítica. Na seção de saída, esse bloqueio é liberado.

Solução de semáforo

O semáforo é 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 está aguardando 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 do 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 do processo 3) Espera limitada
  • Exclusão mútua é um tipo especial de semáforo binário que é 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 limitada, 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 usada para problemas de seção crítica.
  • Os problemas da seção crítica também são resolvidos pela sincronização do hardware
  • O hardware de sincronização não é um método simples de implementar para todos, então o método estrito de software conhecido como Mutex Locks também foi introduzido.
  • O semáforo é outro algoritmo ou solução para o problema da seção crítica.