Sei sulla pagina 1di 16

Esercizi INPUT / OUTPUT

Esercizio 1.8
Si supponga di effettuare le seguenti operazioni in sequenza su un sistema RAID livello 5 costituito
da 5 dischi identici (inizialmente vuoti) e con blocchi (strip) da 1 byte:
(1) Scrittura della sequenza di byte:
01000101, 00000110, 10110100, 11101101, 11000111, 10000101,
01110111, 01010101

(2) Lettura secondo e settimo byte di dati


(3) Modifica del terzo byte di dati da 10110100 a 01001011

Per ogni punto, s’illustrino le operazioni compiute dal sistema, evidenziando quante READ e quante
WRITE vengono effettuate, e quante di queste sono fatte in parallelo.

NOTA:
• Per ognuno dei suddetti punti, il controller RAID riceve i comandi di scrittura/lettura di byte
come un'unica richiesta.
• L'ordine di scrittura sui dischi è da sinistra verso destra, dall'alto verso il basso.
• Racchiudere ogni blocco di parità tra parentesi tonde.
• Il sistema RAID non è dotato di dischi hot-spare.

Soluzione
Punto (1)
Ogni stripe del RAID è composta da 4 gruppi di byte + 1 byte rappresentante il parity block,
ottenuto tramite lo XOR bit-a-bit dei 4 byte (o, in modo equivalente, calcolando la parità pari bit-a-
bit).
Per la scrittura della sequenza di byte:
01000101, 00000110, 10110100, 11101101, 11000111, 10000101, 01110111, 01010101

si scriveranno sul RAID 2 stripe come segue.


Prima stripe:
01000101 xor
00000110 xor
10110100 xor
11101101 =
--------
00011010

Seconda stripe:
11000111 xor
10000101 xor
01110111 xor
01010101 =
--------
01100000

Ogni stripe (5 write) può essere scritta in parallelo. Stripe differenti sono scritte sequenzialmente.

Disco 1 Disco 2 Disco 3 Disco 4 Disco 5


Stripe 0: 01000101 00000110 10110100 11101101 (00011010)

Stripe 1: 11000111 10000101 01110111 (01100000) 01010101

In totale, vengono effettuate 0 letture e 10 scritture (di cui in parallelo a gruppi di 5).

Punto (2)
La lettura del secondo e del settimo byte di dati può avvenire in parallelo in quanto si trovano su
dischi differenti. Il blocco di parità non viene letto. Lo stato del disco rimane invariato.
In totale, vengono effettuate 2 letture in parallelo, e 0 scritture.

Punto (3)
Per la modifica del terzo byte di dati da 10110100 a 01001011, occorre decidere quale tra il metodo
della parità additiva e sottrattiva utilizzare. In questo caso, è più efficiente usare la parità sottrattiva
in quanto richiede soltanto 2 letture, mentre la parità additiva ne richiederebbe 3. Per cui, secondo la
parità sottrattiva, (1) si legge il vecchio valore del terzo byte e il vecchio valore del blocco di parità,
(2) poi si calcola lo XOR insieme al nuovo valore del terzo byte:

10110100 xor
00011010 xor
01001011 =
--------
11100101

e (3) infine si scrive sui dischi il nuovo valore del terzo byte e il nuovo valore del blocco di parità.
Sia le letturae, sia le scritture possono essere fatte in parallelo.

Disco 1 Disco 2 Disco 3 Disco 4 Disco 5


Stripe 0: 01000101 00000110 01001011 11101101 (11100101)

Stripe 1: 11000111 10000101 01110111 (01100000) 01010101

In totale, vengono effettuate 2 letture in parallelo e 2 scritture in parallelo.


Esercizio 1.11
Al driver del disco arrivano, nell'ordine specificato, le richieste di cilindri 11, 23, 21, 3, 41, 7, e 39.
Ogni operazione di seek tra due cilindri consecutivi (track-to-track seek time) impiega 6 msec.
Specificare l'ordine di visita dei vari cilindri e il tempo totale di seek che si ottengono utilizzando i
seguenti algoritmi:
(a) First-Come, First-Served (FCFS)
(b) Shortest-Seek First (SSF)
(c) LOOK
(d) C-LOOK
In tutti i casi, il braccio del disco è inizialmente posizionato sul cilindro 31. Per gli algoritmi LOOK
e varianti, la direzione iniziale è DOWN.

Soluzione
Punto (a) – FCFS
• Ordine di visita: 11, 23, 21, 3, 41, 7, 39
• Numero totale cilindri: |31-11|+|11-23|+|23-21|+|21-3|+|3-41|+|41-7|+|7-39| = 156
• Tempo totale di seek: 156*6 msec = 936 msec

Punto (b) – SSF


Ci sono due possibili soluzioni, in quanto i cilindri 23 e 39 distano lo stesso numero di cilindri dal
cilindro di partenza 31.
Soluzione 1
• Ordine di visita: 23, 21, 11, 7, 3, 39, 41,
• Numero totale cilindri: |31-23|+|23-21|+|21-11|+|11-7|+|7-3|+|3-39|+|39-41| = 66
• Tempo totale di seek: 66*6 msec = 396 msec
Soluzione 2
• Ordine di visita: 39, 41, 23, 21, 11, 7, 3
• Numero totale cilindri: |31-39|+|39-41|+|41-23|+|23-21|+|21-11|+|11-7|+|7-3| = 48
• Tempo totale di seek: 48*6 msec = 288 msec
Si noti che, malgrado la soluzione 2 produca uno scheduling più efficiente, l’algoritmo SSF classico
non usa alcuna euristica per distinguere tra questi casi, e la scelta fatta dallo scheduler se visitare
prima il cilindro 23 o 39 è del tutto arbitraria (per es., casuale).

Punto (c) – LOOK


• Ordine di visita: 23, 21, 11, 7, 3, 39, 41
• Numero totale cilindri: |31-23|+|23-21|+|21-11|+|11-7|+|7-3|+|3-39|+|39-41| = 66
• Tempo totale di seek: 66*6 msec = 396 msec
Punto (d) – C-LOOK
• Ordine di visita: 23, 21, 11, 7, 3, 41, 39
• Numero totale cilindri: |31-23|+|23-21|+|21-11|+|11-7|+|7-3|+|3-41|+|41-39|= 68
• Tempo totale di seek: 68*6 msec = 408 msec
Esercizio 1.14
Si supponga di voler attuare una politica di risparmio del consumo energetico basata sull’utilizzo
del disco tale per cui in base a una stima TEST dell’arrivo della prossima richiesta di utilizzo del
disco si decide se lasciare i suoi piatti in movimento (stato “active”) o arrestarne la rotazione (stato
“sleep”).
In particolare, si consideri un disco con le seguenti caratteristiche:
• consumo elettrico nello stato “active” Pw=6 Watt,
• consumo elettrico nello stato “sleep” Ps=2 Watt,
• tempo per passare da “active” a “sleep” Tsd=10 sec,
• energia elettrica consumata nel passaggio da “active” a “sleep” Esd=26 Joule,
• tempo per passare da “sleep” a “active” Twu=5 sec,
• energia elettrica consumata nel passaggio da “sleep” a “active” Ewu=60 Joule.
Calcolare il valore Td tale per cui per TEST > Td diventi vantaggioso porre il disco da “active” a
“sleep”.

Soluzione
Il valore Td corrisponde al break-even point, cioè:
Esd + Ps*(Td - Tsd - Twu) + Ewu = Pw*Td
Cioè:
Td = (Esd + Ewu - Ps*(Tsd + Twu))/(Pw - Ps)
Sostituendo i dati del problema, si ottiene:
Td = (26 + 60 – 2*(10 + 5))/(6-2) = 14 sec
Quindi:
• TEST > 14 sec → conviene passare da “active” a “idle”
• TEST < 14 sec → non conviene
• TEST = 14 sec → indifferente
In conclusione, diventa vantaggioso porre il disco da “active” a “sleep” quando TEST > 14 sec.
Esercizi FILE SYSTEMS
Esercizio 2.2
Si consideri un file system installato su un disco da 1TiB. Si supponga che il file system utilizzi
blocchi di 2 KiB e indirizzi a blocchi a 64 bit, e si consideri un file “foo.txt” cui sono stati allocati i
seguenti blocchi di dati (elencati in ordine di allocazione): 1080, 1081, 1082, 7400, 7401, 7407,
12510, 22418, 22419, 22420, 23710, 1079.
(a) Si disegni la struttura dati utilizzata per tenere traccia di tali blocchi nei seguenti casi:
(1) Allocazione basata su lista concatenata di blocchi.
(2) Allocazione basata su lista concatenata con File Allocation Table (FAT; si usi -1 come
codice di terminazione di lista).
(3) Allocazione indicizzata basata su i-node con 4 blocchi diretti, 1 puntatore indiretto
singolo e 1 puntatore indiretto doppio (si usi -1 per indicare un campo della struttura non
utilizzato). Il blocco contenente l’i-node ha indirizzo 512.
(b) Si dica qual è la dimensione massima di un file nei tre casi del punto (a).
(c) Si dica quali informazioni occorre memorizzare nella entry di directory del file nei tre casi
del punto (a).

Soluzione
Punto (a.1) – Allocazione a lista concatenata
Ogni nodo della lista è un blocco da 2 KiB, di cui 8 B sono usati per memorizzare il puntatore al
blocco rappresentante il nodo successivo e i rimanenti (2 KiB – 8 B) sono usati per memorizzare i
dati. Nella figura sottostante, le frecce che partono da un nodo e arrivano a quello successivo hanno
una funzionalità puramente visiva. In realtà, il campo di un nodo per il puntatore al nodo successivo
conterrà l'indirizzo del blocco successivo; per es., per il blocco 7407, in tale campo ci sarà il valore
12510.
Punto (a.2) – Allocazione con FAT
La FAT ha un numero di entry pari a floor(240/211) = 229 e occupa uno spazio pari a 229*23 B.
1079 -1
1080 1081
1081 1082
1082 7400
… …
7400 7401
7401 7407
… …
7407 12510
… …
12510 22418
… …
22418 22419
22419 22420
22420 23710
… …
23710 1079
… …
Punto (a.3) – Allocazione con i-node
Il file è composto da 12 blocchi, di cui i primi 4 possono essere indirizzati da 4 blocchi diretti
nell'inode. Un blocco da 2 KiB può contenere floor(2 11 B / 23 B) =256 indirizzi di blocchi (ogni
indirizzo occupa 64 bit). Quindi, i rimanentti 8 blocchi del file sono indirizzati tramite il blocco
indiretto singolo, per il quale si assume che punti al blocco 513, il quale rappresenta un blocco
indice costituito da puntatori diretti. Il puntatore indiretto doppio è inutilizzato.
(blocco 512)
|-----------|
attributi: | … |
|-----------|
blocco dir.: | 1080 |
|-----------|
| 1081 |
|-----------|
| 1082 |
|-----------|
| 7400 |
|-----------| (blocco 513)
blocco indir. singolo: | 513 |→ |-----------|
|-----------| | 7401 |
blocco indir. doppio: | -1 | |-----------|
|-----------| | 7407 |
|-----------|
| 12510 |
|-----------|
| 22418 |
|-----------|
| 22419 |
|-----------|
| 22420 |
|-----------|
| 23710 |
|-----------|
| 1079 |
|-----------|
| -1 |
|-----------|
| … |
|-----------|
| -1 |
|-----------|
Punto (b) – Max dimensione file
• Lista concatenata: è possibile sfruttare qualsiasi blocco sul disco, quindi la dimensione è
limitata dalla capacità del disco/partizione su cui è installato il file system. Non è possibile
sfruttare l'intero spazio a disposizione in quanto ogni nodo della lista ha un overhead dato da
8 B utilizzati per memorizzare il puntatore al nodo successivo della lista.
Quindi: <spazio totale>-<spazio usato dai puntatori a blocchi> = 240B - floor(240B/211B)*8B
• FAT: come la lista concatenata, il limite alla dimensione del file è dato dalla capacità del
disco/partizione su cui è installato il file system. Anche in questo caso, non sarà possibile
sfruttare l'intera capacità del disco a causa dello spazio occupato dalla FAT dato dal prodotto
<numero totale di blocchi sul disco>* 8 B.
Quindi: <spazio totale>-<spazio usato dalla FAT> = 240B - floor(240B/211B)*8B
• I-node: (<num. puntatori diretti> + <num. puntatori in un blocco> + <num. puntatori in un
blocco>2)*<dim. blocco> = (4 + floor(211/23) + floor(211/23)2) * 2 KiB = 65796 * 2 KiB =
131592 KiB

Punto (c) – Entry di directory


Per i due schemi di allocazione basati su lista (quindi lista concatenata semplice e quella basata su
FAT) è suffciente memorizzare, oltre al nome del file, il puntatore al primo blocco, cioè:
|---------|-------|
| foo.txt | 1080 |
|---------|-------|

Per lo schema indicizzato con i-node, è sufficiente memorizzare, oltre al nome del file, il puntatore
al blocco contenente l'i-node, cioè:
|---------|------|
| foo.txt | 512 |
|---------|------|
Esercizio 2.4
Si consideri la cache di un file system che utilizza la tecnica di hashing per velocizzare il
reperimento dei blocchi in essa presenti, e la politica LRU per il rimpiazzamento dei blocchi. Si
ipotizzi inoltre che tale cache preveda l’uso di 8 “slot” per la tabella di hash, indirizzati da 0 a 7, e
che la funzione di hashing utilizzata sia h(B) = B mod 8, dove B è l’indirizzo del blocco da
memorizzare nella cache.
(a) Si disegni lo stato della cache dopo l’inserimento dei seguenti blocchi: 4, 20, 44, 244,
9,17,41, 57, 159, 231.
(b) Partendo dal punto precedente, si disegni lo stato della cache dopo l’inserimento del blocco
347.
Si supponga che:
• la dimensione massima della cache sia di 10 blocchi,
• l'ordine di arrivo dei blocchi sia da sinistra verso destra (ad es., nel punto (a), il primo
blocco ad arrivare è il blocco 4),
• la cache sia inizialmente vuota.
Nei diagrammi, indicare quale elemento rappresenta l’elemento LRU e quale quello MRU.

Soluzione
Punto (a)
Valori hash:
h(4) = 4
h(20) = 4
h(44) = 4
h(244) = 4
h(9) = 1
h(17) = 1
h(41) = 1
h(57) = 1
h(159) = 7
h(231) = 7
Il puntatore LRU punta al nodo per il blocco 4, e il puntatore MRU punta al nodo per il blocco 231.
Punto (b)
E’ arrivato un nuovo blocco. ma la cache è piena. Occorre rimuovere l’elemento LRU, cioè il
blocco 4, aggiornare il puntatore LRU facendolo puntare al nodo per il blocco 20, e aggiornare il
puntatore MRU facendolo puntare al nodo per il blocco 347.
Valore hash: h(347) = 3
Esercizio 2.8
Si consideri il seguente file system, dove i quadrati rappresentano delle directory, i cerchi
rappresentano dei file, i numeri all'interno delle forme rappresentano i numeri degli i-node e le
forme colorate di grigio rappresentano delle modifiche, e si applichi l'algoritmo dump di UNIX per
il dump logico.

Per ogni fase dell’algoritmo dump si utilizzi una tabella separata con due righe, la prima contenente
i numeri di i-node e la seconda contenente lo stato di marcatura degli i-node alla fine della fase (una
X, indica un i-node marcato; nulla, indica un i-node non marcato). Ad es., se alla fine della fase N
l’i-node 1 è marcato mentre l’i-node 2 no, la relativa tabella ha la seguente forma:

1 2 …
X

Soluzione
Fase 1: visita dell'albero (a partire dalla radice) per contrassegnare i file modificati e tutte le
directory che s’incontrano lungo l’attraversamento. Alla fine di questa fase, la tabella di dump
risulta come segue:

1 2 3 4 5 6 7 8 9 10 11 12 13
X X X X X X X X X X
Fase 2: visita dell'albero per lasciare contrassegnate solo quelle directory che contengono file
modificati e directory che portano a file modificati. Alla fine di questa fase, la tabella di dump
risulta come segue:

1 2 3 4 5 6 7 8 9 10 11 12 13
X X X X X X X X X

Fase 3: si effettua il dump delle directory che sono rimaste contrassegnate (cioè, 1, 2, 4, 7, e 8), e si
deselezionano le directory di cui si è fatto il dump. Alla fine di questa fase, la tabella di dump risulta
come segue:

1 2 3 4 5 6 7 8 9 10 11 12 13
X X X X

Fase 4: si effettua il dump dei file modificati (cioè, quelli contrassegnati: 3, 6, 9, 12), e si
deselezionano. Alla fine di questa fase, tutti gli elementi della tabella di dump risultano
deselezionati:

1 2 3 4 5 6 7 8 9 10 11 12 13
Esercizi VIRTUALIZZAZIONE
Esercizio 3.1
Nell’ambito della virtualizzazione, si consideri la tecnica nota come shadow paging. Si supponga
che su uno stesso computer siano in esecuzione due diverse macchine virtuali, su ciascuna delle
quali è in esecuzione la stessa applicazione (corrispondente a due distinti processi, denominati
entrambi P1), come raffigurato nella figura sottostante. Si riportino le shadow page table dei due
processi in questione

Soluzione
Si suppone che l’hypervisor assegni alle VM i seguenti page frame dell’host:
• VM1: 100, 111, 122, 133, 144
• VM2: 200, 201, 202, 203, 204
Shadow page table per P1 in VM1:

Guest Virtual Page Number Host Page Frame Number


100 100
105 111
110 112
112 113
115 114
Shadow page table per P1 inVM2:

Guest Virtual Page Number Host Page Frame Number


100 200
105 201
110 202
112 203
115 204

Potrebbero piacerti anche