SISTEMI OPERATIVI E LABORATORIO (Indirizzo Sistemi e Reti)
19 dicembre 2006
Cognome:____________________________________Nome:____________________________
Matricola:___________________________________________
Ricordate che non potete usare calcolatrici o appunti. Siate sintetici nelle vostre risposte, anche quando è richiesto di motivarle, sono sufficienti poche righe per rispondere correttamente. A fianco di ogni esercizio è riportato il numero di punti che prendete se lo svolgete in modo completamente corretto.
ESERCIZIO 1 (8 punti)
a) riportate lo pseudocodice che descrive l’implementazione dell’operazione di wait su un semaforo.
Vedere lucidi usati a lezione, sezione 7.4.2.
b) cosa fa la system call usata nel codice della wait?
la chiamata di block() provoca un context switch. Il processo che ha chiamato block non viene rimesso nella Ready Queue
c) riportate lo pseudocodice che descrive l’implementazione dell’operazione di signal su un semaforo.
Vedere lucidi usati a lezione, sezione 7.4.2.
d) Che effetto ha la system call usata nel codice della signal?
Rimette il processo passatogli come argomento in Ready queue
e) che informazione ci da il valore corrente della variabile semaforica?
Se negativo, il valore assoluto è il numero di processi attualmente sospesi su quel semaforo. Se positivo indica il numero di processi che possono ancora eseguire una wait sul semaforo e
“passarlo” senza venire sospesi.
ESERCIZIO 2 (6 punti)
(ricordatevi di motivare le vostre risposte, ed esplicitate le assunzioni che fate)
Un hard disk è formattato in 216 blocchi da 256 byte ciascuno. Si consideri un file F lungo 216 byte memorizzato nell’hard disk usando l’allocazione indicizzata.
a) quanti accessi al disco sono necessari per leggere il blocco numero 200 di F, assumendo che gli attributi del file siano già in RAM?
Poiché il disco contiene 216 blocchi sono sufficienti 16 bit, ossia due byte per indirizzare un blocco, e un blocco indice può contenere al massimo 128 puntatori. Con un blocco indice sono quindi indirizzabili al massimo 128 blocchi, ossia 128 x 256 = 215 byte di dati = 32K byte. Un solo blocco indice non è quindi sufficiente ad indirizzare F, che è lungo 64K byte e richiede quindi 256 blocchi per essere memorizzato.
Se si usa l’allocazione indicizzata gerarchica, occcorre leggere il blocco indice esterno, uno dei blocchi indice interni (il secondo) e infine il blocco 200 di F. Quindi: 3 accessi in lettura al disco.
Se si usa l’allocazione indicizzata concatenata è necessario leggere il primo ed il secondo blocco indice, e infine il blocco numero 200 di F. Quindi: 3 accessi in lettura al disco.
b) b) quanti accessi al disco sono necessari per leggere l’ultimo blocco di F, assumendo che gli attributi del file siano già in RAM?
In questo caso la risposta per i due possibili tipi di allocazione indicizzata cambia: sono sempre necessari 3 accessi nel caso di allocazione indicizzata gerarchica, ma ne sono necessari 4 nel caso della indicizzata concatenata. Infatti, ogni blocco indice ospita solo 127 puntatori a blocchi del file, e sono necessari tre blocchi indice per tenere traccia di tutti i blocchi del file. Quindi, in totale, 4 accessi al disco.
c) se non si usasse l’allocazione indicizzata, quale altra forma di allocazione dello spazio su disco si potrebbe usare, sapendo che il file può essere acceduto sia modalità sequenziale che diretta?
La variante della allocazione concatenata nota come FAT.
PARTE UNIX
ESERCIZIO 1 (2 punti)
Spiegare il significato dei 9 bit, indicati nell’esempio in carattere neretto (grassetto), che sono elencati nella prima colonna del risultato del comando "ls -l". Esempio di ls -l:
drwxr-xr-x 31 antonio lab 1054 Nov 13 17:13 Applications
drwx--- 16 antonio lab 544 Dec 17 13:52 Desktop
drwx--- 78 antonio lab 2652 Dec 2 14:25 Documents
i nove bit in questione rappresentano i diritti di accesso ai contenuti della directory corrente. Sono da interpretare come tre terne associate a tre categorie di utente (proprietario, gruppo e altri). Per ciascuna categoria è possibile dis/attivare i diritti di lettura, scrittura e esecuzione/attraversamento.
Nell'esempio le tre directory sono leggibili, modificabili ed attraversabili dal proprietario mentre solo la prima è leggibile/attraversabile da tutti. Attraversabile significa che il suo nome può essere utilizzato all'interno di cammini, leggibile che è possibile listarne il contenuto, scrivibile che è possibile modificarne i contenuti, per esempio creando/cancellando file.
ESERCIZIO 3 (3 + 3 punti)
(a) Spiegare cos'è un "file descriptor" (descrittore di file, FD nel seguito) in Unix:
Il termine file descriptor identifica l'indice della tabella detta “user file descriptor table” privata di un processo. Ogni entry di tale tabella è un riferimento a un elemento della file table globale del sistema, che a sua volta si riferisce a un in-core i-node. In pratica ogni file descriptor consente l'accesso a un file aperto dal processo in questione.
(b) Rispondere alle seguenti domande (marca le rispose giuste con una X nella casella corrispondente):
a) un FD: è locale a un processo [X] appartiene a una tabella globale del sistema [ ]
b) un FD: consente l'accesso a un in-core i-node [X] consente l'accesso a più di un in-core i- node [ ]
c) un in-core i-node: è accessibile tramite FD diversi [X] corrisponde a un solo FD [ ]
ESERCIZIO 3 (5 punti)
Dire cosa sono le variabili "condition" nella libreria POSIX-threads e illustrarne l'utilizzo.
Da teoria.