Sincronização de pocessos
774 palavras
4 páginas
1. SINCRONIZAÇÃO DE POCESSOS1 SEMÁFOROS
Em 1965 Dijkstra propôs usar uma variável inteira para contar o número de sinais de acordar e salvá-los para uso futuro. A variável recebeu o nome de Semáforo e é usada para a sincronização de processos. O objetivo dessa variável é coordenar o acesso a uma região crítica e evitar problemas que possam levar a condições de corrida. A variável pode armazenar o valor 0 (zero), indicando que nenhum sinal de acorda foi salvo, e outro valor positivo, caso um ou mais sinais de acordar estejam pendentes. Além disso, temos as seguintes operações sobre a variável chamada semáforo: 1. DOWN: verifica se o valor do semáforo é maior que 0, se for decrementa o valor do semáforo e prossegue. Caso semáforo = 0 o processo irá dormir sem terminar de executar o DOWN (por enquanto). As operações: verificar valor do semáforo e alterar seu conteúdo são tarefas executadas como uma ação atômica e indivisível. Com isso, evitamos o problema de uma interrupção entre essas duas atividades. 2. UP: esta operação incrementa o valor do semáforo em uma unidade e acorda um dos processos que estão dormindo associado ao semáforo em questão. Assim, um processo é escolhido pelo sistema e é dada a permissão de terminar a execução da operação DOWN que ele havia começado anteriormente. Para terminar, o processo acordado agora irá decrementar o valor do semáforo, fazendo com que ele permaneça em 0 (zero). No entanto, existirá um processo a menos dormindo no semáforo.
O semáforo é uma solução para o problema de perda do sinal de acordar. Para serem indivisíveis as operações UP e DOWN são implementadas como chamadas de sistema.
Os Semáforos Binários podem ser usados para controlar dois ou mais processos que estejam disputando o acesso a uma Região Crítica. O valor de um semáforo binário pode ser somente 1, enquanto no outro não há restrição.
Exemplo do uso:
Semaphore S = 1;
DOWN(S);
CriticalSection();
UP(S);
2. MUTEX ( MUTUAL