Laboratorio di Sistemi Operativi I
Informatica e Tecnologie Informatiche
Anno Accademico 2004-2005
Mailing list:
sistemioperativi@di.uniroma1.it
Docente
- Ing. Giorgio Richelli (Informatica/Tecnologie Informatiche)
Descrizione del corso
L'obbiettivo del corso è di far apprendere alcuni concetti fondamentali della programmazione concorrente.
Componente essenziale del corso è lo sviluppo di un progetto in laboratorio, che aiuterà lo studente a familiarizzare con la
programmazione di sistema in C, a fargli sviluppare manualità nell'utilizzo di Unix (GNU/Linux) e la capacità di analizzare sperimentalmente il comportamento di un sistema operativo moderno.
Programma
- Introduzione
- Il File System
- File, directory, link
- Primitive su file e directory (open, read, write ...) [ALP B.1, B.2, B.5] [ALP B.6]
- Diritti di accesso ai file [AL 72.1, 72.2 (parte 17)]
- Cenni sulla struttura del filesystem, gli inode
- Processi
- Identificatore di un processo [ALP 3.1]
- il ciclo di vita di un processo
- La creazione di un processo: fork,exec,wait [ALP 3.2]
- Exit, gli Zombie [ALP 3.4]
- La Shell
- Passaggio di parametri [ALP 2.1.1, 2.1.2, 2.1.5]
- Accesso alle variabili di environment [ALP 2.1.6]
- Inter Process Communication [Cap. 8 del tutorial Multi-Process Programming Under Unix
]
- Segnali, Semafori, Memoria Condivisa, Pipes
- Socket (cenni)
- Programmazione Parallela
- Deadlock, Race conditions (esempi)
Testi di riferimento
[ALP] Advanced Linux Programming
, by Mark Mitchell, Jeffrey Oldham, and Alex Samuel, published by New Riders Publishing. ISBN 0-7357-1043-0. First Edition, June 2001.
[AL] Appunti Linux
, di Daniele Giacomini, ultima edizione 21 luglio 2002 (Nota: l'intera opera consiste di circa 4700 pagine scaricabili in un unico file gzip di 22 mega. Per questo motivo, sotto trovate i link alle sole parti di nostro interesse).
Testi consigliati
Kay A. Robbins and Steven Robbins,
Unix Systems Programming: Communication, Concurrency, and Threads. Prentice Hall, 2003.
W. Richard Stevens,
Advanced Programming in the UNIX(R) Environment. Addison-Wesley, 1992.
Altri riferimenti
Tutorials
Esercitazione guidata in laboratorio
Altra Documentazione Linux
Programming in C - UNIX System Calls and Subroutines using C
Documentazione Latex
Appunti
GnuplotLatex.pdf: in poche righe, come includere grafici Gnuplot in Latex.
Modalità d'esame
Per poter sostenere l'esame di Laboratorio è
necessario:
- iscriversi come gruppo prima della data comunicata a lezione (orientativamente entro giovedì 18 novembre).
- l'iscrizione può essere effettuata, personalmente a lezione oppure via email, comunicando:
- i cognomi delle persone componenti il gruppo
- almeno una delle userid dei componenti.
-
-
- La userid è quella che ogni studente dovrebbe avere fin dal primo anno. Normalmente e' nella forma u111(matricola) oppure (cognome), dove (matricola) è il numero di matricola dello studente e (cognome) il suo cognome.
- consegnare il progetto 2004-2005 e la relazione entro la scadenza fissata.
- prenotarsi tramite l'apposita pagina
almeno tre o quattro giorni prima dell'esame, per permettere di valutare la durata di ogni sessione
Il progetto e' un lavoro di gruppo (max. 3 persone) che, in casi eccezionali, può essere svolto individualmente.
In ogni caso, il progetto deve essere un lavoro originale del gruppo stesso. Non e' quindi possibile condividere parti di codice o relazione tra gruppi diversi. Discussioni tra gruppi, scambi di idee ed in genere tutto ciò che vi aiuta ad apprendere è invece legittimo ed apprezzato. Fate attenzione: effettueremo una verifica utilizzando un tool automatico, ed i casi di copiatura saranno sanzionati.
Consegnato il progetto, esso darà la possibilità di sostenere l'esame entro
settembre 2006. Sono inoltre validi fino a settembre 2005 i progetti consegnati durante l'anno accademico 2003-2004.
Chi ha un progetto in corso di validità può accedere alla discussione individuale del progetto. Direttamente senza altri prerequisiti se iscritto ad uno dei due corsi 3+2. Solo dopo aver superato con voto sufficiente lo scritto e l'orale di Sistemi Operativi se iscritto al Diploma, alla Laurea quadriennale o alla Laurea quinquennale.
La discussione del progetto può essere fatta in uno dei cinque appelli distribuiti durante l'anno nel seguente modo: tre a gennaio-febbraio, uno a giugno-luglio ed uno a settembre.
Domande ricorrenti
"Ma quali propedeuticità ha il corso di Laboratorio di Sistemi Operativi 1?"
Risposta: A chi si è immatricolato nell'A. A. 2003/2004, le regole di propedeuticità richiedono di aver passato gli esami di
Programmazione 2 e di
Architetture 2, oltre a
tutti gli esami di matematica del primo anno (
Logica,
Calcolo Differenziale,
Calcolo Integrale). Per gli immatricolati nell'A. A. 2002/2003 le regole sono diverse. In particolare, per il nostro corso non sono previste propedeuticità. Per gli immatricolati nell'A. A. 2001/2002 e precedenti, le regole sono diverse ancora, in generale. Nel nostro caso, però, non cambiano, e di nuovo non sono previste propedeuticità. Se vi interessa l'argomento anche per gli altri corsi, andate alla pagina
http://w3.uniroma1.it/dipinfo/lauree/prop.asp
.
"Ho passato l'esame! Ora come faccio a togliere la mia iscrizione alla mailing list?"
Risposta: Bravo. Adesso, se vuole togliere la sua iscrizione alla mailing list, segua link riportato nel menu' in cima a questa pagina. Si troverà su una pagina dove, quasi in fondo, può inserire la sua e-mail ed editare alcune opzioni, tra cui la possibilità di togliersi dai membri della lista (
unsubscribe).
Domande ricorrenti degli studenti "vecchi" (iscritti al Corso di Laurea quinquennale, al Diploma, od al Corso di Laurea quadriennale)
"Ho consegnato il progetto ma non ho ancora passato lo scritto di Sistemi Operativi, adesso che il corso cambia, perdo tutto?"
Risposta: No. Il progetto continua a valere secondo le regole specificate nelle modalità d'esame.
"Io ho già passato Sistemi Operativi+Laboratorio, quanti crediti mi saranno assegnati se passo alla Laurea di primo livello?"
Risposta: 12 crediti.
"Io invece non ho ancora passato Sistemi Operativi, ma ho già consegnato il progetto di Laboratorio. Se faccio il passaggio di al nuovo ordinamento posso discutere il solo Laboratorio e verbalizzarlo?"
Risposta: Si, entro la scadenza del suo progetto.
"Ed in questo caso, quanti crediti ottengo?"
Risposta: 4 crediti.
Domande ricorrenti sul progetto
"Cosa vuol dire 'il server esamina periodicamente il contenuto di una directory'?"
Risposta: Significa che il processo che implementa il server eseguirà un loop infinito in cui viene aperta la directory specificata. Nel caso in cui esistano dei file questi verranno elaborati, uno per volta, come indicato nelle specifiche. Nel caso in cui, invece, la directory sia vuota, il server si sospenderà per un tempo limitato (qualche secondo) e ripeterà il ciclo.
"Devo necessariamente usare fork()/exec()?"
Risposta: Si, per creare i processi 'calcolatori' deve essere usata la sequenza fork()/exec()
"E' possibile passare parametri sulla linea comando ad un processo 'figlio'?"
Risposta: Si, senza esagerare. Si tenga presente che la lunghezza massima della linea comando, in genere, non può superare qualche KB.
"Quanto deve essere grande il buffer condiviso"?"
Risposta: Una dimensione ragionevole è dell'ordine di qualche KB, come indicato anche
qui
"E' obbligatorio usare i semafori per la sincronizzazione?"
Risposta: Si, per quanto riguarda l'accesso al buffer condiviso. E' possibile usare altre primitive di IPC per il resto del progetto
"Il file di output può essere scritto dai processi 'figli'?"
Risposta: No. L'unico processo abilitato a leggere e scrivere file e' il 'server'.
"Come si effettua la consegna del progetto nell'account in laboratorio?"
Risposta: Secondo le modalità definite
qui
"Quali funzioni si possono usare e quali no per lo sviluppo del progetto?"
Risposta: In generale, si possono usare tutte le funzioni del Kernel e delle librerie standard, eccetto nella gestione dei file su disco, dove possono essere utilizzate solo le funzioni del Kernel. Esempi: sì a
atoi, sprintf, sscanf, sleep, strcat, strcmp,
no a
fopen, fclose, fread, fwrite.
Domande ricorrenti sul progettino
"Devo necessariamente usare fork()/exec()?"
Risposta: No, per il progettino basta usare la fork(). E' però possibile, se desiderato, usare anche la exec().
"E' possibile passare parametri sulla linea comando ad un processo 'figlio'?"
Risposta: Si, Si veda anche quanto indicato per il progetto.
"In che modo devo assegnare il lavoro ai processi 'esploratori'?"
Risposta: Esistono varie possibilità, tutte più o meno equivalenti. L'unica specifica da rispettare è che il lavoro non venga assegnato in modo completamente sbilanciato.
"Come posso leggere e scrivere i file di input/output?"
Risposta: Usando le primitive read()/write() e, a scelta, sprintf(), sscanf(), atoi, eccetera. Si veda anche quanto indicato per il progetto.
"E' obbligatorio usare semafori/segnali, etc., per la sincronizzazione?"
Risposta: In realtà, per il progettino non sarebbe necessario alcun meccanismo di IPC.
"Il file di output può essere scritto dai processi 'figli'?"
Risposta: No. L'unico processo abilitato a leggere e scrivere file e' il padre.
"Come si effettua la consegna del progettino?"
Risposta: Insieme al progetto, secondo le modalità definite
qui
--
GiorgioRichelli - 23 Dec. 2004