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