7. Macintosh Hierarchical file system - HFS

Tutti i dispositivi di memorizzazione dei MacIntosh, ad esclusione dei floppy, sono partizionati su uno o più volumi. I volumi contengono quattro tipi di voci: file, directory, directory concatenate e file concatenati. Ogni voce è descritta da un record catalogo, analogo agli inode Unix. I record catalogo sono organizzati su disco in un albero bilanciato (B-tree). Solo un file può occupare spazio fuori da questi record catalogo.

Un file MacIntosh contiene due componenti o fork. Il fork di risorse è un file indicizzato contenente segmenti di codice, voci dei menu, finestre di dialogo,etc. Il fork dati ha la semantica Unix di una sequenza di byte. Ogni fork è costituito da uno o più gruppi di blocchi contigui. Un descrittore dimensionale codifica in un numero a 32bit il blocco iniziale e la lunghezza. Il primo record dimensionale (tre descrittori dimensionali) di ogni fork è parte del record catalogo del file. Ogni successivo record dimensionale viene tenuto nel'albero B-Tree dimensionale per gli overflow.

In aggiunta alle estensioni per file e B-Tree, un volume contiene anche due blocchi di boot, un blocco di informazioni sul volume ed una bitmap dello spazio libero. C'è una notevole quantità di ridondanza nelle strutture dati su disco, la quale favorisce il recupero da crash. Sebbene non strettamente parte del file system, bisogna notare che diversi campi dei record catalogo sono riservati ad uso esclusivo di Finder, un programma che gestisce l'accesso degli utente al file system e mantiene automaticamente le associazioni tra l'applicazione ed il file dati. Così, HFS deve anche mantenere le informazioni di Finder.

Ogni file e directory in un volume HFS possiede un numero identificativo, simile al numero di inode nel file system Unix. Tuttavia, un file o directory è chiamato a partire dal numero identificativo del genitore e dal nome del file o directory, una stringa di 32 caratteri anche nulli. Questa combinazione è la chiave di ricerca del B-Tree catalogo del volume. Il B-Tree catalogo differisce da un tradizionale struttura B-Tree nel fatto che tutti i nodi ad ogni livello dell'albero sono collegati fra di loro a formare una doppia lista collegata e che tutti i record sono nei nodi foglia. Queste variazioni permettono di accedere a molte voci in una stessa directory attraversando le foglie usando le liste collegate. Per essere precisi, i B-Tree di HFS sono varianti dei B+-Tree sebbene la documentazione tecnica di Apple li chiami B*-Tree.

Ogni directory, inclusa la directory root, contiene il proprio directory thread, il quale contiene un nome vuoto. Il record del directory thread contiene il nome della directory e l'id del genitore della directory. In maniera simile, un file thread contiene il nome del file e l'id della directory che lo contiene.Mentre ogni directory deve contenere un directory thread, i file thread sono poco comuni. Infatti, entrambi sono esempi della ridondanza di HFS: per alberi non danneggiati, i thread non sono strettamente necessari. I record dei file e delle directory contengono entrambi 32 byte di informazioni uilizzati da Finder. I primi tre descrittori dimensionali per il B-Tree catalogo sono memorizzati nel blocco di informazioni del volume. Se il B-Tree catalogo cresce oltre i tre descrittori, i rimanenti descrittori dimensionali sono memorizzati nell'overflow dimensionale.

I file system HFS e HFS+ (chiamato anche Sequoia) sono molte ben documentati. La miglior fonte di informazioni tecniche su HFS è la serie di libri Inside Macintosh. Vedi su . Il file system HFS+ è descritto in Nota tecnica 1150, disponibile su . Molte informazioni sonon disponibili anche in altre note tecniche. I seguenti link sono raccolti da Paul H. Hargrove:

7.1. Accedere a HFS da Linux

7.2. Accedere a HFS da OS/2 (HFS/2)

HFS/2 permette ad utenti OS/2 di leggere e scrivere facilmente file su floppy formattati con HFS, il file system usato dai computer MacIntosh. Con HFS/2, i dischetti MacIntosh possono essere usati come normali dischetti.

Il programma non è più sviluppato perchè l'autore non usa più OS/2. Se sei interessato ad usare il programma, contattalo.

7.3. Accedere a HFS da Windows 95/98/NT (HFV Explorer)

Un browser di volumi HFS per WindowsNT e Windows 9x basato sulle hfsutils. Supporto per il lancio di tutti i principali emulatori MacIntosh per Windows.

7.4. Accedere a HFS da DOS (MAC-ETTE)

Mac-ette è una utility per PC che può leggere, scrivere, formattare e copiare floppy da 1.4M formattati HFS, su un PC equipaggiato con un drive 3.5 ad alta densità.

7.5. HFS util

Il pacchetto hfsutil contiene un insieme di programmi di utilità da linea di comando quali hformat, hmount, hdir, hcopy, etc. Queste permettono di accedere in lettura e scrittura a file e directory nei volumi HFS.

7.6. MacFS: una libreria portabile per il file system Macintosh

E' una libreria per il file system MacIntosh che è portabile su una varietà di sistemi operativi e piattaforme. Presenta una interfaccia di programmazione sufficiente per creare una API a livello utente e per driver di file system per i sistemi operativi che li supportano. Gli autori hanno realizzato questa interfaccia utente e programmi di utilità sia usando questa libreria sia su uno Unix Virtual File System sperimentale. Descrivono anche il file system gerarchico di MacIntosh e la loro implementazione e notano che il progetto non è molto adatto per la rientranza (reentrancy) e che le sue complesse strutture dati possono portare a realizzazioni lente in ambienti multi-programma. La misura delle prestazioni mostra che questa implementazione è più veloce di quella nativa di MacIntosh nel creare, cancellare, leggere e scrivere file di dimensioni modeste, ma che è più lenta del file system veloce (FFS) di Berkeley. Tuttavia, la versione nativa di MacIntosh può eseguire grandi operazioni di lettura e scrittura più velocemente sia di MacFs che di FFS.