4391f070864b5c1bd3d96fd4d1146cc7121381a7
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 | + |
|
| 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 | + |
|
| 44 | + |
|
| 45 | +- numero di frame in memoria: 3 |
|
| 46 | +- numero di page fault: 9 (su 12 accessi in memoria) |
|
| 47 | + |
|
| 48 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 | + |
|
| 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 |