Tema d`esame di Sistemi Operativi I e II e

Transcript

Tema d`esame di Sistemi Operativi I e II e
Tema d’esame
di Sistemi Operativi I e II e Laboratorio
16 luglio 2007
Docenti Luigi Lavazza, Igor Nai Fovino e Matteo Vaccari
Nome e Cognome:
Matricola:
Prima parte
1. (4 punti) Si descriva brevemente la struttura dati a tre livelli di Unix che viene
usata nella lettura o scrittura di un file; si faccia un semplice diagramma.
(a) A cosa serve il file descriptor?
(b) Dove viene salvata la posizione della prossima lettura?
(c) Dove viene conservata la sequenza di blocchi che contiene i dati del file?
1
2. (3 punti) Si dica brevemente (non più di una decina di righe in tutto):
• cosa è il deadlock
• quali sono le condizioni per cui si può verificare
• come viene evitato nel kernel di Linux.
3. (4 punti) Si descriva brevemente in cosa consiste una tabella delle pagine su più
livelli: (a) a cosa serve (b) quali campi contiene una riga del TLB
2
4. (3 punti) Si scriva un programma C equivalente al comando di shell
“cat /etc/passwd | grep pippo 2> /tmp/foo”, utilizzando le chiamate di sistema di Unix.
3
5. (6 punti) Si mostri l’implementazione del meccanismo della “barriera” utilizzando le primitive della libreria pthread. Non è necessario mostrare i dettagli, basta
uno pseudo-codice C, da cui emerga chiaramente l’uso dei meccanismi di sincronizzazione (ovviamente occorre evitare le corse critiche). Se non ricordate esattamente la sintassi delle primitive pthread, usate una notazione sufficientemente
simile e chiara. Il programma illustrativo crea un certo numero di thread che
eseguono una funzione che è necessario specificare nel dettaglio solo per quanto
riguarda la sincronizzazione.
Si ricorda che il meccanismo della barriera funziona come segue:
• ogni processo che arriva alla barriera aspetta gli altri;
• quando anche l’ultimo processo è alla barriera, tutti i processi possono avanzare (la scelta di quale effettivamente debba tornare in esecuzione è demandata allo scheduler).
NB: in questo esercizio la barriera blocca i processi (o thread) una volta soltanto
(non è una barriera bidirezionale).
4
Nome e Cognome:
Matricola:
Seconda parte
6. (4 punti) Un amministratore di sistema vorrebbe realizzare uno script che inverta l’ordine delle righe di ogni file di testo il cui nome contenga una certa stringa
( dove “invertire” significa ad esempio, considerando un file di 10 righe, far diventare la prima riga l’ultima, la seconda riga la penultima e cosi’ via). Piu’ in
dettaglio, si realizzi uno script che:
(a) Prenda come parametro il nome di un file “lista”. Tale file conterrà una lista
di stringhe da cercare (una stringa per ogni riga). Ad esempio potrebbe
contenere:
pu
pi
asc
(b) Analizzi i nomi dei file contenuti nella directory da cui lo script è stato lanciato ed identifichi tutti quelli i cui nomi contengano al loro interno una
delle stringhe specificate nel file “lista”.
(c) Inverta l’ordine delle righe contenute in tali file, salvando i nuovi file cosi’
ottenuti all’interno della directory ~/reverse/ con il nome: “nome_file”_reverse
Si consideri questo esempio esplicativo: il file “lista” contiene le stringhe dell’esempio precedente (pu pi asc). La directory in cui lo script viene lanciato
contiene i seguenti file di testo: “corrente.txt”, “spesa.txt”, “maschere.txt”. In
particolare, il file “maschere.txt” contiene le seguenti righe:
ciao
a
tutti
quanti
Come si noterà il solo file “maschere.txt” contiene nel suo nome una delle stringhe cercate (asc). Esso dovrà quindi essere invertito e salvato in un file
~/reverse/maschere.txt_reverse, il quale conterrà le seguenti righe:
quanti
tutti
a
ciao
Per semplicità si assuma che la directory analizzata contenga solo file di testo.
5
7. (3 punti) Si illustrino brevemente le differenze tra link simbolico e hard link
8. (3 punti) Uno script shell può accettare dei parametri come input. Si descriva
brevemente come accedere a tali parametri nel caso particolare in cui essi siano
più di nove.
6