Introduzione alle problematiche e alle metodologie di programmazione per lo sviluppo di sistemi concorrenti e distribuiti. I contenuti sono ispirati alle seguenti tematiche del Computer Science Curriculum dell'ACM/IEEE (link):
OS/Concurrency, Scheduling and Dispatch PL/Event-Driven and Reactive Programming, Concurrency and Parallelism PD/Communication and Coordination, Distributed Systems PBD/Mobile Platforms
Comprendere i problemi e le metodologie necessarie allo sviluppo di programmi concorrenti ed asincroni attraverso lo studio dei principi di cooperazione e sincronizzazione tra processi con memoria condivisa e tra processi distribuiti. Esercitazioni in laboratorio sull'uso di librerie per concorrenza e distribuzione in diversi linguaggi/piattaforme.
Tradizionale: Lezioni in classe ed esercitazioni guidate in laboratorio.
Teoria
Programmazione multithread
Esempi di costrutti e programmi (pseudo codice)
Problema della sezione critica (PSC) e data race: Mutua esclusione, starvation-freedom, deadlock-freedom
Soluzioni software a PSC: Peterson's algorithm, Lamport's algorithm
Spinlock, Semafori, Mutex, Monitor, Barriere
Memory models: Strict and Sequential Consistency, Relaxed Memory Models: Weak Consistency
Lock-free programming: CAS, Test and Set Lock, Swap and Compare
Strutture dati concorrenti
Laboratorio
Programmazione concorrente: Thread, Pool, Synchronized, wait e notify, Future, Callback
Programmazione distribuita e di rete: Socket, RPC,RMI, Servizi web
Programmazione in Android:
LABO
Programmazione multithreaded in C, Java e Android
Progetto finale
Applicazione client-server con server concorrente e client Java e Android
GIORGIO DELZANNO (Presidente)
GIOVANNI CHIOLA
MARINA RIBAUDO
25 settembre 2017
PROGRAMMAZIONE CONCORRENTE E ALGORITMI DISTRIBUITI
Prova scritta e progetto finale
Correzione e discussione dello scritto e discussione progetto