Prova d`esame 16 giugno 2009

Transcript

Prova d`esame 16 giugno 2009
Laboratorio di Sistemi Operativi: Prof.ssa A. Rescigno
Anno Acc. 2008-2009
Prova d’esame 16 giugno 2009
Università di Salerno
Nome e Cognome:
1
Matricola:
2
/12
3
/32
4
/12
5
/20
6
/12
/12
tot
/100
Spazio riservato alla correzione
1. 12 punti
a) Spiegare che cosa accade mandando in esecuzione il seguente script
for i in *
do
if [ -d "$i" ]; then
cat $i/* > $i.txt
fi
done
Prova d’esame
2
b) Considerando che il comando bash wc-w conta il numero di parole nel file dato come
argomento, o passate dallo standard input se non ne viene dato alcuno, eseguire il seguente
esercizio.
La cartella esami contiene le sottodirectory apr,lug,sett. Supponendo che la vostra directory
corrente sia esami, scrivere uno script costituto da (sequenze di) comandi (di una riga ciascuna)
tali da:
- elencare i nomi dei file con estensione .doc e .pdf contenuti nella directory apr
- contare il numero totale di file .doc contenuti nelle sottodirectory di esami
- creare un alias per contare il numero di file .pdf contenuti nelle sottodirectory lug e sett
- lanciare tale alias
Prova d’esame
3
2. 32 punti
a) (6 punti) Scrivere, utilizzando esclusivamente system call, un programma C che legga da
standard input 10 interi e li sommi scrivendo il risultato in un file di nome File-Output a
partire dal nono byte. Il file File-Output deve essere creato se non esistente e deve avere i
permessi di scrittura per il solo proprietario (se il file é gia esistente il suo vecchio contenuto
deve essere rimosso e i permessi devono essere modificati come richiesto).
b) (20 punti) Denotando con prog1.out l’eseguibile del programma di cui al punto a), scrivere
un programma C che, utilizzando esclusivamente system call, esegua in maniera consecutiva i
seguenti passi:
- mandi in esecuzione prog1.out prendendo i 10 interi da un file di nome File-Input ;
- attenda che sopraggiunga un segnale dall’utente (per esempio SIGUSR1);
- prenda un ulteriore intero che gli venga dato dall’utente e lo sommi ai precedenti 10 interi
scrivendo il risultato sullo standard-output.
Prova d’esame
4
d) (6 punti) Descrivere due possibili modi in cui settare i permessi di prog2.out, di File-Output
e di File-Input per fare in modo che tutti possano eseguire con successo. Giustificare la
risposta.
Prova d’esame
5
3. 12 punti
Si consideri l’esecuzione di questo programma, supponendo che il processo che lo esegue abbia
pid uguale a 1000 e che i processi creati successivamente abbiano pid consecutivi e crescenti:
main()
{ int i;
while ( ( i=fork() ) >0 )
printf("i= %d \n", i);
Dire, giustificando le risposte, se e quali processi vengono creati durante l’esecuzione del precedente programma e che cosa viene visualizzato sul terminale.
Prova d’esame
6
4. 20 punti
In un sistema UNIX, vengono eseguite in sequenza le seguenti operazioni:
(a) il processo P apre il file F, la cui lunghezza corrente di 350 caratteri;
(b) il processo P esegue la chiamata read per leggere 50 caratteri dal file F;
(c) il processo P crea un hard link HF al file F;
(d) il processo P apre il file HF ed esegue la chiamata read per leggere 100 caratteri da HF;
(e) il processo P esegue con successo una fork, generando il processo P1;
(f) il processo P1 crea un symbolic link SF al file HF;
(g) il processo P1 esegue la chiamata read per leggere 300 caratteri da HF;
(h) il processo P1 apre il file SF ed esegue la chiamata read per leggere 300 caratteri da SF;
(i) il processo Q, padre del processo P, apre il file F;
(j) il processo Q legge 150 caratteri dal file F.
a) (10 punti) Disegnare l’evoluzione delle Process-Table, File-Table e v-node-Table al progredire delle operazioni descritte precedentemente.
Prova d’esame
b) (10 punti)
Giustificando ognuna delle risposte, si chiede:
1) il valore del current offset del file F per il processo P dopo la operazione b);
1) il valore del current offset del file HF per il processo P dopo la operazione d);
2) il valore del current offset del file HF per il processo P1 dopo la operazione g);
3) il numero di caratteri letti dal processo P1 con la operazione g);
4) il valore del current offset del file SF per il processo P1 dopo la operazione h);
5) il valore del current offset del file HF per il processo Q dopo la operazione i);
6) il valore del current offset del file HF per il processo Q dopo la operazione l).
7
Prova d’esame
8
5. 12 punti
Dato il seguente programma
int main(void) {
pid_t
pid1, pid2, pid3;
atexit(exit1);
if ((pid1 = fork())== 0)
{atexit(exit3);
printf("ho finito 1: \n");
exit(0);
}
wait( );
atexit(exit2);
if ((pid2 = fork())== 0)
{atexit(exit3);
printf("ho finito 2:\n");
_exit(0);
}
wait( );
atexit(exit3);
if ((pid3 = fork())== 0)
{atexit(exit3);
printf("ho finito 2:");
_exit(0);
}
wait( );
printf("ho finito il main\n");
exit(0);
}
static void exit1(void) {
printf("sono il primo handler\n");
}
static void exit2(void) {
printf("sono il secondo handler\n");
}
static void exit3(void) {
printf("sono il terzo handler\n");
}
sia a.out il corrispondente eseguibile. Spiegare, giustificando la risposta, che cosa succede
mandando in esecuzione:
a) a.out
b) a.out > file
cat file
Prova d’esame
9
Prova d’esame
10
6. 12 punti
Descrivere il funzionamento della pipe, dettagliando il comportamento in caso di read e write.
Prova d’esame
11
FOGLIO DA UTILIZZARE PER LA BRUTTA
Prova d’esame
12
FOGLIO DA UTILIZZARE PER LA BRUTTA
Prova d’esame
13
FOGLIO DA UTILIZZARE PER LA BRUTTA