Sistemi operativi (2018/2019)



Codice insegnamento
4S00019
Crediti
12
Coordinatore
Graziano Pravadelli
Settore disciplinare
ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
Lingua di erogazione
Italiano
L'insegnamento è organizzato come segue:
Attività Crediti Periodo Docenti Orario
Teoria 8 I semestre Graziano Pravadelli

Vai all'orario delle lezioni

Laboratorio [Laboratorio 1] 2 II semestre Alessandro Danese

Vai all'orario delle lezioni

Laboratorio [Laboratorio 2] 2 II semestre Alberto Castellini

Vai all'orario delle lezioni

Esercitazioni 2 II semestre Alessandro Danese

Vai all'orario delle lezioni

Obiettivi formativi

Il corso si propone di fornire un'introduzione ai principi e al progetto dei sistemi operativi, con particolare riguardo ai concetti relativi alle architetture software di un sistema operativo, alla gestione e sincronizzazione dei processi e alla gestione delle risorse del sistema di calcolo.
Al termine del corso lo studente avrà acquisito conoscenze e capacità di comprensione relative all'organizzazione interna, al funzionamento e ai servizi di un sistema operativo.
In particolare, lo studente avrà compreso:
- le principali funzionalità di un sistema operativo nei confronti di utenti e programmi applicativi;
- le strategie con cui il sistema operativo gestisce le risorse di un calcolatore;
- le tecniche impiegate per implementare le componenti in cui è suddiviso un sistema operativo.
Inoltre, lo studente sarà in grado di applicare le conoscenze acquisite e avrà adeguate capacità di comprensione per:
- sviluppare programmi con la consapevolezza di come il sistema operativo gestisce i processi che ne derivano;
- sviluppare applicazioni che utilizzano le primitive (chiamate a funzioni di sistema) messe a disposizione dal sistema operativo;
- sviluppare e modificare componenti di un sistema operativo.
Infine, lo studente sarà in grado di:
- valutare autonomamente vantaggi e svantaggi di differenti scelte progettuali nell'ambito dei servizi offerti da un sistema operativo;
- realizzare un progetto laboratoriale di gruppo e presentare i relativi risultati motivando le scelte effettuate con appropriatezza di linguaggio;
- sviluppare le competenze necessarie per proseguire lo studio nell'ambito dei sistemi operativi affrontando tematiche avanzate relative agli scenari dei sistemi distribuiti, real time ed embedded.

Programma

Teoria
---------
* Introduzione: Ruolo del sistema operativo e sua evoluzione. Elementi architetturali. Struttura e funzioni di un sistema operativo.

* Gestione dei Processi: Processi. Stati dei processi. Cambiamento di contesto. Creazione e terminazione di processi. Thread: thread a livello utente e a livello kernel. Cooperazione e comunicazione fra processi: memoria condivisa, messaggi. Comunicazione diretta ed indiretta.

* Scheduling: Modello a ciclo di burst di CPU-I/O. Scheduling a lungo, medio, breve termine. Scheduling con prelazione e cooperativo. Criteri di scheduling. Algoritmi di scheduling: FCFS, SJF, a priorità, HRRN, RR, a code multiple con e senza feedback. Valutazione degli algoritmi: modelli deterministici e probabilistici, simulazione.

* Sincronizzazione fra processi: Coerenza di dati condivisi, operazioni atomiche. Sezioni critiche. Approccio software alla mutua esclusione: algoritmi di Peterson e Dekker, algoritmo del panettiere. Supporto hardware per la mutua esclusione: test and set, swap. Costrutti per sincronizzazione: semafori e monitor. Alcuni problemi tipici di sincronizzazione: produttore/consumatore, lettori/scrittore, problema dei filosofi.

* Deadlock: Condizioni per l'innesco di un deadlock. Rappresentazione dello stato di un sistema con grafi di allocazione. Tecniche di prevenzione, rilevazione e ripristino. Algoritmo del banchiere.

* Gestione della memoria: Memoria primaria. Indirizzamento logico e fisico. Rilocazione, binding degli indirizzi. Swapping. Allocazione contigua della memoria. Frammentazione interna ed esterna. Paginazione. Supporti hardware alla paginazione: TLB. Tabella delle pagine. Paginazione a piu' livelli. Segmentazione. Tabella dei segmenti. Segmentazione con paginazione.

* Memoria Virtuale: Paginazione su richiesta. Gestione di page fault. Algoritmi di sostituzione delle pagine: FIFO, ottimale, LRU, approssimazioni LRU. Buffering di pagine. Allocazione di frame in memoria fisica, allocazione locale o globale. Thrashing. Località dei riferimenti. Modello del working set. Controllo della frequenza di page fault. Blocco di pagine in memoria.

* Memoria secondaria Struttura logica e fisica dei dischi. Tempo di latenza. Scheduling del disco: algoritmi FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK. Gestione della memoria di paginazione. Strutture RAID.

* File System: Concetto di file, attributi e operazioni relative. Tipi di file. Accesso sequenziale e diretto. Concetto di directory. Struttura di directory. Protezioni nell'accesso a file. Attributi e modalità di accesso. Semantica della consistenza. Struttura di un file system. Montaggio di un file system. Metodi di allocazione dello spazio su disco: contiguo, concatenato, indicizzato. Gestione dello spazio libero su disco: tramite vettore di bit, tramite liste. Realizzazione delle directory: liste lineari, tabelle hash.

* Sistema di I/O: Sistemi di Input/Output, Hardware per I/O. Tecniche di I/O: programmato, con interrupt, con DMA. Device driver e interfaccia verso le applicazioni. Servizi del kernel per I/O: scheduling, buffering, caching, spooling.

Laboratorio:
------------
* Programmazione della shell in ambiente Unix/Linux.
* Introduzione alla programmazione di sistema in ambiente Unix/Linux.
* Chiamate di sistema per la gestione dell'I/O.
* Chiamate di sistema per la gestione dei processi.
* Chiamate di sistema e tecniche di comunicazione e sincronizzazione inter-processo (pipe, fifo, code di messaggi, memoria condivisa, semafori, ...).

Modalità d'esame

Per superare l'esame gli studenti dovranno dimostrare di:
- aver compreso i principi alla base del funzionamento di un sistema operativo
- essere in grado di esporre le proprie argomentazioni in modo preciso e organico senza divagazioni
- saper applicare le conoscenze acquisite per risolvere problemi applicativi presentati sotto forma di esercizi, domande e progetti.

Teoria
---------
L'esame della parte di teoria consiste in una prova scritta, contenente domande a risposta multipla, domande a risposta aperta ed esercizi.
E' prevista una prova intermedia a fine Novembre.

Laboratorio
-----------------
L'esame di laboratorio può essere superato in due modi: orale o scritto.

Modalità orale:
Durante il corso lo studente dovrà consegnare alcuni elaborati rispettando le scadenze elencate nel calendario delle lezioni. Quindi, al termine del corso, nella prima settimana di Luglio, lo studente sosterrà una prova orale in cui verranno discussi gli elaborati.
Chi non consegna tutti gli elaborati non può fare l'orale e deve sostenere l'esame come indicato nella modalità "scritto".
E' possibile sostenere la modalità orale solo nella sessione d'esame di Luglio.

Modalità scritto:
L'esame consiste nel risolvere alcuni problemi di programmazione di sistema (tramite programmi C o script di shell) durante uno degli altri appelli.

Voto finale
----------------
Il voto finale si ottiene dalla seguente formula:
Voto = Voto_teoria*0,5 + Voto_laboratorio*0,5.

Testi di riferimento
Attività Autore Titolo Casa editrice Anno ISBN Note
Teoria A. Silberschatz, P.B. Galvin, G. Gagne Sistemi operativi. Concetti ed esempi. (Edizione 9) Pearson 2014 9788865183717
Materiale didattico
Titolo Formato (Lingua, Dimensione, Data pubblicazione)
Materiale didattico plain plain (it, 0 KB, 27/09/18)