Sistemi Operativi

Questa è la pagina del corso di Sistemi Operativi (A-L) per Informatica (primo livello) per l’a.a. 2021-2022. Alcune pagine dei corsi tenuti negli a.a. passati potrebbero essere ancora disponibili.

Informazioni generali

CFU: 9
ore: 72
anno: 2°
semestre: 2°
inizio lezioni: 8 Marzo 2022

modalità: presenza (mista fino al 31/03/22)
aula: 24
canale Teams: i412gv5 (A-L), qlxao81 (M-Z)
orario: 10-13
giorni: martedì – giovedì

requisiti: basi di programmazione, conoscenza dell’architettura di un calcolatore
propedeuticità: Architettura degli Elaboratori, Programmazione 1
docente: Prof. Mario Di Raimondo (A-L) / Prof. Mario Pavone (M-Z)
frequenza: non obbligatoria ma fortemente consigliata

Comunicazioni

Tutti gli avvisi relativi al corso saranno sempre pubblicati sul sito del Dipartimento nell’apposita sezione. Per qualunque altra questione (non coperta già dalle FAQ) è sempre possibile contattare il docente per email.

Calendario e ricevimento

COVID-19: fino al rientro definito dalla situazione di pandemia il ricevimento sarà tenuto sia di persona che per via telematica tramite la piattaforma di Ateneo Microsoft Teams. In entrambi i casi è necessario scrivere preliminarmente una email per concordare l’appuntamento di presenza o on-line.

Nel calendario ufficiale del corso sono indicate le date delle lezioni, gli incontri per il ricevimento degli studenti e gli appelli d’esame.

L’eventuale spostamento di una lezione sarà sempre segnalato attraverso un apposito avviso. Ciò vale anche per il posticipo di una data d’appello: in questi casi sul portale SmartEdu potrebbe non comparire la data corretta e, pertanto, il dato a cui fare fede sarà sempre quello che compare nel calendario ufficiale del corso su questa pagina. Per quanto riguarda il ricevimento in giorni fissi, questo potrebbe subire cambiamenti senza espliciti avvisi: gli studenti interessati sono pertanto invitati a controllare il calendario sistematicamente e/o a scrivere al docente per un appuntamento.

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 sono curati gli aspetti implementativi attinenti il corso.

Obiettivi formativi

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.

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.

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.

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.

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.

Programma

Avviso pubblicato sul sito del DMI in data 29/09/2022:
“A partire dall’a.a. 2022-2023, per necessità relative all’aggiornamento tecnologico del programma, il corso di Sistemi Operativi (AL & MZ) vedrà una revisione dei contenuti relativi al laboratorio. Alcuni strumenti saranno rimossi (exec, dup, pipe, fifo, code di messaggi, segmenti di memoria condivisa, …) e altri saranno aggiunti (thread, lock, lock R/W, variabili condizione …). Tale modifica sarà applicata a partire dagli appelli della sessione estiva dell’a.a. 2022-2023 (Giugno 2023) a tutte le coorti e a tutti gli studenti.”

  • 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
  • Tutorial sull’uso della shell UNIX
  • Programmazione in ambienti UNIX:
    • L’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: creazione, coordinamento, esecuzione di comandi esterni
    • Chiamate per la comunicazione tra processi tramite pipe e FIFO
    • Chiamate per la comunicazione tra processi tramite messaggi
    • Chiamate per la gestione della memoria condivisa tra i processi
    • Chiamate per la gestione dei semafori
    • Segnali sui sistemi UNIX (accenno)

Il programma delinea in modo generico i contenuti trattati durante il corso: per ulteriori dettagli è possibile consultare le diapositive usate durante le lezioni. Tutto ciò che è stato esposto a lezione, ad eccezione dei contenuti del tutorial sulla shell UNIX, sarà oggetto di valutazione durante l’esame.

Tutti i contenuti NON sottolineati sono da intendersi come facenti parte delle conoscenze minime richieste per il superamento dell’esame.

Risorse

Il materiale didattico utilizzato nell’a.a. passato è riconoscibile dal link barrato: durante l’anno questo potrebbe subire modifiche e aggiornamenti. Il materiale aggiornato che verrà man mano pubblicato sarà riconoscibile dal link non barrato.

 I moderni sistemi operativi (quarta edizione)

autori: Andrew S. Tanenbaum, Herbert Bos
casa editrice: Pearson 
anno di pubblicazione: 201
ISBN: 9788891912695

Sistemi operativi – Concetti ed esempi (nona edizione)

autori: Abraham Silberschatz, Peter Baer Galvin, Greg Gagne
casa editrice: Pearson 
anno di pubblicazione: 2014 
ISBN: 9788865183717

Tutti i testi sono disponibili presso la biblioteca del DMI.

Le proiezioni viste a lezioni sono disponibili sul repository GIT pubblico del corso.

Gli esempi di laboratorio visti a lezioni sono disponibili sul repository GIT pubblico del corso.

Sono anche disponibili alcuni esempi e compiti di laboratorio svolti nell’ambito delle attività di tutorato del corso. Tali codici non sono però stati revisionati dai docenti del corso.

Gli esercizi proposti durante le lezioni e il tutorato sono disponibili sul repository GIT pubblico del corso.

I compiti passati di laboratorio disponibili sul repository GIT pubblico del corso.

Esame (modalità aggiornate a Marzo 2022)

COVID-19: a causa delle varie restrizioni imposte dalla situazione, alcune prove hanno subito delle modifiche transitorie; leggere con cura i dettagli a seguire.

L’esame finale prevede, esattamente in quest’ordine, le seguenti prove da superare:

  • prova di teoria: si tratta di un questionario, con risposte a scelta multipla e/o aperte, su argomenti relativi alla teoria ed esercizi; superato questo si sosterrà un colloquio orale sugli stessi argomenti;
  • prova pratica di laboratorio: si tratta di una sessione di 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.

La prova scritta riceverà un voto in trentesimi: ottenuti almeno 18/30 si sosterrà l’orale che, con un limitato aggiustamento, porterà alla valutazione finale della parte teorica; la prova di laboratorio avrà un proprio voto in trentesimi. 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.

COVID-19: in caso di impossibilità nell’accedere alle strutture del DMI, o per positività dello studente, è previsto che lo scritto e il colloquio di presenza di teoria siano sostituiti da un “orale lungo” on-line. Al momento per la prova di laboratorio non sono previste alternative online: si potrà completare l’esame con la prova pratica in presenza in qualunque appello successivo.

La prova scritta e il colloquio orale vanno superati nell’ambito dello stesso appello (comunque in giorni diversi per i tempi tecnici di correzione); la prova pratica, in genere fissata in una terza data, può essere sostenuta subito dopo o anche in un appello successivo. E’ pertanto possibile superare tutte le prove nell’ambito di un unico appello ufficiale o decidere di sostenerle a cavallo di appelli distinti (scritto+orale in un appello, laboratorio in un altro). Il voto sulla parte di teoria, se non completato con il laboratorio, avrà comunque una scadenza: Maggio 2023. Superata la teoria (scritto+orale), se lo studente è insoddisfatto del voto ricevuto per il laboratorio, può ripetere quest’ultima prova in un appello successivo mantenendo la votazione sulla teoria.

Per poter sostenere una qualunque prova in un dato appello è obbligatorio prenotarsi sul portale SmartEdu, indicando le prove da sostenere nel campo note (teoria e/o laboratorio). Se si sostengono le prove in appelli distinti, è necessario prenotarsi ad ogni appello. In caso di assenza per cause di forza maggiore lo studente deve avvisare il docente il prima possibile. In caso di mancata comunicazione, l’assenza verrà regolarmente verbalizzata sul portale d’Ateneo.

Nella data dell’appello riportata sul calendario esami si terrà sempre la prova di teoria; la prova orale si terrà qualche giorno dopo (da 1 a 5 giorni, in base al numero di elaborati da correggere) e la data esatta, unitamente a quella della prova di laboratorio, sarà comunicata successivamente allo scritto con un apposito avviso.

Gli studenti ERASMUS stranieri in visita presso il nostro Ateneo, tenendo conto delle difficoltà linguistiche e dei ristretti periodi di permanenza, possono superare l’esame sostenendo direttamente il colloquio orale sulla teoria (senza scritto) e, superato questo, la prova pratica in laboratorio (anche in appelli distinti). Il colloquio, su richiesta, si potrà sostenere anche in lingua Inglese.

Domande frequenti (FAQ)

Dall’anno accademico 2014-2015 non sono più previste prove in itinere.

Il libro principale di riferimento del corso è il testo di Tanenbaum-Bos: se ne consiglia l’uso della quarta edizione ma, se lo studente ne è già in possesso, la terza edizione è da considerarsi comunque idonea. Il secondo testo di Silberschatz et al. è utilizzato per approfondimenti e per alcuni argomenti del programma (comunque richiesti in sede d’esame). Tutti i libri di testo citati sono disponibili in biblioteca per eventuali consultazioni. Gli argomenti trattati a lezione fanno esplicito riferimento alle edizioni indicate dei testi: l’eventuale uso di edizioni ancora più vecchie deve tenere conto di possibili discrepanze o mancanze nei contenuti.

Durante la prova scritta di teoria non è assolutamente possibile utilizzare alcuna documentazione (appunti, dispense, libri, …). E’ consigliabile portare con se una calcolatrice, ma non è assolutamente possibile utilizzare telefonini, smartwatch o smartphone di alcun genere (anche se solo per impiegarne l’applicazione calcolatrice). E’ indispensabile portare con se un documento di riconoscimento. Per la prova di laboratorio si utilizzerà un sistema GNU/Linux con un account ad-hoc per l’esame: si potrà accedere unicamente alla documentazione di sistema (man page) e ad una copia digitale delle proiezioni di laboratorio che si troverà già sull’account. Non sarà possibile accedere alla rete esterna o a supporti rimovibili esterni in alcun modo.

Per quanto riguarda lo scritto di teoria, prima di consegnare il vostro compito dovete prendere nota con cura del codice che si trova in basso a sinistra sul foglio prestampato. Dovrebbe avere un aspetto simile a ‘20100520-05-1415-2’. Una volta pubblicato l’avviso che notifica la pubblicazione dei risultati, usando tale codice ed il vostro numero di matricola potrete utilizzare un apposito modulo web per verificare l’esito del vostro compito in modo del tutto privato. Per la prova di laboratorio ci sarà un apposito avviso con la proposta di voto finale da confermare personalmente al docente di riferimento.

Da sempre sono previsti due appelli straordinari riservati agli studenti fuori-corso. Recentemente si sono aggiunti altri due appelli riservati agli studenti “iscritti agli anni successivi” (quindi al 3° anno per Sistemi Operativi). Le date esatte sono riportate sul calendario del corso (indicativamente a Dicembre e ad Aprile). L’accesso a tali appelli presenta però delle limitazioni previste dal Manifesto degli Studi: consultare preliminarmente lo stesso per verificare la propria possibilità di accesso. Per poter partecipare a tali appelli sarà indispensabile prenotarsi per tempo sul portale studenti: lo stesso potrebbe negare la prenotazione se il sistema non verifica i requisiti necessari. In caso di problemi contattare per tempo la segreteria.

Per quanto riguarda lo scritto di teoria, non è possibile avere copie di tali compiti: gli studenti devono riconsegnare i testi con le domanda alla fine dello scritto. Durante gli orari di ricevimento è sempre possibile visionare eventuali compiti passati per meglio comprendere i propri errori. E’ possibile farsi un’idea del tipo di domande guardando il estratto con alcuni esempi di domande. Sono previste domande a scelta multipla e domande a risposta aperta (comunque sintetica), mirate a valutare il grado di comprensione degli argomenti di teoria trattati a lezione. Le prove passate di laboratorio sono invece tutte presenti nella sezione Risorse della pagina del corso.

Si lavorerà dentro una distribuzione live GNU/Linux, appositamente creata per questo tipo di esami, denominata Exam-Box NG: si tratta di un ambiente ad-hoc in cui sarà possibile consultare solo la documentazione di sistema (man page) e le proiezioni viste a lezione (già disponibili sull’account). Non sarà possibile accedere ad Internet o utilizzare supporti esterni removibili. Oltre agli strumenti necessari a compilare (gcc e g++) e per il debugging (gdb), saranno possibile scegliere tra svariati editor/IDE (gedit/pluma, code::blocks, sublime text 3, visual studio code, atom, …).

A causa di cattive abitudini di vecchi colleghi non è più possibile riparare a tale dimenticanza: chi non risulta prenotato sul portale studenti non può svolgere alcuna prova in quel dato appello. Non sono ammesse eccezioni.

Per quanto riguarda la didattica mista (on-line e di presenza) si seguono le indicazioni d’Ateneo: per il secondo semestre dell’a.a. in corso ci sarà la didattica mista per il mese di Marzo 2022 e da Aprile si procederà principalmente con la didattica in presenza con la mista riservata solo agli aventi diritto (CINAP, isolati, lavoratori riconosciuti, …).

Le lezioni non saranno in alcun caso registrate.