Sistemas de archivos (II)

Continúo con la serie de artículosque habla sobre sistemas de archivos. En esta entrega quiero hablar sobre dos cuestiones que pienso que debo introducir antes de meter con sistemas de archivos concretos.

GIGABYTE vs GIBIBYTE

Para quien no lo sepa a estas alturas, los ordenadores actuales (quiénsabe en un futuro) utilizan base dos, los números no serepresentan de forma decimal. De la manera tradicional que escribimoslos números, cuando llegamos a 10 aumentamos una cifra, cuando llegamosa 100 igual, 1000, 1 millón… etc. Esto sucede porque representamos enbase 10. Por ejemplo, el número 1234, también podría definirse como 1 x103 + 2 x 102 + 3 x 101 + 4 x 100

En base 2 hacemos algo muy parecido, el número 1111 no sería "mil ciento once", sino 1 x 23 + 1 x 22 + 1 x 21 + 1 x 20= 15. En los ordenadores se almacena así la información porque todose hace diferenciando entre un 1 y un 0, cierto o falso, quefísicamente es un voltaje u otro (muchas veces +5 y 0, pero no tienepor qué). Resulta mucho más sencillo por razones que tampoco voy aprofundizar aquí, representar un nueve como "1001" que como ‘9’ asecas, ya que en ese último caso deberías tener 10 voltajes distintospara distinguir cada cifra y eso complicaría enormemente muchasoperaciones que se hacen mediante simples puertas lógicas.

Una vez presentados a vuestros amigos los números binarios, vieneuna polémica. Un bit es la unidad más básica de información binaria, esdecir, un ‘1’ o un ‘0’. Un byte es concretamente una agrupación de 8 bits. Un kilobyte son 210 bytes, o lo que es lo mismo, 1024 bytes. Un megabyte, 220 bytes o 1024 kilobytes. Un gigabyte, 230bytes o 1024 megabytes. Los usuarios de a pie ya hemos llegado inclusoal terabyte, 1024 gigabytes, cualquiera lo diría hace nada. Y bueno,así podríamos seguir con el petabyte, el exabyte y demás, como rige lanomenglatura internacional.

El problema es que los majos fabricantes de discos duros no tuvieronmejor idea que emplear base 10 para hablar de la capacidad de susunidades. Esto se traduce en que, por ejemplo, un gigabyte no son 1024megabytes, sino 1000 megabytes, 103 megas (el prefijo mega indica millón, 106, por lo que un giga son 103 x 106 = 109).Claro, realmente según el SI, el prefijo "giga" significa mil millones y sisomos estrictos ésta es la manera correcta de definirlo, pero no era elmodo del que se venía empleando en informática. Esto se traduce en quesi tú compras, por ejemplo, un disco duro de 400 supuestos gigabytes,en realidad te estás llevando uno de 372.

La discrepancia comenzó porque antaño, al hablar de kilobytes, vieronuna clarísima similitud entre 1000 y 1024, y empezaron a utilizar elprefijo "kilo". Sin embargo, con el tiempo, esos escasos 24 bytes dediferencia han crecido hasta hablar del orden de gigabytes y más, comoacabo de mencionar. Y conforme aumentan las capacidades, mayor es ladiferencia, sin que nadie le ponga freno a esta situación de algúnmodo.

La mayoría de sistemas operativos, empezando por el más común, Windows,te dan la información en base 2. Tu conectas tu flamante y reciéncomprado disco duro de 400 GB y Windows coge y te dice que tiene 372. Acontinuación lo primero que piensa la gente no informada es "¡ESTAFA!".La culpa no es del usuario, por supuesto, sino de las compañías (lasque hacen los programas informáticos y las que fabrican unidades dealmacenamiento) por no ponerse de acuerdo y no indicarloconvenientemente. De hecho, ahora lo normal es que te venga una leyendao bien en la caja o bien en el propio disco diciendo que ellos hablande 1 GB = 1000 MB.

Con las memorias flash o las tarjetas de memoria pasa exactamenteigual, te lo venden con la información sobre su tamaño en base 10,perdiendo unos cuantos megas respecto a lo esperado. Con los CDs y DVDsse repite el problema. Cualquiera habrá visto que en un DVDvirgen pone claramente "4’7 GB" en su frontal, pero en realidaddisponibles son sólo 4’38. En cambio, no sucede lo mismo con la memoriaRAM, aquí sí que se especifica en base 2, lo que aún contribuye más aformar un cacao mental en las personas que no están muy pendientes deestas cuestiones.

Para paliar en cierto modo estos problemas, se creó una nuevaunidad, el gibibyte, abreviado "GiB". Un gibibyte son realmente 1024megabytes, no 1000, para que así no quepan dudas sobre si estamoshablando en base binaria o decimal. También podemos hablar de MiBs,KiBs y demás, pero la cuestión es que las compañías van a seguirvendiendo los discos duros con la capacidad en "gigabytes decimales",así que el gibibyte sólo tiene interés en textos técnicos donde sequiera evitar la posible confusión. Yo, por mi parte, cuando hable detamaños en las próximas entregas, lo haré exclusivamente en base 2.

Por cierto, otro error común por la negligencia de las compañías detelefonía, aunque hoy en día ya está más aclarado, es la confusión conlas velocidades de Internet que ofertan. Antiguamente se hablaba de"kas", ahora se llevan más los "megas", pero siempre se les olvida decirclaramente que se refieren a bits. Esto es, si tú tienes una conexiónde un mega, es realmente de 1 megabit, que dividido entre 8 da 128kilobytes o 0’125 megabytes. Qué graciosetes son, porque yo cuando erapequeñajo que no tenía ni idea de esto no entendía la divergencia entrelo que supuestamente tenía y el rendimiento real obtenido, como 10veces menor (al fin y al cabo, si tienes 3 megas por decir unacantidad, en la práctica estás descargando a poco más de 300 KB/s, dadoque nunca consigues el tope que en teoría has contratado). 

FRAGMENTACIÓN

Tras estas pequeñas curiosidades, entro en terreno técnico. Lafragmentación es un fenómeno por el cual un archivo queda partido,fragmentado como el propio nombre indica, en diversas partes, lascuales no están contiguas. Cuando hablé de sectores y clústeres (o"clasters", cada uno que lo pronuncie como quiera) en la anteriorentrega mencioné que eran formas de dividir un disco duro. Para que notengáis que consultarlo, brevemente digo que un sector es una divisiónfísica del disco duro en los cachitos más pequeños en los que se puedeescribir. Un clúster es una agrupación de sectores cuyo tamaño varíadependiendo del sistema de archivos y de suconfiguración.

El estándar actual indica que un sector debe ser de 512 bytes. Si túquieres escribir un archivo más pequeño, por ejemplo de un único byte,pues ocurre algo que se llama fragmentación interna, los otros 511bytes quedarían vacíos e inutilizables. En memoria RAM hay múltiples quebraderos de cabeza con eso cuando se usa memoria virtual, pero ése es un temaque queda lejos de lo que yo quiero explicar. De momento, lafragmentación interna en discos duros es algo que no tiene solución ytampoco importa mucho ya que el desperdicio de espacio no es tanrelevante. También puede suceder que haya fragmentación interna por tener clústeres demasiado grandes, en este caso lo que se busca en general es tomarlos más bien pequeños (alrededor de 1 KB), pero depende de lo que almacenemos en el disco duro.

Los problemas de verdad surgen con la fragmentación externa. Sihablamos de memoria RAM, la fragmentación lo que produce es que segeneren huecos que no pueden utilizarse por su reducido tamaño. Estoocurre porque si un proceso concreto pongamos que necesita,ficticiamente, un único byte de RAM y el sistema operativo se loconcede, y a partir de ahí el resto de programas dicen que necesitandos bytes o más, ese byte quedará abandonado una vez el primer procesoacabe, hasta que se liberen los bytes anteriores o posteriores.

Sin embargo, de nuevo ésa es una cuestión que se aleja de unartículo sobre sistemas de archivos. Refiriéndonos a discos duros, lafragmentación externa o fragmentación, como comunmente se llama a este suceso, viene motivadapor el hecho de que puede no haber huecos suficientemente grandes paraescribir un determinado fichero, así que se divide en partes para queentre. 

Esto provoca que el rendimiento al leer un archivo desciendaradicalmente cuanto más partido esté, ya que tienes que andarrecolocando el cabezal de lectura a cada trozo al que quieras acceder,cuando si estuviera situado de manera continua sólo habría que seguirgirando el disco. Así que cuando utilizas la herramienta dedesfragmentación de Windows lo que estás haciendo es mover lasdistintas partes de un fichero a una zona común en la que se sitúenconsecutivamente. Por eso es necesario tener un espaciolibre suficiente para hacer esta operación.

Según el sistema de archivos utilizado, esto es más o menos grave.En FAT es un desastre total mientras que en NTFS y ext (Linux) ya no loes tanto. También influye mucho el sistema operativo. En Windows Vistase ha optado porque la desfragmentación se haga de manera transparenteal usuario, mientras utiliza el ordenador de forma habitual, accediendoal disco duro en los momentos en que está libre. De esta manera seconsigue que el disco duro presente un estado óptimo sin tener quedejarlo horas exclusivamente con esa tarea, como ocurría en XP yanteriores versiones.

En Linux lo que se hace es dividir el disco duro en bloques,similares a los clústeres, que a su vez se reúnen en grupos de bloques.Cuando se crea un archivo, se intenta incluir dentro del mismo grupo enel que está su directorio (que no deja de ser un fichero ordinario conenlaces a cada uno de los archivos que se encuentran dentro de él), demodo que se reduzca el tiempo de acceso entre archivos de una mismacarpeta y los distintos trozos estén más próximos. Se preasigna una región para cada grupo de bloques y así se evitaque sea necesario fragmentar en muchos casos. Además, en la última versión de ext, la cuarta, se preasigna incluso un hueco para cada fichero por separado.

Otra cosa que hay que tener en cuenta es que muchas veces no seconsidera un problema de fragmentación para archivos relativamentegrandes, como puede ser mayores de 64 MB (medida que utiliza Windowshabitualmente), ya que no resta tanto rendimiento hacer divisiones deficheros así mientras las diferentes partes sigan estando organizadas de manerasecuencial. Sería incluso peor intentar reservar espacios enormes paraesta clase de archivos, el esfuerzo para conseguirlo supondría más quela ganancia obtenida, es preferible tener, por ejemplo, dos conjuntos de trozos de 32 MB.

Bueno, sólo quería introducir estos dos conceptos por hoy, que creoque lo comentado es interesante incluso para gente que no le importe enexceso la informática. La semana que viene doy paso a los sistemas dearchivo de sistemas operativos basados en Unix como MacOS o Linux.