Title: PROCESS MANAGEMENT: STRUTTURE DATI
1PROCESS MANAGEMENT STRUTTURE DATI
2Sintesi fin qui
Switcher
Residente
Daemon
Processi utente
Non residente
Processo 2
Processo n
Processo 1
Memoria centrale
Periferiche
3Immagine di un processo
- Limmagine di memoria di un processo è
organizzata in tre regioni
E rientrante, e può essere condiviso fra più
processi
- Ogni regione è uno spazio di indirizzamento
autonomo
4Che cosa genera il compilatore C
include ...
NON
char buffer1000
INIZIALIZZATI
int version1
DATI
main(int argc, char argv)
INIZIALIZZATI
int i
while ...
...
STACK
exit (0)
int fun(int n)
int j
if ...
TESTO
...
3
5Formato di un eseguibile
Un eseguibile è costituito da un insieme di
header e un insieme di sezioni, contenenti codice
o dati
6Sintesi fin qui
Switcher
Residente
Stack
Stack
Stack
Non residente
Dati
Dati
Dati
Testo
Testo
Testo
Processo 2
Processo n
Processo 1
Memoria centrale
Periferiche
7Strutture dati per la gestione dei processi
- Process Table
- si trova nel kernel, ed è residente
- contiene una entry per ogni processo, ed è
dimensionata staticamente al momento della
configurazione del sistema - per ogni processo contiene le informazioni che ne
permettono la schedulazione, e che devono essere
sempre residenti - U-Area (user area)
- si trova nel kernel, ma non è residente
- contiene quelle informazioni necessarie al kernel
per la gestione del processo, ma che non è
necessario che siano sempre residenti in memoria - Ready Queue
- Liste dei processi ready (una per ciascun livello
di priorità)
8Strutture dati per la gestione dei processi
9Strutture dati per la gestione dei processi
0
1
2
3
4
Process Table
U-Area
Processo
10Strutture dati per la gestione dei processi
0
1
2
3
4
Process Table
U-Area
11Sintesi fin qui
12MEMORY MANAGEMENT
13Paginazione
- Le versioni non antiche di Unix utilizzano
tecniche di paginazione - Per eseguire un processo è sufficiente che in
memoria siano presenti almeno - la sua u-area
- la sua tabella delle pagine
- Le pagine di testo, dati e stack sono portate
dinamicamente in memoria dal kernel, una alla
volta, quando servono (cioè a seguito di un page
fault) - Se u-area e tabella delle pagine non sono in
memoria, ve le porta il processo swapper
14Pagedaemon
- E un demone che viene eseguito periodicamente
per controllare il numero di pagine libere in
memoria - Se è troppo basso, libera qualche pagina
- Se è ok, ritorna inattivo
15Swapper
- E un processo di sistema che
- Se le pagine libere sono sotto il minimo, rimuove
uno o più processi dalla memoria (in genere
quelli inattivi da più tempo) SWAPOUT - Verifica periodicamente la esistenza di processi
pronti su disco e, se possibile, li carica in
memoria (solo u-area e tabella delle pagine)(in
genere quelli fuori da più tempo, a meno che non
siano troppo grossi) SWAPIN
16PROCESS MANAGEMENT SYSTEM CALL
17Processi in Unix
- 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 (PID0) 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)
18Creazione di un processo
- 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 - Lunica eccezione è il processo 0, che viene
creato alla inizializzazione del sistema
19Fork esempio
- p fork()
- if p lt 0 / la fork è fallita /
- else if p0 / operazioni del figlio /
- else / operazioni del padre /
In Unix non esiste alcuna system call per creare
un processo che esegue leseguibile x Devo
farlo utilizzando più system call
20Creazione di un processo
Pfork()
21Che cosa fa la 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
22Le system call exec
- exec (pathname, argomenti)
- sostituisce limmagine del chiamante con il file
eseguibile pathname, e lo manda in esecuzione
passandogli gli argomenti
23Creazione di un processo
U-Area
Stack
Dati
Processo Figlio
24Exec
U-Area
U-Area
Stack
Stack
Dati
Dati
Testo
Testo
Processo Figlio
Processo Padre
25Terminazione di un processo
- In Unix un processo si termina attraverso 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 - - (il padre potrà ottenerlo tramite la primitiva
wait)
26Wait
- 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 lexit status del figlio
27Exit esempio
padre int st . wait ( st )
figlio exit (0) .
28Exit
La process table entry del figlio non può essere
rimossa fino a quando il valore di status in essa
contenuto non è stato prelevato dal padre
U-Area
U-Area
Stack
Stack
Dati
Dati
Testo
Testo
Processo Figlio
Processo Padre
29Zombie e orfani
- un processo terminato passa nello stato di
zombie, e viene definitivamente rimosso dopo che
il padre ha ricevuto il suo stato di terminazione
con una wait - un processo zombie occupa un insieme minimo di
risorse (process table entry) - un processo orfano (cioè il cui padre è
terminato) viene adottato dal processo init,
quindi un processo ha sempre un padre
30Altri stati di un processo
31INIZIALIZZAZIONEDEL SISTEMA
32BOOTSTRAP
- Allaccensione della macchina, lhardware 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
33Inizializzazione del sistema
- inizializza le strutture dati del kernel
- crea processo 1 (init) forkexec)
Start
- crea un processo per ogni terminale attivo e i
demoni è il padre di tutti i processi è in loop
1
1
comando
è la shell di login
effettua il login
inizializza il terminale
kernel mode
user mode
34STRUTTURA DELLA SHELL
35Shell interfaccia utente
- file args esecuzione in foreground
- ltoutputgt
- file args esecuzione in background
36Struttura generale della shell
file argsltgt ltoutputgt
- write (1, PROMPT)
- while ((nread(0,buffer,80)!0)
- riconosci nome file e args
- If ( (pidfork()) 0) / I/O redirection
/ if (exec(file, args)-1) exit (1) - procidwait(status)
- If (status !0) write (2, error)
- write(1,PROMPT)
-
Se il comando è eseguito in background, non viene
eseguita la wait
37COMUNICAZIONE FRA PROCESSI
38Interprocess communication in Unix
- Unix fornisce diversi meccanismi
- Segnali
- Pipes
- Sockets
39Che cosè un segnale
- Un segnale è una notifica a un processo che è
occorso un particolare evento - Un errore di floating point
- La morte di un figlio
- Una richiesta di terminazione
-
- I segnali possono essere pensati come degli
interrupts software - I segnali possono essere inviati
- da un processo a un altro processo
- da un processo a se stesso
- dal kernel a un processo
- Ogni segnale è identificato da un numero intero
associato a un nome simbolico
40Segnali in POSIX
- Segnale Significato (default)
- SIGABRT Abortisce un processo (termina con
dump) - SIGALRM Invia un segnale di "sveglia" (termina)
- SIGCHLD Lo stato di un figlio è cambiato
(ignora) - SIGCONT Continua un processo stoppato (continua
o ignora) - SIGFPE Floating Point Error (termina con dump)
- SIGHUP Hangup su un terminale (termina)
- SIGILL Istruzione di macchina illegale (termina
con dump) - SIGINT Premuto il tasto DEL per interrompere il
processo (termina) - SIGKILL Segnale per terminare un processo (non
può essere ignorato) (termina) - SIGPIPE Tentativo di scrivere su una pipe che
non ha lettori (termina) - SIGQUIT L'utente ha usato il tasto di quit del
terminale (termina con dump) - SIGSEGV Riferimento a un indirizzo di memoria
non valido (termina con dump) - SIGSTOP Per stoppare un processo (non può essere
ignorato) (stoppa il processo) - SIGTERM Segnale per terminare un processo
(termina) - SIGTSTP L'utente ha usato il tasto "suspend" del
terminale (stoppa il processo) - SIGTTIN Un processo in background tenta di
leggere dal suo terminale di controllo (stoppa
il processo) - SIGTTOU Un processo in background tenta di
scrivere sul su terminale di controllo (stoppa
il processo) - SIGUSR1 Disponibile per scopi definiti
dall'applicazione
41System call per gestire i segnali
- kill (PID, sig)
- invia il segnale specificato al processo o al
gruppo di processi specificato - sigaction (sig, action, ..)
- associa a un segnale la sua funzione di
trattamento - (inizialmente signal non POSIX)
42Come viene trattato un segnale
- Quando un processo riceve un segnale, può
- Trattarlo mediante una specificata funzione
(handler) - Ignorarlo
- Attivare lazione di default associata al segnale
stesso (termina o sospendi il processo, ignora)
43Esempio
- Per terminare o sospendere un processo in
foreground, lutente può premere i tasti CTRL-C o
CTRL-Z (rispettivamente) - Tale carattere viene acquisito dal driver del
terminale, che notifica al processo il segnale
SIGINT o SIGTSTP (rispettivamente) - Per default, SIGINT termina il processo e SIGTSTP
lo sospende - NB Tali segnali vengono inviati a tutto il
gruppo di processi
44Protezione
- Per motivi di protezione, deve valere almeno una
delle seguenti condizioni - Il processo che riceve e il processo che invia il
segnale devono avere lo stesso owner - Lowner del processo che invia il segnale è il
superuser
45Strutture dati per la gestione dei segnali
0
1
2
3
4
Process Table
U-Area