L’obiettivo della multiprogrammazione è l’esecuzione concorrente di più processi in modo da massimizzare l’utilizzo della CPU
L’obiettivo del time sharing è commutare l’uso della CPU tra i vari processi così frequentemente, che gli utenti possano interagire con ciascun programma in esecuzione
L’esecuzione di un processo è costituita da:
Le durate delle sequenze di operazioni della CPU sono state sperimentalmente misurate e la loro curva di frequenza è di tipo esponenziale con molte brevi sequenze di operazioni della CPU e poche sequenze di operazioni di CPU molto lunghe
Queste caratteristiche sono spesso utili per la scelta di un appropriato algoritmo di schedulazione della CPU
Lo scheduler a breve termine (scheduler della CPU) sceglie il processo a cui assegnare la CPU tra quelli in memoria pronti per l’esecuzione
Le decisioni riguardanti lo scheduling della CPU vengono prese nelle seguenti circostanze:
quando un processo passa da uno stato running allo stato waiting:
in caso di richiesta di I/O, oppure di attesa per la terminazione di uno dei processi figli
quando un processo passa da uno stato di running ad uno stato ready:
in caso di interrupt
quando un processo passa da uno stato waiting ad uno stato ready:
in caso di completamento di un I/O
quando un processo termina
Quando lo schema di scheduling interviene nelle condizioni 1 e 4 si dice che è senza diritto di prelazione (non-preemptive), altrimenti è con diritto di prelazione (preemptive)
Gli algoritmi di scheduling vengono suddivisi quindi in due classi principali: preemptive e non-preemptive
Uno scheduling è non-preemptive se ogni processo a cui viene assegnata la CPU rimane in possesso della CPU fino a quando o termina la sua esecuzione oppure passa in uno stato di waiting, altrimenti è preemptive
Se la politica di scheduling è preemptive allora bisognerà anche disporre di meccanismi per la sincronizzazione dei processi