ID:
SCV0026
Durata (ore):
72
CFU:
8
SSD:
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
Sede:
Como - Università degli Studi dell'Insubria
Anno:
2024
Dati Generali
Periodo di attività
Secondo Semestre (19/02/2024 - 31/05/2024)
Syllabus
Obiettivi Formativi
Il corso ha lo scopo di rendere gli studenti capaci di programmare sistemi software concorrenti e distribuiti. A tale scopo gli studenti apprenderanno le tecniche di programmazione concorrente, la programmazione distribuita e le relative problematiche.
Al termine del corso, lo studente sarà in grado di
1. Comprendere le caratteristiche e i meccanismi di funzionamento di un programma concorrente (comprendente molteplici thread di esecuzione); riconoscere le condizioni in cui si possono verificare situazioni problematiche, come Race Conditions, Deadlock e Starvation.
2. Conoscere e applicare le primitive per la creazione e gestione di thread, con particolare riferimento alle primitive di sincronizzazione e comunicazione tra thread; conoscere e applicare le tecniche in grado di prevenire Race Conditions, Deadlock e Starvation.
3. Conoscere e applicare i principali paradigmi di comunicazione tra thread.
4. Conoscere lo standard ISO/OSI e le basi dei principali protocolli di comunicazione.
5. Comprendere le caratteristiche dei sistemi distribuiti; conoscere e utilizzare i socket per la comunicazione tra programmi distribuiti.
6. Conoscere e utilizzare RMI per realizzazione di programmi object-oriented distribuiti.
7. Conoscere le basi della programmazione ad eventi in ambito concorrente e distribuito e scrivere programmi il cui comportamento è basato sulla reazione ad eventi.
Lo studente dovrà inoltre sviluppare una consapevole autonomia di giudizio con riferimento al riconoscimento delle problematiche tipiche della programmazione concorrente e distribuita e alla scelta di tecniche da impiegare per ottenere dal sistema il comportamento desiderato.
Prerequisiti
È richiesta la capacita di programmare in ambiente "sequenziale"; specificamente è necessario che lo studente padroneggi la programmazione in Java, il linguaggio usato nel corso. Le conoscenze e abilità necessarie per un proficuo apprendimento di questo insegnamento sono impartite nel corso fondamentale del primo anno di Programmazione, che dunque costituisce propedeuticità obbligatoria.
Metodi didattici
Il corso si articola in lezioni frontali (48 ore) ed esercitazioni (24 ore).
Le lezioni sono dedicate all'illustrazione degli elementi di programmazione concorrente e distribuita, delle problematiche tipiche dei programmi concorrenti e distribuiti, e delle tecniche adatte a costruire programmi concorrenti e distribuiti corretti.
Gli argomenti trattati a lezione sono oggetto di esercitazioni che prevedono la partecipazione attiva degli studenti e comprendono la dimostrazione dal vivo degli strumenti di sviluppo (principalmente Eclipse).
Verifica Apprendimento
L’obiettivo della prova d’esame è l'accertamento dell’acquisizione delle conoscenze e delle abilità descritte nella sezione “Obiettivi del corso”, valutando il livello di conoscenza e soprattutto la capacità di mettere in pratica, anche integrandole tra loro, le tecniche di programmazione viste a lezione.
L'esame consiste in una prova scritta da svolgersi sui PC del laboratorio informatico usando l'ambiente di programmazione visto durante le esercitazioni. La prova–della durata indicativa di 90 minuti–richiede di scrivere alcuni programmi, ciascuno dei quali testa la conoscenza di uno o più argomenti trattati nel corso; specificamente, vengono testate la capacità di scrivere programmi concorrenti e la capacita di scrivere programmi distribuiti, usando socket o RMI. Può inoltre venire richiesto di rispondere a domande–generalmente in numero compreso tra 1 e 4–riguardanti le conoscenze illustrate nella sezione “Contenuti del corso”. Le domande sono generalmente a risposta multipla (le risposte non date o sbagliate sono equivalenti).
Solo nel caso la prova scritta lasci dei dubbi sulla reale preparazione dello studente–quindi a discrezione del docente–verrà svolta una prova orale.
La conoscenza della terminologia specifica di dominio viene testata implicitamente, poiché domande e specifiche dei problemi utilizzano tale terminologia.
Le risposte alle domande pesano complessivamente per il 10% nella formulazione del voto finale, mentre i programmi determinano il restante 90% del voto finale.
Il voto è espresso in trentesimi.
Contenuti
Le lezioni affronteranno i seguenti argomenti:
Programmi multi-thread (6 h, obiettivo formativo 1)
Introduzione ai programmi multi-thread; non-determinismo
caratteristiche e meccanismi di funzionamento di un programma concorrente; cosa succede in memoria durante l'esecuzione di un programma multi-thread
situazioni problematiche (Race Conditions, Deadlock, Lilelock e Starvation) e condizioni in cui si possono verificare.
Meccanismi per la programmazione multi-thread (18 h, obiettivo formativo 2)
semafori e monitor; equivalenza dei due meccanismi
prevenzione delle race conditions
primitive di sospensione e risveglio (wait e notify)
esempi: produttore-consumatore
tecniche per prevenire Deadlock
esempi: problema dei 5 filosofi
Progettazione e descrizione di programmi concorrenti mediante UML
Paradigmi di comunicazione tra thread (8 h, obiettivo formativo 3)
presentazione e implementazione dei paradigmi: segnali, buffer, mailbox, broadcast, blackboard, barrier.
esempi illustrativi di ciascun meccanismo
Lo standard ISO/OSI e i protocolli di comunicazione (8 h, obiettivo formativo 4)
Lo stack ISO/OSI
L'Internet protocol
TCP e UDP
Cenni ai protocolli applicativi, con approfondimento di HTTP
I sistemi distribuiti (4 h, obiettivo formativo 5)
Introduzione ai sistemi distribuiti
L'architettura client-server
Realizzazione di sistemi distribuiti mediante socket (8 h, obiettivo formativo 5)
Funzioni di libreria Java per l'uso dei socket
La serializzazione
Esempi
Proxy e skeleton
Descrizione di programmi distribuiti mediante UML
Realizzazione di sistemi distribuiti mediante RMI (12 h, obiettivo formativo 6)
Obiettivi di RMI
Principio di funzionamento di RMI
Programmazione con RMI
Callback
Programmazione ad eventi (8 h, obiettivo formativo 7)
Le base della programmazione ad eventi
Pattern per la comunicazione ad eventi in ambito distribuito
L'uso degli eventi nelle GUI
Gli argomenti verranno affrontati usando come riferimento il linguaggio di programmazione Java. Ciò nondimeno, molti degli argomenti trattati nel corso sono di validità generale, e le tecniche proposte sono generalmente applicabili con linguaggi diversi.
Lingua Insegnamento
italiano
Altre informazioni
Il docente riceve su appuntamento, previa richiesta via e-mail a alberto.coenporisini@uninsubria.it. Il docente risponde solo alle e-mail firmate e provenienti dal dominio studenti.uninsubria.it.
Corsi
Corsi
INFORMATICA
Laurea
3 anni
No Results Found
Persone
Persone (3)
No Results Found