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

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

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi primavera 2009 System V IPC code di messaggi System V IPC I tre tipi di IPC di System V sono: Code di Messaggi Semafori Memoria Condivisa Identificatori Ogni struttura IPC è individuata tramite un identificatore

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

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

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

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

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

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 mod 3 code di messaggi XSI IPC Code di Messaggi Semafori Memoria Condivisa 2 1 Identificatori Ogni struttura IPC è individuata tramite un identificatore ( intero>0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Pronto Esecuzione Attesa Terminazione

Pronto Esecuzione Attesa Terminazione Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma

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

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

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30' Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5.zip contenente i file necessari (solution di VS2008 e progetto compresi). Avvertenze per la consegna: apporre all inizio di

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

CAPITOLO 7 - SCAMBIO DI MESSAGGI

CAPITOLO 7 - SCAMBIO DI MESSAGGI CAPITOLO 7 - SCAMBIO DI MESSAGGI Lo scambio di messaggi è una forma di comunicazione nel quale un processo richiede al sistema operativo di mandare dei dati direttamente ad un altro processo. In alcuni

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

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

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

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

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

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

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

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

Esercizio 2. Client e server comunicano attraverso socket TCP

Esercizio 2. Client e server comunicano attraverso socket TCP Esercizio 1 Scrivere una applicazione client/server in cui: Il client, in un ciclo infinito: Legge una stringa da standard input Invia al processo server la stringa. Il server visualizza: L'IP da cui si

Dettagli

Introduzione. Coordinazione Distribuita. Ordinamento degli eventi. Realizzazione di. Mutua Esclusione Distribuita (DME)

Introduzione. Coordinazione Distribuita. Ordinamento degli eventi. Realizzazione di. Mutua Esclusione Distribuita (DME) Coordinazione Distribuita Ordinamento degli eventi Mutua esclusione Atomicità Controllo della Concorrenza Introduzione Tutte le questioni relative alla concorrenza che si incontrano in sistemi centralizzati,

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C

Dettagli

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

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa Raccolta prove scritte Realizzare una classe thread Processo che deve effettuare un numero fissato di letture da una memoria

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

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

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

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

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

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

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

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Sistemi Operativi (modulo di Informatica II) I processi

Sistemi Operativi (modulo di Informatica II) I processi Sistemi Operativi (modulo di Informatica II) I processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario Il concetto di processo Schedulazione dei processi e cambio di contesto

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

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

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

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++ ISTITUTO TECNICO INDUSTRIALE STATALE G A L I L E O F E R R A R I S DIISPENSA DII IINFORMATIICA E SIISTEMII AUTOMATIICII LA GESTIONE DEI FILE DI TESTO IN C++ Le classi per la gestione dei file. Il C++ è

Dettagli

Monitor. Introduzione. Struttura di un TDA Monitor

Monitor. Introduzione. Struttura di un TDA Monitor Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione

Dettagli

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

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

Funzioni. Il modello console. Interfaccia in modalità console

Funzioni. Il modello console. Interfaccia in modalità console Funzioni Interfaccia con il sistema operativo Argomenti sulla linea di comando Parametri argc e argv Valore di ritorno del programma La funzione exit Esercizio Calcolatrice 2, presente in tutti i programmi

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

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

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

Processi. Comunicazione tra processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino Processi Comunicazione tra processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Processi independenti e cooperanti I processi concorrenti possono essere Indipendenti Cooperanti

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

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

Dettagli

Link e permessi. Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione. Corso di Sistemi Operativi A. A. 2005-2006

Link e permessi. Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione. Corso di Sistemi Operativi A. A. 2005-2006 Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione Corso di Sistemi Operativi A. A. 2005-2006 Link e permessi Link Un riferimento ad un file è detto link Ogni file può avere un numero

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

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

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

Coordinazione Distribuita

Coordinazione Distribuita Coordinazione Distribuita Ordinamento degli eventi Mutua esclusione Atomicità Controllo della Concorrenza 21.1 Introduzione Tutte le questioni relative alla concorrenza che si incontrano in sistemi centralizzati,

Dettagli

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti Funzioni matlab per la gestione dei file Informatica B Prof. Morzenti File Contenitori di informazione permanenti Sono memorizzati su memoria di massa Possono continuare a esistere indipendentemente dalla

Dettagli

costruttori e distruttori

costruttori e distruttori costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,

Dettagli

Send/receive sincrona, assumendo che la condivisione avvenga mediante riferimenti logici coincidenti, invece che con capability.

Send/receive sincrona, assumendo che la condivisione avvenga mediante riferimenti logici coincidenti, invece che con capability. Implementazione delle primitive di comunicazione Send/receive sincrona, assumendo che la condivisione avvenga mediante riferimenti logici coincidenti, invece che con capability. Struttura dati canale {

Dettagli

I puntatori e l allocazione dinamica di memoria

I puntatori e l allocazione dinamica di memoria I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in

Dettagli

Inter-process communication

Inter-process communication Primitive di Comunicazione 1 Inter-process communication Nell'attività del sistema si rende necessario la cooperazione tra processi per realizzare le diverse funzionalità offerte all'utente. La cooperazione

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

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+... Setup delle ConnessioniTCP Una connessione TCP viene instaurata con le seguenti fasi, che formano il Three-Way Handshake (perchè formato da almeno 3 pacchetti trasmessi): 1) il server si predispone ad

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

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

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio 1-La memoria dinamica La scrittura di un programma (indipendentemente dal linguaggio adottato) deve sempre tener conto

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008

Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008 Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008 Si consideri una rete di sensori MicaZ con sistema operativo TinyOS, dove ogni nodo è identificato da un ID unico e dove è presente un solo

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

L API socket ed i daemon

L API socket ed i daemon L API socket ed i daemon 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/

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

Il costrutto monitor [Hoare 74]

Il costrutto monitor [Hoare 74] Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry, o public) ad una struttura dati comune a più processi, tale che: Le operazioni

Dettagli

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE 1/6 MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE Per prima cosa si ringrazia per aver scelto ImmobiPhone e per aver dato fiducia al suo autore. Il presente documento istruisce l'utilizzatore sull'uso del programma

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

CONTROLLO DI GESTIONE DELLO STUDIO

CONTROLLO DI GESTIONE DELLO STUDIO CONTROLLO DI GESTIONE DELLO STUDIO Con il controllo di gestione dello studio il commercialista può meglio controllare le attività svolte dai propri collaboratori dello studio nei confronti dei clienti

Dettagli

Il descrittore di processo (PCB)

Il descrittore di processo (PCB) Il descrittore di processo (PC) Il S.O. gestisce i processi associando a ciascuno di essi un struttura dati di tipo record detta descrittore di processo o Process Control lock (PC) Il PC contiene tutte

Dettagli

Matlab: Gestione avanzata dei file

Matlab: Gestione avanzata dei file Matlab: Gestione avanzata dei file Informatica B File 2 Contenitori di informazione permanenti Sono memorizzati su memoria di massa Possono continuare ad esistere indipendentemente dalla vita del programma

Dettagli

Il Sistema Operativo

Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al meglio le risorse del Sistema

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ&

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ& (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ& 3ULPRHVHUFL]LR6RFNHWVWUHDPFRQULGLUH]LRQH Si progetti un applicazione distribuita Client/Server per una rete di workstation UNIX (BSD oppure System V). In particolare,

Dettagli

Esercitazione finale per il corso di Sistemi Operativi (A.A. 2004/2005)

Esercitazione finale per il corso di Sistemi Operativi (A.A. 2004/2005) Esercitazione finale per il corso di Sistemi Operativi (A.A. 2004/2005) Descrizione dell esercitazione L esercitazione consiste nell implementare un semplice gestore di aste attraverso il quale gli utenti

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli