Fragmentation (informatique)

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 15 octobre 2019 à 18:53 et modifiée en dernier par Gibbja (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
Processus de fragmentation et défragmentation d'un système de fichiers.

En informatique, la fragmentation peut désigner plusieurs concepts :

La fragmentation d'un disque dur

Principe de fragmentation

Exemple de processus de fragmentation :
Le fichier B est supprimé, ce qui laisse un "trou".
Le fichier F s'est étendu et se retrouve en deux parties.

Le disque dur d'un ordinateur est divisé en secteurs et le système d'exploitation les rassemble pour former des clusters (blocs). Ainsi, un fichier est contenu sur un nombre entier de clusters : le dernier cluster n'est pas toujours entièrement rempli de données.

Chaque fichier utilise donc plusieurs clusters, l'adresse de ces clusters est conservée par le système d'exploitation dans la Master File Table (MFT), ce qui lui permet de retrouver l'adresse physique du fichier sur le disque dur. Si les clusters contenant le fichier sont contigus, celui-ci n'est pas fragmenté. Toutefois, en pratique, les clusters d'un fichier sont généralement éparpillés par groupes, d'où la fragmentation du fichier.

Analogie

Reprenons l'exemple de Roberto Di Cosmo[1], en simplifiant.

Assimilons le disque dur à une grande armoire à tiroirs, tous de même taille, dans laquelle on rangerait des dossiers.

Au départ, tous les tiroirs sont vides, et la personne peut remplir les premiers tiroirs sans problème. Des dossiers sont retirés, ce qui amène des trous dans la rangée des tiroirs. Un problème se pose alors lorsqu'un dossier est trop grand pour rentrer intégralement dans un des emplacements vides. Le dossier est alors séparé en plusieurs morceaux puis réparti dans des cases vides.

Maintenant, si la personne doit aller chercher ce dossier, elle doit aller chercher les différentes parties du dossier à des endroits différents, ce qui prend plus de temps que si l'intégralité du dossier était stockée au même endroit. Pour y remédier, il suffit que, régulièrement, quelqu'un s'occupe de réorganiser toute l'armoire en rassemblant les éléments de chaque dossier, ce qu'on appelle la défragmentation.

Ce mode de fonctionnement est actuellement utilisé par les ordinateurs fonctionnant sous Microsoft Windows, plus précisément, c'est le mode de fonctionnement des systèmes de fichiers NTFS.

La fragmentation selon le système d'exploitation

Le cas des dérivés d'UNIX

Tous les systèmes UNIX ont la même gestion de la fragmentation. Le noyau calcule le nombre de blocs nécessaires au stockage de chaque fichier sur le disque dur. Si un tel nombre de clusters libres contigus est trouvé sur le disque, il stocke le fichier sur ces clusters, contigus, et le fichier n'est pas fragmenté. S'il ne trouve pas assez de clusters libres contigus, il scinde le fichier en plusieurs groupes de clusters et éparpille ces groupes sur le disque dur : il tente de minimiser le nombre de groupes et par conséquent remplit les plus grands espaces de clusters vides contigus en premier.

Le cas de Microsoft Windows

Le noyau NT essaie de combler les trous dans le sens où il fragmente le fichier pour ne pas laisser au début du disque, des zones avec des clusters libres.

Cas dans lesquels survient la fragmentation

Dans les systèmes Unix, la fragmentation fait suite à un espace disque trop faible.

Pour Microsoft Windows, la fragmentation trouve sa source dans les multiples suppressions, modifications, copies de fichiers sur le disque dur, qui favorisent l'apparition de zones de clusters libres, et par conséquent la fragmentation. Elle est donc fréquente sur les Systemes Windows car il est courant pour un utilisateur de manipuler des fichiers.

Atteinte sur les performances

Si la fragmentation est si problématique, c'est parce qu'elle engendre des problèmes au niveau physique.

Lorsqu'un fichier n'est pas fragmenté, la tête de lecture du disque dur n'a pas besoin de se déplacer, ou très peu, puisque les clusters sont les uns à la suite des autres.

À l'inverse, si le fichier est fragmenté, la tête de lecture va faire de multiples aller-retours pour lire chacun des groupes de clusters : se déplacer prend du temps, donc plus le fichier est fragmenté, plus le temps pour accéder à son contenu est élevé.

Fragmentation de la mémoire vive

La fragmentation est un problème qui survient quand on dispose d'une partie libre de la mémoire mais qu'on ne peut pas allouer à un programme.

On distingue deux types de fragmentation:

-Fragmentation interne : elle a lieu lorsqu'une partie d'une page est libre et la taille de la dernière partie du processus est inférieure à la taille d'une page.

-Fragmentation externe : elle survient lorsqu'on dispose d'une partie libre de la mémoire dont la taille est inférieure à la taille du processus.

Exemples de techniques pour réduire la fragmentation :

L'architecture interne de malloc a été conçue pour réduire la fragmentation de la mémoire vive. Il y a plusieurs pools de tampon, chaque pool correspond à une taille de tampon différente. Il y aura un pool pour les tampons de moins de 100 octets, un autre pour les tampons de 100 à 1 000 octets.

Fragmentation de paquets

Plus connu sous le nom de Teardrop Attack[2], Bonkou encore Boink, cette attaque utilise une faille propre à certaines piles TCP/IP. Cette vulnérabilité concerne la gestion de la fragmentation IP. Ce problème apparaît lorsque la pile reçoit le deuxième fragment d’un paquet TCP contenant comme donnée le premier fragment. La pile TCP/IP peut s’avérer incapable de gérer cette exception et le reste du trafic. Cette faille est très connue sur les piles de Windows 95 et 98.

Voir aussi

Références

Articles connexes