SISTEMI OPERATIVI A - L

Anno accademico 2023/2024 - Docente: MARIO DI RAIMONDO

Risultati di apprendimento attesi

  • Conoscenza e capacità  di comprensione (knowledge and understanding): lo studente sarà in grado di comprendere problematiche quali l’organizzazione di un sistema di calcolo moderno, la gestione delle risorse di un sistema di calcolo (memoria, CPU, dispositivi esterni), e la gestione e la sincronizzazione dei processi e dei thread in un sistema multiprogrammato e a condivisione del tempo. Tramite lo studio del kernel del sistema operativo Linux lo studente avrà una conoscenza pratica delle più moderne tecniche nel campo dei sistemi operativi.
  • Capacità  di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente sarà in grado di utilizzare le metodologie apprese per analizzare le prestazioni di un sistema operativo in un particolare contesto applicativo; saprà formulare alternative o proporre soluzioni originali a problemi legati al funzionamento dei sistemi di calcolo complessi; saprà porre e sostenere argomentazioni nell’ambito dei sistemi operativi, evidenziando vantaggi e svantaggi di particolari soluzioni implementative; infine, 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.
  • Autonomia di giudizio (making judgements): lo studente sarà in grado di seguire i trend moderni nell’ambito della progettazione di sistemi operativi; sarà in grado di raccogliere i dati necessari alla valutazione delle prestazioni di un particolare sistema operativo, e di interpretare i risultati della valutazione; infine, sarà in grado di elaborare i requisiti necessari alla progettazione di un nuovo sistema operativo, e di valutare l’efficacia di diverse soluzioni alternative. 
  • Abilità comunicative (communication skills): lo studente acquisirà la capacità di comunicare ed esprimere problematiche inerenti l’oggetto del corso; sarà in grado di sostenere conversazioni su tematiche relative ai moderni sistemi operativi, di confrontare diversi sistemi operativi, e di offrire possibili soluzioni.
  • Capacità  di apprendimento (learning skills): lo studente avrà appreso le interazioni tra le tematiche dei sistemi operativi, della progettazione software, e dell’importanza di adeguati supporti hardware e questo gli consentirà di proseguire gli studi universitari con un elevato grado di autonomia.

Modalità di svolgimento dell'insegnamento

Lezioni frontali in aula su argomenti di teoria e su sviluppo codice per la parte di laboratorio.

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: basi di programmazione, conoscenza dell'architettura di un calcolatore

propedeuticità: Architettura degli Elaboratori, Programmazione 1

Frequenza lezioni

Frequenza delle lezioni non obbligatoria ma fortemente consigliata per garantire un idoneo grado di comprensione degli argomenti proposti.

Contenuti del corso

Il corso è una introduzione ai principi ed al progetto di sistemi operativi, essenziali per coordinare le attività e le risorse di un sistema di calcolo. Sono affrontati i principali temi dalle architetture software alla gestione dei processi e delle risorse del sistema. Nella parte di laboratorio si approfondirà l'uso di strumenti standard (POSIX) in ambienti UNIX-compatibili per la gestione di processi e thread nonché la comunicazione e coordinamento tra questi.

Testi di riferimento


AutoreTitoloEditoreAnnoISBN
Andrew S. Tanenbaum, Herbert BosI moderni sistemi operativi (quinta edizione)Pearson20239788891912695
Abraham Silberschatz, Peter Baer Galvin, Greg GagneSistemi operativi – Concetti ed esempi (nona edizione)Pearson20149788865183717

Programmazione del corso

 ArgomentiRiferimenti testi
1Teoria:
2Introduzione al concetto di sistema operativocap.1 di [TB], cap.1 di [SGG]
3Richiami all'architettura degli elaboratoricap.1 di [TB], cap.1 di [SGG]
4Struttura di un sistema operativocap.1 di [TB], cap.2 di [SGG]
5I processi: definizione, multiprogrammazione, stati e transizionicap.2 di [TB], cap.3,4 di [SGG]
6I thread: definizione, modelli utilizzabili; programmazione multicorecap.2 di [TB], cap.4 di [SGG]
7Sezioni 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 processicap.2 di [TB], cap.6 di [SGG]
8Problema dei 5 filosofi e dei lettori-scrittori (soluzioni basate su semafori e monitor)cap.2 di [TB], cap.6 di [SGG]
9Scheduling: scheduler e dispatchercap.2 di [TB], cap.5 di [SGG]
10Algoritmi di scheduling: progettazione, FCFS, SJF, SRTN, RR, a priorità, con code multiple, SPN, garantito, a lotteria, fair-sharecap.2 di [TB], cap.5 di [SGG]
11Scheduling dei thread e su sistemi multi-processorecap.2 di [TB], cap.5 di [SGG]
12Gestione della memoria per la multi-programmazione: swapping, rilocazione, gestione dello spazio liberocap.3 di [TB], cap.8 di [SGG]
13Memoria virtuale: paginazione, tabella delle pagine, uso di memoria associativa, varianti multi-livello, tabella delle pagine invertita, conseguenze sulla cachecap.3 di [TB], cap.8 di [SGG]
14Algoritmi di sostituzione delle pagine: progettazione, ottimale, NRU, FIFO, seconda chance, clock, LRU, NFU, aging; anomalia di Beladycap.3 di [TB], cap.9 di [SGG]
15Altri 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, slab allocatorcap.3 di [TB], cap.9 di [SGG]
16File-system: astrazione, file, directorycap.4 di [TB], cap.10 di [SGG]
17Progettazione 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)cap.4 di [TB], cap.11 di [SGG]
18Altri aspetti tecnici sui file-system: controlli di consistenza, journalingcap.4 di [TB], cap.11 di [SGG]
19Accenni sui file-system storici e contemporanei: FAT-[12,16,32,64], NTFS, ext-[2,3,4], BTRFScap.4,10,11 di [TB], cap.21,22 di [SGG]
20Scheduling del disco e relativi algoritmi: FCFS, SSTF, algoritmo dell'ascensore, variante circolarecap.5 di [TB], cap.12 di [SGG]
21Sistemi RAID: principi di base, RAID-[0,1,2,3,4,5]cap.5 di [TB], cap.12 di [SGG]
22Memorie flash, dischi a stato solido (SSD) e implicazioni sui file systemrisorse esterne
23Laboratorio:risorse esterne, man page
24Gestione dell'I/O su file, chiamate di servizio relative al file-system e alla mappatura dei file in memoria
25Gestione dei processi e dei thread: creazione e coordinamento tramite attesa
26Coordinamento tramite mutex/lock, semafori contatori, variabili condizione (in stile monitor), lock per reader/writer e barriere
27Accenno ai segnali sui sistemi UNIX

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

L'esame è composto da due prove da superare in ordine eventualmente su appelli diversi:

  • prova di teoria: prevede, nell'ambito di un unico appello, una prova scritta o a computer seguita da un colloquio orale sulla parte di teoria del programma; 
  • prova pratica di laboratorio: superata la teoria, prevede una sessione 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.

Verificare tutti i dettagli sulla modalità di prenotazione sul sito del corso.

Le prove sono finalizzate ad ottenere una valutazione complessiva della preparazione dello studente. Il voto finale, congiunto con il modulo di laboratorio, viene attribuito indicativamente secondo il seguente schema:

  • Non approvato: lo studente non ha acquisito i concetti di base e non è in grado di rispondere ad almeno il 60% delle domande né di svolgere gli esercizi teorici e pratici.
  • 18-20: lo studente dimostra una padronanza appena sufficiente dei concetti base, e/o riesce ad impostare gli esercizi teorico/pratici con molta difficoltà e con vari errori.
  • 21-24: lo studente dimostra una padronanza minima dei concetti di base, le sue capacità di collegamento dei contenuti sono modeste, riesce a risolvere semplici esercizi.
  • 25-27: lo studente dimostra una buona padronanza dei contenuti del corso, le sue capacità di collegamento dei contenuti sono buone, risolve gli esercizi con pochi errori.
  • 28-30 e lode: lo studente ha acquisito tutti i contenuti del corso ed è in grado di padroneggiarli compiutamente e di collegarli con spirito critico; risolve gli esercizi in modo completo e senza errori di particolare rilievo.

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

Esempi di domande e/o esercizi frequenti

Sulla pagina del corso sono disponibili:

  • un fac-simile della prova scritta (vedi la sezione FAQ);
  • una serie di esercizi di laboratorio che gli studenti sono invitati a svolgere durante il corso;
  • tutte le prove di laboratorio, alcune con soluzione, svolte fino ad oggi.