Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
load
store
add operazioni CPU
store
read file
100
write file
80
60 wait for I/O operazioni IO
40
20 load
store
0 8 16 24 32 40 add operazioni CPU
Durata (millisecondi) store
read file
P1 P2 P3
P3 3
P2 P3 P1
0 3 6 30
– Tempi di attesa: P1 = 6; P2 = 0; P3 = 3
– Tempo di attesa medio: (6 + 0 + 3)/3 = 3
• Il risultato è migliore
– I processi brevi è meglio che vengano eseguiti per primi
12
10
Tempo effettivo 6 4 6 4 13 13 13 13
Tempo predetto 10 8 6 6 5 9 11 12
P4 5.0 4
P1 P3 P2 P4
0 7 8 12 16
P4 5.0 4
P1 P2 P3 P2 P4 P1
0 2 4 5 7 11 16
prelazione
(eventuale)
coda processi pronti completamento
CPU
proc. F proc. A proc. B proc. C proc. D proc. E
prelazione
P1 P2 P3 P4 P1 P3 P4 P1 P3 P3
P2 17
P3 68
P4 24
Alta priorità
Processi di sistema
Processi interattivi
Processi in background
quanto = 8
quanto = 16
FCFS
• Questa idea può essere applicati ai sistemi Real time nei quali
ci sono vincoli di tempo stretti da rispettare
• L'algoritmo consiste nell'eseguire il processo che rischia
maggiormente di non rispettare le scadenze
Tmax Pi
i T P 1
per i
• Soft realtime:
– I processi critici hanno una priorità maggiore degli altri
prelazione
coda di attesa
I/O
di I/O
proc. H proc. D
proc. B proc. A
proc. C proc. D
proc. F proc. E
t3
proc. G proc. H
quanto=
{140 – SP X 20 se SP120
140 – SP X 5 se SP≥120
struct runqueue {
struct prioarray *active;
struct prioarray *expired;
struct prioarray arrays[2];
};
struct prioarray {
int nr_active; /* # Runnable */
unsigned long bitmap[5];
struct list_head queue[140]; // double linked list
};
expired
0
1
...
139
active
0
1
...
139
Processo B 1 sec.
Processo C 4 sec.
Processo D 2 sec.
Processo E 3 sec.
FIFO (6+7+11+13+16)/5=53/5=10.6
0 6 7 11 13 16
SJF (1+3+6+10+16)/5=36/5=7.2
0 1 3 6 10 16
TS (5+9+12+14+16)/5=56/5=11.2
0 5 9 12 14 16
Processo B 1 sec.
Processo C 4 sec.
I processi C D E entrano dopo 2 sec.
Processo D 2 sec.
Processo E 3 sec.
FIFO (6+7+9+11+14)/5=47/5=9.4
0 6 7 11 13 16
SJF (1+7+7+10+14)/5=39/5=7.8
0 1 7 9 12 16
SJF (1+2+5+9+16)/5=33/5=6.6
0 1 4 7 11 16 con possibilità di prelazione
TS (2+8+11+13+16)/5=50/5=10.0
0 2 10 13 15 16
#define N 3 #define N 3
Seconda versione: 2N
P0
P0 P1
P0 P2 P1 P3
P0 P4 P2 P5 P1 P6 P3 P7
Prima versione: N + 1
P0
P0 P1
P1 P2
P2 P3
B A B
B
C C C
0 200 400 600 700
SO
B A B
B
C C C
0 222 444 666 777
A B
B C
C
0 25/3 25/3+20/3=15
Considerando anche il SO i tempi vanno moltiplicati per 10/9
SO
A B
B C
C
0 250/27 150/9
Sistemi Operativi 2022/23 Scheduling 68
Scheduling a code multiple
Per conferma
105 (A) + 40 (B) + 240 (C) + 10*5 (CS) = 435
Per conferma
105 (A) + 40 (B) + 240 (C) + 10*5 (CS) = 435
Per conferma
105 (A) + 40 (B) + 240 (C) + 10*5 (CS) = 435
Il buffer ha dimensione
fissa
Si utilizzano 2 indici
(puntatori)
L’inserimento (put) avviene
nell’elemento puntato
get put dall’indice di Inserimento
L’estrazione (get) avviene
nell’elemento puntato
dall’indice di Estrazione
L’aggiornamento avviene in
un tempo costante (non
dipende dal numero di dati
memorizzati)
interface Buffer<T> {
public void put(T object);
public T get();
Proprietà
Ogni nodo è maggiore
(minore) di tutti gli
elementi del sottoalbero
A di cui è radice
L’estrazione avviene alla
radice
E K
L’inserimento sul primo
nodo libero a partire da
sinistra dell’ultimo livello
H F N Y
L’aggiornamento avviene
in un tempo
L M P Q R T proporzionale al
logaritmo della
dimensione
E K
L M P Q R T
T E
E K F K
H F N Y H P N Y
L M P Q R L M T Q R
Sistemi Operativi 2022/23 Scheduling 91
Inserimento
F K
E
H P N Y
F J
L M T Q R J
H P K Y
L M T Q R N