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
un’attività asincrona
l’entità a cui sono assegnati i processori
ciò che è manifestato dall’esistenza di un blocco di
controllo di processo nel sistema operativo
...
Processi 3
Stati di un Processo …
Un processo in un dato istante può trovarsi in uno e uno
solo dei seguenti stati:
•Ready,
•Running,
•Blocked.
Processi 4
… Stati di un Processo
Ready
Blocked
Dispatch
Timerrunout
Running
Blocked
Wakeup
Processi 5
Process Control Block (PCB)
Il PCB è una struttura dati che per ogni processo contiene
informazioni quali:
•Identificatore unico (PID);
•Stato corrente;
•Priorità;
•Puntatori alla memoria del processo;
•Puntatori alle risorse allocate al processo;
•…
Processi 6
Operazioni sui Processi
•Creazione, che a sua volta richiede che
•venga assegnato un nome
•venga inserito nella lista dei processi conosciuti
•venga assegnata una priorità iniziale
•venga creato il PCB
•vengano allocate le risorse iniziali
•Distruzione
•Sospensione
•Ripresa
•Cambiamento della priorità
•Blocco
•Risveglio
Processi 7
•Assegnazione della CPU al processo
Interruzioni (Interrupt)
Un Interrupt è un evento che modifica la sequenza con cui
il processore esegue le istruzioni
Quando si verifica un interrupt, il sistema operativo:
•Acquisisce il controllo
•Salva lo stato del processo interrotto
•Analizza l’interrupt e passa il controllo alla routine che
lo può gestire adeguatamente
Processi 8
Tipi di Interrupt …
•Supervisor Call (SVC): è eseguito da un processo che
si trova nello stato di running e che richiede un servizio
di sistema (ad es. operazioni di I/O, maggiore memoria,
operazioni su altri processi, …)
•Interrupt di I/O : è eseguito da un dispositivo hardware
di input o output, quando, ad es., è finita un’operazione
di I/O, quando si è verificato un errore, quando un
dispositivo periferico è pronto, …
•Interrupt Esterno: è causato da eventi esterni, come ad
es. la fine di un time slice, l’interruzione richiesta
dall’utente, …
Processi 9
… Tipi di Interrupt
•Restart Interrupt: avviene quando l’utente o un altro
processore (in un sistema multiprocessor) richiede che
il processo ricominci la propria esecuzione
•Program Check Interrupt: è causato da errori
nell’esecuzione del processo
•Machine Check Interrupt: è causato da errori hardware
Processi 10
Processi in Foreground e in
Background …
Normalmente, i processi vengono eseguiti in Foreground,
cioè vengono eseguiti in modo tale che:
•siano lanciati dagli utenti on-line
•durante la loro esecuzione non è possibile lanciare altri
processi
•ricevano input dallo standard input
•producano l’output sullo standard output
Processi 11
… Processi in Foreground e in
Background
Sia UNIX che LINUX permettono anche di eseguire
processi in Background, cioè processi tali che durante la
loro esecuzione è possibile lanciare altri processi
I processi in background possono essere eseguiti anche se
l’utente si scollega dal sistema e conclude la sessione di
lavoro
Processi 12
Operazioni sui Processi
Processi 13
Creazione …
I processi sono creati con la primitiva di sistema fork
L’effetto è la duplicazione del processo corrente (processo
padre) in due processi indipendenti: il padre e il processo
figlio
I due processi condividono le risorse precedentemente
assegnate al processo padre, ad eccezione della memoria.
La chiamata alla primitiva fork restituisce al processo
padre il valore dell’identificatore del processo figlio e al
processo figlio il valore 0
Processi 14
… Creazione
Esempio:
#include <sys/types.h>
#include <unistd.h>
pid_t child_pid;
child_pid = fork();
if(child_pid == -1) {
ERROR;
}
else if(child_pid == 0) {
do_child();
}
else {
do_parent();
}
Processi 15
Esecuzione …
La primitiva fork permette di creare il processo ma non
permette l’esecuzione
Per eseguire un processo precedentemente creato è
necessario invocare la primitiva execl
Processi 16
… Esecuzione
Esempio:
child_pid = fork();
if(child_pid == -1) ERROR;
if(child_pid == 0) {
// Child executes a new program image
execl("/bin/view", "view", "/etc/hosts");
ERROR;
}
else {
// Parent waits for child to finish
int status;
while(wait(&status) != child_pid);
}
Processi 17
Informazioni sui Processi in
Esecuzione …
Il comando ps permette di ottenere informazioni relative ai
processi in esecuzione, e precisamente, restituisce:
•PID
•TTY (codice di identificazione del terminale da cui è
stato creato il processo)
•STAT (stato del processo)
•TIME
•COMMAND (riga di comando con cui è stato fatto
partire il processo)
Processi 18
… Informazioni sui Processi in
Esecuzione
Le opzioni con cui si può eseguire il comando ps sono:
•-a mostra anche i processi degli altri utenti
•-x mostra anche i processi non gestiti da un terminale
Processi 19
Terminazione
Per terminare l’esecuzione di un processo esiste la
funzione exit.
La sintassi è
exit (int status)
dove status permette al processo terminato di comunicare
al padre informazioni relative al suo stato di terminazione
Tra gli effetti della exit si ha la chiusura di tutti i file aperti
purché non condivisi
Processi 20
Distruzione
La distruzione di un processo avviene mediante il comando
kill
La sintassi è la seguente
kill –9 pid
Dove –9 indica la chiusura del processo identificato da
PID e di tutti i processi figlio
Processi 21
Sincronizzazione
La sincronizzazione tra processi avviene mediante la
primitiva wait che permette di porre un processo in stato di
attesa fino al verificarsi di un certo evento (un esempio è
stato visto precedentemente)
Processi 22
Sospensione di un Processo
Per sospendere l’esecuzione di un processo è sufficiente
premere i tasti CTRL Z
Come effetto il sistema “congela” l’esecuzione del
processo.
Il processo riprende ad essere eseguito quando viene
invocato il comando
%PID
dove PID è l’identificatore del processo
Processi 23
Esecuzione di un Processo in
Background …
Ogni processo può essere eseguito in background. A tale
scopo è sufficiente aggiungere il suffisso & alla stringa di
comando
Ad esempio, fornendo la stringa di comando
cat file_name1 file_name2 > file_name3.ext &
il sistema risponde mostrando l’identificatore del processo,
e quindi esegue la concatenazione dei due file file_name1
e file_name2, producendo l’output nel file file_name3
Durante l’esecuzione del processo è possibile eseguire
ulteriori processi
Processi 24
… Esecuzione di un Processo
in Background …
Per eseguire un processo in background permettendo
all’utente di scollegarsi è sufficiente il comando nohup
premesso al comando che invoca il processo
Ad esempio la linea di comando
nohup cat file1 file2 > file3.ext &
ha lo stesso effetto visto precedentemente, con l’unica
differenza che se l’utente si scollega prima della fine del
processo, questi continua la propria esecuzione.
Processi 25
… Esecuzione di un Processo
in Background …
Per portare in foreground un processo precedentemente
lanciato in background è sufficiente usare il comando
fg PID
dove PID è l’identificatore del processo
Processi 26
… Esecuzione di un Processo
in Background
Per portare in background un processo precedentemente
lanciato in foreground si svolge la seguente procedura
CTRL Z
bg PID
dove PID è l’identificatore del processo
Processi 27