Changes between Version 2 and Version 3 of MemoryAllocation


Ignore:
Timestamp:
May 31, 2010, 7:28:03 PM (14 years ago)
Author:
refauvel
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MemoryAllocation

    v2 v3  
    88Pour enlever toutes ambiguïtés, une liste de définition de mot technique est données.
    99
    10 Allocateur mémoire: On appel allocateur mémoire l'additions de deux éléments. D'une part le code executé lors d'un appel à une fonction du type malloc. Et d'autre part l'ensemble des structures de données représentant une zones mémoire allouables.
     10'''Allocateur mémoire''': On appel allocateur mémoire l'additions de deux éléments. D'une part le code executé lors d'un appel à une fonction du type malloc. Et d'autre part l'ensemble des structures de données représentant une zones mémoire allouables.
    1111
    12 Utilisateur: L'utilisateur est le code/programe qui demande de la mémoire. Par exemple, un driver qui fait une demande de mémoire au service d'allocation mémoire est l'utilisateur de ce service.
     12'''Utilisateur''': L'utilisateur est le code/programe qui demande de la mémoire. Par exemple, un driver qui fait une demande de mémoire au service d'allocation mémoire est l'utilisateur de ce service.
    1313
    14 Demande de mémoire: Correspond à l'appel d'une fonction du type malloc (la fonction ne s'appel pas forcément malloc).
     14'''Demande de mémoire''': Correspond à l'appel d'une fonction du type malloc (la fonction ne s'appel pas forcément malloc).
    1515
    16 Libération de mémoire: Correspond à l'appel d'une fonction du type free (la fonction ne s'appel pas forcément free).
     16'''Libération de mémoire''': Correspond à l'appel d'une fonction du type free (la fonction ne s'appel pas forcément free).
    1717
    1818== Kernel land/User land ==
     
    4343''Schéma Passage bloc libre->occupé, avec deux cas (pas scindé et scindé)''
    4444
    45 La technique utilisé par l'allocateur mémoire pour trouver un bloc libre est maintenant détaillé.
     45
     46La technique utilisé par l'allocateur mémoire pour trouver un bloc libre est maintenant détaillé.
     47MutekH possède deux algorithmes différents pour l'allocateur mémoire.[[BR]]
     48
     49L'allocateur "simple", dont le but est d'être très léger au niveau du code de l'allocateur. Comme son nom l'indique, cet allocateur est simple. L'opération de libération n'est pas disponible. Il doit être utilisé dans le cas d'une application demandant de la mémoire, mais n'en libérant jamais ou que très rarement.
     50Il s'appuie sur le mécanisme suivant: seul le dernier bloc mémoire est libre. A chaque nouvelle demande de mémoire, ce bloc est scindé en deux: le premier bloc est utilisé pour l'utilisateur, et le second bloc devient le dernier bloc libre.
     51
     52L'allocateur "smart", devant répondre à des utilisations plus variées.
     53Le paragraphe détaille les aspect techniques de l'allocateur smart.
     54
     55== Smart Allocator ==
     56
     57L'allocateur "smart" s'appuie sur deux listes doublement chainées par région. Une liste (block_list) contenant l'ensemble des blocs de la region et une liste contenant l'ensemble des blocs libres (free_list).
     58
     59Pour une liste, un bloc représente un maillon, et le header de ce bloc contient un pointeur vers l'élément suivant et un pointeur vers l'élément précédent.
     60Un bloc appartient toujours à la liste block_list, et peut aussi, en même temps, appartenir à la liste free_list. Le header de ce block doit donc pouvoir contenir l'ensemble des pointeurs pour ces deux listes, soit 4 pointeurs.
     61Si un bloc est libre, alors les 4 pointeurs sont utilisés. Dans le cas contraire, il ne fait pas parti de la liste free_list, et les deux pointeurs correspondants à cette liste sont utilisables autrement que comme pointeur. Ceci dans un but d'économie de mémoire.
     62
     63Un des deux pointeurs est utilisé comme un indicateur d'état. Cet indicateur est à 0 dans le cas où le bloc est occupé. Si cet indicateur n'est pas à 0, alors il s'agit d'une pointeur de la liste free_list.
     64
     65Le second pointeur est utilisé comme un pointeur vers la structure de données décrivant la région.
    4666
    4767
     
    7090}}}
    7191
     92Aspect multi zone d'une région:
     93Une région n'est pas un bloc contigu. Elle peut être constitué de plusieurs morceaux. Chaque morceau est terminé par un bloc dont la partie "données" est vide, autrement constitué du header seul. Ce bloc est dans l'état occupé et ne fait pas partie de la région. L'indicateur d'état est à 0, et le pointeur vers la structure de données décrivant la région est aussi à 0.
    7294
    7395
     
    84106
    85107
     108== Debug tools ==
     109
     110-CRC
     111
     112-Guard Zone
     113
     114-Scramble
     115
     116-MemChecker
     117
    86118== Todo ==
    87119