HPFS

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 13 de junio de 2016; las comprobaciones requieren 10 ediciones .

HPFS  (abreviatura del inglés  High performance file system ) es un sistema de archivos desarrollado por especialistas de Microsoft e IBM basado en la experiencia de IBM en la creación de sistemas de archivos MVS , VM y un método de acceso virtual. el proyecto fue dirigido por el experimentado programador de Gordon Letwin

La compatibilidad con HPFS apareció por primera vez en OS /2 versión 1.2. Desde entonces, el soporte nativo para HPFS ha estado presente en todas las versiones de OS/2 . Windows NT tenía soporte para HPFS hasta la versión 3.51 inclusive (aunque hay casos de éxito en el uso del antiguo controlador HPFS en Windows NT 4.0 y Windows 2000). Posteriormente, Microsoft abandonó HPFS en favor de su propio sistema de archivos NTFS , cuyo desarrollo tuvo en cuenta la experiencia de crear HPFS.

En OS/2, hay una versión de servidor del controlador HPFS llamada HPFS386 que tiene algunas funciones adicionales.

Estructura

Un disco en HPFS se divide en sectores de un tamaño fijo (512 bytes en la implementación actual, mientras que el número de sector o cantidad de sectores se codifica internamente como un entero sin signo de 4 bytes, lo que permite direccionar discos hasta 2 32 * 512 = 2 terabytes de tamaño ).

Hay varios bloques de control al principio del disco:

  1. Sector de arranque DOS tipo -ovskogo.
  2. SuperBlock contiene información sobre la geometría del disco, punteros a mapas de bits (los llamados mapas de bits , del inglés  bitmaps ) de espacio libre, un puntero al directorio raíz, el tamaño de la franja del disco, el número de franja con directorios, un puntero a la lista de bloques defectuosos, etc. SuperBlock también contiene la fecha en que se ejecutó por última vez CHKDSK . Normalmente solo los programas CHKDSK y FORMAT cambian el SuperBlock .
  3. SpareBlock contiene punteros al grupo de áreas HOTFIX , el grupo de tolerancia a errores del área (solo HPFS386 usa tolerancia a errores), el grupo de bloques para operaciones de disco casi llenas y otros indicadores, indicadores y descriptores.
  4. Área de arranque.
  5. El área de sectores utilizados (temporalmente) para realizar operaciones que requieren espacio adicional en disco. Esta área, por ejemplo, se usa a veces cuando se cambia el nombre de un archivo en un disco lleno.
  6. Otras areas.

Para determinar si un sector está libre u ocupado, HPFS utiliza mapas de bits , donde cada bit corresponde a un sector. Si el bit contiene 1, significa que el sector está ocupado, de lo contrario está libre. Si solo hubiera un mapa de bits en todo el disco, para cambiarlo, tendría que mover los cabezales de lectura/escritura, en promedio, a través de la mitad del disco. Para evitar esto, HPFS divide el disco en "bandas" (o grupos , del inglés  bands ) de 8 megabytes de largo y almacena mapas de bits de sectores libres al principio o al final de cada tira. En este caso, los mapas de bits de las bandas adyacentes se ubican uno al lado del otro:

±------------ 16 MB -----------+ *** - Mapa de bits del sector Uso/Libre. | | ±-|-------------±----------±--|--±------±-- -------- ----+ |*** Banda 0 | Carril 1 ***|*** Carril 2 | Banda 3 ***| ±---------------±--------------±----------------±- - ------------+ 0 MB 8 MB 16 MB 24 MB 32 MB

La distancia entre dos mapas de bits es de 16 MB. El tamaño de la franja (8 MB) puede cambiarse en futuras versiones de HPFS, ya que no hay enlaces directos a él. HPFS determina el tamaño de la franja cuando lee bloques de control del disco durante una operación FSHelperAttach.

El tamaño del mapa de bits es 2K (8 MB/512/8 = 2K).

La tira en el centro del disco se usa para almacenar directorios. Esta banda se llama Banda Directorio. Sin embargo, si se llena, HPFS comenzará a colocar directorios de archivos en otros carriles.

Los archivos y directorios en HPFS se basan en un objeto fundamental llamado FNode . Cada FNode ocupa un sector y en HPFS siempre se ubica cerca de su archivo o directorio (generalmente inmediatamente antes del archivo o directorio). El FNode contiene la longitud y los primeros 15 caracteres del nombre del archivo, estadísticas sobre el acceso al archivo, información interna, atributos extendidos y ACL (o solo una parte si son muy grandes), información asociativa sobre la ubicación y subordinación del archivo, etc. .

La longitud de los nombres de archivos y directorios con sustitución completa (desde la raíz) no debe exceder los 260 caracteres, mientras que cada componente de la ruta no debe tener más de 255 caracteres. Los siguientes caracteres no están permitidos en los nombres de archivo:

0h-1Fh , 7Fh , /, |, \, *, ?, ", <, >

Las secuencias de espacios finales se ignoran, si hay un punto al final del archivo, también se ignora (por compatibilidad del programa). Dentro del nombre del archivo, el punto es el mismo carácter que el resto. No hay problemas con las letras rusas. Cuando se crea un archivo, HPFS recuerda la ortografía de su nombre, aunque no distingue entre mayúsculas y minúsculas en otras operaciones que no sean las que devuelven información sobre el archivo.

Ejemplos de nombres:

  1. "ARCHIVO.ASM"
  2. "Archivo Malvado. ASM.OBJ.EXE"
  3. “Una aún más viciosa. TXT"

Desde una perspectiva de ubicación, los archivos, los directorios y sus atributos extendidos (si no caben en un FNode) son tratados por HPFS como conjuntos de extensión . La extensión es la parte del archivo que se encuentra en sectores consecutivos. Cada extensión se describe mediante dos números: el número del primer sector y la longitud (en sectores). HPFS siempre fusiona dos extensiones consecutivas en una sola. El tamaño mínimo de extensión es un sector. Dado que la distancia entre mapas de bits adyacentes de sectores libres es de 16 MB, el tamaño de la extensión máxima es de 16 MB. Si el archivo consta de ocho extensiones o menos, su descripción completa se almacena en el FNode.

Si el archivo consta de más de ocho extensiones, entonces su descripción puede ocupar varios sectores ubicados más cerca del archivo, mientras que estos sectores no contienen una lista, sino un árbol de extensiones B + equilibrado cosido. El árbol está construido de tal manera que su desequilibrio nunca supera 1/3 de volumen, y no difiere del óptimo en más de un nivel. La raíz del árbol está en FNode y puede contener hasta 12 elementos. Cada sector adicional, que es una rama de árbol, contiene hasta 60 elementos y una hoja contiene 40 elementos. Por lo tanto, si un archivo consta de una extensión de sector (¡nunca sucederá!) y tiene un tamaño de 2 GB, requerirá un árbol con la siguiente estructura para describirlo: 12*60*60*60*40=53 MB de hojas y 1,7 MB de ramas. Para el acceso aleatorio a cualquier parte del archivo, esto requerirá (en el peor de los casos) 5 lecturas de estructuras de control.

Los archivos reales constan de 1 a 3 extensiones.

El tamaño máximo de archivo en HPFS ahora es de 2 GB, pero esto solo está determinado por el tamaño del campo de tamaño de archivo y el puntero de archivo (4 bytes) en el propio OS/2 y su API . Este no es el límite de HPFS. Cabe recordar que HPFS no tiene el concepto de clúster, un archivo puede ocupar 1, 2, 3, 4 o cualquier otra cantidad de sectores.

Al crear/expandir archivos, HPFS intenta minimizar la cantidad de extensiones utilizando estadísticas, mapas de bits de sector libre y otra información. Por ejemplo, HPFS intenta reservar condicionalmente al menos 4 kilobytes de espacio al final de los archivos que crecen. Otro truco es colocar archivos de crecimiento competitivo o archivos abiertos por diferentes cadenas o procesos en diferentes franjas de disco.

Los directorios en HPFS, como en FAT , forman una estructura de árbol. Pero al mismo tiempo, dentro del directorio, HPFS crea un árbol B * equilibrado basado en nombres de archivos para buscar rápidamente un archivo por nombre dentro del directorio. Por ejemplo, si un directorio contiene 4096 archivos, FAT leerá un promedio de 64 sectores para encontrar un archivo dentro del directorio, mientras que HPFS leerá de 2 a 4 sectores y encontrará el archivo.

El tamaño de bloque en términos de qué directorios se asignan es de 2 KB en la versión actual de HPFS. El tamaño de un registro que describe un archivo depende del tamaño del nombre del archivo. Si el nombre tiene 13 bytes (8,3), un bloque de 2 kilobytes contiene 41 descriptores de archivos. Los bloques están cosidos en lista (al igual que los descriptores de extensión) para facilitar el recorrido secuencial.

HPFS no tiene los problemas de FAT de "pérdida" de espacio en disco al eliminar una gran cantidad de archivos en un directorio.

Cambiar el nombre de un archivo puede resultar en el reequilibrio del árbol. Esta operación puede requerir la asignación de bloques adicionales en un disco completo. En este caso, los bloques se toman de un grupo especial, cuyo puntero se encuentra en SpareBlock.

Los atributos extendidos y sus variantes ACL HPFS se almacenan en FNode. Si no encajan en el FNode, HPFS los almacena casi como un archivo mediante la creación de un B±Tree para eso. Los nombres de atributos extendidos anteriores a HPFS386 no estaban alineados en un B-Tree.

HPFS386

HPFS386  es un controlador para el sistema de archivos HPFS , que está diseñado para sistemas de servidor con una gran carga en las operaciones de disco. El controlador HPFS386 se envía con LAN Server para OS/2 .

Las principales diferencias entre HPFS386 y el controlador HPFS estándar en OS / 2 :

  • código de 32 bits
  • sin restricciones en el tamaño del caché (el caché está limitado solo por el tamaño de la RAM )
  • soporte para ACL .

Literatura