15 de Diciembre de 2018
Mayo
11

Sistemas de archivos (II)

Categorías: , , , , ,

Continúo con la serie de artículos que 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én sabe en un futuro) utilizan base dos, los números no se representan de forma decimal. De la manera tradicional que escribimos los números, cuando llegamos a 10 aumentamos una cifra, cuando llegamos a 100 igual, 1000, 1 millón... etc. Esto sucede porque representamos en base 10. Por ejemplo, el número 1234, también podría definirse como 1 x 103 + 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 todo se hace diferenciando entre un 1 y un 0, cierto o falso, que físicamente es un voltaje u otro (muchas veces +5 y 0, pero no tiene por qué). Resulta mucho más sencillo por razones que tampoco voy a profundizar aquí, representar un nueve como "1001" que como '9' a secas, ya que en ese último caso deberías tener 10 voltajes distintos para distinguir cada cifra y eso complicaría enormemente muchas operaciones que se hacen mediante simples puertas lógicas.

Una vez presentados a vuestros amigos los números binarios, viene una polémica. Un bit es la unidad más básica de información binaria, es decir, 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, 230 bytes o 1024 megabytes. Los usuarios de a pie ya hemos llegado incluso al 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 la nomenglatura internacional.

El problema es que los majos fabricantes de discos duros no tuvieron mejor idea que emplear base 10 para hablar de la capacidad de sus unidades. Esto se traduce en que, por ejemplo, un gigabyte no son 1024 megabytes, 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 si somos estrictos ésta es la manera correcta de definirlo, pero no era el modo del que se venía empleando en informática. Esto se traduce en que si 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, vieron una clarísima similitud entre 1000 y 1024, y empezaron a utilizar el prefijo "kilo". Sin embargo, con el tiempo, esos escasos 24 bytes de diferencia han crecido hasta hablar del orden de gigabytes y más, como acabo de mencionar. Y conforme aumentan las capacidades, mayor es la diferencia, sin que nadie le ponga freno a esta situación de algún modo.

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én comprado disco duro de 400 GB y Windows coge y te dice que tiene 372. A continuación lo primero que piensa la gente no informada es "¡ESTAFA!". La culpa no es del usuario, por supuesto, sino de las compañías (las que hacen los programas informáticos y las que fabrican unidades de almacenamiento) por no ponerse de acuerdo y no indicarlo convenientemente. De hecho, ahora lo normal es que te venga una leyenda o bien en la caja o bien en el propio disco diciendo que ellos hablan de 1 GB = 1000 MB.

Con las memorias flash o las tarjetas de memoria pasa exactamente igual, 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 DVDs se repite el problema. Cualquiera habrá visto que en un DVD virgen pone claramente "4'7 GB" en su frontal, pero en realidad disponibles son sólo 4'38. En cambio, no sucede lo mismo con la memoria RAM, aquí sí que se especifica en base 2, lo que aún contribuye más a formar un cacao mental en las personas que no están muy pendientes de estas cuestiones.

Para paliar en cierto modo estos problemas, se creó una nueva unidad, el gibibyte, abreviado "GiB". Un gibibyte son realmente 1024 megabytes, no 1000, para que así no quepan dudas sobre si estamos hablando 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 seguir vendiendo los discos duros con la capacidad en "gigabytes decimales", así que el gibibyte sólo tiene interés en textos técnicos donde se quiera evitar la posible confusión. Yo, por mi parte, cuando hable de tamañ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 de telefonía, aunque hoy en día ya está más aclarado, es la confusión con las velocidades de Internet que ofertan. Antiguamente se hablaba de "kas", ahora se llevan más los "megas", pero siempre se les olvida decir claramente que se refieren a bits. Esto es, si tú tienes una conexión de un mega, es realmente de 1 megabit, que dividido entre 8 da 128 kilobytes o 0'125 megabytes. Qué graciosetes son, porque yo cuando era pequeñajo que no tenía ni idea de esto no entendía la divergencia entre lo que supuestamente tenía y el rendimiento real obtenido, como 10 veces menor (al fin y al cabo, si tienes 3 megas por decir una cantidad, en la práctica estás descargando a poco más de 300 KB/s, dado que nunca consigues el tope que en teoría has contratado). 

FRAGMENTACIÓN

Tras estas pequeñas curiosidades, entro en terreno técnico. La fragmentación es un fenómeno por el cual un archivo queda partido, fragmentado como el propio nombre indica, en diversas partes, las cuales no están contiguas. Cuando hablé de sectores y clústeres (o "clasters", cada uno que lo pronuncie como quiera) en la anterior entrega mencioné que eran formas de dividir un disco duro. Para que no tengáis que consultarlo, brevemente digo que un sector es una división física del disco duro en los cachitos más pequeños en los que se puede escribir. Un clúster es una agrupación de sectores cuyo tamaño varía dependiendo del sistema de archivos y de su configuració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 511 bytes 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 tema que queda lejos de lo que yo quiero explicar. De momento, la fragmentación interna en discos duros es algo que no tiene solución y tampoco importa mucho ya que el desperdicio de espacio no es tan relevante. 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. Si hablamos de memoria RAM, la fragmentación lo que produce es que se generen huecos que no pueden utilizarse por su reducido tamaño. Esto ocurre porque si un proceso concreto pongamos que necesita, ficticiamente, un único byte de RAM y el sistema operativo se lo concede, y a partir de ahí el resto de programas dicen que necesitan dos bytes o más, ese byte quedará abandonado una vez el primer proceso acabe, hasta que se liberen los bytes anteriores o posteriores.

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

Esto provoca que el rendimiento al leer un archivo descienda radicalmente cuanto más partido esté, ya que tienes que andar recolocando el cabezal de lectura a cada trozo al que quieras acceder, cuando si estuviera situado de manera continua sólo habría que seguir girando el disco. Así que cuando utilizas la herramienta de desfragmentación de Windows lo que estás haciendo es mover las distintas partes de un fichero a una zona común en la que se sitúen consecutivamente. Por eso es necesario tener un espacio libre 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 lo es tanto. También influye mucho el sistema operativo. En Windows Vista se ha optado porque la desfragmentación se haga de manera transparente al usuario, mientras utiliza el ordenador de forma habitual, accediendo al disco duro en los momentos en que está libre. De esta manera se consigue que el disco duro presente un estado óptimo sin tener que dejarlo horas exclusivamente con esa tarea, como ocurría en XP y anteriores 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 en el que está su directorio (que no deja de ser un fichero ordinario con enlaces a cada uno de los archivos que se encuentran dentro de él), de modo que se reduzca el tiempo de acceso entre archivos de una misma carpeta y los distintos trozos estén más próximos. Se preasigna una región para cada grupo de bloques y así se evita que 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 se considera un problema de fragmentación para archivos relativamente grandes, como puede ser mayores de 64 MB (medida que utiliza Windows habitualmente), ya que no resta tanto rendimiento hacer divisiones de ficheros así mientras las diferentes partes sigan estando organizadas de manera secuencial. Sería incluso peor intentar reservar espacios enormes para esta clase de archivos, el esfuerzo para conseguirlo supondría más que la 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 creo que lo comentado es interesante incluso para gente que no le importe en exceso la informática. La semana que viene doy paso a los sistemas de archivo de sistemas operativos basados en Unix como MacOS o Linux.

5
Valoración media: 5 (4 votos)

7 Comentarios:

Esto lo conocia, pero no

Esto lo conocia, pero no tan detallado como aqui tu nos comentas, esa es la razon que la PS3 de 60 gb tenga en realidad unos 56 gb libres, y no 60gb.

 

Saludos y 5 estrellas! 

Sólo un detalle, "Giga-"

Sólo un detalle, "Giga-" no es mil, sino mil millones. 1024 Gigabytes son 1024 mil millones de bytes.

El problema de semántica causado por llamar Kilobytes a 1024 bytes es curioso, es el típico problema informático que dura años sin que nadie se atreva a corregirlo (como la famosa limitación de 64 KB de memoria de MS-DOS).

Entrada muy currada, un saludo.

Gracias por la corrección

Gracias por la corrección The_unforgiven_too, ha sido un lapsus Razz.

La leche. Simple y

La leche. Simple y llanamente. Yo no lo hubiese explicado mejor. Lo estas haciendo del 10 MaQy, lo mejor es que los que no tengan ni idea podrán enterarse de lo que estas hablando (Y quien sabe si a alguno le da por explorar mas en el tema, eso sí que sería un triunfo)

¡Saludos! 

Que currada...

Debo ser realmente cateta, porque pese a lo bien que los has explicado, todo eso me suena a chino... Aún así, te doy cinco estrellazas por la pedazo de currada.

Por cierto, a ti no te he pasado mi virus del amor... ¿te enfadarás si lo hago? xD

Buen artículo

Hola MaQy, genial el artículo. Pero me gustaría puntualizar una cosa más: en los discos duros también sale menos "memoria" de la que anuncian porque se reserva una cantidad de espacio para la tabla de archivos, según tengo entendido. Por ejemplo, mi disco es de "320GibaBytes" de los de fabricante. Eso sería 320.000.000.000 bytes. Sin embargo Windows me dice que tengo 311.680.532.480. ¿Y esos casi 8 mil millones de bytes que faltan?

Sí, tienes razón

Sí, tienes razón SayanCatx en que la tabla de archivos ocupa cierto espacio, más o menos dependiendo del tamaño de la partición y del sistema de archivos utilizado, pero ese porcentaje es más pequeño que el que se pierde por la confusión que existe entre lo que vale un GigaByte según y otros. Aparte de que es inevitable que ese espacio se utilice para tales menesteres. Pero está bien el apunte ya que yo no lo he indicado Wink.

Nena_Babs si lo llamas tan románticamente "virus del amor" voy a tener que dejarme infectar LMAO. Y bueno, gracias a ti y a todos por los votos y los comentarios Smile.