Papers of Marina Lenisa

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.