Quando i processi entrano nel sistema vengono inseriti in una coda dei processi composta da tutti i processi del sistema
I processi che risiedono in memoria centrale e che sono pronti e in attesa di essere eseguiti si trovano in una lista detta coda dei processi pronti (ready queue)
Generalmente la coda dei processi pronti è memorizzata come lista concatenata
Quando il processo fa una richiesta di I/O il suo identificativo viene inserito nella coda del dispositivo: non è detto che il dispositivo richiesto sia libero
I processi quindi si spostano tra varie code
Lo scheduler seleziona i processi e li carica in memoria assegnando la CPU in modo da ottimizzarne l’utilizzo
Lo scheduler di job è uno scheduler che viene eseguito con una frequenza molto bassa, possono infatti passare dei minuti affinchè vengano creati dei nuovi processi
Lo scheduler di job controlla il grado di multi-programmazione, cioè il numero di processi in memoria
In un sistema stabile la velocità media della creazione dei processi deve essere uguale alla velocità con cui i processi lasciano il sistema
Lo scheduler di CPU viene eseguito molto frequentemente: il processo potrebbe rimanere in esecuzione pochi millisecondi prima di fare una richiesta di I/O
I processi possono essere descritti come:
Uno scheduler per rendere efficiente il suo lavoro è tenuto a selezionare una buona combinazione di processi I/O bound - CPU bound, altrimenti il sistema risulterebbe sbilanciato
Avvicendamento (swapping)