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.