Questa è la pagina archiviata del corso di Sistemi Operativi (A-L) per Informatica (primo livello) per l’a.a. 2019-2020. La pagina non è più aggiornata.
Informazioni generali
CFU: 9
ore: 72
anno: 2°
semestre: 2°
aula: 2 (A-L), 24 (M-Z)
orario: 15-18
giorni: lunedì – mercoledì
inizio lezioni: 2 Marzo 2020
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
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: FAT-[12,16,32,64], ext-[2,3,4], BTRFS, 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
I moderni sistemi operativi (quarta edizione)
autori: Andrew S. Tanenbaum, Herbert Bos
casa editrice: Pearson
anno di pubblicazione: 2016
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.
- Teoria:
- Laboratorio:
- Shell e comandi UNIX (tutorial opzionale)
- Programmazione in ambienti UNIX
Esempi di laboratorio visti a lezione (archivio unico):
- cat.c
- concfixed.c
- concproblem.c
- copy.c
- copystream.c
- count.c
- creat.c
- exec.c
- exec2.c
- fifo.c
- fifo2.c
- fork.c
- fork2.c
- fork3.c
- forkwait.c
- mmapcopy.c
- mmapdouble.c
- mmapread.c
- mmapreverse.c
- move.c
- msgcreate.c
- msgreceive.c
- msgsend.c
- msgtext.c
- multifork.c
- multiforkwait.c
- nanoshell.c
- numprodcons.c
- openclose.c
- pid.c
- pipe.c
- pipe2.c
- printdir.c
- read.c
- redirect.c
- semtext.c
- shmnumbers.c
- shmsemprod2cons.c
- shmsemprodcons.c
- stat.c
Sono anche disponibili alcuni esempi e compiti di laboratorio svolti nell’ambito delle attività di tutoraggio del corso. Tali codici non sono stati revisionati dai docenti del corso.
Esercizi di laboratorio da svolgere (archivio unico):
Compiti di laboratorio passati (archivio unico):
- compito_2015-07-01.pdf
- compito_2015-07-01_soluzione.c
- compito_2015-07-23.pdf
- compito_2015-07-23_soluzione.c
- compito_2015-09-15.pdf
- compito_2015-09-15_soluzione.c
- compito_2015-10-08.pdf
- compito_2016-02-12.pdf
- compito_2016-03-16.pdf
- compito_2016-04-27.pdf
- compito_2016-04-27_soluzione.c
- compito_2016-07-13.pdf
- compito_2016-07-13_soluzione.c
- compito_2016-07-28.pdf
- compito_2016-07-28_soluzione.c
- compito_2016-09-16.pdf
- compito_2016-09-16_soluzione.c
- compito_2016-10-07.pdf
- compito_2016-12-15.pdf
- compito_2017-02-15.pdf
- compito_2017-03-08.pdf
- compito_2017-07-05.pdf
- compito_2017-07-20.pdf
- compito_2017-12-18.pdf
- compito_2018-02-19.pdf
- compito_2018-03-09.pdf
- compito_2018-05-15.pdf
- compito_2018-07-04.pdf
- compito_2018-07-26.pdf
- compito_2018-09-05.pdf
- compito_2018-10-01.pdf
- compito_2018-12-18.pdf
- compito_2019-02-11.pdf
- compito_2019-02-25.pdf
- compito_2019-04-23.pdf
- compito_2019-07-04.pdf
- compito_2019-07-26.pdf
- compito_2019-09-13.pdf
- compito_2019-09-27.pdf
- compito_2020-01-29.pdf
- compito_2020-02-21.pdf
- compito_2020-07-14.pdf
- compito_2020-07-30.pdf
- compito_2020-09-10.pdf
- compito_2020-09-25.pdf
- compito_2020-12-15.pdf
- compito_2021-01-22.pdf
- compito_2021-02-10.pdf
- compito_2021-03-31.pdf
- compito_2021-07-02.pdf
- compito_2021-07-26.pdf
- compito_2021-09-15.pdf
- compito_2021-09-28.pdf
- compito_2021-12-10.pdf
- compito_2022-01-28.pdf
- compito_2022-02-18.pdf
- compito_2022-04-14.pdf
- Lo scheduler Completely Fair Scheduler (CFS) di Linux: articolo
- Il kernel ed il file-system di Mac OS X: kernel, file-system
- I filesystem di Linux: sintesi delle novità in ext4, articolo su ext4, struttura di un fs BTRFS
- Simulatori ed animazioni: OS Sim (OS Concepts Simulator), scheduling CPU (1), scheduling CPU (2), stati di un processo, algoritmo di scheduling FCFS, algoritmo di scheduling SJF, algoritmo di scheduling RR (1), mutua esclusione con semafori (1), mutua esclusione con semafori (2), paginazione, segmentazione, segmentazione paginata, paginazione con TLB, paginazione a due livelli, gestione di un page-fault, algoritmo della seconda chance per la sostituzione delle pagine, scheduling del disco FCFS, scheduling del disco SSTF, scheduling del disco SCAN, Livelli RAID
- Manuale completo sul linguaggio C: Tricky C
- Guida introduttiva al linguaggio C: Appunti di Informatica Libera – Introduzione al linguaggio C
- Guida completa ed avanzata per la programmazione script: Advanced Bash-Scripting Guide
- Guida completa ed avanzata per la programmazione in Linux: GaPiL
- Testo di riferimento per architettura Microsoft Windows: Windows Internals
- Memorie NAND e dischi SSD: articolo
Esame
L’esame finale prevede:
- 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;
- 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).
Le prove devono essere superate secondo la sequenza indicata: è necessario ottenere una sufficienza sulla prova scritta di teoria per poter accedere alla prova pratica di laboratorio; per poter sostenere l’orale è necessario aver collezionato una sufficienza in entrambe le prove precedenti. Il voto finale sarà dato dalla media pesata delle prime due prove (65{96b1e551c0eb6b8642c23002f9641c21addce7adddff4232ab77094dde67ad16} teoria, 35{96b1e551c0eb6b8642c23002f9641c21addce7adddff4232ab77094dde67ad16} laboratorio) e da un aggiustamento relativo alla prova orale (indicativamente di +/- 4 punti a completa discrezione del docente). La valutazione delle prime due prove è espressa in trentesimi e si intende generalmente superata se si ottengono almeno 18/30.
Da Marzo 2020, retroattivamente anche per gli studenti degli anni passati, le prove intermedie superate avranno una scadenza: Maggio 2021. Lo studente, non soddisfatto del voto di una prova, può decidere di ripeterla negli appelli successivi rinunciando contestualmente e a priori alla vecchia valutazione.
Per poter sostenere una qualunque prova in un dato appello è obbligatorio prenotarsi sul portale SmartEdu, indicando le prove da sostenere nel campo note. Si sottolinea che in assenza di tale indicazione, comunque gradita, si assume che si voglia partecipare a tutte le prove e che si sta rinunciando a tutte le precedenti prove già superate. Se ci si prenota per una prova e non ci si presenta, senza avvisare il docente almeno un giorno prima, allora se lo studente si presenterà nell’appello strettamente successivo non riceverà il bonus +2 sulle prove scritte/pratiche (in genere dato per default a tutti e incluso nel voto in trentesimi): tale restrizione decade dall’appello seguente il successivo.
Nella data dell’appello riportata sul calendario esami si terrà la prova di teoria; la prova di laboratorio 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 dei colloqui orali, sarà comunicata successivamente con apposito avviso.