sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-32-32.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-32-32.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-33-46.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-33-46.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-34-55.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-34-55.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-36-02.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-36-02.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-38-32.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-38-32.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-40-31.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-40-31.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-49-35.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_11-49-35.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-07-49.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-07-49.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-12-09.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-12-09.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-16-08.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-16-08.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-29-32.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-29-32.png differ
sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-31-42.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/gestione_mem_2026-03-18_12-31-42.png differ
sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-21-36.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-21-36.png differ
sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-22-45.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-22-45.png differ
sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-24-16.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-24-16.png differ
sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-25-17.png
... ...
Binary files /dev/null and b/sistemi/s02/assets/imgs/memoria_secondaria_2026-03-18_13-25-17.png differ
sistemi/s02/gestione_mem.md
... ...
@@ -0,0 +1,293 @@
1
+# Modulo 5: Gestione della memoria
2
+
3
+### Algoritmi di rimpiazzamento
4
+
5
+Obiettivi
6
+
7
+- minimizzare il numero di page fault
8
+
9
+Valutazione
10
+
11
+- gli algoritmi vengono valutati esaminando come si comportano quando applicati ad una stringa di riferimenti in memoria
12
+
13
+Le stringhe di riferimenti possono essere generate esaminando il funzionamento di programmi reali o con un generatore di numeri random
14
+
15
+Nota: la stringa di riferimenti può essere limitata ai numeri di pagina, in quanto non siamo interessati agli offset. Esempio:
16
+
17
+- stringa di riferimento completa (in esadecimale):
18
+ - 71,0a,13,25,0a,3f,0c,4f,21,30,00,31,21,1a,2b,03,1a,77,11
19
+- stringa di riferimento delle pagine (in esadecimale, con pagine di 16 byte)
20
+ - 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,1
21
+
22
+![gestione_mem_2026-03-18_11-32-32](assets/imgs/gestione_mem_2026-03-18_11-32-32.png)
23
+
24
+### Algoritmo FIFO
25
+
26
+Descrizione
27
+
28
+- quando c’è necessità di liberare un frame viene individuato come “vittima” il frame che per primo fu caricato in memoria
29
+
30
+Vantaggi
31
+
32
+- semplice, non richiede particolari supporti hardware
33
+
34
+Svantaggi
35
+
36
+- vengono talvolta scaricate pagine che sono sempre utilizzat
37
+
38
+Esempio:
39
+
40
+- numero di frame in memoria: 3
41
+- numero di page fault: 15 (su 20 accessi in memoria)
42
+
43
+![gestione_mem_2026-03-18_11-33-46](assets/imgs/gestione_mem_2026-03-18_11-33-46.png)
44
+
45
+- numero di frame in memoria: 3
46
+- numero di page fault: 9 (su 12 accessi in memoria)
47
+
48
+![gestione_mem_2026-03-18_11-34-55](assets/imgs/gestione_mem_2026-03-18_11-34-55.png)
49
+
50
+- numero di frame in memoria: 4
51
+- numero di page fault: 10! (su 12 accessi in memoria)
52
+- il numero di page fault è aumentato!
53
+
54
+![gestione_mem_2026-03-18_11-36-02](assets/imgs/gestione_mem_2026-03-18_11-36-02.png)
55
+
56
+## Anomalia di Belady
57
+
58
+In alcuni algoritmi di rimpiazzamento non è detto che aumentando il numero di frame il numero di page fault diminuisca (e.g., FIFO). Questo fenomeno indesiderato si chiama Anomalia di Belady
59
+
60
+### Algoritmo MIN - Ottimale
61
+
62
+Descrizione
63
+
64
+- seleziona come pagina vittima una pagina che non sarà più acceduta o la pagina che verrà acceduta nel futuro più lontano
65
+
66
+Considerazioni
67
+
68
+- è ottimale perché fornisce il minimo numero di page fault
69
+- è un algoritmo teorico perché richiederebbe la conoscenza a priori della stringa dei riferimenti futuri del programma
70
+- viene utilizzato a posteriori come paragone per verificare le performance degli algoritmi di rimpiazzamento reali
71
+
72
+Esempio:
73
+
74
+- numero di frame in memoria: 3
75
+- numero di page fault: 9 (su 20 accessi in memoria)
76
+
77
+![gestione_mem_2026-03-18_11-38-32](assets/imgs/gestione_mem_2026-03-18_11-38-32.png)
78
+
79
+### Algoritmo LRU (Least Recently Used)
80
+
81
+Descrizione - seleziona come pagina vittima la pagina che è stata usata meno recentemente nel passato
82
+
83
+Considerazioni
84
+
85
+- è basato sul presupposto che la distanza tra due riferimenti successivi alla stessa pagina non vari eccessivamente
86
+- stima la distanza nel futuro utilizzando la distanza nel passato
87
+
88
+Esempio
89
+
90
+- numero di frame in memoria: 3
91
+- numero di page fault: 12 (su 20 accessi in memoria)
92
+
93
+![gestione_mem_2026-03-18_11-40-31](assets/imgs/gestione_mem_2026-03-18_11-40-31.png)
94
+
95
+#### Implementazione LRU
96
+
97
+Nota: E' necessario uno specifico supporto hardware
98
+
99
+La MMU:
100
+
101
+- deve registrare nella tabella delle pagine un time-stamp quando accede ad una pagina
102
+- il time-stamp può essere implementato come un contatore che viene incrementato ad ogni accesso in memoria
103
+
104
+Nota:
105
+
106
+- bisogna gestire l'overflow dei contatori (wraparound)
107
+- i contatori devono essere memorizzati in memoria e questo richiede accessi addizionali alla memoria
108
+- la tabella deve essere scandita totalmente per trovare la pagina LRU
109
+
110
+Implementazione basata su stack
111
+
112
+- si mantiene uno stack di pagine
113
+- tutte le volte che una pagina viene acceduta, viene rimossa dallo stack (se presente) e posta in cima allo stack stesso
114
+- in questo modo:
115
+ - in cima si trova la pagina utilizzata più di recente
116
+ - in fondo si trova la pagina utilizzata meno di recente
117
+
118
+Nota:
119
+
120
+- l'aggiornamento di uno stack organizzato come double-linked list richiede l'aggiornamento di 6 puntatori
121
+- la pagina LRU viene individuata con un accesso alla memoria
122
+- esistono implementazioni hardware di questo meccanismo
123
+
124
+#### Algoritmi a stack
125
+
126
+Definizione:
127
+Data una stringa di riferimenti `s`, si indichi con $S_t(s,A,m)$ l'insieme delle pagine mantenute in memoria centrale al tempo $t$ dell'algoritmo $A$, data una memoria di $m$ frame relativamente alla stringa $s$. Un algoritmo di rimpiazzamento vien detto "a stack" se per ogni istante $t$ e per ogni stringa $s$ si ha:
128
+$$S_t(s,A,m)\subset S_t(s,A,m+1)$$
129
+
130
+In altre parole
131
+
132
+- se l'insieme delle pagine in memoria con m frame è sempre un sottoinsieme delle pagine in memoria con m+1 frame
133
+- Per ogni stringa per ogni tempo per ogni ampiezza di memoria
134
+
135
+Teorema: un algoritmo a stack non genera casi di Anomalia di Belady
136
+![gestione_mem_2026-03-18_11-49-35](assets/imgs/gestione_mem_2026-03-18_11-49-35.png)
137
+
138
+Teorema: l'algoritmo di LRU è a stack:
139
+Ogni riferimento della stringa dei riferimenti sposta la pagina acceduta in cima allo stack, facendo scorrere le successive come indicato nella figura a lato. L’algoritmo LRU tiene in memoria le m pagine in cima allo stack.
140
+L’algoritmo è a stack: l’insieme delle m pagine in cima allo stack è un sotto insieme delle m+1 pagine in cima allo stack.
141
+
142
+#### Stack degli algoritmi di rimpiazzamento: caso generale
143
+
144
+Ogni riferimento della stringa dei riferimenti sposta la pagina acceduta in cima allo stack.
145
+Le pagine scorrono a seconda della loro importanza.
146
+L’algoritmo tiene in memoria le m pagine in cima allo stack  La relazione d’ordine deve dipendere solo dalla stringa di riferimenti e da t
147
+
148
+![gestione_mem_2026-03-18_12-07-49](assets/imgs/gestione_mem_2026-03-18_12-07-49.png)
149
+
150
+#### Algoritmo LRU - Implementazione
151
+
152
+Mantenere le informazione per LRU è troppo costoso
153
+Poche MMU forniscono il supporto hardware per l'algoritmo LRU, alcuni sistemi non forniscono alcun tipo di supporto, e in tal caso l'algoritmo FIFO deve essere utilizzato.
154
+
155
+Reference bit:
156
+
157
+- alcuni sistemi forniscono supporto sotto forma di reference bit
158
+- tutte le volte che una pagina è acceduta, il reference bit associato alla pagina viene aggiornato a 1
159
+
160
+Come utilizzare il reference bit:
161
+
162
+- inizialmente, tutti i bit sono posti a zero dal s.o.
163
+- durante l'esecuzione dei processi, le pagine in memoria vengono accedute e i reference bit vengono posti a 1
164
+- periodicamente, è possibile osservare quali pagine sono state accedute e quali non osservando i reference bit
165
+
166
+Nota: non conosciamo l'ordine in cui sono state usate le pagine ma possiamo comunque usare queste info per \*\*approssimare un algoritmo LRU
167
+
168
+Approssimare LRU: Additional-Reference-Bit-Algorithm
169
+
170
+- possiamo aumentare le informazioni di ordine "salvando" i reference bit ad intervalli regolari (ad es., ogni 100 ms)
171
+- esempio: manteniamo 8 bit di "storia" per ogni pagina
172
+- il nuovo valore del reference bit viene salvato tramite shift a destra della storia ed inserimento del bit come most signif. bit
173
+- la pagina vittima è quella con valore minore; in caso di parità, si utilizza una disciplina FIFO
174
+
175
+![gestione_mem_2026-03-18_12-12-09](assets/imgs/gestione_mem_2026-03-18_12-12-09.png)
176
+
177
+#### Second-chance algorithm
178
+
179
+Conosciuto anche come algoritmo dell'orologio, corrisponde ad un caso particolare dell'algoritmo precedente, dove la dimensione della storia è uguale a 1
180
+
181
+Descrizione
182
+
183
+- le pagine in memoria vengono gestite come una lista circolare
184
+- a partire dalla posizione successiva all'ultima pagina caricata, si scandisce la lista con la seguente regola
185
+- se la pagina è stata acceduta (reference bit a 1)
186
+ - il reference bit viene messo a 0
187
+- se la pagina non è stata acceduta (reference bit a 0)
188
+ - la pagina selezionata è la vittima
189
+
190
+l'idea è semplice:
191
+
192
+- l'algoritmo seleziona le pagine in modo FIFO
193
+- se però la pagina è stata acceduta, gli si dà una "seconda possibilità" (second chance);
194
+- si cercano pagine successive che non sono state accedute
195
+
196
+Se tutte le pagine sono state accedute, degenera nel meccanismo FIFO
197
+
198
+Implementazione:
199
+
200
+- semplice da implementare
201
+- non richiede capacita' complesse da parte della MMU
202
+
203
+Esempio
204
+![gestione_mem_2026-03-18_12-16-08](assets/imgs/gestione_mem_2026-03-18_12-16-08.png)
205
+
206
+#### Altri algoritmi di rimpiazzamento
207
+
208
+**Least frequently used (LFU)**
209
+
210
+- Si mantiene un contatore di accessi ad una pagina
211
+- La frequenza e' il valore del contatore diviso per il "tempo" di permanenza in memoria (es. il numero di accessi con quella pagina presente)
212
+- la pagina con il val minore viene scelta come vittima
213
+
214
+Motivazioni:
215
+
216
+- una pagina utilizzata spesso dovrebbe avere un contatore molto alto
217
+
218
+Implementazione:
219
+
220
+- puo' essere approssimato tramite reference bit
221
+
222
+Problemi
223
+
224
+- se una pagina viene utilizzata frequentemente all'inizio e poi non viene piu usata verra' rimossa dopo molto tempo.
225
+
226
+## Allocazione
227
+
228
+Algoritmo di allocazione (per memoria virtuale): si intende l'algoritmo utilizzato per scegliere quanti frame assegnare ad ogni singolo processo
229
+
230
+Allocazione locale
231
+
232
+- ogni processo ha un insieme proprio di frame
233
+- poco flessibile
234
+
235
+Allocazione globale
236
+
237
+- tutti i processi possono allocare tutti i frame presenti nel sistema (sono in competizione)
238
+- può portare a trashing
239
+
240
+### Trashing
241
+
242
+Un processo (o un sistema) si dice che è in trashing quando spende più tempo per la paginazione che per l'esecuzione
243
+
244
+Cause:
245
+
246
+- in un sistema con allocazione globale, si ha trashing se i processi tendono a "rubarsi i frame a vicenda".Ovvero non riescono a tenere in memoria i frame utili a breve termine (perchè altri processi chiedono frame liberi) e quindi generano page fault ogni pochi passi di avanzamento
247
+
248
+Esempio:
249
+Esaminiamo un sistema che accetti nuovi processi quando il grado di utilizzazione della CPU è basso, se per qualche motivo gran parte dei processi entrano in page fault:
250
+
251
+- la ready queue si riduce
252
+- il sistema sarebbe indotto ad accettare nuovi processi....
253
+- E' UN ERRORE!
254
+
255
+statisticamente, il sistema:
256
+
257
+- genererà un maggior numero di page fault
258
+- di conseguenza diminuirà il livello della multiprogrammazione
259
+
260
+![gestione_mem_2026-03-18_12-29-32](assets/imgs/gestione_mem_2026-03-18_12-29-32.png)
261
+
262
+#### Working set
263
+
264
+Definizione: si definisce working set di finestra Δ l'insieme delle pagine accedute nei più recenti $\delta$ riferimenti
265
+
266
+Considerazione
267
+
268
+- è una rappresentazione approssimata del concetto di località
269
+- se una pagina non compare in $\delta$ riferimenti successivi in memoria, allora esce dal working set; non è più una pagina su cui si lavora attivamente
270
+
271
+Esempio: $\delta$ = 5
272
+
273
+![gestione_mem_2026-03-18_12-31-42](assets/imgs/gestione_mem_2026-03-18_12-31-42.png)
274
+
275
+Se l'ampiezza della finestra è ben calcolata, il working set è una buona approssimazione dell'insieme delle pagine "utili"... Sommando quindi l'ampiezza di tutti i working set dei processi attivi, questo valore deve essere sempre minore del numero di frame disponibili, altrimenti il sistema è in trashing
276
+
277
+Se si sceglie un set ($\delta$) troppo piccolo:
278
+
279
+- si considera non più utile ciò che in realtà serve
280
+- Si sottovaluta il numero di pagine necessarie per il processo
281
+- Falsi negativi di trashing
282
+
283
+Se si sceglie un set ($\delta$) troppo grande:
284
+
285
+- si considera utile anche ciò che non serve più
286
+- Si sopravaluta il numero di pagine necessarie
287
+- Falsi positivi di trashing
288
+
289
+Come si usa il Working Set:
290
+
291
+- serve per controllare l'allocazione dei frame ai singoli processi
292
+- quando ci sono sufficienti frame disponibili non occupati dai working set dei processi attivi, allora si può attivare un nuovo processo
293
+- se al contrario la somma totale dei working set supera il numero totale dei frame, si può decidere di sospendere l'esecuzione di un processo
sistemi/s02/memoria_secondaria.md
... ...
@@ -0,0 +1,140 @@
1
+# Gestione I/O e mem secondaria
2
+
3
+## Dispositivi a blocchi / caratteri
4
+
5
+I dati vengono letti o scritti a blocchi (512-1024 byte)
6
+Raw IO (op di read, write e seek per blocchi)
7
+Accesso tramite filesystem (op di read write e seek su file), il diver fornisce solo accesso raw
8
+Accesso tramite memory-mapped I/O (il contenuto di un file viene mappato in mem, l'accesso avviene tramite istruzioni di load/store del processore)
9
+
10
+Interfaccia di comunicazione a caratteri
11
+
12
+- i dati vengono letti/scritti un carattere alla volta
13
+- raw I/O
14
+ - operazioni di get/put di un singolo carattere
15
+- bufferizzazione
16
+ - lettura/scrittura di “una linea alla volta”
17
+
18
+## Tecniche di gestione dei dispositivi di I/O
19
+
20
+- buffering
21
+- caching
22
+- spooling
23
+- I/O scheduling
24
+
25
+Tre motivazioni per il buffering
26
+ per gestire una differenza di velocità tra il produttore e il
27
+consumatore di un certo flusso di dati
28
+ per gestire la differenza di dimensioni nell'unità di trasferimento
29
+ per implementare la “semantica di copia” delle operazioni di I/O
30
+
31
+Caching
32
+ mantiene una copia in memoria primaria di informazioni che si
33
+trovano in memoria secondaria
34
+ è differente dal buffering
35
+ nel buffer si trova l'unica istanza di un'informazione
36
+ la cache mantiene la copia di un'informazione
37
+
38
+Spool
39
+ è un buffer che mantiene output per un dispositivo che non può
40
+accettare flussi di dati distinti
41
+ ad esempio, stampanti
42
+
43
+## SSD
44
+
45
+Caratterisstiche principali:
46
+
47
+- Non hanno fragilità meccaniche
48
+- Consumano meno energia dei dischi rotazionali
49
+- Hanno un numero massimo di cicli di scrittura
50
+- Velocità lettura > velocità scrittura
51
+- Si legge a blocchi, si scrive a “banchi” (molti blocchi insieme)
52
+- Accesso uniforme su tutto lo spazio di memoria
53
+
54
+## Dischi
55
+
56
+un disco è composto da un insieme di piatti, suddivisi in tracce, le quali sono suddivise in settori
57
+
58
+I dischi sono caratterizzati da tre parametri fondamentali:
59
+
60
+- $r$: la velocità di rotazione, espressa in rpm (revolutions per minute)
61
+- $T_s$: il tempo di seek, ovvero il tempo medio necessario affinchè la testina si sposti sulla traccia desiderata
62
+- $V_r$: la velocità di trasferimento, espressa in byte al secondo
63
+
64
+Il tempo di accesso:
65
+
66
+- è il tempo necessario per leggere un settore del disco, composto da tempo di seek, ritardo rotazionale e tempo di trasferimento
67
+
68
+Ritardo rotazionale:
69
+
70
+- il tempo medio necessario affinchè il settore desiderato arrivi sotto la testina
71
+- è uguale a $1 / 2r$
72
+
73
+Transfer time:
74
+
75
+- dipende dalla quantità di dati b da leggere (supponendo che siano contigui sulla stessa traccia) è uguale a $b/V$
76
+
77
+## Disk Scheduling
78
+
79
+Gestione software dei dischi
80
+
81
+- il gestore del disco può avere numerose richieste pendenti, da parte dei vari processi presenti nel sistema
82
+- il sistema sarà più efficiente se le richieste pendenti verranno evase seguendo un ordine che minimizza il numero di operazioni che richiedono molto tempo (e.g. seek)
83
+
84
+Valori tipici
85
+
86
+- tempo di seek: 8-10 ms
87
+- velocità rotazionale: 5400, 7200, 10000 rpm
88
+
89
+### FCFS
90
+
91
+First Come, First Served (altrimenti detta FIFO)
92
+è una politica di gestione fair, non minimizza il numero di seek, non può mai generare starvation
93
+![memoria_secondaria_2026-03-18_13-21-36](assets/imgs/memoria_secondaria_2026-03-18_13-21-36.png)
94
+
95
+### SSTF
96
+
97
+Shortest Seek Time First, seleziona la richieste che prevede il minor spostamento della testina dalla posizione corrente. Nel caso di equidistanza, la direzione viene scelta casualmente. Può provocare starvation
98
+
99
+![memoria_secondaria_2026-03-18_13-22-45](assets/imgs/memoria_secondaria_2026-03-18_13-22-45.png)
100
+
101
+### LOOK
102
+
103
+Detto anche algoritmo dell'ascensore
104
+Ad ogni istante, la testina è associata ad una direzione, la testina si sposta di richiesta in richiesta, seguendo la direzione scelta. Quando si raggiunge l'ultima richiesta nella direzione scelta, la direzione viene invertita e si eseguono le richieste nella direzione opposta
105
+
106
+Caratteristiche
107
+
108
+- è efficiente
109
+- il tempo medio di accesso al disco non è omogeneo; sono privilegiate le tracce centrali
110
+- è esente da starvation (parzialmente)
111
+
112
+![memoria_secondaria_2026-03-18_13-24-16](assets/imgs/memoria_secondaria_2026-03-18_13-24-16.png)
113
+
114
+### C-LOOK
115
+
116
+Ha lo stesso principio di funzionamento del metodo LOOK, ma la scansione del disco avviene in una sola direzione. Quando si raggiunge l'ultima richiesta in una direzione, la testina si sposta direttamente alla prima richiesta.
117
+
118
+![memoria_secondaria_2026-03-18_13-25-17](assets/imgs/memoria_secondaria_2026-03-18_13-25-17.png)
119
+
120
+#### LOOK e C-LOOK
121
+
122
+Problema
123
+E' possibile che il braccio della testina non si muova per un periodo considerevole di tempo (e.g., se un certo numero di processi continua a leggere sullo stesso cilindro)
124
+
125
+Soluzione
126
+La coda delle richieste può essere suddivisa in due sottocode separate. Mentre il disk scheduler sta soddisfacendo le richieste di una coda, le richieste che arrivano vengono inserite nell'altra. Quando tutte le richieste della prima coda sono state esaurite, si scambiano le due code.
127
+
128
+### RAID
129
+
130
+Problema
131
+
132
+- la velocità dei processori cresce secondo la legge di Moore, la velocità dei dispositivi di memoria secondaria molto più lentamente.
133
+
134
+Considerazioni
135
+
136
+- per aumentare la velocità di un componente, una delle possibilità è quella di utilizzare il parallelismo
137
+- l'idea è quella di utilizzare un array di dischi indipendenti, che possano gestire più richieste di I/O in parallelo
138
+- dobbiamo però garantire che i dati letti in parallelo risiedano su dischi indipendenti
139
+
140
+RAID: Redundant Array of Independent Disks