Processi
Esecuzione di programmi
Processo = programma in esecuzione
Ogni processo è identificato da un numero intero, detto PID (process identifier)
Ogni processo ha un contesto (tutte le info. nec. per l’esecuzione) User-level: contenuto dello spazio degli indirizzi, ambiente run-time (descrittori di file)
Kernel-level: parametri di scheduling, e controllo delle risorse Necessario xché siamo in presenza di multi-tasking!!
Multi-tasking
Supponendo di avere una CPU sola, ad ogni istante un solo processo potrà essere in esecuzione, il meccanismo di CPU scheduling fa sì che la CPU venga usata un po’
da tutti i processi rendendo l’impressione che questi vengano eseguiti in parallelo
Ogni volta che la CPU viene tolta ad un processo e passata ad un altro occorre fare context switching, cioè cambiare contesto caricando le info necessarie al processo corrente
Nascita di un processo
Ogni processo è creato da un processo preesistente tramite la system call (chiamata al S.O.) fork L’unica eccezione è il processo init che è il primo processo creato all’avvio del sistema ed ha PID = 1 Ogni esecuzione di un comando Unix produce un nuovo processo (spesso brevissimo); quando l’utente preme
“invio” l’ambiente di esecuzione (un interprete di comandi detto “shell”) crea un processo che esegue il comando in questione
Anche la shell è un processo creato all’atto del login
Elenco dei processi
Per visualizzare l’elenco dei processi attualmente in esecuzione si utilizza di solito il comando ps
Senza opzioni vengono visualizzati i soli processi avviati dall’utente che si è identificato su quel terminale:
Prompt> ps PID TTY TIME CMD 1472 pts/1 00:00:00 bash 1489 pts/1 00:00:00 csh 1528 pts/1 00:00:00 ps identificatore
Opzioni d’uso
Il comando ps ha moltissime opzioni
Esempi di risultati differenti ottenuti utilizzando opzioni o loro combinazioni:
prompt> ps -a
PID TTY TIME CMD 1345 tty1 00:00:00 bash 1359 tty1 00:00:00 xinit 1368 tty1 00:00:00 ksmserver 1454 tty1 00:00:00 knotify
Altro esempio
prompt> ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND baroglio 1472 0.0 0.8 2720 1656 pts/1 S 15:30 0:00 /bin/bash baroglio 1489 0.0 0.7 2752 1472 pts/1 S 15:30 0:00 -sh baroglio 1522 0.0 0.4 2664 820 pts/1 R 15:34 0:00 ps -u
proprietario statistiche di uso
ora di avvio tempo d’esecuzione
nome identificatore
stato proc
Combino le opzioni
prompt> ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.9 0.2 1356 532 ? S 15:28 0:03 init root 2 0.0 0.0 0 0 ? SW 15:28 0:00 [keventd]
root 3 65.8 0.0 0 0 ? SW 15:28 4:46 [kapm-idled]
root 4 0.0 0.0 0 0 ? SW 15:28 0:00 [kswapd]
root 5 0.0 0.0 0 0 ? SW 15:28 0:00 [kreclaimd]
root 6 0.0 0.0 0 0 ? SW 15:28 0:00 [bdflush]
root 7 0.0 0.0 0 0 ? SW 15:28 0:00 [kupdated]
root 8 0.0 0.0 0 0 ? SW 15:28 0:00 [mdrecoveryd]
root 63 0.0 0.2 1316 392 ? S 15:28 0:00 open -w -s -c 12
…
baroglio 1345 0.0 0.8 2700 1628 tty1 S 15:29 0:00 -bash baroglio 1359 0.0 0.4 2880 836 tty1 S 15:29 0:00 xinit /etc/X11/xi baroglio 1368 0.1 2.8 12608 5408 tty1 S 15:29 0:00 ksmserver –resto
…
baroglio 1526 0.0 0.5 2852 972 pts/1 R 15:35 0:00 ps -aux
Comando top
Anche top elenca i processi attivi sul nostro processore però mentre ps restituisce un’istantanea dello stato dei processi, top ha una durata non istantanea durante la quale mostra l’andamento delll’attività in corso.
I processi vengono elencati in ordine di occupazione della CPU, in testa quelli più CPU-costosi
Processi e controllo del terminale
Prompt> mio_programma
Supponiamo di avere prodotto il programma “mio_programma” e di averlo mandato in esecuzione, fino a quando non terminerà il programma manterrà il possesso del terminale, al termine ricomparirà il prompt e potrò digitare un nuovo comando Supponiamo che l’esecuzione sia molto lunga … potrei voler riavere il controllo del terminale mentre il programma viene eseguito in background
Passagio back ↔ fore-ground
Si dice che il processo che ha il controllo del terminale è eseguito in foreground
Su uno stesso terminale posso avere tanti processi eseguiti in background ma uno solo in foreground
Prompt> mio_programma Per far passare “mio_programma”
da esecuzione in foreground a esecuzione in background devo eseguire i seguenti passi …
Foreground → background
1. Premere la combinazione di tasti CNTRL-Z, questa combinazione di tasti produce un segnale che causa la sospensione del processo; a questo punto abbiamo nuovamente il controllo 2. Eseguire il comando “bg” che causa l’esecuzione
in background del processo sospeso
E’ possibile eseguire direttamente un
background → foreground
eseguendo il comando “fg” causo l’esecuzione in foreground del processo in background