Corso di LABORATORIO DI SISTEMI OPERATIVI
Laurea in Informatica
A.A. 2002/2003
PROGRAMMA DEL CORSO
OBIETTIVO: Il corso ha l'obiettivo di fornire allo studente di Sistemi
Operativi strumenti pratici per giungere ad una migliore comprensione
del materiale proposto in tale corso, in particolare per quanto riguarda
l'utilizzo da programmatore del sistema UNIX, e la programmzaione concorrente.
METODO: Le lezioni del corso sono costituite in prevalenza da
esercitazioni guidate dal docente sui sistemi di calcolo dei
Laboratori (Sistema Operativo UNIX e sue varianti, e sue principali
applicazioni).
CONTENUTO:
0 Il sistema Operativo UNIX. Struttura, interfaccia utente, varianti (Solaris,
Linux).
1 La shell UNIX. Ruolo e varianti. Procedura di login.
Organizzazione del file system. Manuale online. La shell bash: espansione
del pathname, ridirezione del I/O, pipe, jobs in background, il comando
history, editing della linea di comando, completamento di comandi. Gli
editors vi e (X)emacs, il comando make.
Comandi principali della shell:
- Gestione di files.
- Gestione di processi.
- Monitoraggio della memoria.
- Comandi filtro: ricerca, ordinamento, editing.
Shell script. Variabili, passaggio dei parametri, strutture di controllo,
login script.
2 Basi di Linguaggio C.
3 Programmazione di sistema.
- Controllo di processi.
- File system.
- Comunicazione tra processi.
- Threads e Multithreding.
BIBLIOGRAFIA:
1) B.W. Kernighan, D.M. Ritchie, "Linguaggio C", Jackson, 2a edizione, 1989.
2) G. Glass, K. Ables, "UNIX for Programmers and Users", Prentice
Hall, 2a edizione, 1999.
3) K. Haviland, D. Gray, B. Salama, "UNIX System Programming", Addison
Wesley, 2a edizione, 1999.
ALTRI RIFERIMENTI:
4) P. Cornes, "The Linux A-Z", Prentice Hall, 1997.
LUCIDI DELLE LEZIONI:
1) La shell UNIX :
- 03/10/02 : Introduzione alla shell, tipi di shell,
organizzazione dei file, comandi base per la gestione dei file,
permessi ai file, link.
- 10/10/02 : Metacaratteri della shell, abbreviazione del
pathname, ridirezione dell'I/O, pipeline.
- 17/10/02 : History list, command line editing, command line
completion, alias, sequenze e raggruppamenti di comandi, esecuzioni
condizionali.
- 24/10/02 : Gli editor vi e emacs.
- 31/10/02 : Comandi per il controllo di processi e job
e per il monitoraggio dello spazio su disco e memoria.
- 07/11/02 : comandi per il confronto e la ricerca di file;
comandi filtro.
- 14/11/02 : il comando sed; introduzione agli script; variabili,
variabili di ambiente, parametri, variabili di stato; login script.
- 21/11/02 : comandi per la gestione del flusso di controllo;
esempi di script.
- 28/11/02 : l'utility Unix awk.
2) Il linguaggio C :
- 16/01/03 : introduzione al linguaggio C, struttura dei programmi,
compilazione ed esecuzione, la funzione printf e le sequenze di escape,
i tipi base.
- 30/01/03 : Le funzioni in C.
- 06/02/03 : Puntatori e vettori; la funzione di libreria scanf;
argomenti sulla linea di comando.
- 20/02/03 : Strutture in C; accesso a file.
3) Programmazione di sistema :
- 27/02/03 : Programmazione di sistema: processi.
- 06/03/03 : Un programma che simula la shell Unix.
- 13/03/03 : L'ambiente di un processo. Il II progetto.
- 16/04/03 : System call per l'accesso a file. Gestione di un hotel.
- 23/04/03 : System call per l'accesso a file. Memory mapping.
- 07/05/03 : System call per la gestione di directory.
- 14/05/03 : Comunicazione tra processi: pipe. Il gioco guardie
e ladri.
- 21/05/03 : Record locking in unix con la system call fcntl.
- 28/05/03 : Socket.
- 05/06/03 : III progetto: Programma per simulare un club di golf.
PROGETTO I: La shell Unix
Si progetti uno script per la shell bash che accetta come
parametri una sequenza di nomi di file e rimuove, per ciascun
parametro, tutti i file del sistema (rimuovibili) aventi quel nome, a
parte il più recente.
Si commenti opportunamente il codice.
Si provi lo script su alcuni esempi significativi e si scriva una
breve relazione, discutendo la soluzione proposta ed i risultati dei
test.
Il termine di consegna del progetto è: 16 Gennaio 2003.
Si consiglia di svolgere l'esercizio a gruppi di 2-3 persone.
La discussione dei progetti avverrà durante le lezioni del corso
di Laboratorio.
PROGETTO II: Il C e le chiamate di sistema
Modificare il programma smallsh della lezione
del 06/03/03, aggiungendo le seguenti funzionalità (dopo aver
implementato le funzioni gettok e runcommand
lasciate per esercizio):
- aggiungere il comando exit per terminare l'esecuzione
della shell;
- implementare il comando cd per cambiare la directory
corrente;
- aggiungere la possibilità di riconoscere ed ignorare i
commenti (i.e., tutto ciò che segue il carattere speciale
#);
- fare in modo che, usando il metacarattere di escape
\, sia possibile includere i caratteri speciali (e.g.
spazi, tabulazioni, &, ;, #) negli argomenti dei
comandi.
Commentare opportunamente il codice.
Il termine di consegna del progetto è: giovedi 10 aprile.
La relazione dovrà essere consegnata in tale data
durante la lezione di Laboratorio del Dott. Scagnetto.
La discussione dei progetti avverrà in seguito
durante le lezioni del corso
di Laboratorio.
Si consiglia di svolgere l'esercizio a gruppi di 2-3 persone.
PROGETTO III: Programmazione concorrente in Unix
Scrivere un programma C per simulare un club di golf, seguendo le
direttive esposte nella lezione del 05/06/03.
Commentare opportunamente il codice.
Il termine di consegna (senza ritardo) del progetto è:
giovedi 3 luglio.
Il progetto potrà essere presentato anche in seguito, ma in tal caso
si terrà conto del ritardo nella valutazione.
I progetti potranno saranno consegnati e discussi in Laboratorio nelle
seguenti date: giovedi 12 giugno (ore 10.50), giovedi 19 giugno (ore 9.00),
giovedi 3 luglio (ore 9.00),
giovedi 24 luglio (ore 9.00), lunedi 1 settembre (ore 9.00).
Si consiglia di svolgere l'esercizio a gruppi di 2-3 persone.