Concetti fondamentali

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

Scheduler 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:

  1. 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

  2. quando un processo passa da uno stato di running ad uno stato ready:

    in caso di interrupt

  3. quando un processo passa da uno stato waiting ad uno stato ready:

    in caso di completamento di un I/O

  4. 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