Prof. William Fornaciari


|

Extra

Piattaforme Software per la Rete

Descrizione

Obiettivi del corso

Obiettivo del corso è consolidare le capacità di programmazione a basso livello e fornire un'ampia competenza nella costruzione di software che interagisce con la rete. Tutto il Modulo 2 ha dunque una forte impronta progettuale e pratica.

Programma dettagliato

  • Cenni introduttivi, programmazione C (puntatori a funzioni, specificatori di classe di memoria)
  • Strumenti di sviluppo e amministrazione di sistema
  • Programmazione shell
  • Strumenti di amministrazione di rete
  • Concorrenza: implementazione di processi, thread e mutua esclusione, deadlock
  • Programmazione client-server con concorrenza (Socket TCP/UDP/Raw, IPv6)
  • Segnali
  • Remote Procedure Call e Network File System
  • Firewalling
  • Network Address Translation e Tunnels
  • Introduzione alla programmazione di moduli kernel, esempi con Netfilter
  • Reti wireless
  • Esempi: sistemi operativi per applicazioni dedicate e reti di sensori
  • Sicurezza delle reti Wi-Fi
  • Sicurezza di sistema

Contatti

Docente: William Fornaciari

Ricevimento: Al termine delle lezioni, il mercoledì mattina o previo appuntamento anche in altri orari

Esercitatore: Federico Reghenzani (website)

Ricevimento: Al termine delle lezioni o su appuntamento da concordare via email

Referenti per progetti d'esame (5 crediti)

  • Wireless Sensor Networks: Carlo Brandolese, Federico Terraneo
  • Linux e Android: Federico Reghenzani, Giuseppe Massari, Simone Libutti
  • Analisi energetica del codice: Carlo Brandolese
  • Sistemi Operativi embedded: Federico Reghenzani, Federico Terraneo
  • Ambienti di simulazione e profiling, NoC: Davide Zoni, Andrea Marchese

Esame

L’esame consta di due parti corrispondenti ai due moduli del corso. Il voto finale è unico ed è la somma dei voti (in quindicesimi) conseguiti in ciascuno dei moduli.
Ciascuno modulo prevede una prova scritta di circa 90 minuti con domande di teoria ed esercizi numerici o di programmazione. Nello stesso giorno dello scritto vi è tempo sufficiente per sostenere entrambi i moduli.
Uno solo dei moduli può essere sostituito da un progetto da svolgere nei tempi e modi concordati con il docente del modulo. In genere il voto massimo di ogni singolo progetto può arrivare a 32-33 punti, da mediare ovviamente con il voto dell'altro modulo.

Le prove scritte possono essere sostenute in appelli diversi. Analogamente il progetto e la prova scritta possono essere sostenuti in appelli diversi. L’esame sarà registrato non appena saranno valutati entrambi i moduli.
Ciascun modulo si intende superato se la valutazione finale è di almeno 14/30. L’esame è superato se la valutazione finale mediata entrambi i moduli è almeno 18/30.
Si ricorda che è obbligatorio iscriversi all’appello sia per registrare il voto, sia per sostenere uno solo dei moduli. Il Poliself avrà delle domande che guideranno l'iscrizione.
Per rifiutare il voto (sufficiente) di uno dei due moduli basta presentarsi ad un successivo appello e consegnare il compito, annullando automaticamente il voto precedente, oppure comunicare al docente la propria intenzione via email. Per rifiutare il voto finale è necessario esprimere il rifiuto tramite poliself e comunicare ai docenti quale (o quali) modulo si intende ripetere.
Attenzione: coloro che all’ultimo appello avranno sostenuto un solo modulo devono verificare con il docente che il loro voto sia riportato all’anno successivo consentendo di sostenere solo l’altro modulo. Ciò potrebbe non essere possibile per vari motivi tra i quali, per esempio, il cambio di un docente oppure un significativo cambio del programma.

Esami e Risultati 2016/17

V. sito dell'esercitatore per temi d'esame e relative soluzioni

Visione compiti del 18/01/2018 (parte esercizi): lunedì 22/01 ore 10.30 presso HEAP Lab (Edificio 21) citofonare 9613.

Traccia di tema d'esame

Si suggerisce comunque di guardare quelli del corso del 2013 che sono rappresentative anche dei successivi. Comunque un ottimo esercizio è anche visionare quelle del 2012/2012.
Il tema d'esame conterrà domande aperte e semplici esercizi di programmazione e comprensione del codice. Durante l'esame sarà distribuito un foglio con i prototipi delle funzioni di interesse. Esempi:
Dati alcuni comando unix dire quale sarà il loro risultato
Dato un frammento di codice contenente primtive di sicnronizzazione dire cosà accadrà a fornte di scenari di esecuzione e comandi impartiti da terminale utente
Dato codice che prevede l'uso di socket, completare il codice o indentificare eventuali errori di programmazione sul codice
Definite le caratteristiche di alcuni task concorrenti, mostrare cosa accade a fronte di un certo algoritmo di scheduling
Domanda relativa all'instradamento di pacchetti
Identificazione di condizioni di deadlock
Domande aperte di teoria

Vecchi temi d'esame del prof. Agosta, da usare solo per esercizio, il nuovo seguirà la traccia sopra descritta
Vecchi Temi d'esame prof. Agosta 2011 / 2012
Temi d'esame AA 2012-2013
2013 luglio 10 con traccia soluzione 2
2013 Luglio 29 con traccia di soluzione
2013 Settembre 12 con traccia di soluzione
2013 settembre 23 con traccia di soluzione

Esempi di domande di teoria e temi d'esame (2015): domande teoria 2015
Alcune domande parte di esercitazioni (2014): Domande esercitazioni may 20, 2015
27 maggio 2015

Risultati

Voti M2 (elaborati e scritti, aggiornamento progressivo)
Update M2 only - Sept 12, 2013

Update M2 only - Sept 24, 2013
voti_feb_12_2014.pdf

Anno 2013-2014 - Voti M2 (elaborati e scritti, aggiornamento progressivo)

Aggiornamento 7.03.2015

Anno 2014-2015 - Voti M2 (elaborati e scritti, aggiornamento progressivo)
Aggiornamento 13.07.2015
Aggiornamento 11.09.2015 Prototipi funzioni (verrà distribuito durante lo scritto) Prototipi funzioni Aggiornamento 18.09.2015
Update Feb 10, 2016

Anno 2015-2016 - Voti M2 (elaborati e scritti, aggiornamento progressivo)

aggiornamento 9 febbraio 2017 - or any question on the evaluation of M2 please refer to alessando barenghi

Materiale didattico

Libri

  • B. Kernighan & R. Pike, The Practice of Programming, Addison-Wesley
  • D. Comer & D. Stevens, Internetworking with TCP/IP, Vol. III: Client-Server Programming and Applications, Linux/Posix Sockets Version

In alternativa, e' possibile usare questo testo:

  • S. Seth & M. A. Venkatesulu, TCP-IP Architecture, Design and Implementation in Linux, Wiley-IEEE Computer Society

Inoltre, i seguenti testi liberamente distribuiti sono adottati per le esercitazioni:

Fare esperienza con un ambiente LINUX

Vi sono due possibilità: installare Linux creando una macchina dual boot (Windows-Linux) oppure fare girare Linux all'interno di una macchina virtuale (ex VMWARE) senza modificare Windows.
Unix on-line tutorial

Installazione dual boot di Linux (suggerimenti dell'esercitatore Barenghi)

Per chi deve iniziare e non ha preferenze specifiche riguardo alla distribuzione sono consigliate Kubuntu e Ubuntu, di cui è disponibile una pratica guida all'installazione che consente di ottenere un sistema che si avvia con Windows o Linux a scelta dell'utente.
Potete installare sulla vostra [Ubuntu|Kubuntu] un ambiente di sviluppo C completo installando i pacchetti: build-essential mc htop automake autoconf kate installabili attraverso il comando

sudo apt-get install build-essential mc htop automake autoconf kate manpages-dev

Potrebbe tornarvi utile per i primi tempi un pratico Cheat Sheet (manuali di riferimento compatti) per i comandi da console.
Per chi volesse approfondire la programmazione di sistema in ambito Linux si rimanda al testo Advanced Linux Programming, liberamente distribuibile.
Se siete interessati ad osservare la traccia di esecuzione di un programma , incluse le chiamate al sistema in modo affine agli esercizi fatti in classe, potete usare LTTng per registrare la traccia di esecuzione di un programma ed esaminarla a valle.

VM-WARE
  • Virtual Machine player, useful to run Linux leaving Windows installed: http://www.vmware.com/. Note that only the player is for free
Linux Ubuntu Software

Un modo comodo per utenti occasionali di Linux consiste nel creare una macchina virtuale su cui installare ubuntu. Info più di dettaglio seguiranno nelle prossime settimane

  • Scaricare e installare VMware - TBD
  • Creare una VM con UBUNTU - TBD
  • Configurazione desktop - TBD
  • Installazione catena di compilazione - TBD

Materiale esercitazioni (dump dal sito di Barenghi)

Slide

Crediti Parte del materiale didattico del corso è una rielaborazione di quanto prodotto da: Carlo Brandolese, Luca Breveglieri, Roberto Farina, Gianpaolo Agosta, Patrick Bellasi