La Comunicazione tra Processi in Unix

Documenti analoghi
Interazione, sincronizzazione e comunicazione tra processi

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)

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

Esercizio sulla gestione di file in Unix

Interazione fra processi: meccanismi di sincronizzazione e comunicazione

Sistemi Operativi Teledidattico

Chiamate di sistema. Pipe Flussi di I/O

Interazione tra Processi. Sistemi Operativi T AA

Sistemi Operativi T. Esercizi

System call per la gestione di processi

SC per Inter Process Comminication. Pipe senza nome e con nome (FIFO)

Interazione tra Processi. Sistemi Operativi T AA

SC per Inter Process Communication. Pipe senza nome e con nome (FIFO)

Processi. Comunicazione tra processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

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

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

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

Igino Corona

I Processi nel SO UNIX

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

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

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

Il processo figlio : utilizza lo stesso codice che sta eseguendo il padre ;

I Processi nel Sistema Operativo Unix

Directory. Le directory unix sono file.

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

SmallShell Piccolo processore comandi

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

Program m azione di Sistem a 5

Laboratorio di Sistemi Operativi

Sistemi operativi Modulo II I semafori 2 Select

eseguire comandi dati dall'utente, utilizzando una macchina reale, di livello inferiore,

Sistemi Operativi L-A. Esercizi 14 Giugno Esercizio monitor

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3

Sistemi Operativi (M. Cesati)

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX

Gestione dei processi

Processi in UNIX. Spazio di sistema (residente) Tabella dei. file APERTI OPEN FILE. Tabella dei codici

Principles of Concurrent Programming

Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi

Pipes e named pipes: 1. Nozioni preliminari 2. Pipes e named pipes (FIFO) in sistemi UNIX 3. Pipes e named pipes sistemi Windows

Inter Process Communication. Laboratorio Software C. Brandolese

Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi

Principles of Concurrent Programming

Capitolo 5 -- Stevens

Per operare su un file abbiamo bisogno di aprirlo, scriverlo, leggerlo, chiuderlo:

Introduzione ai socket

System calls. permettono ai programmi utente di richiedere servizi al Sistema Operativo. servizi come scrittura di file, stampa su video, ecc.

Sincronizzazione tra processi UNIX: i segnali. Sincronizzazione tra processi

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI

file fisico file logico

Pipe con nome. [Pagina intenzionalmente vuota] 1: Pipe con nome ( ) slide 1:1/22 (p.1)

Corso di Laboratorio di Sistemi Operativi

Sistemi Operativi. 7 Gestione dei processi in Unix

Esercizi di Verifica Aprile 2005 Università disalerno

File binari e file di testo

POSIX Systems Programming. geek evening 0x0d. ambienti POSIX. By lord_dex ZEI e Salug! presentano:

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

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012

Operazioni su file di caratteri

PIPE. M. Guarracino - PIPE 1

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3. 1 strace : visualizzazione delle system call invocate da un processo

Controllo dei Processi 1

Sommario. Manipolazione sequenziale di file in C Funzioni di base per I/O di file

Programmazione di sistema in UNIX. Immagine di un processo in UNIX. Area dati. File comandi utente

Crea un nuovo processo. Al processo padre ritorna il PID del figlio. Al processo figlio ritorna 0

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

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

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

I files in C. A cura del prof. Ghezzi

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

I/O su Socket TCP: read()

Sincronizzazione tra processi in Unix: i segnali

UNIX file system: organizzazione logica. Il File System di UNIX. UNIX file system: organizzazione fisica

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3

I SISTEMI OPERATIVI (1)

I File. Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa.

ESERCIZI RISOLTI IN C LANGUAGE (programmazione avanzata)

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

INTERPROCESS COMMUNICATION 27

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3

Scrittura formattata - printf

Comandi. Sistema Operativo

File e puntatori a file

C: panoramica. Violetta Lonati

Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. Esempio:

Esercitazione di Lab. di Sistemi Operativi a.a. 2012/ I processi Unix -

8. IL FILE SYSTEM. 1. I servizi per la gestione dei file

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

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

Corso di Sistemi Operativi Programmazione di Sistema e Concorrente

Argomenti della lezione. Messaggi. Formato di un messaggio. Corso di Sistemi Operativi Programmazione di Sistema e Concorrente

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale

File I/O. M. R. Guarracino: File I/O 1

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

CREAZIONE PROCESSI IN UNIX 20

Transcript:

La Comunicazione tra Processi in Unix La è un canale di comunicazione tra processi: unidirezionale: accessibile ad un estremo in lettura ed all'altro in scrittura molti-a-molti: più processi possono spedire messaggi attraverso la stessa p i p e più processi possono ricevere messaggi attraverso la stessa p i p e capacità limitata: la è in grado di gestire l accodamento di un numero limitato di messaggi, gestiti in modo FIFO: il limite è stabilito dalla dimensione della (es.4096 bytes). Sistemi Operativi A - Comunicazione tra Processi Unix 3 Interazione tra processi Unix I processi Unix non possono condividere memoria (modello ad ambiente locale) L interazione tra processi può avvenire: mediante la condivisione di file: complessità : realizzazione della sincronizzazione tra i processi. attraverso specifici strumenti di Inter Process Communication: per la comunicazione tra processi sulla stessa macchina : (tra processi della stessa gerarchia) fifo (qualunque insieme di processi) per la comunicazione tra processi in nodi diversi della stessa rete : socket Sistemi Operativi A - Comunicazione tra Processi Unix 2 D0 D1 Comunicazione attraverso Mediante la, la comunicazione tra processi è indiretta (senza naming esplicito): mailbox D2 Lato di lettura receive(,..) (mailbox) send(,..) Lato di scrittura Sistemi Operativi A - Comunicazione tra Processi Unix 4 M0 M3 M1 M2 1

Pipe: unidirezionalità/bidirezionalità Uno stesso processo può: sia depositare messaggi nella (send), mediante il lato di scrittura che prelevare messaggi dalla (receive), mediante il lato di lettura P Se (fd) ha successo: Creazione di una vengono allocati due nuovi elementi nella tabella dei file aperti del processo e i rispettivi file descriptor vengono assegnati a e : : lato di lettura (receive) della : lato di scrittura (send) della receive(,..) send(,..) Processo la può anche consentire una comunicazione bidirezionale tra i processi P e Q (ma va rigidamente disciplinata!) Q lato di lettura lato di scrittura Sistemi Operativi A - Comunicazione tra Processi Unix 5 Sistemi Operativi A - Comunicazione tra Processi Unix 7 Per creare una : System call int (int fd[2]); fd è il puntatore a un vettore di 2 file descriptor, che verranno inizializzati dalla system call in caso di successo: rappresenta il lato di lettura della è il lato di scrittura della la system call restituisce: un valore negativo, in caso di fallimento 0, se ha successo Omogeneità con i file Ogni lato di accesso alla è visto dal processo in modo omogeneo al file (file descriptor ) : si può accedere alla mediante le system call di accesso a file:read,write: D0 read(,msg,..) read: realizza la receive write: realizza la send M1 write(,msg,..) Sistemi Operativi A - Comunicazione tra Processi Unix 6 Sistemi Operativi A - Comunicazione tra Processi Unix 8 2

Sincronizzazione dei processi comunicanti Il canale (la ) ha capacità limitata: come nel caso di produttore/consumatore è necessario sincronizzare i processi: se la è vuota: un processo che legge si blocca se la è piena: un processo che scrive si blocca Sincronizzazione automatica: read e write da/verso possono essere sospensive! Sistemi Operativi A - Comunicazione tra Processi Unix 9 Esempio: comunicazione tra padre e figlio main() {int pid; char msg[]= ciao babbo ; int fd[2]; (fd); pid=fork(); if (pid==0) {/* figlio */ write(, msg, 10);... else /* padre */ read(, msg, 10);... Padre: destinatario Figlio: mittente Ogni processo chiude il lato della che non usa. Sistemi Operativi A - Comunicazione tra Processi Unix 1 1 Quali processi possono comunicare mediante? Per mittente e destinatario il riferimento al canale di comunicazione è un file descriptor: Soltanto i processi appartenenti a una stessa gerarchia (cioè, che hanno un antenato in comune) possono scambiarsi messaggi mediante ; ad esempio, possibilità di comunicazione: tra processi fratelli (che ereditano la dal processo padre) tra un processo padre e un processo figlio; tra nonno e nipote etc. Chiusura di Ogni processo può chiudere un estremo della con una close. Un estremo della viene effettivamente chiuso (cioè, la comunicazione non e` p i u ` possibile) quando tutti i processi che ne avevano visibilità hanno compiuto unaclose Se un processo P: tenta una lettura da una il cui lato di scrittura è effettivamente chiuso: read ritorna 0 tenta una scrittura da una il cui lato di lettura è effettivamente chiuso: write ritorna -1, ed il segnale SIGPIPE viene inviato a P (broken ). Sistemi Operativi A - Comunicazione tra Processi Unix 1 0 Sistemi Operativi A - Comunicazione tra Processi Unix 1 2 3

Esempio /* Sintassi: progr N padre(destinatario) e figlio(mittente) si scambiano una sequenza di messaggi di dimensione (DIM) costante; la lunghezza della sequenza non e` nota a priori; il destinatario decide di interrompere la sequenza di scambi di messaggi dopo N secondi */ #include <stdio.h> #include <signal.h> #define DIM 10 Esempio else if (pid>0) /* padre */ { signal(sigalrm, timeout); close(); alarm(n); for(;;) { read(, messaggio, DIM); write(1, messaggio, DIM); /* fine main */ int fd[2]; void fine(int signo); void timeout(int signo); Sistemi Operativi A - Comunicazione tra Processi Unix 1 3 Sistemi Operativi A - Comunicazione tra Processi Unix 1 5 Esempio main(int argc, char **argv) {int pid, N; char messaggio[dim]="ciao ciao "; if (argc!=2) { printf("errore di sintassi\n"); exit(1); N=atoi(argv[1]); (fd); pid=fork(); if (pid==0) /* figlio */ { signal(sigpipe, fine); for(;;) write(, messaggio, DIM); Sistemi Operativi A - Comunicazione tra Processi Unix 1 4 Esempio /* definizione degli handler dei segnali */ void timeout(int signo) { int stato; wait(&stato); if ((char)stato!=0) printf( Term. inv. figlio (segnale %d)\n", (char)stato); else printf( Term. Vol. Figlio (stato %d)\n, stato>>8); exit(0); void fine(int signo) exit(0); Sistemi Operativi A - Comunicazione tra Processi Unix 1 6 4

System calldup Per duplicare un elemento della tabella dei file aperti di processo: int dup(int fd) fd è il file descriptor del file da duplicare L effetto di unadup è copiare l elementofd della tabella dei file aperti nella prima posizione libera (quella con l indice minimo tra quelle disponibili). Restituisce il nuovo file descriptor (del file aperto copiato), oppure -1 (in caso di errore). Dup & piping Mediate la dup si puo` realizzare i l piping di comandi ; ad esempio: $ ls lr grep Jun more Vengono creati 3 processi (u n o per ogni comando), in modo c h e: Lo std. output d ils sia ridiretto nello std. input d igrep Lo std. output d igrep sia ridiretto nello std. input d imore shell ls grep more Sistemi Operativi A - Comunicazione tra Processi Unix 1 7 Sistemi Operativi A - Comunicazione tra Processi Unix 1 9 Esempio: Esempio:mediante mediante la dup è possibile ridirigere stdin e stdout su main() { int pid, fd[2]; char msg[3]= bye ; (fd); pid=fork(); if (!pid) /* processo figlio */ { close(; close(1); dup(); /* ridirigo stdout sulla */ close(); write(1,msg, sizeof(msg)); /*scrivo su */ close(1); else /*processo padre read(, msg, 3); Sistemi Operativi A - Comunicazione tra Processi Unix 1 8 Esempio:piping piping di 2 comandi senza argomenti /* sintassi: programma com1 com2 significa: com1 com2 */ main(int argc, char **argv) { int pid1, pid2, fd[2],i, status; (fd); pid1=fork(); if (!pid1) /* primo processo figlio: com2 */ close(0); dup(); /* ridirigo stdin sulla */ execlp(argv[2], argv[2],(char *)0); exit(-1); Sistemi Operativi A - Comunicazione tra Processi Unix 2 0 5

else /*processo padre { pid2=fork(); if (!pid2) /* secondo figlio: com1 */ { close(1); dup(); close(); execlp(argv[1], argv[1], (char *)0); exit(-1); for (i=0; i<2;i++) { wait(&status); if((char)status!=0) printf( figlio terminato per segnale%d\n, (char)status); exit(0); fifo È una con nome nel file system: canale unidirezionale del tipo first-in-first-out è rappresentata da un file nel file system: persistenza, visibilità potenzialmente globale ha un proprietario, un insieme di diritti ed una lunghezza è creata dalla system call mkfifo è aperta e acceduta con le stesse system call dei file Sistemi Operativi A - Comunicazione tra Processi Unix 2 1 Sistemi Operativi A - Comunicazione tra Processi Unix 2 3 Pipe La ha due svantaggi: consente la comunicazione solo tra processi in relazione di parentela non è persistente: viene distrutta quando terminano tutti i processi che la usano. Per realizzare la comunicazione tra una coppia di processi non appartenenti alla stessa gerarchia? FIFO Creazione di una fifo: mkfifo Per creare una fifo: int mkfifo(char* pathname, int mode); pathname è il nome della fifo mode esprime i permessi Restituisce: 0, in caso di successo un valore negativo, in caso contrario Sistemi Operativi A - Comunicazione tra Processi Unix 2 2 Sistemi Operativi A - Comunicazione tra Processi Unix 2 4 6

Apertura/Chiusura di fifo Una volta creata, una fifo può essere aperta (come tutti i file), mediante unaopen; ad esempio, un processo destinatario di messaggi: int fd; fd=open( myfifo, O_RDONLY); Per chiudere una fifo, si usa la c l o s e: close(fd); Per eliminare una fifo, si usa la unlink: unlink( myfifo ); Sistemi Operativi A - Comunicazione tra Processi Unix 2 5 Accesso a fifo Una volta aperta la fifo può essere acceduta (come tutti i file), medianteread/write; ad esempio, un processo destinatario di messaggi: int fd; char msg[10]; fd=open( myfifo, O_RDONLY); read(fd, msg,10); Sistemi Operativi A - Comunicazione tra Processi Unix 2 6 7