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.
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.
Il modulo e' composto da 30 ore di lezione, e 20 di esercitazione. Le esercitazioni del corso sono affidate all'Ing. Alessandro Barenghi.
La valutazione avviene attraverso un esame scritto, che puo' essere sostituito da un progetto concordato con il docente.
I libri adottati per il corso sono:
In alternativa, e' possibile usare questo testo:
Inoltre, i seguenti testi liberamente distribuiti sono adottati per le esercitazioni:
Infine, saranno rese disponibili slide e dispense per alcuni argomenti avanzati non coperti dal materiale elencato qui sopra.
Data | Argomento | Materiale | Tipo |
---|---|---|---|
Prima parte | |||
7/3 | Introduzione, programmazione C | Practice of Programming | L |
8/3 | Pratica di programmazione, librerie dinamiche | Practice of Programming | L |
14/3 | Strumenti di amministrazione di sistema | Slides,Materiale | L |
15/3 | Programmazione shell | ABS | L |
27/3 | Ingegnerizzazione del software in C | Practice of Programming, up to chapter 6 | L |
28/3 | Laboratorio 1: Programmazione C & shell | Mercurial, Doxygen, GDB, GNU Make | Lab |
Seconda parte | |||
29/3 | Strumenti di amministrazione di rete | Slides,Materiale, Comer cap 4 | E |
30/3 | Firewalling, Network Address Translation e Tunnels | Slides,Materiale Firewall, Materiale NAT/Tunnels | E |
3/4 | Sicurezza di sistema | Slide | E |
4/4 | Laboratorio 2: Programmazione C | Mercurial, Doxygen, GDB, GNU Make | Lab |
9/5 | Laboratorio A: amministrazione di rete | Materiale | E |
12/4 | Presentazione dei progetti | S | |
Terza parte | |||
18/4 | Programmazione con i Socket | GaPiL cap 15-17, ALP cap 5.5, Comer cap 5 | L |
10/5 | 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 | Remote Procedure Call | Comer cap 19-22, rpcgen Programming Guide altro materiale, codice visto a lezione | L |
30/5 | Laboratorio 4: Remote Procedure Call | Lab | |
5/6 | 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 | netcat | L/E |
21/6 | Esercitazioni riassuntive | rpc | L/E |
Il corso prevede un esame scritto, sostituibile in parte (in generale per un singolo modulo) da un progetto.
Temi d'Esame:
Ecco la lista dei progetti disponibili di qui a Giugno 2012:
Progetti ancora disponibili (lista aggiornata al 14/6/2012 ore 10:00):
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 paper on this work.
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.
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.
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).
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 Parsec and NAS benchmark suites.
Each application can be ported by 1 to 2 students.