Documentos de Académico
Documentos de Profesional
Documentos de Cultura
mensajes
Paso sncrono de mensajes:
notacin simplificada
ejemplo: proceso filtro copiar
notacin general
ejemplo: proceso servidor mcd
Entrada selectiva
o cmo esperar en varios canales a la vez
Ejercicios
Citas y RPC
J. Ezpeleta-P. lvarez 1
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Paso sncrono de mensajes
J. Ezpeleta-P. lvarez 2
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Paso sncrono de mensajes
J. Ezpeleta-P. lvarez 3
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Paso sncrono de mensajes
args
process mcd process client
res
J. Ezpeleta-P. lvarez 4
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Entrada selectiva
args
process mcd process client
res
res_2 args_2
process client_2
J. Ezpeleta-P. lvarez 5
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Entrada selectiva
channel of (integer,integer) args,args_2
channel of integer res,res_2
process mcd process client
integer x,y,m,cl integer a,b,m
integer r := 1 loop
loop obtener a,b
either args => (x,y) args <= a,b
cl := 1 res => m
or args_2 => (x,y)
cl := 2 process client_2
... --calcula mcd en m integer a,b,m
if cl=1 loop
res <= m obtener a,b
else --cl=2 args_2 <= a,b
res_2 <= m res_2 => m
J. Ezpeleta-P. lvarez 6
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Entrada selectiva
channel of (integer,integer) args,args_2
channel of integer res,res_2
process mcd process client
integer x,y,m,cl integer a,b,m
integer r := 1 loop
loop obtener a,b
either args => (x,y) args <= a,b
... --calcula mcd en m res => m
res <= m
or args_2 => (x,y) process client_2
... --calcula mcd en m integer a,b,m
res_2 <= m loop
obtener a,b
args_2 <= a,b
res_2 => m
J. Ezpeleta-P. lvarez 7
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Ejemplo: la criba de Eratstenes
P1 P2 P3 P4 ...
J. Ezpeleta-P. lvarez 8
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Ejemplo: "Pipeline sort"
P1 P2 P3 P4 ... Pn
J. Ezpeleta-P. lvarez 9
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Ejemplo: producto matriz por vector
A b
j
P1,1 P1,n
i j i j
1 1 b1 bn
Pi,j
... ...
b
j b1 bn
0
Pn,1
.... Pn,n
xn
J. Ezpeleta-P. lvarez 10
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Ejemplo: rbol de evaluacin
J. Ezpeleta-P. lvarez 11
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Ejercicio: los filsofos
channel of integer[1..n] canFil
channel of (integer,integer) entrada
process servidor
process filosofo(i:1..n) integer who,what
integer kk set of integer tenLibres := {1..n}
set of integer filEsperan := {}
loop forever loop forever
--piensa entrada => (who, what)
entrada <= (i,COGER) switch
canFil[i] => kk what=DEJAR: ...
--come what=COGER: ...
entrada <= (i,DEJAR) end switch
end loop
J. Ezpeleta-P. lvarez 12
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Ejercicio: los filsofos
J. Ezpeleta-P. lvarez 13
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Ejercicio: los filsofos
switch --operaciones MOD n
what=COGER: . . .
what=DEJAR:
if (who-1 IN libres) AND (who-1 IN filEsperan)
canFil[who-1] <= 1
libres := libres \ {who-1}
filEsperan := filEsperan \ {who-1}
else
libres := libres UNION {who}
end if
J. Ezpeleta-P. lvarez 15
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Citas
entry C(x: in ...;
y: in out ...;
z: out ...);
... asimetra
task body T1 is
begin
...
accept C(x,y,z) do
instr
end C2;
...
task body T2 is
end T1;
begin
...
T1.C(a,b,c);
...
end T1;
J. Ezpeleta-P. lvarez 16
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Canales sncronos en C++ y Java
channel of T canal
J. Ezpeleta-P. lvarez 17
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
channel of T canal
P1
P2
J. Ezpeleta-P. lvarez 18
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Socket soc(SERVER_PORT); canal ==== port (no tipado)
P1 P2
SERVIDOR (IP) CLIENTE
155.210.***.*** J. Ezpeleta-P. lvarez 19
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Socket soc(SERVER_PORT); canal ==== port (no tipado)
Socket sC(SERVER_ADDRESS,
int socket_fd = soc.Bind();
SERVER_PORT);
int error_code = soc.Listen(nC);
P1 P2
SERVIDOR (IP) CLIENTE
155.210.***.*** J. Ezpeleta-P. lvarez 20
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Socket soc(SERVER_PORT); canal ==== port (no tipado)
Socket sC(SERVER_ADDRESS,
int socket_fd = soc.Bind();
SERVER_PORT);
int error_code = soc.Listen(nC);
int socket_fd = sC.Connect();
int client_fd = soc.Accept();
P1 P2
SERVIDOR (IP) CLIENTE
155.210.***.*** J. Ezpeleta-P. lvarez 21
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
Socket soc(SERVER_PORT); canal ==== port (no tipado)
Socket sC(SERVER_ADDRESS,
int socket_fd = soc.Bind();
SERVER_PORT);
int error_code = soc.Listen(nC);
int socket_fd = sC.Connect();
int client_fd = soc.Accept();
P1 P2
SERVIDOR (IP) CLIENTE
155.210.***.*** J. Ezpeleta-P. lvarez 22
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
channel of T canal
P1
P2
J. Ezpeleta-P. lvarez 23
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
ss=new ServerSocket(PORT#)
canal ==== port (no tipado)
import java.net.Socket;
import java.net.ServerSocket;
can=ss.accept()
P1
P2
SERVIDOR (IP)
CLIENTE
155.210.***.***
J. Ezpeleta-P. lvarez 24
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
ss=new ServerSocket(PORT#) cs=new Socket(IP,PORT#)
can=ss.accept()
P1
P2
SERVIDOR (IP)
CLIENTE
155.210.***.***
J. Ezpeleta-P. lvarez 25
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
ss=new ServerSocket(PORT#) cs=new Socket(IP,PORT#)
can=ss.accept()
oS=cs.getOutputStream()
iS=can.getInputStream()
iS=cs.getInputStream()
out=can.getOutputStream()
P1
P2
SERVIDOR (IP)
CLIENTE
155.210.***.***
J. Ezpeleta-P. lvarez 26
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
ss=new ServerSocket(PORT#) cs=new Socket(IP,PORT#)
can=ss.accept()
oS=cs.getOutputStream();
pW=new PrintWriter(
iS=can.getInputStream() oS,
true);
pW.println("Hola");
out=can.getOutputStream()
P1
P2
SERVIDOR (IP)
CLIENTE
155.210.***.***
J. Ezpeleta-P. lvarez 27
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
ss=new ServerSocket(PORT#) cs=new Socket(IP,PORT#)
can=ss.accept()
iS=can.getInputStream()
iS=cs.getInputStream();
bR=new BufferedReader(
new InputStreamReader(
iS)
out=can.getOutputStream() )
);
mens=bR.readLine();
P1
P2
SERVIDOR (IP)
CLIENTE
155.210.***.***
J. Ezpeleta-P. lvarez 28
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
ss=new ServerSocket(PORT#)
can=ss.accept()
cs=new Socket(IP,PORT#)
P2
CLIENTE
can2=ss.accept()
cs=new Socket(IP,PORT#)
P3
P1 CLIENTE
SERVIDOR (IP)
155.210.***.***
J. Ezpeleta-P. lvarez 29
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza
ss=new ServerSocket(PORT#)
can=ss.accept()
cs=new Socket(IP,PORT#)
thread P2
CLIENTE
can2=ss.accept()
thread
cs=new Socket(IP,PORT#)
P3
P1 CLIENTE
SERVIDOR (IP)
155.210.***.***
J. Ezpeleta-P. lvarez 30
Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza