Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouGabrielhenrique Rodarte Alterado mais de 9 anos atrás
1
Troca de Mensagens Assíncronas n Canais de comunicação são filas ilimitadas de mensagens. n Processos inserem elementos nessa flia através de comandos send, que não bloqueiam o processo. n Processos recebem mensagens através de comandos receive, que bloqueiam até que o canal tenha dados (se ele estiver vazio).
2
Canais x Semáforos n Canais funcionam de forma semelhante a semáforos, mas carregando dados: send = V receive = P n Se as mensagens forem nulas, e o semáforo for inicializado com 0, o funcionamento é idêntico, com o número de mensagens enfileiradas igual ao valor do semáforo.
3
Sintaxe chan ch(id 1 :type 1,...,id n :type n ) send ch(expr 1,...,expr n ) receive ch(var 1,...,var n ) empty(ch)
4
Exemplo: filtro para organizar linhas de caracteres chan input (char),output(char[20]); void char_to_line { char line[20]; int i = 1; while (TRUE) { receive input(line[i]); while (line[i] != ‘\n’ && i < 20) { i++; receive input(line[i]); } } send output(line); i=1; }
5
Filtros: Rede para Ordenação Problema: Ordenar n números Solução 1: um processo recebe os números por um canal de entrada, ordena os números, e os envia ordenados no canal de saída.
6
Filtros: Rede para Ordenação Dificuldade: detectar o fim da entrada dos números, i.e. a quantidade de números (n) a ser ordenada. Saber a quantidade antecipadamente Ter n como o primeiro valor a ser recebido Terminar a sequencia de entrada com um valor sentinela (valor especial que indica que os números acabaram). Esta é a solução mais geral.
7
Rede de merge chan in1 (int), in2 (int), out (int); void merge { int v1, v2; receive in1(v1); receive in2(v2); while (v1 != EOS and v2 != EOS) { if (v1 < v2) {send out (v1); receive in1(v1);} else {send out (v2); receive in2(v2);}; } if (v1 == EOS) {while (v2 != EOS) {send out (v2); receive in2 (v2);}} else {while (v1 != EOS) {send out (v1); receive in1 (v1);}} send out (EOS); }
8
Rede de merge n Nomes dos canais: Estáticos: declarar os canais em um array global e cada instancia de merge trabalha com determinados canais (índices) dos arrays como entrada ou saída. Dinâmicos: declarar os canais em um array global e cada instancia de merge recebe os arrays de entrada e de saída como parâmetros. Torna os programas idênticos, mas exige um main para programar a interconexão dos canais.
9
Clientes e Servidores n Servidor: processo que continuamente responde a pedidos dos clientes. n Como transformar monitores em processos servidores: monitores podem ser simulados por troca de mensagens e vice-versa.
10
Simulando chamada a procedimentos chan request (int, tipos dos parâmetros); chan reply[N](tipos dos resultados); void servidor { int index;... while (TRUE) { receive request (index, parametros);... corpo da operação... send reply[index](resultado) } } void client_i { send request(i, argumentos); receive reply[i](resultado); }
11
Clientes e servidores n Seguindo o exemplo anterior, é possível extende-lo para suportar: vários procedimentos diferentes, e a espera por uma condição
12
Monitores x Troca de mensagens n Variáveis permanentes n Identificadores de procedimentos n Chamada de procedimentos n Entrada do monitor n Retorno do procedimento n Wait n Signal n Corpo do procedimento n Variáveis locais ao server n Canal request e tipos de operação n send request e receive reply n receive request n send reply n guarda pendência n Processa pedido pendente n case
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.