F47066 - Laboratorio di Sistemi e Reti [a.a. 2003-04]


Indice


Informazioni generali

Il corso di Laboratorio di Sistemi e Reti è un insegnamento fondamentale del terzo anno del corso di laurea (triennale) in Comunicazione Digitale, strettamente coordinato con il corso di Reti di Calcolatori.


Orario delle lezioni

Venerdi dalle 16:30 alle 19:15 in aula Beta (Via Comelico 39)

Per meglio sincronizzare lo svolgimento del corso con quello di Reti di Calcolatori, alcune lezioni potranno svolgersi nell'orario di quest'ultimo, e viceversa. Si vedano in proposito il Diario delle lezioni tenute e la Agenda delle lezioni da svolgere


Programma del corso

Il programma consiste di tutti e soli gli argomenti trattati a lezione, secondo quanto viene via via pubblicato nella sottostante sezione Diario delle lezioni tenute.


Modalità d'esame

L'esame del corso di Laboratorio di Sistemi e Reti si compone di una prova scritta (si veda il seguente esempio), consistente nella redazione in aula di due programmmi che utilizzano la tecnologia delle socket (linguaggi Java e C), eventualmente in combinazione con multithreading (Java/JVM) e multiprocessing (C/Linux), cui segue una prova pratica (da svolgersi a casa o in laboratorio) consistente nell'implementazione della soluzione sviluppata in aula. L'elaborato finale (codice sorgente del programma, prove di esecuzione, etc.) verranno discussi nel corso di una breve prova orale che si terrà successivamente alla pubblicazione dei voti riportati nella prova scritta.

Gli esami sono coordinati con quelli del corso di Reti di Calcolatori, nel senso che gli esami dei due corsi si svolgono nello stesso giorno, ora e luogo, secondo il seguente calendario (eventuali variazioni verranno comunicate tempestivamente - consultare periodicamente la home page del docente), e danno luogo alla verbalizzazione di un voto unico per i due corsi.

Per chi volesse svolgere esercizi di programmazione con le socket in ambiente C/Windows senza necessariamente effettuare una installazione "nativa" di Linux sul proprio PC di casa, si presentano varie possibilità, tra cui:

L'uso delle WinSock di Windows è invece sconsigliato, in quanto le specifiche sono diverse rispetto a quelle (conformi allo standard Posix) delle librerie presentate a lezione.

Chi fosse interessato a installare un compilatore C in ambiente Windows (se non già incorporato nelle soluzioni di cui sopra) può effettuare una ricerca in Internet (p.es. con Google ) usando come keyword l'espressione "GCC compiler for Windows" (con le virgolette): non c'è che l'imbarazzo della scelta.

Per avere un'idea della complessità di un tipico esercizio "da esame" (effettivamente assegnato qualche anno fa nell'ambito del corso di Sistemi Operativi) si veda l'esempio CircTest.java, che risolve il problema della sincronizzazione reciproca di due clown (classe Clown) che si rubano il cappello (classe Hat) l'un l'altro. La soluzione qui proposta è scarna quanto ci si aspetta che sia una soluzione sviluppata in aula. Nella implementazione da realizzare a casa o in laboratorio (e da discutere poi all'orale) ci si attende invece una maggiore ricchezza di dettagli, soprattutto per quanto riguarda l'inserzione nel codice di stampe che consentano di tracciare una tipica esecuzione del sistema, similmente a quanto riportato in CircTrac.java.

I voti vengono pubblicati esclusivamente online, e la loro validità temporale è illimitata. Per la verbalizzazione, presentarsi a uno degli appelli successivi a quello in cui l'esame è stato sostenuto. Per situazioni di particolare urgenza (p.es. imminenza dell'esame di laurea, scadenza dei termini per la presentazione della richiesta di rinvio del servizio militare, etc.) presentarsi durante l'orario di ricevimento.

Ecco il quadro dei risultati definitivi, completo di numero di statino del verbale per coloro che hanno superato l'esame e registrato il relativo voto.


Diario delle lezioni tenute


Agenda delle lezioni da svolgere

Il corso è terminato.


Materiale Didattico

Testo di riferimento

Esistono molti testi pubblicati sugli argomenti trattati nel corso, tutti largamente equivalenti ai fini didattici.

Esempi di multithreading in Java (solo codice sorgente)

Attenzione: negli esempi che seguono [versione del 24.11.03] non si è posta alcuna attenzione alla gestione mutuamente esclusiva del file di output (System.out) da parte dei vari thread che ne fanno uso.

Tutti esempi sono soggetti a progressivi miglioramenti stilistici e funzionali. Si consulti periodicamente questo sito per le novità.

Esempi di uso delle socket in Java (solo codice sorgente)

Attenzione: negli esempi che seguono [versione del 10.11.03] non si è posta alcuna attenzione alla gestione mutuamente esclusiva del file di output (System.out) da parte dei vari thread che ne fanno uso.

Tutti esempi sono soggetti a progressivi miglioramenti stilistici e funzionali. Si consulti periodicamente questo sito per le novità.

Programmazione con le socket in linguaggio C

Per questa parte del corso si suggerisce di consultare le slide del corso tenuto da Dario Maggiorini nell'a.a. 2002-03.

Sul tema è anche disponibile un eccellente tutorial, che però non copre esattamente tutti e soli gli argomenti trattati nel corso.


Link interessanti

Siti enciclopedici

Standard: enti e documenti


Gianfranco Prini ( gfp@dico.unimi.it)