Scheduler nei Sistemi Operativi
Introduzione
Lo scheduler è una componente fondamentale responsabile della gestione dei processi e della distribuzione delle risorse della CPU tra i vari processi in esecuzione su un sistema. L’obiettivo principale dello scheduler è garantire:
- Un utilizzo efficiente della CPU.
- La minimizzazione dei tempi di attesa e di risposta.
- La massimizzazione del throughput complessivo del sistema.
Responsabilità dello Scheduler
-
Selezione dei Processi:
- Lo scheduler decide quale processo assegnare alla CPU in un determinato momento.
- Questa decisione è influenzata da fattori come:
- Priorità del processo.
- Tempo trascorso in attesa.
- Tipo di algoritmo di scheduling utilizzato.
-
Cambio di Contesto:
- Quando lo scheduler decide di cambiare il processo in esecuzione, avviene un cambio di contesto.
- Questo processo implica:
- Il salvataggio dello stato del processo corrente (registri, stato della memoria, ecc.).
- Il ripristino dello stato del nuovo processo selezionato.
-
Gestione della Coda dei Processi Pronti:
- Lo scheduler mantiene una coda dei processi pronti per l’esecuzione.
- Gli algoritmi di scheduling determinano come i processi vengono estratti da questa coda per l’esecuzione.
-
Gestione delle Priorità:
- In sistemi con scheduling basato sulla priorità, lo scheduler assegna un livello di priorità a ciascun processo.
- La CPU viene assegnata al processo con la priorità più alta.
-
Prelazione (Preemption):
- Alcuni scheduler possono interrompere un processo in esecuzione se arriva un processo con priorità più alta o si verifica un evento critico.
- Questa capacità consente di garantire risposte rapide a situazioni urgenti.
Terminologia
-
Ready Queue:
- Una “coda dei processi pronti” è una struttura dati contenente i processi pronti per l’esecuzione ma che devono ancora ottenere l’accesso alla CPU.
-
CPU Burst:
- Un “CPU burst” è un periodo in cui un processo utilizza intensivamente la CPU senza richieste di operazioni di input/output.
-
I/O Burst:
- Un “I/O burst” è un periodo in cui un processo effettua operazioni di input/output, interagendo con dispositivi come dischi o periferiche.
-
I/O Bound:
- Un processo è “I/O bound” se trascorre la maggior parte del suo tempo eseguendo operazioni di input/output rispetto a calcoli intensivi.
-
CPU Bound:
- Un processo è “CPU bound” se trascorre la maggior parte del suo tempo eseguendo calcoli intensivi, con brevi periodi di input/output.
-
Prelazione:
- La “prelazione” si verifica quando un processo in esecuzione viene interrotto prima di completare il suo CPU burst per assegnare la CPU a un processo con priorità più alta o a uno nuovo.
-
Dispatcher:
- Il “dispatcher” è responsabile dell’effettivo cambio di contesto (context switch), salvando lo stato del processo corrente e ripristinando quello del nuovo processo.
Criteri di Scheduling
Per analizzare e confrontare i diversi algoritmi di scheduling, si considerano i seguenti parametri:
-
Utilizzo della CPU:
- Percentuale media di utilizzo della CPU nell’unità di tempo.
-
Throughput:
- Numero di processi completati nell’unità di tempo.
-
Tempo di Attesa:
- Tempo totale trascorso da un processo nella coda dei processi pronti.
-
Turnaround:
- Intervallo di tempo tra l’iscrizione in coda di un processo e il suo completamento.
-
Tempo di Risposta:
- Tempo tra la sottomissione di un processo e l’inizio della sua esecuzione. Questo parametro non dipende dalla velocità dei dispositivi di I/O.
Obiettivi dello Scheduler
Lo scheduler cerca di:
Massimizzare:
- Utilizzo della CPU (al massimo: 100%).
- Throughput.
Minimizzare:
- Turnaround.
- Tempo di Attesa.
- Tempo di Risposta.
Purtroppo, non è possibile rispettare tutti i criteri contemporaneamente, ed è necessario trovare dei compromessi in base alle esigenze specifiche del sistema.