Esercitazione [8] Pipe e FIFO



Documenti analoghi
Esercitazione [6] Client/Server con Socket

Esercitazione [5] Input/Output su Socket

Laboratorio di Sistemi Operativi

rsystem Maximiliano Marchesi

Esercitazione [7] Client/Server con Socket

Programmazione dei socket con TCP #2

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

Files, File I/O, File Sharing. Franco Maria Nardini

I puntatori e l allocazione dinamica di memoria

Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.

I Socket. Laboratorio Software M. Grotto R. Farina

Telematica II 17. Esercitazione/Laboratorio 6

I/O su Socket TCP: read()

Telematica II 12. Esercitazione/Laboratorio 4

Inter Process Communication. Laboratorio Software C. Brandolese

Sistemi Operativi: Programmazione di Sistema

Laboratorio di Sistemi Operativi

Esercizio 2. Client e server comunicano attraverso socket TCP

IPC System V. Code di messaggi

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3

Esercitazione [11] Riepilogo sui Semafori. Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo

Allocazione dinamica della memoria - riepilogo

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-

Socket TCP. seconda parte

Sistemi Operativi (modulo di Informatica II)

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

Altri tipi di connessione

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

I M P O S T A R E U N A C C O U N T D I P O S T A C O N M O Z I L L A T H U N D E R B I R D

Socket & RMI Ingegneria del Software - San Pietro

Corso di Laboratorio di Sistemi Operativi

ESERCITAZIONE PREPARAZIONE ALL ESAME INGEGNERIA DEL SOFTWARE

Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-

Guida di Opzioni Fiery 1.3 (client)

Nuovo Order Manager per il software NobelProcera

HTTP adaptation layer per generico protocollo di scambio dati

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

SISTEMI OPERATIVI DISTRIBUITI

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

Introduzione al Linguaggio C

Introduzione alle applicazioni di rete

Cenni di programmazione distribuita in C++ Mauro Piccolo

IBM Lotus Notes Guida per utenti

Sistemi Mobili e Wireless Android - Servizi

Modulo Antivirus per Petra 3.3. Guida Utente

Corso di Laboratorio di Sistemi Operativi

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

01/05/2013 Istruzioni per l installazione

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

MANUALE UTENTE Fiscali Free

Z3 B1 Message Addon Invio Massivo Documenti via e Fax per SAP Business One

Drivers. Introduzione Tipologie Struttura Interazione con il kernel

CAP.8: Il file system

Inizializzazione degli Host. BOOTP e DHCP

UML - Unified Modeling Language

Sistemi operativi basati sul web

Corso di Laurea in Informatica, A.A

PIANO DI LAVORO A.S. 2015/16

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

INTERNET e RETI di CALCOLATORI A.A. 2011/2012 Capitolo 4 DHCP Dynamic Host Configuration Protocol Fausto Marcantoni fausto.marcantoni@unicam.

Corso basi di dati Installazione e gestione di PWS

FONDAMENTI di INFORMATICA L. Mezzalira

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

dall argomento argomento della malloc()

IPC Inter Process Communication

La sincronizzazione è legata alla implementazione delle pipe: int pipe(int fd[2]);

Lezione 1 Introduzione

Il Web Server e il protocollo HTTP

GUIDA AL PRONTUARIO MOBILE

Transcript:

Esercitazione [8] Pipe e FIFO Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it 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

Sommario Soluzione esercizio su EchoServer multi-thread Obiettivi dell esercitazione Pipe Esercizio: Logger Named pipe (FIFO) Esercizio: EchoProcess su FIFO

Soluzione Esercizio su EchoServer multi-thread Esercizio: completare l EchoServer in modalità multi-thread Soluzione o La struct handler_args_t richiede: Un campo int per il descrittore della socket Un campo struct sockaddr_in* per i dati di rete del client o In connection_handler(), va fatta la free della struct handler_args_t Era stata allocata nel main thread tramite malloc() Va prima fatta la free della struttura dati con le info sul client, allocata anch essa nel main thread tramite calloc() o Creazione thread per gestione connessione Assegnare valori alla struct handler_args_t pthread_create() con gestione errori pthread_detach() Preparare la memoria per le info sul client per la connessione successiva

Obiettivi Esercitazione [8] Implementare comunicazione inter-processo tramite pipe o Usando pipe semplici tra processi «relazionati» o Usando FIFO tra processi non «relazionati»

Riepilogo sulle pipe Meccanismo di comunicazione inter-processo Canale di comunicazione unidirezionale int pipe(int fd[2]) o fd[0] descrittore di lettura o fd[1] descrittore di scrittura o ritorna 0 in caso di successo, -1 altrimenti Chiamate a read() su pipe ritornano 0 quando tutti i descrittori di scrittura sono stati chiusi Chiamate a write() su pipe causano SIGPIPE («broken pipe») quando tutti i descrittori di lettura sono stati chiusi

Esercizio: Logger Un logger è un componente software che scrive su un file tutta una serie di informazioni rilevanti per l applicazione o Usato in genere per il monitoring delle applicazioni server o Fornisce dati su eventuali problemi occorsi a runtime Scenario o EchoServer multi-thread o Il server istanzia un processo figlio (il Logger) Il Logger riceve dati via pipe dal padre Li scrive sul log file (aperto in append mode) Il padre reindirizza il proprio canale stderr su questa pipe Risultato: ogni messaggio scritto dal padre su stderr viene «trasferito» via pipe al Logger e quindi scritto sul log file

Esercizio: Logger Come reindirizzare un canale? Funzione dup: int dup(int fd) o Effettua una copia del descrittore fd usando il primo descrittore inutilizzato (quello con valore minimo in tabella!) o Ritorna il nuovo descrittore in caso di successo, -1 altrimenti Funzione dup2: int dup2(int oldfd, int newfd) o Come dup() ma, invece di usare il descrittore inutilizzato avente valore minimo, usa newfd o Se newfd esiste ed è aperto, viene prima chiuso Un canale fd1 è reindirizzato su fd2 invocando dup2(fd2, fd1) o fd1 diventa un alias di fd2 Read/write sul «vecchio» descriptor fd1 sono reindirizzate su fd2

Esercizio: Logger Processi in gioco Processo Logger (figlio di EchoServer) scritture in append comunicazione via pipe Server side Processo EchoServer Multi-thread comunicazione via socket File di log Processo Processo Processo Client Client Client Esercizio: completare il codice lato server (EchoServer e Logger)

Riepilogo sulle named pipe (FIFO) Simili alle pipe, consentono tuttavia comunicazione tra processi non «relazionati» (nessun legame padre-figlio via fork) Una FIFO è un file speciale per comunicazione unidirezionale Creazione: int mkfifo(const char *path, mode_t mode) o path: nome della FIFO (non in uso da altri file) o mode: permessi da associare alla FIFO (es. 0666) o Ritorna 0 in caso di successo, -1 altrimenti Apertura: int open(const char *path, int oflag) o Nome FIFO e modalità di apertura (O_RDONLY, O_WRONLY, etc) o Ritorna il descrittore della FIFO, -1 altrimenti Chiusura: int close(int fd) Rimozione: int unlink(const char *path)

Esercizio: EchoProcess su FIFO Il server prepara (crea) due FIFO o fifo_echo per inviare messaggi al client o fifo_client per ricevere messaggi dal client La comunicazione client-server avviene tramite queste due FIFO Esercizio: completare il codice del client e del server fifo_client EchoProcess Client fifo_echo