| | | | corso | | |
Laboratorio di programmazione concorrente e di sistema A
Codice: | AA538 | Crediti: | 6 | Semestre: | 2 | Sigla: | LCS | |
|
Settore disciplinare: | INF/01 - Informatica |
Docente
Susanna Pelagatti
Tel. 0502212772Prerequisiti
E' necessaria una buona conoscenza del linguaggio C. Si consiglia di aver seguito e superato l'esame di AA536 “Laboratorio di Linguaggi di Sistema''
Obiettivi di apprendimento
Il corso intende fornire le conoscenze di base relative alla programmazione di concorrente e di sistema in ambiente POSIX. In particolare, viene introdotta la programmazione di shell BASH, e vengono prese in
considerazione le chiamate standard per il trattamento di file e directory,
processi, thread, segnali, pipe, socket e vari meccanismi di sincronizzazione.
Conoscenze.
Lo studente acquisirà conoscenze sulla programmazione concorrente e di sistema utilizzando processi e thread in ambiente Unix/Posix, con particolare riferimento ai sistemi Linux.
Capacità. Lo studente saprà progettare e realizzare un sistema client server di medie dimensioni utilizzando gli strumenti messi a disposizione dallo standard POSIX. Saprà inoltre selezionare all'interno dello standard le primitive più adeguate, in modo da ottenere un software robusto ed efficiente. Saprà infine codificare e sviluppare la soluzione progettata usando ANSI C e gli strumenti dell'ambiente GNU.
Comportamenti. Lo studente sarà cosciente delle problematiche principali legate all'utilizzo di C+POSIX su diverse piattaforme e saprà valutare indipendentemente le scelte progettuali più adeguate per ottenere del software portabile e corretto.
Descrizione
Il corso e' diviso logicamente in due parti. La prima descrive sommariamente la shell di Unix, introduce gli script (con riferimento a Bash), descrive l'ambiente di sviluppo GNU ed i tool associati. La seconda tratta la programmazione concorrente e di sistema utilizzando le System Call POSIX. In particolare vengono descritte e sperimentate le SC relative ai file, ai processi, ai thread, ai segnali, alle pipe ed ai socket. Ogni argomento prevede lo svolgimento di esercizi in laboratorio da parte degli studenti.
English Description
We first introduce the Unix shell, shell scripting (Bash) and the principal GNU tools used to develop non trivial system programs in C. Then, we introduce the concept of 'system call' and review the principal ones in the areas of file system, processes, threads, signals, pipes and sockets. For each topic, we will propose several problems, which will be solved by the students during the Lab hours (esercitazioni).
Programma
Il
linguaggio usato nel corso e' ANSI C (lo studente deve già conoscerlo da LLS)
- Introduzione. Gestione
di progetti C complessi: make, strumenti GNU introduzione alla shell (2h + 2h
laboratorio)
- La shell Bash, programmazione ed uso (2h + 2h
laboratorio)
- Standard POSIX, system
call, gestione degli errori (2h + 2h laboratorio)
- Chiamate di sistema
relative ai file: open, close, read, write, lseek (2h + 2h laboratorio)
- SC avanzate sui file:
stat, SC su directory (2h + 2h laboratorio)
- Processi:fork, exec, wait, exit (2h + 2h laboratorio)
- Thread Posix: creazione, attesa distruzione, la libreria pthread() di Linux (2h + 2h laboratorio)
- Variabili di condizione e mutex, programmazione concorrente con thread (2h + 2h laboratorio)
- Inter process communication: pipe con
nome e pipe senza nome (2h + 2h laboratorio)
- Inter process communication: Socket, indirizzi AF_UNIX, cenni AF_INET (2h
+ 2h laboratorio)
- Segnali (2h + 2h laboratorio)
Ore lezione: | 22 | | Ore laboratorio: | 38 | | |
Bibliografia
Testo. M.J. Rochkind Advanced Unix Programming. Addison Wesley 2004. Più materiale in linea accessibile
dalla pagina web del corso.
Software. Postazioni
Linux con ambiente GNU sui PC del laboratorio. Tutto il software utilizzato è
open source e scaricabile gratuitamente dagli studenti da vari siti web oppure
ottenibile in copia su CD direttamente dal centro di calcolo.
Modalità di esame
La valutazione avverrà mediante lo sviluppo di esercitazioni in aula e di un progetto didattico (svolti individualmente) più una prova orale. Il progetto verterà sullo sviluppo di un semplice sistema client server utilizzando gli strumenti presentati a lezione. Parti del progetto verranno svolte durante le ore di laboratorio con l'aiuto del docente.