Nome insegnamento: Sistemi Operativi Articolazione in moduli: No Settore Scientifico Disciplinare: ING-INF/05 Docente responsabile: Paolo Trunfio 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, I 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 del 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; 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 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 a cui 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: