34762 - PROGRAMMAZIONE CONCORRENTE E DISTRIBUITA LM

Anno Accademico 2011/2012

  • 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
per la parte pratica:
  • "Java - Concurrency in Practice", Goetz et al., Addison-Wesley
Inoltre verranno integrati contenuti tratti da altri testi, quali:
  • "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).
Come peso sul voto finale, all'incirca: 50% scritto, 50% pratica


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

http://www.moodle.unibo.it

Orario di ricevimento

Consulta il sito web di Alessandro Ricci

Consulta il sito web di Stefano Mariani