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 – 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
cmp register,#0
jne enter region
ret
leave_region:
move lock, #0
ret
| copia lock para o registrador e o configura como 1
| lock era zero?
| se não era zero, o bloqueio estava configurado, então inicia um laço
| retorna para aquele que fez a chamada; entrada na região crítica
| armazena um 0 no bloqueio (lock)
| retorna para aquele que fez a chamada
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
Consumidores
dos
Produtores
e
 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
Consumidores
dos
Produtores
e
 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 – 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
Download

Slide 1