Programmazione di sistema e gestione dei processi in C

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione di sistema e gestione dei processi in C"

Transcript

1 Programmazione di sistema e gestione dei processi in C

2 Indice Dalla macchina astratta sequenziale C Alla macchina parallela Processi e programmi Le primitive per la gestione dei processi Creazione, sospensione, morte dei processi Esecuzione dei programmi Semplici(ssime) applicazioni

3 Processo Una singola macchina astratta cui viene assegnato un compito Non solo in ambito informatico : Processo chimico Processo industriale Sistema: Diversi processi che cooperano (o si coordinano, o competono) procedendo In parallelo Spesso in modo asincrono Qui ci interessano processi realizzati mediante macchine astratte informatiche (C in particolare) Al momento si coordinano tra loro In futuro: Internet Controllo di impianti Sistemi embedded

4 Processo C Macchina astratta C Che esegue un programma C

5 Sistema di processi su un calcolatore Programma 1 Programma 2 Programma n Processo 1: Macchina astratta C Processo 2: Macchina astratta C Processo n: Macchina astratta non C Virtualizzazione Hardware + Sistema Operativo

6 Struttura e primitive di un processo (C- Linux) PID Ogni processo (tranne init) creati da altri processi padri, figli, ecc. Memoria (stato) di un processo: Segmento codice Segmento dati Statici Dinamici Stack Heap Segmento di sistema (interfaccia con il SO) Tabella file aperti Socket (vedi programmazione di rete)

7 La gerarchia dei processi init P1(SO) Pn(SO) getty (SO) login (SO) shell (user) Processo1 Processo1 (comando) Processo2

8 Primitive per la gestione di processi (C- Linux) Generare un processo figlio Attendere la terminazione di un processo figlio Terminare un processo figlio Sostituire il programma (segmento codice) eseguito da un processo

9 Generazione e terminazione di processi pid_t fork (void) esempio: fork ( ) Biforca il processo in padre e figlio: al figlio restituisce sempre 0; al padre restituisce il pid > 0 del figlio biforcato; restituisce 1 se la biforcazione del processo fallisce (restituisce solo al padre, ovviamente, visto che il figlio non è stato biforcato). ***Fig. 3 Dispensa Negri***

10 Tutti i segmenti del padre sono duplicati nel figlio, quindi sia il codice e le variabili (segmenti codice e dati), sia i file aperti utilizzati (segmento di sistema). La duplicazione del segmento di sistema prodotto dalla fork copia la tabella dei file aperti e pertanto entrambi i processi possono operare sullo stesso file aperto, mentre successivi file aperti da uno dei due processi dopo la fork saranno invece immessi nella tabella dei file aperti del solo processo che ha eseguito l apertura. Il processo figlio eredita anche il valore del PC del processo padre, pertanto entrambi i processi dopo la fork si trovano ad eseguire la stessa istruzione del programma. Ciò significa che terminata l esecuzione della fork entrambi i processi proseguono ad eseguire la porzione dello stesso programma che segue l istruzione di invocazione della fork.

11 void exit (int stato) esempio: exit() (per il momento senza parametro == exit(0)) Termina il processo corrente Simile alla return: può essere superflua, e.g. se il programma giunge alla fine del codice

12 Primo esempio: il programma fork1 #include <stdio.h> #include <sys/types.h> void main( ) { pid_t pid; pid=fork( ); if (pid==-1) {printf( errore esecuzione fork ); exit(); else if (pid==0) {printf("sono il processo figlio\n"); exit( ); else {printf("sono il processo padre\n"); exit( ); /* non necessaria */ I processi procedono in modo asincrono Condividono le risorse (e.g., il terminale) Quindi l ordine di esecuzione e stampa dei risultati- non è prevedibile!

13 Primo esempio: risultato dell esecuzione di fork1 NB: ma le due scritte potrebbero anche essere in ordine inverso

14 pid_t getpid () Restituisce al processo che la chiama il valore del suo pid

15 Secondo esempio: il programma forkpid1 #include <stdio.h> #include <sys/types.h> void main( ) { pid_t pid,miopid; pid=fork( ); if (pid==0) {miopid=getpid( ); printf("sono il processo figlio con pid: %i\n\n",miopid); exit( ); else {printf("sono il processo padre\n"); printf("ho creato un processo con pid: %i\n", pid); miopid=getpid( ); printf("il mio pid e' invece: %i\n\n", miopid); exit( ); /* non necessaria */ Un processo può creare n figli I figli possono creare figli di figli (nipoti) ecc. Il primo processo (radice): init, creato dal S.O.

16 Secondo esempio: risultato dell esecuzione di forkpid1

17 Terzo esempio: il programma forkpid2 #include <stdio.h> #include <sys/types.h> void main( ) { pid_t pid,miopid; pid=fork( ); if (pid==0) {miopid=getpid( ); printf("1)sono il primo processo figlio con pid: %i\n",miopid); exit( ); else {printf("2)sono il processo padre\n"); printf("3)ho creato un processo con pid: %i\n", pid); miopid=getpid( ); printf("4)il mio pid e' invece: %i\n", miopid); pid=fork( ); if (pid==0) {miopid=getpid( ); printf("5)sono il secondo processo figlio con pid: %i\n",miopid); exit( ); else printf("6)sono il processo padre\n"); printf("7)ho creato un secondo processo con pid: %i\n", pid); exit( ); /* non necessaria */

18 Terzo esempio: (un possibile) risultato dell esecuzione di forkpid2 NB Somiglianze e differenze con il meccanismo di chiamate e ritorno di sottoprogrammi:

19 Che accade se un padre termina prima del(i) figli(o)? La convenzione adottata da Linux è di far adottare i processi figli rimasti orfani (processi 2 e 3) e tutta la loro discendenza (processo 4) al processo init del sistema operativo. init init login login Processo1 shell shell Processo2 Processo3 Processo2 Processo3 Processo4 Processo4

20 Sincronizzare processi asincroni Elemento fondamentale della gestione del parallelismo: processi indipendenti fino a pid_t wait (int *) Sospende l esecuzione del processo che la esegue e attende la terminazione di un qualsiasi- processo figlio; se un figlio è già terminato la wait del padre si sblocca immediatamente (nessun effetto) ritorna il pid del processo figlio terminato

21 Esempio: pid_t pid; int stato; pid = wait (&stato); stato, parametro passato per indirizzo: codice di terminazione del processo 8 bit superiori: possono essere assegnati esplicitamente come parametro di exit; altri bit di stato assegnati dal S.O. per indicare condizioni di terminazione (e.g., errore)

22 exit con parametro void exit (int stato) Esempio: exit(5) termina il processo e restituisce il valore 5 al padre; se il padre è già terminato lo stato viene restituito all interprete comandi; dettaglio importante: il valore restituito è costituito dagli 8 bit superiori di stato lo stato ricevuto da wait è il parametro di exit moltiplicato per 256

23 il flusso di esecuzione è arrivato qui processo padre la fork restituisce il PID = b > 0 del figlio if (fork ( )!= 0) { wait (&stato); else { compito figlio; exit (0); seguito padre; PID = a il processo si biforca la fork restituisce 0 processo padre il padre esegue il ramo then if (fork ( )!= 0) { wait (&stato); else { compito figlio; exit (0); seguito padre; il flusso di esecuzione si sospende qui il ramo then si conclude e il padre prosegue dopo la clausola if PID = a if (fork ( )!= 0) { wait (&stato); else { compito figlio; exit (0); seguito padre; processo padre if (fork ( )!= 0) { wait (&stato); else { compito figlio; exit (0); seguito padre; PID = a PID = b processo figlio il figlio esegue il ramo else il flusso di esecuzione si estingue qui la primitiva wait rileva la terminazione del figlio; il flusso di esecuzione del padre riparte da qui in stato viene scritto lo stato di uscita del figlio (0 in questo caso)

24 Quarto esempio: il programma forkwait1 #include <stdio.h> #include <sys/types.h> void main( ) { pid_t pid, miopid; int stato_exit, stato_wait; pid=fork( ); if (pid==0) { miopid=getpid( ); printf("sono il processo figlio con pid %i \n", miopid); printf("termino \n\n"); stato_exit=5; exit(stato_exit); else { printf("ho creato un processo figlio \n\n"); pid=wait (&stato_wait); printf("terminato il processo figlio \n"); printf("il pid del figlio e' %i, lo stato e' %i\n",pid,stato_wait/256); NB: per stampare correttamente il valore di stato è necessario dividere il parametro ricevuto in stato_wait per 256

25 Quarto esempio: risultato dell esecuzione di forkwait1

26 Però attenzione: Caso 1 Processo padre Processo figlio fork() printf("ho creato "); wait(..) miopid=getpid( ); exit(stato_exit); printf("terminato ");

27 Caso 2 Processo padre fork() printf("ho creato "); Processo figlio miopid=getpid( ); exit(stato_exit); wait(..) printf("terminato "); Se il figlio è già terminato la wait del padre si sblocca immediatamente Il sistema operativo memorizza il valore di stato nella parte di sistema operativo dedicata al processo, chiude tutti i file aperti presenti nella tabella dei file aperti del segmento di sistema del processo e passa il processo dallo stato di attivo allo stato di zombie. Il processo figlio dopo l exit rimane quindi in vita, ma solo per aspettare che il processo padre possa recuperare lo stato.

28 Riassumendo: a) Un processo padre che non ha generato processi figli esegue una wait. In questo caso il sistema operativo restituisce il codice di errore -1 e non pone in attesa il processo padre. b) Un processo padre esegue una wait in presenza di un processo figlio che non esegue mai una exit (ad esempio per un ciclo infinito); in questo caso il processo padre rimane sospeso all infinito. Questa situazione richiede un intervento esterno per forzare la terminazione di entrambi i processi. c) Un processo padre termina l esecuzione del proprio programma, provocando la propria distruzione senza eseguire una wait, in presenza di uno o più processi figli attivi. In questo caso il sistema operativo prende tutti i processi rimasti orfani dalla morte del processo padre e li fa adottare al processo init. Quando questi processi figli eseguono l exit passano allo stato zombie senza avere più un padre che li aspetti. Si noti che periodicamente il processo init esegue una wait proprio al fine di eliminare i processi zombie inutilmente presenti nel sistema. Si cominciano a intravvedere le difficoltà di una programmazione non più Orientata alla costruzione di un singolo algoritmo sequenziale per quanto complesso per la soluzione di un singolo problema!

29 Una variante di wait: la funzione waitpid pid_t waitpid (pid_t pid, int stato, int opzioni) Esempio: waitpid (10, &stato, opzioni) Mette un processo in stato di attesa dell evento di terminazione di un processo figlio con pid pid (10 in questo caso) e ne restituisce il pid (10 in questo caso); la variabile stato assume il valore di exit del processo figlio terminato. Il parametro opzioni specializza la funzione waitpid.

30 Sostituzione del programma in esecuzione exec sostituisce i segmenti codice e dati (utente; non il segmento di sistema! i file aperti rimangono aperti) del processo in esecuzione con codice e dati di un programma contenuto in un file eseguibile specificato; - il processo rimane lo stesso (stesso pid): programma processo! - può passare parametri al nuovo programma (main è una particolare funzione: main (!!)) - esistono diverse varianti di exec

31 exec1 (char *nome_programma, char *arg0, char *arg1,, NULL); nome_programma: stringa che identifica completamente (pathname) il file eseguibile contenente il programma da lanciare arg0, arg1, : puntatori a stringhe da passare come parametri al main da lanciare; l ultimo è NULL perché il numero di arg è variabile. infatti: Il main, che è una particolare funzione, può avere a sua volta dei parametri! finalmente main ()

32 void main (int argc, char *argv[]) argc: numero di parametri ricevuti argv[]: vettore di puntatori a stringhe; ogni stringa è un parametro argv[0] contiene sempre il nome del programma exec1 provoca quindi l esecuzione del ( chiama il) programma il cui eseguibile si trova nel file nome_programma e gli passa come parametri (per indirizzo: sono puntatori) arg0, arg1, )

33 il flusso di esecuzione è arrivato qui processo padre la fork restituisce il PID = b > 0 del figlio if (fork ( )!= 0) { wait (&stato); else { exec ( prog,...); exit ( 1); seguito padre; PID = a il processo si biforca la fork restituisce 0 processo padre il padre esegue il ramo then if (fork ( )!= 0) { wait (&stato); else { exec ( prog,...); exit ( 1); seguito padre; il flusso di esecuzione si sospende qui il figlio esegue le istruzioni del nuovo programma il ramo then si conclude e il padre prosegue dopo la clausola if PID = a se non ci sono errori nella exec, questa exit non viene mai eseguita (perché il codice è stato mutato) if (fork ( )!= 0) { wait (&stato); else { exec ( prog,...); exit ( 1); seguito padre; processo padre PID = b if (fork ( )!= 0) { wait (&stato); else { processo exec ( prog,...); figlio exit ( 1); (programma originale) seguito padre; il figlio esegue la primitiva exec e muta codice File prog.c: main (argc, argv) { dichiarazioni; istruzioni; exit (0); PID = a PID = b processo figlio (nuovo programma) il flusso di esecuzione si estingue qui la primitiva wait rileva la terminazione del figlio; il flusso di esecuzione del padre riparte da qui in stato viene scritto lo stato di uscita del figlio (0 in questo caso)

34 Quinto esempio: il programma main1 #include <stdio.h> void main (int argc, char *argv[ ] ) { int i; printf("\nsono il programma main1\n"); printf("ho ricevuto %i parametri\n", argc); for (i=0; i<argc; i++) printf("il parametro %i è: %s\n", i, argv[i]);

35 Quinto esempio: risultato dell esecuzione di main1 da riga di comando, senza parametri

36 Quinto esempio: risultato dell esecuzione di main1 da riga di comando, con 3 parametri

37 Quinto esempio: il programma exec1 #include <stdio.h> #include <sys/types.h> void main( ) { char P0[ ]="main1"; char P1[ ]="parametro 1"; char P2[ ]="parametro 2"; printf("sono il programma exec1\n"); exec1("/home/pelagatt/esempi/main1", P0, P1, P2, NULL); printf("errore di exec"); /*normalmente non si arriva qui!*/

38 Quinto esempio: risultato dell esecuzione di exec1

39 Altre versioni di exec execv: sostituisce alla lista di stringhe di exec1 un puntatore a un vettore di stringhe char argv execlp e execvp permettono di sostituire il pathname completo con il solo nome del file nel direttorio di default execle e execve hanno un parametro in più che specifica l ambiente di esecuzione del processo.

40 exec e fork in combinazione il padre crea uno o più figli e assegna loro un compito attende i loro risultati quando hanno finito e prodotto i risultati li raccoglie e li gestisce interprete comandi

41 Sesto esempio: il programma forkexec1 #include <stdio.h> #include <sys/types.h> void main( ) { pid_t pid; int stato_wait; char P0[ ]="main1"; char P1[ ]="parametro 1"; char P2[ ]="parametro 2"; pid=fork( ); if (pid==0) { printf("\nsono il processo figlio \n"); printf("lancio in esecuzione il programma main1\n"); exec1("/home/pelagatt/esempi/main1", P0, P1, P2, NULL); printf("errore di exec"); /*normalmente non si arriva qui!*/ exit( ); else { wait(&stato_wait ); printf("\nsono il processo padre\n"); printf("il processo figlio è terminato\n"); exit( );

42 Sesto esempio: risultato dell esecuzione di forkexec1

43 Settimo esempio Pseudocodice di un interprete comandi semplificato (programma simpleshell) che legge da terminale un comando, procede a creare un processo figlio dedicato all esecuzione del comando, mentre il processo padre ne attende la sua terminazione prima di ripetere la richiesta di un altro comando.

44 #include <stdio.h> #include <sys/types.h> #define fine logout #define prompt simpleshell: void main( ) { pid_t pid; int stato_wait;. while (! logout dell utente) Settimo esempio { printf ( %s,prompt); [ lettura riga di comando e identificazione componenti del comando ] pid=fork( ); if (pid==0) { exec1(comando, arg0, arg1, argn, NULL); printf("errore di exec"); /*normalmente non si arriva qui!*/ exit( ); else wait(&stato_wait ); exit( ); a) il programma simpleshell

45 Settimo esempio simpleshell:./main1 sono il programma main1 ho ricevuto 1 parametri il parametro 0 è:./main1 simpleshell: b)risultato dell esecuzione di simpleshell senza parametri

46 Settimo esempio simpleshell:./main1 par1 par2 par3 sono il programma main1 ho ricevuto 4 parametri il parametro 0 è:./main1 il parametro 1 è: par1 il parametro 2 è: par2 il parametro 3 è: par3 simpleshell: c)risultato dell esecuzione di simpleshell con tre parametri

47 Ottavo esempio Si devono riempire tre tabelle da parte di 3 processi: un padre e due figli (più precisamente, un figlio e un nipote) ogni tabella deve indicare: il valore di variabili i,j,k, pid1, pid2 in specifici punti (linee di codice) dell esecuzione del programma eseguito dal processo; Se nel momento indicato la variabile non esiste (perché non esiste il processo) la tabella deve riportare NE, se la variabile esiste ma non se ne conosce il valore con certezza (perché non si sa a che punto si sia dell esecuzione del singolo processo) la tabella deve riportare U; Si suppone che tutte le fork abbiano successo e che il S.O. assegni ai figli creati i valori di pid a partire da 500.

48 01: main() 02: { 03: int i, j, k, stato; 04: pid_t pid1, pid2; 05: i=10; j=20; k=30; 06: pid1 = fork(); /*creazione del primo figlio / 07: if (pid1 == 0) { 08: j=j+1; 09: pid2 = fork(); /*creazione del secondo figlio */ 10: if (pid2 == 0) { 11: k=k+1; 12: exit(); 13: else { 14: wait(&stato); 15: exit(); 16: 17: else { 18: i=i+1; 19: wait(&stato); 20: 21: exit();

49 Struttura delle 3 tabelle da compilare Istante Valore delle variabili pid1 pid2 i j k Dopo l istruzione 6 dopo l istruzione 9 dopo l istruzione 11 dopo l istruzione 19

50 Valore delle variabili nel processo padre Istante Valore delle variabili pid1 pid2 i j k Dopo l istruzione U dopo l istruzione U U * dopo l istruzione U U * dopo l istruzione U * I = U perché il padre non esegue queste istruzioni e non si sa se quando un figlio è alla 9 o 11 nel frattempo il padre abbia eseguito la 18

51 Valore delle variabili nel primo processo figlio Istante Valore delle variabili pid1 pid2 i j k Dopo l istruzione 6 0 U dopo l istruzione dopo l istruzione dopo l istruzione 19 NE NE NE NE NE

52 Valore delle variabili nel secondo processo figlio (nipote) Istante Valore delle variabili pid1 pid2 i j k Dopo l istruzione 6 NE NE NE NE NE dopo l istruzione dopo l istruzione dopo l istruzione 19 NE NE NE NE NE

53 Esempio conclusivo A: B: Sistema che sceglie la soluzione (algoritmo) più rapida per un problema Sistema che scompone un problema in due sottoproblemi da risolvere separatamente ma indipendentemente e ne combina le soluzioni

54 #include void main () { pid_t pid; int file A stato_wait, scelta; *filedati, *filerisultati, *filedati1, *filedati2, *filerisultati1, *filerisultati2; [apre il file di dati in *filedati; copia *filedati in *filedati1 e *filedati2]; scelta = 1; pid = fork(); if (pid!== 0) {scelta = 2; pid = fork() ; if (pid == 0) { if (scelta == 1) {exec1 ( programma1, NULL); /* contiene la terminazione exit (1) */ if (scelta == 2) {exec1 ( programma2, NULL); /* contiene la terminazione exit (2) */ else { pid = wait(&stato_wait); if (stato_wait/256 == 1) { [copia filerisultati1 in filerisultati]; pintf( il primo programma a fornirmi i risutati è stato programma1;\n esso è stato eseguito dal processo %i\n, pid) else { [copia filerisultati2 in filerisultati]; pintf( il primo programma a fornirmi i risutati è stato programma2;\n esso è stato eseguito dal processo %i\n, pid) ;[chiude tutti i file]

55 NB programma1 risolve lo stesso problema di programma2 usando un diverso algoritmo programma1 e programma2 ricevono rispettivamente i dati su cui operare nel file (puntato da) filedati1 e filedati2 lasciano il risultato in filerisultati/1/2. Non è detto che il primo processo a terminare sia quello che esegue l algoritmo più veloce.

56 B #include void main () { pid_t pid; int file stato_wait; *filedati, *filerisultati, *fd1, *fd2, *fris1, *fris2; [apre o crea-i vari file; da *filedati prepara i file *fd1, *fd2 da far elaborare a programma1 e programma2 rispettivamente]; scelta = 1; pid = fork(); if (pid!== 0) {scelta = 2; pid = fork() ; if (pid == 0) { if (scelta == 1) {exec1 ( programma1, NULL); /* contiene la terminazione exit (1) */ if (scelta == 2) {exec1 ( programma2, NULL); /* contiene la terminazione exit (2) */ else { /* ilpadre attende la terminazione dei due programmi figli indipendentemente da quale dei due termina prima; se è curioso, oppure se nel frattempo ha assegnato altri compiti ad altri processi */ pid = wait(&stato_wait); pid = wait(&stato_wait); [costruisce il rilsultato finale in *filerisultati, combinando le soluzioni lasciate dai due programmi rispettivamente in *fris1 e *fris2]; [chiude tutti i file]

57 NB Ovviamente da un parallelismo puramente logico di questo tipo non ci si possono attendere grandi risultati pratici in termini di efficienza, anzi però il parallelismo logico diventa tanto più utile quanto più indipendenti diventano i singoli compiti dei vari processi Quando poi il parallelismo logico diventa anche fisico (coprocessori, multiple core)

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

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

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

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

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

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. 2017-18 Pietro Frasca Lezione 6 Martedì 24-10-2017 1 Sostituzione del codice Tipicamente, dopo una

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. 2018-2019 Pietro Frasca Lezione 5 Martedì 16-10-2018 Operazioni sui processi Nella maggior parte dei

Dettagli

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi SISTEMI OPERATIVI Processi in Linux 2 Creazione di processi concorrenti» La creazione di un processo figlio consente di far eseguire alcune funzionalità del programma in modo concorrente» Opzione 1 il

Dettagli

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto fork() & exec() Roberto Perdisci A.A. 2004/2005 1 Dettagli

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

La creazione di un nuovo processo in UNIX

La creazione di un nuovo processo in UNIX La creazione di un nuovo processo in UNIX #include int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la

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

System Call EXEC EXEC P P. fork exec(new_prog) fork. sono_il_padre = fork(); if (!sono_il_padre) {

System Call EXEC EXEC P P. fork exec(new_prog) fork. sono_il_padre = fork(); if (!sono_il_padre) { System Call EXEC EXEC L effetto delle system call della famiglia exec consiste nel mandare in esecuzione: (1) un programma contenuto in un file eseguibile oppure un (2) interprete di programmi P fork P

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Processi in Unix/Linux caratteristiche

Dettagli

Addendum alle chiamate di sistema per la gestione processi. E Mumolo

Addendum alle chiamate di sistema per la gestione processi. E Mumolo Addendum alle chiamate di sistema per la gestione processi E Mumolo Definiamo un processo proc.c che scrive l'argomento passato in linea: void main(int argc, char *argv[]){ printf("sono il processo %s\n",

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

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

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

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

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4 UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Elettronica e delle Telecomunicazioni a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4 1 Funzioni per il

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

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

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

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi primavera 2009 Controllo dei processi (2) Funzioni wait e waitpid quando un processo termina il kernel manda al padre il segnale SIGCHLD il padre può ignorare il segnale (default) oppure lanciare una funzione

Dettagli

La Programmazione di Rete e di Sistema (iii) La programmazione di sistema. Il sistema operativo. La programmazione di sistema

La Programmazione di Rete e di Sistema (iii) La programmazione di sistema. Il sistema operativo. La programmazione di sistema La Programmazione di Rete e di Sistema (iii) Giuseppe Pozzi Impianti di Elaborazione (allievi Gestionali Como) Facoltà di Ingegneria dell Informazione Politecnico di Milano giuseppe.pozzi@polimi.it - versione

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

SISTEMI&OPERATIVI& AA&2013&0&2014& Processi( in(linux( Giorgio&Giacinto&2013& Sistemi&Opera?vi&

SISTEMI&OPERATIVI& AA&2013&0&2014& Processi( in(linux( Giorgio&Giacinto&2013& Sistemi&Opera?vi& SISTEMI&OPERATIVI& AA&2013&0&2014& Processi( in(linux( ( 2& Creazione(di(processi( concorren2(» La&creazione&di&un&processo&figlio&consente&di& far&eseguire&alcune&funzionalità&del&programma& in&modo&concorrente&»

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

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

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

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

Esercizio sulla gestione di processi in Unix!

Esercizio sulla gestione di processi in Unix! ! Esercizio sulla gestione di processi in Unix! 1 Esercizio Si vuole realizzare un programma C che abbia la seguente interfaccia:./launch_commands Il programma deve richiedere all utente: un numero N (pari

Dettagli

Richiami sui Concetti Fondamentali dei Processi

Richiami sui Concetti Fondamentali dei Processi Processi Processi 1 Richiami sui Concetti Fondamentali dei Processi Processi 2 Definizione Nell ambito dei sistemi operativi esistono diverse definizioni di processo, ad es. un programma in esecuzione

Dettagli

" &$ () " ) ) $ ' () *) " ) $

 &$ ()  ) ) $ ' () *)  ) $ %&! "# $ #include int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d]: %s\n", i, argv[i] ); 1 2 " &$ cc cc program.c a.out pippo pluto topolino argv[0]: a.out

Dettagli

Terza Esercitazione. Gestione di segnali in Unix Primitive signal e kill

Terza Esercitazione. Gestione di segnali in Unix Primitive signal e kill Terza Esercitazione Gestione di segnali in Unix Primitive signal e kill signal kill pause alarm sleep Primitive fondamentali Imposta la reazione del processo all eventuale ricezione di un segnale (può

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

Seconda Esercitazione. Gestione di processi in Unix Primitive Fork, Wait, Exec

Seconda Esercitazione. Gestione di processi in Unix Primitive Fork, Wait, Exec Seconda Esercitazione Gestione di processi in Unix Primitive Fork, Wait, Exec System call fondamentali fork exit wait exec Generazione di un processo figlio, che condivide il codice con il padre e possiede

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

I Processi nel SO UNIX

I Processi nel SO UNIX I Processi nel SO UNIX 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

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

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

Terza Esercitazione. Gestione di segnali in Unix Primitive signal e kill!

Terza Esercitazione. Gestione di segnali in Unix Primitive signal e kill! Terza Esercitazione Gestione di segnali in Unix Primitive signal e kill! Primitive fondamentali signal kill pause alarm sleep Imposta la reazione del processo all eventuale ricezione di un segnale (può

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

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

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

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

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

Fondamenti di Informatica T-1 modulo 2

Fondamenti di Informatica T-1 modulo 2 Fondamenti di Informatica T-1 modulo 2 Contenuti Parametri passati a linea di comando 2 Overview Il risultato del processo di compilazione/linking è un file eseguibile (un programma) Abbiamo visto almeno

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

Esercizio 1 (punti 5) E noto che un Full adder è un circuito logico che realizza le funzioni Riporto e Risultato seondo la definizione seguente

Esercizio 1 (punti 5) E noto che un Full adder è un circuito logico che realizza le funzioni Riporto e Risultato seondo la definizione seguente Informatica 1, Sez. di Cremona Appello del 12 Febbraio 2009 NB. Gli allievi Informatici e Gestionali, ad eccezione di coloro che hanno ottenuto il riconoscimento di 5 crediti per esami sostenuti in altri

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 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008

Sistemi Operativi 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008 1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia

Dettagli

Sistemi Operativi 1. Mattia Monga. 7 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

Sistemi Operativi 1. Mattia Monga. 7 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia 1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia

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

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

Corso di Laboratorio di Sistemi Operativi A.A

Corso di Laboratorio di Sistemi Operativi A.A Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 13 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche

Dettagli

Sistemi Operativi Esercizi File System. Docente: Claudio E. Palazzi

Sistemi Operativi Esercizi File System. Docente: Claudio E. Palazzi Sistemi Operativi Esercizi File System Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Appello AE-2 del 14/9/2005 Esercizi di ricapitolazione Sistemi Operativi - C. Palazzi 93 Soluzione Esercizi di

Dettagli

Î Modello ad Ambiente Locale P1 P1. File System P2 P2 P3 P3. Processi in UNIX. Modello di Processo in UNIX

Î Modello ad Ambiente Locale P1 P1. File System P2 P2 P3 P3. Processi in UNIX. Modello di Processo in UNIX Processi in UNIX Spazio di sistema (residente) Modello di Processo in UNIX 1 Tabella dei processi i PROCESS CODE Tabella dei codici Tabella dei file APERTI OPEN FILE ACTIVE FILE Tabella dei file ATTIVI

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

Il protocollo applicativo. Esempio di protocollo applicativo

Il protocollo applicativo. Esempio di protocollo applicativo Il protocollo applicativo TCP/IP fornisce gli strumenti per realizzare un protocollo applicativo (gestisce un byte stream). TCP/IP non definisce il protocollo applicativo. Una volta definito, il protocollo

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

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

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

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

Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri Fondamenti di Informatica II appello 15 luglio 2013 Matricola Cognome Nome Istruzioni Durata prova: 2 ore LE RISPOSTE

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

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

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. 2017-18 Pietro Frasca Lezione 9 Giovedì 2-11-2017 Comunicazione con pipe Oltre che con la memoria condivisa

Dettagli

ESERCITAZIONE 2 fork e exec

ESERCITAZIONE 2 fork e exec ESERCITAZIONE 2 fork e exec Richiami di scripting Ripassiamo: Differenza tra pipe e ridirezione su file Come si accede agli argomenti di un invocazione Sintassi dell if Sintassi del for Pipe e ridirezione

Dettagli

Sistemi Operativi (M. Cesati)

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

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

Sistemi Operativi (M. Cesati)

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

Dettagli

Principles of Concurrent Programming

Principles of Concurrent Programming Principles of Giuseppe Anastasi g.anastasi@iet.unipi.it Pervasive Computing & Networking Lab. () Dept. of Information Engineering, University of Pisa Overview Concetti preliminari Interazione fra processi

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

Dettagli

Principles of Concurrent Programming

Principles of Concurrent Programming Principles of Concurrent Programming Alessio Vecchio alessio.vecchio@unipi.it Dip. di Ingegneria dell Informazione Università di Pisa Tratte da Principi e tecniche di progammazione concorrente, cap. 2

Dettagli

Componenti di un sistema operativo

Componenti di un sistema operativo Componenti di un sistema operativo Dipartimento di Informatica Università di Verona, Italy Componenti di un S.O. Gestione dei processi Gestione della memoria primaria Gestione della memoria secondaria

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

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

Introduzione alla programmazione nella shell di Unix 10 Maggio 2005

Introduzione alla programmazione nella shell di Unix 10 Maggio 2005 Introduzione alla programmazione nella shell di Unix 10 Maggio 2005 1 Page 1 Shell e programmazione La shell di UNIX definisce un vero e proprio linguaggio di programmazione, le cui caratteristiche principali

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

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

Memoria Virtuale. Alessandro A. Nacci ACSO 2014/2014

Memoria Virtuale. Alessandro A. Nacci ACSO 2014/2014 Memoria Virtuale Alessandro A. Nacci alessandro.nacci@polimi.it ASO 2014/2014 1 2 Algoritmo LRU! Buone prestazioni in media! Utilizza bit di controllo che riportano le informazioni sugli accessi alle pagine!

Dettagli

Processi. Franco Maria Nardini

Processi. Franco Maria Nardini Processi Franco Maria Nardini La funzione main il kernel gestisce l avvio del vostro codice C (attraverso una funzione exec) routine speciale di start-up che prepara l ambiente di esecuzione per il main

Dettagli

Sistemi Operativi (M. Cesati)

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

Dettagli

Principles of Concurrent Programming

Principles of Concurrent Programming Principles of Giuseppe Anastasi g.anastasi@iet.unipi.it Pervasive Computing & Networking Lab. () Dept. of Information Engineering, University of Pisa Overview Concetti preliminari Interazione fra processi

Dettagli

SISTEMI OPERATIVI e LABORATORIO DI SISTEMI OPERATIVI (A.A ) 31 MARZO 2006

SISTEMI OPERATIVI e LABORATORIO DI SISTEMI OPERATIVI (A.A ) 31 MARZO 2006 SISTEMI OPERATIVI e LABORATORIO DI SISTEMI OPERATIVI (A.A. 05-06) 31 MARZO 2006 Esercizio Si realizzi un programma concorrente per UNIX che deve avere una parte in Bourne Shell e una parte in C. La parte

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. 2017-18 Pietro Frasca Lezione 10 Martedì 7-11-2017 Thread a livello kernel Modello da uno a uno La

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

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

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

Programmi con argomenti

Programmi con argomenti Programmi con argomenti Quando si compila un programma C viene generato un file eseguibile (.exe sotto dos). Questo programma può venire eseguito direttamente scrivendo il suo nome sulla linea di comando

Dettagli

Page 1. Programmazione. Shell e programmazione. File comandi (script) Introduzione alla programmazione nella shell di Unix

Page 1. Programmazione. Shell e programmazione. File comandi (script) Introduzione alla programmazione nella shell di Unix Introduzione alla programmazione nella shell di Unix 10 Maggio 2005 1 Programmazione E` possibile memorizzare sequenze di comandi all'interno di le eseguibili: Ad esempio: #!bin/bash echo hello world!

Dettagli

Sistemi Operativi 1. Mattia Monga. a.a. 2018/19. Dip. di Informatica Università degli Studi di Milano, Italia

Sistemi Operativi 1. Mattia Monga. a.a. 2018/19. Dip. di Informatica Università degli Studi di Milano, Italia 1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2018/19 1 cba 2008 18 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.

Dettagli

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012 Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni

Dettagli

Esercizio 2 Scrivere un programma C che: Prende in input da linea di comando il nome di una directory ed il nome di un file. Se non e' possibile aprir

Esercizio 2 Scrivere un programma C che: Prende in input da linea di comando il nome di una directory ed il nome di un file. Se non e' possibile aprir Esercizio 1 Scrivere un programma in C che prende in input (su riga di comando) il nome di un file e visualizza: Il file uid=

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 4 24/10/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University

Dettagli

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi Complementi sul C - 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Precedenza e associatività () [] ->. S D! ~ ++ + * & (cast ) sizeof S D * / % S D + - (somma e sottrazione) S D >

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