La subasignación de bloques es una característica de algunos sistemas de archivos informáticos que permite utilizar grandes bloques o unidades de asignación mientras se hace un uso eficiente del espacio "flojo" al final de los archivos grandes, espacio que de otro modo se perdería para otro uso debido a la fragmentación interna . [1]
En los sistemas de archivos que no admiten fragmentos, esta característica también se denomina fusión de cola o empaquetado de cola porque se hace comúnmente empaquetando la "cola", o el último bloque parcial, de varios archivos en un solo bloque.
Razón fundamental
Los sistemas de archivos tradicionalmente han dividido el disco en bloques de igual tamaño para simplificar su diseño y limitar la fragmentación en el peor de los casos . Los tamaños de bloque suelen ser múltiplos de 512 debido al tamaño de los sectores del disco duro . Cuando algunos sistemas de archivos tradicionales asignan archivos, solo se pueden asignar bloques completos a archivos individuales. Pero como los tamaños de los archivos a menudo no son múltiplos del tamaño del bloque del sistema de archivos, este diseño da como resultado inherentemente que los últimos bloques de archivos (llamados colas ) ocupen solo una parte del bloque, lo que da como resultado lo que se llama fragmentación interna (que no debe confundirse con fragmentación externa ). Este desperdicio de espacio puede ser significativo si el sistema de archivos almacena muchos archivos pequeños y puede volverse crítico cuando se intenta utilizar tamaños de bloque más altos para mejorar el rendimiento. FFS y otros sistemas de archivos UNIX derivados admiten fragmentos [ cita requerida ] que mitigan en gran medida este efecto.
Esquemas de subasignación
La subasignación de bloques resuelve este problema dividiendo un bloque de cola de alguna manera para permitirle almacenar fragmentos de otros archivos.
Algunos esquemas de subasignación de bloques pueden realizar la asignación a nivel de bytes; la mayoría, sin embargo, simplemente divide el bloque en bloques más pequeños (el divisor suele ser una potencia de 2). Por ejemplo, si un archivo de 38 KiB se va a almacenar en un sistema de archivos que utilice bloques de 32 KiB, el archivo normalmente abarcaría dos bloques, o 64 KiB, para el almacenamiento; los 26 KiB restantes del segundo bloque se convierten en espacio libre no utilizado. Sin embargo, con una subasignación de bloque de 8 KiB, el archivo ocuparía solo 6 KiB del segundo bloque, dejaría 2 KiB (del bloque de subasignación de 8 KIB) holgados y liberaría los otros 24 KiB del bloque para otros archivos.
Embalaje de cola
Desde entonces, algunos sistemas de archivos se han diseñado para aprovechar este espacio no utilizado y pueden empaquetar las colas de varios archivos en un solo bloque de cola compartido. Si bien esto puede, al principio, parecer que aumentaría significativamente la fragmentación del sistema de archivos, el efecto negativo se puede mitigar con funciones de lectura anticipada en los sistemas operativos modernos : cuando se trata de archivos cortos, varias colas pueden estar lo suficientemente cerca entre sí como para leerse juntas y, por lo tanto, no se introduce una búsqueda de disco . Dichos sistemas de archivos a menudo emplean heurísticas para determinar si vale la pena el empaquetado final en una situación dada, y el software de desfragmentación puede usar una heurística más evolucionada.
Eficiencia
En algunos escenarios en los que la mayoría de los archivos tienen menos de la mitad del tamaño del bloque, como en una carpeta de archivos de código fuente pequeños o imágenes de mapa de bits pequeñas, el empaquetado final puede aumentar la eficiencia del almacenamiento incluso más del doble, en comparación con los sistemas de archivos sin empaquetado final. [2]
Esto no solo se traduce en la conservación del espacio en disco, sino que también puede introducir aumentos de rendimiento, ya que debido a una mayor localidad de referencia , se tienen que leer menos datos, lo que también se traduce en una mayor eficiencia de caché de página . Sin embargo, estas ventajas pueden ser anuladas por la mayor complejidad de implementación . [3]
A partir de 2015[actualizar], los sistemas de archivos de lectura y escritura más utilizados con soporte para la subasignación de bloques son Btrfs y FreeBSD UFS2 [4] (donde se denomina " fragmentación a nivel de bloque "). Una vez populares, ReiserFS y Reiser4 ya no son comunes. [ cita requerida ]
Varios sistemas de archivos de sólo lectura no utilizan bloques en absoluto y, por lo tanto, utilizan implícitamente el espacio de forma tan eficiente como la subasignación de sistemas de archivos; tales sistemas de archivos se duplican como formatos de archivo .
Ver también
Referencias
- ^ Patente estadounidense 6.041.407 (patente fundamental).
- ^ Hans Reiser (2001). "Uso del disco duro, ReiserFS y Ext2fs" . Archivado desde el original el 13 de noviembre de 2006 . Consultado el 14 de diciembre de 2006 .
- ^ Hans Reiser (2001). "Diseño del sistema de archivos ReiserFS" . Archivado desde el original el 13 de noviembre de 2006 . Consultado el 14 de diciembre de 2006 .
- ^ Hervey, Allen (20 de junio de 2005). "Introducción a FreeBSD, PacNOG I Workshop, Temas adicionales, UFS2 y actualizaciones suaves hacen una combinación poderosa" (PDF) . Me PacNOG . pag. 23 . Consultado el 22 de julio de 2012 .
- Daniel Robbins (1 de agosto de 2001). "Guía del implementador del sistema de archivos avanzado, parte 2" . Hilos comunes, IBM . Consultado el 14 de diciembre de 2006 .