All pastes #267227 Raw Edit

Divers

public text v1 · immutable
·published 2006-12-04 18:32 UTC
rendered paste body
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