Advanced Operating Systems

Anno accademico 2026/2027 - Docente: GAETANO PATTI

Risultati di apprendimento attesi

Conoscenza e capacità di comprensione

Al completamento del corso, gli studenti avranno acquisito la conoscenza avanzata dei meccanismi con cui un sistema operativo moderno condivide, isola e controlla le risorse hardware del calcolatore: la virtualizzazione e la gestione della memoria su cui essa si basa; i meccanismi del kernel Linux che permettono di realizzare i container, alternativa più leggera alla virtualizzazione; i driver di dispositivo, che gestiscono l'accesso all'hardware; la tecnologia extended Berkeley Packet Filter (eBPF), che permette di estendere in modo sicuro le funzionalità del kernel con programmi caricati dallo spazio utente; la gestione delle risorse nei sistemi real-time, dove scheduling e accesso alle risorse condivise devono garantire il rispetto dei vincoli temporali delle applicazioni supportate. Gli studenti saranno inoltre in grado di comprendere le problematiche di progetto alla base di ciascun meccanismo, i vantaggi e i limiti delle diverse soluzioni e il loro impatto sulle prestazioni e sulla predicibilità temporale del sistema.

Capacità di applicare conoscenza e comprensione

A fine corso gli studenti saranno in grado di: configurare ed eseguire macchine virtuali; costruire un ambiente di esecuzione isolato (container) utilizzando le primitive del kernel e limitarne le risorse; progettare, compilare, caricare e verificare un modulo kernel che realizzi un driver di dispositivo con interfaccia verso lo spazio utente; scrivere ed eseguire un programma nel kernel basato su eBPF; sviluppare un'applicazione real-time e confrontarne il comportamento temporale su un microcontrollore e su un sistema general-purpose.

Autonomia di giudizio

Al termine del corso, gli studenti saranno in grado di scegliere, motivandola, la tecnologia più adeguata a un requisito dato (emulazione, virtualizzazione, partizionamento, isolamento a container o sistema dedicato), dichiarandone vantaggi, limiti e implicazioni sulla predicibilità temporale. Tale capacità è affinata attraverso le esercitazioni svolte durante il corso e attraverso l'elaborato progettuale di fine corso, che richiede allo studente di motivare le proprie scelte di progetto.

Abilità comunicative

Al termine del corso, gli studenti avranno acquisito padronanza della terminologia tecnica dei sistemi operativi avanzati e saranno in grado di illustrare in modo chiaro le scelte progettuali effettuate, i vantaggi e i limiti delle soluzioni adottate e i risultati ottenuti, sia ad un pubblico specialista sia ad un pubblico non specialista.

 Capacità di apprendimento

Al termine del corso, gli studenti saranno in grado di proseguire autonomamente lo studio a partire dalla documentazione ufficiale dei sistemi operativi studiati, dai manuali dei costruttori e dalla letteratura scientifica di settore. A questo obiettivo concorrono in modo specifico le letture assegnate durante il corso e lo svolgimento dell'elaborato progettuale.

Modalità di svolgimento dell'insegnamento

Il corso si basa essenzialmente su lezioni frontali ed esercitazioni, che includono lo svolgimento di esercizi da parte dei docenti. Il corso prevede anche esercitazioni pratiche svolte dagli studenti (sessioni hands-on) che vengono svolte anche nelle aule multimediali dell'Ateneo. I docenti supervisionano il lavoro degli studenti fornendo le spiegazioni e gli aiuti didattici necessari.

Le modalità di svolgimento dell'insegnamento appena descritte permettono il raggiungimento degli obiettivi formativi prefissati, che includono l’acquisizione di conoscenze e la capacità di applicare la conoscenza.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

Requisiti necessari ad affrontare con successo gli argomenti del corso:

  1. programmazione in linguaggio C: puntatori e aritmetica dei puntatori, strutture, allocazione dinamica, puntatori a funzione, uso del compilatore e di un sistema di build
  2. concetti di processo e di thread, stati di un processo, commutazione di contesto
  3. uso pratico di un ambiente GNU/Linux da riga di comando e delle principali system call POSIX per la gestione di processi
  4. programmazione concorrente con posix thread: creazione e sincronizzazione di thread, mutex, sezioni critiche
  5. meccanismi di comunicazione tra processi e socket
  6. architettura degli elaboratori: gerarchia di memoria, interruzioni, registri, dispositivi di I/O, architetture multiprocessore
  7. concetti di base su memoria virtuale (paginazione, page fault) e virtualizzazione (differenza tra hypervisor di livello 1 e di livello 2, paravirtualizzazione, isolamento a container).

Frequenza lezioni

La frequenza è fortemente consigliata.

Contenuti del corso

Gli asterischi (*) indicano le competenze minime.

Virtualizzazione e hypervisor. Concetti generali e requisiti di virtualizzabilità. Emulazione, traduzione binaria dinamica, paravirtualizzazione, estensioni hardware. Casi di studio: KVM. Criteri di scelta tra emulazione, virtualizzazione e partizionamento (*).

Gestione della memoria. Gestione della memoria fisica in Linux, impatto sulla predicibilità temporale (*). Traduzione degli indirizzi, TLB e sua invalidazione, spazi di indirizzamento nelle macchine virtuali.

Meccanismi Linux per i container. Namespaces: modello e chiamate di sistema, cgroup. Confronto tra container e macchine virtuali su isolamento (*).

Sviluppo di driver in kernel mode. Modulo kernel: ciclo di vita, compilazione fuori albero, caricamento e rimozione, con esempi pratici. Problematiche di progetto di un device driver: esempio di progettazione e interfaccia verso lo spazio utente (*).

eBPF (extended Berkeley Packet Filter). Ciclo di vita di un programma eBPF. Il verifier e il modello di sicurezza. Mappe, tipi di programma e scelta del punto di aggancio. Flusso di sviluppo con libbpf, privilegi richiesti, costo e limiti della tecnologia (*).

Gestione delle risorse nei sistemi real-time. Concetti generali, predicibilità. Problematiche di progetto: scheduling, accesso a risorse condivise. Casi di studio (*).

Testi di riferimento

Per la parte sulla virtualizzazione e sulla gestione della memoria:

  • A. S. Tanenbaum, H. Bos, Modern Operating Systems, 5th ed., Pearson, 2023, ISBN: 9781292459660 (disponibile anche in edizione italiana: Andrew S. Tanenbaum, H. Bos “I moderni sistemi operativi 5/Ed." Pearson Italia, 2023, ISBN 9788891931955).
Per la parte sui driver in kernel mode: 
  • J. Madieu, Linux Device Driver Development, 2nd ed., Packt Publishing, 2022. ISBN: 9781803240060

Per la parte su container ed eBPF:

  • L. Rice, Container Security, 2nd ed., O'Reilly, 2025, ISBN: 9798341627703
  • L. Rice, Learning eBPF, O'Reilly, 2023, ISBN: 9781098135126

Per  la parte sulla gestione delle risorse nei sistemi real-time:

  • G. C. Buttazzo, Hard Real-Time Computing Systems, 4th ed., Springer, 2023, ISBN: 9783031454127
Documentazione e materiale integrativo, dispense e tracce delle esercitazioni a cura dei docenti, disponibili su STUDIUM nell'area dedicata all'insegnamento.

AutoreTitoloEditoreAnnoISBN
A. S. Tanenbaum, H. BosModern Operating Systems, 5th ed.Pearson20239781292459660 
J. MadieuLinux Device Driver Development, 2nd ed.Packt Publishing20229781803240060
L. RiceContainer Security, 2nd ed.O'Reilly20259798341627703
L. RiceLearning eBPFO'Reilly20239781098135126
G. C. ButtazzoHard Real-Time Computing Systems, 4th ed.Springer20239783031454127

Programmazione del corso

 ArgomentiRiferimenti testi
1Virtualizzazione e hypervisor. Concetti generali e requisiti di virtualizzabilità. Emulazione, traduzione binaria dinamica, paravirtualizzazione, estensioni hardware. Casi di studio: KVM. Criteri di scelta tra emulazione, virtualizzazione e partizionamentoTanenbaum: Cap. 7. Letture di approfondimento assegnate durante il corso. Dispense dei docenti su STUDIUM.
2Gestione della memoria. Gestione della memoria fisica in Linux, impatto sulla predicibilità temporale. Traduzione degli indirizzi, TLB e sua invalidazione, spazi di indirizzamento nelle macchine virtuali.Tanenbaum: Cap. 3, Cap. 7. Documentazione ufficiale del kernel Linux. Dispense dei docenti su STUDIUM.
3Meccanismi Linux per i container. Namespaces: modello e chiamate di sistema, cgroup. Confronto tra container e macchine virtuali su isolamento.Rice: Container Security. Documentazione ufficiale del kernel Linux. Dispense dei docenti su STUDIUM.
4Sviluppo di driver in kernel mode. Modulo kernel: ciclo di vita, compilazione fuori albero, caricamento e rimozione, con esempi pratici. Problematiche di progetto di un device driver: esempio di progettazione e interfaccia verso lo spazio utente.Madieu. Documentazione ufficiale del kernel Linux. Dispense dei docenti su STUDIUM.
5eBPF (extended Berkeley Packet Filter). Ciclo di vita di un programma eBPF. Il verifier e il modello di sicurezza. Mappe, tipi di programma e scelta del punto di aggancio. Flusso di sviluppo con libbpf, privilegi richiesti, costo e limiti della tecnologia.Rice, Learning eBPF. Gregg. Documentazione ufficiale del kernel Linux. Dispense dei docenti su STUDIUM.
6Gestione delle risorse nei sistemi real-time. Concetti generali, predicibilità. Problematiche di progetto: scheduling, accesso a risorse condivise. Casi di studio.Buttazzo. Dispense dei docenti su STUDIUM.

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Gli appelli sono fissati di concerto con il CdS in ottemperanza alle modalità stabilite dal calendario accademico. Prenotazione obbligatoria tramite portale di Ateneo.

L'esame consiste in un elaborato progettuale individuale di fine corso e in un colloquio orale nel quale lo studente discute l'elaborato. La verifica dell'apprendimento riguarda l'intero programma dell'insegnamento.

L'elaborato è individuale, viene assegnato e svolto durante il corso e consiste nella realizzazione e documentazione di un progetto che applichi gli argomenti trattati. L'elaborato non riceve una valutazione autonoma, ma costituisce la base della discussione d'esame e ha lo scopo di consentire al docente di valutare, in sede di colloquio, la capacità progettuale dello studente e la sua conoscenza dell'argomento affrontato.

Nel colloquio orale lo studente presenta il proprio elaborato illustrandone le scelte progettuali e le motivazioni, i vantaggi e i limiti della soluzione adottata e gli eventuali risultati ottenuti. Il colloquio si estende quindi agli argomenti del programma collegati all'elaborato e agli altri argomenti trattati durante il corso. Costituiscono elementi di valutazione la pertinenza delle risposte, la correttezza e la profondità dei contenuti, la capacità di motivare le scelte progettuali e di individuarne vantaggi e limiti, la capacità di fornire esempi concreti, la proprietà del linguaggio tecnico e la chiarezza espositiva.

La verifica dell'apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.

A garanzia di pari opportunità e nel rispetto delle leggi vigenti, gli studenti interessati possono chiedere un colloquio personale in modo da programmare eventuali misure compensative e/o dispensative, in base agli obiettivi didattici ed alle specifiche esigenze. È possibile rivolgersi anche al docente referente CInAP (Centro per l'integrazione Attiva e Partecipata — Servizi per le Disabilità e/o i DSA) del proprio Dipartimento (https://www.cinap.unict.it/content/referenti).

Esempi di domande e/o esercizi frequenti

Requisiti di virtualizzabilità di un'architettura e loro significato operativo.

Emulazione, traduzione binaria dinamica, paravirtualizzazione ed estensioni hardware: differenze e ambiti di applicazione.

Criteri di scelta tra emulazione, virtualizzazione e partizionamento dato un requisito applicativo.

Namespaces e cgroup: quale forma di isolamento fornisce ciascun meccanismo e quali limiti presenta.

Confronto tra container e macchine virtuali sotto il profilo dell'isolamento.

Principali problematiche di progetto di un device driver e criteri con cui affrontarle.

Ciclo di vita di un programma eBPF, ruolo del verifier e modello di sicurezza della tecnologia.

Cause di non predicibilità nei sistemi operativi general-purpose.

Vincoli temporali e loro natura.

Algoritmi di scheduling real-time e relativa analisi di schedulabilità.

Problematiche legate all'accesso a risorse condivise in un sistema real-time.