SISTEMI OPERATIVI
Anno accademico 2016/2017 - 2° annoCrediti: 9
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 72 di lezione frontale
Semestre: 2°
Obiettivi formativi
- 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.
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.
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. Con riferimento ai sistemi UNIX, nella parte di laboratorio si affronta l'uso della shell e la programmazione in linguaggio C degli aspetti cruciali legati ai processi, alla memoria e all'inter-process communication (IPC).
Testi di riferimento
autori: Andrew S. Tanenbaum, Herbert Bos
titolo: I moderni sistemi operativi (quarta edizione)
casa editrice: Pearson
anno di pubblicazione: 2016
ISBN: 9788891901019
autori: Abraham Silberschatz, Peter Baer Galvin, Greg Gagne
titolo: Sistemi operativi – Concetti ed esempi (nona edizione)
casa editrice: Pearson
anno di pubblicazione: 2014
ISBN: 9788865183717
Programmazione del corso
* | Argomenti | Riferimenti testi | |
---|---|---|---|
1 | Teoria: | ||
2 | * | Introduzione al concetto di sistema operativo | |
3 | Richiami sull'architettura degli elaboratori | ||
4 | * | Struttura di un sistema operativo | |
5 | * | I processi: definizione, multiprogrammazione, stati e transizioni | |
6 | * | I thread: definizione, modelli utilizzabili; programmazione multicore | |
7 | * | 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 | |
8 | * | Problema dei 5 filosofi e dei lettori-scrittori (soluzioni basate su semafori e monitor) | |
9 | * | Scheduling: scheduler e dispatcher | |
10 | * | Algoritmi di scheduling: progettazione, FCFS, SJF, SRTN, RR, a priorità, con code multiple, SPN, garantito, a lotteria, fair-share | |
11 | * | Scheduling dei thread e su sistemi multi-processore | |
12 | Scheduling su Windows 8 e Linux (task, O(1) e CFS) | ||
13 | * | Gestione della memoria per la multi-programmazione: swapping, rilocazione, gestione dello spazio libero | |
14 | * | Memoria virtuale: paginazione, tabella delle pagine, uso di memoria associativa, varianti multi-livello, tabella delle pagine invertita, conseguenze sulla cache | |
15 | * | Algoritmi di sostituzione delle pagine: progettazione, ottimale, NRU, FIFO, seconda chance, clock, LRU, NFU, aging; anomalia di Belady | |
16 | * | 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 me | |
17 | * | Segmentazione | |
18 | Gestione della memoria su Linux | ||
19 | * | File-system: astrazione, file, directory | |
20 | * | Progettazione di un file-system: allocazione dei file (contigua, concatenata, tabellare e indicizzata), directory, hard/soft-link, VFS, gestione blocchi liberi (con bitmap e con lista concatenata) | |
21 | * | Altri aspetti tecnici sui file-system: quote, controlli di consistenza, Log-structured FS (LFS), journaling, cache del disco, deframmentazione | |
22 | Accenni sui file-system storici e contemporanei: FAT-[12,16,32,64], NTFS, ext-[2,3,4], BTRFS | ||
23 | * | Scheduling del disco e relativi algoritmi: FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK | |
24 | * | Sistemi RAID: principi di base, RAID-[0,1,2,3,4,5] | |
25 | Memorie flash, dischi a stato solido (SSD) e implicazioni sui file system | ||
26 | Laboratorio: | ||
27 | Tutorial sull'uso della shell UNIX | ||
28 | * | L'uso delle chiamate di sistema | |
29 | * | Gestione dell'I/O su file e chiamate di servizio relative al file-system e alla mappatura dei file in memoria | |
30 | * | Gestione dei processi: creazione, coordinamento, esecuzione di comandi esterni | |
31 | * | Chiamate per la comunicazione tra processi tramite pipe e FIFO | |
32 | * | Chiamate per la comunicazione tra processi tramite messaggi | |
33 | * | Chiamate per la gestione della memoria condivisa tra i processi | |
34 | * | Chiamate per la gestione dei semafori | |
35 | * | Segnali sui sistemi UNIX |
N.B. La conoscenza degli argomenti contrassegnati con l'asterisco è condizione necessaria ma non sufficiente per il superamento dell'esame. Rispondere in maniera sufficiente o anche più che sufficiente alle domande su tali argomenti non assicura, pertanto, il superamento dell'esame.
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame prevede:
- una prova scritta di teoria: si tratta di un questionario, con risposte a scelta multipla e/o aperte, su argomenti relativi alla 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;
- un colloquio orale obbligatorio su tutto il programma (teoria e laboratorio).
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, tipicamente con soluzione, svolte fino ad oggi.