Processi: system calls

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

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

Modulo 5 System call per il controllo dei processi (fork, exit, wait)

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

System Calls per la Gestione dei Processi

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

System call per la gestione di processi

System call per la gestione di processi

Controllo dei Processi 1

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

La creazione di un nuovo processo in UNIX

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

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

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

Laboratorio di Sistemi Operativi

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

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

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

Processi: Exit, Wait, Exec

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

I Processi nel SO UNIX

L ambiente di un processo (I)

I Processi nel SO UNIX

LABORATORIO DI SISTEMI OPERATIVI

I Processi nel Sistema Operativo Unix

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

I Processi nel SO UNIX

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4

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

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

Processi. Franco Maria Nardini

Programmazione multiprocesso

Gestione dei processi nel sistema operativo Unix

Transizioni di stato in UNIX

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

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

Î 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) Tabella dei. file APERTI OPEN FILE. Tabella dei codici

Gestione dei processi

Corso di Programmazione Concorrente Processi. Valter Crescenzi

il tipo di parallelismo dipende dal grado di cooperazione

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

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

Richiami sui Concetti Fondamentali dei Processi

Sistemi Operativi Teledidattico

Signalling (IPC) Signalling (segnalazione)

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

Processi - II. Franco Maria Nardini

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

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX

ACSO Programmazione di Sistema e Concorrente

Processi in Unix. Capitolo 8 -- Stevens

Sistemi Operativi. Lezione 4 I processi: implementazioni

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

Sistemi Operativi 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008

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

Corso di Laboratorio di Sistemi Operativi A.A

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 modulo 3

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

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

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

INTERPROCESS COMMUNICATION 27

Gestione dei processi. Marco Bonola Lezione tratta da

2. Nucleo del sistema operativo (la gestione dei processi)

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

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

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

Lab. di Sistemi Operativi - Lezione in aula - a.a. 2012/2013

Capitolo 3 -- Stevens

Sommario. Processi e Programmi. Che cosa e un Processo? Lezione 5 Processi e Threads

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

Processi - II. Franco Maria Nardini

Programmazione di Sistema 3

Laboratorio di Sistemi Operativi

Directory. Le directory unix sono file.

LABORATORIO DI SISTEMI OPERATIVI

Gestione dei processi

Programmazione di Sistema 3

Sistemi Operativi. II Semestre - Marzo/Giugno 2012 Matricole congr. 0 mod 3. File & Directory

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

Processi. Introduzione ai processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

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

2. Nucleo del sistema operativo (la gestione dei processi)

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Simulazione esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

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

Il sistema operativo LINUX Indice

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

Laboratorio di Sistemi Operativi

Sistemi Operativi. II Semestre - Marzo/Giugno 2011 Matricole congr. 0 mod 3. File & Directory. Leggere Directory

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

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva Processi

File binari e file di testo

Process management 1

LABORATORIO DI SISTEMI OPERATIVI

Processi in Linux. Stru/ura file eseguibili

Introduzione al Multithreading

SC per Inter Process Comminication. Pipe senza nome e con nome (FIFO)

5. I device driver. Device driver - gestori delle periferiche. Struttura interna del sistema operativo Linux. Tipi di periferiche. Tipi di periferiche

Transcript:

Processi 24

Processi: system calls In Unix, ogni processo viene creato dal kernel su richiesta di un altro processo (detto processo padre), mediante una apposita system call (fork). Esiste un processo iniziale (PID=0) che non ha padre, e che viene creato dal kernel al momento della inizializzazione del sistema. Ogni processo si termina attraverso una apposita system call (exit). 25

Fork In Unix un nuovo processo viene creato esclusivamente per duplicazione di un processo esistente, attraverso la system call: pid_t fork(void); che crea un processo figlio identico al padre, e restituisce: al figlio: 0 al padre: PID del figlio in caso di errore: -1 L unica eccezione è il processo 0, che viene creato alla inizializzazione del sistema. 26

bootstrap Processo Ø fork /etc/init fork /etc/getty /bin/login LOGIN SHELL swapper fork /etc/getty /bin/login LOGIN SHELL fork /etc/getty /bin/login LOGIN SHELL fork /etc/getty /bin/login LOGIN SHELL fork demoni

Controllo processi La fork() come le funzioni sottostanti sono definite in <unistd.h>. pid_t è definito in <sys/types.h> ed identifica i PIDs Process id ed altri identificatori pid_t getpid(); // Process id of calling process pid_t getppid(); // Process id of parent process uid_t getuid(); // Real user id uid_t geteuid(); // Effective user id gid_t getgid(); // Real group id gid_t getegid(); // Effective group id 28

Fork p = fork(); if p < 0 { /* la fork è fallita */ } else if p=0 { /* operazioni del figlio */ } else { /* operazioni del padre */ } 27

Fork Alloca una entry nella Process Table per il nuovo processo; Assegna un PID unico al nuovo processo e inizializza i campi della Process Table entry; Crea una copia della immagine del processo padre (il testo non viene duplicato ma si incrementa un reference count); Incrementa opportuni contatori dei file aperti; Inizializza i contatori di accounting nella u-area del nuovo processo; Pone il nuovo processo nello stato di pronto; Restituisce il PID del figlio al padre, 0 al figlio o -1 in caso di errore. 28

Controllo processi - Creazione System call: pid_t fork(); crea un nuovo processo child, copiando completamente l immagine di memoria del processo parent data, heap, stack vengono copiati il codice viene spesso condiviso in alcuni casi, si esegue copy-on-write sia il processo child che il processo parent continuano ad eseguire l istruzione successiva alla fork fork viene chiamata una volta, ma ritorna due volte processo child: ritorna 0 (E possibile accedere al pid del parent tramite la system call getppid) processo parente: ritorna il process id del processo child errore: ritorna valore negativo 29

Fork Ready queue Kerne el Process Table Switcher System calls Interrupt handlers U-Area U-Area P= n Stack Stack P=0 Dati Dati P=fork() Testo Processo Padre Processo Figlio 29

Controllo processi - Creazione Relazione tra fork e file aperti (redirezione) una caratteristica della chiamata fork è che tutti i descrittori che sono aperti nel processo parent sono duplicati nel processo child process table open file table v-node table 0 1 2 parent file status flag current offset vnode ptr v-node info i-node info file size 0 1 2 child file status flag current offset vnode ptr v-node info i-node info file size 33

Controllo processi - Creazione Relazione tra fork e file aperti (redirezione) è importante notare che parent e child condividono lo stesso file offset esempio: si consideri un processo che esegue fork e poi attende che il processo child termini (system call wait) supponiamo che lo stdout sia rediretto ad un file, e che entrambi i processi scrivano su stdout se parent e child non condividessero lo stesso offset, avremmo un problema: il child scrive su stdout e aggiorna il proprio current offset il parent sovrascrive stdout e aggiorna il proprio current offset 34

Controllo processi - Creazione Come gestire i descrittori dopo una fork il processo parent aspetta che il processo child termini in questo caso, i file descriptor vengono lasciati immutati eventuali modifiche ai file fatte dal processo child verranno riflesse nella file table entry e nella v-node entry del processo figlio i processi parent e child sono indipendenti in questo caso, ognuno chiuderà i descrittori non necessari e proseguirà opportunamente 35

Controllo processi - Creazione Proprietà che il processo child eredita dal processo parent: real uid, real gid, effective uid, effective gid gids supplementari id del gruppo di processi session ID terminale di controllo set-user-id flag e set-group-id flag directory corrente directory root maschera di creazione file (umask) maschera dei segnali flag close-on- per tutti i descrittori aperti environment 36

Controllo Processi - Creazione Proprietà che il processo child non eredita dal processo parent: valore di ritorno di fork process ID process ID del processo parent file locks l insieme dei segnali in attesa viene svuotato 2001-2005 Alberto Montresor, Renzo Davol 31

Controllo processi - Creazione Ragioni per il fallimento di fork il numero massimo di processi nel sistema è stato raggiunto; il numero massimo di processi per user id è stato raggiunto. Utilizzo di fork quando un processo vuole duplicare se stesso in modo che parent e child eseguano parti diverse del codice; Network servers: il parent resta in attesa di richieste dalla rete; quando una richiesta arriva, viene assegnata ad un child, mentre il parent resta in attesa di richieste quando un processo vuole eseguire un programma diverso (utilizzo della chiamata ). 2001-2005 Alberto Montresor, Renzo Davoli 32

Controllo processi - Creazione System call: pid_t vfork(); Stessa sequenza di chiamata e stessi valori di ritorno di fork Semantica differente: vfork crea un nuovo processo allo scopo di eseguire un nuovo programma con () vfork non copia l immagine di memoria del parent; i due processi condividono lo spazio di indirizzamento fino a quando il child esegue () o exit() Guadagno di efficienza vfork garantisce che il child esegua per primo: continua ad eseguire fino a quando non esegue () o exit() il parent continua solo dopo una di queste chiamate 39

Exec In Unix non esiste alcuna system call per creare un processo che esegue l eseguibile x : devo farlo utilizzando più system call. (pathname, argomenti) sostituisce l immagine del chiamante con il file eseguibile pathname, e lo manda in esecuzione passandogli gli argomenti. 33

Exec p = fork(); if p < 0 { /* la fork è fallita */ } else if p=0 {/* operazioni idel lfiglio */} ( ) else { /* operazioni del padre */ } 34

Exec Quando un processo chiama una delle system call : il processo viene rimpiazzato completamente da un nuovo programma (text, data, heap, stack vengono sostituiti); il nuovo programma inizia a partire dalla sua funzione main; il process id non cambia. Esistono sei versioni di : con/senza gestione della variabile di ambiente PATH; Se viene gestita la variabile d'ambiente, un comando corrispondente ad un singolo filename verrà cercato nel PATH con variabili di ambiente ereditate / con variabili di ambiente specificate; con array di argomenti / con argomenti nella chiamata (NULL terminated). 2001-2005 Alberto Montresor, Renzo Davoli 35

Controllo processi - Esecuzione All'esecuzione di un nuovo programma i passi seguiti dal sistema sono: Il kernel apre il file passato come argomento e controlla che ci siano i permessi di esecuzione. L'esecuzione del "vecchio" processo viene sospesa. Le nuove istruzioni lette dal file eseguibili sono caricate dal kernel. Set-up delle strutture dati del nuovo processo. L'esecuzione del nuovo processo comincia. Con la system call () si rimpiazzare l'esecuzione del processo originale con una nuova esecuzione di un "altro" processo. Se la chiamata a () ha successo allora il controllo non tornerà mai al processo chiamante! 56

Controllo processi - Esecuzione #include <unistd.h> int l(const char *path, const char *arg,...); int lp(const char *file, const char *arg,...); int le(const char *path, const char *arg,...); int t(const char *path, char *const argv[], char *const envp[]); int v(const char *path, char *const argv[]); int vp(const char *file, char *const argv[]); Nota: Normalmente una sola di queste è una system call, le altre sono chiamate di libreria 57

Controllo processi - Esecuzione PATH: Se usato un array, ogni elemento ha la forma VARIABILE=VALORE (es. PATH=/bin:/usr/bin) Se usato un puntatore si fa riferimento alle variabili globali del sistema (es. extern char **environ) PATHNAME or FILENAME: PATHNAME fa riferimento ad un path (relativo o assoluto) che punta al file da eseguire FILENAME fa riferimento ad un nome di un comando da eseguire che verrà cercato tra i comandi raggiungibili in PATH Argv[] or Arg list: Con il primo tipo gli argomenti sono passati all'interno di un array. Nel secondo caso gli argomenti sono parametri della chiamata (l'ultimo parametro deve essere NULL). 58

Controllo processi - Esecuzione Funzione pathname filename arg list argv[ ] environ envp[ ] l lp le v vp ve 59

Exec Ready queue Kerne el Process Table Switcher System calls Interrupt handlers U-Area U-Area Stack Stack Dati Dati Testo Processo Padre Processo Figlio 38

Exec Ready queue Kerne el Process Table Switcher System calls Interrupt handlers U-Area U-Area Stack Stack Dati Dati Testo Testo Processo Padre Processo Figlio 39

Controllo processi - Esecuzione Cosa viene ereditato da? process ID e parent process ID real uid e real gid supplementary gid process group ID session ID terminale di controllo current working directory root directory maschera creazione file (umask) file locks maschera dei segnali segnali in attesa 2001-2005 Alberto Montresor, Renzo Davoli 40

Controllo processi - Esecuzione Cosa non viene ereditato da? effective user id e effective group id vengono settati in base ai valori dei bit di protezione Cosa succede ai file aperti? Dipende dal flag close-on- che è associato ad ogni descrittore Se close-on- è true, vengono chiusi Altrimenti, vengono lasciati aperti (comportamento di default) 2001-2005 Alberto Montresor, Renzo Davoli 41

Controllo processi - Esecuzione int system(char* command); Esegue un comando, aspettando la sua terminazione. Standard e system: Funzione definita in ANSI C, ma il suo modo di operare è fortemente dipendente dal sistema; Non è definita in POSIX.1, perché non è un'interfaccia al sistema operativo; Definita in POSIX.2. 2001-2005 Alberto Montresor, Renzo Davoli 42

Exit In Unix un processo si termina con la system call void _exit(int status); che: - termina il processo chiamante; - rende disponibile al processo padre il valore di status, mettendolo nella propria process table entry; 43

Exit Ready queue Kerne el Process Table Switcher System calls Interrupt handlers La process table entry del U-Area U-Area figlio non può essere rimossa fino a quando il Stack Stack valore di status in essa Dati Dati contenuto non è stato prelevato dal padre Testo Testo Processo Padre Processo Figlio 44

Controllo processi - Terminazione Esistono tre modi per terminare normalmente: eseguire un return da main; equivalente a chiamare exit() chiamare la funzione exit: invocazione di tutti gli exit handlers che sono stati registrati chiusura di tutti gli I/O stream standard specificata in ANSI C; non completa per POSIX chiamare la system call _exit si occupa dei dettagli POSIX-specific; chiamata da exit Lo standard C definisce una sotto-funzione atexit(): void atexit(void (*function)(void)) Permette di richiamare una funzione ad-hoc alla chiamata di exit 41

Controllo processi - Terminazione Esistono due modi per terminare in modo anormale: Quando un processo riceve certi segnali; Generati dal processo stesso Da altri processi Dal kernel Chiamando abort(). Questo è un caso speciale del primo, in quanto genera il segnale SIGABRT Terminazione normale/anormale Qualunque sia il modo di terminare del processo, l'effetto per il kernel è lo stesso: rimozione della memoria utilizzata dal processo; chiusura dei descrittori aperti, etc. 2001-2005 Alberto Montresor, Renzo Davoli 46

Controllo processi - Terminazione Exit status: Il valore che viene passato ad exit e che notifica il parent su come è terminato il processo (errori, ok, etc.). Termination status: Il valore che viene generato dal kernel nel caso di una terminazione normale/anormale; Nel caso si parli di terminazione anormale, si specifica la ragione per questa terminazione anormale. Come ottenere questi valori? Tramite le funzioni wait (e waitpid). 2001-2005 Alberto Montresor, Renzo Davoli 47

Wait La system call pid_t wait (int *status) - sospende il processo chiamante fino a che uno dei suoi figli termina; - restituisce il PID del figlio terminato (di uno a caso se sono più di uno) o 1 se non ci sono figli; - assegna a status l exit status del figlio. 48

Controllo processi - Terminazione La system call wait() oermette al processo di attendere finchè il figlio non ha terminato l'elaborazione. L'attesa permette al processo sospeso di: Conoscere il codice di uscita del figlio Distinguere la terminazione normale/anormale Eventuale tipo di segnale di kill() Eventuali condizioni di abort() Possibilità di recuperare file di dump Le informazioni sono tenute nell'entry della process table del processo figlio. Le informazioni sono tenute finchè i valori non sono letti (il processo figlio è in stato zombie). 45

Wait-Exit Cosa succede se il parent termina prima del child? si vuole evitare che un processo divenga "orfano"; il processo child viene "adottato" dal processo init (pid 1); meccanismo: quando un processo termina, si esamina la tabella dei processi per vedere se aveva figli; in caso affermativo, il parent pid viene posto uguale a 1. Cosa succede se il child termina prima del parent? se il child scompare, il parent non avrebbe più modo di ottenere informazioni sul termination/exit status del child; per questo motivo, alcune informazioni sul child vengono mantenute in memoria e il processo diventa uno zombie. 2001-2005 Alberto Montresor, Renzo Davoli 49

Wait-Exit Status zombie vengono mantenute le informazioni che potrebbero essere richieste dal processo parent tramite wait (e waitpid): Process ID Termination status Accounting information (tempo impiegato dal processo) il processo resterà uno zombie fino a quando il parent non eseguirà una delle system call wait. Child del processo init: non possono diventare zombie; tutte le volte che un child di init termina, init esegue una chiamata wait e raccoglie eventuali informazioni; in questo modo gli zombie vengono eliminati. 2001-2005 Alberto Montresor, Renzo Davoli 50

Wait-Exit Notifica della terminazione di un figlio: Quando un processo termina (normalmente o no), il parent viene notificato tramite un segnale SIGCHLD. Notifica asincrona; Il parent: Può ignorare il segnale (default); Può fornire un signal handler (una funzione che viene chiamata quando il segnale viene lanciato). 2001-2005 Alberto Montresor, Renzo Davoli 51

Controllo processi - Terminazione Quando un processo chiama wait (o waitpid): Nota: può bloccarsi; Se tutti i suoi child sono ancora in esecuzione può ritornare immediatamente con il termination status di un child; Se un child ha terminato ed il suo termination status è in attesa di essere raccolto può ritornare immediatamente con un errore. Se il processo non ha alcun child se eseguiamo una system call wait poiché abbiamo ricevuto SIGCHLD, essa termina immediatamente; altrimenti può bloccarsi. 2001-2005 Alberto Montresor, Renzo Davoli 52

Controllo processi - Terminazione Il contenuto del termination status dipende dall'implementazione bit per la terminazione normale, bit per l'exit status, etc. Macro WIFEXITED(status): ritorna true se lo status corrisponde ad un child che ha terminato normalmente. In questo caso, possiamo usare: WEXITSTATUS(status):Ritorna l'exit status specificato dal comando Macro WIFSIGNALED(status): ritorna true se lo status corrisponde ad un child che ha terminato in modo anormale. In questo caso possiamo usare: WTERMSIG(status):Ritorna il numero di segnale che ha causato la terminazione WCOREDUMP(status):Ritorna true se un file core è stato generato (Non POSIX) Macro WIFSTOPPED(status): ritorna true se il processo è stato stoppato, nel qual caso è possibile utilizzare: WSTOPSIG(status): Ritorna il numero di segnale che ha causato lo stop 51

Wait-Exit Significato degli argomenti: status è un puntatore ad un intero; se diverso da NULL, il termination status viene messo in questa locazione Il valore di ritorno è il process id del child che ha terminato. Differenza tra wait e waitpid: wait può bloccare il chiamante fino a quando un qualsiasi child non termina; waitpid ha delle opzioni per evitare di bloccarsi; waitpid può mettersi in attesa di uno specifico processo. 2001-2005 Alberto Montresor, Renzo Davoli 53

Controllo processi - Terminazione System call: pid_t waitpid(pid_t pid, int *statalloc, int options); Argomento pid: Options: pid == -1 pid > 0 pid == 0 pid < -1 si comporta come wait attende la terminazione del child con process id corrispondente attende la terminazione di qualsiasi child con process group id uguale a quello del chiamante attende la terminazione di qualsisi child con process group ID uguale a pid WNOHANG non si blocca se il child non ha terminato 54

Wait-Exit padre int st; 0. wait ( &st ) exit (0). figlio 0 process table entry del figlio 54

Bootstrap All accensione della macchina, l hardware lancia il programma di boostrap ; che carica in memoria il blocco di boot da disco, il quale contiene un programma ;. che carica in memoria il kernel ; e quindi trasferisce il controllo a un entry point (start), che crea il processo 0. 55

Inizializzazione del sistema bootstrap Start Processo Ø inizializza le strutture dati del kernel crea processo 1 (init) (fork+) crea un processo per ogni terminale attivo e i demoni: è il padre di tutti i processi è in loop fork /etc/init 1 fork /etc/getty /bin/login LOGIN SHELL fork cm d swapper fork /etc/getty /bin/login LOGIN SHELL comando fork /etc/getty. /bin/login LOGIN SHELL è la shell di login effettua il login kernel mode fork user mode demoni inizializza il terminale 56