Professional Documents
Culture Documents
Clase 5
Facultad de Informtica
UNLP
Programacin
Distribuida
Conceptos generales
21-04-2017 Clase 5 3
Caractersticas
21-04-2017 Clase 5 4
Relacin entre mecanismos de sincronizacin
Busy waiting
Semforos
Asincrnico
Monitores Pasaje de mensajes Sincrnico
RPC Rendezvous
21-04-2017 Clase 5 5
Pasaje de Mensajes Asincrnicos (PMA)
Uso de canales en PMA
PMA canales = colas de mensajes enviados y an no recibidos.
Declaracin de canales chan ch (id1 : tipo1, ... , idn : tipon )
chan entrada (char);
chan acceso_disco (INT cilindro, INT bloque, INT cant, CHAR* buffer);
chan resultado[n] (INT);
21-04-2017 Clase 5 8
Ejemplo
Proceso_1
chan entrada(char), salida(char [CantMax]);
Process Carac_a_Linea
{ char linea [CantMax], int i = 0; Entrada
WHILE (true)
{ receive entrada (linea[i]);
WHILE (linea[i] CR and i < CantMax)
{ i := i + 1; Carac_a_
receive entrada (linea[i]); linea
}
linea [i] := EOL;
send salida(linea); Salida
i := 0;
}
}
Proceso_2
21-04-2017 Clase 5 9
Productores y consumidores (filtro)
Red de Ordenacin
Filtro: proceso que recibe mensajes de uno o ms canales de entrada y enva
mensajes a uno o ms canales de salida. La salida de un filtro es funcin de su estado
inicial y de los valores recibidos.
Esta funcin del filtro puede especificarse por un predicado que relacione los valores
de los mensajes de salida con los de entrada.
Problema: ordenar una lista de N nmeros de modo ascendente. Podemos pensar en
un filtro Sort con un canal de entrada (N nmeros desordenados) y un canal de salida
(N nmeros ordenados).
Process Sort
{ receive todos los nmeros del canal entrada;
ordenar los nmeros;
send de los nmeros ordenados por el canal OUTPUT;
}
21-04-2017 Clase 5 10
Productores y consumidores (filtro)
Red de Ordenacin
Solucin ms eficiente que la secuencial red de pequeos procesos que ejecutan
en paralelo e interactan para armar la salida ordenada (merge network).
Idea: mezclar repetidamente y en paralelo dos listas ordenadas de N1 elementos cada
una en una lista ordenada de 2*N1 elementos.
Con PMA, pensamos en 2 canales de entrada por cada canal de salida, y un carcter
especial EOS cerrar cada lista parcial ordenada.
La red es construida con filtros Merge:
Cada Merge recibe valores de dos streams de entrada ordenados, in1 e in2, y produce un
stream de salida ordenado, out.
Los streams terminan en EOS, y Merge agrega EOS al final.
Cmo implemento Merge?. Comparar repetidamente los prximos dos valores recibidos
desde in1 e in2 y enviar el menor a out.
in1
EOS 9 8 5 5 3 1 1 out
Merge EOS 9 8 8 5 5 5 4 3 2 1 1 1
in2
EOS 8 5 4 2 2 1
21-04-2017 Clase 5 11
Productores y consumidores (filtro)
Red de Ordenacin
Process 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); }
}
21-04-2017 Clase 5 12
Productores y consumidores (filtro)
Red de Ordenacin
EOS 5 EOS 5 2
Merge
EOS 2
Merge EOS 8 5 2 1
EOS 1
Merge
EOS 8 1 EOS 8 7 6 5 4 3 2 1
EOS 8
Merge
EOS 3 EOS 7 3
Merge
EOS 7
EOS 7 6 4 3
Merge
EOS 4
Merge
EOS 6 EOS 6 4
21-04-2017 Clase 5 13
Productores y consumidores (filtro)
Red de Ordenacin
21-04-2017 Clase 5 14
Clientes y Servidores.
Monitores Activos
Servidor: proceso que maneja pedidos (requests) de otros procesos clientes.
Cmo implementamos C/S con PMA?
Dualidad entre monitores y PM: cada uno de ellos puede simular al otro.
monitor Mname
{ declaracin de variables permanentes;
cdigo de inicializacin;
procedure op(formales) { cuerpo de op;}
}
21-04-2017 Clase 5 15
Clientes y Servidores.
Monitores Activos 1 operacin
Cliente[1]
Servidor
requerimiento
Cliente[n]
21-04-2017 Clase 5 16
Clientes y Servidores.
Monitores Activos 1 operacin
chan requerimiento (int idCliente, tipos de los valores de entrada );
chan respuesta[n] (tipos de los resultados );
Process Servidor
{ int idCliente;
declaracin de variables permanentes;
cdigo de inicializacin;
while (true)
{ receive requerimiento (IdCliente, valores de entrada);
cuerpo de la operacin op;
send respuesta[IdCliente] (resultados);
}
}
Process Cliente [i = 1 to n]
{ send requerimiento (i, argumentos);
receive respuesta[i] (resultados);
}
21-04-2017 Clase 5 17
Clientes y Servidores.
Monitores Activos Mltiples operaciones
Podemos generalizar esta solucin de C/S con una nica operacin para considerar
mltiples operaciones.
El IF del Servidor ser un CASE con las distintas clases de operaciones.
El cuerpo de cada operacin toma datos de un canal de entrada en args y los
devuelve al cliente adecuado en resultados.
21-04-2017 Clase 5 18
Clientes y Servidores.
Monitores Activos Mltiples operaciones
Process Servidor
{ int IdCliente; clase_op oper; tipo_arg args;
tipo_result resultados;
cdigo de inicializacin;
while ( true)
{ receive request(IdCliente, oper, args);
if ( oper == op1 ) { cuerpo de op1;}
.......
elsif ( oper == opn ) { cuerpo de opn;}
send respuesta[IdCliente](resultados);
}
}
Process Cliente [i = 1 to n]
{ tipo_arg mis_args;
tipo_result mis_resultados;
send request(i, opk, mis_args);
receive respuesta[i] (mis_resultados);
}
21-04-2017 Clase 5 19
Clientes y Servidores.
Monitores Activos Mltiples operaciones y variables condicin
Hasta ahora el monitor no requera variables condicin ya que el Servidor no
requera demorar la atencin de un pedido de servicio. Caso general: monitor con
mltiples operaciones y con sincronizacin por condicin. Para los clientes, la
situacin es transparente cambia el servidor.
21-04-2017 Clase 5 20
Clientes y Servidores.
Monitores Activos Mltiples operaciones y variables condicin
21-04-2017 Clase 5 21
Clientes y Servidores.
Monitores Activos Mltiples operaciones y variables condicin
21-04-2017 Clase 5 23