Tu sei qui

Programmazione concorrente e distribuita

Programmazione Concorrente e Distribuita

Corso di Laurea Triennale in Informatica F004
A.A. 2014/15
SCV0026
Docente: Ignazio Gallo


CFU SSD LEZIONI ESERCITAZIONI ANNO LINGUA
8 INF/01 48 24 II Italiano


Obiettivi dell’insegnamento e risultati di apprendimento attesi
Il corso ha lo scopo di insegnare le tecniche di programmazione concorrente, la programmazione distribuita e le relative problematiche. Gli argomenti verranno affrontati usando come riferimento il linguaggio di programmazione Java.

Per tutti gli argomenti del programma i risultati di apprendimento attesi sono quindi racchiusi nei seguenti punti:

  • Comprendere come creare dei thread all'interno di un programma e come controllarli . Questo aspetto non è banale, in quanto la presenza di thread produce un comportamento non deterministico nei programmi.
  • Comprendere cosa avviene in memoria durante l’esecuzione di un programma concorrente.
  • Imparare a riconoscere ed evitare situazioni di Race Conditions e di Deadlock, due tipi di problemi che possono insorgere con i programmi concorrenti.
  • Imparare ad utilizzare una metodologia per la progettazione di programmi concorrenti.
  • Essere in grado di applicare alcuni dei paradigmi di comunicazione standard della programmazione concorrente, oltre ai semafori e monitor.
  • Conoscere il modello di interazione client-server nella programmazione distribuita.
  • Imparare a realizzare programmi distribuiti attraverlo l'uso di strumenti a basso livello come le socket e attraverso l'uso di librerie ad alto livello come ad esempio Java RMI.
  • Conoscere le nozioni di base della programmazione ad eventi in ambito concorrente e distribuito.

Prerequisiti
L’allievo che accede a questo insegnamento deve conosce già, un minimo di programmazione Object Oriented in Java, deve avere una buona conoscenza dei principi di funzionamento di un Sistema Operativo e in particolare i meccanismi di supporto alla concorrenza, ad esempio, processi, semafori, etc., deve sapere cosa sono i pattern nella progettazione del software e deve infine conoscere un minimo di UML .

Contenuti e programma del corso
Per la parte relativa alla programmazione concorrente verranno illustrati i concetti di Thread, oggetti attivi, metodi sincronizzati, primitive di sospensione e di risveglio necessari alla implementazione di sistemi concorrenti. Verranno inoltre analizzati alcuni dei paradigmi di comunicazione standard della programmazione concorrente, come ad esempio i semafori, i monitor, i segnali, la comunicazione tramite Buffers, Blackboards, Barriers, etc.
Successivamente il corso affronterà le tecniche di programmazione in ambito distribuito. Verranno illustrati i concetti fondamentali quali, connessione di rete, apertura chiusura e gestione dei Socket, la comunicazione mediante Socket e i protocolli di comunicazione applicativi. Infine verranno illustrati gli aspetti principali relativi alla programmazione distribuita attraverso l'uso di Java RMI.
Infine verranno introdotte alcune nozioni di base sulla programmazione ad eventi in ambito concorrente e distribuito, utilizzando gli eventi come meccanismo di comunicazione tra Thread e alcuni pattern per la comunicazione ad eventi in ambito distribuito.

Tipologia delle attività didattiche
Per ogni argomento trattato a lezione lo studente è invitato a seguire le relative esercitazioni in laboratorio di informatica, durante le quali l’allievo deve realizzare dei piccoli progetti atti a svilupparne le abilità di applicare la teoria nel contesto dei problemi come questi si presentano in pratica.
Durante le esercitazioni viene fornita assistenza continua in aula da parte di un esercitatore o del docente.

Testi e materiale didattico
Per ogni lezione vengono rilasciate in anticipo le slide in formato PDF, disponibili sul portale della didattica (e-learning). Le slide delle lezioni contengono i riferimenti ai capitoli dei libri consigliati come approfondimento.
Per le esercitazioni vengono resi disponibili sul portale della didattica il testo e le soluzioni dei problemi proposti.
I libri di supporto consigliati sono i seguenti:

  • Creating Components: Object Oriented, Concurrent, and Distributed Computing in Java by Charles W. Kann
  • Concurrent and Real-Time Programming in Java by A. Wellings
  • Concurrent and Distributed Programming in Java by Vijay K. Garg
  • Thinking in Java by Bruce Eckel et. Al.

Modalità di verifica dell’apprendimento
Per accertare l’acquisizione delle conoscenze e delle abilità, il corso prevede tre tipologie di verifiche:

  1. QUIZ a risposta multipla a fine di ogni argomento affrontato a lezione. Questa verifica viene fatta al PC, utilizzando la piattaforma di elearning. Il voto di tutti i quiz viene mediato e può portare ad un bonus sul voto finale da 0 a 9 punti in trentesimi. Questa prova non è obbligatoria ed il punteggio accumulato rimane valido solo per i primi tre appelli.
  2. ESERCITAZIONI sugli argomenti affrontati a lezione. Questa verifica viene fatta sui PC del laboratorio, utilizzando il linguaggio Java. Il voto di tutte le esercitazioni viene mediato e può portare ad un bonus sul voto finale da 0 a 3 punti in trentesimi. Questa prova non è obbligatoria ed il punteggio accumulato rimane valido solo per i primi tre appelli.
  3. PROVA SCRITTA COMPLESSIVA su tutti gli argomenti affrontati a lezione. Questa verifica viene fatta sui PC del laboratorio, utilizzando la piattaforma di elearning e il compilatore Java. Il voto è in trentesimi. Questa prova è obbligatoria. Il voto minimo per poter superare questa prova è 18/30. Questa prova scritta consiste di 3 parti:
    1. circa 20 domande su tutti gli argomenti affrontati con risposte a scelta multipla (massimo 10 punti, non si può consultare materiale di supporto)
    2. circa 5 domande a risposta breve su esempi di programmi distribuitii e/o concorrenti in cui bisogna dimostrare di averne capito il funzionamento (massimo 10 punti, non si può consultare materiale di supporto).
    3. un programmino da implementare al PC del laboratorio che può richiamare alcuni o tutti gli argomenti visti a lezione (massimo 10 punti, si può consultare materiale di supporto)

Orario di ricevimento
Ricevimento per appuntamento: basta inviare una mail a ignazio.gallo@uninsubria.it

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer