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