Trabalho De FSO
Soluções para o Problema da Condição de Corrida/Região Critica
Joab Felipe RA: C57FEB-5 01/04/2015
Soluções para o problema da CONDIÇÃO de CORRIDA / REGIÃO CRITICA
Por Hardware
-Inibição de interrupções : O método mais simples é prevenir qualquer mudança de controle do processador dentro de uma região crítica. Em sistemas com somente um processador, isso pode ser feito desabilitando as interrupções na entrada da região crítica, evitando chamadas de sistema que causem troca de contexto. No final da região crítica, as interrupções são habilitadas novamente. Com essa implementação, qualquer linha de execução entrando em uma região crítica prevenirá outra linha de execução ou interrupção de usar a CPU, até que a linha de execução saia da região crítica. A desabilitação de interrupções só funciona no processador relacionado ao processo, entretanto, a máquina pode conter mais de um processador. Não é boa prática permitir a inibição de interrupções em modo usuário.
-Instrução TSL : Ela transfere o conteúdo de um endereço de memória para um registrador, e depois armazena um valor não nulo em tal endereço. As operações de transferência e de armazenamento são indivisíveis – nenhum outro processador ou processo pode acessar a palavra antes que a execução da instrução tenha chegado ao fim. O processador que estiver executando a instrução TSL, bloqueia o barramento de memória, de forma a não permitir que nenhum outro processador tenha acesso à memória até que termine a execução da instrução.
Para executar a instrução TSL, é necessário o uso de uma variável compartilhada, flag, para coordenar o acesso à memória compartilhada. Quando flag for igual a 0, qualquer processo pode fazê-la igual a 1, através da execução da instrução TSL, e então ler ou escrever na memória