SISTEMI DISTRIBUITI E MOBILI
Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente?
Ecco come fare >>
- English course description
- Anno accademico
- 2016/2017
- Docente
- CESARE STEFANELLI
- Crediti formativi
- 6
- Periodo didattico
- Primo Semestre
- SSD
- ING-INF/05
Obiettivi formativi
- Il corso descrive i sistemi distribuiti, affrontandone i temi principali, i più importanti modelli e architetture e presentando infine le principali realizzazioni di sistemi, servizi e applicazioni distribuite.
L'obiettivo principale del corso consiste nel fornire agli studenti le basi per affrontare lo studio dei sistemi distribuiti e per sviluppare quindi la capacità di progettare applicazioni e servizi distribuiti che soddisfino i principali vincoli di prestazioni, scalabilità, apertura, trasparenza e sicurezza.
Le principali conoscenze acquisite saranno:
elementi di base e caratteristiche dei sistemi distribuiti.
principali modelli e architetture dei sistemi distribuiti;
paradigmi di comunicazione;
il problema della tolleranza ai guasti;
i servizi di nomi
le principali infrastrutture middleware per il supporto di servizi e applicazioni distribuite (Web Services, CORBA, Cloud Computing, supporto ai sistemi mobili, …)
la programmazione “mobile”, in particolare smartphone (in ambito iOS e Android).
Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:
analizzare un sistema distribuito per capirne i principali componenti e le loro interazioni;
identificare i vincoli di progetto che determinano la scelta di modelli, architetture, paradigmi, più adatti per il contesto applicativo di interesse;
valutare la migliore tipologia di middleware disponibile per il supporto di una determinata applicazione;
saper configurare e installare almeno i principali middleware e piattaforme software per il supporto di servizi e applicazioni distribuite;
saper sviluppare applicazioni smartphone in ambito iOS e Android. Prerequisiti
- E’ necessario avere acquisito e assimilato le seguenti conoscenze fornite dai corsi di “Fondamenti di Informatica”, “Sistemi Operativi” e “Reti di Calcolatori”:
ottima conoscenza del linguaggio C e buona del linguaggio Java;
ottima conoscenza della programmazione di sistema in Unix (con particolare riferimento alle system call per la gestione dei processi);
ottima conoscenza della programmazione di rete in Unix (socket);
capacità di realizzare in Unix un sistema client/server come applicazione concorrente multiprocesso. Contenuti del corso
- Il corso prevede 60 ore di didattica tra lezioni ed esercitazioni. In particolare sono previste 52 ore di lezione in aula e 8 ore di esercitazioni guidate in laboratorio.
Introduzione ai sistemi distribuiti (8 ore). Introduzione ai sistemi distribuiti, definizioni, principali caratteristiche, proprietà e sfide progettuali. Principali modelli e architetture dei sistemi distribuiti.
La comunicazione nei sistemi distribuiti (6 ore). I principali paradigmi di comunicazione. Semantica della comunicazione e la tolleranza ai guasti. I sistemi di routing. I modelli di interazione.
I servizi di nomi (6 ore). Il problema del naming (come identificare le risorse) e i servizi di nomi (per trovare l’indirizzo delle risorse distribuite). Principali soluzioni ed esempio (il Domain Name System).
Il Middleware (8 ore). Le infrastrutture software per il supporto di servizi e applicazioni distribuite: il middleware. Definizioni, proprietà, modelli. Classificazione dei principali middleware.
Esempi di Middleware (18 ore + 4 ore di laboratorio). Esempi principali di infrastrutture middleware: Web Services (SOAP e ReST), il middleware a oggetti distribuiti (CORBA), il Cloud Computing (Heroku, AWS, OpenStack), Mobile Computing, infrastrutture software a supporto della Internet of Things (IoT) anche in ambiente industriale (manufacturing 2.0).
La programmazione smartphone (6 ore + 4 ore laboratorio). Introduzione alla programmazione smartphone. L’ambiente di programmazione iOS. L’ambiente di programmazione Android. Metodi didattici
- Il corso è organizzato nel seguente modo:
lezioni in aula su tutti gli argomenti del corso;
esercitazioni nel laboratorio di Informatica piccolo per l’installazione e configurazione di alcuni middleware di riferimento e per l’apprendimento delle tecniche di programmazione in ambiente smartphone. Al termine delle esercitazioni guidate gli studenti avranno libero accesso al laboratorio per ulteriori esercitazioni individuali. Modalità di verifica dell'apprendimento
- L’obiettivo della prova d’esame consiste nel verificare il livello di raggiungimento degli obiettivi formativi precedentemente indicati.
L’esame è costituito da una prova orale che valuterà la capacità di uno studente di progettare un’applicazione distribuita. A questo fine lo studente dovrà dimostrare di essere in grado di: identificare i principali requisiti di progetto dettati da uno specifico scenario applicativo di riferimento; identificare modelli e architetture più adatte per il supporto; scegliere e descrivere le caratteristiche di un middleware mettendo in luce vantaggi e svantaggi. Infine si verificheranno le abilità di programmazione in ambiente smartphone. Testi di riferimento
- Copia delle slide presentate a lezione.
Testi adottati nel corso:
G.Couloris, J. Dollimore, T. Kindberg, G. Blair, Distributed Systems – Concepts and Design, fifth edition, Addison Wesley, 2011.
A. Tanenbaum, M.Van Steen, Sistemi Distribuiti, Prentice Hall, 2007.
Approfondimenti:
Per tutti gli argomenti si consiglia di consultare le riviste edite da ACM (Association for Computing Machinery) e IEEE (Institute of Electrical and Electronic Engineering) che si possono trovare in biblioteca. Siti di riferimento www.computer.org e www.comsoc.org
Riviste più “divulgative”: IEEE Computer, ACM Communications.
Riviste di approfondimento su aree specifiche: IEEE Internet Computing, IEEE Communications, Distributed Systems OnLine (dsonline.computer.org), ACM Computing Surveys, ACM Transactions on... IEEE Transactions on .... , tutte le IETF Request for Comments (RFC)
Esempi di alcuni articoli interessanti:
programmazione concorrente: ANDREWS, SCHNEIDER, Concepts and Notations for Concurrent Programming.
Middleware: Le rfc2768 (middleware) e 1034 (DNS) sono sul sito dell'ietf
Cloud Computing: Neal Leavitt, "Is Cloud Computing Really Ready for Prime Time?", IEEE Computer, January 2009, pp. 15-20