Gestione dei processi



Похожие документы
Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX

Programmazione multiprocesso

Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI

Processi e Sincronizzazione. Laboratorio Software C. Brandolese M. Grotto

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

IPC System V. Code di messaggi

System call per la gestione di processi

LABORATORIO DI SISTEMI OPERATIVI

Corso di Programmazione Concorrente Processi. Valter Crescenzi

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

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

CREAZIONE PROCESSI IN UNIX 20

I Processi nel Sistema Operativo Unix

Sistemi Operativi. Des crizione e controllo dei proces s i

Processi in Linux. Igino Corona 20 Ottobre 2009

Elementi di Architettura e Sistemi Operativi

Funzioni. Il modello console. Interfaccia in modalità console

Introduzione al Linguaggio C

I/O su Socket TCP: read()

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

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

Sistemi Operativi (modulo di Informatica II) I processi

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

Funzioni in C. Violetta Lonati

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

Sistemi Operativi. Esercitazione 2 Compilazione, Makefile e Processi

Gestione dei processi

Allocazione dinamica della memoria - riepilogo

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

Programmazione di Sistema 3

ci sono più problemi che programmi esiste un problema che non si può risolvere con un programma

Sottoprogrammi: astrazione procedurale

Matlab: Gestione avanzata dei file

Introduzione al MATLAB c Parte 2

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Capitolo 3 -- Silberschatz

Sistemi Operativi. Descrizione e controllo dei processi

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

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

Esercizio 2. Client e server comunicano attraverso socket TCP

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

I puntatori e l allocazione dinamica di memoria

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

Program m azione di Sistem a 3

Corso di Laboratorio di Sistemi Operativi

Inizializzazione, Assegnamento e Distruzione di Classi

NOZIONI BASE SHELL E SCRIPT LINUX

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

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

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

Il sistema operativo UNIX/Linux. Gli script di shell

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

VARIABILI LOCALI E GLOBALI (ESTERNE)

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

I SISTEMI OPERATIVI (1)

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

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

La selezione binaria

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

Gestione dei File in C

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

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

Транскрипт:

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, altrimenti il numero di secondi di attesa restanti

Processi e pid Ogni processo ha un pid ed un Parent's pid (ppid) i processi formano un albero init è la radice dell'albero viene lanciato direttamente dal kernel non ha padre ha pid=1 quando un processo termina, i suoi figli diventano figli di init 3

Ottenere pid e ppid pid_t getpid(void); pid_t getppid(void); Restituiscono pid e ppid, rispettivamente Non possono fallire Di solito pid_t è sinonimo di int 4

Creazione di un processo pid_t fork(void); Crea un nuovo processo, figlio di quello attuale In caso di successo, restituisce 0 al figlio, ed il pid del figlio al padre Altrimenti, restituisce 1 ad esempio, se è stato raggiunto il massimo numero di processi per questo utente 5

Creazione di un processo Esempio tipico: pid_t pid; if ( (pid=fork()) < 0 ) perror( fork ), exit(1); else if (pid!= 0) { // codice del padre } else { // codice del figlio } 6

Padri e figli (1) Il figlio procede indipendentemente dal padre hanno program counter e stack separati memoria: il figlio ottiene una copia nuova della memoria del padre vengono copiati sia lo stack che l'heap cioè, sia variabili statiche che dinamiche sia variabili globali che locali 7

Padri e figli (2) file aperti: i descrittori vengono copiati come con dup padre e figlio condividono l'offset! segnali: per ogni segnale, il figlio continua ad avere la stessa reazione del padre l'eventuale sveglia (alarm) è azzerata Ctrl C arriva a tutti i processi in foreground 8

Esempio int main(void) { int i; for (i=0; i<2 ;i++) if (fork()>0) { printf("padre! %d\n", i); } else { printf("figlio! %d\n", i); } Qual è l'output di questo programma? Quanti processi vengono creati? Di chi è figlio ciascun processo creato? } sleep(10); return 0; 9

Esercizio 1 Scrivere un programma C che genera un figlio il padre entra in un ciclo infinito in cui ogni secondo stampa un intero crescente il figlio: stampa il pid del padre aspetta 5 secondi invia un segnale SIGKILL al padre aspetta altri 5 secondi stampa nuovamente il pid del padre termina 10

Quando un processo termina... viene inviato il segnale SIGCHLD al padre il processo diventa uno zombie finché il padre non chiama wait/waitpid 11

Aspettare un figlio pid_t wait(int *status); Blocca il processo finché un figlio termina se c'è un figlio zombie, ritorna subito Restituisce il pid del processo terminato 1 in caso di errore ad esempio, se un processo non ha figli status contiene il valore di uscita del figlio se non ci interessa, passiamo NULL 12

Stato di uscita del figlio status normale (return, exit) true WIFEXITED WEXITSTATUS valore di uscita (8 bit meno significativi) false anormale (abort, segnale non catturato) 13

Stato di uscita del figlio Esempio tipico: int status; wait(&status); if ( WIFEXITED(status) ) printf( valore di uscita: %d\n, WEXITSTATUS(status)); else printf( terminazione anomala\n ); 14

Aspettare un figlio pid_t waitpid(pid_t pid, int *status, int options); Come wait, ma aspetta un figlio specifico se pid>0, aspetta il figlio con quel pid options può essere lasciato a zero 15

Ciclo di vita di un processo inesistente fork() padre: wait() evento o segnale runnable scelto dallo scheduler fermato dallo scheduler (preempted) stopped invia SIGCHLD al padre running exit() main: return aspetta qualcosa (pause, read, sleep) terminato (zombie) 16

Esercizio 2 Scrivere un programma C che genera un figlio il padre aspetta la terminazione del figlio e poi scrive figlio terminato con valore x, dove x è il valore di uscita del figlio il figlio legge da STDIN un intero (usando read e atoi) e poi esce restituendo quell'intero come valore di uscita. 17

Esercizio 3 Scrivere un programma C che crea due figli il padre entra in un ciclo in cui stampa un intero crescente ogni secondo; il padre esce dal ciclo e termina quando entrambi i figli sono terminati il figli aspettano un numero di secondi casuale tra 1 e 10, e poi terminano 18

Eseguire programmi int execl(const char *pathname, const char *arg0,...); execl accetta il nome di un programma da eseguire ed un numero variabile di argomenti per il programma l'ultimo argomento deve essere un puntatore nullo di tipo char* execl( a.out, a.out, xxx, (char *)NULL) esegue il programma a.out, con argomenti a.out e xxx 19

Eseguire programmi int execl(const char *pathname, const char *arg0,...); se execl ha successo, il controllo non viene mai restituito al chiamante il processo chiamante diventa il nuovo programma altrimenti, restituisce 1 20

Eseguire programmi Di default, i file aperti dal processo corrente restano aperti dopo una exec questo comportamento si può cambiare usando la system call fcntl questo comportamento è utile per redirigere STDIN e STDOUT La memoria e la predisposizione ai segnali vengono azzerati 21

Eseguire programmi Due modi di specificare il programma: pathname: nome esatto, completo di percorso filename: il file sara' cercato nel PATH (Path) Due modi di specificare gli argomenti come elenco di parametri formali (Lista) terminati da un puntatore nullo (char *) NULL in un array di puntatori a caratteri (Vettore) terminato da un puntatore nullo (char *) NULL 22

Eseguire programmi int execl(pathname, arg0,...) int execv(pathname, char *const argv[]) int execlp(filename, arg0,...) int execvp(filename, char *const argv[]) Esempi d'uso: char *args[] = { ls, l, NULL}; execvp( ls, args); equivalenti execlp( ls, ls, l, NULL); execl( ls, ls, l, NULL); errato: ls non si trova nella directory corrente 23

Esercizio 4 Supponiamo che il seguente programma si chiami a.out. Qual è il suo output? int main(void) { printf( ciao!\n); execl( a.out, a.out, NULL); return 0; } 24

Esercizio 5 Scrivere un programma C elenca, che prende come argomento il nome di un file ed esegue il corrispettivo di ls l > file Ad esempio, elenca prova.txt scrive il risultato di ls l nel file prova.txt Suggerimento: usare dup2 25

Combinazione fork + exec Succede spesso che il programma A voglia eseguire il programma B e poi continuare ad elaborare Il programma A può creare un figlio che esegue B, mentre il padre aspetta che il figlio termini 26

Combinazione fork + exec // codice del programma A if ( (pid=fork()) < 0) perror( fork ), exit(1); if ( pid == 0 ) // il figlio esegue ls l if (execl( ls, ls, l, NULL)) perror( execl ), exit(1); // il padre aspetta che il figlio termini wait(); // il padre continua ad elaborare... 27

Esercizio 6 Scrivere un programma C che esegua in sequenza i comandi clear e ls l E' più facile svolgere questo esercizio in C o con uno script di shell? : ) 28

Esercizio 7 Scrivere un programma C ripeti : ripeti <n> <cmd> [<opzioni cmd>] esegue per n volte consecutive il comando cmd deve essere possibile passare delle opzioni al comando Esempio: > ripeti 3 echo ciao ciao ciao ciao 29