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: 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: 
2014/2015
Anno di corso: 
2
Anno accademico di erogazione: 
2015/2016
Tipo di attività: 
Obbligatorio
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 socket (Reti e Sistemi Operativi), Linguaggi di markup (XML e HTML) e relativi strumenti di manipolazione (Linguaggi e Computabilità), Automi a Stati Finiti.

Moduli

Metodi di valutazione

Modalita' di verifica dell'apprendimento: 

scritto con discussione orale.

Valutazione: 
Voto Finale

Obiettivi formativi

Al termine del corso lo studente conoscerà le proprietà caratteristiche e le architetture fondamentali dei sistemi 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

1 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.

2 "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)."

3 "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."

4 "Argomenti monografici
Sistemi distribuiti mobili: Android. Semantic Web Services: Service annotation."

5 "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)"

6 "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 end-point SPARQL, piccoli mashup (es. visualizzazione su Google Maps di dati da DBPedia)"

7 "Programmazione concorrente a memoria condivisa
Programmi basati su thread in Java
Modellazione con automi a stati finiti
Sincronizzazione e monitor
"

8 "Algoritmi distribuiti
Orologi logici scalari e vettoriali
Cenni ai principali algoritmi: sincronizzazione, mutua esclusione, elezione, rilevamento dei fallimenti"

Bibliografia consigliata

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.
Dal corso di Reti e Sistemi Operativi:
Reti di calcolatori e internet – Un approccio top-down 4a Edizione, James F. Kurose, Keith W. Ross
Addison Wesley – 2008, ISBN 9788871924557
A. Silberschatz, P. Baer Galvin, G. Gagne, Sistemi operativi - Concetti ed esempi, 8/Ed. 2009, ISBN 9788871925691

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.