Laboratorio Reti di Calcolatori (A.A ) Delfina Malandrino.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Laboratorio Reti di Calcolatori (A.A ) Delfina Malandrino."

Transcript

1 Laboratorio Reti di Calcolatori (A.A ) Delfina Malandrino Applicazione echo Il server replica un messaggio inviato dal client Il client legge una riga di testo dallo standard d input e la invia al server Il server legge la riga di testo dal socket e la rimanda al client Il client legge la riga di testo dal socket e la invia allo standard input 1

2 Echo Server #include basic.h int main(int argc, char **argv) { pid_t pid; int listensd, connsd; struct sockaddr_in servaddr, cliaddr; socklen_t clilen; if( (listensd = socket(af_inet, SOCK_STREAM, 0)) < 0) err_sys( errore in socket"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family sin = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = htons(serv_port); if( (bind(listensd, (SA *) &servaddr, sizeof(servaddr))) < 0) err_sys("errore in bind"); if( listen(listensd, LISTENQ) < 0 ) err_sys( errore in listen"); Echo Server for ( ; ; ) { clilen = sizeof(cliaddr); if( (connsd = accept(listensd, (SA *) &cliaddr, &clilen)) < 0) err_sys( errore in accept"); if( (pid = fork()) == 0 ) { if( close(listensd) == -1 ) err_sys( errore in close"); server_echo(connsd); if( close(connsd) == -1 ) err_sys( errore y( in close ); exit(0); if( close(connsd) == -1 ) err_sys("errore in close"); 2

3 Echo Server void server_echo(int sockd) { ssize_t n; char line[maxline]; for ( ; ; ) { if ( (n = readline(sockd, line, MAXLINE)) == 0) return; //connessione chiusa dal client if( writen(sockd, line, n)!= n ) err_sys( sys( write error"); Echo Client int main(int argc, char **argv) { int sockd, n; char buff[maxline], recvline[maxline + 1]; struct sockaddr_in servaddr, localaddr, peeraddr; socklen_t localaddr_len, peeraddr_len; if ((sockd = socket(af_inet, SOCK_STREAM, 0)) < 0 ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_addr.s_addr=inet_addr(argv[1]); [ servaddr.sin_family = AF_INET; servaddr.sin_port = htons(serv_port); if (connect(sockd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) err_sys( connect error"); client_echo(stdin, sockd); exit(0); inet_pton(af_inet,argv[1],&serveraddr.sin_addr) 3

4 Echo Client void client_echo(file *fd, int sockd) { char sendline[maxline], recvline[maxline]; int n; while (fgets(sendline, MAXLINE, fd)!= NULL) { (1) if( (n = writen(sockd, sendline, strlen(sendline))) < 0) (2) err_sys("errore nella write"); if ( (n = readline(sockd, recvline, MAXLINE)) < 0) (3) err_sys("errore nella readline"); if (n == 0) (4) err_quit("str_cli_echo: server morto prematuramente\n"); fputs(recvline, stdout); (5) 1. legge da fd fino all EOF 2. invia al server la stringa letta 3. legge una riga dal socket si aspetta \n per uscire 4. se ha letto l EOF esce 5. stampa su stdout Analisi dell Applicazione: Creazione della Connessione ete (Delfina MAlandrino) 20 Quando il server parte invoca le funzioni: socket, bind, listen, accept e rimane bloccato nella accept. Il client non è ancora partito. [delmal@apollo ECHO]./echo_server [delmal@apollo ECHO] netstat -a Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:9877 *:* LISTEN Mostrato lo stato di tutti i socket nel sistema L opzione a mostrailistening socket Lo * per un IP address di 0 (INADDR_ANY) Unaportaa0 Processo padre Processo padre Indirizzo socket :9877 4

5 Analisi dell Applicazione: Creazione della Connessione Quando parte il client si hanno 3 processi nel sistema. Processo server padre bloccato sull accept Processo server figlio bloccato sulla read Il client bloccato su fgets [delmal@wonderland ECHO]./echo_client [delmal@wonderland ECHO] netstat a Proto Recv-Q Send-Q Local Address Foreign Address State tcp : :9877 ESTABLISHED indirizzo del socket del client (IP: porta 32791) Analisi dell Applicazione: Creazione della Connessione Quando parte il client si hanno 3 processi nel sistema. Processo server padre bloccato sull accept Processo server figlio bloccato sulla read Il client bloccato su fgets [delmal@apollo ECHO] netstat -a Proto Recv-Q Send-Q Local Address Foreign Address State tcp : :* LISTEN tcp : :32791 ESTABLISHED indirizzo del socket di ascolto ( porta 9877) Processo padre indirizzo del socket connesso ( : porta 9877) Processo server figlio 5

6 Analisi dell Applicazione: Creazione della Connessione ECHO] ps lw F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND schedu S pts/0 0:00./echo_server schedu S pts/0 0:00./echo_server processo > server padre processo > server figlio generato da [delmal@wonderland ~]$ ps lw F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND rt_sig S pts/7 0:00 -tcsh S pts/7 0:00./echo_client processo > client generato da tcsh Chiusura normale Quando l utente inserisce i dati tutto ciò che viene inviato al server verrà stampato su stdout. [delmal@wonderland ECHO]./echo_client Ciao D Ciao R ^D D [delmal@wonderland ECHO] [delmal@wonderland ECHO] netstat a grep 9877 tcp : :9877 TIME_WAIT Il client va in TIME_WAIT 6

7 Chiusura Normale L utente digita ^D la fgets() restituisce NULL client_echo() termina il client esegue exit() il S.O. chiude tutti i descrittori invia il FIN al server e riceve l ACK (va in FIN_WAIT_2) il server non ha ancora inviato il suo FIN ed èin CLOSE_WAIT Chiusura di una connessione 7

8 Chiusura Normale Quando il server TCP riceve il FIN Il processo figlio è bloccato sulla readline che restituisce 0 La funzione server_echo() termina Il controllo ritorna al metodo main il server figlio esegue exit() il S.O. invia il FIN al client e termina la close di TCP il client passa allo stato TIME_WAIT Chiusura di una connessione 8

9 Analisi dell Applicazione: Chiusura della Connessione Lo stato dei socket dopo che è stata terminata la close è il seguente ECHO] netstat a grep 9877 Tcp : :9877 TIME_WAIT [delmal@apollo ECHO] netstat a grep 9877 Tcp : :* LISTEN lo stato dei processi è il seguente prompt> ps lw PID PPID STAT TTY TIME COMMAND S pts/0 0:00./echo_server Z pts/0 0:00 [echo_server <defunct>] il processo figlio è diventato zombie Gestione dei segnali I segnali sono utilizzati per notificare l occorrenza di un evento ad un processo Sono inviati dai processi stessi o dal SO SIGCHLD inviato dal SO al processo padre Il processo può decidere quali segnali gestire Per ogni segnale deve definire una funzione di gestione (handler del segnale) void handler(int signo); Ogni segnale ha un handler di default Alcuni vengono sempre gestiti (SIGKILL) Alcuni per default vengono ignorati (SIGCHLD) 9

10 Gestione dei segnali In un server ricorsivo il server crea un processo figlio per gestire la connessione Quando il processo figlio termina di gestire la richiesta la connessione viene chiusa ed il processo figlio termina Il SO manda un segnale SIGCHLD al padre ed il processo figlio diventa ZOMBIE I processi ZOMBIE sono processi terminati per i quali vengono mantenuti dei dati nel SO (CPU,memoria, ecc). Il processo padre può così controllare il valore di uscita del figlio e l utilizzo delle risorse del figlio Di default il processo padre ignora questo segnale Il processo figlio rimane ZOMBIE finché il padre non termina Gestione dei segnali I processi ZOMBIE esauriscono lo spazio della tabella dei processi Per evitare la creazione di processi ZOMBIE bisogna fare in modo che il processo padre gestisca il segnale SIGCHLD Bisogna fornire un handler per il segnale SIGCHLD Il processo zombie viene rimosso quando il processo padre chiama le funzioni wait() e waitpid() 10

11 wait e waitpid pid_t wait(int* statloc); pid_t waitpid(pid_t t pid, int* statloc, intoptions); le funzioni restituiscono il pid e il valore di uscita del processo figlio che è finito consentono al processo zombie di essere rimosso caratteristiche di wait() si blocca finchè non termina un figlio non accoda i segnali ricevuti durante l esecuzione alcuni processi restano zombie caratteristiche ti di waitpid() id() opzione non bloccante (WNOHANG) Il processo non aspetta se il figlio non è terminato permette di scegliere il figlio da attendere (-1 per il primo che termina) chiamato in un ciclo consente di catturare tutti i segnali Handler per SIGCHLD #include <signal.h> #include <sys/wait.h> void gestisci_zombie (int segnale) { int status; pid_t waitpid(pid_t pid, int*status, int options) int pid; while((pid = waitpid(-1, &status, WNOHANG)) > 0) printf("child %d terminato\n", pid); return; waitpid() permette di scegliere il figlio d attendere (-1 per il primo che termina) Quando il figlio termina e lancia il segnale SIGCHLD, waitpid() lo cattura e restituisce il pid 11

12 Attivazione dell handler #include <signal.h> #include <sys/wait.h> typedef void Sigfunc(int); Sigfunc *signal(int signum, Sigfunc *func) { struct sigaction act, oact; act.sa_handler = func; sigemptyset(&act.sa_mask); act.sa_flags = 0; if (signum!= SIGALRM) act.sa_flags = SA_RESTART; if (sigaction(signum, &act, &oact) < 0) return(sig_err); return(oact.sa_handler); signal() attiva l handler: prende in ingresso il numero del segnale ed il puntatore all handler la struttura sigaction memorizza informazioni riguardanti la manipolazione del segnale insieme di segnali bloccati durante l esecuzione dell handler la funzione sigaction() prende in ingresso una struttura contenente il puntatore all handler, una maschera di segnali da mascherare e vari flag Gestione dei segnali [delmal@wonderland] ps lw PID PPID PGID WINPID TTY UID STIME COMMAND con :31:25 /usr/bin/tcsh /bi / con :31:55 /usr/bin/tcsh con :32:51 /usr/bin/tcsh con :19:17./echo_server con :20:16./echo_client con :20:16./echo_server [delmal@wonderland]>./echo_server & [1] 3076 prompt >./ echo_client Ciao Ciao ^D Child 2352 terminato 12

13 Interruzione delle system call Le system call lente possono essere bloccate dalla cattura di un segnale e l esecuzione dell handler es. accept, read, write La system call esce con errore EINTR l applicazione termina anche se EINTR non è un vero errore Occorre tener presente questo problema l applicazioneli i può gestire separatamente questo errore Alcuni S.O. fanno ripartire le system call interrotte la nostra signal() dice al S.O. di far ripartire le system call interrotte (flag SA_RESTART) Una possibile soluzione for ( ; ; ) { clilen = sizeof(cliaddr); if ( (connfd = accept(listenfd, &cliaddr, &clilen)) < 0) { if (errno = EINTR) continue; else { err_sys( accept error ); Se la chiamata ad accept ritorna EINTR accept viene richiamata Se l errore è diverso da EINTR Si gestisce l errore (nell esempio si chiama exit) 13

14 Server TCP con Gestione di SIGCHLD e EINTR #include "basic.h" int main(int argc, char **argv) { pid_t pid; int listensd, connsd; struct sockaddr_in servaddr, cliaddr; socklen_t len; if( (listensd = socket(af_inet, SOCK_STREAM, 0)) < 0) err_sys("errore in socket"); /* riempie l oggetto servaddr */ if( (bind(listensd, (SA *) &servaddr, sizeof(servaddr))) < 0) err_sys("errore in bind"); if( listen(listensd, LISTENQ) < 0 ) err_sys("errore in listen"); if( signal(sigchld, gestisci_zombie) == SIG_ERR ) err_sys("errore nella signal"); Server TCP con Gestione di SIGCHLD e EINTR for ( ; ; ) { len = sizeof(cliaddr); if( (connsd = accept(listensd, (SA *) &cliaddr, &cliaddr_len)) < 0) { if( errno == EINTR ) continue; else err_sys("errore in accept"); if( (pid = fork()) == 0 ) { if( close(listensd) == -1 ) err_sys("errore in close"); do_it(connsd); d) close(connsd); exit(0); if( close(connsd) == -1 ) err_sys("errore in close"); 14

15 Reset connessione e accept Un altro errore tipico da gestire con accept è il reset della connessione prima della chiamata ad accept La connessione è diventata ESTABLISHED ma è ancora nel BACKLOG Il client spedisce un RST Il server chiama accept Reset connessione e accept Quando il server invoca l accept questa restituisce un codice di errore ECONNABORTED La gestione dell errore ECONNABORTED dipende dall implementazione Il server può ignorarlo e richiamare accept per la prossima connessione 15

16 Terminazione del server Cosa succede se il server child termina prematuramente? I passi che avvengono sono i seguenti: Inviamo una stringa al server ed il server la restituisce correttamente Troviamo il PID del processo figlio e lo terminiamo (kill) Tutti i descrittori verranno chiusi Un FIN verrà inviato al client, il client risponde con un ACK. Il segnale SIGCHLD viene inviato al processo padre e gestito correttamente Sul client non accade nulla. Il client TCP riceve il FIN e risponde con un ACK ma PROBLEMA: Il client è bloccato sulla fgets (in attesa di una linea dal terminale) Terminazione del server [delmal@wonderland] > echo_client hello hello Ciao str_cli_echo: server morto prematuramente I Il client spedisce Ciao al server È permesso perché il client non ha chiuso il socket Il processo server ha chiuso la sua connessione e non invierà più dati Il client non sa che il processo padre è terminato Quando il server riceve altri dati dal client risponde con un RST Il client non vede l RST dal momento che è bloccato sulla readline La readline restituisce EOF a causa del FIN ricevuto dal server Non si aspetta di ricevere EOF quindi stampa il messaggio di errore e termina ( server morto prematuramente ) Tutti i descrittori verranno chiusi 16

17 SIGPIPE Cosa succede se il client ignora l errore su readline e scrive altri dati sul socket? Questo può capitare se il client deve eseguire due write consecutive prima di ricevere qualcosa La prima write fa sì che il server spedisca RST La seconda write crea il problema Quando un processo scrive su un socket che ha ricevuto un RST un segnale di SIGPIPE viene inviato al processo il processo termina se il segnale non viene catturato o ignorato Se SIGPIPE è ignorato l operazione di write genera l errore di EPIPE SIGPIPE Cosa succede con il segnale SIGPIPE: #include "unp.h" void str_cli(file *fp, int sockfd) { char sendline [MAXLINE], recvline [MAXLINE]; while (fgets(sendline, MAXLINE, fp)!= NULL) { writen(sockfd, sendline, 1); sleep(1); writen(sockfd, sendline + 1, strlen(sendline) - 1); if (readline(sockfd, ( recvline, MAXLINE) == 0) err_quit("str_cli: server terminated prematurely"); fputs(recvline, stdout); 17

18 SIGPIPE Cosa succede con il segnale SIGPIPE: > echo_client Hi there Hi there bye Broken pipe I Soluzione semplice, quando non si deve reagire all errore Ignorare (SIG_IGN) il segnale di SIGPIPE Assume che non occorre fare niente di speciale in tale circostanza Controllare l errore di EPIPE sulle write e nel caso di errore terminare (non scrivere più) Crash della macchina server Un altra possibile causa di errore è se la macchina server non risponde proprio Diverso da uccidere il processo server (in quel caso vengono spediti FIN, RST) Può dipendere dalla rete Il client è bloccato in readline TCP ritrasmetterà i dati per ricevere l ACK fino ad un certo timeout (ritrasmesso il segmento per 12 volte con tempo di attesa di 9 min circa) La funzione di lettura dal socket restituisce un errore ETIMEOUT (in caso di nessuna risposta) EHOSTUNREACH, ENETUNREACH (se un router determina che l host è unreachable e risponde con un ICMP destination unreachable ) 18

19 Server shutdown and reboot La connessione viene stabilita Il server va giù e fa il reboot senza che il client se ne accorga Non c è comunicazione durante lo shutdown (server scollegato dalla rete altrimenti spedisce FIN) Il client spedisce nuovi dati al server dopo il reboot Il server non ha più il socket aperto TCP risponde ai dati con un RST Client è in readline quando riceve RST Readline restituisce ECONNRESET Somma di 2 numeri Il client legge due interi dallo standard input e li invia al server il server li somma e restituisce il risultato al client il client stampa il risultato sullo standard output 19

20 Applicazione Somma - Server #include "basic.h" #include "somma_server.h" int main(int argc, char **argv) { pid_t pid; int listensd, connsd; struct sockaddr_in servaddr, cliaddr; socklen_t cliaddr_len; if( (listensd = socket(af_inet, SOCK_STREAM, 0)) < 0) err_sys( sys("errore in socket"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(inaddr_any); servaddr.sin_port = htons(serv_port); Applicazione Somma - Server if( (bind(listensd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0) err_sys("errore in bind"); if( listen(listensd, t LISTENQ) < 0 ) err_sys("errore in listen"); for ( ; ; ) { cliaddr_len = sizeof(cliaddr); if( (connsd = accept(listensd, (SA *) &cliaddr, &cliaddr_len)) < 0) { err_sys("errore in accept"); if( (pid = fork()) == 0 ) { if( close(listensd) == -1) err_sys("errore in close"); doit_server(connsd); if( close(connsd) == -1) err_sys("errore in close"); exit(0); if( close(connsd) == -1 ) err_sys("errore in close"); 20

21 Applicazione Somma Server #include "basic.h" void doit_server(int sockd){ int i, arg1, arg2,n; char sendline[maxline], recvline[maxline],c; for ( ; ; ) { if ( (n = readline(sockd, recvline, MAXLINE)) == 0) return; /* connessione chiusa dal client */ if( sscanf(rcvline, "%d %d", &arg1, &arg2) == 2 ) /* estrae da rcvline i due interi passati dal client */ sprintf(sendline, "%d\n", arg1 + arg2); else sprintf(sendline, "errore nell'input\n"); /* se il formato del messaggio ricevuto non è corretto*/ if( (n = writen(sockd, sendline, strlen(sendline))) < 0) /* invia la risposta al client */ err_sys("errore nella write"); Applicazione Somma Client #include "basic.h" #include "somma_client.h" int main(int argc, char **argv){ int sockd, n; struct sockaddr_in servaddr; if ( argc!= 2 ) err_quit("utilizzo: somma_client <IPaddress>"); if ( (sockd = socket(af_inet, SOCK_STREAM, 0)) < 0 ) err_sys("errore in socket"); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port sin = htons(serv_port); if ( inet_pton(af_inet, argv[1], &servaddr.sin_addr) <= 0 ) err_quit("errore in inet_pton per %s", argv[1]); if ( connect(sockd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) err_sys("errore in connect"); doit_client(stdin, sockd); exit(0); 21

22 Applicazione Somma Client #include "basic.h" void doit_client(file *fd, int sockd) { char sendline[maxline], recvline[maxline]; int n; printf("digita due interi sulla stessa linea\n"); while (fgets(sendline, MAXLINE, fd)!= NULL) { if( (n = writen(sockd, sendline, strlen(sendline))) < 0) err_sys("errore nella write"); if ( (n = readline(sockd, recvline, MAXLINE)) < 0) err_sys("errore nella readline"); if (n == 0) err_quit("str_cli_echo: il server è morto prematuramente\n"); fputs(recvline, stdout); Passaggio di strutture Strutture scambiate fra client e server Il client legge due interi dallo standard input e li invia al server il server li somma e restituisce il risultato al client il client stampa il risultato sullo standard output struct args{ long arg1; long arg2; struct result{ long sum; 22

23 doit_server #include basic.h" void doit_server(int sockfd) { ssize_t n; struct args args; struct result result; for ( ; ; ) { if ( (n = readn(sockfd, &args, sizeof(args))) == 0) return; /* connection closed by other end */ result.sum = args.arg1 + args.arg2; writen(sockfd, &result, sizeof(result)); doit_client void doit_client(file *fp, int sockfd) { char sendline[maxline]; struct args args; struct result result; while (fgets(sendline, MAXLINE, fp)!= NULL) { if (sscanf(sendline, "%ld%ld", &args.arg1, &args.arg2)!= 2) { printf("invalid input: %s", sendline); continue; writen(sockfd, &args, sizeof(args)); if (readn(sockfd, &result, sizeof(result)) == 0) err_quit("server terminato prematuramente\n"); printf("%ld\n", result.sum); 23

Progettazione di Applicazioni Robuste. Applicazione Echo. Schema Generale di un Server TCP Ricorsivo 1. Applicazione echo

Progettazione di Applicazioni Robuste. Applicazione Echo. Schema Generale di un Server TCP Ricorsivo 1. Applicazione echo a.a. 2003/04 Applicazione Echo Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Progettazione di Applicazioni Robuste nel progettare applicazioni su rete robuste

Dettagli

Applicazione ECHO. Dott. Delfina Malandrino. p//ssd s / d

Applicazione ECHO. Dott. Delfina Malandrino.  p//ssd s / d a.a 2007/2008 Applcazone ECHO delmal@da.unsa.t http://ss.da.unsa.t/~delmal p//ssd s / d Dpartmento d Informatca ed Applcazon R.M. Capocell Unverstà degl Stud d Salerno Applcazone echo Il server replca

Dettagli

SERVER CLIENT. Struttura di un Applicazione UDP. Socket UDP. Parametri di sendto. Funzioni di Input/Output. Prof. Vincenzo Auletta

SERVER CLIENT. Struttura di un Applicazione UDP. Socket UDP. Parametri di sendto. Funzioni di Input/Output. Prof. Vincenzo Auletta I semestre 03/04 Struttura di un Applicazione UDP Socket UDP socket() bind() Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ CLIENT socket() sendto() Dati (richiesta)

Dettagli

Server Iterativi. Server TCP Ricorsivi. Fork. Server Ricorsivi. un server iterativo gestisce una connessione alla volta. Prof.

Server Iterativi. Server TCP Ricorsivi. Fork. Server Ricorsivi. un server iterativo gestisce una connessione alla volta. Prof. Università degli studi di Salerno Laurea in Informatica a.a. 2003/04 TCP Ricorsivi Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ 1 Iterativi un server iterativo

Dettagli

Sono definiti per vari protocolli

Sono definiti per vari protocolli Autunno 2002 Prof. Roberto De Prisco -02: Socket TCP Università degli studi di Salerno Laurea e Diploma in Informatica Socket 02.2 Letteralmente significa presa (di corrente) È l astrazione di un canale

Dettagli

Comunicazione Connectionless o Datagram

Comunicazione Connectionless o Datagram Laboratorio Reti di Calcolatori (A.A. 2008-2009) Socket UDP Delfina Malandrino delmal@dia.unisa.it http://www.dia.unisa.it/professori/delmal/ 2 Comunicazione Connectionless o Datagram In una comunicazione

Dettagli

SERVER CLIENT. Letteralmente significa presa (di corrente) È l astrazione di un canale di comunicazione fra due computer connessi da una rete

SERVER CLIENT. Letteralmente significa presa (di corrente) È l astrazione di un canale di comunicazione fra due computer connessi da una rete Socket 02.2 Letteralmente significa presa (di corrente) È l astrazione di un canale di comunicazione fra due computer connessi da una rete -02: Socket TCP Autunno 2002 Prof. Roberto De Prisco Sono definiti

Dettagli

Funzioni bloccanti e soluzioni

Funzioni bloccanti e soluzioni Funzioni bloccanti e soluzioni La funzione accept() e le funzioni per la gestione dell I/O (ad es., read() e write()) sono bloccanti Ad es., le funzioni read() e recv() rimangono in attesa finché non vi

Dettagli

Funzioni bloccanti e soluzioni. Funzioni bloccanti e soluzioni (2) Parametri della funzione select() Funzione select()

Funzioni bloccanti e soluzioni. Funzioni bloccanti e soluzioni (2) Parametri della funzione select() Funzione select() Funzioni bloccanti e soluzioni La funzione accept() e le funzioni per la gestione dell I/O (ad es., read() e write()) sono bloccanti Ad es., le funzioni read() e recv() rimangono in attesa finché non vi

Dettagli

Laboratorio di Reti di Calcolatori

Laboratorio di Reti di Calcolatori Laboratorio di Reti di Calcolatori Esecuzione client-server: analisi e gestione degli errori. Paolo D Arco Abstract Scopo della lezione è mostrare come analizzare l esecuzione di un client ed un server,

Dettagli

Problema. I/O Multiplexing. Struttura delle Operazioni di Lettura. Modelli di I/O. Prof. Vincenzo Auletta

Problema. I/O Multiplexing. Struttura delle Operazioni di Lettura. Modelli di I/O. Prof. Vincenzo Auletta a.a. 2003/04 Problema I/O Multiplexing Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in Informatica 1 Un applicazione

Dettagli

Laboratorio Reti di Calcolatori (A.A ) Delfina Malandrino.

Laboratorio Reti di Calcolatori (A.A ) Delfina Malandrino. Laboratorio Reti di Calcolatori (A.A. 2008-2009) I/O Multiplexing Delfina Malandrino delmal@dia.unisa.it it http://www.dia.unisa.it/professori/delmal/ Problema 2 Un applicazione deve gestire più input

Dettagli

Laboratorio di Reti di Calcolatori

Laboratorio di Reti di Calcolatori Laboratorio di Reti di Calcolatori Funzioni utili, server ricorsivi, echo client ed echo server. Paolo D Arco Abstract Scopo della lezione è presentare alcune funzioni di utilità generale (e.g., funzioni

Dettagli

getsockname() e getpeername() Formato dei dati - server Esempio getsockname() server (2)

getsockname() e getpeername() Formato dei dati - server Esempio getsockname() server (2) Formato dei dati La comunicazione deve tener conto della diversa rappresentazione dei dati Rappresentazione in Big Endian e Little Endian Soluzione usata dai socket: network byte order (Big Endian) Due

Dettagli

Formato dei dati. La comunicazione deve tener conto della diversa rappresentazione dei dati

Formato dei dati. La comunicazione deve tener conto della diversa rappresentazione dei dati Formato dei dati La comunicazione deve tener conto della diversa rappresentazione dei dati Rappresentazione in Big Endian e Little Endian Soluzione usata dai socket: network byte order (Big Endian) Due

Dettagli

funzione fork() La funzione fork è usata per duplicare un processo. #include <unistd.h> pid_t fork (void);

funzione fork() La funzione fork è usata per duplicare un processo. #include <unistd.h> pid_t fork (void); La funzione fork è usata per duplicare un processo. #include pid_t fork (void); funzione fork() restituisce -1 in caso di errore. Se tutto va a buon fine restituisce 0 nel processo figlio ed

Dettagli

P3-04: I/O multiplexing

P3-04: I/O multiplexing Autunno 2002 Prof. Roberto De Prisco -04: I/O multiplexing Università degli studi di alerno Laurea e Diploma in Informatica Problema 04.2 Un programma deve gestire due input simultaneamente tandard input

Dettagli

Gestione dei segnali. Dott. Delfina Malandrino. p//ssd s / d

Gestione dei segnali. Dott. Delfina Malandrino.  p//ssd s / d a.a 2007/2008 Gestone de segnal delmal@da.unsa.t http://ss.da.unsa.t/~delmal p//ssd s / d Dpartmento d Informatca ed Applcazon R.M. Capocell Unverstà degl Stud d Salerno Gestone de segnal I segnal sono

Dettagli

Server Ricorsivii i. Dott. Delfina Malandrino.

Server Ricorsivii i. Dott. Delfina Malandrino. A.A. 2007/2008 Rcorsv delmal@da.unsa.t http://ss.da.unsa.t/~delmal Dpartmento d Informatca ed Applcazon R.M. Capocell Unverstà degl Stud d Salerno Iteratv Un server teratvo gestsce una sngola connessone

Dettagli

Parametri valore-risultatorisultato

Parametri valore-risultatorisultato Formato dei dati Programmazione di applicazioni di rete con socket - parte 2 La comunicazione deve tener conto della diversa rappresentazione dei dati Rappresentazione in Big Endian e Little Endian Soluzione

Dettagli

Programmazione di applicazioni di rete con socket - parte 2

Programmazione di applicazioni di rete con socket - parte 2 Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Programmazione di applicazioni di rete con socket - parte 2 Corso di Sistemi Distribuiti Valeria Cardellini Anno accademico 2008/09 Formato

Dettagli

Laboratorio di Reti di Calcolatori

Laboratorio di Reti di Calcolatori Laboratorio di Reti di Calcolatori Socket UDP. Paolo D Arco Abstract Scopo della lezione è descrivere le funzioni che l interfaccia dei socket offre per far interagire client e server attraverso il protocollo

Dettagli

Signalling (IPC) Signalling (segnalazione)

Signalling (IPC) Signalling (segnalazione) Signalling (IPC) Signalling (segnalazione) è un particolare tipo di Inter-Process Communications che permettere di sincronizzare dei processi spedendo e ricevendo dei messaggi minimali che informano dell'accadimento

Dettagli

PRATICA - Lezione 1. Autunno PRATICA (Lez. 1)

PRATICA - Lezione 1. Autunno PRATICA (Lez. 1) PRATICA - Lezione! " # $ &%' ( "*)+,.-/ * "* )+ 2 3547698:47;!

Dettagli

Progettazione di un client TCP. Progettazione di un server TCP. Esempio: daytime TCP. Client TCP daytime

Progettazione di un client TCP. Progettazione di un server TCP. Esempio: daytime TCP. Client TCP daytime Progettazione di un client TCP Progettazione di un server TCP Passi per la progettazione di un client TCP 1. Creazione di un endpoint Richiesta al sistema operativo 2. Creazione della connessione Implementazione

Dettagli

Esercitazione [7] Client/Server con Socket

Esercitazione [7] Client/Server con Socket Esercitazione [7] Client/Server con Socket Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Federico Lombardi - lombardi@dis.uniroma1.it Sistemi di Calcolo - Secondo

Dettagli

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto fork() & exec() Roberto Perdisci A.A. 2004/2005 1 Dettagli

Dettagli

funzione close() La funzione close è utilizzata normalmente per chiudere un descrittore di file, è utilizzata per chiudere un socket e terminare una

funzione close() La funzione close è utilizzata normalmente per chiudere un descrittore di file, è utilizzata per chiudere un socket e terminare una funzione close() La funzione close è utilizzata normalmente per chiudere un descrittore di file, è utilizzata per chiudere un socket e terminare una connessione TCP. int close (int socketfd); restituisce

Dettagli

Laboratorio di. Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica A.A. 2016/2017. Ing. Niccolò Iardella

Laboratorio di. Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica A.A. 2016/2017. Ing. Niccolò Iardella Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2016/2017 Ing. Niccolò Iardella niccolo.iardella@unifi.it 1 Esercitazione 5 Programmazione con i socket Parte 2

Dettagli

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni Anno Accademico 2011/2012 Segnali: Interrupt software per la gestione di eventi asincroni Concetto di segnale Un segnale è un interrupt software Un segnale può essere generato da un processo utente o dal

Dettagli

Timeout. Socket Avanzati. Funzione alarm() Client echo UDP con alarm

Timeout. Socket Avanzati. Funzione alarm() Client echo UDP con alarm I semestre 02/03 Socket Avanzati Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Timeout Abbiamo visto

Dettagli

Introduzione ai socket

Introduzione ai socket Introduzione ai socket Socket locali Contiene lucidi tratti da: 2006-2007 Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II), 2004-2005 Walter Crescenzi(Universita di Roma

Dettagli

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi SISTEMI OPERATIVI Processi in Linux 2 Creazione di processi concorrenti» La creazione di un processo figlio consente di far eseguire alcune funzionalità del programma in modo concorrente» Opzione 1 il

Dettagli

Sistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I

Sistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I Marzo-Giugno 2011 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi

Dettagli

Interazione con il DNS Conversioni di Nomi ed Indirizzi

Interazione con il DNS Conversioni di Nomi ed Indirizzi a.a. 2003/04 Interazione con il DNS Conversioni di Nomi ed Indirizzi Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in

Dettagli

Controllo dei Processi 1

Controllo dei Processi 1 Controllo dei Processi 1 I processi Nei sistemi Unix/Linux ogni processo ne può generare altri. Il processo che li genera è detto processo padre (parent process), mentre i processi generati sono detti

Dettagli

LABORATORIO di Reti di Calcolatori

LABORATORIO di Reti di Calcolatori LABORATORIO di Reti di Calcolatori Socket in linguaggio C: protocollo connection-oriented 1 of 15 v slide della docente Bibliografia v testo di supporto: D. Maggiorini, Introduzione alla programmazione

Dettagli

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 modulo 3

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 modulo 3 Marzo-Giugno 2008 Matricole congrue 0 modulo 3 Segnali: Interrupt software per la gestione di eventi asincroni Concetto di segnale Un segnale è un interrupt software Un segnale può essere generato da un

Dettagli

Sviluppo di Applicazioni su Rete. Introduzione all API socket di Berkeley. Interazione tra Processi. Modello Client-Server

Sviluppo di Applicazioni su Rete. Introduzione all API socket di Berkeley. Interazione tra Processi. Modello Client-Server a.a. 2003/04 Introduzione all API socket di Berkeley Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 17 febbraio 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Sistemi Operativi Teledidattico

Sistemi Operativi Teledidattico Sistemi Operativi Teledidattico Anno 2002 3a esercitazione 5/10/2002 Paolo Torroni processi fork (creazione di un figlio) exec (sostituzione di codice del programma in esecuzione) wait (attesa della terminazione

Dettagli

LINUX: struttura generale

LINUX: struttura generale LINUX: struttura generale User Interface The layers of a UNIX system. 1 Processi in LINUX Ogni processo nasce con un solo thread Un processo gira in modalità utente; quando effettua una system call passa

Dettagli

Esercitazione [6] Client/Server con Socket

Esercitazione [6] Client/Server con Socket Esercitazione [6] Client/Server con Socket Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di

Dettagli

Sincronizzazione tra processi in Unix: i segnali

Sincronizzazione tra processi in Unix: i segnali Sincronizzazione tra processi in Unix: i segnali 1 Sincronizzazione tra processi I processi interagenti possono avere bisogno di sincronizzazione. Unix: non c è condivisione di variabili tra processi:

Dettagli

Esempio 1: stampa locale di file remoto

Esempio 1: stampa locale di file remoto Alcuni esempi di uso di Socket Esempio 1: stampa locale di file remoto Visualizzazione locale del contenuto di un file remoto. Il client deve richiedere la creazione della connessione e successivamente

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 6 Martedì 24-10-2017 1 Sostituzione del codice Tipicamente, dopo una

Dettagli

Esercitazione [7] Server multi-process/multi-thread

Esercitazione [7] Server multi-process/multi-thread Esercitazione [7] Server multi-process/multi-thread Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 7 settembre 2016 (Traccia A) Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine

Dettagli

Sincronizzazione tra processi UNIX: i segnali. Sincronizzazione tra processi

Sincronizzazione tra processi UNIX: i segnali. Sincronizzazione tra processi Sincronizzazione tra processi UNIX: i segnali Sincronizzazione tra processi Processi interagenti possono avere bisogno di meccanismi di sincronizzazione Ad esempio, abbiamo appena visto il caso di processi

Dettagli

Laboratorio reti AA 2006/2007. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Laboratorio reti AA 2006/2007. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione Laboratorio reti AA 2006/2007 Dott. Matteo Roffilli roffilli@csr.unibo.it Ricevimento in ufficio dopo la lezione 1 Laboratorio reti AA 2006/2007 Per esercitarvi fate SSH su: alfa.csr.unibo.it si-tux00.csr.unibo.it.

Dettagli

Programmazione di sistema in Linux: System Call per i Segnali. E. Mumolo

Programmazione di sistema in Linux: System Call per i Segnali. E. Mumolo Programmazione di sistema in Linux: System Call per i Segnali E. Mumolo Eventi asincroni: segnali I segnali permettono la gestione di eventi asincroni che interrompono il normale funzionamento di un processo

Dettagli

System Call EXEC EXEC P P. fork exec(new_prog) fork. sono_il_padre = fork(); if (!sono_il_padre) {

System Call EXEC EXEC P P. fork exec(new_prog) fork. sono_il_padre = fork(); if (!sono_il_padre) { System Call EXEC EXEC L effetto delle system call della famiglia exec consiste nel mandare in esecuzione: (1) un programma contenuto in un file eseguibile oppure un (2) interprete di programmi P fork P

Dettagli

Programmazione di applicazioni di rete con socket - parte 1

Programmazione di applicazioni di rete con socket - parte 1 Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Programmazione di applicazioni di rete con socket - parte 1 Corso di Sistemi Distribuiti Valeria Cardellini Anno accademico 2008/09 Applicazioni

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 1 febbraio 2016 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Socket II MIDLAB. Sirio Scipioni. M I D L A B.

Socket II MIDLAB. Sirio Scipioni.  M I D L A B. Socket II Sirio Scipioni scipioni@dis.uniroma1.it http://www.dis.uniroma1.it/~scipioni MIDLAB http://www.dis.uniroma1.it/~midlab Sommario Richiami sui processi Echo server TCP (multi processo) Richiami

Dettagli

Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo

Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo www.dis.uniroma1.it/~midlab Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo Corso di Laurea in Ingegneria Informatica e Automatica A.A. 2014-2015 Prof. Roberto

Dettagli

Sincronizzazione tra processi. Sincronizzazione tra processi. segnali. Segnali UNIX

Sincronizzazione tra processi. Sincronizzazione tra processi. segnali. Segnali UNIX Sincronizzazione tra processi Sincronizzazione tra processi UNIX: i segnali Processi interagenti possono avere bisogno di meccanismi di sincronizzazione Ad esempio, abbiamo appena visto il caso di processi

Dettagli

Segnali. Tecnica di comunicazione asincrona tra processi. Si può solo inviare uno tra un insieme fissato di segnali

Segnali. Tecnica di comunicazione asincrona tra processi. Si può solo inviare uno tra un insieme fissato di segnali Segnali ed allarmi Segnali Tecnica di comunicazione asincrona tra processi Si può solo inviare uno tra un insieme fissato di segnali Il destinatario viene interrotto, e si salta ad una procedura specifica

Dettagli

Sincronizzazione tra processi in Unix: : i segnali. Sistemi Operativi T AA

Sincronizzazione tra processi in Unix: : i segnali. Sistemi Operativi T AA Sincronizzazione tra processi in Unix: : i segnali Sistemi Operativi T AA 2009-2010 1 Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sull'ordine di esecuzione delle operazioni

Dettagli

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione Laboratorio reti AA 2007/2008 Dott. Matteo Roffilli roffilli@csr.unibo.it Ricevimento in ufficio dopo la lezione 1 Laboratorio reti AA 2007/2008 Per esercitarvi fate SSH su: alfa.csr.unibo.it si-tux00.csr.unibo.it.

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Processi in Unix/Linux caratteristiche

Dettagli

Sincronizzazione tra processi! in Unix: i segnali!

Sincronizzazione tra processi! in Unix: i segnali! Sincronizzazione tra processi! in Unix: i segnali! 1 Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sull'ordine di esecuzione delle operazioni dei processi interagenti. Unix

Dettagli

Reti di Calcolatori - Laboratorio. Lezione 5. Gennaro Oliva

Reti di Calcolatori - Laboratorio. Lezione 5. Gennaro Oliva Reti di Calcolatori - Laboratorio Lezione 5 Gennaro Oliva Server basato su I/O Multiplex Per realizzare un server è possibile utilizzare l'i/o Multiplex Un unico processo iterativo gestisce il socket che

Dettagli

Laboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Laboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione Laboratorio reti AA 2008/2009 Dott. Matteo Roffilli roffilli@csr.unibo.it Ricevimento in ufficio dopo la lezione 1 Laboratorio reti AA 2008/2009 Per esercitarvi fate SSH su: alfa.csr.unibo.it si-tux00.csr.unibo.it.

Dettagli

" &$ () " ) ) $ ' () *) " ) $

 &$ ()  ) ) $ ' () *)  ) $ %&! "# $ #include int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d]: %s\n", i, argv[i] ); 1 2 " &$ cc cc program.c a.out pippo pluto topolino argv[0]: a.out

Dettagli

Sincronizzazione tra processi in Unix: i segnali

Sincronizzazione tra processi in Unix: i segnali Sincronizzazione tra processi in Unix: i segnali Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sull'ordine di esecuzione delle operazioni dei processi interagenti. Unix

Dettagli

Socket TCP. seconda parte

Socket TCP. seconda parte Socket TCP seconda parte Schema della connessione Computer 1 127.43.18.1 indirizzo I1 indirizzo I2 Computer 2 143.225.5.3 porta 45000 socket porta 5200 socket processo client processo server socket(...)

Dettagli

request reply richiesta client processo di servizio processo server principale From - Valeria Cardellini, Corso Sist. Distr. A.A.

request reply richiesta client processo di servizio processo server principale From - Valeria Cardellini, Corso Sist. Distr. A.A. Applicazioni di rete Forniscono i servizi di alto livello utilizzati dagli utenti Determinano la percezione di qualità del servizio (QoS) che gli utenti hanno della rete sottostante Programmazione di applicazioni

Dettagli

Timeout. Socket Avanzati. Client echo UDP con alarm. Funzione alarm()

Timeout. Socket Avanzati. Client echo UDP con alarm. Funzione alarm() Università degli studi di Salerno Laurea in Informatica a.a. 2003/04 Socket Avanzati Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ 1 Timeout Abbiamo visto molte

Dettagli

Esercitazione [09] Approfondimento su Letture e Scritture con Descrittori

Esercitazione [09] Approfondimento su Letture e Scritture con Descrittori Esercitazione [09] Approfondimento su Letture e Scritture con Descrittori Leonardo Aniello aniello@dis.uniroma1.it Daniele Cono D'Elia delia@dis.uniroma1.it Giuseppe Laurenza laurenza@dis.uniroma1.it Federico

Dettagli

Esempio 1: stampa locale di file remoto

Esempio 1: stampa locale di file remoto Alcuni esempi di uso di Socket Esempio 1: stampa locale di file remoto Visualizzazione locale del contenuto di un file remoto. Il client deve richiedere la creazione della connessione e successivamente

Dettagli

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione Laboratorio reti AA 2007/2008 Dott. Matteo Roffilli roffilli@csr.unibo.it Ricevimento in ufficio dopo la lezione 1 Laboratorio reti AA 2007/2008 Per esercitarvi fate SSH su: alfa.csr.unibo.it si-tux00.csr.unibo.it.

Dettagli

Esercitazione [08] Server multi-process/multi-thread

Esercitazione [08] Server multi-process/multi-thread Esercitazione [08] Server multi-process/multi-thread Leonardo Aniello aniello@dis.uniroma1.it Daniele Cono D'Elia delia@dis.uniroma1.it Giuseppe Laurenza laurenza@dis.uniroma1.it Federico Lombardi lombardi@dis.uniroma1.it

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi primavera 2009 Controllo dei processi (2) Funzioni wait e waitpid quando un processo termina il kernel manda al padre il segnale SIGCHLD il padre può ignorare il segnale (default) oppure lanciare una funzione

Dettagli

Corso di Programmazione Concorrente Processi. Valter Crescenzi

Corso di Programmazione Concorrente Processi. Valter Crescenzi Corso di Programmazione Concorrente Processi Valter Crescenzi http://crescenzi.inf.uniroma3.it Sommario Processi vs Thread Creazione e terminazione di processi chiamata di sistema fork() chiamata di sistema

Dettagli

Esempi di Client e Server

Esempi di Client e Server Esempi di Client e Server Corso di laurea in Informatica Laboratorio di Reti di Calcolatori A.A. 0-0 Simone Bassis bassis@di.unimi.it #include #include #include #include

Dettagli

Corso di Reti di Calcolatori T

Corso di Reti di Calcolatori T Università degli Studi di Bologna Scuola di Ingegneria Corso di Reti di Calcolatori T Esercitazione 3 (svolta) Socket C senza e con connessione Luca Foschini Anno accademico 2017/2018 Esercitazione 3 1

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 3 (svolta) Socket C senza e con connessione Luca Foschini Anno accademico 2009/2010 Esercitazione

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2018-2019 Pietro Frasca Lezione 5 Martedì 16-10-2018 Operazioni sui processi Nella maggior parte dei

Dettagli

Laboratorio di Reti di Calcolatori

Laboratorio di Reti di Calcolatori Laboratorio di Reti di Calcolatori I/O Multiplexing. Paolo D Arco Abstract copo della lezione è presentare i vari modelli di I/O, descrivere la funzione select(), e costruire un echo client robusto ed

Dettagli

I/O su Socket TCP: read()

I/O su Socket TCP: read() I/O su Socket TCP: read() I socket TCP, una volta che la connessione TCP sia stata instaurata, sono accedibili come se fossero dei file, mediante un descrittore di file (un intero) ottenuto tramite una

Dettagli

Introduzione. Prof. Roberto De Prisco. Telefonini. o almeno. e non rispondere. Università degli studi di Salerno Laurea e Diploma in Informatica

Introduzione. Prof. Roberto De Prisco. Telefonini. o almeno. e non rispondere. Università degli studi di Salerno Laurea e Diploma in Informatica Prof. Roberto De Prisco Introduzione Università degli studi di Salerno Laurea e Diploma in Informatica Telefonini 2 o almeno e non rispondere 1 Presentazione 3 Prof. Roberto De Prisco studio: L1-13 robdep@unisa.it

Dettagli

SCUOLA DI INGEGNERIA DELL INFORMAZIONE. Corso di Piattaforme Software per la rete MODULO 2 Anno Accademico Prof. William FORNACIARI

SCUOLA DI INGEGNERIA DELL INFORMAZIONE. Corso di Piattaforme Software per la rete MODULO 2 Anno Accademico Prof. William FORNACIARI SCUOLA DI INGEGNERIA DELL INFORMAZIONE Corso di Piattaforme Software per la rete MODULO 2 Anno Accademico 2016-2017 Prof. William FORNACIARI SOLUZIONE D1 D2 D3 TOT Laureando SI NO NOTE PER LO SVOLGIMENTO

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Processi in Unix/Linux (parte II)

Dettagli

API Socket di Berkeley

API Socket di Berkeley Laboratorio Reti di Calcolatori (A.A. 2008-2009) Programmazione di rete ed interfaccia API socket di Berkeley Delfina Malandrino delmal@dia.unisa.it http://www.dia.unisa.it/professori/delmal/ API Socket

Dettagli

POSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it

POSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it POSIX - Gestione dei Segnali E.Mumolo, DEEI mumolo@units.it Segnali in POSIX Segnali in Posix Modalità di notifiche relative a vari eventi asincroni I signal interrompono un processo e possono o meno essere

Dettagli

Laboratorio di Sistemi Operativi primavera 2009

Laboratorio di Sistemi Operativi primavera 2009 primavera 2009 Forme di comunicazione tra processi La comunicazione tra processi può avvenire: Le pipe Passando dei files aperti tramite fork Attraverso il filesystem Utilizzando le pipes Utilizzando le

Dettagli

P3-05: Socket Options

P3-05: Socket Options Autunno 2002 Prof. Roberto De Prisco -05: Socket Options Università degli studi di Salerno Laurea e Diploma in Informatica Socket options 05.2 Ogni socket aperto ha delle proprietà che ne determinano alcuni

Dettagli

Reti di Calcolatori. Saper scrivere semplici programmi per la comunicazione su una rete di calcolatori. Assunzione. Ambiente di sviluppo LABORATORIO

Reti di Calcolatori. Saper scrivere semplici programmi per la comunicazione su una rete di calcolatori. Assunzione. Ambiente di sviluppo LABORATORIO Obiettivo 2 orso di laurea in Informatica Reti di alcolatori A.A. 2007-2008 Prof. Roberto De Prisco aper scrivere semplici programmi per la comunicazione su una rete di calcolatori Assunzione apete già

Dettagli

Gestione dei processi

Gestione dei processi Gestione dei processi Dormire unsigned int sleep(unsigned int); Attende un numero specificato di secondi a meno che non si verifichi un segnale Restituisce 0 se l'attesa è terminata senza interruzioni,

Dettagli

*HVWLRQHDYDQ]DWDGHOOH6RFNHWLQ& ODSULPLWLYDVHOHFW

*HVWLRQHDYDQ]DWDGHOOH6RFNHWLQ& ODSULPLWLYDVHOHFW *HVWLRQHDYDQ]DWDGHOOH6RFNHWLQ& ODSULPLWLYDVHOHFW 7&3H8'3&OLHQW6HUYHUXVDQGRVHOHFW Si progetti un applicazione distribuita Client/Server per una rete di workstation UNIX (BSD oppure System V). In particolare,

Dettagli

Processi - II. Franco Maria Nardini

Processi - II. Franco Maria Nardini Processi - II Franco Maria Nardini Processi Programmi in esecuzione in memoria sono chiamati processi. Caricati in memoria da una delle sei funzioni exec(3). Ogni processo ha un identificatore univoco

Dettagli

I segnali. First the signals described in the original POSIX standard.

I segnali. First the signals described in the original POSIX standard. I segnali Prof.ssa Sara Michelangeli I segnali sono interruzioni inviate ai processi dal kernel, da un altro processo utente, oppure da un processo a se' stesso. Possono essere utilizzati dal sistema operativo

Dettagli

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 18 Segnali

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 18 Segnali Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 18 Segnali I lucidi di seguito riportati sono distribuiti nei termini della licenza Creative Commons Attribuzione/Condividi allo stesso

Dettagli

Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI mumolo@units.it

Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI mumolo@units.it Chiamate di sistema per la Gestione dei processi in POSIX E.Mumolo, DEEI mumolo@units.it Process id ed altri identificatori pid_t getpid(); // Process id del processo chiamante pid_t getppid(); // Process

Dettagli