Anno di corso: 1

Crediti: 8
Crediti: 8
Crediti: 8
Crediti: 3
Tipo: Lingua/Prova Finale
Crediti: 3
Tipo: Lingua/Prova Finale
Crediti: 3
Tipo: Lingua/Prova Finale
Crediti: 3
Tipo: Lingua/Prova Finale

Anno di corso: 2

Anno di corso: 3

Crediti: 8
Crediti: 8
Crediti: 8
Crediti: 8
Crediti: 16
Tipo: A scelta dello studente
Crediti: 4
Tipo: Lingua/Prova Finale
Crediti: 13
Tipo: Altro

SISTEMI DISTRIBUITI

Scheda dell'insegnamento

Anno accademico di regolamento: 
2017/2018
Anno di corso: 
2
Anno accademico di erogazione: 
2018/2019
Tipo di attività: 
Obbligatorio
Lingua: 
Italiano
Crediti: 
8
Ciclo: 
Secondo Semestre
Ore di attivita' didattica: 
76
Prerequisiti: 

Programmazione a oggetti in Java e Junit test (Programmazione 2), Processi e comunicazione tra processi (Reti e Sistemi Operativi), Protocollo TCP/IP e socie (Reti e Sistemi Operativi), Linguaggi di markup (XML e HTML) e relativi strumenti di manipolazione , Automi a Stati Finiti (Linguaggi e Computabilità).

Moduli

Metodi di valutazione

Modalita' di verifica dell'apprendimento: 

• Esame: prova scritta e orale separate -> fino a 30 punti
• Laboratorio -> fino a 4 punti

La prova consiste in:
a) domande sulle nozioni presentate
b) domande di ragionamento e deduzione
c) risoluzione di esercizi che richiedono lo sviluppo di una soluzione ad un problema assegnato
Prova scritta in laboratorio
• Fase 1: domande chiuse su argomenti di base per accedere alla fase 2

• Fase 2: domande chiuse + domande aperte

• Ammissione all'orale con punteggio >= 18/30

Prova orale

• Consiste nella restituzione dei compiti scritti e in eventuali domande supplementari a discrezione del docente.

Laboratorio

• Valutazione: frequenza (>75%), partecipazione attiva e svolgimento degli esercizi -> fino a 4 punti

• Alternativa per studenti lavoratori: progetto da concordare

Prove in itinere (sostituiscono l’esame)

• prima prova: Domande chiuse

• seconda prova: Domande chiuse + domande aperte

•Alla seconda prova è ammesso chi ha ottenuto un punteggio >= 18/30 nella prima prova. Non ci sono recuperi.

È possibile fare progetti di approfondimento (facoltativi, valutati)

VOTO FINALE = ESAME + LABORATORIO (+ progetto facoltativo)

VOTO FINALE studenti lavoratori = ESAME + LABORATORIO (facoltativo)

Valutazione: 
Voto Finale

Obiettivi formativi

Al termine del corso lo studente conoscerà le proprietà caratteristiche e le architetture fondamentali dei sistemi distribuiti: concorrenti, client-server e peer-to-peer. Saprà sviluppare semplici applicazioni distribuite in ambiente Web/Internet.

Contenuti

Concetti, modelli e architetture dei sistemi concorrenti e distribuiti. Elementi fondamentali di progettazione e funzionamento dei sistemi distribuiti, con particolare riferimento al Web e a Internet.

Programma esteso

Concetti fondamentali: definizioni e proprietà caratteristiche; modelli client-server e peer-to-peer; Architetture software (layers vs tiers); nomi, identificatori e indirizzi (URI e DNS); Message Oriented Communication: modelli persistenti e transienti. Modelli push e pull.
Tecnologie di base Socket TCP/IP: client server e protocolli applicativi. I modelli client/server e peer-to-peer. Comunicazione basata su chiamata di procedura: Remote Procedure Call (RPC) e Remote Object Invocation (Java RMI).
Applicazioni Web: Web Foundations (URI & HTTP) HTTP request/response.
Web applications: servlet/JSP Pattern MVC2.
Client Web: Browser: Rich Interface Applications (Ajax).
Web services: REST e Web API vs WSDL/SOAP.
Argomenti monografici
Sistemi distribuiti mobili: Android. Semantic Web Services: Service annotation.
Applicazioni web dinamiche:
Introduzione a JavaScript; introduzione al framework jQuery; jQuery e tecniche AJAX
Esempi di applicazioni web: esempi base JavaScript, debugging, modifica dinamica di una pagina, invocazione di servizi remoti (es. Google Maps).
Rappresentazione dei dati HTML5 & CSS come modello per la rappresentazione e presentazione dei dati XML/ JSON come modello per il trasferimento dei dati RDF come modello di dati per il web semantico SPARQL come linguaggio di query per il web semantico Esempi di applicazioni di web semantico: interrogazioni a DBPedia e altri endpoint SPARQL, piccoli mashup (es. visualizzazione su Google Maps di dati da DBPedia).
Programmazione concorrente a memoria condivisa
Programmi basati su thread in Java
Modellazione con automi a stati finiti
Sincronizzazione e monitor
Algoritmi distribuiti
Orologi logici scalari e vettoriali
Cenni ai principali algoritmi: sincronizzazione, mutua esclusione, elezione, rilevamento dei fallimenti

Bibliografia consigliata

Sul sito elearning sono disponibili :

le slide delle lezioni in formato pdf.
ulteriore materiali (articoli a completamento dei testi di riferimento, link a risorse in rete, esercizi da svolgere) .
il materiale e le soluzioni degli esercizi svolti in laboratorio.
Testi di riferimento:

Distributed Systems: Principles and Paradigms - 2nd edition, Andrew S. Tanenbaum and Maarten van Steen, Pearson - Prentice Hall, 2007. Traduzione italiana: Sistemi Distribuiti - Seconda edizione, Pearson - Prentice Hall, 2007.

Metodi didattici

Il corso prevede lezioni ed esercitazioni in aula con attività di studio individuale supportate da materiali didattici in e-learning. Sono previste attività di laboratorio sia individuale sia di gruppo per lo sviluppo di semplici applicazioni distribuite in ambiente Web/Internet.