I/O;
I/O burst: Operazioni di I/O eseguite tra due CPU burst;
Lo scheduling della cpu si occupa di interrompere questi 2 processi
quando non servono;
La frequenza di CPU burst brevi è molto alta, mentre la
frequenza dei CPU burst lunghi è molto bassa;
Dato che l’esistenza di questa evidenza sperimentale, la cpu viene
assegnata ai processi per circa 8 millisecondi, poiché la gran parte
dei processi hanno durata inferiore e se ne capita qualcuno che ha
durata maggiore, gli viene comunque dedicata dallo scheduler una
durata di 8 millisecondi, poi viene interrotto e rimesso in ready in
attesa ti tornare in running, e successivamente quando il processo
torna in prima posizione nella coda di ready sarà rimesso in
running. In questi casi c’è una minima perdita di tempo ma si è
constatato che dato che è abbastanza raro che un processo abbia
tempo di esecuzione maggiore di 8 millisecondi, è conveniente
adottare questa convenzione.
Lo scheduler a breve termine seleziona uno tra i processi in
(ready queque)
memoria pronti per essere eseguiti e lo assegna alla
cpu mettendo il processo in esecuzione;
Lo scheduler interviene in determinati casi:
1. Un processo passa dallo stato di running allo stato di waiting:
qui interviene perché in questo caso la cpu si libera quindi lo
scheduler va a scegliere un nuovo processo che imposterà in
stato di running molto velocemente;
2. Quando un processo termina è abbastanza chiaro il poiché lo
scheduler deve intervenire nella scelta del nuovo processo da
impostare nello stato di running;
3. Lo scheduler interviene quando un processo passa dallo stato
di running allo stato di ready: il processo era in running e per
un interrupt e torna in ready, lo scheduler della cpu guarda tra
i processi di ready;
4. Un processo è passato da waiting a ready (caso particolare). Si
è verificato l’evento che soddisfa la waiting, questo avviene
solo se il processo in argomento è molto importante, quindi se
c’è un processo in funzione (quindi in running), viene interrotto
dallo scheduling;
I punti 3 e 4 sono casi di scheduling preemptive (con prelazione),
nei punti 1 e 2 lo scheduling non preemptive (senza prelazione).
-DISPATCHER:
Il modulo dispatcher svolge il lavoro di passare il controllo ai
processi selezionati dallo scheduler della cpu per la loro esecuzione.
Questo componente fa da ausilio allo scheduler per la gestione della
cpu.
Più in dettaglio lo scheduler decide il processo da eseguire, però
l’operazione di contex switch (ovvero lo scambio effettivo tra i due
processi) tocca al dispatcher.
LATENZA DI DISPATCH: come si evince dall’espressione la latenza
del dispatch è il tempo impiegato dal dispatcher per fermare un
processo e far eseguire il successivo.
Ovviamente il dispatcher deve essere molto veloce;
-CRITERI DI SCHEDULING:
Nella scelta di una strategia di scheduling occorre tenere conto
delle diverse caratteristiche dei programmi:
- Utilizzo della CPU: avere la CPU il più attiva possibile;
- Throughput: numero di processi completati nell’unità di
tempo;
- Tempo di turnaround: tempo totale per eseguire un
processo,
ovviamente un algoritmo di scheduling efficiente ci consente di
minimizzare il turnaround;
- Tempo di waiting: tempo totale di attesa sulla ready queque,
quindi è la misura di tempo ‘perso’ dai vari processi (non
riguarda lo stato di waiting, ma riguarda il tempo ‘perso’ nello
stato di ready, nella coda dei pronti);
- Tempo di risposta: tempo da quando viene inviata una
richiesta fino a quando si produce una prima risposta (non
considerando il tempo di output).
Molto importante nei programmi che hanno molta interazione
con l’utente;
CRITERI DI OTTIMIZZAZIONE:
- Massimizzare l’utilizzo della CPU;
- Massimizzare il throughput;
- Minimizzare il tempo di turnaround;
- Minimizzare il tempo di waiting;
- Minimizzare il tempo di risposta;
- Generalmente si tende ad ottimizzare i valori medi;
- Nei sistemi time-sharing è più importante minimizzare la
varianza del tempo di risposta;
-SCHEDULING FIRST-COME, FIRST-SERVED(FCFS):
Questo algoritmo di scheduling si basa sul fatto che il primo
processo ‘arrivato ’ sarà il primo ad essere eseguito;
Supponendo che arrivino 3 processi p1 p2 p3, con tempi di
esecuzione rispettivamente 24 3 3;
Chiaramente i tempi di attesa saranno rispettivamente: [0 per p1],
[24 per p2], [27 per p3] questo ci da come tempo di attesa medio
del valore di 17:
tempo di waiting medio = (0 + 24 + 27) /3 = 17
Ovviamente se l’ordine di arrivo fosse stato diverso anche il tempo
di attesa medio sarebbe diverso. Per esempio, consideriamo la
possibilità che p1 arrivi per ultimo, il tempo di attesa medio è 3,
sicuramente meglio di prima;
Questo è il problema dell’algoritmo appena trattato, chiamato
effetto convoglio, cioè i processi non hanno priorità quindi se un
processo lungo ‘arriva prima’ di un altro allora verrà eseguito prima
a discapito dell’efficienza, nonostante questo in alcuni casi è ancora
utilizzato.
-SCHEDULING SHORTEST-JOB-FIRST(SJF):
Associa ad ogni processo la lunghezza del prossimo CPU burst. Usa
questi tempi per schedulare il processo con la lunghezza minima.
I processi vengono ordinati nella ready queque in base al loro
prossimo CPU burst in ordine crescente (il primo processo ha il
minimo CPU);
Due schemi:
- Nonpreemptive: il processo assegnato alla CPU (quindi in
running) non può essere sospeso prima di completare il suo
CPU burst;
-
Lezione 7 Sistemi operativi
-
Lezione 8 Sistemi operativi
-
Lezione 6 Sistemi operativi
-
Lezione 5 Psicopatologia