Esercitazione n. 8. Processi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esercitazione n. 8. Processi"

Transcript

1 Esercitazione n. 8 Processi (in ambiente GNU/Linux) dott. Carlo Todeschini tode@cremona.polimi.it Politecnico di Milano A.A. 2010/2011 Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.5 Italia

2 Gestione dei processi: ripasso... In computing, a process is an instance of a computer program that is being sequentially executed by a computer system that has the ability to run several computer programs concurrently. A computer program itself is just a passive collection of instructions, while a process is the actual execution of those instructions. Several processes may be associated with the same program. A process may split itself into multiple daughter subprocesses or threads that execute in parallel, running different instructions on much of the same resources and data or the same instructions on logically different resources and data. Fonte: Wikipedia Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 2

3 Gestione dei processi: ripasso... Stati di un processo: Esempi? Fonte: Wikipedia Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 3

4 Gestione dei processi: ripasso... Alcuni comandi utili (shell in ambiente Linux): ps report a snapshot of the current processes es: $ ps aux top display Linux tasks es: $ top ('q' o <CTRL C> per uscire) es: $ top p <PID1> p <PID2> p <PID3> es: premere 'H' per visualizzare i thread pstree display a tree of processes es: $ pstree a kill send a signal to a process es: $ kill 9 <PID> Esempi? Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 4

5 Gestione dei processi: ripasso... Per creare un processo figlio identico al processo padre si utilizza la funzione fork: #include <sys/types.h> #include <unistd.h> pid_t fork(void); Tutti i segmenti del padre sono duplicati nel figlio al momento della fork Nel processo padre la funzione fork ritorna come valore il PID del figlio mentre nel processo figlio la funzione ritorna 0; in caso di errore ritorna -1 Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 5

6 Gestione dei processi: ripasso... Un processo termina la propria esecuzione con la funzione exit: #include <stdlib.h> void exit(int status); Ritorna al processo chiamante il valore status che, per essere correttamente visualizzato/utilizzato, deve essere diviso per 256. Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 6

7 Gestione dei processi: ripasso... #include <stdio.h> #include <stdlib.h> main( ) pid_t pid; pid = fork (); Start #include <stdio.h> #include <stdlib.h> main( ) pid_t pid; pid = fork (); if ( pid == 0 ) printf ("Sono il processo figlio\n"); exit (0); else printf ("Sono il processo padre\n"); exit (0); /* non necessaria */ if ( pid == 0 ) printf ("Sono il processo figlio\n"); exit (0); else printf ("Sono il processo padre\n"); exit (0); /* non necessaria */ Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 7

8 C/Processi e file Problema Si vuole realizzare un programma in linguaggio C in grado di: Generare due processi padre/figlio in cui: Il processo padre scrive la sequenza di caratteri [A-Z][a-z] in un file di testo (aperto prima di eseguire la fork) e successivamente chiude e rimuove il file creato Il processo figlio attende 5 secondi (tramite la funzione sleep (num_secs) ) e stampa il contenuto del file precedentemente gestito dal processo padre Evidenziare le problematiche di una gestione di questo tipo... Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 8

9 C/Processi e file Codice sorgente #include <stdio.h> #include <stdlib.h> main () pid_t pid; int i; char c; FILE *textfile; // si apre il file in scrittura textfile = fopen ( "test.txt", "w+" ); if ( textfile!= NULL ) // si richiama la funzione fork per creare un figlio pid = fork (); es_processi_e_file.c Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 9

10 C/Processi e file Codice sorgente if ( pid == 0 ) // quello che segue è il codice eseguito dal figlio // si attendono alcuni secondi per dare tempo al processo // padre di terminare la propria esecuzione printf ("[figlio] Attendo 5 secondi...\n"); sleep ( 5 ); // si stampa la posizione attuale del cursore sul file // si noterà che è posizionato alla fine del file... printf ("\n[figlio] Posizione attuale puntatore file: %ld\n", ftell(textfile) ); // si riporta all'inizio il cursore rewind ( textfile ); // si stampa il contenuto testuale del file, carattere // per carattere printf ("[figlio] Stampo contenuto del file di testo:\n"); c = fgetc ( textfile ); while (! feof ( textfile ) ) printf ("%c", c); c = fgetc ( textfile ); printf ("\n"); // si chiude il file aperto e si esce dal processo printf ("[figlio] Chiudo il file ed esco.\n"); fclose ( textfile ); exit ( 0 ); // si nota che, nonostante il processo padre abbia già // cancellato il file, il processo figlio è comunque in // grado di leggerne il contenuto! Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 10

11 C/Processi e file Codice sorgente else // segue il codice eseguito dal processo padre // si inseriscono alcuni caratteri nel file di testo printf ("[padre] Inserimento dei caratteri [A-Z][a-z] nel file\n"); for ( i=65 ; i<=90 ; i++ ) fputc ( i, textfile ); for ( i=97 ; i<=122 ; i++ ) fputc ( i, textfile ); // si stampa la posizione attuale del cursore sul file printf ("[padre] Posizione attuale puntatore file: %ld\n", ftell(textfile) ); // si chiude il file aperto e lo si cancella dal filesystem printf ("[padre] Chiudo il file e lo cancello\n"); fclose ( textfile ); remove ( "test.txt" ); else printf ("Errore! Non è stato possibile aprire il file.\n"); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 11

12 Gestione dei processi: ripasso... Per attendere la terminazione di un qualsiasi processo figlio, il processo chiamante utilizza la funzione wait: #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); Il processo chiamante riceve il valore del PID del processo figlio terminato. La variabile status contiene il valore di terminazione impostato dalla funzione exit() del figlio. Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 12

13 Gestione dei processi: ripasso... E' possibile attendere la terminazione di un determinato processo, conoscendone il PID, tramite la funzione waitpid: #include <sys/types.h> #include <sys/wait.h> pid_t waitpid (pid_t pid, int *status, int options); Il processo chiamante riceve il valore del PID del processo figlio terminato e in status il valore di terminazione del figlio. Con il parametro opzioni si può specializzare la funzione (v. man waitpid ). Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 13

14 Gestione dei processi: ripasso... E' possibile ottenere il proprio PID con la funzione getpid e il PID del processo chiamante con la funzione getppid: #include <sys/types.h> #include <unistd.h> pid_t getpid(void); pid_t getppid(void); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 14

15 C/Processi in attesa Problema Si vuole realizzare un programma in linguaggio C in grado di: Generare due processi padre/figlio in cui: Il processo padre attende la terminazione dei compiti assegnati al processo figlio Il processo figlio stampa a standard output il proprio PID e il PID del padre Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 15

16 C/Processi in attesa Codice sorgente /* Questo programma deve: - generare due processi padre/figlio in cui: - il processo padre attende la terminazione dei compiti assegnati al processo figlio - il processo figlio stampa a standard output il proprio PID e il PID del padre */ #include <stdio.h> #include <stdlib.h> main () pid_t pid; int status; // si richiama la funzione fork per creare un figlio pid = fork (); es_processi_e_attese.c Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 16

17 C/Processi in attesa Codice sorgente if ( pid == 0 ) // quello che segue è il codice eseguito dal figlio // si stampano a STDOUT le informazioni richieste printf ("[figlio] Il mio PID è %d e quello del processo che mi ha invocato è %d\n", getpid(), getppid() ); // si produce un codice di ritorno exit ( 24 ); else // segue il codice eseguito dal processo padre printf ("[padre] In attesa della terminazione del processo figlio...\n"); // si attende che il processo figlio termini la computazione pid = wait ( &status ); // OK: si sblocca il padre perchè il figlio ha terminato printf ("[padre] Il figlio, con PID %d, ha terminato il lavoro con il seguente codice di ritorno: %d.\n", pid, status/256 ); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 17

18 Gestione dei processi: ripasso... Per mutare il codice di un processo si utilizza la funzione execl: #include <unistd.h> int execl(const char *path, const char *arg0,, const char *argn, NULL); path è il percorso completo del programma (file eseguibile) che deve sostituire il codice del processo che invoca l'istruzione execl; seguono una serie di parametri che vengono passati al programma da eseguire. Nota: vengono sostituiti dal nuovo programma i segmenti codice e dati mentre rimane invariato il segmento di sistema; il processo mantiene il proprio PID. Per approfondimenti v. man exec Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 18

19 C/Processi in attesa random Problema Si vuole realizzare un programma in linguaggio C in grado di: Generare quattro processi in cui: Il processo padre crea due figli e poi si mette in attesa della terminazione di entrambi; prima di uscire stampa i PID dei processi terminati, nell'ordine in cui questi terminano il primo processo figlio muta il proprio codice ed esegue il programma "es_processi_e_attese_random_nuovo_prog"che stampa a standard output i tre parametri ricevuti in input. Il sorgente di tale programma è "es_processi_e_attese_random_nuovo_prog.c" e va compilato prima Il secondo processo figlio crea a sua volta un processo figlio, il terzo, e: Il secondo processo figlio termina subito, senza attendere la terminazione del processo generato Il terzo processo figlio aspetta un numero casuale di secondi (da 0 a 5) prima di terminare (per attendere K secondi si usa la funzione sleep (K) e per generare numeri casuali tra 0 e N-1 si utilizza rand ()%N ) Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 19

20 C/Processi in attesa random Codice sorgente #include <stdio.h> #include <stdlib.h> #include <unistd.h> main () pid_t pid1, pid2, pid3, term1, term2; int stato1, stato2; es_processi_e_attese_random.c es_processi_e_attese_random_nuovo _prog.c // si richiama la funzione fork per creare il primo figlio pid1 = fork (); if ( pid1 == 0 ) // quello che segue è il codice eseguito dal primo figlio printf ("[Primo figlio - PID: %d] Lancio il programma \"es_processi_e_attese_random_nuovo_prog\"\n", getpid()); execl ("es_processi_e_attese_random_nuovo_prog", "es_processi_e_attese_random_nuovo_prog", "Parametro_#1", "Parametro_#2", Parametro_#3", NULL); exit ( -1 ); // il padre procede subito senza aspettare la terminazione del figlio Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 20

21 C/Processi in attesa random Codice sorgente // si chiama ancora la funzione fork per creare il secondo figlio pid2 = fork (); if ( pid2 == 0 ) // quello che segue è il codice eseguito dal secondo figlio printf ("[Secondo figlio - PID: %d] Creo una altro figlio, il terzo\n", getpid()); pid3 = fork (); if (pid3 == 0 ) // quello che segue è il codice eseguito dal terzo figlio printf ("[Terzo figlio - PID: %d] Vado a dormire...\n", getpid()); sleep (rand ()%5); printf ("[Terzo figlio] Svegliato! Termino subito.\n"); exit ( 2 ); exit ( 1 ); // si attende la terminazione dei primi due figli, non si sa in quale ordine term1 = wait ( &stato1 ); term2 = wait ( &stato2 ); // probabilmente terminano i primi due figli, perchè il terzo dorme un po'... printf ("Ordine di terminazione dei primi due figli: 1: %d - 2: %d\n", term1, term2); exit ( 0 ); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 21

22 C/Processi in attesa random Codice sorgente /* */ es_processi_e_attese_random_nuovo_prog.c Questo programma riceve tre parametri in input da linea di comando e li stampa a STDOUT. #include <stdio.h> main ( int argc, char *argv[] ) if ( argc == 4 ) printf ( "Nome del programma: %s\n", argv[0] ); printf ( "Parametro n. 1: %s\n", argv[1] ); printf ( "Parametro n. 2: %s\n", argv[2] ); printf ( "Parametro n. 3: %s\n", argv[3] ); else /* Errore: parametri di input errati */ printf ( "\nutilizzo: %s Par_1 Par_2 Par_3\n\n", argv[0] ); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 22

23 C/Processi per cracker ;-) Problema Si vuole realizzare un programma in linguaggio C che tenti di individuare la password di un utente (password utente di un sistema Unix) sfruttando un dizionario di parole comuni (formato testo, in italiano); deve quindi generare una serie di processi in cui: il processo padre: chiede all'utente di fornire la password cifrata invoca i processi figli assegnando loro un dizionario da caricare (filename) e una parte del dizionario da testare (lettera iniziale) attende la terminazione di tutti i processi figli e stampa l'esito della computazione i processi figli eseguono una mutazione di codice invocando il programma es_password_cracking_crypt passando come parametri: la password criptata, il filename del dizionario, la lettera di competenza. es_password_cracking_crypt stampa un messaggio in caso individui la password originale Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 23

24 C/Processi per cracker ;-) Nota Esempio di file di testo contenente password criptate (/etc/passwd): [ ] tode:cadhajq99wurg:1000:1000:carlo Todeschini,,,:/home/tode:/bin/bash gigi:zuc6b2fgsuy7w:1004:1004:luigi Rossi:/home/gigi:/bin/bash [ ] Nota: oggi non si usa più questa codifica e si utilizza un file accessorio, "/etc/shadow", leggibile solo dall'utente root Es. di dizionario (fonte: [ ] primitivo primizia primiziale primo primogenito primogenitore primogenitrice primogenitura primola primordiale [ ] Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 24

25 C/Processi per cracker ;-) Nota Per semplificare il problema si assume che le password da individuare siano state criptate con l'algoritmo DES, utilizzato fino a pochi anni fa sui sistemi UNIX. In particolare la password si ottiene con la seguente istruzione: cryptedpassword = crypt ( clearpassword, salt ) Dove crypt è il comando di sistema UNIX (v. man crypt) e salt è rappresentato dalla prime due lettere della password in chiaro. Es: crypt ( zufolando, zu ) => zuc6b2fgsuy7w crypt ( Carlo, Ca ) => CaDHaJq99wurg Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 25

26 C/Processi per cracker ;-) Codice sorgente #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define MAX_CHARS 50 #define NUM_CHARS 52 es_password_cracking.c es_password_cracking_crypt.c main () pid_t pid[num_chars], term[num_chars]; int exit_state[num_chars], n; char charlist[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", chartotry[2], cryptedpassword[max_chars], asciifilehandler[max_chars], dictionaryfilename[] = "es_password_cracking_it_dictionary.txt"; /* Inizializzazione di alcune variabili */ n = 0; chartotry[1] = '\000'; Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 26

27 C/Processi per cracker ;-) Codice sorgente /* Si chiede all'utente di inserire la password in forma criptata. L'algoritmo utilizzato è il "crypt" di Unix (v. slide) */ printf ("Inserire la password criptata: "); scanf ("%s", cryptedpassword); while (n < NUM_CHARS) pid[n] = fork (); if ( pid[n] == 0 ) /* figlio: stampa un messaggio informativo e subito esegue una mutazione di codice lanciando il programma "es_password_cracking_crypt"; questo programma è specializzato nell'operazione di generare una serie di password criptate a partire da un dizionario di termini comuni in italiano per verificare se una di queste è la password cercata. Si lanciano tanti processi quante sono le lettere dell'alfabeto che compongono l'iniziale delle parole del dizionario. */ printf ("\nfiglio #%d (con PID = %d) incaricato delle parole che iniziano per '%c'\n", n, getpid(), charlist[n]); chartotry[0] = charlist[n]; execl ("es_password_cracking_crypt", "es_password_cracking_crypt", cryptedpassword, chartotry, dictionaryfilename, NULL); exit ( -1 ); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 27

28 C/Processi per cracker ;-) Codice sorgente else // padre n++; /* Si attende che tutti i processi figli creati portino a termine il compito assegnato; si utilizza la funzione wait e si memorizza il PID del processo terminato e il relativo codice di ritorno. */ for (n = 0; n < NUM_CHARS; n++) term [n] = wait (&exit_state [n]); printf ("\ntutti i processi figli sono terminati!\n\n"); for (n = 0; n < NUM_CHARS; n++) if ((exit_state [n] / 256) <= 3 ) printf ("PID = %d - Valore di ritorno = %d \n", term [n], exit_state [n] / 256); else printf ("Il processo con PID = %d ha trovato che la password inizia per '%c' \n", term [n], exit_state [n] / 256); exit ( 0 ); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 28

29 C/Processi per cracker ;-) Codice sorgente /* es_password_cracking_crypt.c Questo programma riceve in input: - password criptata (v. slide) - iniziale della passwrd da provare - filename del dizionario italiano da caricare Nota: per la compilazione utilizzare gcc -lcrypt -o es_password_cracking_crypt es_password_cracking_crypt.c */ #include <stdio.h> #include <string.h> #include <crypt.h> #include <stdlib.h> #define MAX_STRING 50 int main( int argc, char *argv[] ) char passwordsalt[3], generatedpasswordtotest [MAX_STRING], dictionarypasswordtotest [MAX_STRING], secredpass[max_string], initialchar; FILE *dictionaryfile; Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 29

30 C/Processi per cracker ;-) Codice sorgente if ( argc == 4 ) /* Ok, ci sono tutti i parametri necessari */ /* si apre il file del dizionario */ dictionaryfile = fopen ( argv[3], "r" ); if ( dictionaryfile!= NULL ) /* si inizializzano alcune variabili */ strcpy ( secredpass, argv[1] ); initialchar = *argv[2]; passwordsalt[2] = '\000'; /* lettura dell'intero file delle parole del dizionario */ while (! feof ( dictionaryfile ) ) /* lettura del file riga per riga */ fgets ( dictionarypasswordtotest, MAX_STRING, dictionaryfile ); /* controllo se l'iniziale della parola è quella da gestire */ if ( dictionarypasswordtotest[0] == initialchar ) /* si toglie il carattere di 'a capo' sovrascrivendolo con il carattere 'terminatore di stringa' */ if (dictionarypasswordtotest[strlen (dictionarypasswordtotest) - 1] == '\n') dictionarypasswordtotest[strlen (dictionarypasswordtotest) - 1] = '\000'; Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 30

31 C/Processi per cracker ;-) Codice sorgente /* si crea il "salt" necessario per l'algoritmo di creazione della password criptata e la si genera */ passwordsalt[0] = dictionarypasswordtotest[0]; passwordsalt[1] = dictionarypasswordtotest[1]; strcpy ( generatedpasswordtotest, crypt (dictionarypasswordtotest, passwordsalt) ); /* si controlla se la password appena generata coincide con quella passata in input */ if (! strcmp ( secredpass, generatedpasswordtotest ) ) printf ("\n******************************************\n"); printf ("Password TROVATA!: '%s' (criptata = %s)\n", dictionarypasswordtotest, generatedpasswordtotest ); printf ("******************************************\n"); close (dictionaryfile); /* il codice di ritorno è il codice ASCII della lettera iniziale */ exit ( initialchar ); /* il controllo è terminato e non è stata trovata nessuna password che combaci */ printf ("\nla password non è stata trovata con le parole che iniziano con la lettera '%c'\n", initialchar); close (dictionaryfile); exit ( 1 ); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 31

32 C/Processi per cracker ;-) Codice sorgente else printf ("\nerrore nella lettura del file! Exit.\n"); exit ( 2 ); else /* Errore: parametri di input errati */ printf ( "\nutilizzo: %s password_criptata lettera_iniziale descrittore_file_dizionario\n\n", argv[0] ); exit ( 3 ); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 32

33 C/Analisi di processi Problema Il programma che segue lancia inizialmente un processo P, che crea due processi figli F1 e F2; a sua volta il processo F1 crea un processo figlio N. Nel programma sono indicati tre punti di esecuzione, marcati con le etichette T1, T2 e T3. Queste etichette indicano gli istanti di tempo in cui l esecuzione del programma raggiunge tali punti. Si chiede di riempire le tabelle seguenti, che indicano i valori assunti dalle diverse copie delle variabili del programma negli istanti di tempo T1, T2 e T3, a seconda dei contesti dei processi che vengono via via creati. Fonte: prof. Luca Breveglieri Politecnico di Milano Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 33

34 C/Analisi di processi Codice sorgente T3 main () int status; pid_t pid_f1, pid_f2, pid_n; pid_f1 = fork (); if (pid_f1 == 0) T1 pid_n = fork (); if (pid_n == 0) execl ("nipote", NULL); exit (-1); wait (&status); exit (pid_n); T2 wait (&status); pid_f2 = fork (); if (pid_f2 == 0) execl ("figlio", NULL); exit (-1); // biforcazione // biforcazione // mutazione codice // terminazione // sincronizzazione // terminazione // sincronizzazione // biforcazione // mutazione codice // terminazione Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 34

35 C/Analisi di processi Tabelle Contesto di P Istante di tempo Var T1 T2 T3 pid_f1 pid_f2 pid_n status Contesto di F2 Istante di tempo Var T1 T2 T3 pid_f1 pid_f2 pid_n status Contesto di F1 Istante di tempo Var T1 T2 T3 pid_f1 pid_f2 pid_n status Contesto di N Istante di tempo Var T1 T2 T3 pid_f1 pid_f2 pid_n status NE = al momento indicato la variabile non esiste U = non si può dire con certezza se la variabile esiste o quale sia il suo valore <VAL> = la variabile esiste e se ne riporta il valore Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 35

36 C/Analisi di processi Codice sorgente T3 main () int status; pid_t pid_f1, pid_f2, pid_n; pid_f1 = fork (); if (pid_f1 == 0) T1 pid_n = fork (); if (pid_n == 0) execl ("nipote", NULL); exit (-1); wait (&status); exit (pid_n); T2 wait (&status); pid_f2 = fork (); if (pid_f2 == 0) execl ("figlio", NULL); exit (-1); Contesto di P // biforcazione // biforcazione // mutazione codice // terminazione // sincronizzazione // terminazione // sincronizzazione // biforcazione // mutazione codice // terminazione Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 36

37 C/Analisi di processi Codice sorgente T3 main () int status; pid_t pid_f1, pid_f2, pid_n; pid_f1 = fork (); if (pid_f1 == 0) T1 pid_n = fork (); if (pid_n == 0) execl ("nipote", NULL); exit (-1); wait (&status); exit (pid_n); T2 wait (&status); pid_f2 = fork (); if (pid_f2 == 0) execl ("figlio", NULL); exit (-1); Contesto di F1 // biforcazione // biforcazione // mutazione codice // terminazione // sincronizzazione // terminazione // sincronizzazione // biforcazione // mutazione codice // terminazione Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 37

38 C/Analisi di processi Codice sorgente T3 main () int status; pid_t pid_f1, pid_f2, pid_n; pid_f1 = fork (); if (pid_f1 == 0) T1 pid_n = fork (); if (pid_n == 0) execl ("nipote", NULL); exit (-1); wait (&status); exit (pid_n); T2 wait (&status); pid_f2 = fork (); if (pid_f2 == 0) execl ("figlio", NULL); exit (-1); Contesto di F2 // biforcazione // biforcazione // mutazione codice // terminazione // sincronizzazione // terminazione // sincronizzazione // biforcazione // mutazione codice // terminazione Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 38

39 C/Analisi di processi Codice sorgente T3 main () int status; pid_t pid_f1, pid_f2, pid_n; pid_f1 = fork (); if (pid_f1 == 0) T1 pid_n = fork (); if (pid_n == 0) execl ("nipote", NULL); exit (-1); wait (&status); exit (pid_n); T2 wait (&status); pid_f2 = fork (); if (pid_f2 == 0) execl ("figlio", NULL); exit (-1); Contesto di N // biforcazione // biforcazione // mutazione codice // terminazione // sincronizzazione // terminazione // sincronizzazione // biforcazione // mutazione codice // terminazione Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 39

40 C/Analisi di processi Soluzione Contesto di P Istante di tempo Var T1 T2 T3 pid_f1 PID F1 PID F1 U (3) pid_f2 U (1) U (1) U (3) pid_n U (1) U (1) U (3) status U (1) U (1) U (3) Contesto di F2 Istante di tempo Var T1 T2 T3 pid_f1 NE NE PID F1 pid_f2 NE NE 0 pid_n NE NE U (1) status NE NE PID N Contesto di F1 Istante di tempo Var T1 T2 T3 pid_f1 0 0 NE pid_f2 U (1) U (1) NE pid_n U (1) PID N NE status U (1) U (1) NE Contesto di N Istante di tempo Var T1 T2 T3 pid_f1 NE U (2) NE pid_f2 NE U (2) NE pid_n NE U (2) NE status NE U (2) NE (1) la variabile esiste ma non è ancora stata inizializzata (2) il processo a cui la variabile appartiene ha mutato codice (3) il processo cui la variabile appartiene potrebbe essere esistente, già terminato o non ancora iniziato. Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 40

41 C: T h e E N D! (quasi...) /* codice sorgente artistico... */ void fareesame () if ((libro_di_testo == capito_tutto) && (dispense_docente == tutto_chiaro) && (esercitazioni == capite_e_metabolizzate) && (laboratori == fatti_tanti_esercizi)) esamepassato = TRUE; else sleep (NUM); fareesame (); In-bocca-al-lupo per l'esame! Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 41

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

eseguire comandi dati dall'utente, utilizzando una macchina reale, di livello inferiore, La programmazione di sistema Introduzione ai sistemi operativi multiprocesso Primitive per la gestione dei processi http://home.dei.polimi.it/silvano/acso.htm Il sistema ste operativo Il Sistema Operativo

Dettagli

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

Il processo figlio : utilizza lo stesso codice che sta eseguendo il padre ; La creazione di un nuovo processo in UNIX int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la fork Solo il valore

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

Controllo dei Processi 1

Controllo dei Processi 1 Controllo dei Processi 1 I processi Nei sistemi Unix/Linux ogni processo ne può generare altri. Il processo che li genera è detto processo padre (parent process), mentre i processi generati sono detti

Dettagli

Corso di Programmazione Concorrente Processi. Valter Crescenzi

Corso di Programmazione Concorrente Processi. Valter Crescenzi Corso di Programmazione Concorrente Processi Valter Crescenzi http://crescenzi.inf.uniroma3.it Sommario Processi vs Thread Creazione e terminazione di processi chiamata di sistema fork() chiamata di sistema

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

System call per la gestione di processi

System call per la gestione di processi System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:

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

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

Sistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I Marzo-Giugno 2011 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi

Dettagli

Riepilogo sulla Concorrenza

Riepilogo sulla Concorrenza Riepilogo sulla Concorrenza Passi per la costruzione di un programma concorrente Prima di tutto, definire se la concorrenza avviene mediante Processi concorrenti o Thread concorrenti Definizione delle

Dettagli

System Calls per la Gestione dei Processi

System Calls per la Gestione dei Processi System Calls per la Gestione dei Processi Domenico Cotroneo Dipartimento di Informatica e Sistemistica Università degli Studi di Napoli Federico II Roadmap Process Context Identificativi getpid() getppid()

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

Processi Concetti di base. Esecuzione parallela e sequenziale Il concetto di processo Gestione dei processi

Processi Concetti di base. Esecuzione parallela e sequenziale Il concetto di processo Gestione dei processi Processi Concetti di base Esecuzione parallela e sequenziale Il concetto di processo Gestione dei processi Esecuzione sequenziale I sistemi di calcolo più semplici consentono unicamente l'esecuzione sequenziale

Dettagli

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

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3 Marzo-Giugno 2008 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi

Dettagli

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

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Pietro Frasca Lezione 20 Martedì 16-12-2014 1 System call per la gestione dei processi Creazione

Dettagli

In generale può essere utile che i due processi eseguano del codice diverso

In generale può essere utile che i due processi eseguano del codice diverso System call FORK P fork() ha l aspetto di una funzione C, in realtà è una system call, una chiamata al sistema operativo fork() P P Il processo P' è una copia di P esegue lo stesso codice e possiede una

Dettagli

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

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3 Marzo-Giugno 2008 matricole congrue 0 mod 3 Funzioni wait e waitpid quando un processo termina il kernel manda al padre il segnale SIGCHLD Controllo dei processi (2) il padre può ignorare il segnale (default)

Dettagli

Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti

Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere informazioni

Dettagli

Controllo dei Processi. M. R. Guarracino - Primitive di Controllo dei Processi

Controllo dei Processi. M. R. Guarracino - Primitive di Controllo dei Processi Controllo dei Processi Introduzione Come possiamo creare nuovi processi? Come possiamo eseguire un programma? Come possiamo terminare un processo? Introduzione Unix fornisce le primitive per la creazione

Dettagli

Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009

Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009 Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009 Esercizio 1 (punti 3) Sia data la funzione ricorsiva seguente: void elabora (unsigned

Dettagli

I Processi nel SO UNIX

I Processi nel SO UNIX I Processi nel SO UNIX 1 Processi 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 nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix. I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo

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

I Processi nel Sistema Operativo Unix

I Processi nel Sistema Operativo Unix I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo

Dettagli

1. PARALLELISMO E PROCESSI. 1.1 La necessità del parallelismo

1. PARALLELISMO E PROCESSI. 1.1 La necessità del parallelismo 1. PARALLELISMO E PROCESSI 1.1 La necessità del parallelismo Un programma eseguibile, generato ad esempio da un programma C, è rigorosamente sequenziale, nel senso che viene eseguito una istruzione alla

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

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

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

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

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

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009 Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Il comando make. Per produrre un eseguibile da un programma C sono necessari tre passi compiuti dai seguenti moduli:

Il comando make. Per produrre un eseguibile da un programma C sono necessari tre passi compiuti dai seguenti moduli: Il comando make Sviluppando programmi complessi, si è spesso portati a suddividere il codice sorgente in diversi file. La fase di compilazione quindi richiede maggior tempo, anche se le modifiche apportate

Dettagli

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

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Esercizio 1 (15 punti)

Esercizio 1 (15 punti) Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 16 giugno 2017 Il noto gioco MasterMind

Dettagli

file fisico file logico

file fisico file logico I files Un file è una struttura di dati residente su una memoria di massa (file fisico) Un programma vede un file come una sequenza di bytes (file logico) Generalizzando, un file può comprendere qualsiasi

Dettagli

Operazioni su file di caratteri

Operazioni su file di caratteri Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si

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

Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI

Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI Corso di laurea in ingegneria informatica Esame di sistemi operativi 21 gennaio 2009 SOLUZIONI 1. Si consideri il programma C seguente (gli #include necessari sono omessi): / programma principale / 1.

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

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

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Fondamenti di Informatica II appello 5 luglio 2014 Matricola Cognome Nome Istruzioni Durata prova: 2

Dettagli

SmallShell Piccolo processore comandi

SmallShell Piccolo processore comandi SmallShell Piccolo processore comandi /* file smallsh.h */ #include #include #define EOL 1 #define ARG 2 #define AMPERSAND 3 #define SEMICOLON 4 #define RIDIRIN 5 #define RIDIROUT 6

Dettagli

Signalling (IPC) Signalling (segnalazione)

Signalling (IPC) Signalling (segnalazione) Signalling (IPC) Signalling (segnalazione) è un particolare tipo di Inter-Process Communications che permettere di sincronizzare dei processi spedendo e ricevendo dei messaggi minimali che informano dell'accadimento

Dettagli

Programmazione di sistema in Linux: System Call per il controllo processi. E. Mumolo, DIA

Programmazione di sistema in Linux: System Call per il controllo processi. E. Mumolo, DIA Programmazione di sistema in Linux: System Call per il controllo processi E. Mumolo, DIA Struttura generica di Linux Chiamate delle System call (Trap) interfaccia Utente Shell comandi di linea Compilatori

Dettagli

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

Processi in UNIX. Spazio di sistema (residente) Tabella dei. file APERTI OPEN FILE. Tabella dei codici Processi in UNIX Spazio di sistema (residente) 1 i Tabella dei processi CODE Tabella dei file APERTI ACTIVE FILE PROCESS Tabella dei codici OPEN FILE Tabella dei file ATTIVI Spazio di utente (swappable)

Dettagli

il tipo di parallelismo dipende dal grado di cooperazione

il tipo di parallelismo dipende dal grado di cooperazione Thread Settembre 2009 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio d informazione) necessario tra attività svolte in parallelo processo macchina virtuale

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

Progetto II: Il linguaggio C e le chiamate di sistema sui processi

Progetto II: Il linguaggio C e le chiamate di sistema sui processi Progetto II: Il linguaggio C e le chiamate di sistema sui processi Scrivere un programma C psstat.c che svolga quanto segue: se invocato senza parametri deve stampare su standard output un istogramma orizzontale

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

Sistemi Operativi. Esercitazione 2 Compilazione, Makefile e Processi

Sistemi Operativi. Esercitazione 2 Compilazione, Makefile e Processi Sistemi Operativi Esercitazione 2 Compilazione, Makefile e Processi Percorso Compilazione programmi in c Makefiles Processi definizione gestione creazione Compilazione di programmi in C Compilazione e

Dettagli

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

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 20 Giovedì 22-12-2016 Comunicazione: pipe In Unix, processi possono comunicare

Dettagli

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat. Esame Laboratorio di Sistemi Operativi 2-01-2008 Il compito è costituito da domande chiuse e domande aperte. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 1 ora. Domande chiuse:

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

Scrittura formattata - printf

Scrittura formattata - printf Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri

Dettagli

PROGRAMMA DISCIPLINARE SVOLTO a. s. 2015 / 2016

PROGRAMMA DISCIPLINARE SVOLTO a. s. 2015 / 2016 PROGRAMMA DISCIPLINARE SVOLTO a. s. 2015 / 2016 DOCENTI: TESTARDO CINZIA, VALERIO FELICI CLASSE 4 a IA DISCIPLINA TPSI MACROARGOMENTI che sono stati trattati nel corso del corrente anno scolastico (in

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

I files in C. A cura del prof. Ghezzi

I files in C. A cura del prof. Ghezzi I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files

Dettagli

La famiglia di system call exec. Modulo 6. Laboratorio di Sistemi Operativi I Anno Accademico

La famiglia di system call exec. Modulo 6. Laboratorio di Sistemi Operativi I Anno Accademico 1 Modulo 6 Laboratorio di Sistemi Operativi I Anno Accademico 2008-2009 Copyright 2005-2007 Francesco Pedullà, Massimo Verola Copyright 2001-2005 Renzo Davoli, Alberto Montresor (Universitá di Bologna)

Dettagli

Concetto di Processo Scheduling dei Processi Operazioni sui Processi Processi cooperanti Comunicazione tra processi

Concetto di Processo Scheduling dei Processi Operazioni sui Processi Processi cooperanti Comunicazione tra processi Concetto di Processo Scheduling dei Processi Operazioni sui Processi Processi cooperanti Comunicazione tra processi 3.3 Silberschatz, Galvin and Gagne 2005 1 Un SO esegue diversi tipi di programmi Sistema

Dettagli

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Esame Laboratorio di Sistemi Operativi 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

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 4 (proposta) Server Multiservizio: Socket C con select Luca Foschini Anno accademico 2010/2011 Esercitazione

Dettagli

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

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione

Dettagli

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

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

Processi in Unix. Capitolo 8 -- Stevens

Processi in Unix. Capitolo 8 -- Stevens Processi in Unix Capitolo 8 -- Stevens Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro Identificatori di processi Ogni processo ha un identificatore

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 9 (svolta) RPC: Inizializzazione Strutture Dati sul Server Luca Foschini Anno accademico 2010/2011

Dettagli

ACSO Programmazione di Sistema e Concorrente

ACSO Programmazione di Sistema e Concorrente ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività

Dettagli

La Comunicazione tra Processi in Unix

La Comunicazione tra Processi in Unix La Comunicazione tra Processi in Unix La è un canale di comunicazione tra processi: unidirezionale: accessibile ad un estremo in lettura ed all'altro in scrittura molti-a-molti: più processi possono spedire

Dettagli

ESERCITAZIONE 2 RIPASSO. EX. 1 Un processo padre (parent) crea due processi figli (children) e attende la loro terminazione. Se, e solo se,...

ESERCITAZIONE 2 RIPASSO. EX. 1 Un processo padre (parent) crea due processi figli (children) e attende la loro terminazione. Se, e solo se,... ESERCITAZIONE DEL 23 MARZO 2002 ESERCITAZIONE 2 RIPASSO EX. 1 Un processo padre (parent) crea due processi figli (children) e attende la loro terminazione. Se, e solo se,. EX. 2 Un server di rete attende

Dettagli

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I/O in C Il sistema di I/O del C è una interfaccia uniforme

Dettagli

Impianti di Elaborazione (allievi Gestionali)

Impianti di Elaborazione (allievi Gestionali) Impianti di Elaborazione (allievi Gestionali) Giuseppe Pozzi Impianti di Elaborazione per Allievi Gestionali - Como Facoltà di Ingegneria dell Informazione Politecnico di Milano giuseppe.pozzi@polimi.it

Dettagli

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti

Dettagli

File binari e file di testo

File binari e file di testo I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file

Dettagli

Linguaggio C: i file

Linguaggio C: i file Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa

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

Esercizio 1 (15 punti)

Esercizio 1 (15 punti) Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 30 giugno 2017 In un lontano paese da

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

Processi: Exit, Wait, Exec

Processi: Exit, Wait, Exec Processi: Exit, Wait, Exec Contiene lucidi tratti da: 2005-07 Giuseppe Schmid (Univ. Federico II), 2005-2007 Francesco Pedulla, Massimo Verola (Uniroma2), 2001-2005 Renzo Davoli (Universita di Bologna),

Dettagli

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

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC) Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC) Le pipe sono canali di comunicazione unidirezionali Limitazione pipe: permettono la comunicazione solo

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

Gestione dei file. File di testo e binari

Gestione dei file. File di testo e binari Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

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

Sistemi Operativi (M. Cesati)

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

Dettagli

L ambiente di un processo (I)

L ambiente di un processo (I) L ambiente di un processo (I) L ambiente di un processo è un insieme di stringhe (terminate da \0). Un ambiente è rappresentato da un vettore di puntatori a caratteri terminato da un puntatore nullo. Ogni

Dettagli

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione Introduzione a Funzioni di Ingresso e Uscita Compilazione 2 Come si termina...... un programma in esecuzione (processo)? Ctrl + C In UNIX ci si basa sul concetto di terminale Anche da GUI, quello che si

Dettagli

Esercitazione 11. Esercitazione di riepilogo

Esercitazione 11. Esercitazione di riepilogo Esercitazione 11 Esercitazione di riepilogo Agenda Esercizio 1 - Monitor java Gestione della pista di un aereoporto Esercizio 2 Programma C di sistema Gestione e monitoraggio dell esecuzione del programma

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

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

Il sistema operativo LINUX Semafori. Semaforo. Sommario. Sommario. Uso delle pipe. Gestione di semafori tramite pipe. Sistemi operativi Modulo II

Il sistema operativo LINUX Semafori. Semaforo. Sommario. Sommario. Uso delle pipe. Gestione di semafori tramite pipe. Sistemi operativi Modulo II Il sistema operativo LINUX Semafori Semaforo Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica Un semaforo è una variabile

Dettagli

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato.

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato. Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 2 febbraio 2016 Esercizio 1 (16 punti) Un file di testo contiene

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

File e puntatori a file

File e puntatori a file File e puntatori a file Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di

Dettagli

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizi. Stringhe. Stringhe Ricerca binaria Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)

Dettagli

INTERPROCESS COMMUNICATION 27

INTERPROCESS COMMUNICATION 27 INTERPROCESS COMMUNICATION 27 - Le comunicazioni tra processi (IPC, Intreprocess Communication) sono realizzate mediante strutture dati rese disponibili dal kernel. Sono disponibili 3 tipologie di comunicazioni

Dettagli

SC che operano su processi. Fork, exec, etc...

SC che operano su processi. Fork, exec, etc... SC che operano su processi Fork, exec, etc... 1 Process identifier: getpid, getppid pid indice del processo all interno della tabella dei processi ppid indice del processo padre all interno della tabella

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Chiamate di sistema. Pipe Flussi di I/O

Chiamate di sistema. Pipe Flussi di I/O Chiamate di sistema Pipe Flussi di I/O Esempio di chiamata di sistema #include int main(int argc, char ** argv) FILE * f; f = fopen("nuovo-file", "w"); fprintf(f, "Hello World!\n"); fclose(f);

Dettagli

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h Corso di Linguaggi e Traduttori 1 AA 2004-05 1 Corso di Linguaggi e Traduttori 1 AA 2004-05 stdio.h 2 Funzioni comuni di I/O? Le piu' comuni funzioni che permettono I/O sono getchar() e putchar():? int

Dettagli

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Fondamenti di Informatica II appello 6 luglio 2015 Matricola/codice persona Cognome Nome Durata prova:

Dettagli