Ambienti di Programmazione per il Software di base
Ing. Informatica, triennale, III anno, I periodo (a scelta per la magistrale)
OBIETTIVI DEL CORSO
- Apprendere appieno l’utilizzo dei sistemi operativi basati su Unix (Linux in particolare) e i principali linguaggi di scripting.
- Al termine del corso conoscerete Linux e sia dal punto di vista utente che con delle basi da amministratore e a programmare in C, utilizzando le system call del sistema operativo Linux.
Programma
Introduzione ai sistemi operativi Unix-like.
Storia dei sistemi operativi Unix. Richiamo dei concetti di base sul ruolo e sul funzionamento dei sistemi operativi. Cenni all’architettura dei sistemi operativi monolitici e micro-kernel. I sistemi operativi basati su kernel Linux. Le distribuzioni GNU/Linux. La distribuzione Ubuntu.
Cenni alle problematiche di amministrazione di sistemi GNU/Linux
Installazione e configurazione di una distibuzione GNU/Linux. Installazione e configurazione di applicazioni e servizi locali e di rete. Amministrazione remota di Linux. I processi e i demoni. La gestione del file system. Le quote utente. I file system condivisi: Samba e NFS. Il boot, il kernel e i moduli.
Programmazione della shell
Introduzione all’utilizzo della shell BASH. I comandi per la gestione del file-system e dei processi attivi. La redirezione dell’input/output e le pipe. Programmazione di semplici script di shell. Script per l’avvio e l’arresto dei servizi. Le variabili utente e di sistema. Il file .bashrc. Cicli e istruzioni condizionali. Espressioni regolari
Elementi di programmazione in C
La sintassi del linguaggio C. Sviluppo di semplici programmi in C. Utilizzo della suite gcc (GNU Compiler Collection). I tipi di base. L’input/output in C. Le stringhe in C. Utilizzo dei puntatori. Vettori e matrici dinamici in C. Le funzioni nel linguaggio C. Semantica del trasferimento del flusso di controllo tra funzioni: funzionamento dello stack, record di attivazione, passaggio dei parametri. Realizzazione di librerie statiche e dinamiche. Strutture. Array di strutture. Puntatori a strutture. Implementazione di liste con le strutture. Il problema del buffer overflow.
System call di Linux
Modalità Kernel e modalità Utente. Le system call. I processi in Linux e relative system call (fork, wait, exit, kill, ecc.). System call (brk, mmap, unmap) relative alla memoria. Swapping. Paginazione.
Il file system di Linux. Implementazione del file system in Linux. Le principali system call per l’I/O in Linux.: creat, open, read, write, close, lseek, stat.
Materiale Didattico
Libri di Testo e siti Web
Linux Documentation Project, http://sunsite.unc.edu/linux
“Guida completa Linux” - Peterson, MC Graw Hill.
In italiano:
Amministrare Gnu Linux, Simone Piccardi
http://www.pluto.it/ildp/ Materiale Linux in italiano
http://www.pluto.it/ildp/guide.html tutte le guide
Altro materiale didattico
Lucidi delle lezioni e Dispense integrative, sulla pagina Teams del corso Lezioni anni precedenti
Consigliati e Approfondimenti sul C
Kernighan and Ritchie, C Programming Language (la base)
Stephen Prata, C Primer Plus (molto completo)
http://c.learncodethehardway.org/book/
http://cslibrary.stanford.edu/101/EssentialC.pdf (bignami)