Lezioni frontali in aula su argomenti di teoria e su sviluppo codice per la parte di laboratorio. Il corso può prevedere dei seminari tenuti da esperti esterni su argomenti correlati e d'attualità.
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.
requisiti: basi di programmazione, conoscenza dell'architettura di un calcolatore
propedeuticità: Architettura degli Elaboratori, Programmazione 1
Frequenza delle lezioni non obbligatoria ma fortemente consigliata per garantire un idoneo grado di comprensione degli argomenti proposti.
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).
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
Su Studium
Argomenti | Riferimenti testi | |
1 | Teoria: | |
2 | Introduzione al concetto di sistema operativo | cap.1 di [TB], cap.1 di [SGG] |
3 | Richiami sull'architettura degli elaboratori | cap.1 di [TB], cap.1 di [SGG] |
4 | Struttura di un sistema operativo | cap.1 di [TB], cap.2 di [SGG] |
5 | I processi: definizione, multiprogrammazione, stati e transizioni | cap.2 di [TB], cap.3,4 di [SGG] |
6 | I thread: definizione, modelli utilizzabili; programmazione multicore | cap.2 di [TB], cap.4 di [SGG] |
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 | cap.2 di [TB], cap.6 di [SGG] |
8 | Problema dei 5 filosofi e dei lettori-scrittori (soluzioni basate su semafori e monitor) | cap.2 di [TB], cap.6 di [SGG] |
9 | Scheduling: scheduler e dispatcher | cap.2 di [TB], cap.5 di [SGG] |
10 | Algoritmi di scheduling: progettazione, FCFS, SJF, SRTN, RR, a priorità, con code multiple, SPN, garantito, a lotteria, fair-share | cap.2 di [TB], cap.5 di [SGG] |
11 | Scheduling dei thread e su sistemi multi-processore | cap.2 di [TB], cap.5 di [SGG] |
12 | Scheduling su Windows 8 e Linux (task, O(1) e CFS) | cap.10,11 di [TB], cap.21,22 di [SGG] |
13 | Gestione della memoria per la multi-programmazione: swapping, rilocazione, gestione dello spazio libero | cap.3 di [TB], cap.8 di [SGG] |
14 | Memoria virtuale: paginazione, tabella delle pagine, uso di memoria associativa, varianti multi-livello, tabella delle pagine invertita, conseguenze sulla cache | cap.3 di [TB], cap.8 di [SGG] |
15 | Algoritmi di sostituzione delle pagine: progettazione, ottimale, NRU, FIFO, seconda chance, clock, LRU, NFU, aging; anomalia di Belady | cap.3 di [TB], cap.9 di [SGG] |
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 memoria del kernel | cap.3 di [TB], cap.9 di [SGG] |
17 | Segmentazione | cap.3 di [TB], cap.8 di [SGG] |
18 | Gestione della memoria su Linux | cap.10 di [TB], cap.8 di [SGG] |
19 | File-system: astrazione, file, directory | cap.4 di [TB], cap.10 di [SGG] |
20 | 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) | cap.4 di [TB], cap.11 di [SGG] |
21 | Altri aspetti tecnici sui file-system: quote, controlli di consistenza, Log-structured FS (LFS), journaling, cache del disco, deframmentazione | cap.4 di [TB], cap.11 di [SGG] |
22 | Accenni sui file-system storici e contemporanei: FAT-[12,16,32,64], NTFS, ext-[2,3,4], BTRFS | cap.4,10,11 di [TB], cap.21,22 di [SGG] |
23 | Scheduling del disco e relativi algoritmi: FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK | cap.5 di [TB], cap.12 di [SGG] |
24 | Sistemi RAID: principi di base, RAID-[0,1,2,3,4,5] | cap.5 di [TB], cap.12 di [SGG] |
25 | Memorie flash, dischi a stato solido (SSD) e implicazioni sui file system | risorse esterne |
26 | Laboratorio: | risorse esterne, man page |
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 |
L'esame prevede:
Nota: la verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
Sulla pagina del corso sono disponibili: