Corso di Sistemi Operativi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Corso di Sistemi Operativi"

Transcript

1 Corso di Sistemi Operativi Comunicazione tra processi (IPC) a.a. 2012/2013 Francesco Fontanella

2 Comunicazione tra processi I processi in esecuzione concorrente possono essere indipendenti o cooperanti. Sono indipendenti se non processi o subirne l'influenza. possono influire su altri Sono cooperanti se influenzano o sono influenzati da altri processi. a.a. 2012/2013 3

3 Comunicazione interprocesso Al fine di consentire lo scambio di dati e informazioni tra processi, il SO deve implementare un meccanismo di comunicazione tra processi (IPC, InterProcess Communication). Esistono due modelli fondamentali di IPC: Memoria condivisa Scambio di messaggi. Entrambi i modelli sono diffusi e spesso sono presenti entrambi. a.a. 2012/2013 4

4 Comunicazione interprocesso messaggi Memoria condivisa a.a. 2012/2013 5

5 Memoria condivisa La condivisione di memoria richiede che: Un processo allochi una zona di memoria condivisa (solitamente nel suo spazio di indirizzamento) Gli altri processi aggiungano tale zona al loro spazio di indirizzamento Ovviamente il SO, solo in questo caso, consente che i processi comunicanti possano accedere alla memoria del processo che ha allocato lo spazio di memoria condivisa. La comunicazione avviene poi tramite scritture e letture dall'area messa in condivisione. La sincronizzazione è a carico dei processi a.a. 2012/2013 6

6 Il problema del Produttore/consumatore esiste un processo produttore (Producer) che genera valori (record, caratteri, oggetti, etc.) e vuole trasferirli a un processo consumatore (Consumer) che prende i valori generati e li consuma la comunicazione avviene attraverso una singola variabile condivisa Bisogna garantire che : Il produttore scriva nuovamente l'area di memoria condivisa prima che il consumatore abbia effettivamente utilizzato il valore precedente Il consumatore non legga due volte lo stesso valore, ma attenda la generazione di un nuovo valore. a.a. 2012/2013 7

7 Produttore/consumatore: soluzione I due processi possono essere messi in comunicazione per mezzo di un buffer di memoria condivisa. Il buffer sarà scritto dal produttore e letto dal consumatore. È possibile pensare a due tipi di buffer: Illimitato: la dimensione del buffer non è limitata, e il produttore non deve preoccuparsi che il consumatore abbia letto i dati inseriti in precedenza. Limitato: il buffer ha dimensioni fissate. Il produttore deve attendere la lettura del buffer da parte del consumatore. a.a. 2012/2013 8

8 Implementazione del buffer limitato È possibile implementare un buffer limitato per mezzo di una array circolare out in in out a.a. 2012/2013 9

9 produttore/consumatore: esempio #define BUFFER_SIZE 10 #define IN 0 #define OUT 1 typedef struct {... } item; item buffer[buffer_size]; int inout[2]; inout[in] = inout[out] = 0; a.a. 2012/

10 Il produttore void producer(item buffer[], int &in, int out) item tmp; } while (true) { /* si produce un item*/.. while (( (in + 1) % BUFFER_SIZE ) == out) ; /* si aspetta che ci sia posto nel buffer*/ buffer[in] = item; in = (in + 1) % BUFFER SIZE; } a.a. 2012/

11 Il consumatore void consumer(item buffer[], int in, int &out) { item tmp while (true) { while (in == out) ; // la coda è vuota: attesa // si estrae l'item tmp = buffer[out]; out = (out + 1) % BUFFER SIZE; } } /* si consuma l'item*/.. a.a. 2012/

12 Memoria condivisa secondo POSIX seg_id = shmget(ipc_private, size, S_IRUSR S_IWUSR) Il primo parametro è un identificatore di segmento. Il valore IPC_PRIVATE specifica che bisogna creare un nuovo segmento. size: dimensioni del segmento. Il terzo parametro specifica la modalità di accesso. S_IRUSR S_IWUSR indica sia lettura che scrittura. Shmget restituisce l'identificatore dell'area allocata. a.a. 2012/

13 Memoria condivisa secondo POSIX I processi che vogliono accedere all'area creata dalla chiamata shmget devono usare la funzione: sh_mem = (char *) shmat (id, NULL, 0) Id èi'identificatore del segmento; Il secondo parametro specifica dove annettere il segmento, se vale NULL decide il SO. Il terzo parametro specifica la modalità di accesso: 0 sola lettura > 0 lettura e scrittura a.a. 2012/

14 Memoria condivisa secondo POSIX Quando non è più necessario accedere ad una zona di memoria condivisa si può usare la funzione: shmdt(sh_mem) Dove sh_mem è il puntatore alla zona condivisa a.a. 2012/

15 Memoria condivisa secondo POSIX: esempio int main() { pid_t pid; int seg_id; char *sh_mem; seg_id = shmget(ipc_private, size, S_IRUSR S_IWUSR); sh_mem = (char *) shmat(seg_id, NULL, 1); pid = fork(); if (pid < 0) { // errore! fprintf(stderr, "Fork Failed"); exit( 1); } a.a. 2012/

16 Memoria condivisa secondo POSIX: esempio } if (pid == 0) // processo figlio printf( processo figlio stringa condivisa: %s, sh_mem); else { // processo padre sprintf (sh_mem, hello!"); exit(0); } a.a. 2012/

17 Scambio di messaggi Consente ai processi di comunicare e sincronizzare le loro azioni. Un messaggio è un insieme di informazioni formattate da un processo mittente e interpretate da un processo destinatario Un meccanismo di "scambio di messaggi" copia le informazioni di un messaggio da uno spazio di indirizzamento di un processo allo spazio di indirizzamento di un altro processo Questo meccanismo permette di mettere in comunicazione due processi senza che essi debbano condividere lo spazio di indirizzamento a.a. 2012/

18 Scambi di messaggi: send e receive send(message) È utilizzata dal processo mittente per "spedire" un messaggio ad un processo destinatario. Deve specificare il processo destinatario. Le dimensioni possono essere fisse o variabili receive(message): utilizzata dal processo destinatario per "ricevere" un messaggio da un processo mittente. Non è necessario specificare il mittente a.a. 2012/

19 Scambio di messaggi Se due processi P e Q vogliono comunicare devono: Stabilire un canale di comunicazione tra loro Scambiarsi messagi per mezzo di send e receive mittente Dati originali Sistema Operativo messaggio Dati copiati destinatario a.a. 2012/

20 Comunicazione diretta I processi devono conoscere il PID del processo con cui vogliono comunicare: send (P, message) invia messaggio al processo P receive(q, message) riceve un messaggio dal processo Q Proprietà del canale di comunicazione Si stabilisce in maniera automatica; È associato esattamente a due processi; Il canale è di solito bidirezionale a.a. 2012/

21 Comunicazione indiretta I messaggi si inviano/prelevano a/da porte (dette anche mailboxes): Ogni porta è individuata in maniera univoca, tipicamente un intero. Due processi possono comunicare se condividono una porta. Proprietà del canale di comunicazione: Canale stabilito dalla condivisione della porta Un canale può essere associato a più processi Ogni coppia di processi può condividere più canali (porte) I Canali possono essere uni/bi-direzionali a.a. 2012/

22 Comunicazione indiretta Il SO consente di: creare una porta Mandare/ricevere messaggi utilizzando la porta Distruggere la porta Primitive send(a, message) invia un messaggio alla porta A receive(a, message) riceve un messaggio dalla porta A a.a. 2012/

23 Scambio di messaggi: sincronizzazione Lo scambio di messaggi può essere sincrono (bloccante) o asincrono (non bloccante). Invio sincrono: il mittente attende la ricezione da parte del destinatario; Invio asincrono: il mittente riprende la sua normale esecuzione; ricezione sincrona: il destinatario si blocca in attesa del messaggio; ricezione asincrono: il destinatario riceve messaggi validi oppure nulli a.a. 2012/

24 Problema del produttore/consumatore Il problema del produttore/consumatore può essere risolto per mezzo di send/receive sincroni Il produttore si limita ad inviare messaggi e ad attenderne la ricezione da parte del consumatore Il consumatore aspetta invece i messaggi del produttore a.a. 2012/

25 Produttore/consumatore #define BUFFER_SIZE 10 #define IN 0 #define OUT 1 typedef struct {... } item; item buffer[buffer_size]; int inout[2]; a.a. 2012/

26 Scambio di messaggi vs memoria condivisa: produttore void producer(pid_t c_id) } item tmp; while (true) { /* si produce un item*/.. send(&tmp, sizeof(item), c_id); } Messaggi void producer(item buffer[], int &in, int out) } Memoria condivisa item tmp; while (true) { /* si produce un item*/.. while (((in + 1) % BUFFER_SIZE) == out) ; buffer[in] = item; in = (in + 1) % BUFFER SIZE; } a.a. 2012/

27 Scambio di messaggi vs memoria condivisa: produttore messaggi Memoria condivisa void consumer(pid_t p_id) { item tmp; } while (true) { receive(&tmp, sizeof(item), p_id); } /* si consuma l'item*/.. void consumer(item buffer[], int in, int &out) { item tmp; } while (true) { while (in == out) ; } // si estrae l'item tmp = buffer[out]; out = (out + 1) % BUFFER SIZE; /* si consuma l'item*/.. a.a. 2012/

28 produttore/consumatore: memoria condivisa int main(int argc, char* argv[]) { /* process id */ pid_t pid; /* memory segment id */ int buffer_id, inout_id;; item* shared_buffer; /* buffer pointer */ int* shared_inout; /* inout pointer */ if ((buffer_id = shmget(ipc_private, sizeof(item)*buffer_size, PERMS)) == 1) { fprintf(stderr,"errore!: impossibile allocare memoria condivisa\n"); exit( 1); } if ((inout_id = shmget(ipc_private, sizeof(int)*2, PERMS)) == 1) { fprintf(stderr,"errore!: impossibile allocare memoria condivisa\n"); exit( 1); } a.a. 2012/

29 produttore/consumatore: memoria condivisa if ((shared_buffer = (item *) shmat(buffer_id, 0, 0)) == (item *) 1) { fprintf(stderr,"unable to attach to segment %d\n",buffer_id); exit( 1); } if ((shared_buffer = (int *) shmat(inout_id, 0, 0)) == (int *) 1) { fprintf(stderr,"unable to attach to segment %d\n",buffer_id); exit( 1); } pid = fork(); if (pid < 0) { // errore! fprintf(stderr, "Fork Failed"); exit( 1); } if (pid == 0) // processo figlio: consumatore consumer(shared_buffer, shared_inout[in], sharred_inout[out]) else // processo padre: produttore producer(shared_buffer, shared_inout[in], shared_inout[out]) } exit(0); a.a. 2012/

30 produttore/consumatore: scambio messaggi int main(int argc, char* argv[]) { /* process id */ pid_t pid1, pid2; pid1 = getpid(); pid2 = fork(); if (pid2 < 0) { // errore! fprintf(stderr, "Fork Failed"); exit( 1); } if (pid2 == 0) // processo figlio: consumatore consumer(pid1); else // processo padre: produttore producer(pid2); } exit(0); a.a. 2012/

31 Socket Una socket è definita come l'estremità di un canale di comunicazione. Una coppia di processi su due macchine distinte (collegate in rete) può comunicare per mezzo di una coppia di socket. Una socket è individuata da: Indirizzo IP Numero di porta Esempio: :1625 Le porte nell'intervallo sono assegnate a servizi standard. a.a. 2012/

32 Socket: Esempio a.a. 2012/

33 Le Pipe È un canale di comunicazione tra processi Questioni relative alla pipe: Comunicazione birezionale o unidirezionale? L'eventuale comunicazione bidirezionale deve essere half o full duplex? Deve esistere una relazione padre-figlio? I processi devono essere sulla stessa macchina? a.a. 2012/

34 Pipe convenzionali È un canale di comunicazione tra processi Usano il paradigma produttore-consumatore. Sono unidirezionali. Il produttore scrive sull'estremità detta write-end. Il consumatore invece legge dalla read-end. Il sistema provvede a copiare i dati scritti dal produttore sulla write-end Nei sistemi UNIX, la pipe è considerata una tipo speciale di file. a.a. 2012/

35 La funzione pipe #include <unistd.h> int pipe(int *fd); Restituisce: 0 se OK, -1 in caso di errore Restituisce 2 descrittori di file (parametro fd) a.a. 2012/

36 La funzione pipe in filedes[0] c'è un descrittore di file di un "file" aperto in lettura in filedes[1] c'è un descrittore di file di un "file" aperto in scrittura I dati fluiscono dal file in cui si scrive a quello in cui si legge grazie alla pipe l'output di filedes[1] è l'input di filedes[0] a.a. 2012/

37 La funzione pipe Un tipico utilizzo della pipe è questo: int fd[2];... pipe(fd); pid=fork();... a.a. 2012/

38 Pipe+fork: effetto parent child fork fd[0] fd[1] fd[0] fd[1] PIPE a.a. 2012/

39 Scelta della direzione, Esempio 1 Dopo la fork, per esempio, si può creare un canale dal padre verso il figlio: if (pid > 0) // padre close(fd[0]); else close(fd[1]); // figlio a.a. 2012/

40 Scelta della direzione, Esempio 1 parent child fork fd[0] fd[1] fd[0] fd[1] PIPE a.a. 2012/

41 Scelta della direzione, Esempio 1 parent child fork fd[0] fd[1] fd[0] fd[1] PIPE a.a. 2012/

42 Scelta della direzione, Esempio 2 Dopo la fork, per esempio, si può creare un canale dal figlio verso il padre: if (pid > 0) // padre close(fd[1]); else close(fd[0]); // figlio a.a. 2012/

43 Scelta della direzione, Esempio 2 parent child fork fd[0] fd[1] fd[0] fd[1] PIPE a.a. 2012/

44 Pipe: uso Crata la pipe e scelto il verso di comunicazione è possibile usare le normali funzioni di I/O di lettura/scrittura (eg. read, write) Nella pipe i dati vengono letti nello stesso ordine in cui sono scritti Le pipe hanno una capacità limitata (la costante PIPE_BUF ne specifica la dimensione massima) a.a. 2012/

45 La funzione write ssize_t write(int fd, const void *buf, size_t count); Quando la pipe si riempie la write si blocca fino a che la read non ha rimosso un numero sufficiente di dati (non vengono effettuate scritture parziali). Se il descrittore del file che legge dalla pipe è chiuso, una write genererà un errore (segnale SIGPIPE) a.a. 2012/

46 La funzione read ssize_t read(int fd, void *buf, size_t count); Legge i dati dalla pipe nell ordine in cui sono scritti. Non è possibile rileggere o rimandare indietro i dati letti. Se la pipe è vuota la read si blocca fino a che non vi siano dei dati disponibili (syscall bloccante). Se il descrittore del file in scrittura è chiuso, la read restituirà EOF dopo aver completato la lettura dei dati. a.a. 2012/

47 La funzione close La funzione close sul descrittore del file in scrittura agisce come end-of-file per la read. La chiusura del descrittore del file in lettura causa un errore nella write. a.a. 2012/

48 Pipe convenzionali: esempio int main(void) { char write_msg[buffer_size] = "Greetings"; char read_msg[buffer_size]; pid_t pid; int fd[2]; /** create the pipe */ if (pipe(fd) == 1) { fprintf(stderr,"pipe failed"); return 1; } /** now fork a child process */ pid = fork(); if (pid < 0) { fprintf(stderr, "Fork failed"); return 1; } a.a. 2012/

49 Pipe convenzionali: esempio if (pid > 0) { /* parent process */ /* close the unused end of the pipe */ close(fd[read_end]); /* write to the pipe */ write(fd[write_end], write_msg, strlen(write_msg)+1); /* close the write end of the pipe */ close(fd[write_end]); } else { /* child process */ /* close the unused end of the pipe */ close(fd[write_end]); /* read from the pipe */ read(fd[read_end], read_msg, BUFFER_SIZE); printf("child read %s\n",read_msg); /* close the write end of the pipe */ close(fd[read_end]); } } a.a. 2012/

50 FIFO (Named pipe) La relazione padre figlio non è necessaria. Continuano ad esistere anche dopo che i processi comunicanti le hanno create. Possono essere utilizzate da diversi processi una volta che sono state create. In UNIX sono create con la funzione mkfifo() Sono gestite con le chiamate open(), read(), write() e close() a.a. 2012/

51 #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); Restituisce: 0 se OK -1 in caso di errore a.a. 2012/

52 FIFO: apertura Creare una FIFO è come creare un file (FIFO è un tipo possibile di file) Una volta creata, una FIFO può essere aperta con open oppure fopen Somiglia ad un file (si utilizzano le stesse funzioni di I/O, risiede sul filesystem) ha le caratteristiche di una pipe: I dati scritti vengono letti in ordine first-in-first-out Non è possibile rileggere i dati già letti né posizionarsi all interno con lseek a.a. 2012/

53 FIFO: sincronizzazione Una open in lettura si blocca fino a che un processo non effettua una open in scrittura (e viceversa). Se viene utilizzato il flag O_NONBLOCK, una open in lettura ritorna immediatamente se non c è un processo che ha effettuato una open in scrittura. una open in scrittura restituisce un errore se non c è un processo che ha effettuato una open in lettura. Se si effettua una write su una FIFO che non e piu aperta in lettura da alcun processo, viene generato il segnale SIGPIPE Quando l ultimo degli scrittori chiude una FIFO, viene generato un EOF per il processo lettore a.a. 2012/

54 FIFO: esempio Diversi client possono inviare richieste ad un server SERVER read FIFO write write Client..... Client a.a. 2012/

55 FIFO: client #include<stdio.h> #include<unistd.h> #include<sys/stat.h> #include<sys/types.h> #include<fcntl.h> int main(){ int fds, pid; char c[5],f[9]; if((fds=open("fifo",o_wronly))<0){ //Apre la FIFO printf("error: impossibile aprire la fifo in scrittura\n"); exit(0); } pid=getpid(); } write(fds,&pid,sizeof(pid)); //Invia il messaggio al server close(fds); //Chiude la well known FIFO while(1) //Attende di essere ucciso ; a.a. 2012/

56 FIFO: server #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> #include<fcntl.h> #include<signal.h> int main(){ int fd; int pidc; //CREA la FIFO if(mkfifo("fifo",s_irwxu S_IRGRP S_IROTH)<0){ printf("\nimpossibile creare la FIFO\n"); exit(0); } SEGUE... a.a. 2012/

57 FIFO: server while(1){ if((fds=open("fifo",o_rdonly)) < 0){ //Apre la FIFO printf("\nerror: impossibile aprire la FIFO\n"); exit(0); } If (read(fds,&pidc,sizeof(pidc))<0){ //Legge dalla FIFO printf("error: il messaggio non è valido\n"); return; } printf("il server ha letto dalla FIFO %d\n",pidc); kill(pidc,sigkill); //Uccide il processo client } close(fds); //Chiude la well-known FIFO } return; a.a. 2012/

58 Code di Messaggi (IPC SysV) Aprire/creare una coda: id msgget(key, flags) Inviare messaggio: ok msgsnd(id, msg, nbytes, flags) Ricevere messaggio: nbytes msgrcv(id, msg, nbytes, type, flags) Operazioni di controllo: ok msgctl(id, cmd, buf) a.a. 2012/

59 Creare una Coda: Condivisione della chiave padre/figlio id = msgget(ipc_private, IPC_CREAT IPC_EXCL 0666); if (id > 0) fork();... Uso della funzione ftok #define CHIAVE /home/user // Server: key = ftok(chiave, 1); id = msgget(key, IPC_CREAT IPC_EXCL 0666); // Client: key = ftok(chiave, 1); id = msgget(key, 0); Definizione (condivisa) di una costante #include MyQueue.h // Server: id = msgget(key, IPC_CREAT IPC_EXCL 0666); // Client: int id = msgget(key, 0); MyQueue.h.. #define KEY a.a. 2012/

60 Creare/Aprire una coda int msgget(key_t key, int flags); Apre la coda con chiave key; Viene creata una nuova coda se: la chiave e' IPC_PRIVATE, oppure flag contiene IPC_CREAT e la chiave e' nuova Restituisce l'identificatore della coda, oppure -1 in caso di errore. a.a. 2012/

61 Creare una coda: opzioni Diverse opzioni del campo flags possono essere combinate con l'operatore (or bit-a-bit): IPC_CREAT: se non esiste, creala IPC_EXCL: se esiste, fallisci ES: creare una nuova coda (padre/figlio) msgget(ipc_private, IPC_CREAT IPC_EXCL 0666) Permessi per gli utenti a.a. 2012/

62 Inviare messaggi È necessario dichiarare una apposita struct: Obbligatorio, Non fa parte del contenuto Definiti dall'utente struct my_msg { long type; Type1 user_field1;... Type1 user_field_n; } Dimensioni del messaggio: sizeof(my_msg) sizeof(long) a.a. 2012/

63 Inviare messaggi int msgsnd(int id, const void *ptr, size_t nbytes, int flags); Invia il messaggio contenuto all'indirizzo ptr, di dimensione nbytes (solo dei campi definiti dall'utente), sulla coda id, con opzioni flags Restituisce 0 (success) oppure -1 (failure) Se la coda è piena: Senza opzioni: si Blocca in attesa spazio Opzione IPC_NOWAIT: la chiamata ritorna immediatamente) a.a. 2012/

64 Osservazioni A differenza delle pipe, le code di messaggi ricordano dove finisce un messaggio e ne comincia un altro (ricordano i record boundaries) I messaggi in coda possono essere eterogenei (dimensioni diverse) Ogni messaggio ha un'etichetta chiamata tipo (campo type della struct) un processo puo' richiedere messaggi di un dato tipo a.a. 2012/

65 Ricevere messaggi int msgrcv(int id, const void *ptr, size_t nbytes, long type, int flags) Riceve un messaggio dalla coda id, di tipo type, e lo memorizza all'indirizzo ptr, se la sua dimensione e' al piu' nbytes bytes Restituisce la dimensione effettiva del messaggio ricevuto (-1 in caso di errore) Se la coda è vuota: Senza opzioni: Blocca il chiamante Opzione IPC_NOWAIT: la chiamata ritorna immediatamente a.a. 2012/

66 Ricevere messaggi: il campo type Significati del campo type: type == 0, riceve il primo messaggio presente nella coda type > 0, riceve il primo messaggio di tipo type type < 0, riceve il primo messaggio di tipo minimo tra quelli di tipo minore o uguale di -type a.a. 2012/

67 Ricevere messaggi Cosa succede se il messaggio è troppo grande? Se non viene specificata nessuna opzione (campo flags), allora msgrcv() fallisce e il messaggio resta nella coda Se invece viene data l'opzione MSG_NOERROR allora il messaggio viene troncato e ricevuto (la parte troncata viene persa) a.a. 2012/

68 Ricevere messaggi: Osservazioni Più processi possono scrivere e leggere sulla stessa coda Per non confondere i flussi, i processi possono usare il campo tipo del messaggio ES: un server e molti client i client mandano messaggi di tipo 1 il server risponde usando il pid del client come tipo a.a. 2012/

69 Code di messaggi: un server e molti client SERVER Tipo: pid Tipo: 1 CODA messaggi Tipo: pid_p1 Tipo: 1 Tipo: pid_pn Tipo: 1 P1 PN a.a. 2012/

70 Modificare una coda int msgctl(int id, int cmd, struct msqid_ds* buf); id: chiave della coda da modificare cmd: azione da eseguire buf: puntatore ad una struct di tipo msqid_ds Per cancellare la coda: msgctl(id, IPC_RMID, NULL) Ha effetto immediato i messaggi eventualmente presenti vengono persi. Tutti i processi in attesa vengono risvegliati a.a. 2012/

71 Le struct msqid_ds e ipc_perm struct msqid_ds { struct ipc_perm msg_perm; /* Ownership and permissions */ time_t msg_stime; /* Time of last msgsnd(2) */ time_t msg_rtime; /* Time of last msgrcv(2) */ time_t msg_ctime; /* Time of last change */ unsigned long msg_cbytes; /* Current number of bytes in queue */ msgqnum_t msg_qnum; /* Current number of messages in queue */ msglen_t msg_qbytes; /* Maximum number of bytes allowed in queue */ pid_t msg_lspid; /* PID of last msgsnd(2) */ pid_t msg_lrpid; /* PID of last msgrcv(2) */ }; struct ipc_perm { key_t key; /* Key supplied to msgget(2) */ uid_t uid; /* Effective UID of owner */ gid_t gid; /* Effective GID of owner */ uid_t cuid; /* Effective UID of creator */ gid_t cgid; /* Effective GID of creator */ unsigned short mode; /* Permissions */ unsigned short seq; /* Sequence number */ }; a.a. 2012/

72 Msgctl: Alcuni comandi IPC_STAT: mette in buf la struttura msqid_ds della coda IPC_SET: setta i 4 campi (msg_perm.uid,msg_perm.gid, msg_perm.mode, msg_qbytes) della struttura puntata da buf nei corrispondenti campi della struttura della coda IPC_RMID : rimuovi la coda e ciò che contiene a.a. 2012/

73 Visualizzare e rimuovere le risorse $> ipcs T ID KEY MODE OWNER Message Queues: q 10 0x003e8 rw r r st q 20 0x003e8 rw rw r st Shared Memory: m 25 0x003e8 rw rw rw st Semaphores: s 280 0x003e8 rw rw rw Le risorse non vengono deallocate quando il processo che le ha create termina. Occorre farlo esplicitamente: $> ipcrm q 10 s 280 m 25 st a.a. 2012/

74 Code messaggi: esempio Si realizzino due distinti programmi: receiver e sender Receiver crea una coda di messaggi (nuova) e legge messaggi dalla coda fino a quando non riceve un messaggio vuoto Sender riceve dalla linea di comando due parametri: L'id di una coda di messaggi Un numero N Sender invia sulla coda specificata dall'id N messaggi e poi invia un messaggio vuoto. I programmi sono reperibili qui: a.a. 2012/

IPC System V. Code di messaggi

IPC System V. Code di messaggi IPC System V Code di messaggi Panoramica coda di messaggi una lista concatenata di messaggi, FIFO semaforo un contatore condiviso, atomicamente modificabile memoria condivisa uno spazio di memoria accessibile

Dettagli

Inter-Process Communication

Inter-Process Communication Inter-Process Communication (IPC) IPCS 1 1. Code di messaggi 2. Semafori 3. Memoria condivisa send receive 2? 3 p1 p3 p2 CODE DI MESSAGGI Modello di Comunicazione Code di Messaggi Il processo ricevente

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi Le FIFO pipe vs fifo la pipe può essere usata solo tra processi "imparentati" (che hanno un antenato comune che ha creato la pipe) la fifo consente di scambiare dati tra processi qualsiasi 2 1 FIFO (named

Dettagli

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese

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

Dettagli

Corso di Laboratorio di Sistemi Operativi

Corso di Laboratorio di Sistemi Operativi Corso di Laboratorio di Sistemi Operativi Lezione 6 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Interazione tra Processi I processi concorrenti possono interagire

Dettagli

CREAZIONE PROCESSI IN UNIX 20

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.

Dettagli

Sistemi Operativi. ugoerr+so@dia.unisa.it 3 LEZIONE PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA. Sistemi Operativi 2007/08

Sistemi Operativi. ugoerr+so@dia.unisa.it 3 LEZIONE PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA. Sistemi Operativi 2007/08 Sistemi Operativi Docente: Ugo Erra ugoerr+so@dia.unisa.it 3 LEZIONE PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA UNIVERSITA DEGLI STUDI DELLA BASILICATA Sommario della lezione Concetto di processo

Dettagli

Sistemi Operativi (modulo di Informatica II)

Sistemi Operativi (modulo di Informatica II) Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2008-09 Sommario Processi cooperanti La comunicazione tra processi Necessità

Dettagli

Sommario. G. Piscitelli

Sommario. G. Piscitelli Sommario Interprocess Communication Processi (e thread) cooperanti Il paradigma produttore-consumatore Shared Memory e Inter Process Communication (IPC) facility Proprietà caratteristiche della comunicazione

Dettagli

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

File I/O. M. R. Guarracino: File I/O 1 File I/O M. R. Guarracino: File I/O 1 File I/O Gran parte delle operazioni su file in ambiente UNIX possono essere eseguite utilizzando solo cinque funzioni: open read write lseek close M. R. Guarracino:

Dettagli

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

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI mumolo@units.it Chiamate di sistema per la Inter Process Communication (IPC) in POSIX E.Mumolo, DEEI mumolo@units.it Pipe Cos'è un pipe? E' un canale di comunicazione che unisce due processi Caratteristiche: La più vecchia

Dettagli

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

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 22 Martedì 7-1-2014 1 System Call per l'uso dei segnali Un processo che

Dettagli

Digressione: man (2)...

Digressione: man (2)... Syscall File I/O Digressione: man (2)... Le funzioni della libreria standard UNIX associate alle system call di Linux sono documentate nella sezione 2 di man e.g.: man 2 open Ogni manpage di system call

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

SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR Cognome: Nome: Matricola: 1. Ricordate che non potete usare calcolatrici o materiale

Dettagli

CAPITOLO 27 SCAMBIO DI MESSAGGI

CAPITOLO 27 SCAMBIO DI MESSAGGI CAPITOLO 27 SCAMBIO DI MESSAGGI SCAMBIO DI MESSAGGI Sia che si guardi al microkernel, sia a SMP, sia ai sistemi distribuiti, Quando i processi interagiscono fra loro, devono soddisfare due requisiti fondamentali:

Dettagli

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

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 -

Dettagli

Digressione: man 2...

Digressione: man 2... Syscall File I/O Digressione: man 2... Le funzioni della libreria standard UNIX associate alle system call di Linux sono documentate nella sezione 2 di man e.g.: man 2 open Ogni manpage di system call

Dettagli

Definizione di processo 1

Definizione di processo 1 I Processi I processi Definizione di processo Scheduling dei processi Operazioni sui processi Processi cooperanti Comunicazione fra processi Comunicazioni in sistemi client server 3.2 Definizione di processo

Dettagli

Inter-Process Communication

Inter-Process Communication Inter-Process Communication C. Baroglio a.a. 2002-2003 1 Introduzione In Unix i processi possono essere sincronizzati utilizzando strutture dati speciali, appartenti al pacchetto IPC (inter-process communication).

Dettagli

I processi. Concetto di processo Scheduling dei processi Operazioni sui processi Processi cooperanti Comunicazione fra processi

I processi. Concetto di processo Scheduling dei processi Operazioni sui processi Processi cooperanti Comunicazione fra processi I processi Concetto di processo Scheduling dei processi Operazioni sui processi Processi cooperanti Comunicazione fra processi Il modello a processi Consideriamo un informatico appassionato di cucina che

Dettagli

System call fcntl e record locking

System call fcntl e record locking System call fcntl e record locking Esempio: prenotazione di voli aerei La compagnia ACME Airlines usa un sistema di prenotazione dei voli basato su unix. Possiede due uffici per la prenotazione, A e B,

Dettagli

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

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3. 1 strace : visualizzazione delle system call invocate da un processo UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3 1 strace : visualizzazione delle system call

Dettagli

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi Sistemi Operativi Lez. 13: primitive per la concorrenza monitor e messaggi Osservazioni I semafori sono strumenti particolarmente potenti poiché consentono di risolvere ogni problema di sincronizzazione

Dettagli

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

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

Dettagli

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

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

Dettagli

File e Directory. M. Guarracino - File e Directory 1

File e Directory. M. Guarracino - File e Directory 1 File e Directory M. Guarracino - File e Directory 1 Date dei file Ogni volta che accediamo ai dati contenuti in un file, il sistema memorizza la data di ultimo accesso La stessa cosa accade quando modifichiamo

Dettagli

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

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 -

Dettagli

Corso di Sistemi Operativi Programmazione di Sistema e Concorrente

Corso di Sistemi Operativi Programmazione di Sistema e Concorrente Università di Roma La Sapienza Dipartimento di Informatica e Sistemistica Corso di Sistemi Operativi Programmazione di Sistema e Concorrente Lezione VII Code di messaggi PIPE - FIFO Argomenti della lezione

Dettagli

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3

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

Dettagli

Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file:

Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file: Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file: usare lseek per spostarsi alla fine del file e poi scrivere: lseek(filedes, (off_t)0, SEEK_END); write(filedes, buf, BUFSIZE);

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

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

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

Dettagli

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007 2007 SISTEMI OPERATIVI Sincronizzazione dei processi Domande di verifica Luca Orrù Centro Multimediale Montiferru 30/05/2007 Sincronizzazione dei processi 1. Si descrivano i tipi di interazione tra processi?

Dettagli

Interprocess Communications - II. Franco Maria Nardini

Interprocess Communications - II. Franco Maria Nardini Interprocess Communications - II Franco Maria Nardini XSI IPC Tre tipi di IPC introdotti da System V: semafori shared memory code di messaggi Comunicazioni tra processi su stesso host Tutte consentono

Dettagli

Esercitazione [5] Input/Output su Socket

Esercitazione [5] Input/Output su Socket Esercitazione [5] Input/Output su 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 Calcolo

Dettagli

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

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

Dettagli

Esercitazione [8] Pipe e FIFO

Esercitazione [8] Pipe e FIFO 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

Dettagli

Sistemi Operativi II

Sistemi Operativi II Sistemi Operativi II Massimo Bernaschi Istituto per le Applicazioni del Calcolo Mauro Picone Consiglio Nazionale delle Ricerche Viale del Policlinico, 137-00161 Rome - Italy http://www.iac.cnr.it/ e-mail:

Dettagli

Processi. Laboratorio Software 2008-2009 C. Brandolese

Processi. Laboratorio Software 2008-2009 C. Brandolese Processi Laboratorio Software 2008-2009 Introduzione I calcolatori svolgono operazioni simultaneamente Esempio Compilazione di un programma Invio di un file ad una stampante Visualizzazione di una pagina

Dettagli

Esercizio sulla gestione di file in Unix

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

Dettagli

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento

Dettagli

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it Introduzione ai Device Drivers in Linux E.Mumolo, DEEI mumolo@units.it 1 Device Drivers Moduli software che gestiscono le periferiche attraverso il file system Tutte le periferiche sono viste come file

Dettagli

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

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,

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

Struttura di un sistema operativo. Struttura dei Sistemi Operativi. Servizi per l utente generico. Servizi per l utente generico

Struttura di un sistema operativo. Struttura dei Sistemi Operativi. Servizi per l utente generico. Servizi per l utente generico Impossibile visualizzare l'immagine. Struttura di un sistema operativo Struttura dei Sistemi Operativi Servizi di un sistema operativo Interfaccia Utente Capitolo 2 -- Silberschatz Chiamate di sistema

Dettagli

Cosa e un processo? Stato del processo

Cosa e un processo? Stato del processo Cosa e un processo? LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Un sistema operativo esegue programmi di varia natura: Compilatori, word processor, programmi utente, programmi di sistema,

Dettagli

Laboratorio di Sistemi Operativi 29-01-2009. Cognome Nome Mat.

Laboratorio di Sistemi Operativi 29-01-2009. Cognome Nome Mat. Il compito è costituito da domande chiuse, domande aperte ed esercizi. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 2 ore. Domande chiuse: ogni domanda corrisponde ad un punteggio

Dettagli

Capitolo 2 -- Silberschatz

Capitolo 2 -- Silberschatz Struttura dei Sistemi Operativi Capitolo 2 -- Silberschatz Struttura di un sistema operativo Servizi di un sistema operativo Interfaccia Utente Chiamate di sistema Tipi di chiamate Programma di sistema

Dettagli

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Le operazioni di allocazione e deallocazione sono a carico del sistema. Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione

Dettagli

Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario

Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario Processi e thread Dipartimento di Informatica Università di Verona, Italy Sommario Concetto di processo Stati di un processo Operazioni e relazioni tra processi Concetto di thread Gestione dei processi

Dettagli

Sistemi Operativi. Des crizione e controllo dei proces s i

Sistemi Operativi. Des crizione e controllo dei proces s i Sistemi Operativi Des crizione e controllo dei proces s i Servizi di un Sistema Operativo Permettere ad un utente di creare processi (lanciare programmi) Interallacciare l esecuzione di diversi processi,

Dettagli

Parte 2: Gestione dei Processi. 4.1 Concetto di Processo. 4.1.2 Stato del processo

Parte 2: Gestione dei Processi. 4.1 Concetto di Processo. 4.1.2 Stato del processo Parte 2: Gestione dei Processi 1 Il processo è l unità di lavoro nella maggior parte dei sistemi operativi. È quindi il centro di tutta la teoria dei Sistemi Operativi Il sistema operativo è responsabile

Dettagli

Esempio produttori consumatori. Primitive asincrone

Esempio produttori consumatori. Primitive asincrone Primitive asincrone Send non bloccante: il processo mittente, non appena inviato il messaggio, prosegue la sua esecuzione. Il supporto a tempo di esecuzione deve fornire un meccanismo di accodamento dei

Dettagli

CAP. 6: Nucleo del sistema operativo (La gestione dei processi)

CAP. 6: Nucleo del sistema operativo (La gestione dei processi) Struttura interna del sistema operativo Linux CAP. 6: Nucleo del sistema operativo (La gestione dei processi) Architettura del sistema operativo shell Programmi utente Modo utente Interfaccia delle chiamate

Dettagli

Sistemi Operativi. Lezione 7 Comunicazione tra processi

Sistemi Operativi. Lezione 7 Comunicazione tra processi Lezione 7 Comunicazione tra processi Introduzione La soluzione sw al problema della mutua esclusione è abbastanza complessa Algoritmo di Peterson La soluzione hw mediante disabilitazione degli interrupt

Dettagli

I SISTEMI OPERATIVI (1)

I SISTEMI OPERATIVI (1) I SISTEMI OPERATIVI (1) 1 un computer può essere pensato come una stratificazione di macchine virtuali, ciascuna delle quali mette a disposizione alcuni servizi, che sono utilizzabili mediante chiamate

Dettagli

Processi e Sincronizzazione. Laboratorio Software 2008-2009 C. Brandolese M. Grotto

Processi e Sincronizzazione. Laboratorio Software 2008-2009 C. Brandolese M. Grotto Processi e Sincronizzazione C. Brandolese M. Grotto Sommario 1. Processi Concetti fondamentali Stati in GNU/Linux 2. Creazione Descrizione Creazione con system() Creazione con fork() Effetto di fork()

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi primavera 2009 pipe vs fifo la pipe può essere usata solo tra processi "imparentati" (che hanno un antenato comune che ha creato la pipe) Le FIFO la fifo consente di scambiare dati tra processi qualsiasi

Dettagli

I processi. Operating System Concepts 9 th Edition

I processi. Operating System Concepts 9 th Edition I processi I processi Definizione di processo Scheduling dei processi Operazioni sui processi Processi cooperanti Comunicazione fra processi POSIX come esempio di sistema IPC Comunicazioni in sistemi client

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi II Semestre - Marzo/Giugno 2008 Matricole congr. 0 mod 3 File & Directory #include #include stat,fstat e lstat int stat (const char *pathname, struct stat *buf); int fstat (int

Dettagli

Sistemi Operativi. Descrizione e controllo dei processi

Sistemi Operativi. Descrizione e controllo dei processi Sistemi Operativi Descrizione e controllo dei processi Servizi di un Sistema Operativo Permettere ad un utente di creare processi (lanciare programmi) Interallacciare l esecuzione di diversi processi,

Dettagli

File e Directory. M. Guarracino - File e Directory 1

File e Directory. M. Guarracino - File e Directory 1 File e Directory M. Guarracino - File e Directory 1 File e Directory Abbiamo visto come si possono utilizzare funzioni di I/O per i file: open, read, write, lseek e close Vogliamo ora analizzare ulteriori

Dettagli

rsystem Maximiliano Marchesi maximiliano.marchesi@studenti.unipr.it

rsystem Maximiliano Marchesi maximiliano.marchesi@studenti.unipr.it Maximiliano Marchesi 28 Settembre 2005 Diario delle Revisioni Revisione 1.2 28 Settembre 2005 maximiliano.marchesi@studenti.unipr.it Sommario Introduzione..................................................................................

Dettagli

MODELLO AD AMBIENTE GLOBALE

MODELLO AD AMBIENTE GLOBALE MODELLI DI INTERAZIONE TRA PROCESSI Modello ad ambiente globale ( global environment ) Modello a scambio di messaggi ( message passing ) MODELLO AD AMBIENTE GLOBALE Il sistema è visto come un insieme di

Dettagli

CREAZIONE DI UN FILE

CREAZIONE DI UN FILE #include #include CREAZIONE DI UN FILE fd = creat(filename, mode); int fd, mode; char *filename; La primitiva creat crea un file, se non ne esiste uno col nome specificato, oppure

Dettagli

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

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Pietro Frasca Lezione 5 Martedì 21-10-2014 Thread Come abbiamo detto, un processo è composto

Dettagli

Record locking con la system call fcntl

Record locking con la system call fcntl Record locking con la system call fcntl Il record locking è un metodo per disciplinare la cooperazione tra processi. Permette ad un processo di poter accedere ad un file in modo esclusivo. È utile quindi

Dettagli

Esercitazione Laboratorio di Sistemi Operativi 20-01-2014. Cognome Nome Mat.

Esercitazione Laboratorio di Sistemi Operativi 20-01-2014. Cognome Nome Mat. Il compito è costituito da domande chiuse e domande aperte. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 2 ore. Domande chiuse: ogni domanda corrisponde ad un punteggio di 1 punto

Dettagli

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale

Dettagli

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI Comunicazione La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI Concettualmente la comunicazione point to point e' molto semplice: Un processo invia un

Dettagli

puntatori Lab. Calc. AA 2007/08 1

puntatori Lab. Calc. AA 2007/08 1 puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

IPC Inter Process Communication

IPC Inter Process Communication Il protocollo TCP controlla che la trasmissione tra due end points avvenga correttamente. Non stabilisce alcun criterio su chi deve iniziare la comunicazione. Questo compito è svolto dalle applicazioni

Dettagli

ESERCIZI SULLA PROGRAMMAZIONE DI SISTEMA GNU/LINUX

ESERCIZI SULLA PROGRAMMAZIONE DI SISTEMA GNU/LINUX Autore: Classe: Luciano VIVIANI QUARTA INFORMATICA (4IB) Anno scolastico: 2004/2005 Scuola: Itis Euganeo ESERCIZI SULLA PROGRAMMAZIONE DI SISTEMA GNU/LINUX Questa dispensa non vuole essere un manuale di

Dettagli

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX A cura del prof. Gino Tombolini 1 COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX Il sistema UNIX TCP/IP fornisce un meccanismo di comunicazione tra processi residenti su nodi distinti di una rete, compatibili

Dettagli

I Socket. Laboratorio Software 2008-2009 M. Grotto R. Farina

I Socket. Laboratorio Software 2008-2009 M. Grotto R. Farina M. Grotto R. Farina Sommario 1. Applicazioni Distribuite 2. I Socket Introduzione Interfacce e protocolli Descrizione Stile di comunicazione Namespace e protocollo Include e system call Creazione e chiusura

Dettagli

Sistemi Operativi I Corso di Laurea in Ingegneria Informatica Facolta di Ingegneria, Universita La Sapienza Docente: Francesco Quaglia

Sistemi Operativi I Corso di Laurea in Ingegneria Informatica Facolta di Ingegneria, Universita La Sapienza Docente: Francesco Quaglia Sistemi Operativi I Corso di Laurea in Ingegneria Informatica Facolta di Ingegneria, Universita La Sapienza Docente: Francesco Quaglia Scambio di messaggi: 1. Nozioni preliminari 2. Primitive 3. Indirizzamento

Dettagli

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012. - Comunicazione Tra Processi (IPC)- - 1 Parte -

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012. - Comunicazione Tra Processi (IPC)- - 1 Parte - Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012 - Comunicazione Tra Processi (IPC)- - 1 Parte - 1 Sommario Comunicazione tra processi sulla stessa macchina: fifo (qualunque insieme di processi)

Dettagli

Sistemi Operativi. Rappresentazione e gestione delle attività e della computazione: processi e thread

Sistemi Operativi. Rappresentazione e gestione delle attività e della computazione: processi e thread Modulo di Sistemi Operativi per il corso di Master RISS: Ricerca e Innovazione nelle Scienze della Salute Unisa, 17-26 Luglio 2012 Sistemi Operativi Rappresentazione e gestione delle attività e della computazione:

Dettagli

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

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2 Computazione multi-processo Avere più processi allo stesso momento implica/richiede Processi e Threads Pt. 2 Concorrenza ed efficienza Indipendenza e protezione dei dati ma deve prevedere/permettere anche:

Dettagli

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento

Dettagli

Modello a scambio di messaggi

Modello a scambio di messaggi PRIMITIVE PER LO SCAMBIO DI MESSAGGI Un messaggio si può considerare costituito da: origine, destinazione e contenuto Modello a scambio di messaggi type messaggio = record origine: ; destinazione: ; contenuto:

Dettagli

Dove die( stringa ) è una funzione di utilità del php che stampa la stringa e fa terminare lo script.

Dove die( stringa ) è una funzione di utilità del php che stampa la stringa e fa terminare lo script. I file in PHP Un file è un archivio elettronico contenente informazioni (dati) memorizzate su memoria di massa. Il file ha la caratteristica di consentire la lettura, la scrittura e la modifica dei dati

Dettagli

Struttura dati FILE. Concetto di FILE

Struttura dati FILE. Concetto di FILE Struttura dati FILE Concetto di FILE Per poter mantenere disponibili dei dati tra diverse esecuzioni di un programma (PERSISTENZA dei dati), è necessario poterli archiviare su memoria di massa. Un file

Dettagli

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

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16 Pietro Frasca Lezione 15 Martedì 24-11-2015 Struttura logica del sottosistema di I/O Processi

Dettagli

Processi in Linux. Stru/ura file eseguibili

Processi in Linux. Stru/ura file eseguibili SISTEMI OPERATIVI Processi in Linux Stru/ura file eseguibili» ELF - Executable and Linking Format formato di default degli eseguibili in Linux definizione nel file include » StruGura un header contenente

Dettagli

Interazione, sincronizzazione e comunicazione tra processi

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

Dettagli

Capitolo 7: Sincronizzazione

Capitolo 7: Sincronizzazione Capitolo 7: Sincronizzazione Il problema della sincronizzazione. Il problema della sezione critica. Hardware per la sincronizzazione. Semafori. Problemi classici di sincronizzazione. Monitor (cenni). 7.1

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

1. File normale: contiene dati 2. Directory: contiene nomi di altri file ed informazioni sugli stessi

1. File normale: contiene dati 2. Directory: contiene nomi di altri file ed informazioni sugli stessi File Tipi di file 2 1. File normale: contiene dati 2. Directory: contiene nomi di altri file ed informazioni sugli stessi 3. File speciali di caratteri: es. un terminale, /dev/tty 4. File speciali a blocchi:

Dettagli

Corso di Sistemi Operativi A.A. 2008-2009 - CHIAMATE DI SISTEMA PER IL CONTROLLO DEI PROCESSI. Fabio Buttussi

Corso di Sistemi Operativi A.A. 2008-2009 - CHIAMATE DI SISTEMA PER IL CONTROLLO DEI PROCESSI. Fabio Buttussi Corso di Sistemi Operativi A.A. 2008-2009 - CHIAMATE DI SISTEMA PER IL CONTROLLO DEI PROCESSI Fabio Buttussi La programmazione di sistema Il kernel è la parte di Unix che corrisponde al sistema operativo

Dettagli

Indice. settembre 2008 Il File System 2

Indice. settembre 2008 Il File System 2 Il File System Indice 4. Il File System 5. Vantaggi del FS 6. Protezione 7. Condivisione 8. I file - 1 9. I file - 2 10. Attributi dei file 11. Directory 12. Livelli di astrazione - 1 13. Livelli di astrazione

Dettagli

Calcolatori Elettronici Parte X: l'assemblatore as88

Calcolatori Elettronici Parte X: l'assemblatore as88 Anno Accademico 2013/2014 Calcolatori Elettronici Parte X: l'assemblatore as88 Prof. Riccardo Torlone Università Roma Tre L'assemblatore as88 Disponibile presso: CD-ROM allegato al libro di testo del corso

Dettagli

Concetto di processo. Processi. Immagine in memoria di un processo. Stati di un processo. Un SO esegue una varietà di attività:

Concetto di processo. Processi. Immagine in memoria di un processo. Stati di un processo. Un SO esegue una varietà di attività: Impossibile visualizzare l'immagine. Processi Concetto di processo Un SO esegue una varietà di attività: Sistemi batch job Sistemi time-sharing programmi utenti o task Nel libro i termini job e processo

Dettagli

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

Files, File I/O, File Sharing. Franco Maria Nardini Files, File I/O, File Sharing Franco Maria Nardini UNIX file types UNIX non richiede una struttura interna del file. Dal punto di vista del sistema operativo c e un solo tipo di file. Struttura e interpretazione

Dettagli

Lezione 5. Processi e thread. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata

Lezione 5. Processi e thread. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata Lezione 5 Sistemi operativi 24 marzo 2015 System Programming Research Group Università degli Studi di Roma Tor Vergata SO 15 5.1 Di cosa parliamo in questa lezione? Relazione tra processi e thread, e relative

Dettagli

Programmazione multiprocesso

Programmazione multiprocesso DTI / ISIN / Titolo principale della presentazione 1 Programmazione multiprocesso Amos Brocco, Ricercatore, DTI / ISIN 20 febbraio 2012 2 Processi Cos'è un processo? Un programma in esecuzione Spazio di

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli