martes, 18 de marzo de 2014

Fragmentación y tratamiento de memoria: ¿sabías que…?

Representación de la fragmentación en un disco duro. En el rectangulo de abajo vemos un segmento de memoria en el que aparece un archivo X (rojo) que se ha escrito en tres zonas distintas de la memoria. También aparece un archivo Y (azul) que se ha situado entre dos huecos que existían en distintas partes del disco duro. El archivo Z (amarillo) también se le han asignado dos huecos de memoria no contiguos. Los espacios de memoria libres están representados con color verde. Si el usuario desea abrir o el sistema necesita leer el archivo A, el cabezal del disco duro tendrá que buscar y situarse en cada una de las zonas rojas para poder recomponerlo...

El tratamiento de la memoria de tu disco duro entre los distintos sistemas operativos es bastante dispar, o mejor dicho, entre los distintos sistemas de ficheros que existen. De hecho, por ejemplo en Linux no es necesario desfragmentar volúmenes y el sistema no tiene bajadas de rendimiento como ocurre en Windows. Eso no significa que en Linux no podamos chequear el estado de la unidad y desfragmentarla por optimizar aun más el estado de nuestro disco duro (normalmente solo necesario si el disco duro está a más del 95% de su capacidad). 
La razón por la que no hace falta en Linux (y otros *nix) es sencilla, solo un root o superusuario puede mover ficheros y directorios del sistema de un lado a otro y por tanto solo el directorio /home personal es el que más actividad tiene durante el uso cotidiano de un usuario normal. En Windows no es así, y los archivos y carpetas importantes pueden ser movidos por el usuario normal comprometiendo la estabilidad y rendimiento del sistema. 

Por otro lado, y más importante que lo anterior, en los sistemas o formatos FAT y NTFS que emplea Windows la fragmentación es mucho más acusada.  Estos sistemas buscan huecos libres y van almacenando la información en fragmentos, pudiendo un mismo archivo estar almacenado en varias partes situadas en distintos sectores del disco duro. Cuando se escribe esto es lo más rápido, pero al buscar el archivo y leerlo, el sistema tendrá que hacer un mayor esfuerzo para buscarlo, con la consiguiente perdida de rendimiento. 
Además, los FS que emplea Windows dejan espacios entre un dato y otro, creando una estructura de memoria totalmente caótica cuando se escribe o borra. Esto sucede porque el sistema ordena la escritura en los huecos disponibles o sectores de memoria disponibles que estén más cerca de la posición actual del cabezal, sin ningún tipo de orden. 
Cuando el disco está más saturado el tiempo para que el cabezal del disco duro busque los distintos fragmentos va aumentando y se merma el rendimiento. El cuello de botella puede hacer que el sistema sea insoportablemente lento en algunos casos. Cuando se desfragmenta los datos se van agrupando y ordenando de forma más coherente y por eso sube el rendimiento. Y con un sobresfuerzo del hardware que tiene que trabajar más forzado, en este caso es el disco duro el que lo haría.
Si seguimos indagando en el tema, vemos que Windows no asigna espacio suficiente contiguo para almacenar un archivo completo como un todo, sino que va fragmentando un mismo archivo en distintas partes y lo almacena allá donde encuentra un hueco de memoria libre. Los huecos libres se originan porque probablemente allí hubiese otras partes de otro archivo borrado. El problema entonces se acentúa con archivos más grandes o cuando existe mayor número de ellos, como podemos deducir.
Los sistemas EXT de Linux o los HFS de Mac OS X, entre otros (XFS, ZFS, ReiserFS, JFS, Btrfs…), se fragmentan a velocidades mucho menores que el caótico sistema de Windows. Y es que imagina que Ikea en su almacén trabajase como lo hace Windows. ¿Quién se atrevería a entrar en el almacén a buscar algo? Si los mozos de almacén se dedicasen a ir guardando paquetes de muebles de Ikea, pero en vez de almacenarlos por paquetes y secciones, abriesen la caja y fuesen dejando los tornillos por un lado (donde más cerca les pille en ese momento), luego sueltan las tablas en otro hueco que vean en el almacén, las herramientas para el montaje las dejan en otro de los huecos libres que ven cuando van saliendo del almacén y así…  Por ejemplo, cuando venga un cliente a buscar la librería Gobgsjö tendría que ir buscando por todo el almacén hasta encontrar las distintas partes de su mueble y sería extremadamente lento.
Aunque probablemente estarás pensando que Ikea no es el mejor ejemplo de facilidad: te hacen seguir por todo el recorrido que ellos quieren, te dan los papeles y lápices para que apuntes el lugar donde puedes encontrar el mueble en el almacén, te hacen salir al almacén, buscarlo, cargarlo, transportarlo y finalmente montarlo ;-).
Añadir que muchas veces existen archivos inamovibles, como algunos de intercambio. Estos no pueden ser desfragmentados o movidos durante el funcionamiento de Windows y por eso se debe realizar la desfragmentación cuando el sistema operativo al que pertenecen no está en uso.