# Memoria di massa

Una memoria di massa (o memoria secondaria), in informatica è un tipo di memoria che raccoglie grandi quantità di dati rispetto alla memoria primaria, e in maniera non volatile, cioè che permangono anche successivamente allo spegnimento o riavvio della macchina. Il che significa che sarà l'utente a scegliere se e quando eliminare tali file.

## Storia

Le prime memorie di massa, furono delle unità a nastro magnetico, sul quale venivano immagazzinati i dati: ebbero una certa diffusione a partire dalla seconda metà del XX secolo, come le bobine a nastro, utilizzate nei primi mainframe, fino alle audiocassette, diffuse a partire dagli anni 1970 nei primi modelli di home computer; essi utilizzavano un piccolo controller, per convertire i segnali analogici in dati digitali.
L'interfaccia utilizzata consisteva in dei cavi audio standard, i più diffusi erano quali muniti di un connettore Jack da 3,5 mm e di connettore RCA. Questo tipo di sistema è stato utilizzato sull'Apple II e sul TRS-80 Color Computer, così come su molti sistemi bus di tipo S-100.
A partire dagli anni 1980, il progresso tecnologico ha portato all'utilizzo di numerosi altri dispositivi, come i CD ed i DVD, fino ad arrivare alle chiavette USB (anni 2000), in grado di immagazzinare diversi Gigabyte di dati.
Progresso tecnologico dei dispositivi di memorizzazione portatili :
| Dispositivo | Formato | Capienza | Anno di commercializzazione |
| IBM 33FD | 8 pollici | 0,23 MB | 1974 |
| HP SS | 3,5 pollici | 0,26 MB | 1982 |
| Floppy ED | 3,5 pollici | 2,88 MB | 1987 |
| Floptical LS | 3,5 pollici | 21,0 MB | 1991 |
| HiFD 200 | 3,5 pollici | 200 MB | 1999 |
| Micro SD | 15 x 11 mm | 256 MB | 2005 |
| Micro SDHC | 15 x 11 mm | 2048 MB | 2010 |
| Micro SDXC | 15 x 11 mm | 2048 GB | 2022 |

## Descrizione

Nell'architettura di von Neumann, quando ci si riferisce alla memoria, s'intende la memoria principale, che è quella sulla quale l'elaboratore elettronico carica i processi (programmi in esecuzione) ed i dati ad essi relativi (si parla appunto di memoria di lavoro), mentre si considera la memoria secondaria alla stregua di un dispositivo d'ingresso (input) e/o di uscita (output) dei dati (periferica di I/O).
La caratteristica principale della memoria di massa è la "non volatilità", ovvero la possibilità di memorizzare permanentemente i dati (per questo si parla anche di memoria di archiviazione). Inoltre, la memoria di massa ha un costo inferiore rispetto alla memoria principale, per questo verrebbe da chiedersi perché nei moderni computer non si utilizzi solo memoria secondaria (tramite il meccanismo della memoria virtuale). La ragione risiede nella velocità di accesso ai dati: i tempi medi di accesso alla memoria principale sono dell'ordine delle centinaia di nanosecondi (ns, 10$^{-9}$), contro i millisecondi (ms, 10$^{-3}$) delle memorie di archiviazione magnetiche, che, quindi, necessitano di tempi di accesso maggiori di ben 6 ordini di grandezza. Diversa si presenta la situazione dei dispositivi più moderni, quali gli SSD, basati su memorie non volatili di tipo flash.
La tecnologia, infatti, è riuscita nel corso degli anni a rendere le memorie ROM e RAM sempre più veloci, ma nulla ha potuto contro i limiti "fisici" dei dischi magnetici, che hanno bisogno di aspettare che la testina si posizioni sulla traccia giusta (tempo di ricerca o seek-time) e sul blocco giusto (latenza di rotazione o latency-time).
Quindi la memoria di massa è un dispositivo che consente la registrazione, la conservazione e la rilettura dei dati. Può essere di tipo fisso o rimovibile, installato all'interno del computer o esterno e collegato ad esso tramite cavo opportuno o tramite la rete locale, di sola lettura o di lettura/scrittura.

## Operazioni

I dati sono riuniti in entità omogenee dette file. Le memorie di massa sono gestite da un componente fondamentale dei sistemi operativi, il file system: ogni sistema operativo ne utilizza uno diverso ed i più famosi sono FAT32 exFAT ed NTFS di casa Microsoft, ext2-ext3 dei sistemi Linux e HFS+ di MacOS. Fondamentalmente l'organizzazione delle memorie di massa è gestita tramite strutture dati collegate che possono essere liste o, molto più frequentemente, B-Alberi, oppure tabelle di indirizzamento (dette TOC, dall'inglese Table Of Contents).

### Ricerca e accesso ai dati

Nel caso di file system a TOC la ricerca è piuttosto semplice e rapida (si pensi ad un magazzino con un registro che indichi lo scaffale che contiene la merce desiderata), mentre nel caso di struttura collegata la ricerca può risultare onerosa (utilizzando una lista collegata, nel caso peggiore si deve scorrere l'intera lista, ma, nel caso di Albero B+, alla peggio si ha un tempo di ricerca logaritmico).

### Memorizzazione dei dati

La memorizzazione dei dati, nel caso di memorie non riscrivibili (per esempio CD-R) avviene progressivamente, riempiendo lo spazio in ordine progressivo di indirizzo (nell'esempio del CD-R, se abbiamo 700 MB di spazio, ma ne utilizziamo 658, le tracce vuote saranno quelle più esterne, come è facilmente visibile, guardando la superficie del CD). Per quanto riguarda le memorie riscrivibili (per esempio i dischi rigidi) il data storage viene eseguito fondamentalmente secondo tre possibili criteri:
* first-fit: si cerca la prima locazione di memoria abbastanza grande da ospitare il file da salvare
* best-fit: si cerca la più piccola locazione di memoria abbastanza grande da ospitare il file da salvare
* worst-fit: si cerca la più grande locazione di memoria disponibile (può sembrare, a prima vista, un assurdo, ma ciò spesso permette che la parziale occupazione della locazione lasci abbastanza spazio libero per ospitare un altro file).
Statisticamente si può osservare che i primi due metodi sono più efficienti del terzo

### Cancellazione dei dati

La cancellazione dei dati (nei supporti che lo consentono, ovvero quelli riscrivibili) viene spesso intesa dai sistemi operativi come la semplice rimozione del record relativo al file in questione dalla TOC o dall'albero B+, il che rende possibile tramite apposite utility il ripristino di dati cancellati, in quanto, questi risiedono di fatto in memoria, finché la necessità di spazio sul quale memorizzare nuovi dati spingerà il sistema operativo a scrivere nella locazione che l'utente, cancellando il vecchio file, ha di fatto indicato come vuota.
Recentemente Apple, nel suo macOS ha incluso un tool di cancellazione sicura (utility simili si trovano facilmente in rete per tutti i sistemi operativi) che riscrive più volte dati casuali sul file da cancellare.

### Frammentazione interna ed esterna

Da notare che tutti i file system commerciali utilizzano la tecnica del file paging: un supporto di memoria di massa viene suddiviso in pagine o cluster (la cui misura in genere varia da 512 byte a 4 KiB), per ottimizzare le operazioni di lettura e scrittura. Questo però può causare uno spreco di memoria, soprattutto quando le pagine sono di grandi dimensioni (si pensi ad un file di 5 KiB ed un file system con cluster di 4 KB: ne sono necessari 2 per un totale di 8 KiB ed uno spreco di ben 3KiB: in questo caso si parla di frammentazione interna.
Invece, per frammentazione esterna s'intende il fenomeno per il quale tra due file si viene a creare uno spazio vuoto troppo piccolo per memorizzarvi un altro file: questo fenomeno è tipico dei file system con cluster troppo piccoli.