- Docente: Alessandro Ricci
- Crediti formativi: 9
- SSD: ING-INF/05
- Lingua di insegnamento: Italiano
- Moduli: Alessandro Ricci (Modulo 1) Stefano Mariani (Modulo 2)
- Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2)
- Campus: Cesena
- Corso: Laurea Magistrale in Ingegneria informatica (cod. 8200)
Conoscenze e abilità da conseguire
Al termine del corso lo studente: - possiede conoscenze di base sulla teoria, modelli e linguaggi per lo sviluppo di sistemi software concorrenti e distribuiti e sulle tecniche per la verifica di tali sistemi; - conosce in modo approfondito le problematiche fondamentali della programmazione concorrente e della costruzione di sistemi concorrenti, in particolare aspetti di interazione e coordinazione e i meccanismi, le tecniche e le soluzioni architetturali di riferimento per la loro risoluzione; - conosce i principali modelli di interazione (comunicazione, coordinazione) utilizzati nella programmazione distribuita; - è in grado di individuare nell'analisi di problemi gli aspetti relativi alla concorrenza e di formulare relative soluzioni architetturali e algoritmiche; - è in grado di sviluppare programmi (sistemi) concorrenti e distribuiti utilizzando le tecnologie correnti; - possiede conoscenze di base circa la programmazione di sistemi reattivi e real-time.
Contenuti
Prima parte: Concetti fondamentali e basi di teoria
- Programmazione concorrente: concetti fondamentali
- Sezioni critiche
- Verifica di programmi concorrenti
- Coordinazione fra processi - semafori
- Coordinazione fra processi - monitor
Seconda parte: Aspetti di progettazione e sviluppo di sistemi software concorrenti
- Modelli, architetture e pattern per la progettazione di sistemi software concorrenti
- Formalismi visuali
- Macchine e linguaggi concorrenti
- Performance e scalabilità
- Testing di sistemi software concorrenti
Terza parte: Programmazione distribuita
- Elementi fondamentali di programmazione distribuita
- Modelli di comunicazione basata su scambio di messaggi diretto, modello ad attori
- Modelli di comunicazione e coordinazione basata su spazi di tuple
- Algoritmi distribuiti
- Approfondimento: architetture orientate ai servizi (SOA) e Web Services
Sesta parte: Sistemi concorrenti reattivi e real-time
- Elementi introduttivi
- Scheduling
- Linguaggi di programmazione real-time: Approfondimento su Real-Time Java
Nella parte pratica verrà affrontata la progettazione e sviluppo di programmi toccando mano a mano i vari aspetti visti nella teoria, utilizzando Java come linguaggio di riferimento. Per la parte di programmazione distribuita, si passeranno in rassegna e utilizzeranno middleware di tipo diverso (RPC/object oriented, message-oriented, space-based, Web Services).
Testi/Bibliografia
Libro adottato come riferimento per il corso:
- "Principles of concurrent and distributed programming", Ben-Ari, Addison-Wesley
- "Java - Concurrency in Practice", Goetz et al., Addison-Wesley
- "Multithreaded, Parallel and Distributed Programming", Andrews, Addison-Wesley
- "Concurrency - State models and Java programs", Jeff Magee and Jeff Kramer. Wiley
- "Distributed Systems: An Algorithmic Approach", Gosh, Chapman & Hall/CRC
- "Patterns for Parallel Programming", Matson et al.,
Addison-Wesley
Metodi didattici
Dei nove crediti del corso, sei crediti sono dedicati alla teoria
ed esercizi in aula (60 ore) e tre alla pratica in laboratorio (30
ore).
Modalità di verifica e valutazione dell'apprendimento
L'esame finale prevede due parti:
- una prova scritta, con esercizi e domande aperte di teoria
- una prova pratica e relativa discussione. La prova concerne la
progettazione e sviluppo di programma concorrente (con una
parte distribuita) - a partire da un problema a scelta fra alcuni
descritti durante il corso - da svolgersi a casa, eventualmente in
gruppo (max 3 persone).
Strumenti a supporto della didattica
- Note delle lezioni, scaricabili dal sito del corso
- Laboratorio di informatica, per la parte pratica
- Articoli tratti dalla letteratura scientifica
- Strumenti e-learning forniti dal sito (moodle) del corso
Link ad altre eventuali informazioni
Orario di ricevimento
Consulta il sito web di Alessandro Ricci
Consulta il sito web di Stefano Mariani