Sincronização Distribuída de Processos
Francisco Heron de Carvalho Junior, Dr.
Tópicos Abordados
• Concorrência e Sincronização;• Mecanismos de sincronização de processos;
– Memória Compartilhada;• Semáforos e monitores
– Memória DistribuídaMemória Distribuída;;• Passagem de mensagens Passagem de mensagens assíncronaassíncrona;;• Passagem de mensagens Passagem de mensagens síncronasíncrona;;• Chamada de procedimento remoto (RPC);Chamada de procedimento remoto (RPC);• Rendezvous;Rendezvous;
• Paradigmas de sincronização distribuídaParadigmas de sincronização distribuída;;• Conclusões;
Objetivos
Concorrência e Sincronização
Objetivo:Definir o conceito de sincronização dentro
do contexto de concorrência
Concorrência e Sicronização(processos)
• Processos: procedimentos concorrentes– Procedimento: sequência de ações (ordem total);
– Linhas de instruções independente;
– Programa concorrente: ordem parcial de ações;
P
P1
P2
Pn
paradigma sequencial paradigma concorrente
... ...
Concorrência e Sicronização(arquiteturas concorrentes)
... ...
uniprocessadamultiprocessada(memória compartilhada) distribuída
Unidade de memória
Unidade de processamento
Processorederede
Concorrência e Sincronização(Histórias de Execução)
• Histórias de Execução:– Sequência de ações executadas por um programa;– Número de histórias possíveis, mesmo para
programas simples, é enorme !!!!
• Interferência entre processos concorrentes:– Um processo invalida uma suposição que diz
respeito ao estado de um outro processo em execução, levando-o a um estado inconsistente;
Concorrência e Sincronização(Modelando Interferência usando Lógica de Programação)
• Estado de um processo:– Conteúdo do valor das variáveis em seu escopo;
• Podemos caracterizar um conjunto de estados por meio de predicados lógicos (Tony Hoare, 1969);– {P} S {Q}
– P é uma pré-condição (pre(S));
– Q é uma pós-condição (pos(S));
– S é uma ordem parcial de ações;
• Lógica de programação:– Conjunto de axiomas e regras de inferência para prova de corretude
parcial de programas;
– Extensão à lógica de predicados;
Concorrência e Sincronização(Modelando Interferência usando Lógica de Programação)
• Ação elegível;• Seja C um predicado que que caracteriza o estado de
execução de um processo P1 após a execução da ação s1 e antes da execução da ação s2:– P1:: ... s1 {C} s2 ...– C é chamada assertiva crítica;
• Seja a uma ação de atribuição em um processo P2:– P2 :: ... {P} a {Q} ...
• Em nenhuma história possível, a execução de a deve tornar C falso quando s2 é elegível;– {C P} a {C}
• Caso contrário, diz-se que P2 interfere com P1;
x := e
Concorrência e Sincronização(Interferência)
• Sincronização;
– Filtragem de histórias indesejáveis, onde ocorre
interferência entre processos ;
• Como evitar interferência ?
– Exclusão mútua;
– Sincronização condicional;
Concorrência e Sincronização(Exclusão Mútua)
• Exclusão mútua:
– Agrupar sequências de ações em ações de mais
grossa granularidade;
a1; a2; ... ; an
• Execução atômica de sequências de ações;
– Escondendo o estado que sofre interferência;• Seções críticas;
• P1:: ... a1 {C} a2 ...
Concorrência e Sincronização(Exclusão Mútua)
• Sincronização condicional:
– Um processo atrasa sua execução até que uma condição torne-se
verdadeira;
– wp(S,Q): predicado mais fraco para que, depois da execução de a
a, Q seja verdadeiro:
• Weakest pre-condition;
• ... {wp(S,Q)} S {Q} ...
• Se P wp(S, Q) então P :: ... {P} S {Q} ...
– Evitando interferência:
• P2 :: ... await C wp(a,C) a ...
Concorrência e Sincronização(await)
await B S implementa sincronização
por exclusão mútua e sincronização
condicional;
– Leslie Lamport, 1980;
• Implementação ineficiente em máquinas
convencionais;
– Técnicas baseadas em espera ocupada;
Modelos de Sincronização de Processos (Memória compartilhada)
• Semáforos:– Primitivas de mais baixo nível (wait e signal);
– Simplicidade e eficiência;
– Entretanto, torna complicada a programação para aplicações complexas;
• Monitores:– Mecanismo de mais alto nível de abstração;
– Exclusão mútua implícita;
– Encapsulamento de variáveis;
– Ortogonalização de processos e monitores;
– Apropriado para aplicações complexas que exigem maior estruturação;
Modelos de Sincronização de Processos (Memória distribuída)
• Processos não compartilham variáveis;
• Comunicação através de redes de comunicação;
• Primitivas de sincronização devem suportar o transporte de dados entre processos;
• Mecanismos de Mecanismos de sincronização distribuídasincronização distribuída::– Passagem de Mensagens;Passagem de Mensagens;
• Assíncrona;Assíncrona;
• Síncrona;Síncrona;
– Chamada de procedimento remoto;Chamada de procedimento remoto;
– RendezvousRendezvous;;
Sincronização Distribuída
Passagem de Mensagens Assíncrona
Passagem de Mensagens Assíncrona
• Canais– Únicos objetos
compartilhados entre processos;
– Abstração de um meio de transmissão (rede);
– Caminho de comunicação entre dois processos;
– Fila de mensagens;
...
sendrecv
Passagem de Mensagens Assíncrona
sendsend
recvrecv
recvrecv
sendsend
... ... ... ...
... ...
... ...
... ...
... ...... ...
emissoremissor receptorreceptor emissoremissor receptorreceptor
Bloqueio do receptorBloqueio do receptor((sincronizaçãosincronização))
tteemmppoo
Passagem de Mensagens Assíncrona
• Suposições:– canais seguros;
• Sem corrupção de mensagens;
• Sem replicação de mensagens;
• Sem perda de mensagens;
– mensagens ordenadas;• Recebimento na ordem de envio;
• Canais FIFO (First In, First Out);
Passagem de Mensagens Assíncrona
• chan ch(id1:type1,..., idn:typen)
• send ch(expr1,..., exprn)
– Os tipos de expri devem corresponder aos tipos dos componentes do canal;
• receive ch(var1,..., varn)
– Os tipos de vari devem corresponder aos tipos dos componentes do canal;
• empty ch– Verifica se o canal está vazio
Passagem de Mensagens Assíncrona
chan input(char), output([1:MAXLINE] char)Char_to_Line:: var line[1:MAXLINE]: char, i:int := 1 do true receive input(line[i]) do line[i] CR and i < MAXLINE i := i + 1; receive input(line[i]) od send output(line); i:=1 od
Passagem de Mensagens Assíncrona
Caixa de MensagensCaixa de Mensagens((mail boxesmail boxes))
Porta de EntradaPorta de Entrada((input portinput port))
LigaçãoLigação((linklink))
......
...... ......
Passagem de Mensagens Assíncrona
• Desvantagens:– Transmissor precisa saber se receptor recebeu a
mensagem:• Uso de reconhecimento;
– Entrega de mensagens não é garantida;• Como saber o que ocorreu caso o reconhecimento não
chegue ??
– Buffers não podem ser infinitos• Muitas mensagens CRASH! ou bloqueio no send;• Violação da semântica do send;
Sincronização Distribuída
Passagem de Mensagens Síncrona
Passagem de Mensagens Síncrona
• Não há buffers;• Processo transmissor espera até que o receptor
receba a mensagem;• Comando de atribuição distribuída;• Vantagens:
– Simplifica a solução de alguns problemas;– Evita manipulação dinâmica de buffers;
• Desvantagens:– Dificulta programação de alguns problemas;
• CSP e OCCAM;
Passagem de Mensagens Síncrona
• Processo A deseja comunicar um valor a um processo B através da porta p:– A:: … B!p(e1,e2,…,en) … {envio}– B:: … A?p(x1,x2,…,xn) … {recebimento}
• B permanece bloqueado até que A receba os valores e1, e2,…, en e os atribua às suas variáveis x1, x2,…, xn;– xi := ei, 1 i n
• Os tipos de ei e xi devem ser compatíveis;• Portas identificam tipos de mensagens;
Passagem de Mensagens Síncrona
sendsend
recvrecv
recvrecv
sendsend
emissoremissor receptorreceptor emissoremissor receptorreceptor
Bloqueio do receptorBloqueio do receptor((sincronizaçãosincronização))
tteemmppoo
Bloqueio do emissorBloqueio do emissor((sincronizaçãosincronização))
Passagem de Mensagens Síncrona
• Comunicação guardada;– Comando de comunicação guardado
• B; C S
• B é uma expressão booleana (opcional);
• C é um comando de comunicação (opcional);
• S é uma lista de comandos;
– B e C compõem uma guarda;– A guarda sucede-se se B é verdadeiro e C não
causa bloqueio;
Passagem de Mensagens Síncrona
• Comunicação guardada (uso com if)– Uma das guardas ativas é escolhida não-
deterministicamente;
– if B1; C1 S1
[] B2; C2 S2
[] Bn; Cn Sn
fi
...... ...... ......
Passagem de Mensagens Síncrona
• Comunicação guardada (uso com do)– Repetidamente, uma das guardas ativas é
escolhida não-deterministicamente, até quando nenhuma estiver ativa;
– do B1; C1 S1
[] B2; C2 S2
[] Bn; Cn Sn
od
...... ...... ......
Passagem de Mensagens Síncrona
Copy :: var buffer[1:10]:char var front:=1, rear:=1, count:=0 do count < 10; West?buffer[rear] count++; rear := (rear mod 10) + 1 [] count > 0; East!buffer[front] count--; front := (front mod 10) + 1 od
GCD :: var x,y: int do (i:1..n) Client ? args(x,y) do xy x:=x-y [] xy y:=y-x od Client[i] ! result(x) od
Sincronização Distribuída
Chamada de Procedimento Remoto
Chamada de Procedimento Remoto
• Módulos – Ocupam espaços de endereçamento distintos;– Analogia com monitores;– Declaram processos exportados e em background;
• Um processo (servidor) é dinamicamente criado para executar chamada a procedimento remoto;
• O processo que chama o procedimento prossegue após o retorno deste;– Semântica semelhante à chamada sequencial de
procedimentos;
Chamada de Procedimento Remoto
processoprocessochamadorchamador
processo processo servidorservidor
callcall
MóduloMódulo
Chamada de Procedimento Remoto
• Módulo:– module module_name
cabeçalhos de operações exportadas;body declarações de variáveis; código de inicialização; procedimentos para operações exportadas; procedimentos e processos locais (background);end module_name
• Cabeçalho de operação exportada:– op op_name(formals) [returns result];
• Operação:– proc op_name(formals identifiers) returns rident;
declarações de variáveis locais lista de comandosend
• Chamada de procedimento remoto:– call mname.opname(arguments);
Chamada de Procedimento Remoto
• Sincronização condicional e exclusão mútua entre processos servidores e em background:
– Exclusão mútua explícita
• Uso de semáforos e monitores;
– Exclusão mútua implícita:
• Sincronização condicional por variáveis condicionais;
Chamada de Procedimento Remoto
......
REDE DE COMUNICAÇÃOREDE DE COMUNICAÇÃO
módulo módulo
módulo
módulo
módulo
módulo
callcall
callcall
Chamada de Procedimento Remoto
module TimeServer op get_time() returns int; op delay(int interval);body int tod = 0 sem m = 1; sem d[n] = ([n] 0); queue of (int waketime, int process_id) napQ; proc get_time() returns time { time = tod; } proc delay(interval) int waketime = tod + interval; P(m); insert (waketime, myid) em napQ: V(m); P(d[myid]); } (...)
Chamada de Procedimento Remoto
(...) process Clock { inicie cronômetro do sistema; while (true) { tod ++; P(m); while (tod >= menor waketime em napQ) { remove (waketime, id) from napQ; V(d[id]); } V(m); } }end TimeServer
Sincronização Distribuída
Rendezvous
Rendezvous
• Combinando comunicação e sincronização;• Como em RPC, processo cliente invoca operação
por meio da instrução call;• Diferente de RPC, um único processo servidor é
usado para servir as chamadas aos procedimentos:– Comando de entrada (in);
– Operações são servidas uma de cada vez;
– Sincronização implícita;
• Linguagem ADA;
Rendezvous
processoprocessochamadorchamador
processo processo servidorservidor
(corpo de (corpo de inin))
callcall
MóduloMódulo
inin
Rendezvous
• A operação in:– in op1(formals1) and B1 by e1 S1;[] op2(formals2) and B2 by e2 S2;[] opn(formalsn) and Bn by en Sn;ni
• A operação in:– opi : identificador da operação;– Bi : expressão de sincronização;– ei : expressão de escalonamento;– Si : lista de comandos;
...... ............ ......
Rendezvous
module BoundedBuffer op deposit(typeT), fetch(result typeT);body process Buffer { typeT buf[n]; int front = 0, rear = 0, count = 0; while (true) in deposit(item) and count < n buf[rear] = item; rear = (rear + 1) mod n; count++; [] fetch(item) and count > 0 item = buf[front]; front = (front + 1) mod n; count--; ni }
Paradigmas de Sincronização Distribuída
Padrões de Interação entre Processos
Paradigmas de Sincronização Distribuída
• Tipos de Processos:– Filtros;– Clientes;– Servidores;– Peers;
• Padrões de interação entre-processos:– Produtor / Consumidor (1);– Interacting peers (2);– Cliente / Servidor (3);
• Passagem de mensagens: (1) e (2);• RPC e rendezvous: (3).
Paradigmas de Sincronização Distribuída
• Gerente / Trabalhadores;– Multiplicação de matrizes
esparsas;
– Quadratura adaptativa;
• Algoritmos sistólicos;– Rotulações de regiões
(processamento de imagens);
– Autômatos celulares;
• Algoritmos pipe-line;– Multiplicação de matrizes;
• Probe / echo;– Disseminação em rede;
– Computação da topologia de uma rede;
• Disseminação;– Relógios lógicos e ordenação
de eventos;
– Semáforos Distribuídos
• Passagem do token;– Exclusão mútua distribuída;
– Detecção de terminação (em anel e em grafo);
• Servidores replicados;– Solução descentralizada ao
jantar dos filósofos;
Conclusões
• Computação distribuída tem se tornado onipresente;– Internet, interconectividade, etc;
• Diversos mecanismos surgiram nas últimas décadas para sincronização distribuída;– Nichos de aplicações complementares;
• Padrões de interação conhecidos devem ser observados na construção de aplicações distribuídas;– Esqueletos;
– Templates;
Sincronização Distribuída de Processos
Francisco Heron de Carvalho Junior, Dr.