francois.birot@iuta1.univ-lyon1.fr a écrit : > Bonsoir, > je suis en train de réviser en lisant votre pdf sur la gestion de la mémoire. > Il me semblait avoir tout compris jusqu'a ce que je lise la derniere page: > "Linux utilise le systeme buddy pouur l'allocation des pages. La fragmentation > et le gaspillage ne sont plus un problème puisque les pages ont toutes la même > taille". > Je ne comprend plus du tout. Je croyais que le systeme buddy était un systeme > permetttant d'allouer des zones mémoires de tailles différentes afin d'adapter > la taille des zones en fonction des besoins, et donc de gaspiller le moins > possible. > Mais si on connait la taille des zones a allouer, pourquoi utiliser un systeme > comme buddy et ne pas avoir tout simplement deux listes chainés ?: > - une pour les zones libres > - et une pour les zones occupées Les systèmes "listes chaînées" et "buddy" sont deux alternatives pour pouvoir allouer des zones de tailles diverses dans une zone mémoire. Cette problématique concerne : - pour chaque processus, la gestion de son tas (allocation dynamique de mémoire) - pour le SE, pour la gestion de ses structures internes, comme par exemple la répartition de la mémoire physique entre les différents processus Effectivement, les deux systèmes permettent en théorie d'allouer des zones de taille quelconque. Le principe liste chaînée est même plus fin à ce niveau là, car il est capable d'allouer n'importe quelle taille de mémoire. Au contraire, le système Buddy ne peut allouer que certaines tailles ; plus précisément, si N est la taille du tas, le système Buddy peut allouer uniquement des zones de taille N, N/2, N/4, N/8, N/16, etc... Donc il y a du gaspillage si la taille dont on n'a besoin n'est pas exactement une de ces fractions (et de la fragmentation, car il ne peut pas les allouer n'importe où). Son avantage est en revanche la rapidité d'allocation et le libération. Pour ce qui est de la répartition de la mémoire physique entre les processus, comme cette mémoire physique est déjà découpée en blocs de taille fixes (les pages), il suffit de prendre N qui soit un multiple de cette taille. Par ailleurs, comme les pages n'ont pas besoin d'être contigües, si on n'a besoin de 6 pages, on peut aussi bien allouer un bloc de 4 et un bloc de 2, et retomber sur les fractions de N autorisées. Donc pour ce cas particulier, il n'y a pas de gaspillage. cordialement Pierre-Antoine Champin