Papers of Marina Lenisa

Corso di LABORATORIO DI SISTEMI OPERATIVI

Laurea in Informatica
A.A. 2001/2002



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 Basi di Linguaggio C.

2 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.

3 Programmazione di sistema I.
- Controllo di processi.
- File system.
- Comunicazione tra processi.
- Threads e Multithreding.


4 Amministrazione di sistema.
- Installazione di Linux.
- Gestione degli account utente.
- Installazione di servizi di rete (server popd, ftpd, etc.).

5 Programmazione di Sistema II:

5.1 Applicazioni e Approfondimenti.

5.2 Programmazione real-time:
- Gestione asincrona dell'input/output.
- Gestione di agenti basata sui principi architetturali dei S.O.
- La piattaforma robocup come test per l'esecuzione degli agenti.



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) A. D'Angelo, "Paradigmi di Programmazione Concorrente", dispense, www.dimi.uniud.it/~dangelo/OS/os.html.


ALTRI RIFERIMENTI:

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

5) K. Haviland, D. Gray, B. Salama, "UNIX System Programming", Addison Wesley, 2a edizione, 1999. oalgebraic representation of timed transition systems. Representing tim



Progetto I: Il linguaggio C

Si scriva un programma C simple_tail, versione semplificata del comando UNIX tail, che stampa le ultime 10 linee del proprio input. Per memorizzare le linee in input, si utilizzi un array di stringhe con terminatore il NULL-pointer. Il programma deve poter accettare il parametro opzionale -r sulla linea di comando. Nel caso tale parametro sia presente, il programma dovrà stampare le linee in ordine inverso.

Si commenti opportunamente il codice.

Si provi il programma su alcuni esempi significativi e si scriva una breve relazione, discutendo le soluzioni proposte ed i risultati dei test.

Il termine di consegna del progetto è: 14 Gennaio 2002.

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: La shell Unix

Si fornisca una soluzione iterativa al seguente problema, utilizzando l'interprete di comandi Unix bash.

Si progetti uno script che prende come parametri il nome di una directory dir ed una stringa str , e stampa su standard output tutti i file contenuti in dir e nelle sue sottodirectory (dirette e indirette), il cui nome contiene la stringa str.
Tali file devono essere stampati in ordine dal più recente al meno recente, insieme con la relativa data; l'output va organizzato in una tabella.

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 è: 8 Aprile 2002.

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 III: Programmazione di sistema in Unix

Si risolva uno a sceltra tra i seguenti due esercizi:

Esercizio 1

Si scriva un programma C che realizza una versione semplificata del comando UNIX find. Il programma dovrà ricevere sulla linea di comando il nome di una directory dir ed una stringa str e dovrà visitare l'intero albero di directory e file che ha come radice dir, stampando su standard output tutti i file i cui nomi hanno come suffisso la stringa str e segnalando se si tratta di directory o file ordinari.
Il programma dovrà utilizzare le system call per la gestione di file e directory.

Esercizio 2

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 opportunamente il codice.

Si provi il programma 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 è: giovedi 20 giugno 2002. I progetti potranno essere discussi in laboratorio giovedi 6 giugno alle 14.00, giovedi 20 giugno alle 14.00, venerdi 5 luglio alle 14.00, oppure venerdi 6 settembre alle 14.00.