Gestione dei processi
Appunti di Sistemi Operativi per gli alunni
dell’I.T.I. « E. Medi » in S. Giorgio a
Cremano
Page 1
Multiprogrammazione
Tutti i Sistemi Operativi moderni sono in grado di
eseguire contemporaneamente più di un programma.
La CPU esegue comunque una sola istruzione per volta.
Il S.O. gestisce l’avvicendamento dei processi in
esecuzione: assegna la CPU ai vari processi istante
dopo istante.
L’utente ha la sensazione che le proprie applicazioni
siano eseguite contemporaneamente dal computer.
In realtà la sensazione di contemporaneità è data
dall’elevata velocità di esecuzione dei programmi da
parte del computer.
Page 2
Programma e Processo
•
•
•
•
Un programma è
costituito dal codice
oggetto generato dalla
compilazione del codice
sorgente
E’ salvato sotto forma di
uno o più file.
E’ un'entità statica, che
rimane immutata
durante l'esecuzione.
Il programma esiste
indipendentemente dal
computer che è in grado
di eseguirlo.
•
•
•
•
Al momento dell’esecuzione del
programma il SO crea il processo.
E’ un'entità dinamica, che
dipende dai dati che vengono
elaborati, e dalle operazioni
eseguite su di essi.
E’ caratterizzato, oltre che dal
codice eseguibile, dall'insieme di
tutte le informazioni che ne
definiscono lo stato.
Da un solo programma possono
scaturire più processi distinti.
Page 3
Cos’è un processo
•
•
•
•
•
Un processo è un’attività, controllata da un programma
E’ un entità dinamica che rappresenta l’esecuzione del
programma
Un processo è rappresentato da:
–
codice (text) del programma
–
dati: variabili globali del programma
–
program counter: indirizzo della successiva istruzione
–
alcuni registri di CPU
–
stack: parametri e variabili locali di funzioni o
procedure
In un sistema multitasking possono essere avviati molti
processi contemporaneamente
Per l’avanzamento di un processo è necessaria
l’assegnazione di un processore
Page 4
Terminazione di un processo
•
•
Un processo termina :
–
Quando esegue una istruzione assembler di
terminazione
–
Quando effettua una operazione illecita
• es. cerca di accedere alla memoria privata di altri
processi
–
Quando c’è un errore che non gli permette di
proseguire (es. overflow, etc)
In tutti questi casi il processore ricomincia
automaticamente ad eseguire il sistema operativo ad
un indirizzo prefissato
Page 5
Interruzione momentanea di un
processo
•
Un processo in esecuzione può cedere il processore
al SO nei due casi seguenti:
–
quando il processo stesso esegue una chiamata di
sistema per richiedere un servizio da parte del SO
(funzioni che permettono di invocare servizi di
competenza del SO, es. scrittura di file, stampa su
video …Sono disponibili in una libreria predefinita)
–
quando arriva una interruzione hw (quando si
verifica una situazione anomala tipo overflow,
oppure programmata dal clock, oppure richiesta
dall’I/O)
Page 6
Gestione dei processi
•
I processi hanno in memoria sempre aree dati disgiunte
(sebbene possano, a richiesta, condividere parte dei dati
oppure scambiarsi dei messaggi tra di loro).
Memoria centrale
Altri processi …
Codice eseguibile
del programma P
Processo
P1
Dati sui cui agisce
il programma P
Memoria centrale
Processo
Q1
Processo
P2
Processo
P1
Codice eseguibile
del programma Q
Dati sui cui agisce
il programma Q
Codice eseguibile
del programma P
Dati sui cui agisce
il programma P
Codice eseguibile
del programma P
Dati sui cui agisce
il programma P
Page 7
Identificativo di processo
•
•
Il Sistema Operativo associa a ogni processo (al
momento della creazione) un identificativo numerico
univoco, detto PID (Process Identifier).
Ad un processo sono associate le seguenti strutture dati:
–
Uno o più segmenti di codice.
–
Uno o più segmenti di memoria dati.
–
I descrittori di eventuali risorse in uso (file, finestre,
periferiche, ecc.)
–
Uno o più thread.
Page 8
Process control block
•
•
Il Process Control Block (Blocco di Controllo del
Processo) o PCB di un processo è una struttura dati del
nucleo del sistema operativo che contiene le
informazioni essenziali per la gestione del processo.
Contenuto del PCB:
–
Program counter
–
Salvataggio dei registri
–
Stato corrente di avanzamento del processo (Pronto,
In Esecuzione, Bloccato)
–
Identificatore unico del processo
–
Puntatore al processo padre e ai processi figli se
esistenti
–
Livello di priorità
–
Informazioni per la gestione della memoria
Page 9
Il contesto
•
Contesto all’istante t :
–
istruzione da eseguire (indirizzo in RAM: PC, IR)
–
contenuto dei registri dati del processore
–
il processo rappresenta lo stato di avanzamento del
programma istante per istante.
Page 10
Context-switching
•
•
•
•
•
Il context switch (commutazione di contesto) è la fase in
cui l’uso della CPU passa da un processo al suo
successivo
Si interrompe momentaneamente il primo processo per
riprendere temporaneamente l’esecuzione del secondo.
Nel context-switching viene salvato il PCB del primo
processo e caricato il PCB del secondo.
Nella fase di passaggio il SO realizza, in sequenza, le
seguenti operazioni:
–
Salvataggio dello stato del processo uscente
–
Selezione del nuovo processo
–
Ripristino dello stato del processo entrante
Si modifica, in questo modo, il contesto in cui lavora il
processore.
Page 11
Durata del context switch
•
•
Il tempo utilizzato dal SO per le operazioni di context
switch, in rapporto al time-slice (quanto di tempo di
CPU), non deve essere causa di
–
riduzione dell’efficienza della CPU
–
lunghi tempi di risposta
A tal fine, il tempo di context switch non deve superare il
25% del time-slice (solitamente di circa 100 ms)
Page 12
Stati di un processo
•
Ogni processo può essere in uno dei 3 stati:
–
Pronto (ready)
• Il processo non è in esecuzione, ha tutte le risorse
necessarie tranne la CPU
–
Attesa (wait) (sleep)
• Il processo non è in esecuzione, ha invocato un
servizio (es I/O) ed è in attesa di un segnale da
parte di un altro processo relativo al
completamento del servizio richiesto.
–
Esecuzione (run)
• Il processo dispone di tutte le risorse necessarie
ed è in esecuzione sulla CPU
Page 13
Stati di un processo
Ready
Wait
Run
Page 14
Transizione 1
•
Il processo viene creato e posto nello stato di
“pronto” (ready): può andare in esecuzione, se il
gestore dei processi lo decide
Ready
Wait
Run
Page 15
Transizione 2
•
Il Sistema Operativo seleziona uno dei processi in stato
Ready e lo pone in esecuzione (run): assegnato al
processore ed eseguito da esso
Ready
Wait
Run
Page 16
Transizione 3
•
Il Sistema Operativo interrompe l’esecuzione di un
processo e lo pone in stato di ready
Ready
Wait
Run
Page 17
Transizione 4
•
Nel corso dell’esecuzione il processo richiede un servizio
al Sistema Operativo e viene posto nello stato di wait
Ready
Wait
Run
Page 18
Transizione 5
•
Il Sistema Operativo completa la richiesta di un processo
che passa quindi allo stato di ready
Ready
Wait
Run
Page 19
Transizione 6
•
Il processo termina l’esecuzione e viene distrutto dal
Sistema Operativo
Ready
Wait
Run
Page 20
Il ciclo di vita dei processi  1
Ogni nuovo processo entra
nel sistema accedendo alla
ready queue (new  ready), e
va in esecuzione (ready 
running)
quando
viene
selezionato dallo scheduler
Un processo attivo può essere
arrestato per un interrupt
esterno (running  ready)
Un processo può anche essere sospeso dal nucleo
(running  ready), dopo un dato intervallo temporale,
per garantire a tutti i processi un uso paritario della
CPU: lo scheduler sceglie quale fra i processi pronti Page 21
Il ciclo di vita dei processi  2
Anche un’interruzione interna
può causare l’arresto di un
processo (running  waiting)
Viceversa,
il
verificarsi
dell’evento atteso da un
processo fa sì che esso passi
dallo stato di attesa allo stato
di pronto (waiting  ready)
Infine, un processo in esecuzione può terminare regolarmente,
o essere interrotto e terminato forzatamente dal nucleo
(aborted) per il verificarsi di un errore
Lo scheduler seleziona un nuovo processo dalla coda dei
processi ready
Page 22
Code d’attesa
•
•
Più processi possono essere in stato di ready pronti per
ottenere la risorsa CPU e passare in esecuzione.
I processi vengono quindi messi in coda d’attesa.
Page 23
Time sharing
•
•
•
I Sistemi Operativi moderni adottano la tecnica del timesharing per la gestione del processore.
Ad ogni processo viene assegnato un “quanto” di tempo
(time slice dell’ordine dei millisecondi) dopo il quale deve
rilasciare il processore passando dallo stato di run a
quello di ready.
Preemption (prerilascio) è l'operazione in cui un
processo viene temporaneamente interrotto, senza
alcuna cooperazione da parte del processo stesso, al
fine di permettere l'esecuzione di un altro processo.
Page 24
Scheduler
•
•
Lo scheduler (letteralmente "mettere in lista”) è un
programma che, dato un insieme di richieste di accesso
ad una risorsa, stabilisce un ordinamento temporale per
l'esecuzione di tali richieste, privilegiando quelle che
rispettano determinati parametri, in modo da ottimizzare
l'accesso a tale risorsa e consentire così l'espletamento
del servizio.
Lo short-time-scheduler (scheduler della CPU) deve
garantire l’esecuzione di ogni processo, in modo
ordinato, concedendo e revocando la CPU
alternativamente mediante operazioni dette
commutazioni di contesto tra i processi.
Page 25
Lo scheduler
•
Lo scheduler (di basso livello) è la parte del SO che si
preoccupa di ripartire il processore fra i processi in
maniera trasparente
–
es : 3 processi P1, P2, P3, vengono mandati in
esecuzione ciclicamente
tempo
Eseguo P1
Quanto
20-100 ms
Eseguo P2
Eseguo P3
Eseguo P1
Interruzione : lo scheduler
riprende il controllo e decide chi
eseguire nel quanto successivo
Periferica ‘clock’
Page 26
Politiche di scheduling
•
L'attenzione posta su alcuni parametri piuttosto che su
altri, differenzia la politica di scheduling:
–
–
–
lo scheduler può eseguire le richieste in base al loro
ordine di arrivo (politica FIFO),
oppure dare precedenza a quelle che impegnano per
meno tempo la risorsa;
possono esistere politiche che si basano su principi
statistici o sulla predizione per individuare un
ordinamento delle richieste che si avvicini il più
possibile quello ottimale.
Page 27
Obiettivi dello scheduler
•
•
•
•
•
Fairness (Equità) - processi della stesso tipo devono
avere trattamenti simili
Massimizzare il throughput (produttività dell'intero
sistema), minimizzando i tempi in cui la risorsa è
inutilizzata.
Minimizza il tempo che intercorre tra l'istante in cui la
richiesta è generata e quello in cui la richiesta è
soddisfatta.
Evitare fenomeni indesiderati come la starvation ovvero
"l'attesa eterna" di alcune richieste.
Dare all'utilizzatore del sistema la percezione che le
richieste vengano soddisfatte contemporaneamente.
Page 28
Tipi di processi
•
•
CPU Bound
–
Processi che sfruttano pesantemente le risorse
computazionali del processore, ma non richiedono
servizi di ingresso/uscita dati al sistema operativo in
quantità rilevanti.
–
Es. i programmi di calcolo matematico, i quali
necessitano spesso di un'enorme potenza di calcolo,
ma sfruttano l'I/O solo all'inizio della loro vita (per
caricare gli input) ed alla fine di essa (per produrre gli
output).
I/O Bound
–
molti accessi alle periferiche, il processo è spesso
interrotto per attendere il completamento delle
richieste di I/O.
Page 29
Classi di scheduling
•
Nella gestione delle risorse di un elaboratore, il fattore
tempo porta a identificare tre tipi di scheduling:
–
Scheduling a breve termine
–
Scheduling a medio termine
–
Scheduling a lungo termine
Page 30
Scheduling a lungo termine
•
•
•
•
E’ impiegato nella scelta dei programmi, presenti in
memoria secondaria, da caricare in memoria centrale
per la creazione dei corrispondenti processi
individua i programmi da ammettere all’esecuzione
regola la presenza in memoria centrale di processi I/O
bound e CPU bound
controlla il livello di multiprogrammazione
Page 31
Scheduling a medio termine
•
•
•
Gestisce la permanenza in memoria dei processi non in
esecuzione
coordina le operazioni di trasferimento temporaneo dei
processi in memoria secondaria (swap out):
interviene nella gestione dei processi in attesa di eventi
da lungo tempo
Page 32
Scheduling a breve termine
•
•
Si occupa della selezione del nuovo processo da
eseguire, quando
–
il processo in esecuzione passa allo stato di attesa o
ritorna allo stato di pronto oppure termina
–
un processo passa dallo stato di attesa allo stato di
pronto
–
si verificano eventi particolari (interruput, chiamate al
S. O.)
Quando la CPU rimane inattiva, il process scheduler
(modulo del kernel) seleziona dalla ready queue (coda
dei processi pronti) il prossimo processo a cui assegnare
la CPU e decide da quale momento e per quanto tempo
farlo eseguire.
Page 33
Dispatcher
•
L’effettiva assegnazione della CPU al processo
prescelto per l’esecuzione è affidata al dispatcher,
modulo del kernel che gestisce
–
il context switch
–
il passaggio al modo utente
–
il salto alla giusta posizione del programma utente
(impostazione del program counter)
Page 34
Classificazione delle politiche di
scheduling
•
Le politiche di scheduling della CPU si differenziano in
base a tre criteri di classificazione:
–
senza prelazione/con prelazione
–
senza priorità/con priorità
–
statiche/dinamiche
Page 35
Prelazione (pre-rilascio)
Politiche con prelazione
Politiche senza
prelazione
Una volta che la CPU è
stata assegnata ad un
processo, essa non può
più essergli tolta se non
quando il processo ha
esaurito il suo tempo di
servizio o necessita di
un'operazione di I/O.
La CPU può essere
forzatamente tolta al
processo in corso di
esecuzione per
essere assegnata ad
un altro processo.
Page 36
Priorità
Politiche senza priorità
Pongono i processi sullo
stesso piano, dal
punto di vista
dell’urgenza di
esecuzione.
Politiche con priorità
Distinguono e suddividono
in classi i processi in
stato di pronto, a
secondala della loro
importanza o urgenza di
esecuzione. Sono
necessarie nei sistemi
real-time e interattivi.
Page 37
Statiche/dinamiche
Politiche statiche
Un processo conserva nel
tempo i suoi diritti di
accesso all’unità
centrale (priorità)
Politiche dinamiche
I processi modificano nel
tempo i propri diritti di
accesso all’unità
centrale.
Page 38
Politiche di schedulazione
•
FCFS: First Come First Served
•
SJF: Shortest Job First -> (SRTF)
•
Per priorità
•
Round Robin
Page 39
FCFS: First Come First Served
•
•
•
•
La CPU è assegnata ai singoli processi in base al loro
ordine nella coda dei processi pronti (ready queue),
stabilito in base al tempo di arrivo oppure dal numero
identificativo (PID) La ready queue è gestita in modalità
FIFO (First In First Out)
E’ senza prelazione: il processo in esecuzione trattiene
la CPU sino al termine del suo tempo di servizio o fino a
quando non necessita di un’operazione di I/O
Tende a penalizzare i processi I/O bound e quelli di
breve durata, poiché costretti a lunghe attese dietro
processi CPU bound.
Tempi di attesa molto variabili e generalmente lunghi. La
gestione dei dispositivi è poco efficiente.
Page 40
SJF: Shortest Job First
•
•
•
•
La CPU è assegnata al processo il cui intervallo di tempo
previsto per l’utilizzo della CPU è più breve
Nel caso in cui più processi pronti presentino gli stessi
tempi di servizio, la scelta viene fatta secondo la politica
FCFS.
SJF senza prelazione: il processo in esecuzione trattiene la
CPU sino al termine del suo tempo di servizio o fino a
quando non necessita di un’operazione di I/O.
SJF con prelazione: se, ad un certo istante, nella coda dei
processi pronti giunge un processo con un tempo di servizio
più breve di quello che rimane (da completare) al processo
in esecuzione, la CPU viene rilasciata e ceduta al processo
appena arrivato (Shortest Remaining Time First - SRTF)
Page 41
Scheduling per priorità
•
•
•
A ciascun processo, in fase di generazione, viene attribuito
un livello di priorità, espresso da un numero intero. La CPU
è assegnata al processo che presenta la massima priorità.
A parità di priorità, si ricorre alla politica FCFS
Senza prelazione
–
il processo in esecuzione trattiene la CPU sino al termine
del suo tempo di servizio o fino a quando non necessita
di un’operazione di I/O.
Con prelazione
–
se nella coda dei processi pronti arriva un processo con
priorità maggiore di quella del processo in esecuzione,
questo rilascia la CPU, cedendola al processo appena
arrivato
Page 42
Determinare la priorità
•
•
•
•
Priorità definite dal S. O. (p. interna)
Priorità definite dall’utente (p. esterna)
Priorità statica
–
una volta stabilita, non varia nel tempo
Priorità dinamica
–
varia nel tempo per evitare che alcuni processi
possano essere bloccati per un tempo indefinito
(starvation), a causa della costante presenza nella
ready queue di processi a più elevata priorità
Page 43
Starvation (attesa indefinita)
•
Una possibile soluzione allo starvation è data dalla
procedura di aging (invecchiamento): la priorità di un
processo può
–
aumentare al crescere del suo tempo di attesa
–
diminuire al crescere del tempo di CPU già utilizzato
Page 44
Round Robin
•
•
•
La CPU viene assegnata, a turno, ad ogni processo per
un certo periodo q di tempo massimo (time-slice o
quanto di tempo)
Se, alla fine di tale periodo, il processo in esecuzione
non è terminato, esso viene ricondotto nella coda dei
processi pronti, all’ultima posizione
Alla messa in esecuzione, il S. O. avvia un dispositivo
timer, trascorso l’intervallo q, il timer genera
un’interruzione che provoca il prerilascio della CPU
Page 45
Time-slice
•
•
•
Un time-slice troppo grande rischia di far tendere la
politica Round Robin a quella FCFS.
Un time-slice troppo piccolo consente tempi di risposta
brevi ma impegna eccessivamente la CPU per le
operazioni di context switch, con conseguente calo della
produttività e dell’efficienza del sistema.
Nei sistemi reali il valore del time-slice che garantisce
buone prestazioni è compreso tra 20 e 50 millisecondi.
Page 46
E questa è davvero la
(almeno per quest’anno…)
Page 47