ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX"

Transcript

1 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 al Politecnico di Torino negli anni scorsi. Si è cercato di scegliere esercizi che privilegiassero l utilizzo delle system calls Unix, a discapito di quelli che, invece, fossero più basati sul corretto utilizzo della programmazione in C, utilizzando notevoli porzioni di testo tramite funzioni e istruzioni già viste nel corso di Fondamenti di Informatica.

2 Funzioni di Libreria C di Unix!"Duplicazione di un processo chiamante Int figlio Figlio=fork() La funzione fork() genera un processo figlio avente le stesse caratteristiche del padre, è cioè una funzione che stabilisce relazioni di tipo gerarchico. Il figlio eredita tutte le caratteristiche del padre, pur restandone distinto e potendo evolversi indipendentemente. Il risultato delle funzione fork() è il descrittore del figlio, pertanto, se tale valore è pari a 0, vuol dire che il processo figlio è stato creato correttamente (in valore minore di 0 vuole dire che la fork ha fallito l esecuzione) e, utilizzando la seguente sequenza di istruzioni If(figlio==0).... posso specificare una sequenza di istruzioni che deve eseguire solo il figlio Nello stesso modo, posso indicare il processo padre come segue: If(figlio==0) Codice relativo al figlio Codice relativo al padre Ho ovviamente supposto che la fork abbia fornito risultato positivo, altrimenti la non funziona correttamente, comprendendo fra le parentesi graffe anche l erronea esecuzione della fork (figlio <0) Dopo la fork() persistono due processi: il padre ed il figlio. Si ricorda che, qualora debba eseguire due fork, perché, ad esempio, il padre genera 2 figli, non posso eseguire le due fork una dopo l altra, altrimenti perdo il descrittore del processo padre che ha generato al fork.!"apertura di files già presenti su memoria di massa Int fd, flags Char *nome Fd=open(nome,flags) nome rappresenta il nome del file, flags rappresenta la modalità di apertura dello stesso, cioè R(read), W(write) e R/W(read write) e fd rappresenta il descrittore del file. Si ricorda che, come è prassi nel linguaggio C, il valore restituito dalla funzione open in fd vale 0 se il file viene aperto correttamente.

3 !"Creazione di un file int fd, perm char *nome fd=creat(nome,perm) perm rappresenta le modalità di protezione con cui viene creato un file. Normalmente il parametro formale perm viene passato tramite un numero intero, definito nella sezione #define PERM.. Affinché il programma associ correttamente a tale intero bisogna includere la libreria standard <fcntl.h> Si ricorda che, come è prassi nel linguaggio C, il valore restituito dalla funzione in fd vale 0 se il file viene creato correttamente.!"lettura di un file letto=read(fd,buf,n) int fd, n, letto char *buf fd rappresenta il descrittore del file (ovviamente già aperto o, eventualmente, creato), n è il numero di byte da leggere, mentre buf rappresenta l area di memoria su cui depositare il file. Se indichiamo al posto di fd il numero intero 0, vuol dire che la funzione legge dallo standard I/O, cioè dalla tastiera. Si ricorda che, come è prassi nel linguaggio C, il valore restituito dalla funzione rappresenta il numero di caratteri letti (quindi deve essere pari ad n).!"chiusura di un file int fd, fine fine=close(fd) Tale funzione restituisce valore 0 se il file, identificato da fd, viene chiuso correttamente. Qualora restituisca un valore <0 vuol dire che il file era già stato chiuso.!"scrittura di un file scritto=write(fd,buf,n) int fd, n, scritto char *buf tale funzione è ovviamente la duale di quella di lettura, preleva n dati da buf e li scrive sul file descritto da fd. Lo standard I/O, cioè il video o la stampante, viene indicato con il numero intero 1. Si ricorda che, come è prassi nel linguaggio C, il valore restituito dalla funzione rappresenta il numero di caratteri scritti (quindi deve essere pari ad n).!"comunicazione fra processi: la pipe ret=pipe(canale) int ret, canale[2]

4 L uso delle pipe consente di sincronizzare due processi in relazione gerarchica fra loro, creando un meccanismo di comunicazione accessibile in lettura da una parte e in scrittura dall altra. La sincronizzazione è garantita dal fatto che la pipe si blocca in lettura se è vuota, mentre si blocca in scrittura se è piena. Canale[0] identifica che la pipe è aperta in lettura, quindi un processo può leggere dalla pipe. Canale[1] identifica che la pipe è aperta in scrittura, quindi un processo può scrivere sulla pipe. In altre parole canale[0] e canale[1] rappresentano 2 file, sincronizzati dalla pipe, di cui uno accessibile solo in lettura, l altro solo in scrittura.!"segnali di sincronizzazione signal (tiposegnale,func) pause() La funzione signal predispone il sistema alla ricezione di un segnale di tipo tiposegnale, fornendone la risposta tramite la funzione func. Qualora arrivi un segnale, il processo risponde tramite la func. I segnali di Unix sono contenuti nella libreria standard <signal.h>. La funzione pause() sospende il processo in attesa dell arrivo di un segnale. kill (identificatore,tiposegnale) La funzione kill consente ad un processo di inviare al processo identificato da identificatore un segnale di tipo tiposegnale. Si ricorda l uso delle funzioni di libreria identificatore=getpid(), con cui un processo può conoscere il suo descrittore e la funzione identificatore=getppid(), con cui un processo può conoscere il descrittore del processo padre.!"uscita da un processo Int status void=exit(status) Il processo termina e comunica attraverso il parametro status la sua terminazione (0 tutto OK, -1 terminazione erronea) La terminazione di un processo può servire per comunicare il parametro ad un altro processo che è in attesa della stessa.!"attesa della terminazione di un processo Int status, fd fd=wait(&status) Nel parametro fd viene restituito il descrittore del file che è terminato, poiché ha comunicato al processo chiamante il suo stato di terminazione (status) La funzione wait è sospensiva e predispone il processo chiamante all attesa della terminazione di un altro processo. Quest ultimo, tramite la funzione exit(status), può comunicare la sua terminazione e sbloccare il processo chiamante.

5 Esercizio 1: Si scriva un programma C per ambiente Unix tale che venga emulata una struttura di processi organizzati master-slave; si supponga di dover gestire 3 slave. Ogni slave deve mandare un segnale di tipo SIGUSR1 al master; tale messaggio può essere mandato solo previa autorizzazione del master mediante un segnale di tipo SIGUSR2. Quando il master ha ricevuto tutti e tre i messaggi, uccide gli slave con un messaggio di tipo SIGKILL. La logica del programma è la seguente: a) Ogni slave deve inviare la master un segnale di tipo sigusr1(sincronizzazione) b) Tale messaggio può essere inviato solo dopo che il master ha autorizzato lo slave tramite un segnale di tipo sigusr2 (sincronizzazione) c) Quando il master ha ricevuto tutti e tre i messaggi, uccide (cioè fa terminare ) i tre processi slave (da lui generati!!!), tramite un segnale di di tipo sigkill #include <stdio.h> #include <signal.h> void func1(void); void func2(void); void func1() \*predisposizione di risposta al segnale inviato dallo slave*\ printf( ho ricevuto un messaggio dallo slave \n ); void func2() \*predisposizione di risposta al segnale inviato dal master*\ printf( ho ricevuto un messaggio dal master \n ); main() Int pid1, pid2, pid3 pid1=fork(); \* il processo chiamante genera il primo slave *\ If(pid1==0) \* se primo slave *\ signal (sigusr2,func2); \*se arriva un segnale di tipo sigusr2, rispondo con *\ \* func2 *\ pause (); \*attendo un segnale*\ kill (getppid(),sigusr1); \*invio un segnale sigusr2 al padre *\ pause() \*attendo un segnale*\ pid2=fork(); \* il processo chiamante genera il secondo slave *\ If(pid2==0) \* se secondo slave *\ signal (sigusr2,func2); pause (); kill (getppid(),sigusr1); pause()

6 pid3=fork() \* genero il terzo slave *\ If(pid3==0) \* se terzo slave*\ signal (sigusr2,func2); pause (); kill (getppid(),sigusr1); pause() \*processo padre (master)*\ signal (sigusr1,func1) \*predispongo la risposta al sigusr1*\ kill (pid1,sigusr2) \*invio sigusr2 al primo slave*\ pause() \*resto in attesa di una risposta*\ signal (sigusr1,func1) \*predispongo la risposta al sigusr1*\ kill (pid2,sigusr2) \*invio sigusr2 al secondo slave*\ pause() \*resto in attesa di una risposta*\ signal (sigusr1,func1) \*predispongo la risposta al sigusr1*\ kill (pid3,sigusr2) \*invio sigusr2 al terzo slave*\ pause() \*resto in attesa di una risposta*\ kill (pid1, sigkill); \*uccido il primo slave*\ kill (pid2, sigkill); \*uccido il secondo slave*\ kill (pid3, sigkill); \*uccido il terzo slave*\ Exit(0); \*termino regolarmente*\

7 Esercizio 2 La logica del programma è la seguente: a) Il processo 1 deve leggere 5 caratteri da tastiera b) Deve mettere (scrivere) tali caratteri nella mailbox (mail2.txt) c) Deve avvisare il processo 2 tramite un segnale di tipo sigusr1 Il processo 2 deve a) Leggere la posta b) Invertire l ordine dei caratteri c) Inserire la stringa invertita nella mailbox mail1.txt #include <signal.h> #include <stdio.h> #include <fcntl.h> #define PERM 0766 void func (void) void func() printf( ho inserito un messaggio nella mailbox\n ); main() int fd1,fd2,pid,buf1[5],buf2[5],i,j,status; fd1=creat( mail1.txt,perm); \* creo i file su cui depositare i dati*\ fd2=creat( mail2.txt,perm); Pid=fork(); \*genero il figlio*\ If(pid==0) \*il processo figlio*\ read(0,buf1,5); \*legge 5 caratteri da tastiera (0) e li deposita sul *\ \* buf1*\ write (fd2,buf1,5); \*scrive tali caratteri sul file mail2.txt *\ kill(getppid(),sigusr1); \*invio un segnale di sincronizzazione la padre *\ close(fd2) \* chiudo il file mail2.txt *\ wait(&status)); \*il processo resta in attesa della terminazione *\ \* del secondo*\

8 Else \* padre*\ signal (sigusr1,func); \*predispongo la risposta al segnale*\ pause(); \*resto in attesa di un segnale*\ fd2=open ( mail2.txt,o_rdonly); \*apro il file mail2.txt in sola lettura*\ read (fd2,buf1,5); \* leggo il contenuto e lo deposito su buf1*\ j=4; for(i=0,i<5,i++) buf2[j]=buf1[i]; \* inverto i caratteri inserendoli in buf2*\ j=j-1; close(fd2); \* chiudo il flie*\ write (fd1,buf2,5); \* scrivo sulla mail1.txt*\ close (fd1); \* chiudo il file mail1.txt *\ exit(0); \*esco e comunico la terminazione regolare (0) *\

9 Esercizio 3: Si scriva un programma C per ambiente Unix tale che venga realizzata una struttura padre-figlio. Il processo padre, ogni 5 secondi, manda un segnale di tipo sigusr1 al figlio e poi si sospende in attesa di una risposta dal figlio stesso. Il figlio, ricevuto il segnale, legge un carattere da tastiera. Se il carattere è q o Q il figlio invierà al recesso padre un messaggio di tipo sigkill e poi terminerà, altrimenti, manda al padre un messaggio di tipo sigusr2 che lo sblocca. La logica del programma è la seguente: il padre: ogni 5 secondi invia un segnale di tipo sigusr2 e attende una risposta dal figlio il figlio: a) Resta in attesa del segnale; b) legge da tastiera un carattere; c) se il carattere è q o Q uccide il padre e poi termina, altrimenti gli invia un segnale che lo sblocca #include <signal.h> #include <stdio.h> #define timeout 5 void func1 (void) void func1() printf( ho ricevuto un messaggio\n ); main() int pid, status,buf[1] status =1; pid=fork(); if(pid!=0) do while (status=1) \* genero il figlio*\ \* processo padre*\ kill (pid=0, sigusr1); sleep (timeout); wait (&status); signal(sigusr1,func1); pause(); read (0,buf,1); if((buf== q )//(buf== Q )) kill(getppid,sigkill); exit(-1);

10 exit(0);

11 Esercizio 4 #define PERM 0600 #include<fcntl.h> main() int I, j, pid, canale[2], tab[10], status, fd pipe (canale); \* genero la pipe *\ pid=fork(); \* genero il processo figlio *\ if(pid!=0) \* processo padre*\ close (canale[0]); \* chiudo la pipe in lettura*\ i=3; for (j=0,j<10,j++) \* genero la tabellina del 3*\ tab[j]=i; i=i+3; write(canale[1],tab,10]; \* scrivo sulla pipe *\ wait(&status); \* attendo la terminazione del figlio*\ \* processo figlio *\ close(canale[1]); \* chiudo la pipe in scrittura*\ fd=creat( tab_3.txt,perm); \*creo il file *\ read (canale[0],tab,10); \* leggo la pipe *\ write (fd,tab,10); \*scrivo sul file *\ close(fd); \* chiudo il file *\ exit(0); \* comunico la terminazione *\

12 Esercizio 5 main() int I, j, pid, canale1[2], canale2[2], tab[10], somma [1], status, valore, pipe (canale1); \* genero la prima pipe *\ pipe (canale2); \* genero la seconda pipe *\ pid=fork(); \* genero il processo figlio *\ if(pid>0) for (i=0;i<10,i++) \* processo padre*\ valore =rand(); \*genero il valore casuale*\ tab[i]=valore; \*scrivo il valore su tab[i] *\ \* chiudo la pipe1 in lettura*\ \* chiudo la pipe2 in scrittura*\ close (canale1[0]); close (canale2[1]); write(canale1[1],tab,10); \* scrivo sulla pipe 1 *\ wait(&status); \* attendo la terminazione del figlio*\ read(canale2[0],somma,1); \* leggo dalla pipe 2 la somma*\ exit(0); \*processo figlio *\ close (canale1[1]); close (canale2[0]); somma[0]=0; read(canale1[0],tab,10); for (j=0;j<10,j++) write (canale2[1],somma,1]); exit(0); somma[0]=somma[0]+tab[j]; \* chiudo la pipe1 in scrittura*\ \* chiudo la pipe2 in lettura*\ \*inizializzo la somma*\ \* leggo dalla pipe 1 la tabella*\ \*genero la somma*\ \*scrivo la somma sulla pipe2*\ \* comunico la terminazione*\

13 Esercizio 6 Si scriva un programma C per ambiente Unix in cui il padre crea due processi figli. Il primo figlio legge 5 caratteri da tastiera e li passa al secondo, che, al termine, invia la fratello un messaggio di avvenuta ricezione. Il padre aspetta la terminazione dei figli e segnala l ordine con cui terminano. #include <signal.h> #include <stdio.h> void func1 (void) void func1() printf( ho ricevuto un messaggio\n ); main() int figlio1, figlio2, figlio, canale[2], tab[5], status pipe (canale1); \* genero la pipe *\ figlio1=fork(); \* genero il primo processo figlio *\ if(figlio1<0) printf( fork fallita\n ); \*segnalo l errore sulla fork*\ exit(-1); if(figlio1==0) \*primo figlio*\ close(canale[0]); \* chiudo la pipe1 in lettura*\ read(0,tab,5); \*leggo 5 caratteri da tastiera (0) e li *\ \*deposito su tab*\ write (canale[0];),buf1,5); \*scrivo sulla pipe*\ signal(sigusr1,func1); \*predispongo la ricezione del *\ \*segnale*\ pause(); \*resto in attesa*\ exit(0); \*esco regolarmente*\ \*codice del padre*\ figlio2=fork(); \* genero il secondo processo figlio *\ if(figlio2<0) printf( fork fallita\n ); \*segnalo l errore sulla fork*\ exit(-1); if (figlio2==0) \*secondo figlio*\ close(canale[1]); \* chiudo la pipe1 in scrittura*\ read(canale[0],tab,5); \*leggo 5 caratteri dalla pipe e li *\ \*deposito su tab*\ kill(figlio1,sigusr1); \*invio il segnale al primo figlio*\

14 exit(0); \* padre*\ figlio=wait(&status); \*aspetto la terminazione*\ if(figlio==figlio1) \ha terminato il primo figlio*\ printf( ha terminato il primo figlio\n ); if (figlio==figlio2) printf( ha terminato il secondo figlio\n ); wait(&status); printf(ha terminato anche l altro figlio\n );

15 Esercizio 7 La logica del programma è la seguente: a) il padre legge 2 numeri da tastiera b) passa il primo numero al figlio che calcola il fattoriale. c) Il figlio restituisce il risultato al padre, che gli passa il secondo numero d) Mentre il figlio calcola il fattoriale il padre scrive il primo risultato sul file fattorial.txt, creato con permessi e) Il figlio passa il secondo risultato al padre che lo scrive sul file fattorial.txt. #define PERM 0666 #include <stdio.h> main() int figlio, canale1[2], canale2[2], num1[1], num2[1], fat1[1], fat2[1], fd, i pipe (canale1); \* genero la prima pipe *\ pipe (canale2); \* genero la seconda pipe *\ figlio=fork(); \* genero il primo processo figlio *\ if(figlio<0) printf( fork fallita\n ); \*segnalo l errore sulla fork*\ exit(-1); if(figlio>0) \processo padre*\ close (canale1[0]); \* chiudo la pipe1 in lettura*\ close (canale2[1]); \* chiudo la pipe2 in scrittura*\ read (0,num1,1) \leggo da tastiera il primo numero*\ read (0,num2,1) \leggo da tastiera il secondo numero*\ write(canale1[1],num1,1); \* scrivo sulla pipe 1 il primo numero*\ read(canale2[0],fat1,1); \* leggo dalla pipe 2 il primo risultato*\ write(canale1[1],num2,1); \* scrivo sulla pipe 1 il secondo numero*\ fd=creat ( fattorial.txt,perm); \creo il file su cui depositare i dati*\ write(fd,fat1,1); \*scrivo il primo risultato *\ read(canale2[0],fat2,1); \* leggo dalla pipe 2 il secondo risultato*\ write(fd,fat2,1); \*scrivo il secondo risultato *\ close(fd) \*chiudo il file aperto*\ exit(0) \*termino regolarmente*\ \*figlio*\ close (canale2[0]); \* chiudo la pipe2 in lettura*\ close (canale1[1]); \* chiudo la pipe1 in scrittura*\

16 read (canale1[0],num1,1) \leggo da pipe1 il primo numero*\ fat1[0]=num1[0] \*calcolo il primo fattoriale *\ for(i=1,i<num1[0], i++) fat1[0]=fat1[0]*(num1[0]-i); write(canale2[1],fat1,1); \* scrivo sulla pipe 2 il primo fattoriale*\ read (canale1[0],num2,1) \leggo da pipe1 il secondo numero*\ fat2[0]=num2[0] \*calcolo il secondo fattoriale *\ for(i=1,i<num2[0], i++) fat2[0]=fat2[0]*(num2[0]-i); write(canale2[1],fat2,1); \* scrivo sulla pipe 2 il secondo fattoriale*\ exit(0) \*termino regolarmente*\

17 Esercizio 8 #include <stdio.h> const K 6 const X 0.5 int fatt(int ) int potenza (int,int) main() int figlio1, figlio2, canale1[2], canale2[2], somma1[3], somma2[3], i, j, somma[1] pipe (canale1); \* genero la prima pipe *\ pipe (canale2); \* genero la seconda pipe *\ figlio1=fork(); \* genero il primo processo figlio *\ if(figlio1<0) printf( fork fallita\n ); \*segnalo l errore sulla fork*\ exit(-1); if(figlio1==0) \primo figlio*\ close(canale1[0]); \*chiudo pipe1 in lettura*\ j=1 for(i=0, i<(k/2), i++) \*calcolo i primi tre termini della somma*\ somma1[i]=(potenza(x,(2*j-1)))/fatt((2*j-1)); write(canale1[1],somma1,1); j=j+2 exit(0); figlio2=fork(); if(figlio2<0) printf( fork fallita\n ); \*scrivo sulla pipe1*\ \*processo padre\* \*genero il secondo figlio*\ \*segnalo l errore sulla fork*\

18 exit(-1); if(figlio 2==0) \*secondo figlio *\ close(canale2[0]); \*chiudo pipe2 in lettura*\ j=2 for(i=0, i<(k/2), i++) \*calcolo i secondi tre termini della somma*\ somma2[i]=-(potenza(x,(2*j-1)))/fatt((2*j-1)); write(canale2[1],somma2,1); \*scrivo sulla pipe2*\ j=j+2 exit(0); \*padre*\ close(canale1[1]); \*chiudo pipe1 in scrittura*\ close(canale2[1]); \*chiudo pipe2 in scrittura*\ read (canale1[1],somma1,3); read (canale2[1],somma2,3); somma =0; for(i=0,i<3,i++) somma[0] =somma[0] +somma1[i]; for(i=0,i<3,i++) somma[0] =somma[0] +somma2[i]; write(1,somma,1); exit(0); int fatt(int n) if(n==0) fatt=1; fatt=n*fatt(n-1); return fatt int potenza(int base, int esponente) if(esponente==0) potenza=1; potenza=base*potenza(base, esponente-1); return potenza

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

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

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

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

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

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

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

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

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

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

Sistemi Operativi. 7 Gestione dei processi in Unix

Sistemi Operativi. 7 Gestione dei processi in Unix Gestione dei processi in Unix Creazione e terminazione dei processi: fork: crea un nuovo processo duplicando il processo chiamante exec: attiva l esecuzione di un programma memorizzato in un file eseguibile.

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

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

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

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

Le system call: fork(), wait(), exit()

Le system call: fork(), wait(), exit() Le system call: fork(), wait(), exit() Di seguito viene mostrato un programma che fa uso di puntatori a funzione, nel quale si mette in evidenza il loro utilizzo. Programma A1 #include int add(a,b,c)

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

POSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it

POSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it POSIX - Gestione dei Segnali E.Mumolo, DEEI mumolo@units.it Segnali in POSIX Segnali in Posix Modalità di notifiche relative a vari eventi asincroni I signal interrompono un processo e possono o meno essere

Dettagli

Sistemi Operativi Teledidattico

Sistemi Operativi Teledidattico Sistemi Operativi Teledidattico Anno 2002 3a esercitazione 5/10/2002 Paolo Torroni processi fork (creazione di un figlio) exec (sostituzione di codice del programma in esecuzione) wait (attesa della terminazione

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 L-A. Esercizi 14 Giugno 2007. Esercizio monitor

Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione

Dettagli

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

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria October 10, 2009 Sincronizzazione - 1 1 Esercizio 1: Sincronizzazione - 1 Qual è il problema

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

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

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

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

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

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

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

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread Terza Esercitazione Unix System Call Exec Java Introduzione Thread Stefano Monti smonti@deis.unibo.it Unix - Esercizio 1 Scrivere un programma C con la seguente interfaccia:./compilaedesegui

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

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

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 Modulo II I semafori 2 Select

Sistemi operativi Modulo II I semafori 2 Select Il sistema operativo LINUX Semafori 2 Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica La system call read è bloccante Non

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

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi Laboratorio di Sistemi Operativi Segnali a.a. 2011/2012 Francesco Fontanella Segnali - Introduzione I segnali sono interrupt software a livello di processo comunicano al processo il verificarsi di un evento

Dettagli

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Elettrica, e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

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

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

Esercizi di programmazione in C

Esercizi di programmazione in C Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal

Dettagli

Elementi di Architettura e Sistemi Operativi

Elementi di Architettura e Sistemi Operativi Elementi di Architettura e Sistemi Operativi Bioinformatica - Tiziano Villa 15 Giugno 2015 Nome e Cognome: Matricola: Posta elettronica: problema punti massimi i tuoi punti problema 1 4 problema 2 6 problema

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

Sistemi Operativi T. Esercizi

Sistemi Operativi T. Esercizi Sistemi Operativi T Esercizi Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione concorrente

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

Sistemi Operativi: Programmazione di Sistema

Sistemi Operativi: Programmazione di Sistema Corso di Sistemi Operativi: Programmazione di Sistema Corso di Laurea in Informatica, Università di Firenze Anno accademico 2011/2012 Prof. Luca Ferrari e-mail: ferrari@dsi.unifi.it telefono: 055 4237454

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Il sistema operativo LINUX Indice

Il sistema operativo LINUX Indice Il sistema operativo LINUX Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica Processo Un processo è un programma in esecuzione:

Dettagli

Corso di Laboratorio di Sistemi Operativi

Corso di Laboratorio di Sistemi Operativi Corso di Laboratorio di Sistemi Operativi Lezione 5 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Processi in Unix Approfondimenti: http://gapil.gnulinux.it/download/

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 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

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

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

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

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...

Dettagli

Esercitazione 3. Corso di Fondamenti di Informatica

Esercitazione 3. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 3 Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

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

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

Operazioni di input e output in Fortran 90

Operazioni di input e output in Fortran 90 Operazioni di input e output in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: file e formattazione DIS - Dipartimento di informatica

Dettagli

Fondamenti di Informatica T. Linguaggio C: File

Fondamenti di Informatica T. Linguaggio C: File Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 5

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 5 UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 5 1 Segnali Vi sono spesso eventi importanti

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

Drivers. Introduzione Tipologie Struttura Interazione con il kernel

Drivers. Introduzione Tipologie Struttura Interazione con il kernel Drivers Introduzione Tipologie Struttura Interazione con il kernel Driver Un driver è un modulo del sistema operativo Esterno al kernel Dedicato alla gestione di una specifica periferica Come altre funzionalità

Dettagli

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C CORSO DI LABORATORIO DI INFORMATICA CORSO DI LAUREA IN SDM ANNO ACCADEMICO 2011-2012 Docente: R. Sparvoli Esercitazioni: R. Sparvoli, F. Palma OTTAVA ESPERIENZA DI LABORATORIO L elaborazione dei files

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

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

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

Introduzione al linguaggio C Gli array

Introduzione al linguaggio C Gli array Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome

Dettagli

Unix e GNU/Linux Eugenio Magistretti emagistretti@deis.unibo.it Prima Esercitazione Fork Stefano Monti smonti@deis.unibo.it Unix: sviluppato negli anni '60-'70 presso Bell Labs di AT&T, attualmente sotto

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

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

Lab 11 Gestione file di testo"

Lab 11 Gestione file di testo Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 11 Gestione file di testo" Lab15 1 Esercizio 1 n Realizzare un programma che, aperto un file di testo di nome

Dettagli

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Linguaggio C - Stringhe

Linguaggio C - Stringhe Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - Stringhe La presente dispensa e da utilizzarsi ai

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

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

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni. Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni

Dettagli

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it INTRODUZIONE, LINGUAGGIO, HANDS ON Giuseppe Cirillo g.cirillo@unina.it Il linguaggio C 1972-Dennis Ritchie 1978-Definizione 1990-ANSI C 1966 Martin Richars (MIT) Semplificando CPL usato per sviluppare

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

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

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

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni Anno Accademico 2011/2012 Segnali: Interrupt software per la gestione di eventi asincroni Concetto di segnale Un segnale è un interrupt software Un segnale può essere generato da un processo utente o dal

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

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 NOTA: Si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main. Inoltre, nei programmi è da sottintendere

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

Gestione dei File. dischi nastri cd

Gestione dei File. dischi nastri cd Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione

Dettagli

ZZZ01 Esercizi Vari. Esercizi per preparazione alla prova pratica di laboratorio

ZZZ01 Esercizi Vari. Esercizi per preparazione alla prova pratica di laboratorio ZZZ01 Esercizi Vari Esercizi per preparazione alla prova pratica di laboratorio Esercizio ZZZ01_01 - Elefanti Schizzinosi Nella savana africana c'e' una pozza d'acqua fresca alimentata da un acquedotto.

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

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

ASPETTI GENERALI DI LINUX. Parte 2 Struttura interna del sistema LINUX

ASPETTI GENERALI DI LINUX. Parte 2 Struttura interna del sistema LINUX Parte 2 Struttura interna del sistema LINUX 76 4. ASPETTI GENERALI DEL SISTEMA OPERATIVO LINUX La funzione generale svolta da un Sistema Operativo può essere definita come la gestione dell Hardware orientata

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

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

Caratteri e stringhe Esercizi risolti

Caratteri e stringhe Esercizi risolti Esercizi risolti 1 Esercizio: Conta vocali e consonanti Scrivere un programma in linguaggio C che legga una frase introdotta da tastiera. La frase è terminata dall introduzione del carattere di invio.

Dettagli

Segnali. Un segnale e' un interrupt software. La terminologia corretta e' exception mentre interrupt e' usata solo per gli interrupt hardware

Segnali. Un segnale e' un interrupt software. La terminologia corretta e' exception mentre interrupt e' usata solo per gli interrupt hardware Segnali ed allarmi Contiene lucidi tratti da: 2005-2007 Marco Faella, Clemente Galdi, Giovanni Schmid (Univrsità di Napoli Federico II) 2005-2007 Francesco Pedulla, Massimo Verola (Uniroma2), 2001-2005

Dettagli

Gestione dei processi

Gestione dei processi Capitolo 1 Gestione dei processi 1.1 Creazione di un processo I principali eventi che possono dare luogo ad un nuovo processo sono: inizializzazione del sistema; esecuzione di una primitiva di sistema

Dettagli

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Fondamenti di Informatica 2 della prova scritta del 28 Febbraio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int min = 3; int i; Scrivere la porzione di codice

Dettagli