Sistemi Operativi (a.a. 2020-2021)

Questa è la pagina archiviata del corso di Sistemi Operativi (A-L) per Informatica (primo livello) per l’a.a. 2020-2021. La pagina non è più aggiornata.

Informazioni generali

CFU: 9
ore: 72
anno: 2°
semestre: 2°

modalità: mista (di presenza & on-line)
aula: 2 (A-L), 24 (M-Z)
canale Teams: i412gv5 (A-L), qlxao81 (M-Z)
orario: 10-13
giorni: lunedì – mercoledì

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

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

  • 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
  • Scheduling su Windows 8 e Linux (task, O(1) e CFS)
  • 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)
  • Segmentazione
  • Gestione della memoria su Linux
  • 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
  • Accenni sui file-system storici e contemporanei: ext-[2,3,4], BTRFS, FAT-[12,16,32,64], NTFS
  • 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:
    • La shell UNIX
    • I file-system, hard/soft-link e altre peculiarità
    • Primi comandi per la gestione dei file e delle directory
    • Flussi di I/O e redirezione
    • Invocazione tramite pipeline
    • Esempi di comandi per l’elaborazione dei flussi di dati
    • Archiviazione dei file
    • Esecuzione condizionata dei comandi
    • Accenno alle variabili d’ambiente
    • Command substitution
    • Introduzione alla programmazione script
  • 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.

Esame

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:

  • una prova scritta di teoria: si tratta di un questionario, con risposte a scelta multipla e/o aperte, su argomenti relativi alla teoria ed esercizi;
  • un colloquio orale di teoria;
  • una 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.

Le prove devono essere superate secondo la sequenza (scritto, orale, laboratorio): per accedere all’orale è necessario aver superato la prova scritta; per accedere al laboratorio bisogna aver superato entrambe le prove di teoria. La prova scritta riceverà un voto in trentesimi: ottenuti almeno 18/30 sarà possibile sostenere l’orale che, con un aggiustamento indicativo di +/- 4 punti, 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{96b1e551c0eb6b8642c23002f9641c21addce7adddff4232ab77094dde67ad16} teoria, 35{96b1e551c0eb6b8642c23002f9641c21addce7adddff4232ab77094dde67ad16} laboratorio): l’esatto arrotondamento rimane a completa discrezione della commissione.

COVID-19: in caso di impossibilità nell’accedere alle strutture del DMI sono previste delle “prove alternative”; se non si potesse svolgere lo scritto di teoria in aula, allora lo scritto e il colloquio orale saranno sostituiti da un “orale lungo” on-line; se non si potesse accedere ai laboratori, la prova pratica impiegherà una piattaforma on-line (del tutto equivalente all’esperienza in laboratorio) sui propri computer personali in aula o da casa, in quest’ultimo caso, con doppia telecamera di sorveglianza. I dettagli saranno forniti tramite avvisi e comunicazioni ai prenotati.

E’ possibile superare le prove nell’ambito di un unico appello ufficiale (ovviamente in giorni diversi) o decidere di sostenerle a cavallo di appelli distinti. Le prove intermedie superate avranno comunque una scadenza: Maggio 2022. Lo studente, non soddisfatto del voto di una prova (scritto, orale o laboratorio), può decidere di ripeterla negli appelli successivi rinunciando contestualmente e a priori alla vecchia valutazione sulla specifica prova.

Per poter sostenere una qualunque prova in un dato appello è obbligatorio prenotarsi sul portale SmartEdu, indicando le prove da sostenere nel campo note (scritto e/o orale e/o laboratorio). Si sottolinea che in assenza di tale indicazione, comunque gradita, si assume che si voglia partecipare a tutte le prove e che si stia rinunciando a tutte le precedenti prove già superate. In caso di assenza per cause di forza maggiore lo studente deve avvisare il docente il prima possibile.

Nella data dell’appello riportata sul calendario esami si terrà 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 con apposito avviso.