Sistemi Operativi Giuseppe Prencipe Multiprogrammazione

Multiprogrammazione
Sistemi Operativi
Giuseppe Prencipe
 Obiettivi (????)
Avere sempre processi in esecuzione per
massimizzare l’utilizzo della CPU
 IDEA alla base della MultiP (????)
Scheduling della CPU
Un processo è in esecuzione finché non
deve attendere un evento
Durante l’attesa la CPU NON resta inattiva, e
si esegue un nuovo processo tra quelli pronti
1
Scheduling dei processi
2
Scheduling
 Lo scheduler si occupa di decidere quale fra i
processi pronti può essere mandato in esecuzione
 L’algoritmo di scheduling ha impatto su:
prestazioni percepite dagli utenti
efficienza nell’utilizzo delle risorse della macchina
 Lo scheduling ha obiettivi diversi in diversi sistemi
(batch, interattivi…)
 NOTA: quasi tutte le risorse del calcolatore
vengono sottoposte a scheduling
3
4
Sequenza di CPU e I/O burst
Scheduling
L’ultima sequenza
di operazioni
della CPU si
conclude con
una richiesta di
terminare
l’esecuzione
(come????)
 Osservazione: i processi si alternano
fra due stati
Ciclo d’elaborazione
Attesa completamento I/O
5
1
6
Diagramma delle durate delle
sequenze di operazioni della CPU
Tipi di processi
P1
Lungo burst di CPU
Attesa completamento i/o
Corto burst di CPU
P2
tempo
 Processi compute bound (P1) and I/O bound (P2)
-- durata della sequenza
Curva di frequenza
7
8
Tipi di processi
Tipi di processi
P1
P1
P2
P2
tempo
tempo
 Priorità agli I/O bound
 Priorità ai compute bound
il funzionamento del sistema è più bilanciato
9
Tipi di processi
10
Scheduler della CPU
 Quale scheduler si occupa dello scheduling
della CPU?
Breve termine!!!!
 Due tipologie di processi :
processi CPU-bound -- lunghi periodi di
eleborazione fra due richieste successive di I/O
processi I/O-bound -- brevi periodi di
elaborazione fra due richieste successive di I/O
 La coda dei processi pronti può essere
realizzata in vari modi, a seconda del tipo di
algoritmo usato dallo scheduler
Coda in ordine d’arrivo (FIFO – First In First Out)
Coda con priorità
Albero
Lista concatenata non ordinata
....
 Gli elementi delle code sono generalmente i PD
11
2
12
Tipi di scheduling
Tipi di scheduling
 Lo scheduler della CPU può interevnire
quando un processo
 Lo scheduler della CPU può interevnire
Passa da esecuzione  attesa (esempio?)
quando un processo
 Richiesta I/O o attesa terminazione figli
Passa da esecuzione  attesa (esempio?)
Passa da esecuzione  pronto (esempio?)
 Richiesta I/O o attesa terminazione figli
 Al verificarsi di un interrupt
Passa da esecuzione  pronto (esempio?)
Passa da attesa  pronto (esempio?)
 Al verificarsi di un interrupt
 Completamento I/O
Passa da attesa  pronto (esempio?)
termina
 Completamento I/O
termina
13
Tipi di scheduling
Nessuna scelta di scheduling: si esegue un processo
tra i pronti (scheduling senza diritto di
14
prerilascio – non preemptive)
Tipi di scheduling
 Lo scheduler della CPU può interevnire
 Scheduling senza prerilascio
quando un processo
lo scheduler interviene solo quando un
processo viene creato, termina o si blocca su
una SC
Passa da esecuzione  attesa (esempio?)
 Richiesta I/O o attesa terminazione figli
Passa da esecuzione  pronto (esempio?)
 Scheduling con prerilascio
 Al verificarsi di un interrupt
lo scheduler può intervenire ogni volta che è
necessario per ottenere gli obiettivi perseguiti
Passa da attesa  pronto (esempio?)
 Completamento I/O
termina
Va fatta una scelta di scheduling: (scheduling con
diritto di prerilascio – preemptive)
 quando diventa pronto un processo a più alta
priorità rispetto a quello in esecuzione
 quando il processo in esecuzione ha sfruttato la
CPU per un tempo abbastanza lungo
15
Problemi con prerilascio
 Due processi condividono dati, e mentre uno li aggiorna
si ha il suo prerilascio
Dispatcher
 È il modulo che passa il controllo della CPU al
Necessari meccanismi per coordinare l’accesso a dati condivisi
processo scelto dallo scheduler
 Si occupa
 Durante il servizio di una SC, il nucleo può
aggiornare/modificare dati del nucleo (ad es. coda di
I/O) per conto del processo invocante. Se avviene il
prerilascio del processo: probelmi!!!!
Del cambio di contesto
Del passaggio al modo utente
Dei saltare alla giusta posizione del programma
utente per riavviarne l’esecuzione
Alcuni SO attendono il completamento della SC o bloccano I/O
prima che possa avvenire un cambio di contesto. Quindi non si
ha prerilascio se le strutture dati del nucleo sono incoerenti
 Le interruzioni si possono verificare in ogni istante
 Si attiva a ogni cambio di contesto  deve
Le sezioni di codice delle procedure di servizio delle interruzioni
devono essere protette da un uso simultaneo
essere rapido, per diminuire il più possibile la
latenza di dispatch
 Tipicamente, l’inizio della procedura di servizio consiste nel
disattivare le interruzioni e le riattiva quando termina
17
3
16
18
Scheduling
Scheduling
 Diversi algoritmi di scheduling hanno proprietà
differenti
 Criteri per confrontare algoritmi di scheduling
Utilizzo CPU
Produttività (throughput): numero di processi
completati nell’unità di tempo
Tempo di completamento (turnaround time):
intervallo che intercorre tra la sottomissione del
processo e il suo completamento
Tempo d’attesa: somma dei tempi passati nella
coda dei processi pronti
Tempo di risposta: tempo tra la sottomissione di
una richiesta e la prima risposta prodotta
Obiettivi principali degli Algoritmi di Scheduling:
 Fairness (Equità) - processi della stesso tipo
devono avere trattamenti simili
 Balance (Bilanciamento) - tutte le parti del
sistema devono essere sfruttate (CPU,
dispositivi …)
19
Tipi di Scheduling
20
First—come, fisrt—served (FCFS)
 Scheduling in ordine d’arrivo
Si realizza con una coda di PD
Quando un processo entra in coda, diventa
l’ultimo elemento della coda
Si estraggono elementi dalla testa
 Tempi d’attesa medi abbastanza lunghi
21
First—come, fisrt—served (FCFS)
First—come, fisrt—served (FCFS)
Process Burst Time
P1
24
P2
3
P3
3
 Assumiamo che i processi arrivino nell’ordine: P1, P 2,
P3
 Lo schema di Gantt per lo schedule FCFS è
P1
0
P2
24
30
 Tempo d’attesa per P1 = 0; P 2 = 24; P3 = 27
 Tempo d’attesa medio: (0 + 24 + 27)/3 = 17
23
4
Se i processi arrivassero nell’ordine P2 , P 3 , P 1 (????)
 Lo schema di Gantt è
P2
0




P3
27
22
P3
3
P1
6
30
Tempo d’attesa per P1 = 6; P2 = 0; P3 = 3
Tempo d’attesa medio: (6 + 0 + 3)/3 = 3
Molto meglio!!!!
Si può avere l’e ffetto convoglio
24
FCFS: effetto convoglio
Effetto convoglio
 Si crea quando i processi CPU bound hanno
priorità su quelli I/O bound (cosa che capita con
FCFS)
Es.: un processo CPU bound e tanti I/O bound
Man mano che i processi entrano nel sistema, il
processo CPU bound occupa la CPU
Gli altri processi, terminano I/O e entrano in
pronto: dispositivi I/O inattivi
Il processo CPU bound esegue un I/O
Tutti gli altri processi eseguono rapidamente le
operazioni CPU e tornano alle code I/O,
lasciando inattiva la CPU
25
Shortest—Job—First (SJF)
 Tutti i processi attendono che un lungo
processo liberi la CPU
 La situazione migliorerebbe (come risulta
dall’esempio fatto con i 3 processi) se si
dà priorità ai processi brevi
 NOTA: Con l’FCFS non si ha prerilascio
26
Shortest—Job—First (SJF)
 Associa ad ogni processo la lunghezza della sua
prossima sequenza CPU (CPU burst). Queste
lunghezze vengono usate per dare priorità ai
processi brevi
 2 schemi
Senza prerilascio – quando la CPU viene assegnata a
un processo, non viene prerilasciato fino al termine
della sequenza
Con prerilascio – se arriva un processo con una
sequenza CPU più corta del tempo che rimane al
processo in esecuzione per terminare la sua
sequenza, allora il processo corrente viene
prerilasciato. Questo schema è noto con il nome di
Shortest-Remaining-Time-First (SRTF).
 Si può dimostrare l’ottimalità dello SJF: rende
minimo il tempo d’attesa medio per un dato
insieme di processi
 Perchè?
 Si considerino 4 processi A,B,C,D con tempi di
esecuzione a, b, c, d
Turnaround (tempo di completamento) (A) -- a
turnaround(B) -- a + b
turnaround(C) -- a + b + c
turnaround(D) -- a + b + c + d
 turnaround totale 4a + 3b + 2c + 1d
minimo quando a, b, c, d sono in ordine crescente
27
Esempio di SJF senza prerilascio
Process
P1
P2
P3
P4
3
Esempio di SJF con prerilascio
Arrival Time Burst Time
0.0
7
2.0
4
4.0
1
5.0
4
P1
0
P3
7
P2
8
Process
P1
P2
P3
P4
P1
P4
12
0
16
 Average waiting time = (0 + 6 + 3 + 7)/4 = 4
P2
2
Arrival Time
0.0
2.0
4.0
5.0
P3
4
P2
5
Burst Time
7
4
1
4
P4
7
P1
11
16
 Average waiting time = (9 + 1 + 0 +2)/4 = 3
29
5
28
30
Determinare la lunghezza della
successiva sequenza CPU
SJF
 Il problema con SJF è che non esistono metodi
per conoscere la lunghezza della successiva
sequenza di operazioni CPU
 Si stima la lunghezza del successivo CPU burst
calcolando la media esponenziale delle effettive
lunghezze delle precedenti sequenze di operazioni
della CPU. Siano

t n = Lunghezza dell’n-esimo CPU burst
 Informazioni recenti
Spesso viene utilizzato come scheduling a lungo
termine
 Un possibile modo per usare SJF è quello di
τ n+1 = valore previsto per il successivo CPU burst
approssimarlo, cercando di predire il valore
della lunghezza della sequenza di operazioni
CPU
 Storia passata
0≤α≤1
 Peso relativo tra storia recente e passata
Osservazione: è probabile che sia simile alle
precedenti
τn+1 = α tn + (1- α) τn
31
Predizione lunghezza successivo CPU burst
32
Predizione
 α =0
τn+1 = τn
Storia recente non conta
 α =1
τn+1 = tn
Solo l’ultimo CPU burst conta
 Se espandiamo la formula, otteniamo
τn+1 = α tn+(1 - α) α tn-1 + … +(1 - α )j α tn-j +
…+(1 - α )n+1τ0
 Dato che sia α che (1 - α) sono ≤ 1, ogni termine
α=1/2
ha peso minore o uguale a quello del suo
predecessore
33
Scheduling con priorità
 Ogni processo ha una priorità
 La CPU è assegnata al processo con priorità
maggiore (smallest integer ≡ highest priority)
34
Scheduling con priorità
 Quali tra gli algoritmi di scheduling visti
finora è a priorità????
 SJF
Preemptive
Non-preemptive
 Punti chiave :
come assegnare le priorità (statiche, dinamiche…)
come evitare attesa indefinita della CPU nei processi a
priorità più bassa
come individuare i processi I/O bound
Lavori con lungo CPU burst: priorità bassa
Lavori con corto CPU burst: priorità alta
 per elevare la loro priorità
35
6
36
Scheduling con priorità
Scheduling con priorità
 Molte strategie per il calcolo della priorità
 Tipicamente :
 Problema ≡ Starvation – processi a bassa
priorità dinamica (es. più elevata per i processi
che passano da bloccato a pronto)
legata alla percentuale f del quanto di tempo
che è stato consumato l’ultima volta che il
processo è andato in esecuzione
priorità potrebbero non essere mai eseguiti
 Soluzione ≡ Aging – con il passare del
tempo, la priorità dei processi aumenta
37
Scheduling Round Robin (sistemi interattivi)
 Ogni processo ottiene la CPU per un quanto di
38
Scheduling Round Robin
tempo, tipicamente 10-100 millisecondi.
 Dopo questo periodo, il processo è prerilasciato e
messo nella coda dei pronti (realizzata FIFO)
 Se ci sono n processi nella coda dei pronti, e il
quanto dura q, allora ogni processo ottiene 1/n del
tempo CPU in blocchi di al più q unità di tempo
 Nessun processo attende più di (n-1)q unità di
tempo
 Performance
q grande ⇒ FCFS
q piccolo ⇒ q deve essere grande rispetto alla durata
del cambio di contesto
(a) lista dei processi pronti
(b) lista dei pronti dopo che B ha usato il suo
quanto (quantum) di tempo
39
40
Esempio di RR con q = 20
Scheduling Round Robin
Process
P1
P2
P3
P4
 Come fissare il quanto di tempo
deve essere abbastanza lungo da ammortizzare il
costo di un context switch (ordine 1 ms)
deve essere abbastanza breve da permettere
una risposta veloce agli utenti interattivi
0
 RR non favorisce i processi I/O bound
 È uno scheduling con prerilascio????
P2
20
37
P3
P4
57
P1
77
P3
97
117
P4
P1
P3
P3
121 134 154 162
 Tipicamente, si ha un tempo d’attesa medio
maggiore del SJF, ma un migliore tempo di
risposta
41
7
P1
Burst Time
53
17
68
24
42
Quanto e cambio di contesto
Tempo di completamento e quanto
43
Sistemi interattivi: Round Robin+Priority
 È possibile combinare RR e priorità
 Es.: sia P un processo I/O bound. CPU
burst di P sono più corti del quanto di
tempo. Se P è pronto, dovrebbe essere
eseguito. Quindi si assegna a P alta
priorità
“La priorità associata a un processo I/O
bound è 1/f, con f la frazione del quanto di
tempo utilizzata dal processo”
44
Scheduling – sommario
 Scheduling in sistemi batch (insieme dei
job da schedulare tipicamente noto a
priori)
SJF (shortest job first)
 Scheduling in sistemi interattivi
Round Robin
Code Multiple
45
46
Scheduling con code multiple
Scheduling con code multiple
 La coda di pronti è partizionata in code separate, a
seconda dei tipi di processi
In primo piano (foreground o interattivi)
In sottofondo (background o batch)
 Ogni coda utilizza il proprio algoritmo di scheduling
foreground – RR o priorità
background – FCFS
 È necessario uno scheduling tra le varie code
A priorità fissa (prima i foreground
e poi i background):
possibilità di starvation
Time slice – ogni coda ottiene una certa quantità di CPU che
schedula tra I suoi processi. Es.: 80% ai foreground in RR, e 20%
ai background in FCFS
47
8
48
Scheduling con Code multiple
Scheduling con Code multiple
 Scheduling Round Robin all’interno della
classe con priorità più elevata
 Alcuni sistemi danno quanti più lunghi ai
Esempio di algoritmo di scheduling a code
multiple con 4 classi di priorità
processi nelle classi basse (compute-bound)
per minimizzare l’overhead del cambio di
contesto
 Tipicamente i processi sono assegnati in
modo permanente alle code
49
Code multiple con retroazione
(feedabck)
50
Esempio di Multilevel Feedback Queues
 Un processo può cambiare coda
 Sono
caratterizzate
dai
seguenti
parametri
Numeri di code
Algoritmi di scheduling per ogni coda
Metodo usati per “upgrade” di un processo
Metodo usati per spostare in basso un
processo
Metodo usato per determinare in quale
coda inserire un processo che richiede un
servizio
51
 3 code
Q0 – quanto di 8 millisecondi
Q1 – quanto di 16 millisecondi
Q2 – FCFS
 Lo scheduler esegue tutti i lavori in Q0, poi quelli in Q1
e infine quelli in Q2
 Un processo in ingresso in Q1 ha la prelazione su quelli
in Q2, e uno in ingresso in Q0 ha prelazione su quelli in
Q1
 Un nuovo lavoro entra in Q0 (servito FCFS). Quando
ottiene la CPU, viene eseguito per 8 millisec. Se non
termina, viene messo in Q1
 In Q1 (servito FCFS) riceve altri 16 millisec. Se ancora
non termina, viene spostato in Q2
52
Scheduling per multi processore
Multilevel Feedback Queues
 Lo scheduling della CPU diviene più complesso quando
più CPU sono disponibili
 Si considerano i sistemi omogenei: qualunque unità può
essere usata per eseguire qualsiasi processo in coda
 Condivisione del carico
Invece di usare una coda per ogni processore (qualche coda
potrebbe risultare vuotaprocessore inattivo) si usa un’unica
coda dei pronti
 Due criteri di scheduling
Ogni processore può esaminare la coda e scegliere il processo da
eseguire
 Bisogna porre attenzione ai problemi derivanti da accessi a una
struttura dati comune


Quindi, a quale tipo di processo viene
data la priorità????
 Spingendosi oltre si ha la multielaborazione simmetrica: tutte le
decisioni di scheduling, elaborazione delle op. di I/O e le altre attività
di sistema sono svolte da un’unica unità (master server); le altre
eseguono solo codice
53
9
Due processori non possono scegliere lo stesso processo
I processi non devono essere perduti dalla coda
Si fissa un processore responsabile dello scheduling
54
Scheduling per sistemi real-time
Latenza di dispatch
 Hard real-time: garantiscono il completamento delle
funzioni critiche entro un tempo definito
I processo dichiarano il tempo entro cui devono completare le
proprie funzioni
Lo scheduler deve conoscere esattamente la durata
dell’esecuzione di qualsiasi tipo di funzione del sistema
Sono specifici in applicazioni industriali
 Soft real-time: richiedono che i processi critici abbiano una
priorità maggiore di quelli
multimediali, grafica interattiva)
ordinari
(applicazioni
Scheduling a priorità

I processi critici devono avere priorità fissa (non variabile nel tempo):
niente aging per i processi critici
Latenza di dispatch deve essere bassa (processi critici pronti devono
passare presto in esecuzione)


Le chiamate di sistema devono poter subire il prerilascio (punti di
prerilascio nelle SC lunghe: in questi punti il SO verifica la presenza di
processi critici da eseguire. Questi punti devono essere collocati in punti
“sicuri” del codice)
L’intero nucleo può subire prerilascio (Solaris 2)
55
Valutazione degli algoritmi
 Modelli deterministici: fornisce una valutazione
analitica dell’algoritmo.
Cioè, dato un algoritmo e un carico di lavoro del
sistema, fornisce una formula che valuta le
prestazioni dell’algoritmo per quel carico di lavoro
Molto specifica e richiede conoscenze troppo
dettagliate
 Reti
di code: tipicamente è impossibile
determinare un insieme (statico) di processi da
usare nei modelli deterministici (I processi
variano!!!!). Però è possibile determinare le
distribuzioni delle sequenze di operazioni CPU e
I/O, perché si possono misurare e/o stimare
56
Reti di code
 Il sistema si descrive come una rete di unità serventi, ciascuna
con una coda d’attesa
 Se sono noti l’andamento degli arrivi e dei servizi, si possono
calcolare l’utilizzo, la lunghezza media delle code e il tempo medio
d’attesa (analisi delle reti di code)
 Es.: siano
n: lunghezza media di una coda
W: tempo medio d’attesa in coda, e
λ l’andamento medio d’arrivo dei nuovi processi in coda
Durante W , quanti nuovi processi arrivano in coda????
 λW
Se il sistema è stabile, il numero dei processi che escono dalla coda è
uguale an numero dei processi che entrano, quindi
 n= ???? λW (formula di Little)
 Si utilizza per calcolare una delle tre variabili, note le altre due
 È comunuqe complicato fornire distribuzioni realistiche
57
Valutazione tramite simulazioni
58
Valutazione tramite simulazioni
 Per avere valutazioni più precise si usano
simulazioni
 I dati (utilizzo CPU, I/O, arrivi in coda,
terminazioni, ecc) si possono ottenere
tramite numeri generati casualmente
(utilizzando varie distribuzioni: uniforme,
Poisson, esponenziale)
 Oppure tramite trace tape
59
10
60
Scheduling dei Thread
Valutazione tramite realizzazione
 Costi alti
 Lo scheduling dei thread
utilizza algoritmi simili a quelli visti finora
viene implementato in modo diverso nel
thread a livello utente e a livello kernel
61
62
Scheduling thread user-level
Scheduling dei Thread
 Lo scheduling dei thread user level
il SO non conosce l’esistenza dei thread,
quindi schedula i processi
durante l’esecuzione di un processo lo
schedulatore della libreria dei thread
decide quale thread mandare in esecuzione
le interruzioni del clock non sono visibili
allo schedulatore di livello utente
lo schedulatore può intervenire solo se
invocato esplicitamente (es. thread_yield)
non c’è prerilascio (all’interno di un singolo
processo)
Possible scheduling of user-level threads
 50-msec process quantum
 threads run 5 msec/CPU burst
63
64
Scheduling thread kernel-level
Scheduling dei Thread
 Lo scheduling dei thread kernel level
il SO schedula i thread (non i processi)
quando un thread si blocca il SO può decidere
di mandare in esecuzione un altro thread di
quel processo o un thread di un processo
diverso
 può scegiere se pagare il cambio di contesto o no
le interruzioni del clock permettono allo
schedulatore di tornare in esecuzione alla fine
del quento di tempo
 i quanti di tempo sono assegnati direttamente ai
thread
 si può effettuare prerilascio
Possible scheduling of kernel-level threads
 50-msec process quantum
 threads run 5 msec/CPU burst
65
11
66
Per oggi basta....
67
12