Nome insegnamento: Sistemi Operativi
Articolazione in moduli: No
Settore Scientifico Disciplinare: ING-INF/05
Docente responsabile:
Domenico Talia
Crediti formativi universitari: 9
Numero ore lezioni: 57
Numero ore riservate attività didattiche assistite: 84 Numero ore esercitazioni: 27
Numero ore attività di laboratorio: 0
Tipologia di attività formativa (TAF): Attività Caratterizzante
Lingua di insegnamento: Italiano
Anno di corso e Periodo didattico di erogazione: II anno, II semestre
Insegnamento Propedeutico: Fondamenti di Informatica
Risultati d’apprendimento previsti e competenze da acquisire:
Il corso ha lo scopo di introdurre i principi di funzionamento e di progettazione dei moderni sistemi
operativi, approfondendo in particolare i meccanismi di gestione, scheduling e sincronizzazione dei
processi, di gestione delle situazioni di stallo, di organizzazione e gestione della memoria centrale e della
memoria virtuale, di gestione e implementazione del file system, di gestione della memoria secondaria e
terziaria, di protezione e di sicurezza, e di politiche in sistemi a orientamento specifico quali i sistemi realtime e i sistemi multimediali. Inoltre, il corso introduce alla progettazione di programmi concorrenti
multi-threaded utilizzando il linguaggio Java e le relative primitive e librerie.
Competenze da acquisire:




comprensione dei principi dei sistemi operativi e del loro funzionamento;
comprensione dei meccanismi di base utilizzati dai diversi componenti di un sistema operativo;
comprensione dei meccanismi della programmazione concorrente;
abilità a progettare algoritmi concorrenti ed implementare sistemi software multi-threaded in Java.
Argomenti delle lezioni:
Concetti introduttivi
Definizione di sistema operativo; Struttura del sistema operativo; Attività del sistema operativo; Gestione
dei processi; Gestione della memoria centrale; Gestione della memoria di massa; Protezione e sicurezza;
Sistemi distribuiti; Sistemi a orientamento specifico.
Strutture dei sistemi operativi
Servizi di un sistema operativo; Interfaccia con l’utente del sistema operativo; Chiamate di sistema;
Categorie di chiamate di sistema; Programmi di sistema; Progettazione e realizzazione di un sistema
operativo; Struttura del sistema operativo; Macchine virtuali; Debugging dei sistemi operativi;
Generazione di sistemi operativi; Avvio del sistema.
Processi
Concetto di processo; Scheduling dei processi; Operazioni sui processi; Comunicazione tra processi;
Esempi di sistemi per la IPC; Comunicazione nei sistemi client-server.
Thread
Concetto di thread; Modelli di programmazione multithread; Librerie dei thread; Thread in Java.
Scheduling della CPU
Concetti fondamentali; Criteri di scheduling; Algoritmi di scheduling; Scheduling dei thread; Scheduling
per sistemi multiprocessore; Esempi di scheduling nei sistemi operativi; Valutazione degli algoritmi.
Sincronizzazione dei processi
Race Condition; Problema della sezione critica; Soluzione di Peterson; Semafori; Problemi tipici di
sincronizzazione; Monitor; Esempi di sincronizzazione.
Stallo dei processi (deadlock)
Modello del sistema; Caratterizzazione delle situazioni di stallo; Metodi per la gestione delle situazioni di
stallo; Prevenire le situazioni di stallo; Evitare le situazioni di stallo; Rilevamento delle situazioni di stallo;
Ripristino da situazioni di stallo.
Memoria centrale
Avvicendamento dei processi (swapping); Allocazione contigua della memoria; Paginazione;
Segmentazione; Segmentazione con Paginazione; Un esempio: Pentium Intel.
Memoria virtuale
Paginazione su richiesta; Sostituzione delle pagine; Allocazione dei frame; Paginazione degenere
(thrashing); Allocazione di memoria del kernel; Esempi tra i sistemi operativi.
Interfaccia del file system
Concetto di file; Metodi d’accesso; Struttura della directory e del disco; Montaggio di un file system;
Condivisione di file; Protezione.
Implementazione del file system
Struttura del file system; Realizzazione del file system; Realizzazione delle directory; Metodi di
allocazione; Gestione dello spazio libero; Efficienza e prestazioni.
Memoria secondaria e terziaria
Struttura dei dispositivi di memorizzazione; Struttura dei dischi; Connessione dei dischi; Scheduling del
disco; Gestione dell’unità a disco; Gestione dell’area d’avvicendamento; Strutture RAID; Realizzazione
della memoria stabile; Strutture per la memorizzazione terziaria.
Protezione
Scopi della protezione; Princìpi di protezione; Domìni di protezione; Matrice d’accesso; Realizzazione
della matrice d’accesso.
Sicurezza
Problema della sicurezza; Minacce per i programmi; Minacce ai sistemi e alle reti; Crittografia come
strumento per la sicurezza; Autenticazione degli utenti; Realizzazione di misure di sicurezza; Barriere di
sicurezza a protezione di sistemi e reti; Classificazione della sicurezza dei sistemi di calcolo.
Sistemi real-time
Definizione di soft- e hard- real time; Caratteristiche dei kernel real-time; Realizzazione dei sistemi
operativi real-time; Scheduling real-time della CPU.
Sistemi multimediali
Definizione di Sistema Multimediale; Compressione; Requisiti dei kernel multimediali; Scheduling della
CPU; Scheduling del disco; Organizzazione della rete.
Linux
Storia; Princìpi di progettazione; Moduli del kernel; Gestione dei processi; Scheduling; Gestione della
memoria; File system; Input e Output; Comunicazione fra processi; Strutture di rete; Sicurezza.
Argomenti delle esercitazioni:






















Thread in Java, priorità, dichiarazione, costruttori e metodi
Sospensione dei thread tramite la classe TimeUnit di Java
Ciclo di vita e scheduling dei thread
Differenza tra programmi sequenziali e programmi threaded
Meccanismi per imporre la sequenzialità a programmi threaded in Java
Interruzione di un thread in Java
Thread safety
Sezioni critiche
Interleaving
Race condition
La classe AtomicInteger di Java
I semafori
Mutua esclusione e sincronizzazione
I semafori in Java
La classe Java TimedSemaphore della libreria Apache Commons
La fairness e il barging
Deadlock, starvation e livelock
La tecnica dell'aging
I monitor
Politiche di risveglio dalle condition (Hansen, Hoare)
I monitor in Java, espliciti (Lock e Condition) ed impliciti (o nativi)
Definizione dei problemi classici di programmazione concorrente e delle loro possibili soluzioni tramite
i semafori ed i monitor: il problema dei lettori-scrittori, il problema del produttore-consumatore, il
problema dei cinque filosofi, il problema del barbiere addormentato e il problema dei fumatori di
sigarette
 Collezioni sincronizzate e concorrenti di Java
Modalità di erogazione della didattica:
Lezioni frontali
Metodi di valutazione:
Esame scritto, seguìto da un esame orale al quale si accede solo in caso di superamento dell’esame
scritto.
Criteri di valutazione dell’apprendimento:
Sarà valutato il grado di acquisizione delle seguenti competenze:
 comprensione dei principi dei sistemi operativi e del loro funzionamento;
 comprensione dei meccanismi di base utilizzati dai diversi componenti del sistema operativo;
 comprensione dei meccanismi della programmazione concorrente;
 abilità a progettare algoritmi concorrenti ed implementare sistemi software multi-threaded in Java.
Criteri di misurazione dell’apprendimento:
Voto finale
Criteri di attribuzione del voto finale:
Si terrà conto dei risultati dell’esame scritto e dell’esame orale.
Testi di riferimento e materiale didattico utilizzato e consigliato:
Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, Sistemi operativi Concetti ed esempi - 8/Ed.
Pearson 2009
Orario e aule lezioni:
http://www.dimes.unical.it/index.php/didattica
Calendario prove valutazione: