SISTEMI OPERATIVI E IN TEMPO REALE
cod. 1002540

Anno accademico 2012/13
1° anno di corso - Secondo semestre
Docente
Settore scientifico disciplinare
Sistemi di elaborazione delle informazioni (ING-INF/05)
Field
Ingegneria informatica
Tipologia attività formativa
Caratterizzante
63 ore
di attività frontali
9 crediti
sede:
insegnamento
in - - -

Obiettivi formativi

Finalità
Il corso si propone di presentare le architetture e le funzionalità dei moderni sistemi operativi, introdurre i concetti principali dei sistemi concorrenti, e rendere lo studente in grado di programmare applicazioni multiprocesso e multithread in ambiente C/C++/POSIX. Il corso presenta inoltre i principi, le metodologie, ed alcuni significativi strumenti per la progettazione di sistemi di elaborazione operanti in tempo reale e per la realizzazione di software di controllo di sistemi embedded ed applicazioni industriali. Al termine del corso lo studente disporrà di metodologie e strumenti appropriati per affrontare le problematiche della programmazione di sistema, concorrente e in tempo reale in molteplici contesti tecnologici ed applicativi.

Prerequisiti

Conoscenza degli elementi di base dei sistemi operativi. Conoscenza della programmazione in linguaggio C/C++.

Contenuti dell'insegnamento

Programma

Architetture dei sistemi operativi
Evoluzione, ruolo e funzioni del sistema operativo. Multiprogrammazione. Processi, thread e spazi di indirizzamento. Protezione. Commutazione di thread e di processi. Sistemi a macchine virtuali.

Componenti dei sistemi operativi
Gestione dei processi e dei thread. Scheduling della CPU. Gestione della memoria. Memoria Virtuale. Gestione dell'I/O. Gestione dei file. Sicurezza. Tecniche di prevenzione e gestione del blocco critico.

Programmazione concorrente nel modello a memoria condivisa
Mutua esclusione e primitive di sincronizzazione. Gestione di risorse mediante semafori. Regioni critiche condizionali. Monitor. Supporti per la programmazione concorrente in Java.

Programmazione concorrente nel modello a memoria locale
Primitive send e receive. Remote procedure call. Comandi con guardia.

Sistemi distribuiti
Modello cliente-servitore. RPC in ambiente distribuito. Sincronizzazione, mutua esclusione e coordinamento distribuiti.

Sistemi in tempo reale
Sistemi embedded. Sistemi di elaborazione operanti con vincoli temporali. Tipologie dei sistemi in tempo reale e parametri caratteristici. Modello di riferimento per i sistemi di elaborazione in tempo reale.

Schedulazione in tempo reale
Scheduling di task aperiodici. Scheduling di task periodici mediante executive ciclico. Scheduling di task periodici basato su priorità. Algoritmi di scheduling Rate Monotonic ed Earliest Deadline First. Scheduling congiunto di task periodici, aperiodici e sporadici. Protocolli di accesso a risorse condivise. Gestione della inversione di priorità.

Programmazione di sistemi multithread e in tempo reale
Funzionalità dei moderni sistemi operativi a supporto dell'elaborazione in tempo reale. Supporti per il multithreading in Linux. Lo standard POSIX. Thread e processi. Sincronizzazione tra thread. Segnali. Meccanismi di IPC. Scheduling. Gestione del tempo. Gestione della memoria. Gestione dell'I/O. Pattern per la programmazione di sistemi in tempo reale. Sistemi operativi real-time dedicati. Middleware per sistemi in tempo reale distribuiti.


Attività d'esercitazione
Esercitazioni in laboratorio relative alla programmazione di sistema in C/C++ nei sistemi operativi UNIX e Linux.
Esercitazioni in laboratorio con uso dell'API POSIX per la programmazione multithread e real-time in ambiente UNIX e Linux.

Programma esteso

__Sistemi operativi e in tempo reale: Programma dettagliato del corso__

Architetture dei sistemi operativi
Evoluzione, ruolo e funzioni del sistema operativo. Multiprogrammazione. Processi, thread e spazi di indirizzamento. Protezione. Commutazione di thread e di processi. Sistemi a macchine virtuali.

Componenti dei sistemi operativi
Gestione dei processi e dei thread. Scheduling della CPU. Gestione della memoria. Memoria Virtuale. Gestione dell'I/O. Gestione dei file. Sicurezza. Tecniche di prevenzione e gestione del blocco critico.

Programmazione concorrente nel modello a memoria condivisa
Mutua esclusione e primitive di sincronizzazione. Gestione di risorse mediante semafori. Regioni critiche condizionali. Monitor. Supporti per la programmazione concorrente in Java.

Programmazione concorrente nel modello a memoria locale
Primitive send e receive. Remote procedure call. Comandi con guardia.

Sistemi distribuiti
Modello cliente-servitore. RPC in ambiente distribuito. Sincronizzazione, mutua esclusione e coordinamento distribuiti.

Sistemi in tempo reale
Sistemi embedded. Sistemi di elaborazione operanti con vincoli temporali. Tipologie dei sistemi in tempo reale e parametri caratteristici. Modello di riferimento per i sistemi di elaborazione in tempo reale.

Schedulazione in tempo reale
Scheduling di task aperiodici. Scheduling di task periodici mediante executive ciclico. Scheduling di task periodici basato su priorità. Algoritmi di scheduling Rate Monotonic ed Earliest Deadline First. Scheduling congiunto di task periodici, aperiodici e sporadici. Protocolli di accesso a risorse condivise. Gestione della inversione di priorità.

Programmazione di sistemi multithread e in tempo reale
Funzionalità dei moderni sistemi operativi a supporto dell'elaborazione in tempo reale. Supporti per il multithreading in Linux. La API standard POSIX. Thread e processi. Sincronizzazione tra thread. Segnali. Meccanismi di IPC. Scheduling. Gestione del tempo. Gestione della memoria. Gestione dell'I/O. Pattern per la programmazione di sistemi in tempo reale. Sistemi operativi real-time dedicati. Middleware per sistemi in tempo reale distribuiti.

Attività d'esercitazione
Esercitazioni in laboratorio relative alla programmazione di sistema multiprocesso in C/C++ nei sistemi operativi UNIX e Linux.
Esercitazioni in laboratorio con uso dell'API POSIX per la programmazione multithread e real-time in ambiente Linux.

Bibliografia

Sono rese disponibili sul sito del corso, lezione per lezione, le diapositive utilizzate in aula. I diversi aspetti affrontati nel corso sono trattati organicamente nei testi indicati di seguito.

A. Silberschatz, P.B. Galvin, G. Gagne, “Sistemi operativi”, settima edizione, Pearson Education Italia, 2006.
P. Ancilotti, M. Boari, “Programmazione concorrente e distribuita”, McGraw-Hill, 2007
J.W.S. Liu, Real-Time Systems, Prentice-Hall, 2000.
D. Butenhof, Programming with POSIX Threads, Addison-Wesley, 1997.

Metodi didattici

Lezioni in aula con proiezione di diapositive, e una significativa attività di laboratorio (obbligatoria) su programmazione multiprocesso, concorrente, multithread e real-time.
Sono proposte prove intermedie e assegnamenti pratici da svolgere a casa per mantenere gli studenti al passo ed esonerarli da parti dell'esame.

Modalità verifica apprendimento

L'apprendimento viene verificato mediante una serie di prove pratiche, scritte e orali. L'esame è superato solo quando tutte le prove sono state svolte con esito positivo.

1)Prova pratica di programmazione multiprocesso (preferibilmente da assumere durante il corso);
2) Assegnamento pratico di programmazione multithread e real-time mediante PThreads;
3) Prova scritta di teoria della schedulazione real-time (seconda prova intermedia);
4) Prova scritta o pratica di programmazione concorrente;
5) Prova orale finale.

Altre informazioni

Portale per il sito del corso: http://lea.unipr.it

Il corso comprende almeno 72 ore di lezioni in aula ed esercitazioni guidate.