comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • comunicação...
TRANSCRIPT
![Page 1: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/1.jpg)
EEL770 – Sistemas Operacionais
Comunicação entre processos (2)
Pedro Cruz
![Page 3: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/3.jpg)
Aula passada
• Comunicação entre processos é útil
– Troca de dados
– Consistência
– Sincronização
• Problemas e soluções parecidos
– Processos
– Threads
– Dispositivos em sistemas distribuídos
3
![Page 4: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/4.jpg)
Aula passada
• Condição de corrida
• Região crítica
• Exclusão mútua
• Espera ocupada
– Desabilitar interrupções
– Variáveis do tipo trava
– Variáveis do tipo “vez”
– Solução de Peterson
– Instrução Testar e Configurar Trava
• Dormir e acordar
• Semáforo4
![Page 5: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/5.jpg)
Aula passada
• Implementação de comunicação
– Área de memória compartilhada
• Problema de leitura e escrita não-atômica
– Instruções especiais de processador
• Necessita de suporte do hardware
– Semáforos
• Implementados como chamadas de sistema
5
![Page 6: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/6.jpg)
Semáforos
• Variável “compartilhada” diz quantos recursos estão disponíveis
– Operação de verificar variável, alterar variável e dormir são atômicas
• Implementadas como chamadas de sistema
– Up
– Down
6
![Page 7: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/7.jpg)
Up e Down
• Up
– Verifica variável
• Se possível, incrementa e segue para execução
– Envia sinal de wake
• Se não, dorme e aguarda sinal
• Down
– Verifica variável
• Se possível, decrementa e segue para execução
– Envia sinal de wake
• Se não, dorme e aguarda sinal
Ocorrem de forma atômica!
7
![Page 8: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/8.jpg)
Semáforo
• Exclusão mútua
• Sincronismo
8
![Page 9: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/9.jpg)
Produtores-consumidorescom semáforos
• Produtor
down(&empty);
down(&mutex);
insert(item);
up(&mutex);
up(&full);
• Consumidor
down(&full);
down(&mutex);
item = remove();
up(&mutex);
up(&empty);9
mutex = 1 // acesso à região crítica
empty = N // contador de espaços vazios
full = 0 // contador de espaços preenchidos
![Page 10: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/10.jpg)
Espera ocupada em threads
• Threads em espaço de núcleo
– Acordadas pelo escalonador
• Threads em espaço de usuário
– Acordadas pelo processo do usuário
Como ocorre a espera ocupada em ambos os casos?
10
![Page 11: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/11.jpg)
Mutex
• Forma simples de garantir exclusão mútua
– Se pode acessar a região crítica, acessa
– Se não pode acessar a região crítica, dorme
11
![Page 12: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/12.jpg)
Mutexes
mutex_lock:
MOVE Reg, #1 | copia 1 para Reg
TSL Reg, MUTEX | troca MUTEX com Reg
CMP Reg, #0 | compara Reg com 0
JZE ok | se for 0, vai para ok
CALL thread_yield | mutex ocupado, libere CPU
JMP mutex_lock | tente outra vez
ok: RET
mutex_unlock:
MOVE MUTEX, #0 | copia 0 em MUTEX
RET | Retorna12
![Page 13: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/13.jpg)
Problemas com semáforos
• Erros são comuns
– Ordem das chamadas de “reserva” e “contagem” é crítica
• Se é feita de outra maneira, pode haver um impasse
13
![Page 14: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/14.jpg)
Produtores-consumidorescom semáforos - problema
• Produtor
down(&mutex);
down(&empty);
insert(item);
up(&mutex);
up(&full);
• Consumidor
down(&full);
down(&mutex);
item = remove();
up(&mutex);
up(&empty);14
mutex = 1 // acesso à região crítica
empty = N // contador de espaços vazios
full = 0 // contador de espaços preenchidos
![Page 15: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/15.jpg)
Monitores
• Abstração “melhor” para os semáforos
– Recurso é protegido pelo monitor
– Processos entram numa fila
– Monitor organiza quais processos devem acessar o recurso
• Apenas um por vez
– Monitor oferece interface de programação
15
![Page 16: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/16.jpg)
Monitor
• Chamadas
– wait(c)
• Bloqueia o processo enquanto a condição c for verdadeira
– Outro processo pode usar o recurso protegido
– signal(c)
• Acorda o processo aguardando a condição c ser falsa
• Filas para utilização
• Filas para sinalização
• Deve ter suporte da linguagem
16
![Page 17: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/17.jpg)
Monitor - exemplo
Monitor ProduceConsume {
insert(item){
if(count == N) wait(full); // desculpa =/
insert_item(item);
count++;
if (count == 1) signal(empty);}
item remove(){
if (count == 0) wait(empty);
item = remove_item();
count--;
if (count == (N-1)) signal(full);}} //perdão =/17
![Page 18: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/18.jpg)
Problemas de todos os mecanismos vistos
• Resolvem:
– Exclusão mútua
– Sincronismo
• Funcionam
– Para uma única CPU
– Para várias CPUs com memória compartilhada
• Não resolvem:
– Compartilhamento direto de dados
• Não funcionam:
– Em sistemas distribuídos sem compartilhamento de memória
18
![Page 19: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/19.jpg)
Troca de mensagens
• Chamadas de sistema
– send(destination, &message);
– receive(source, &message);
• Processos devem:
– Saber como identificar destino e/ou fonte
– Ter um formato de mensagem estabelecido
• Mensagens podem ser:
– Bloqueantes
– Não-bloqueantes
19
![Page 20: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/20.jpg)
Troca de mensagem
• Envios podem gerar reconhecimento
– ACK
• Falta de reconhecimento pode gerar reenvio
– Indica perda de mensagem
• Reenvio pode gerar recebimento duplicado
– Pode gerar problemas na aplicação
• Solução é numerar as mensagens e rejeitar mensagens duplicadas
20
![Page 21: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/21.jpg)
Paradigmas de troca de mensagem
• Um para um
– Endereçamento direto
– Caixa postal
• Um para muitos
– Broadcast
• Muitos para um
– Cliente-servidor
• Muitos para muitos
– Quadro negro
21
![Page 22: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/22.jpg)
Barreira
• Processos concorrentes impõe uma barreira
– Processos que alcançam a barreira são bloqueados
– Processos são liberados quando todos alcançam a barreira
22
![Page 23: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/23.jpg)
Leitura-cópia-atualização
• Não permitir a leitura de dados durante alteração
– Leitor acessa dados anteriores até alteração completa
23
A
D
CB
XA
D
CB
A
C
XB
D
![Page 24: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •](https://reader033.vdocuments.pub/reader033/viewer/2022050116/5f4d2efac8fa6f02795c5dd8/html5/thumbnails/24.jpg)
EEL770 – Sistemas Operacionais
Comunicação entre processos (2)
Pedro Cruz