Processo Synccronização: problema de seção crítica no sistema operacional
⚡ Resumo Inteligente
Processo SyncA cronometragem é a tarefa de coordenar a execução de processos de forma que dois processos não acessem os mesmos dados ou recursos compartilhados simultaneamente. Ela previne inconsistências de dados em sistemas com múltiplos processos, controlando o acesso à seção crítica.

O que é processo Synccronização?
Processo 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 simultaneamente e mais de um processo tenta acessar o mesmo recurso ou dado compartilhado ao mesmo tempo.
Isso pode levar à inconsistência de dados compartilhados. Assim, a alteração feita por um processo não é necessariamente refletida quando outros processos acessam os mesmos dados compartilhados. Para evitar esse tipo de inconsistência de dados, os processos precisam ser sincronizados entre si.
Como processar Synccronização Funciona?
Por exemplo, o processo A está alterando os dados em um endereço de memória enquanto outro processo B está tentando ler os dados do mesmo endereço. mesmo localização da memória. Há uma grande probabilidade de que os dados lidos pelo segundo processo estejam errados.
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 na seção Crítica. Ela também verifica se um processo que terminou sua execução deve ser removido por meio desta seção.
- Seção restante: Todas as outras partes do CodeAs seções 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 único processo em um momento específico. Essa 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 deve fazer cumprir 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: Essa solução é usada quando ninguém está na seção crítica e alguém quer entrar. Nesse caso, os processos que não estão em sua seção restante devem decidir quem deve entrar, em um tempo finito.
- Espera Limitada: Quando um processo solicita acesso à seção crítica, existe um limite específico para o número de processos que podem acessar essa seção. Portanto, quando esse limite é atingido, o sistema deve permitir que o processo acesse a seção crítica.
Soluções para a seção crítica
Em processo SyncNa cronologia, a seção crítica desempenha o papel principal, de modo que o problema deve ser 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 por um cientista da computação chamado Peterson, razão pela qual é conhecido como 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
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 que cada processo, em algum momento, precise entrar na Seção Crítica.
- É mantido um array FLAG[] de tamanho N, que por padrão é falso. 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, ele definirá FLAG[i]=TRUE.
- Outra variável chamada TURN indica o número do processo que está atualmente aguardando para 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: a vez é 2, então P2 entra na seção crítica e ao sair, a vez é 3 e, portanto, P3 sai do loop de espera.
Synchardware de sincronização
Às vezes, os problemas da Seção Crítica também são resolvidos por hardware. Alguns sistemas operacionais oferecem uma funcionalidade de bloqueio em que um processo adquire um bloqueio ao entrar na Seção Crítica e o libera ao 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
SyncA cronometragem por hardware não é um método simples de implementar para todos, por isso também foi introduzido um método de software mais rigoroso conhecido como Mutex Locks.
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. Trata-se de outro algoritmo ou solução para o problema da seção crítica. É um mecanismo de sinalização, e uma thread que está aguardando um semáforo pode ser sinalizada por outra thread.
Utiliza duas operações atômicas: 1) aguardar e 2) sinalizar para a sincronização do processo.
Exemplo
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


