# 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 1. **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. 2. **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. 3. **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. 4. **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. 5. **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 1. **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. 2. **CPU Burst:** - Un "CPU burst" è un periodo in cui un processo utilizza intensivamente la CPU senza richieste di operazioni di input/output. 3. **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. 4. **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. 5. **CPU Bound:** - Un processo è "CPU bound" se trascorre la maggior parte del suo tempo eseguendo calcoli intensivi, con brevi periodi di input/output. 6. **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. 7. **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: 1. **Utilizzo della CPU:** - Percentuale media di utilizzo della CPU nell'unità di tempo. 2. **Throughput:** - Numero di processi completati nell'unità di tempo. 3. **Tempo di Attesa:** - Tempo totale trascorso da un processo nella coda dei processi pronti. 4. **Turnaround:** - Intervallo di tempo tra l’iscrizione in coda di un processo e il suo completamento. 5. **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.