Frammentazione (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
fix
 
(8 versioni intermedie di 4 utenti non mostrate)
Riga 4:
 
== Nella memorizzazione dei dati ==
[[File:External Fragmentation.svg|thumb|upright=1.6|Esempio della frammentazione di una [[memoria di massa]]]]
Il fenomeno si verifica quando si inseriscono e si rimuovono [[processo (informatica)|processi]] dalla [[memoria centrale]] (RAM), oppure [[file]] da una [[memoria di massa]] (ad es. un [[Hard Disk]]). Dato che la [[memoria (informatica)|memoria]] è, a livello logico, una sequenza contigua di spazi (celle o settori) atti a contenere unità elementari di dati, e che normalmente un oggetto da memorizzare (un [[programma (informatica)|programma]] o un [[file]]) si compone di numerose unità elementari contigue, l'organizzazione di tali sequenze in memoria deve seguire una qualche regola che consenta di aggiungere e rimuovere tali oggetti con [[accesso casuale]].
 
Il fenomeno si verifica quando si inseriscono e si rimuovono [[processo (informatica)|processi]] dalla [[memoria centrale]] (RAM), oppure [[file]] da una [[memoria di massa]] (ad es.esempio un [[Harddisco Diskrigido|hard disk]]). Dato che la [[memoria (informatica)|memoria]] è, a livello logico, una sequenza contigua di spazi (celle o settori) atti a contenere unità elementari di dati, e che normalmente un oggetto da memorizzare (un [[programma (informatica)|programma]] o un [[file]]) si compone di numerose unità elementari contigue, l'organizzazione di tali sequenze in memoria deve seguire una qualche regola che consenta di aggiungere e rimuovere tali oggetti con [[accesso casuale]].
 
Infatti, ripetute aggiunte o rimozioni di sequenze di dati di dimensioni eterogenee comportano una "frammentazione" dello spazio libero disponibile, che quindi non risulta più essere contiguo. In tal caso, in memorie secondarie come i dischi la ricostruzione della sequenza originale dei dati memorizzati è fatta in modo inefficiente, con cali di prestazioni; qualunque disco rigido, infatti, lavora alle massime prestazioni solo qualora debba scrivere o leggere dati memorizzati in posizioni contigue: il "salto" fisico della testina di lettura del disco da un settore ad un altro posto in diversi [[cilindro (informatica)|cilindri]] introduce dei rallentamenti che, in casi particolari, possono raggiungere livelli critici.
Riga 11 ⟶ 13:
Per semplicità, d'ora in poi ci si riferisce sempre alla memoria secondaria ed a file di dati, in quanto il ragionamento può facilmente essere esteso anche alla memoria primaria. Vengono generalmente individuati due tipi di frammentazione, di cui solo uno influisce sulle prestazioni del sistema:
* ''Frammentazione interna'': la memoria è suddivisa in blocchi di grandezza uguale <math>B</math> (es. un settore di un disco). Quando un file di dimensione <math>D</math> deve essere memorizzato, vengono riempiti completamente <kbdmath>(D \div B)-1 </kbdmath> blocchi di memoria, ed uno che ne conterrà <kbdmath>D \mod B</kbdmath>. La frammentazione interna consiste nello spazio di memoria che rimane libero ed inutilizzato nell'ultimo blocco. Questo tipo di frammentazione non influisce sulle prestazioni del sistema ma comporta uno spreco di [[memoria (informatica)|memoria]]. Come caso particolare, se <kbdmath>(D \mod B )== 0</kbdmath>, allora vengono occupati esattamente <kbdmath>D \div B</kbdmath> blocchi di memoria, e lo spreco diventa nullo. Ovviamente, tale spreco risulta essere percentualmente molto piccolo se <kbdmath>D »\gg B</kbdmath>, mentre risulta essere molto alto in caso di file di dimensioni comparabili a <kbdmath>B</kbdmath>. Per esemplificare, se un file di 1.637.257 byte deve essere memorizzato in un disco avente settori da 4096 byte, allora saranno occupati completamente 399 settori, mentre uno sarà occupato per 2953 byte (infatti 4096x3994096 • 399 + 2953 = 1637257). In tal caso, lo spazio sprecato è circa dello 0,18%. Se invece deve essere memorizzato un file di 1000 byte, allora lo spreco è di 3096 byte, ovvero del 75,59%.
 
* ''Frammentazione interna'': la memoria è suddivisa in blocchi di grandezza uguale B (es. un settore di un disco). Quando un file di dimensione D deve essere memorizzato, vengono riempiti completamente <kbd>(D div B)-1 </kbd>blocchi di memoria, ed uno che ne conterrà <kbd>D mod B</kbd>. La frammentazione interna consiste nello spazio di memoria che rimane libero ed inutilizzato nell'ultimo blocco. Questo tipo di frammentazione non influisce sulle prestazioni del sistema ma comporta uno spreco di [[memoria (informatica)|memoria]]. Come caso particolare, se <kbd>D mod B == 0</kbd>, allora vengono occupati esattamente <kbd>D div B</kbd> blocchi di memoria, e lo spreco diventa nullo. Ovviamente, tale spreco risulta essere percentualmente molto piccolo se <kbd>D » B</kbd>, mentre risulta essere molto alto in caso di file di dimensioni comparabili a <kbd>B</kbd>. Per esemplificare, se un file di 1.637.257 byte deve essere memorizzato in un disco avente settori da 4096 byte, allora saranno occupati completamente 399 settori, mentre uno sarà occupato per 2953 byte (infatti 4096x399+2953=1637257). In tal caso, lo spazio sprecato è circa dello 0,18%. Se invece deve essere memorizzato un file di 1000 byte, allora lo spreco è di 3096 byte, ovvero del 75,59%.
* ''Frammentazione esterna'': in genere, il ''[[controller (informatica)|controller]]'' dell'hard disk cerca di minimizzare i tempi di accesso al disco, tentando di memorizzare un file in settori contigui e ridurre al massimo lo spostamento delle testine (azione che introduce notevoli rallentamenti nell'accesso ai dati). Tuttavia, in seguito alla ripetuta memorizzazione e cancellazione di file di dimensione eterogenea effettuata in maniera disordinata, si verifica una riduzione dello spazio contiguo massimo disponibile. In tal caso, un nuovo file di dimensioni sufficientemente ampie che deve essere memorizzato verrà scritto presumibilmente in settori e cilindri non adiacenti. Questo può portare ad un aumento anche notevole dei tempi di lettura e scrittura, introducendo un calo notevole delle prestazioni del sistema<ref>{{Cita web|url = http://fortyzone.it/frammentazione-peggiora-prestazioni/|titolo = Frammentazione: Come Peggiora le Performance - FortyZone|accesso = 2015-10-23|sito = FortyZone|urlarchivio = https://web.archive.org/web/20151108195652/http://fortyzone.it/frammentazione-peggiora-prestazioni/|dataarchivio = 8 novembre 2015|urlmorto = sì}}</ref>.
 
Riga 18 ⟶ 19:
 
== Nella trasmissione dei dati ==
Nelle [[Commutazione di pacchetto|reti di trasmissione di dati a pacchetti]], come ad esempio in [[IPv4]], viene introdotta una quantità, detta [[Maximum Transmission Unit]] (MTU), che indica la quantità massima di dati che può essere trasmessa in rete, con un singolo [[pacchetto (reti)|pacchetto]]. Ad esempio, in una rete [[Ethernet]] la dimensione MTU standard è di 1500 [[byte]], mentre in una rete [[Token ring]] è di 4096 [[byte]]. La frammentazione avviene quando viene inserito nella rete un pacchetto di dimensione superiore alla MTU, e questo deve essere trasmesso.
 
=== Esempio ===
Riga 40 ⟶ 41:
== Voci correlate ==
* [[Deframmentazione]]
* [[HardDisco Diskrigido]]
* [[Maximum Transmission Unit]] (MTU)
* [[Protocollo di rete]]
* [[Reti di calcolatori]]
 
== Altri progetti ==
{{Portale|Telematica}}
{{Interprogetto|preposizione=sulla|wikt=frammentazione}}
 
== Collegamenti esterni ==
* {{FOLDOC|fragmentation|fragmentation}}
 
{{Controllo di autorità}}
{{Portale|Telematica|informatica}}
 
[[Categoria:Teorie di rete]]