El sistema de archivos MS-DOS es uno de los primeros sistemas que se incluyeron con la IBM PC. Era el sistema principal hasta Windows 98 y Windows ME. Aún cuenta con soporte en Windows 2000, Windows XP y Windows Vista, aunque ya no es estándar en las nuevas PCs, excepto por los discos flexibles. Sin embargo, este sistema y una extensión de él (FAT-32) están teniendo mucho uso en va- rios sistemas incrustados. La mayoría de las cámaras digitales lo utilizan. Muchos reproductores de MP3 lo utilizan de manera exclusiva. El popular iPod de Apple lo utiliza como el sistema de archivos predeterminado, aunque los hackers conocedores pueden volver a dar formato al iPod e instalar un sis- tema de archivos distinto. Así, el número de dispositivos electrónicos que utilizan el sistema de archi- vos MS-DOS es inmensamente grande en la actualidad, en comparación con cualquier momento en el pasado, y sin duda es mucho mayor que el número de dispositivos que utilizan el sistema de archi- vos NTFS más moderno. Por esta única razón, vale la pena analizarlo con cierto detalle.
Para leer un archivo, un programa de MS-DOS primero debe realizar una llamada al sistema open para obtener un manejador para el archivo. La llamada al sistema open especifica una ruta, que puede ser absoluta o relativa al directorio de trabajo actual. Se realiza una búsqueda de la ru- ta, componente por componente, hasta que se localiza el directorio final y se lee en la memoria. Después se busca el archivo que se desea abrir.
Aunque los directorios de MS-DOS tienen tamaños variables, utilizan una entrada de directo- rio de tamaño fijo de 32 bytes. El formato de una entrada de directorio de MS-DOS se muestra en la figura 4-31. Contiene el nombre de archivo, los atributos, la fecha y hora de creación, el bloque inicial y el tamaño exacto del archivo. Los nombres de archivo menores de 8 3 caracteres se jus- tifican a la izquierda y se rellenan con espacios a la derecha, en cada campo por separado. El cam- po Atributos es nuevo y contiene bits para indicar que un archivo es de sólo lectura, que necesita archivarse, está oculto o que es un archivo del sistema. No se puede escribir en los archivos de só- lo lectura. Esto es para protegerlos de daños accidentales. El bit archivado no tiene una función del sistema operativo actual (es decir, MS-DOS no lo examina ni lo establece). La intención es permi- tir que los programas de archivos a nivel de usuario lo desactiven al archivar un archivo y que otros programas lo activen cuando modifiquen un archivo. De esta manera, un programa de respaldo só- lo tiene que examinar este bit de atributo en cada archivo para ver cuáles archivos debe respaldar. El bit oculto se puede establecer para evitar que un archivo aparezca en los listados de directorios. Su principal uso es para evitar confundir a los usuarios novatos con los archivos que tal vez no entiendan. Por último, el bit del sistema también oculta archivos. Además, los archivos del sistema no pueden eliminarse de manera accidental mediante el uso del comando del. Los componentes principales de MS-DOS tienen activado este bit.
La entrada de directorio también contiene la fecha y hora de creación del archivo o su última mo- dificación. La hora sólo tiene una precisión de hasta ±2 segundos, debido a que se almacena en un cam- po de 2 bytes, que sólo puede almacenar 65,536 valores únicos (un día contiene 86,400 segundos).
El campo del tiempo se subdivide en segundos (5 bits), minutos (6 bits) y horas (5 bits). La fecha se cuenta en días usando tres subcampos: día (5 bits), mes (4 bits) y año desde 1980 (7 bits). Con un nú- mero de 7 bits para el año y la hora que empiezan en 1980, el mayor año que puede expresarse es 2107. Por lo tanto, MS-DOS tiene integrado un problema para el año 2108. Para evitar una catástrofe, los usuarios de MS-DOS deben empezar con la conformidad con el año 2108 lo más pronto posible. Si MS-DOS hubiera utilizado los campos combinados de fecha y hora como un contador de segundos de 32 bits, podría haber representado cada segundo con exactitud y hubiera retrasado su catástrofe hasta el 2116.
MS-DOS almacena el tamaño de archivo como un número de 32 bits, por lo que en teoría los archivos pueden ser tan grandes como 4 GB. Sin embargo, otros límites (que se describen a conti- nuación) restringen el tamaño máximo de un archivo a 2 GB o menos. De manera sorprendente, no se utiliza una gran parte de la entrada (10 bytes).
MS-DOS lleva la cuenta de los bloques de los archivos mediante una tabla de asignación de ar- chivos (FAT) en la memoria principal. La entrada de directorio contiene el número del primer blo- que del archivo. Este número se utiliza como un índice en una FAT con entradas de 64 KB en la memoria principal. Al seguir la cadena, se pueden encontrar todos los bloques. La operación de la FAT se ilustra en la figura 4-12.
El sistema de archivos FAT viene en tres versiones: FAT-12, FAT-16 y FAT-32, dependiendo de cuántos bits contenga una dirección de disco. En realidad, FAT-32 es algo así como un término equi- vocado, ya que sólo se utilizan los 28 bits de menor orden de las direcciones de disco. Debería ha- berse llamado FAT-28, pero las potencias de dos se oyen mucho mejor.
Para todas las FATs, el bloque de disco se puede establecer en algún múltiplo de 512 bytes (po- siblemente distinto para cada partición), donde el conjunto de tamaños de bloque permitidos (lla- mados tamaños de grupo por Microsoft) es distinto para cada variante. La primera versión de MS-DOS utilizaba FAT-12 con bloques de 512 bytes, para proporcionar un tamaño de partición má- ximo de 212 512 bytes (en realidad sólo son 4086 x 512 bytes, debido a que 10 de las direccio- nes de disco se utilizaban como marcadores especiales, como el de fin de archivo, el de bloque defectuoso, etc.). Con estos parámetros, el tamaño máximo de partición de disco era de aproxima- damente 2 MB y el tamaño de la tabla FAT en memoria era de 4096 entradas de 2 bytes cada una. Utilizar una entrada de tabla de 12 bits hubiera sido demasiado lento.
Este sistema funcionaba bien para los discos flexibles, pero cuando salieron al mercado los dis- cos duros se convirtió en un problema. Microsoft resolvió el problema al permitir tamaños de blo- que adicionales de 1 KB, 2 KB y 4 KB. Este cambio preservó la estructura y el tamaño de la tabla FAT-12, pero permitía particiones de disco de hasta 16 MB.
Tamaño
Extensión Atributos Reservado Fecha Número del primer bloque Bytes 8 3 1 10 2 Nombre de archivo Hora 2 2 4
Ya que MS-DOS soportaba cuatro particiones de disco por cada unidad de disco, el nuevo sis- tema de archivos FAT-12 podía operar discos de hasta 64 MB. Más allá de esa capacidad, algo po- dría fallar. Lo que ocurrió fue la introducción de FAT-16, con apuntadores de disco de 16 bits. Además se permitieron tamaños de bloque de 8 KB, 16 KB y 32 KB (32,768 es la potencia más grande de dos que se puede representar en 16 bits). La tabla FAT-16 ahora ocupaba 128 KB de me- moria principal todo el tiempo, pero con las memorias más grandes que para entonces había dispo- nibles, se utilizó ampliamente y reemplazó con rapidez el sistema de archivos FAT-12. La partición de disco más grande que podía soportar FAT-16 era de 2 GB (64K entradas de 32 KB cada una) y el disco más grande, 8 GB, a saber de cuatro particiones de 2 GB cada una.
Para las cartas comerciales este límite no es un problema, pero para almacenar video digital uti- lizando el estándar DV, un archivo de 2 GB apenas si contiene 9 minutos de video. Como consecuen- cia del hecho de que un disco de PC sólo puede soportar cuatro particiones, el video más grande que se puede almacenar en un disco es de aproximadamente 36 minutos, sin importar qué tan grande sea el disco. Este límite también significa que el video más grande que se puede editar en línea es de me- nos de 18 minutos, ya que se necesitan archivos de entrada y de salida.
Empezando con la segunda versión de Windows 95, se introdujo el sistema de archivos FAT-32 con sus direcciones de disco de 28 bits, donde la versión de MS-DOS que operaba bajo Windows 95 se adaptó para dar soporte a FAT-32. En este sistema las particiones podrían ser en teoría de 228 215bytes, pero en realidad están limitadas a 2 TB (2048 GB) debido a que el sistema lleva de manera interna la cuenta de los tamaños de las particiones en sectores de 512 bytes utilizando un número de 32 bits, y 29 232es 2 TB. El tamaño máximo de partición para los diversos tamaños de bloque y los tres tipos de FAT se muestran en la figura 4-32.
Tamaño de bloque
Figura 4-32. Tamaño máximo de partición para los distintos tamaños de bloque. Los
cuadros vacíos representan combinaciones prohibidas.
Además de soportar discos más grandes, el sistema de archivos FAT-32 tiene otras dos venta- jas en comparación con FAT-16. En primer lugar, un disco de 8 GB que utiliza FAT-32 puede ser de una sola partición. Si utiliza FAT-16 tiene que tener cuatro particiones, lo cual aparece para el usua- rio de Windows como las unidades de disco lógicas C:, D:, E: y F:. Depende del usuario decidir qué archivo colocar en cuál unidad y llevar el registro de dónde se encuentran las cosas.
La otra ventaja de FAT-32 sobre FAT-16 es que para una partición de disco de cierto tamaño, se puede utilizar un tamaño de bloque más pequeño. Por ejemplo, para una partición de disco de 2 GB,
FAT-16 debe utilizar bloques de 32 KB; de lo contrario, con solo 64K direcciones de disco dispo- nibles, no podrá cubrir toda la partición. Por el contrario, FAT-32 puede utilizar, por ejemplo, blo- ques de 4 KB para una partición de disco de 2 GB. La ventaja del tamaño de bloque más pequeño es que la mayoría de los archivos son mucho menores de 32 KB. Si el tamaño de bloque es de 32 KB, un archivo de 10 bytes ocupa 32 KB de espacio en el disco. Si el archivo promedio es, por decir, de 8 KB, entonces con un bloque de 32 KB se desperdiciarán 3/
4partes del disco, lo cual no es una manera muy eficiente de utilizarlo. Con un archivo de 8 KB y un bloque de 4 KB no hay desperdicio del disco, pero el precio a pagar es que la FAT ocupa más RAM. Con un bloque de 4 KB y una partición de disco de 2 GB hay 512K bloques, por lo que la FAT debe tener 512K entra- das en la memoria (que ocupan 2 MB de RAM).
MS-DOS utiliza la FAT para llevar la cuenta de los bloques de disco libres. Cualquier bloque que no esté asignado en un momento dado se marca con un código especial. Cuando MS-DOS ne- cesita un nuevo bloque de disco, busca en la FAT una entrada que contenga este código. Por lo tan- to, no se requiere un mapa de bits o una lista de bloques libres.