Sistemi Operativi (M-Z)

AA. 2024/2025

Obiettivi

Il corso propone una completa introduzione alle problematiche relative alla progettazione dei moderni sistemi operativi. La parte teorica è integrata con riferimenti concreti ai sistemi operativi contemporanei ed è prevista una parte di laboratorio in cui vengono curati gli aspetti implementativi attinenti il corso.

Obiettivo del corso è quello di rendere lo studente in grado di utilizzare le metodologie apprese per analizzare le prestazioni di un sistema operativo in un particolare contesto applicativo; formulare alternative o proporre soluzioni originali a problemi legati al funzionamento dei sistemi di calcolo complessi; e, grazie alle conoscenze acquisite nella parte di laboratorio, potrà operare attivamente su un sistema operativo UNIX-like attraverso la shell di comando e, dal punto di vista della programmazione, attraverso le chiamate di sistema POSIX. Infine, il corso si prefigge di far apprendere allo studente le interazioni tra le tematiche dei sistemi operativi, della progettazione software, e dell’importanza di adeguati supporti hardware.



Comunicazioni

August 28, 2025: Di seguito le date e gli orari dei prossimi appelli di Settembre 2025:

  • test di teoria, mercoledì 10 Settembre alle ore 11 in aula 4 e 22
  • prova di laboratorio, mercoledì 17 Settembre alle ore 15 in aula 22
  • test di teoria, giovedì 25 Settembre alle ore 11 in aula 4 e 22
  • prova di laboratorio, lunedì 29 Settembre alle ore 10 in aula 22
Limitatamente al primo appello e solo per i laureandi del 26 Settembre, è prevista una prova anticipata di laboratorio per il 12 Settembre alle ore 10 nel laboratorio 125. Gli interessati devono contattare il proprio docente di riferimento e confermare che si tratta dell'ultimo esame da sostenere e di rientrare nei tempi di consegna del proprio progetto finale. Si noti che tali informazioni saranno verificate con il Presidente CdS e con il relatore.

Avvisi

July 22, 2025: Le prove di laboratorio sono state valutate e possono essere visionate, insieme alla relativa proposta di voto, al seguente link: https://dtm.unict.it/marks/2178533831
July 10, 2025: I test scritti di teoria sono stati valutati ed possono essere visionati, insieme alle indicazioni sui turni per il colloquio orale, al seguente link: https://dtm.unict.it/marks/1892532932. Si ricorda che la prova pratica di laboratorio si svolgerà giovedì 17 luglio 2025 alle ore 10:00 in aula 22 del DMI.
July 4, 2025: Le prove di laboratorio sono state valutate e possono essere visionate, insieme alla relativa proposta di voto, al seguente link: https://dtm.unict.it/marks/3178938555.
July 1, 2025: La prova scritta di teoria è stata valutata ed è possibile accedere alla propria valutazione tramite il seguente link: https://dtm.unict.it/marks/3365006626. Il colloquio orale è fissato per oggi alle ore 12:15.
June 9, 2025: Le prove di laboratorio del 19 maggio c.a. sono state valutate e possono essere visionate, insieme alla relativa proposta di voto al seguente link: https://dtm.unict.it/marks/1861251737


Materiale Didattico

Useful Links

• Lo scheduler CFS di Linux
• Mac OS X: scheduler, file-system APFS
• Filesystem Linux: novità in ext4, ext4, struttura BTRFS
• Manuale completo sul linguaggio C: Tricky C
Memorie NAND e dischi SSD

Laboratorio

•   Slide lezioni Laboratorio
•   esercizi visti a lezione

Last Update: June 11, 2025

Esercizi e compiti di laboratorio dei precedenti anni accademici, svolti nell’ambito delle attività di tutorato:
–   Tutorato AA 2024-2025
–   Tutorato AA 2023-2024
–   Tutorato AA 2022-2023
–   Tutorato AA 2021-2022
–   Tutorato AA 2019-2020


Modalità Esame

L'esame è composto da due prove, da superare in ordine anche in appelli diversi:
•   prova di teoria: si tratta di un questionario, a risposta multipla e/o aperte, su argomenti relativi alla teoria ed esercizi; superato questo, si sosterrà nello stesso appello un colloquio orale sugli stessi argomenti;
•   prova di laboratorio: si tratta di prova pratica in laboratorio in cui lo studente dovrà scrivere un programma in linguaggio C che risolva un problema proposto facendo uso dei costrutti e delle chiamate di sistema UNIX viste a lezione. Si lavorerà in un ambiente ad-hoc in cui sarà possibile consultare solo la documentazione di sistema e le proiezioni viste a lezione.

Prova Teoria & Laboratorio

La valutazione del questionario sarà approvato o non approvato; solo nel primo caso si potrà sostenere il colloquio orale che completerà la prova di teoria. La valutazione finale della prova di teoria sarà in trentesimi. Prova scritta (questionario) e colloquio orale vanno superati nell’ambito dello stesso appello. La prova di laboratorio avrà un proprio voto in trentesimi e si svolgerà in una apposita data successiva a quella della teoria; può essere sostenuta anche in appelli successivi.
Il voto finale si baserà sulla media pesata dei voti ottenuti nelle due parti del programma (65% teoria, 35% laboratorio): l’esatto arrotondamento e l’eventuale assegnazione della lode rimane a completa discrezione della commissione.

Note Esame

Per poter sostenere una qualunque prova è obbligatorio prenotarsi sul portale SmartEdu, specificando nelle note le prove da sostenere (teoria e/o laboratorio). Le due prove possono essere sostenute anche in appelli diversi; in questo caso è necessario prenotarsi in ogni appello in cui si sostiene la prova. Nella data dell’appello riportata nel calendario esami si terrà sempre la prova scritta di teoria (questionario); le date per il colloquio orale (usualmente qualche giorno dopo il questionario) e la prova di laboratorio, verranno ufficialmente comunicate successivamente allo scritto con apposito avviso.
NOTA: il voto ottenuto sulla parte di teoria, se non completato con il laboratorio, rimarrà valido fino all'ultimo appello del relativo A.A.: Aprile 2025


Programma del Corso

Teoria

  • Introduzione al concetto di sistema operativo
  • Richiami sull’architettura degli elaboratori
  • Struttura di un sistema operativo
  • I processi: definizione, multiprogrammazione, stati e transizioni
  • I thread: definizione, modelli utilizzabili; programmazione multicore
  • Sezioni critiche e mutua esclusione: variabili di lock, alternanza stretta, soluzione di Peterson, istruzioni TSL/XCHG, semafori, mutex lock in spazio utente, futex, monitor, messaggi tra processi
  • Problema dei 5 filosofi e dei lettori-scrittori (soluzioni basate su semafori e monitor)
  • Scheduling: scheduler e dispatcher
  • Algoritmi di scheduling: progettazione, FCFS, SJF, SRTN, RR, a priorità, con code multiple, SPN, garantito, a lotteria, fair-share
  • Scheduling dei thread e su sistemi multi-processore
  • Gestione della memoria per la multi-programmazione: swapping, rilocazione, gestione dello spazio libero
  • Memoria virtuale: paginazione, tabella delle pagine, uso di memoria associativa, varianti multi-livello, tabella delle pagine invertita, conseguenze sulla cache
  • Algoritmi di sostituzione delle pagine: progettazione, ottimale, NRU, FIFO, seconda chance, clock, LRU, NFU, aging; anomalia di Belady
  • Altri aspetti legati alla gestione della memoria: allocazione dei frame, working set, controllo del carico, dimensione delle pagine, condivisione delle pagine, copy-on-write, zero-fill-on-demand, librerie condivise, mappatura di file, allocazione della memoria del kernel (buddy system, slab allocator)
  • File-system: astrazione, file, directory
  • Progettazione di un file-system: allocazione dei file (contigua, concatenata, tabellare e indicizzata), directory, hard/soft-link, gestione blocchi liberi (con bitmap e con lista concatenata)
  • Altri aspetti tecnici sui file-system: controlli di consistenza, journaling; cache del disco, deframmentazione
  • Scheduling del disco e relativi algoritmi: FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK
  • Sistemi RAID: principi di base, RAID-[0,1,2,3,4,5]
  • Memorie flash, dischi a stato solido (SSD) e implicazioni sui file system

Laboratorio

  • Tutorial sull’uso della shell UNIX
  • Programmazione in ambienti UNIX:
    • uso delle chiamate di sistema
    • gestione dell’I/O su file e chiamate di servizio relative al file-system e alla mappatura dei file in memoria
    • gestione dei processi e dei thread: creazione e coordinamento tramite attesa
    • Coordinamento tramite mutex/lock, semafori contatori, variabili condizione (in stile monitor), lock per reader/writer e barriere
    • Accenno ai segnali sui sistemi UNIX


Libri Consigliati

I Moderni Sistemi Operativi (4° o 5° edizione)
A. S. Tanenbaum & H. Bos
Pearson
anno: 2016 / 2023
ISBN: 9788891931955
e-ISBN: 9788891931962
ISBN: 9788891906250
e-ISBN: 9788891906267


Sistemi Operativi – Concetti ed Esempi (9° edizione)
A. Silberschatz, P. Baer Galvin, G. Gagne
Pearson
anno: 2014
ISBN: 9788865183717

Ricevimento

Il ricevimento studenti viene svolto presso il proprio studio nei seguenti giorni e orari:
•   Mercoledì dalle 10:00 alle 11:00.

NOTA: è consigliabile concordare con il docente il ricevimento per via email (no telegram o teams) all'indirizzo mario.pavone@unict.it.

Orario Lezioni (AA.2024/2025)

Le lezioni si svolgono come da calendario nei seguenti giorni e orari:
•   Martedì dalle 10:00 alle 13:00 in aula 24;
•   Giovedì dalle 10:00 alle 13:00 in aula 24.

Tutorato di SO: inizio previsto per metà Maggio.