I sistemi batch sono ancora utilizzati per attività periodiche e di elaborazioni di grandi volumi di dati, sopratutto in ambito aziendale (banche e assicurazioni).
Nei sistemi batch, non ci sono utenti impazienti in attesa di una risposta, quindi gli algoritmi non-preemptive sono accettabili.
Gli algoritmi tipici utilizzati sono:
- first-come first-served (FCFS): lo scheduler assegna la CPU nell’ordine in cui i processi la richiedono
- shortest job first (SJF): lo scheduler sceglie il processo con il tempo di esecuzione più breve (assumendo che i tempi di esecuzioni siano noti in anticipo)
- shortest remaining time next (SRTN): versione preemptive di SJF
First-come First-served - FCFS
Questo algoritmo è il più semplice (facile da programmare - con linked list) tra gli algoritmi non-preemptive, infatti si basa sull’idea che viene “servito” il primo processo che arriva.

Quindi la CPU è assegnata ai processi in ordine di arrivo e c’è un’unica coda dei processi in stato ready e i processi che passano dallo stato blocked a quello ready, vengono messi in fondo alla coda.
Il problema con questo algoritmo è che in sistema con processi che hanno tempi di esecuzioni molto diversi, l’algoritmo FCFS rallenta i processi veloci a causa della mancanza di preemption.
Shortest job first - SJF
L’algoritmo SJF sceglie sempre il processo con il tempo di esecuzione più breve.
L’obiettivo di questo algoritmo è di massimizzare il throughput e minimizzare il tempo di tournaround, ovvero il tempo medio di esecuzione di tutti i processi.
Vediamo un esempio di esecuzione di 4 job A, B, C e D, con la seguente stima dei tempi di esecuzione:
- A: 8 minuti
- B: 4 minuti
- C: 4 minuti
- D: 4 minuti
Se utilizziamo l’algoritmo FCFS:
- A termina in tournaround (TA) di A sarà 8
- B termina in TB = 12
- C termina in TC = 16
- D termina in TD = 20 ora se vogliamo sapere il tournaround totale e medio saranno:
- tournaround totale = 8 + 12 + 16 + 20 = 56 minuti
- tournaround medio = 56/4 = 14 minuti
Se ora utilizziamo l’algoritmo SJF:
- B termina in TB = 4
- C termina in TC = 8
- D termina in TD = 12
- A termina in TA = 20 e quindi avremo che:
- tournaround totale = 4+8+12+20 = 44 minuti
- tournaround medio = 44/4 = 11 minuti
Quindi come notiamo con SJF otteniamo un tournaround di 11 minuti (meno del FCFS).
Il problema dell’algoritmo SJF (non-preemptive) è che per garantire il funzionamento ottimale, tutti i job devono essere disponibili al momento della decisione dello scheduler. Infatti se i job arrivano in momenti diversi (come nei sistemi interattivi), l’algoritmo non garantisce l’ottimizzazione.
Shortest Remaining Time Next - SRTN
L’algoritmo SRTN è una versione preemptive del SJF, dove il tempo di esecuzione è noto a priori.
La logica di funzionamento è molto semplice, e si basa sull’idea che quando arriva un nuovo job, il tempo di esecuzione totale (T1) viene confrontato con il tempo rimanente del job attuale in esecuzione (T2), se T1 < T2 allora il job attuale in esecuzione viene sospeso (preemption) e il nuovo job viene avviato.
In questo modo si risolve il problema del SJF, e i nuovi job arrivati vengono considerati e data una risposta rapida.
