HFS
Sistema de Archivos Jerárquicos o Hierarquical File System (HFS), es un sistema de archivos desarrollado por Apple Inc. para su uso en computadores que corren Mac OS. Originalmente diseñado para ser usado en disquetes y discos duros, también es posible encontrarlo en dispositivos de solo-lectura como los CD-ROMs. HFS es el nombre usado por desarrolladores, pero en la documentación de usuarios el formato es referido como estándar Mac Os
Historia
HFS fue introducido por Apple en septiembre de 1985 para reemplazar el Macintosh File System (Sistema de Archivos Macintosh o MFS), el sistema de archivos original el cual fue introducido un año antes que los Computadores Macintoshcompartió un número de características del diseño con MFS que no estaban disponibles en otros sistemas de ficheros de aquellos tiempos (tales como FAT de DOS). Los archivos podrían tener bifurcaciones múltiples (normalmente datos y una bifurcación del recurso), lo cuál permitió que el código del programa fuese almacenado por separado de recursos tales como iconos que pudiesen necesitar ser localizados. Los archivos fueron referidos con IDs únicas y los nombres del archivo podían tener 255 caracteres de largo.
Diseño
El sistema de ficheros jerárquico divide un volumen en bloques lógicos de 512 bytes. Estos bloques lógicos están agrupados juntos en bloques de asignación (allocation blocks) que pueden contener uno o más bloques lógicos dependiendo del tamaño total del volumen. HFS usa un valor de dirección de 16 bits para los bloques de asignación, limitando el número de bloques de asignación a 65.536.
Hay cinco estructuras que conforman un volumen HFS:
1. Bloques lógicos 0 y 1 del volumen son los bloques de arranque, que contienen la información de inicio del sistema.
2. Bloque lógico 2 contiene el directorio MDB (Master Directory Block). Este define una amplia variedad de datos sobre el volumen en sí, por ejemplo la fecha y timestamp de cuando se creó el volumen, la localización de las otras estructuras de volumen, como el volumen del mapa de bits o el tamaño de las estructuras lógicas como los bloques de asignación.
3. Bloque lógico 3 es el bloque de inicio del volumen del mapa de bits (Volume Bitmap), que mantiene un registro de los bloques de asignación que están en uso y de los que están libres. Cada bloque de asignación en el volumen es representado por un bit en el mapa: si el bit está activado el bloque está en uso; si esta desactivado el bloque está libre para ser utilizado.
4. El Extent Overflow File (Archivo de desbordamiento) es un árbol B* que contiene extensiones que registran que bloques de asignación están asignados a que archivos, una vez que las tres extensiones iniciales del Catalog File están usadas.
5. El Catalog File es otro árbol B* que contiene registros para todos los archivos y directorios almacenados en el volumen. Almacena cuatro tipos de registros.
· A Un File Thread Record almacena solo el nombre del fichero y el CNID de su directorio padre.
· A Un File Record almacena diversidad de metadatos sobre el fichero incluyendo su CNID.
· A Un Directory Record almacena datos como el número de ficheros almacenados en el directorio, el CNID del directorio, tres marcas de tiempo (momento de creación, última modificación y último back up)
Problemas
El Catalog File, que almacena todos los registros de archivos y directorios en una estructura de datos sencilla, resulta un problema de rendimiento cuando el sistema permite multitarea, solo un programa puede escribir en esta estructura a la vez, esto significa que muchos programas deben estar esperando en cola hasta que el primer programa libera el sistema. También es un problema serio de fiabilidad dañar este archivo ya que puede destruir el sistema de ficheros entero. Además, el límite de 65.535 bloques de asignación da lugar a archivos que tienen un tamaño “mínimo” equivalente a 1/65.535 del tamaño del disco. Por lo tanto, cualquier volumen, no importa su tamaño, solo puede almacenar un máximo de 65.535 archivos. Sin embargo, a cualquier archivo se le podría asignar más espacio del que necesita realmente, hasta el tamaño del bloque de asignación.