Obiettivi formativi
Il corso si propone di far conoscere allo studente le architetture e le funzionalità dei moderni sistemi operativi e i concetti principali dei sistemi concorrenti e in tempo reale, e in particolare:
- componenti dei sistemi operativi, processi, thread, spazi di indirizzamento,
- modalità di gestione di processi e thread e di assegnazione di risorse del sistema,
- meccanismi e strumenti per la sincronizzazione e la programmazione concorrente,
- caratteristiche dei sistemi in tempo reale e relativi algoritmi di scheduling.
Al termine del corso lo studente sarà in grado di applicare direttamente le conoscenze acquisite nei seguenti ambiti:
- programmazione di applicazioni di sistema, multiprocesso e cliente-servitore in linguaggio C/C++ nei sistemi operativi UNIX e Linux,
- programmazione di applicazioni multithread mediante l'API POSIX in Linux,
- progettazione e programmazione di applicazioni multithread in tempo reale mediante l'API POSIX in Linux.
Prerequisiti
Conoscenza di base degli elementi dei sistemi operativi. Conoscenza generale della programmazione e capacità pratica di programmazione in linguaggio C/C++.
Contenuti dell'insegnamento
Sistemi operativi e in tempo reale: Programma del corso
Architetture dei sistemi operativi
Componenti dei sistemi operativi
Programmazione concorrente nel modello a memoria condivisa
Programmazione concorrente nel modello a memoria locale
Sistemi di distribuiti e cliente-servitore
Sistemi in tempo reale
Schedulazione in tempo reale
Programmazione di sistemi multiprocesso in C/C++ nei sistemi operativi UNIX e Linux.
Programmazione multithread e in tempo reale con l'API POSIX in ambiente 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
Agli studenti frequentanti sono rese disponibili sul sito del corso, lezione per lezione, le diapositive utilizzate in aula. I diversi argomenti affrontati nel corso sono trattati organicamente nei testi indicati di seguito:
A. Silberschatz, P.B. Galvin, G. Gagne, “Sistemi operativi”, settima edizione o successiva, Pearson Education Italia, 2006 (o successivo).
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, integrata da una significativa attività guidata di laboratorio (obbligatoria) su programmazione multiprocesso, concorrente, multithread e real-time.
Il corso si articola in circa 58 ore di lezioni in aula e 22 ore di esercitazioni assistite in laboratorio. La frequenza delle esercitazioni di laboratorio è obbligatoria.
Sono proposte prove intermedie ed assegnamenti pratici o teorici 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, in parte proposte come prove intermedie durante l'erogazione del corso. 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 come prima prova intermedia);
2) Assegnamento pratico di programmazione multithread e real-time mediante Pthreads (proposto durante le esercitazioni obbligatorie);
3) Prova scritta di teoria della schedulazione real-time (seconda prova intermedia);
4) Prova scritta o pratica di programmazione concorrente;
5) Prova orale finale.
La prova orale deve essere la prova conclusiva dell'esame.
Per chi non sostiene o non supera le prove in itinere, le prove scritte n. 3) e 4) possono sostenute anche assieme negli appelli ufficiali. Ulteriori prove, inoltre, consentono di sostenere le prove pratiche n. 1) e 2) per chi non le ha superate durante il corso.
La prova pratica n. 1) consente di verificare l'apprendimento delle competenze applicative di capacità di programmazione di sistema e di progettazione di applicazioni multiprocesso e cliente-servitore.
La prova pratica n. 2) consente di verificare l'apprendimento delle competenze applicative di progettazione di applicazioni multi-thread e in tempo reale.
La prova scritta n. 3) consente di verificare le conoscenze acquisite sui sistemi in tempo reale e i relativi algoritmi di schedulazione.
La prova scritta o pratica n. 4) consente di verificare le conoscenze acquisite sull'uso delle tecniche di programmazione concorrente.
La prova orale n. 5) consente di verificare complessivamente le conoscenze acquisite sui componenti dei sistemi operativi e sui fondamenti della programmazione concorrente.
Altre informazioni
Portale per il sito del corso: http://elly.dii.unipr.it
Il materiale didattico e di supporto è reso disponibile sul sito del corso lezione per lezione agli studenti frequentanti.
Obiettivi agenda 2030 per lo sviluppo sostenibile
- - -