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.