Il modello cliente/servente
e
l’interfaccia Socket
per l’implementazione di applicazioni
Prof. Alfio Lombardo
IL PROBLEMA DEL RENDEZ-VOUS
Processo
Processo A
A
Messaggio
Messaggio
Processo B
B
Processo
IL PROBLEMA DEL RENDEZ-VOUS
Processo
Processo A
A
Messaggio
Messaggio
Processo B
B
Processo
MODELLO CLIENTE - SERVENTE
CLIENTE
CLIENTE
Richiesta
Risposta
SERVENTE
La gestione della concorrenza nel server
Remote
Cliente
Login
INTERNET
Cliente
Cliente
Server
CLIENTE 2
Connessione 2
CLIENTE
CLIENTE 1
1
SERVENTE
SERVENTE
MASTER
Connessione 1
Richiesta
Risposta
SERVENTE
SLAVE 1
LA GESTIONE DEI CRASH NEL SERVER
I Scenario: Ack
CLIENTE
Richiesta
Risposta
Write
SERVENTE
I Scenario: Ack
Write
No Transaction
CLIENTE
Richiesta
Risposta
SERVENTE
II Scenario Write
CLIENTE
Richiesta
Risposta
Ack
SERVENTE
II Scenario Write
Ack
Duplicate Transaction
CLIENTE
?
Richiesta
Richiesta
Risposta
SERVENTE
Ripristino dei guasti nel Server
Strategia
del Cliente
Ritrasmetti in S1
Strategia del Servente
Write
Ack
Write
Ack
AF(W) AWF F(AW) F(WA) WAF WF(A)
NO
OK OK
OK OK DUP
Ritrasmetti in S0
OK
DUP NO
Ritrasmetti
OK
DUP
OK
Non Ritrasmetti
NO
OK
NO
S1 = stato di attesa della conferma
NO
OK
NO
DUP OK
DUP DUP
OK
OK
POLITICHE DI GESTIONE
DEI GUASTI NEL SERVER
At most once
At least once
L’interfaccia socket
AP1
AP2
AP3
Funzioni di sistema
Kernel del Sistema Operativo contenente il
software TCP/UDP
Il concetto di Socket
Definizione:
Generalizzazione del meccanismo di
accesso ai file in Unix che fornisce un
punto di accesso per la comunicazione
Appl.
process
Il “canale” di comunicazione tra due
Applicativi è rappresentato da:
Client port Addr, IP Client Addr,
IP Server Addr, Server port Addr
Un socket identifica localmente il canale
tra due Applicativi
Appl.
process
Modalita’ c.o.:
Servente
Socket(
)
socket
= socket(family,
type, protocol)
Bind(
)
family ::=
bind
(socket,localaddr,addrlen)
type::=
{PF_INET,
{SOCK_STREAM,
PF_APPLETALK,
SOCK_DGRAM,
listen(socket,qlength)
Listen(
)
PF_PUP, ...}
…..}
Accept( ) accept(socket,addr,addrlen)
newsocket
Fork())
fork(
master
close(socket)
Close( )
slave
recv(sock,*buf,length,flags)
Recv( )
Send( )
send(sock,*buf,
length,flags)
Modalita’ c.o.:
Cliente
Socket( )
)
intConnect(
connect(socket,destaddr,addrlength
)
Send( )
Recv( )
Servente
Cliente
Socket( )
Bind( )
Socket( )
Listen( )
Connect( )
Accept( )
Fork( )
master
Close( )
slave
Send( )
Recv( )
Recv( )
Send( )
Modalita’ c.l.
Servente
Cliente
Socket( )
Socket( )
Bind( )
Bind( )
int
recvfrom(sock,*buf,
length,
RecvFrom(
)
RecvFrom(
)
flags,sourceaddr,addrlength
)
SendTo( )
RecvFrom( )
int sendto(sock,*buf, length,
SendTo( )
flags,destaddr,addrlength
)
Esercizio consigliato:
IPC
Macrolezione 05
(ipermediale)
Inter-Process Communication
Scarica

Lezione 6