Tabla de Asignación de Archivos

De MadriSX wiki
(Redirigido desde «VFAT»)
Ir a la navegaciónIr a la búsqueda
FAT12 FAT16 FAT32
Desarrollador Microsoft
Nombre completo Tabla de Asignación de Archivos
(versión de 12 bits) (versión de 16 bits) (versión de 32 bits)
Introducido 1977 (Microsoft Disk BASIC) Julio 1988 (MS-DOS 4.0) Agosto 1996 (Windows 95 OSR2)
Identificador de partición 0x01 (MBR) 0x04, 0x06, 0x0E (MBR) 0x0B, 0x0C (MBR)
EBD0A0A2-B9E5-4433
-87C0-68B6B72699C7
(GPT)
Estructuras FAT12 FAT16 FAT32
Contenido de carpeta Tabla
Ubicación de archivo Lista enlazada
Bloques defectuosos Lista enlazada
Límites FAT12 FAT16 FAT32
Tamaño máximo de archivo 32 MiB 4 GiB
Número máximo de archivos 4.077 65.517 268.435.437
Longitud máxima del nombre de archivo 8.3 (11) o 255 caracteres cuando se usan LFNs
Tamaño máximo del volumen 32 MiB 4 GiB 2 TiB
Características FAT12 FAT16 FAT32
Fechas almacenadas Creación, modificación, acceso
Rango de fechas soportado 1 de enero de 1980 - 31 de diciembre de 2107
Metadatos No de modo nativo
Atributos Sólo lectura, oculto, sistema, archivo, nombre del volumen
Permisos No
Compresión transparente Por volumen, Stacker, DoubleSpace, DriveSpace No
Cifrado transparente Por volumen sólo con DR-DOS No

Tabla de Asignación de Archivos, en inglés, File Allocation Table (FAT) es un sistema de ficheros desarrollado para MS-DOS, así como el sistema de archivos principal de las ediciones no empresariales de Microsoft Windows hasta Windows Me.

FAT es relativamente sencillo. A causa de ello, es un formato popular para disquetes admitido prácticamente por todos los sistemas operativos existentes para ordenador personal. Se utiliza como mecanismo de intercambio de datos entre sistemas operativos distintos que coexisten en el mismo ordenador, lo que se conoce como entorno multiarranque. También se utiliza en tarjetas de memoria y dispositivos similares.

Las implementaciones más extendidas de FAT tienen algunas desventajas. Cuando se borran y se escriben nuevos ficheros tiende a dejar fragmentos dispersos de éstos por todo el soporte. Con el tiempo, esto hace que el proceso de lectura o escritura sea cada vez más lento. La denominada desfragmentación es la solución a esto, pero es un proceso largo que debe repetirse regularmente para mantener el sistema de ficheros en perfectas condiciones. FAT tampoco fue diseñado para ser redundante ante fallos. Inicialmente solamente soportaba nombres cortos de fichero: ocho caracteres para el nombre más tres para la extensión. También carece de permisos de seguridad: cualquier usuario puede acceder a cualquier fichero.

Historia y versiones

El sistema de archivos FAT fue creado por Bill Gates y Marc McDonald en 1977 con el objeto de manejar discos en BASIC. Fue incorporado por primera vez en el sistema operativo QDOS por Tim Paterson en Agosto de 1980, para los ordenadores S-100 de arquitectura Intel 8086. Este sistema de ficheros fue la principal diferencia entre QDOS y CP/M.

FAT12

La versión inicial de FAT se conoce ahora como FAT12. Es un sistema de ficheros para disquete, por lo que tiene varias limitaciones:

  • No soporta anidación de carpeta.
  • Las direcciones de bloque solamente contienen 12 bits. Esto complica la implementación.
  • El tamaño del disco se almacena como una cuenta de 16 bits expresada en sectores, lo que limita el espacio manejable a 32 megabytes.

En aquella época, el habitual disquete (5,25 pulgadas en una sola cara) constaba de 40 pistas con 8 sectores por pista, resultando en una capacidad inferior a 160 kilobytes. Este límite excedía la capacidad en más de un orden de magnitud, y al mismo tiempo, permitía encajar todas las estructuras de control en la primera pista. Por tanto, se evitaba el movimiento de los cabezales en las operaciones de lectura y escritura. Estos límites fueron superados en los años posteriores.

Con el propósito de soportar el reciente IBM PC, que disponía de un disco duro de 10 megabytes, MS-DOS 2.0, y carpetas anidadas, simplemente se utilizaron clusters de 8 kilobytes en el disco duro. El formato de FAT en sí mismo no cambió.

En 1984, IBM lanzó el PC AT, con 20 megabytes de disco duro. Al mismo tiempo, Microsoft lanzó MS-DOS 3.0. Las direcciones de los cluster fueron ampliadas a 16 bits, permitiendo un número mayor de clusters (65.536 exactamente). Por tanto, soportaba mayores tamaños de sistema de ficheros. A pesar de todo, no hubo mejoras en el límite máximo de 32 megabytes.

MS-DOS 3.0 también incorporó soporte a disquetes de alta densidad de 5'25 pulgadas (1'2 megabytes de capacidad), con 15 sectores por pista, y en consecuencia, más espacio para FAT. Esto probablemente forzó una dudosa optimización del tamaño del clúster, que bajó de dos sectores a sólo uno. El efecto global fue una reducción significativa de los tiempos de lectura y escritura frente a los disquetes de doble densidad.

Estructura de la FAT12 en un disquete de 1'44M:

512 Byte Primer sector físico del disco flexible (Pista Cero)
3 Byte Código máquina de salto ( jmp short 0x3E; nop ) 0EBh 03Ch 090h
8 Byte Cadena que identifica el fabricante del disco 'mkdosfs',0
2 Byte Bytes por sector 512
1 Byte Sectores por cluster 1
2 Byte Sectores reservados 1
1 Byte Número de FAT's 2
2 Byte Entradas máximas en directorio raíz 244
2 Byte Sectores totales 2880
1 Byte Descriptor de medio (0F0h para discos de 1'44M) 240
2 Byte Sectores por fat 9
2 Byte Sectores por pista 12
2 Byte Número de caras 2
4 Byte Sectores ocultos 0
4 Byte Longitud total de sectores 0
1 Byte Número de unidad 0
1 Byte Banderas 0
1 Byte Firma (029h) 41
4 Byte Número de serie 4294967295
12 Byte Etiqueta de volumen 'DISCO EJPLO '
8 Byte Identificador de formato 'FAT12 '
446 Byte Código máquina del cargador de arranque [...]
2 Byte Firma de unidad arrancable 055AAh

FAT16

En 1987 apareció lo que hoy se conoce como el formato FAT16. Se eliminó el contador de sectores de 16 bits. El tamaño de la partición ahora estaba limitado por la cuenta de sectores por clúster, que era de 8 bits. Esto obligaba a usar clusters de 32 Kbytes con los usuales 512 bytes por sector. Así que el límite definitivo de FAT16 se situó en los 2 gigabytes.

Esta mejora estuvo disponible en 1988 gracias a MS-DOS 4.0. Mucho más tarde, Windows NT aumentó el tamaño máximo del cluster a 64 kilobytes gracias al "truco" de considerar la cuenta de clusters como un entero sin signo. No obstante, el formato resultante no era compatible con otras implementaciones de la época, y además, generaba mucha fragmentación interna (se ocupaban clusters enteros aunque solamente se precisaran unos pocos bytes). Windows 98 fue compatible con esta extensión en lo referente a lectura y escritura. Sin embargo, sus utilidades de disco no eran capaces de trabajar con ella.

VFAT y FASTFAT

Windows 3.11 introdujo un nuevo esquema de acceso a los sistemas de ficheros, usando el modo protegido de 32 bits (presente en los Intel 386 y posteriores) esquivando el núcleo de MS-DOS. Para ello, usaba directamente el BIOS o el hardware de la unidad de disco. Esto también permitía utilizar una caché, acelerando el acceso. Todo esto se denominó VFAT o FAT virtual.

Windows NT 3.1 proporcionaba la misma aproximación, pero denominándolo FASTFAT. Sin embargo, era natural que los controladores de Windows NT utilizasen el modo protegido de 32 bits. A menudo se confunde con el soporte LFN (nombres largos de fichero) ya que éste estaba habilitado por defecto en Windows 95.

LFN o Nombres largos de archivo

Uno de los objetivos de los diseñadores de Windows 95 fue el uso de nombres más largos para los ficheros. Se implementó sobre FAT utilizando un truco en el modo de almacenar los índices de los directorios. Esta implementación también se conoce como VFAT por culpa del controlador de Windows 95 que lo incorporó por primera vez. Los nombres largos también se soportaron en Windows NT a partir de la versión 3.5.

FAT32

FAT32 fue la respuesta para superar el límite de tamaño de FAT16 al mismo tiempo que se mantenía la compatibilidad con MS-DOS en modo real. Microsoft decidió implementar una nueva generación de FAT utilizando direcciones de cluster de 32 bits (aunque sólo 28 de esos bits se utilizaban realmente).

En teoría, esto debería permitir aproximadamente 268.435.538 clusters, arrojando tamaños de almacenamiento cercanos a los dos terabytes. Sin embargo, debido a limitaciones en la utilidad ScanDisk de Microsoft, no se permite que FAT32 crezca más allá de 4.177.920 clusters por partición (es decir, unos 124 gigabytes). Posteriormente, Windows 2000 y XP situaron el límite de FAT32 en los 32 gigabytes. Microsoft afirma que es una decisión de diseño, sin embargo, es capaz de leer particiones mayores creadas por otros medios.

FAT32 apareció por primera vez en Windows 95 OSR2. Era necesario reformatear para usar las ventajas de FAT32. Curiosamente, DriveSpace 3 (incluido con Windows 95 y 98) no lo soportaba. Windows 98 incorporó una herramienta para convertir de FAT16 a FAT32 sin pérdida de los datos. Este soporte no estuvo disponible en la línea empresarial hasta Windows 2000.

El tamaño máximo de un fichero en FAT32 es 4 gigabytes, lo que resulta engorroso para aplicaciones de captura y edición de video, ya que los archivos generados por éstas superan fácilmente ese límite.

Otros fabricantes

Otros sistemas operativos tales como GNU/Linux, FreeBSD y BeOS soportan FAT, y la mayoría también soportan VFAT y FAT32 en menor extensión. Las primeras ediciones de GNU/Linux también apoyaron un formato conocido como UMSDOS. Este consistía en una variante de FAT que admitía los permisos de seguridad típicos en Unix, además de los nombres largos de éste. Para ello, se almacenaba esta información en un fichero FAT separado que se denominaba "--linux--.---" (por tanto, conservando compatibilidad total). UMSDOS quedó en desuso con la aparición de VFAT en recientes versiones del núcleo de Linux. El sistema operativo Mac OS X también soporta sistemas de ficheros FAT, siempre que no se trate del volumen de arranque del sistema.

FAT y meta-datos

NOTA: Los meta-datos son atributos asociados a un archivo pero que no forman parte de él (por ejemplo, la fecha o el autor). Este concepto recibe otras denominaciones tales como filesystem fork, alternate data streams (en Windows), etc.

El sistema de ficheros FAT no está diseñado para albergar meta-datos. Algunos sistemas operativos que los necesitan incorporaron varios métodos para simularlos. Por ejemplo, almacenándolos en ficheros o carpetas extra (de manera similar a UMSDOS) o también otorgando una semántica especial a estructuras no usadas en el formato original. No obstante, este último método no es compatible con herramientas no preparadas para esta extensión. Por ejemplo, una herramienta de desfragmentación podría destruir los meta-datos. Mac OS, a través de la utilidad PC Exchange, almacena meta-datos en un fichero oculto denominado "FINDER.DAT" (uno por carpeta). Mac OS X almacena los metadatos en un fichero oculto denominado como su propietario, pero comenzando por ".-". Cuando se trata de meta-datos de una carpeta, los almacena en un fichero oculto llamada ".DS_Store".

OS/2 también depende fuertemente del uso de meta-datos. Los almacena en un fichero oculto denominado "EA DATA. SF" en la carpeta raíz del volumen. También reserva dos bytes en el fichero (o carpeta) para poder indexarlo. Los meta-datos se acceden a través del escritorio Workplace Shell, a través de guiones REXX, o a través de utilidades como 4OS2.

Windows NT soporta meta-datos en los sistemas de archivos HPFS, NTFS y FAT (mediante el mismo mecanismo que OS/2). Pero no es posible copiar meta-datos entre sistemas de archivos distintos. Windows 2000 se comporta exactamente igual que Windows NT, pero ignora los meta-datos cuando copia ficheros desde FAT32 a otros sistemas de ficheros.

Perspectivas de futuro

Dado que Microsoft no seguirá soportando sistemas operativos basados en MS-DOS, es poco probable que se desarrollen nuevas versiones de FAT. NTFS es un sistema de archivos superior a éste en múltiples aspectos: eficiencia, rendimiento y fiabilidad. Su principal desventaja es el excesivo tamaño que desperdicia en pequeños volúmenes y su limitado soporte en otros sistemas operativos. Sus especificaciones son un secreto comercial.

FAT es, hoy por hoy, el sistema de archivos habitual en medios de almacenamiento extraíbles (con la excepción hecha del CD y DVD). FAT12 se usa en disquetes, y FAT16 en el resto de medios (por ejemplo, tarjetas de memoria y llaveros USB). La mayoría de estos medios no son lo suficientemente grandes como para beneficiarse de FAT32. FAT se utiliza por motivos de compatibilidad y menor desperdicio del espacio disponible.

El soporte FAT32 en Windows 2000 y XP está limitado a discos de 32 gigabytes [1], lo que obliga a usuarios de discos duros modernos a usar NTFS o utilizar utilidades de terceros al margen de Windows.

Diseño

El sistema de archivos FAT se compone de cuatro secciones:

  • El sector de arranque. Siempre es el primer sector de la partición (volumen) e incluye información básica, punteros a las demás secciones, y la dirección de la rutina de arranque del sistema operativo.
  • La región FAT. Contiene dos copias de la tabla de asignación de archivos (por motivos de seguridad). Esto son mapas de la partición, indicando qué clusters están ocupados por los ficheros.
  • La región del directorio raíz. Es el índice principal de carpetas y ficheros.
  • La región de datos. Es el lugar donde se almacena el contenido de ficheros y carpetas. Por tanto, ocupa casi toda la partición. El tamaño de cualquier archivo o carpeta puede ser ampliado siempre que queden suficientes clusters libres. Cada cluster está enlazado con el siguiente mediante un puntero. Si un determinado cluster no se ocupa por completo, su espacio remanente se desperdicia.

La tabla de asignación de archivos

Una partición se divide en un conjunto de clusters de idéntico tamaño. Son pequeños bloques discontinuos. El tamaño del clúster depende de la variante de FAT utilizada. Varía entre 2 y 32 kilobytes. Cada fichero ocupa uno o más clusters en función de su tamaño. De manera que un fichero queda representado por una cadena secuencial de clusters (una lista enlazada). Cada clúster de la cadena no tiene por qué ser adyacente al anterior. Esto es lo que provoca la fragmentación.

La tabla de asignación de archivos consta de una lista de entradas. Cada entrada contiene información sobre un clúster:

  • La dirección del siguiente clúster en la cadena.
  • Si es pertinente, la indicación de "fin de fichero" (que es también el fin de la cadena).
  • Un carácter especial para indicar que el clúster es defectuoso.
  • Un carácter especial para indicar que el clúster está reservado (es decir, ocupado por un fichero).
  • El número cero para indicar que el clúster está libre (puede ser usado por un fichero).

El tamaño de estas entradas también depende de la variante FAT en uso: FAT16 usa entradas de 16 bits, FAT32 usa entradas de 32 bits, etc.

El directorio raíz

Este índice es un tipo especial de fichero que almacena las sub-carpetas y ficheros que componen cada carpeta. Cada entrada del directorio contiene el nombre del fichero o carpeta (máximo 8 caracteres), su extensión (máximo 3 caracteres), sus atributos (archivo, carpeta, oculto, del sistema, o volumen), la fecha y hora de creación, la dirección del primer cluster donde están los datos, y por último, el tamaño que ocupa.

El directorio raíz ocupa una posición concreta en el sistema de ficheros, pero los índices de otras carpetas ocupan la zona de datos como cualquier otro fichero.

Los nombres largos se almacenan ocupando varias entradas en el índice para el mismo fichero o carpeta.

Licenciamiento

Microsoft ha solicitado una serie de patentes para elementos clave del sistema de ficheros FAT en los años 90. Su popularidad y compatibilidad lo hacen el formato de elección para memorias flash de cámaras digitales y PDAs, por ejemplo.

En diciembre de 2003, Microsoft anunció que comenzaría a comercializar licencias de uso para FAT al coste de 0,25 dólares por unidad vendida. con un máximo de 250.000 dólares por acuerdo de licencia.

Hasta el momento, Microsoft ha citado cuatro patentes sobre FAT como fundamento de sus pretensiones. Las cuatro se refieren a la implementación de nombres largos:

  • Patente 5.745.902: Método y sistema para acceder un fichero usando nombres largos con diferentes formatos de nombre de fichero. Cubre un modo de generar y asociar un nombre corto "8.3" con uno largo (por ejemplo, "Microsoft.txt" -largo- con "Micros~1.txt" -corto-). Así como el modo de enumerar nombres cortos en conflicto (por ejemplo, "MICROS~2.TXT" y "MICROS~3.TXT").
  • Patente 5.579.517: Espacio de nombres común tanto para nombres cortos como largos de fichero. Cubre un método para encadenar múltiples entradas de nombre corto en el índice para almacenar un nombre largo. La Public Patent Foundation impugnó esta patente con éxito.
  • Patente 5.758.352: Similar a la anterior. También fue impugnada con éxito.
  • Patente 6.286.013: Método y sistema para proporcionar un espacio común de nombres para nombres de fichero tanto largos como cortos en un sistema operativo. Esta patente reclama los métodos usados en Windows 95, 98 y ME para hacer los nombres de ficheros largos compatibles con MS-DOS. Aparentemente, no afecta a ninguna implementación de FAT distinta a la de Microsoft.

Algunos expertos creen que estas patentes no cubren realmente el uso que se hace de FAT en medios extraibles de consumo.

Por otra parte, el documento "Microsoft Extensible Firmware Initiative FAT 32 File System Specification, FAT: General Overview of On-Disk Format", publicado por Microsoft, garantiza una serie de derechos que podrían interpretarse como una licencia para implementar FAT en otros sistemas operativos.

Impugnaciones

Debido al clamor popular para que se volviesen a examinar dichas patentes, la Public Patent Foundation envió pruebas a la Oficina de Patentes sobre trabajos previos de Xerox e IBM. La Oficina reconoció que existían "dudas sustanciales de patentabilidad" y abrió una investigación para revisar dichas patentes.

Finalmente, dicha revisión ha confirmado la validez de las patentes (véase noticia al respecto) en Enero de 2007.

Referencias bibliográficas

Véase también

Enlaces externos

En inglés

Atribución

Este artículo proviene originalmente de Wikipedia y por ello no sigue la licencia general del site, sino la

GNU head GFDL: Se autoriza la copia, la distribución y la modificación de este documento bajo los términos de la licencia de documentación libre GNU, versión 1.2 o cualquier otra que posteriormente publique la Fundación del Software Libre (Free Software Fundation); sin secciones invariables (Unvariant Sections), textos de portada (Front-Cover Texts), ni textos de contraportada (Back-Cover Texts).

Se incluye una copia en inglés de esta licencia en el artículo "GNU Free Documentation License".