elenco    
        corso    

Laboratorio di programmazione concorrente e di sistema

Codice: AA538Crediti: 6Semestre: 2Sigla: LCS 
 
Settore disciplinare: INF/01 - Informatica

Docente

Fabio Gadducci   gadducci@di.unipi.it  Stanza 380  Tel. 0502212716

Prerequisiti

Prerequisito SOSTANZIALE è essere in grado di editare, compilare ed eseguire un programma C.

Obiettivi di apprendimento

Il corso intende fornire le conoscenze di base relative alla programmazione in C con chiamate di sistema Unix/Posix. In particolare, vengono prese in considerazione le chiamate standard per il trattamento di file e directory, processi, thread, segnali, pipe, socket e vari meccanismi di sincronizzazione.

Descrizione

Il corso affronta la problematica della programmazione in C, con particolare enfasi sulla sua valenza come linguaggio per la programmazione di sistema. Tutta l'attività di laboratorio è svolta in ambiente Linux e il linguaggio di programmazione utilizzato è ANSI C. Alla fine del corso gli studenti avranno acquisito le basi necessarie sulla programmazione concorrente utilizzando processi e thread in ambiente Unix/Posix, con particolare riferimento ai sistemi Linux, e preso coscienza delle problematiche principali relative all'utilizzo del linguaggio C e dello standard Posix su diverse piattaforme.

Indicazioni metodologiche

Il corso si svolge nel secondo semestre (18 febbraio - 16 maggio 2008). Le ore settimanali di didattica frontale sono quattro. Le quattro ore settimanali sono ripartite in due ore di teoria e due ore di esercitazioni.
Nelle ore di teoria il docente presenta gli argomenti del programma. Le ore di teoria si tengono in un'aula grande (Aula 3) dotata di proiettore.
Le ore di esercitazione si svolgono in una aula informatizzata (Laboratorio 2) dove gli studenti possono esercitarsi al calcolatore risolvendo individualmente esercizi di programmazione. Il docente sarà presente in aula per fornire supporto costante agli studenti.
Data la limitata capienza dell'aula informatizzata (circa 20 calcolatori), gli studenti del corso verranno eventualmente divisi in due gruppi, e le esercitazioni verranno svolte separatamente dai due gruppi (2 ore per ciascun gruppo).
Verso la fine del corso verranno impiegate una o più ore di teoria per la presentazione del progetto, mentre alcune ore di esercitazione saranno usate per specifici approfondimenti riguardanti lo sviluppo del progetto.
Il corso prevede l'obbligo di frequenza, da cui sono esentati solo gli studenti lavoratori.
Gli studenti che non hanno frequentato l'80% delle lezioni e esercitazioni non verranno valutati, e dovranno frequentare nuovamente il corso di Laboratorio di Programmazione Concorrente e di Sistema nel prossimo anno accademico.
Gli studenti lavoratori che non possono frequentare con regolarità il corso devono contattare il docente ALL'INIZIO del corso. Per essi non vale l'obbligo di frequenza, ma dovranno presentare al docente una dichiarazione del datore di lavoro.

Programma

Il corso è 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 chiamate di sistema offerte dallo standard Posix. In particolare vengono descritte e sperimentate le chiamate di sistema 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.

Introduzione all'uso di shell
  1. Breve storia e carattetristiche principali di Unix
  2. Espressioni regolari (grep, sed, awk)
  3. Meccanismi fondamentali della shell BASH (epansione e quoting)
  4. Controllo I/O, comandi composti, operatori su stringhe
  5. Cenni sulla programmazione (costrutti di controllo, gestione opzioni)
Introduzione alla programmazione di sistema
  1. Strumenti per la programmazione C (compilazione separata)
  2. Standard Posix, System Call, gestione degli errori
  3. Chiamate di sistema relative ai file (open, close, read, write...)
  4. SC avanzate sui file (stat) e SC su directory (getdents)
  5. Gestione di processi (fork, exec)
  6. Gestione di thread (pthread_create, pthread_join...)
  7. Inter-Process Communication di base: semafori e mutex
  8. IPC di base: pipe con nome e anonimi
  9. Gestione dei segnali
  10. Socket
     

Bibliografia

Libro di testo: Testi di consultazione:
  1. Vincenzo Gervasi, Susanna Pelagatti, Salvatore Ruggieri, Francesca Scozzari, Alessandro Sperduti, Programmazione di sistema in linguaggio C - Esempi ed esercizi, Servizio Editoriale Universitario di Pisa, 2003. € 7.
  2. Graham Glass and King Ables, Unix for programmers and users, Prentice Hall, ISBN 0-13-046553-4, 2003. $ 68.00.
  3. Al Kelley e Ira Pohl, C - Didattica e programmazione, Pearson Education, ISBN 88-719-2219-0, 2004. € 39.00.
  4. Brian W. Kernighan e Rob Pike, Programmazione nella pratica, Pearson Education, ISBN 88-719-2072-4, 1999. € 29.95.
  5. Dennis M. Ritchie e Brian W. Kernighan, Il linguaggio C - Corso di programmazione, Pearson Education, ISBN 88-719-2200-x, 2004. € 25.
La dispensa 1 è un compendio su C e programmazione di sistema. Il testo 3 è un ottimo riferimento per il linguaggio C, assieme al classico, ma più ostico, 5. Il volume 4 è un manuale per migliorare lo stile di programmazione, una specie di ricettario su come organizzare i programmi in modo intellegibile, con esempi da C e Java. Infine, 2 è l'ultima versione di un testo classico per la programmazione sotto Unix.

Modalità di esame

Il corso prevede come prova lo svolgimento di un progetto, e la valutazione del corso sarà basata sia sulla partecipazione dello studente al corso che sulla discussione del progetto.
Coloro che non dovessero presentare un elaborato ritenuto accettabile entro la data limite stabilita dal docente dovranno presentare nuovamente il progetto nel prossimo anno accademico, ma senza l'obbligo di frequentare nuovamente il corso.

Ulteriore pagina web del corso: http://www.cli.di.unipi.it/~gadducci/LCS-07/index.html


home


email