A condicao de disputa acontece constantemente mas e evitada, e os SO atuais constantemente verificam constantemente se um processo esta utilizando a mesma area de memoria, o que, para o SO e proibido, para o SO um processo nao pode le ou escreve no mesmo espaco de memoria, um dos processo sera excluidas antes que isso ocorra. Um processo conhecido como Exclusao Mutua. Durante a maior parte do tempo um processo execut5a computacoes internas que nao requerem dados de outros processos. O trecho de programas onde ocorre o compartilhamento de dados com outros processos sao chamada de Regioes Criticas. E para evita a disputa, estas areas sao monitoradas a todo momento, para evitar que dois processos estejam na mesma Regiao Critica. Assim, deve haver uma cooperacao mutua entre os processos, o que deve satisfazer as seguintes condicoes: 1.Nao pode haver dois processos em regioes criticas 2.Nao sao feitas suposicoes sobre a velocidade relativa dos processos e sobre o numero de UCPs. 3.Nenhum processo parado fora da regiao critica pode para outros processos 4.Nenhum processo deve espera um tempo arbritariamente longo para entra em sua regiao critica. Desabilitando Interrupcoes A forma mais simples de garantir a exclusao mutua e fazer com que cada processo ao entra na regiao critica desabilite as interrupcoes e ao sair reabilite-as . Isto, impede que a CPU seja chaveada para outro processo e realize interrupcoes periodicas vindas do relogio da maquina que ativa o escalonador de processo. Variaveis de Impedimento Pode-se tambem pensam em uma solucao onde exista uma variavel auxiliar, chamada Lock Variable que indica ) para regiao critica livre e 1 para a mesma ocupada. Assim cada processo antes de entra em uma regiao critica, o mesmo checa esta variavel. Alternancia Obrigatoria A solucao pela qual um regiao deve ser entregue a um dado processo por vez e chamado de alternancia obrigatoria. E o teste continuo de uma variavel a espera de um valor e chamado de Espera Ocupada. O que ocasiona um grande desperdicio de CPU. O problema nesta solucao e que os processos se alternem precisamente e isto significa que o tempo dos processo devem ser exatamente iguais. Alem da desvantagem do processo que sai da regiao critica nao poder mais retornar. Solucoes para serem analisadas: Solucao de Peterson Produtor Consumidor Semaforo Mutexes Monitores Troca de Mensagens Barbeiro Sonolento O algoritmo de Peterson e um algoritmo de programacao concorrente para exclusao mutua, que permite a dois ou mais processos ou subprocessos compartilharem um recurso sem conflitos, utilizando apenas memoria compartilhada para a comunicacao. ImplementacaoImplementacao do algoritmo em C:/* *********** ALGORITMO DE PETERSON *************/ #include <stdlib.h>#include "rshmem.h" /*biblioteca nao implementada*/ void incrementa(int *mem, int k) { int i; i=*mem; TP i=i+k; TP *mem=i;} int main(int argn, char **argv) { FILE *fsal; /*Ponteiro para arquivo com saida de resultados*/ char *marcaFim, /*Ponteiro fim de zona de memoria compartilhada*/ *c1, /*Variavel de encerramento do processo-pai*/ *c2; /*variavel de encerramento do processo-filho*/ int *vez, /*Variavel da vez de entrada do processo*/ *recurso, /*Ponteiro a zona de memoria compartilhada*/ nIteracoes=0; /*Contador de interacoes do processo*/ /* Comprovacao do numero