CODICE 80302 ANNO ACCADEMICO 2022/2023 CFU 6 cfu anno 3 INFORMATICA 8759 (L-31) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE INF/01 LINGUA Italiano SEDE GENOVA PERIODO 2° Semestre MATERIALE DIDATTICO AULAWEB PRESENTAZIONE Introduzione alla programmazione multithreaded, concorrente, ad eventi e distribuita. Nel corso vengono introdotti concetti di base legati ad architetture multicore, multithreading nei sistemi operativi e nella programmazione algoritmi ed architetture di base per sistemi distribuiti. Il corso ha una parte di teoria in classe e una serie di laboratori (Sonic Pi, Pthread, Java Concorrente) e puntatori ad altri framework (Kotlin, Java per Android, C++,...). OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI Comprendere i problemi e le metodologie necessarie allo sviluppo di programmi concorrenti e asincroni attraverso lo studio dei principi di comunicazione e sincronizzazione tra processi con memoria condivisa e tra processi distribuiti su linguaggi e piattaforme differenti. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Le lezioni di teoria sono mirate ad acquisire conoscenza sulle problematiche della programmazione concorrente che richiede conoscenza di aspetti di architetture, sistemi operativi e software e degli algoritmi distribuiti. La parte di teoria inoltre mostra diversi livelli di astrazione a livello di costrutti di programmazione attraverso il passaggio da libreri a basso livello in C a libreria ad alto livello in Java e linguaggi simili (Android, Kotlin). I laboratori sono mirati a costruire passo per passo un middleware distribuito con possibile accesso concorrente a strutture dati delle singole componenti. Il sistema risultante si può adattare per costruire un layer applicativo multiutente (es gioco multiplayer, remote controller, tracking, architetture pub/sub, ecc) PREREQUISITI Programmazione Linguaggio Java Sistemi Operativi Concetti di Base di Reti di Calcolatori MODALITA' DIDATTICHE Lezioni frontali di teoria Esercitazioni in classe Esercitazioni di laboratorio mirate alla costruzione incrementale di un server multithread con consegne delle soluzioni durante l'anno PROGRAMMA/CONTENUTO Concorrenza nel SO & MultiThreading Introduzione alla Programmazione Concorrente Introduzione alla concorrenza con esperienza di live coding Introduzione pratica alla concorrenza - Schemi di sincronizzazione lock-free (con attenzione a problemi legati ad architetture con relaxed memory) - Librerie di sincronizzazione standard come mutex e barriere Memory models e Consistenza Sequenziale Pthread, semafori, monitor e barriere di sincronizzazione Concurrent Java -Thread come Oggetti, Primitive di base di sincronizzazione -Librerie High Level Concurrency -Introduzione a Eclipse e Debugging di Thread con Eclipse -Thread e Sincronizzazione in Java -Monitor e Semafori -Produttore e consumatore at work: crivello concorrente Metodologie e pattern in Concurrent Java GUI, Eventi e Concorrenza -Swing, Javafx e Concorrenza -Async Task in Java for Android -Async Task in Kotlin Introduzione ad Algoritmi Distribuiti Distributed Programming in Java -Connection Pool con Caching delle Connessioni -Server e Client con Socket Java TESTI/BIBLIOGRAFIA Lucidi e note del docente messe a disposizione su Aulaweb Materiale online (documentazione Java, Android, Kotlin) S.Crafa, Oggetti, Concorrenza, Distribuzione. Programmare a diversi livelli di astrazione. Esculapio. M. Herlihy and N. Shavit. The Art of Multiprocessing Programming. MK DOCENTI E COMMISSIONI ANGELO FERRANDO Commissione d'esame ANGELO FERRANDO (Presidente) GIORGIO DELZANNO (Presidente Supplente) LEZIONI INIZIO LEZIONI Febbraio 2021 Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME L'esame consiste in un quiz online con 10 domande aperte e 2 chiuse e una presentazione (in presenza o remoto) dei laboratori consegnati durante l'anno MODALITA' DI ACCERTAMENTO La validazione dei quiz sarà automatica per le domande chiuse e guidata dai docenti per domande aperte e laboratori. Tale validazione è mirata a valutare l'apprendimento da parte dello studente di concetti e strumenti descritti nel corso. Calendario appelli Data appello Orario Luogo Tipologia Note 26/06/2023 09:00 GENOVA Scritto 28/07/2023 09:00 GENOVA Scritto 14/09/2023 09:00 GENOVA Scritto 11/01/2024 09:00 GENOVA Scritto 08/02/2024 09:00 GENOVA Scritto