SO+-+Slide3

SO+-+Slide3


DisciplinaSistemas Operacionais I8.357 materiais171.795 seguidores
Pré-visualização1 página
*
*
*
Faculdade Pernambucana - FAPE
Sistemas Operacionais
Prof. Flávio Gonçalves da Rocha
*
*
*
Comunicação entre Processos
A solução de Peterson
O algoritmo de Peterson fornece exclusão mútua
Cada processo antes de entrar na memória compartilhada (região crítica) chama enter_region com seu próprio número como parâmetro (pode haver espera)
Depois que terminou de trabalhar com as variáveis compartilhadas o processo chama leave_region para indicar que terminou
*
*
*
Comunicação entre Processos
A solução de Peterson para obter exclusão mútua
*
*
*
Comunicação entre Processos A Instrução TSL
Muitos computadores, especialmente aqueles projetados com múltiplos processadores em mente têm uma instrução TEST AND SET LOCK (TSL \u2013 Testa e Configura bloqueio)
Para utilizar a instrução TSL é usada uma variável compartilhada chamada lock.
Quando lock é 0 qualquer processo pode configurá-lo como 1 utilizando a instrução TSL e, então, ler ou gravar a memória compartilhada.
Quando termina, o processo configura lock de volta para 0 utilizando uma instrução uma instrução MOVE comum.
*
*
*
Comunicação entre Processos A Instrução TSL
enter_region:
 tsl register,lock | copia lock para o registrador e o configura como 1
 cmp register,#0 | lock era zero? 
 jne enter region | se não era zero, o bloqueio estava configurado, então inicia um laço 
 ret | retorna para aquele que fez a chamada; entrada na região crítica
leave_region: | armazena um 0 no bloqueio (lock)
 move lock, #0 | retorna para aquele que fez a chamada
 ret
*
*
*
Comunicação entre Processos Sleep e Wakeup
Tanto a solução de Peterson como a solução que utiliza TSL são corretas mas têm o defeito de necessitarem de espera ativa.
O processo espera em laço até que a entrada seja permitida (Desperdiça CPU e pode gerar o problema da inversão de prioridade)
Algumas primitivas de comunicação interprocesso bloqueiam o processo quando ele não pode entrar na sua região crítica
Uma das mais simples é o par SLEEP e WAKEUP
*
*
*
Comunicação entre Processos Sleep e Wakeup
SLEEP 
Chamada de sistema que causa o bloqueio do processo que fez a chamada
WAKEUP
Possui um parâmetro que indica qual processo deve ser acordado
*
*
*
Comunicação entre Processos Sleep e Wakeup
O Problema dos Produtores e Consumidores
Também conhecido como o problema do buffer associado
Dois processos compartilham um buffer de tamanho fixo. 
Um deles, o produtor, coloca as informações em um buffer e o outro, o consumidor, pega-as
Problema surge quando o produtor quer colocar um novo item no buffer, mas este último já está cheio.
Solução é fazer o produtor dormir até que o buffer tenha espaço
*
*
*
Comunicação entre Processos Sleep e Wakeup
O Problema dos Produtores e Consumidores
De modo semelhante o consumidor deve dormir se o buffer estiver vazio até que o produtor coloque algo no buffer e o acorde.
Essa solução pode levar a condição de corrida uma que vez que há uma variável que controla o nº de itens no buffer, a variável count (compartilhada).
O produtor e o consumidor testam e manipulam count
O problema é que numa condição de corrida, haverá a possibilidade de em um dado momento ambos os processos (produtor e consumidor) estarem dormindo
*
*
*
Comunicação entre Processos
O problema dos produtores e consumidores com uma condição de corrida fatal
*
*
*
Comunicação entre Processos Sleep e Wakeup
O Problema dos Produtores e Consumidores
Um bit de espera por despertar pode ser utilizado mas, nos casos em que há três ou mais processos um bit torna-se insuficiente sendo necessário tantos outros de acordo com o nº de processos (o problema persiste então)
*
*
*
Comunicação entre Processos Semáforos
Em 1965 Dijkstra sugeriu utilizar uma variável inteira, chamada de Semáforo, para contar o número de wakeups salvos para uso futuro
Semáforo igual a 0 indica que nenhum wakeup foi salvo
Semáforo for igual a algum valor positivo se um ou mais wakeups estivessem pendentes
Propôs duas operaçoes: DOWN e UP
DOWN \u2013 verifica se o valor é maior que 0. Se for diminui o valor e simplesmente continua.
*
*
*
Comunicação entre Processos Semáforos
Se o valor for 0, o processo é colocado para dormir sem completar o DOWN, por enquanto
Verificar o valor, alterá-lo e, possivelmente, ir dormir é tudo feito como uma única ação atômica.
Ao iniciar uma operação de semáforo, nenhum outro processo pode acessar o semáforo até que a operação tenha-se completado ou tenha sido bloqueada.
A atomicidade é essencial para resolver problemas de sincronização e evitar condições de corrida.
*
*
*
Comunicação entre Processos Semáforos
UP: incrementa o valor do semáforo endereçado
Um up sobre um semáforo com processos dormindo resulta em um processo dormindo a menos
A operação de incrementar o semáforo e acordar um processo também é atômica
Semáforos que assumem somente os valores 0 (livre) e 1 (ocupado) são denominados semáforos binários ou mutex 
*
*
*
Comunicação entre Processos Semáforos
O problema dos produtores e dos 
consumidores utilizando semáforos