# Esercizi Extra

## 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.

**Risposta:**

**Punto 1**

Calcolo della strip di parità per la prima scrittura.

$$
01000101\oplus \\ 00000110\oplus \\ 10110100\oplus\\ 11101101\oplus\\ ------\\00011010
$$

| Disco 0  | Disco 1  | Disco 2  | Disco 3  | Disco 4    |
|:--------:|:--------:|:--------:|:--------:|:----------:|
| 01000101 | 00000110 | 10110100 | 11101101 | (00011010) |

Per svolgere questa operazione sono servite 5 WRITE, tutte in parallelo.

Calcolo della seconda strip di parità per la seconda scrittura.

$$
11000111\oplus\\ 10000101\oplus\\01110111\oplus\\ 01010101\oplus\\ ------\\01100000
$$

| Disco 0  | Disco 1  | Disco 2  | Disco 3    | Disco 4    |
|:--------:|:--------:|:--------:|:----------:|:----------:|
| 01000101 | 00000110 | 10110100 | 11101101   | (00011010) |
| 11000111 | 10000101 | 01110111 | (01100000) | 01010101   |

Per svolgere questa operazione sono servite 5 WRITE, tutte in parallelo.

Complessivamente sono servite 10 WRITE, di cui in parallelo in gruppi da 5.

**Punto 2:**

La lettura del secondo e del settimo byte di dati può avvenire, perché le strip necessarie si trovano su dischi diversi.

In particolare si trovano sul disco 2 e sul disco 4 .

| Disco 0  | Disco 1  | Disco 2                                               | Disco 3    | Disco 4                                               |
|:--------:|:--------:|:-----------------------------------------------------:|:----------:|:-----------------------------------------------------:|
| 01000101 | 00000110 | <mark style="background-color: green">10110100</mark> | 11101101   | (00011010)                                            |
| 11000111 | 10000101 | 01110111                                              | (01100000) | <mark style="background-color: green">01010101</mark> |

Sono necessarie 2 READ in parallelo.

**Punto 3:**

Dobbiamo decidere se utilizzare una additive o subtractive parity. In questo caso conviene utilizzare una subtractive parity, dato richiede 2 READ (vecchia strip di parità e il vecchio contenuto della strip che vogliamo modificare) e 2 WRITE (nuova strip di parità e la strip modificata).

La additive parity avrebbe richieste 3 READ (la strip 0, 1 e 3, ovvero tutte le strip escluse quella da modificare) e 2 WRITE (nuova strip di parità  e la strip modificata).

Applicazione della subtractive parity:

$$
10110100 \oplus\\ 01001011 \oplus\\ 00011010 \oplus\\ ------\\11100101
$$

Come già spiegato prima questa operazione necessità di 2 READ e 2 WRITE.

Il contenuto dei dischi è il seguente:

| Disco 0  | Disco 1  | Disco 2               | Disco 3    | Disco 4                 |
|:--------:|:--------:|:---------------------:|:----------:|:-----------------------:|
| 01000101 | 00000110 | <mark>01001011</mark> | 11101101   | <mark>(11100101)</mark> |
| 11000111 | 10000101 | 01110111              | (01100000) | 01010101                |

**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 6msec.
Specificare l'ordine di visita dei vari cilindri e il tempo totale di seek che si ottengono utilizzando i seguenti algoritmi:

1. First-Come, First-Served (FCFS)

2. Shortest-Seek First (SSF)

3. LOOK

4. 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.

**Risposta:**

FCFS:

Ordine di visita: 11, 23, 21, 3, 41, 7, 39.

Numero totale di cilindri: $|31-11|+|11-23|+|23-21|+|21-3|+|3-41|+|41-7|+|7-39| = 156$

Tempo totale di seek: $156 \times 6msec = 936msec$ 

SSF:

Ordine di visita: 39, 41, 23, 21, 11, 7, 3.

*Anche 23, 21, 11, 7, 3, 39, 41 andava bene, entrambi inizialmente hanno una differenza di 8 cilindri.*

Numero totale di cilindri: $|31-39|+|39-41|+|41-23|+|23-21|+|21-11|+|11-7|+|7-3| = 48$

Tempo totale di seek: $48 \times 6msec = 288msec$

LOOK (down):

Ordine di visita: 23, 21, 11, 7, 3, 39, 41.

Numero totale di cilindri: $|31-23|+|23-21|+|21-11|+|11-7|+|7-3|+|3-39|+|39-41| = 66$

Tempo totale di seek: $66\times6 = 396msec$

C-LOOK (down):

Ordine di visita: 23, 21, 11, 7, 3, 41, 39.

Numero totale di cilindri: $|31-23|+|23-21|+|21-11|+|11-7|+|7-3|+|3-41|+|41-39|= 68$

Tempo totale di seek: $68\times6 = 408$