Papers of Marina Lenisa

Corso di LABORATORIO DI SISTEMI OPERATIVI

Diploma di Informatica
A.A. 1999/2000



PROGRAMMA DEL CORSO

- Sistema Operativo UNIX. Struttura, interfaccia utente, varianti (Solaris, Linux).

- Introduzione alla shell UNIX. Ruolo e varianti. Procedura di login, organizzazione del file system, manuale online. Gli editors vi e (X)emacs.

- Richiami ed esercizi di programmazione in linguaggio C.

- Comandi principali della shell per
1) la gestione di processi: ps, top;
2) il monitoraggio della memoria: df, du, free, top.

- Comandi filtro: ricerca (grep, find), ordinamento (sort), editing (sed, cut, paste).

- Shell script. Variabili, passaggio dei parametri, strutture di controllo, login script.

- Programmazione di sistema.
1) Controllo di processi: le system call fork(), exec(), wait(), exit(), getpid(), etc.
2) File system. Apertura, lettura, scrittura di files: le system call open(), creat(), access(), read(), write(), lseek(). I/O bufferizzato e non bufferizzato. Tempi di esecuzione di processi. Inode e gerarchia di directory. Accesso agli attributi dei file tramite la system call stat(). Modifica di attributi: chmod(), umask(), truncate(), etc. Creazione, rimozione di directory: mkdir(), rmdir(). Creazione, rimozione di link(): link(), unlink(). Apertura e lettura di directory: opendir(), readdir().
3) Comunicazione tra processi (IPC). Pipe, Named pipe. Shared memory: le system call shmget(), shmat(), shmdt(). Semafori: semget(0, semctl(), semop().



BIBLIOGRAFIA:

1) P. Cornes, "The Linux A-Z", Prentice Hall, 1997.

2) B.W. Kernighan, D.M. Ritchie, "Linguaggio C", Jackson, 2a edizione, 1989.

3) W.R. Stevens, "Advanced Programming in the Unix environment", Addison Wesley (Cap. su System V IPC).



Progetto I: La shell Unix

Si risolvano i seguenti esercizi, usando l'interprete di comandi Unix bash:


Esercizio 1

Si scriva uno script che accetta un numero arbitrario di parametri, ciascuno dei quali corrisponde al pathname assoluto di una directory, e fornisce in output l'altezza dell'albero di ciascuna directory.
Il programma deve produrre su stdout il seguente output:

DIRECTORY ALTEZZA
dir_1 n_1
... ...
dir_k n_k

Si gestiscano gli errori. Ovvero, il programma dovrà cntrollare che i parametri corrispondano a pathname assoluti di directory, altrimenti si forniscano opportuni messaggi di errore su stderr.


Esercizio 2

Si scriva uno script che riceve come parametri un numero arbitrario di files TEXT, contenenti in ciascuna riga un nominativo, e produce in output il contenuto dei files organizzandolo nel massimo numero di colonne (di uguale larghezza), compatibile con la larghezza dello schermo.
Si gestiscano opportunamente eventuali errori relativamnte ai parametri.



Si commenti opportunamente il codice.

Si testino i programmi su alcuni esempi significativi e si scriva una relazione, discutendo le soluzioni proposte e i risultati dei test.

Il termine di consegna del progetto è: 30 Marzo 2000.





Progetto II: Programmazione in Unix -- Files

Si risolvano i seguenti esercizi:


Esercizio 1

Si scriva un programma C per copiare lo standard input sullo standard output, utilizzando le system call read() e write(). Il programma dovrà ricevere come parametro opzionale sulla linea di comando la dimensione del buffer per le operazioni di I/O.

Si testi il programma su esempi significativi e si discuta l'efficienza del programma al variare della dimensione del buffer.


Esercizio 2

Si scriva un programma C che realizza una versione semplificata del comando UNIX ls. Il programma dovrà ricevere sulla linea di comando una lista di file ordinari e directory e dovrà fornire, per ciascun file, la data dell'ultima modifica, per ciascuna directory, ricorsivamente, la data dell'ultima modifica di ogni file nell'albero della directory stessa.

Il programma dovrà utilizzare le system call per la gestione di file e directory.



Si commenti opportunamente il codice.

Si testino i programmi su alcuni esempi significativi e si scriva una relazione, discutendo le soluzioni proposte e i risultati dei test.

Il termine di consegna del progetto è: 5 Maggio 2000.





Progetto III: IPC in Unix (Facoltativo)

Si scriva un programma C che esegue una fork per creare un processo figlio e mette in comunicazione processo padre e processo figlio attraverso il meccanismo di IPC della memoria condivisa. Il processo padre copia nella memoria condivisa il contenuto di un file (passato come parametro), carattere per carattere, mentre il processo figlio stampa su standard output i caratteri contenuti nella memoria condivisa. Si gestisca opportunamente il problema della sincronizzazione dei due processi. Si commenti il codice.

Il termine di consegna del progetto è: 5 Giugno 2000.





I programmi devono poter essere compilati ed eseguiti senza errori sul sistema di calcolo presso il laboratorio del primo biennio.
I progetti devono essere inviati (come file TEXT) per posta elettronica al seguente indirizzo: lenisa@dimi.uniud.it.




Valutazione del I Progetto:

GRUPPO DATA DI CONSEGNA VALUTAZIONE
Paolini, Pitzalis 31/3/00 A
D'Alpaos, Peronio 7/4/00 A
Gregoroni, Sumin 7/4/00 A
Battistuzzi, Cigana, Vuano 10/4/00 B/A
Brach, Feresin 10/4/00 B/A
Cemin 10/4/00 B
Bernardis, De Falco, Zurco 11/4/00 B/A
Bianchi, De Biasio, Gimona 14/4/00 B/A
Boschian, Buzzulini, Pagliaro, Pozzobon 17/4/00 B+
Fantin, Rizzi 18/4/00 B+
Granzotto 9/7/01 B/A
Makuct, Rocco 27/4/00 B
Sforzin 12/5/00 C
Fontana 3/7/00 B
Tami 13/7/01 B
Viani a.a. 97/98 A





Valutazione del II Progetto:

GRUPPO DATA DI CONSEGNA VALUTAZIONE
Boschian, Buzzulini, Pagliaro, Pozzobon 15/5/00 A
Bernardis, De Falco, Zurco 16/5/00 A
Bianchi, De Biasio, Gimona 17/5/00 A
Cemin, Sumin 22/5/01 B
Granzotto 9/7/01 B/A
Makuct, Rocco 22/5/00 B
Brach, Feresin 23/5/00 B
Battistuzzi, Cigana, Vuano 8/6/00 B+
Fantin, Rizzi 12/6/00 B
D'Alpaos, Peronio 12/6/00 B++
Paolini, Pitzalis 3/7/00 A
Fontana 4/7/00 B
Cemin, Sumin 15/5/01 C
Tami 13/7/01 B





Valutazione del III Progetto:

GRUPPO DATA DI CONSEGNA VALUTAZIONE
D'Alpaos, Peronio 30/6/00 A
Paolini, Pitzalis 3/7/00 A