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.
7 Comentarios:
Esto lo conocia, pero no
11 de Mayo de 2008 • 22:26 — IFMEsto 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-"
11 de Mayo de 2008 • 22:47 — The_unforgiven_tooSó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
11 de Mayo de 2008 • 23:20 — MaQyLa leche. Simple y
11 de Mayo de 2008 • 23:56 — LoganKellerLa 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...
12 de Mayo de 2008 • 03:01 — Nena_BabsDebo 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
13 de Mayo de 2008 • 12:22 — SayanCatxSí, tienes razón
13 de Mayo de 2008 • 16:10 — MaQySí, 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
.
Nena_Babs si lo llamas tan románticamente "virus del amor" voy a tener que dejarme infectar
. Y bueno, gracias a ti y a todos por los votos y los comentarios
.