====== Piattaforme Software per la Rete ====== Questa pagina e' dedicata al supporto per il modulo 2 del corso Piattaforme Software per la Rete, offerto per i corsi di laurea di primo livello in Ingegneria Informatica e Ingegneria delle Telecomunicazioni. Il modulo 2 concerne la programmazione di sistema, l'implementazione di applicazioni client-server, l'uso delle API socket POSIX/Linux per TCP e UPD, e il supporto di sistema operativo e di virtualizzazione per sistemi mobili. __**[[teaching:pswr:blog|News]]**__ ==== Obiettivi del modulo ==== Obiettivo del corso e' consolidare le capacita' di programmazione a basso livello, e fornire un'ampia competenza nella costruzione di software che interagisce con la rete. Tutto il modulo 2 ha, per questo, una forte impronta progettuale e pratica. Idealmente, per gli studenti di Ingegneria Informatica, il modulo 2 supplementa il corso di Architettura dei Calcolatori e Sistemi Operativi, ed e' fortemente sinergico con i corsi di Sistemi Distribuiti e Sistemi Embedded 2 proposti nella laurea magistrale. Rispetto al primo e al terzo, completa il trattamento dei Sistemi Operativi, mentre rispetto al secondo fornisce una visione a basso livello dei meccanismi di base necessari per l'implementazione dei sistemi distribuiti. ==== Struttura del modulo ==== Il modulo e' composto da 30 ore di lezione, e 20 di esercitazione. Le esercitazioni del corso sono affidate all'Ing. [[http://home.dei.polimi.it/barenghi|Alessandro Barenghi]]. La valutazione avviene attraverso un esame scritto, che puo' essere sostituito da un progetto concordato con il docente. === Materiale didattico === I libri adottati per il corso sono: * 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: * CodeSourcery LLC, [[http://www.advancedlinuxprogramming.com/|Advanced Linux Programming Guide]] (ALP) * S. Piccardi, [[http://gapil.truelite.it/|Guida alla Programmazione in Linux]] (GaPiL) * [[http://www.netfilter.org/documentation/|Netfilter Howtos]] * M. Cooper, [[http://tldp.org/LDP/abs/html/|Advanced Bash Scripting Guide]] (ABS) Infine, saranno rese disponibili [[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme|slide e dispense]] per alcuni argomenti avanzati non coperti dal materiale elencato qui sopra. === Programma dettagliato (2012) === ^ Data ^ Argomento ^ Materiale ^ Tipo ^ ^ Prima parte ^ ^ ^ ^ | 7/3 | {{teaching:ripassoc.pdf|Introduzione, programmazione C}} | Practice of Programming | L | | 8/3 | {{teaching:practice.pdf|Pratica di programmazione}}, {{teaching:code2012.tgz|librerie dinamiche}} | Practice of Programming | L | | 14/3 | {{teaching:sysadmin.pdf|Strumenti di amministrazione di sistema}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es1|Materiale]] | L | | 15/3 | {{teaching:labsw:bash.tgz|Programmazione shell}} | ABS | L | | 27/3 | {{teaching:practice.pdf|Ingegnerizzazione del software in C}} | Practice of Programming, up to chapter 6 | L | | 28/3 | {{teaching:textutils.tgz|Laboratorio 1: Programmazione C & shell}} | [[http://mercurial.selenic.com|Mercurial]], [[http://www.stack.nl/~dimitri/doxygen/|Doxygen]], [[http://www.gnu.org/software/gdb/documentation/|GDB]], [[http://www.gnu.org/software/make/manual/|GNU Make]] | Lab | ^ Seconda parte ^ ^ ^ ^ | 29/3 | {{teaching:netadmin.pdf|Strumenti di amministrazione di rete}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es2|Materiale]], Comer cap 4 | E | | 30/3 | {{teaching:firewalls.pdf|Firewalling}}, {{teaching:nat_tunnels.pdf|Network Address Translation e Tunnels}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es5|Materiale Firewall]], [[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es6|Materiale NAT/Tunnels]] | E | | 3/4 | {{teaching:system_security.pdf|Sicurezza di sistema}} | Slide | E | | 4/4 | {{teaching:textutils.tgz|Laboratorio 2: Programmazione C}} | [[http://mercurial.selenic.com|Mercurial]], [[http://www.stack.nl/~dimitri/doxygen/|Doxygen]], [[http://www.gnu.org/software/gdb/documentation/|GDB]], [[http://www.gnu.org/software/make/manual/|GNU Make]] | Lab | | 9/5 | Laboratorio A: amministrazione di rete | [[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme|Materiale]] | E | | 12/4 | //{{teaching:progetti2012.pdf|Presentazione dei progetti}}// | | //S// | ^ Terza parte ^ ^ ^ ^ | 18/4 | {{teaching:socket.pdf|Programmazione con i Socket}} | GaPiL cap 15-17, ALP cap 5.5, Comer cap 5 | L | | 10/5 | {{teaching:cserver-v2.tgz|Programmazione client-server con concorrenza}} | ALP | L | | 16/5 | Laboratorio 3: Socket | | Lab | | 17/5 | Segnali Avanzati e Sockets | | E | | 23/5 | Socket UDP, RAW, IPv6 | | E | | 24/5 | {{teaching:rpc.pdf|Remote Procedure Call}} | Comer cap 19-22, [[http://docs.freebsd.org/44doc/psd/22.rpcgen/paper.pdf|rpcgen Programming Guide]] [[http://www.linuxjournal.com/article/2204|altro materiale]], {{teaching:rpc.tgz|codice visto a lezione}} | L | | 30/5 | Laboratorio 4: Remote Procedure Call | | Lab | | 5/6 | {{teaching:nfs.pdf|Network File System}} | | L | ^ Quarta parte ^ ^ ^ ^ | 31/5 | Introduzione alla programmazione di moduli kernel | | E | | 7/6 | Programmazione di moduli kernel: sincronizzazione | | E | | 13/6 | Laboratorio B: Programmazione moduli del kernel | (laboratorio in aula non informatizzata: portare un laptop!) | E | | 14/6 | Reti wireless e Sicurezza delle reti Wi-Fi | | L/E | | 20/6 | Esercitazioni riassuntive | {{teaching:netcat.tpp.gz|netcat}} | L/E | | 21/6 | Esercitazioni riassuntive | {{teaching:rpccount.tgz|rpc}} | L/E | === Programma dettagliato (2011) === ^ Data ^ Argomento ^ Materiale ^ Tipo ^ | 9/3 | {{teaching:pswr-intro.pdf|Introduzione}}, {{teaching:pswr-cprog.tgz|programmazione C}} | Comer cap 1, ALP cap 1 | L | | 16/3 | {{teaching:sysadmin.pdf|Strumenti di amministrazione di sistema}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es1|Materiale]] | E | | 22/3 | Strumenti di sviluppo | GaPiL (app D) | E | | 23/3 | {{teaching:labsw:bash.tgz|Programmazione shell}} | ABS | E | | 30/3 | {{teaching:netadmin.pdf|Strumenti di amministrazione di rete}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es2|Materiale]], Comer cap 4 | E | | 31/3 | //Presentazione dei progetti// | | | | 6/4 | {{teaching:processi.txt.gz|Concorrenza: Processi}} | ALP cap 3, GaPiL cap 3 | L/E | | 7/4 | {{teaching:threads.tgz|Concorrenza: Thread e mutua esclusione}} | ALP cap 4, [[http://people.redhat.com/drepper/futex.pdf|Futexes are tricky]] and [[http://locklessinc.com/articles/futex_cheat_sheet/|other]] [[http://locklessinc.com/articles/mutex_cv_futex/|materials]] | L/E | | 14/4 | {{teaching:socket.pdf|Programmazione con i Socket}} | GaPiL cap 15-17, ALP cap 5.5, Comer cap 5 | L/E | | 20/4 | Programmazione client-server con concorrenza | Comer cap 2, 3, 6-8, 15, 16, ALP | L/E | | 27/4 | {{teaching:cserver-v2.tgz|Programmazione client-server con concorrenza}} | ALP | L/E | | 28/4 | {{teaching:adv_sockets.pdf|Segnali Avanzati e Sockets}} | Slides [[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es3|Materiale]] | E | | 5/5 | {{teaching:rpc.pdf|Remote Procedure Call}} | Comer cap 19-22, [[http://docs.freebsd.org/44doc/psd/22.rpcgen/paper.pdf|rpcgen Programming Guide]] [[http://www.linuxjournal.com/article/2204|altro materiale]] | L | | 11/5 | {{teaching:different_protocols.pdf|Socket UDP, RAW, IPv6}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es4|Materiale]] | E | | 12/5 | {{teaching:nfs.pdf|Network File System}} | Comer cap 23, 24 | L/E | | 19/5 | {{teaching:firewalls.pdf|Firewalling}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es5|Materiale]] | E | | 25/5 | {{teaching:nat_tunnels.pdf|Network Address Translation e Tunnels}} | Slide,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es6|Materiale]] Comer cap 17, 18 | E | | 26/5 | {{teaching:kernel_programming.pdf|Introduzione alla programmazione di moduli kernel}} | Slides,[[http://home.dei.polimi.it/barenghi/doku.php?id=teaching:piattaforme:es7|Materiale]] | E | | 1/6 | {{teaching:deadlock.pdf|Deadlock & Sincronizzazione}} | Comer cap 28 | L | | 8/6 | {{teaching:kernel_programming_mk2.pdf|Programmazione di moduli kernel per Netfilter}} | Slide | E | | 9/6 | {{teaching:3rdeditionchapter6_june21.pdf|Reti wireless}} | Slide | L | | 15/6 | {{teaching:wlan_security.pdf|Sicurezza delle reti Wi-Fi}} | Slide | E | | 16/5 | {{teaching:system_security.pdf|Sicurezza di sistema}} | Slide | E | | 22/6 | {{teaching:psresercitazioneriassuntiva.tgz|Esercitazioni riassuntive}} | | E | | 23/6 | {{teaching:psresercitazioneriassuntiva.tgz|Esercitazioni riassuntive}} | | E | ==== Modalita' d'esame ==== Il corso prevede un esame scritto, sostituibile in parte (in generale per un singolo modulo) da un progetto. Temi d'Esame: * {{teaching:psr20110629.pdf|Preappello Giugno 2011}} * {{teaching:compito20110707.pdf|Appello 7 Luglio 2011}} * {{teaching:compito20110727.odt|Appello 27 Luglio 2011}} * {{teaching:compito20120127.odt|Appello 27 Gennaio 2012}} * {{teaching:compito20120625v2.pdf|Appello 26 Giugno 2012}} ===== Progetti ===== Ecco la lista dei progetti disponibili di qui a Giugno 2012: * {{teaching:progetti2012v2.pdf|Progetti presentati il 13/6}} **Progetti ancora disponibili** (lista aggiornata al 14/6/2012 ore 10:00): * Tutti quelli presentati il 13/6, tranne il progetto riguardante la GUI per fs-uae ==== Progetti 2011 (non piu' disponibili) ==== === Reduction Optimization === Analyzing large datasets often requires computing summary indices (e.g., the mean of a population). Such computation can be easily parallelized exploiting data partitioning -- each thread accesses an indipendent slice of the data and computes a partial index. Later, partial indices must be aggregated to obtain a global index. Such aggregation can be performed in different flavors, e.g. concurrently or by a master thread. Concurrent aggregation requires synchronizations, and both operations must be implemented efficiently. A {{teaching:reductionpaper.pdf|paper}} on this work. === Optimal Barrier Tree Placement on NUMA Architectures === The implementation of a tournament barrier organizes threads in a tree. Sibling threads in such a tree should be allocated to neighbour cores in a NUMA architecture. The project aims at optimizing the synchronization tree taking into account the hardware geometry. === TLS Cache Implementation === In modern architectures, it is possible to hold variables that are globally visible in a thread, but not to other threads in a special memory region called Thread Local Storage. Assuming one wants to store an unbounded number of data items in the TLS, it is necessary to define a caching policy, since there is only limited space in the hardware TLS. The project aims at implementing a fast caching policy within a reduction and synchronization library to cache synchronization data structures. === Optimized Reduction Experimentation on SESC === [[http://sourceforge.net/projects/sesc|SESC]] is an architectural simulator for an arbitrary number of processing units (cores). Tournament barrier algorithm outperform standard barrier algorithms when using more than 16 threads. The project aims at configuring SESC to represent different many-core architectures, and experimenting optimized reduction and synchronization implementations on it. Each of these projects is suitable for 2 students (the last can be extended up to 4 students). === Parallel Benchmarks on Embedded Many-Core Platforms === Multi- and many-core systems are gaining ground in mobile platforms (see e.g. NVidia Tegra and PowerVR accelerators). The goal of this project is to benchmark a new many-core platform by porting several existing programs, chosen from the popular [[http://parsec.cs.princeton.edu/|Parsec]] and [[http://www.nas.nasa.gov/Software/NPB/|NAS benchmark]] suites. Each application can be ported by 1 to 2 students.