next up previous contents
suivant: Implémentation monter: La mémoire précédent: Allocation de mémoire   Table des matières

Partage de mémoire

La conception adoptée pour la gestion de la mémoire, à savoir listes chaînées d'areas, nous a permit de mettre en place facilement une fonctionnalité de mémoire partagée, entre des espaces d'adressage différents.

En effet, comme décrit précédemment4.7, chaque area possède ses propres attributs, parmi lesquels PM_ATTR_SHARE, qui marque la zone mémoire physique comme partageable.

Entre alors en jeu le champ ``compt_ref'' de la structure area, qui comptabilise le nombre d'espace d'adressage référençant la zone physique. En effet, si une area est marquée comme partageable, ce champ est incrémenté à chaque référencement supplémantaire de la zone (c'est-à-dire à chaque appel de vm_map() sur cette zone). Ainsi on connaît en permanence le nombre d'espace d'adressage référençant la zone.

Lorsqu'un espace d'adressage souhaite libérer la zone partagée, le gestionnaire de mémoire vérifie la valeur du champ ``compt_ref''. Se présente deux cas possibles:

  1. La valeur est de 1, ce qui signifie que l'espace d'adressage était seul à référencer la zone physique. Elle est peut donc être libérée, et marquée comme libre (donc utilisable). Les gestionnaires de mémoire libère donc les areas physiques et virtuelles.
  2. La valeur est supérieure à 1, ce qui signifie que d'autres espaces d'adressage utilisent encore la zone. Il ne faut donc pas la supprimer. Le gestionnaire de mémoire libère alors seulement la vmarea de l'espace d'adressage référençant la zone, et décrémente la valeur de ``compt_ref''.


next up previous contents
suivant: Implémentation monter: La mémoire précédent: Allocation de mémoire   Table des matières
nicolas 2006-07-30