La Comunicazione tra Processi in Unix
|
|
|
- Claudia Basso
- 8 anni fa
- Просмотров:
Транскрипт
1 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
2 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
3 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
4 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
5 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
6 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
7 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
Interazione, sincronizzazione e comunicazione tra processi
Interazione, sincronizzazione e comunicazione tra processi Classificazione Processi interagenti processi interagenti/indipendenti due processi sono indipendenti se l esecuzione di ognuno non è in alcun
Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)
Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC) Le pipe sono canali di comunicazione unidirezionali Limitazione pipe: permettono la comunicazione solo
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. 2016-17 Pietro Frasca Lezione 20 Giovedì 22-12-2016 Comunicazione: pipe In Unix, processi possono comunicare
Esercizio sulla gestione di file in Unix
Esercizio sulla gestione di file in Unix 1 Esercizio Si vuole realizzare un programma C che, utilizzando le system call di Unix, realizzi uno schema di comunicazione tra due processi (padre e figlio) mediante
Sistemi Operativi T. Esercizi
Sistemi Operativi T Esercizi Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione concorrente
System call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
Interazione tra Processi. Sistemi Operativi T AA
Interazione tra Processi Sistemi Operativi T AA 2009-2010 1 Classificazione: Processi interagenti processi interagenti/indipendenti: due processi sono interagenti se l esecuzione di un processo è in alcun
I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.
I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX
ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX Introduzione In questa dispensa sono stati raccolti alcuni esercizi di programmazione C in ambiente Unix, tratti dagli esami di Sistemi Operativi svoltisi
La sincronizzazione è legata alla implementazione delle pipe: int pipe(int fd[2]);
int pipe(int fd[2]); Le pipe sono canali di comunicazione unidirezionali che costituiscono un primo strumento di comunicazione (con diverse limitazioni), basato sullo scambio di messaggi, tra processi
Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-
Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix- 1 Sommario Esercizi sulla gestione dei processi Creazione di un nuovo processo: fork Sincronizzazione tra processi: wait 2 -
I Processi nel Sistema Operativo Unix
I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo
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. 2014-15 Pietro Frasca Lezione 20 Martedì 16-12-2014 1 System call per la gestione dei processi Creazione
Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.
Processi parte III Sincronizzazione e comunicazione tra processi in Unix Segnali: usati per trasferire ad un processo l indicazione che un determinato evento si è verificato. Pipe: struttura dinamica,
Sistemi operativi Modulo II I semafori 2 Select
Il sistema operativo LINUX Semafori 2 Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica La system call read è bloccante Non
Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor
Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione
Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX
Processi UNIX I Processi nel SO UNIX UNIX è un sistema operativo multiprogrammato a divisione di tempo: unità di computazione è il processo Caratteristiche del processo UNIX: processo pesante con codice
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,
Principles of Concurrent Programming
Principles of Giuseppe Anastasi [email protected] Pervasive Computing & Networking Lab. () Dept. of Information Engineering, University of Pisa Overview Concetti preliminari Interazione fra processi
Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi
Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario Processi cooperanti La comunicazione tra processi Necessità
Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese
Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione
Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
Corso di Laboratorio di Sistemi Operativi
Corso di Laboratorio di Sistemi Operativi Lezione 5 Alessandro Dal Palù email: [email protected] web: www.unipr.it/~dalpalu Processi in Unix Approfondimenti: http://gapil.gnulinux.it/download/
File binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
I files in C. A cura del prof. Ghezzi
I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files
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
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
CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3
UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Elettronica-Informatica-Telecomunicazioni a.a. 2001-2002 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3 1 Trasferimento
ESERCIZI RISOLTI IN C LANGUAGE (programmazione avanzata)
ESERCIZI RISOLTI IN C LANGUAGE (programmazione avanzata) 1. Gestione file a basso livello 1) Scrivere un programma che carichi in un file binario, gestito a basso livello, una serie di numeri interi contenuti
Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.
Esame Laboratorio di Sistemi Operativi 2-01-2008 Il compito è costituito da domande chiuse e domande aperte. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 1 ora. Domande chiuse:
INTERPROCESS COMMUNICATION 27
INTERPROCESS COMMUNICATION 27 - Le comunicazioni tra processi (IPC, Intreprocess Communication) sono realizzate mediante strutture dati rese disponibili dal kernel. Sono disponibili 3 tipologie di comunicazioni
Scrittura formattata - printf
Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri
File e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua [email protected] La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
C: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
Esercitazione di Lab. di Sistemi Operativi a.a. 2012/2013. - I processi Unix -
Esercitazione di Lab. di Sistemi Operativi a.a. 2012/2013 - I processi Unix - 1 Sommario Gestione dei processi: Creazione di un nuovo processo: fork Sincronizzazione tra processi: wait Esercizi: fork fork
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
AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema
AXO Architetture dei Calcolatori e Sistema Operativo programmazione di sistema Il sistema operativo Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel
CREAZIONE PROCESSI IN UNIX 20
CREAZIONE PROCESSI IN UNIX 20 STRUTTURE DATI PER PROCESSI Un processo puo' essere in escuzione in 2 modi: kernel e utente. Un processo ha almeno 3 regioni: codice, dati e stack Lo stack è allocato dinamicamente.
