MTREE è un classico formato di file di archivio comunemente utilizzato nell'era MS-DOS per distribuire software e dati. È stato sviluppato da Microsoft e ha guadagnato popolarità grazie alla sua compressione efficiente e alle elevate velocità di decompressione sull'hardware dell'epoca. Il formato MTREE è una struttura di archivio basata su albero che consente l'organizzazione gerarchica di file e directory.
Un archivio MTREE è costituito da un'intestazione seguita da una serie di nodi che rappresentano i file e le directory archiviati nell'archivio. L'intestazione contiene metadati sull'archivio, tra cui la firma MTREE (in genere "MTRE"), il numero di versione, il metodo di compressione e altri flag. I nodi sono organizzati in una struttura ad albero, con ciascun nodo che rappresenta un file o una directory.
Ciascun nodo nell'archivio MTREE contiene informazioni come il tipo di nodo (file o directory), gli attributi del file (ad esempio, dimensione, timestamp), il metodo di compressione (se applicabile) e i dati compressi o non compressi del file. Le directory sono rappresentate come nodi speciali che contengono riferimenti ai loro nodi figlio, consentendo la struttura gerarchica dell'archivio.
MTREE supporta vari metodi di compressione, i più comuni sono LZSS (Lempel-Ziv-Storer-Szymanski) e DEFLATE. LZSS è un algoritmo di compressione basato su dizionario che utilizza una finestra scorrevole per trovare e sostituire modelli ripetuti nei dati. Offre una decompressione rapida e rapporti di compressione ragionevoli. DEFLATE, d'altra parte, è una combinazione di LZ77 e codifica Huffman, che fornisce rapporti di compressione migliori ma una decompressione leggermente più lenta rispetto a LZSS.
Una delle caratteristiche principali di MTREE è la sua capacità di accedere in modo efficiente ai singoli file all'interno dell'archivio senza la necessità di decomprimere l'intero archivio. Ciò si ottiene tramite l'uso di una tabella di allocazione file (FAT) che mappa la struttura logica dell'archivio agli offset fisici dei nodi. La FAT consente una rapida ricerca e il recupero di file specifici, rendendo MTREE adatto a scenari in cui è richiesto l'accesso casuale ai file.
Per creare un archivio MTREE, i file e le directory vengono prima organizzati nella gerarchia desiderata. Ciascun file viene compresso utilizzando il metodo di compressione scelto e i dati compressi vengono archiviati nel nodo file corrispondente. Le directory sono rappresentate come nodi con riferimenti ai loro nodi figlio. Viene quindi generata la FAT, che mappa la struttura logica agli offset fisici all'interno dell'archivio.
L'estrazione di file da un archivio MTREE implica l'attraversamento della struttura ad albero e la localizzazione dei nodi file desiderati. La FAT viene utilizzata per individuare rapidamente l'offset fisico dei dati del file all'interno dell'archivio. I dati compressi vengono quindi decompressi utilizzando l'algoritmo di decompressione appropriato in base al metodo di compressione specificato nel nodo.
Gli archivi MTREE possono anche supportare funzionalità aggiuntive come protezione con password, crittografia e firme digitali. La protezione con password consente di limitare l'accesso al contenuto dell'archivio, mentre la crittografia fornisce un ulteriore livello di sicurezza crittografando i dati del file. Le firme digitali possono essere utilizzate per verificare l'integrità e l'autenticità dell'archivio.
Sebbene MTREE sia considerato un formato di archivio classico ed è stato ampiamente sostituito da formati più moderni come ZIP e RAR, ha ancora un significato storico. Molte vecchie distribuzioni software e archivi di dati dell'era MS-DOS utilizzavano il formato MTREE, rendendolo importante per la conservazione e l'accesso ai dati legacy.
In conclusione, il classico formato di archivio MTREE era una soluzione ampiamente utilizzata ed efficiente per l'archiviazione e la distribuzione di file nell'era MS-DOS. La sua struttura basata su albero, i metodi di compressione efficienti e le capacità di accesso casuale lo hanno reso una scelta popolare per la distribuzione di software e l'archiviazione dei dati. Sebbene MTREE possa non essere così diffuso oggi, comprendere i suoi dettagli tecnici rimane prezioso per lavorare con archivi legacy e apprezzare l'evoluzione delle tecniche di compressione e archiviazione dei file nel tempo.
La compressione dei file riduce la ridondanza in modo che le stesse informazioni occupino meno bit. Il limite superiore di quanto si può andare è governato dalla teoria dell'informazione: per la compressione senza perdita, il limite è l'entropia della fonte (vedi il teorema della codifica di sorgente di Shannon e il suo articolo originale del 1948 “Una teoria matematica della comunicazione”). Per la compressione con perdita, il compromesso tra velocità e qualità è catturato dalla teoria tasso-distorsione.
La maggior parte dei compressori ha due fasi. In primo luogo, un modello predice o espone la struttura nei dati. In secondo luogo, un codificatore trasforma tali previsioni in modelli di bit quasi ottimali. Una famiglia di modellazione classica è Lempel-Ziv: LZ77 (1977) e LZ78 (1978) rilevano sottostringhe ripetute ed emettono riferimenti invece di byte grezzi. Sul lato della codifica, la codifica di Huffman (vedi l'articolo originale del 1952) assegna codici più brevi a simboli più probabili. La codifica aritmetica e la codifica a intervalli sono alternative a grana più fine che si avvicinano al limite dell'entropia, mentre i moderni Sistemi Numerici Asimmetrici (ANS) ottengono una compressione simile con implementazioni veloci basate su tabelle.
DEFLATE (usato da gzip, zlib e ZIP) combina LZ77 con la codifica di Huffman. Le sue specifiche sono pubbliche: DEFLATE RFC 1951, wrapper zlib RFC 1950, e formato file gzip RFC 1952. Gzip è strutturato per lo streaming ed esplicitamente non tenta di fornire accesso casuale. Le immagini PNG standardizzano DEFLATE come unico metodo di compressione (con una finestra massima di 32 KiB), secondo le specifiche PNG