24
EEL770 – Sistemas Operacionais Comunicação entre processos (2) Pedro Cruz

Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

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 •

EEL770 – Sistemas Operacionais

Comunicação entre processos (2)

Pedro Cruz

Page 2: Comunicação entre processos (2)cruz/courses/eel770/slides/6_comunicacao_… · • Comunicação entre processos é útil –Troca de dados –Consistência –Sincronização •

Lembretes

• Proposta de trabalho

– Enviar para [email protected]

• Prazo: dia 02 de abril

2

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

EEL770 – Sistemas Operacionais

Comunicação entre processos (2)

Pedro Cruz