Changes between Initial Version and Version 1 of MemoryAllocation


Ignore:
Timestamp:
May 31, 2010, 6:13:10 PM (14 years ago)
Author:
refauvel
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MemoryAllocation

    v1 v1  
     1This document explains the memory allocation mechanisms which can be meet in MutekH.
     2
     3== Introduction ==
     4
     5Memory allocation in an operating system is a large spectral domain...
     6
     7== Glossaire ==
     8Pour enlever toutes ambiguïtés, une liste de définition de mot technique est données.
     9
     10Allocateur 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.
     11
     12Utilisateur: 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.
     13
     14Demande de mémoire: Correspond à l'appel d'une fonction du type malloc (la fonction ne s'appel pas forcément malloc).
     15
     16Libération de mémoire: Correspond à l'appel d'une fonction du type free (la fonction ne s'appel pas forcément free).
     17
     18== Kernel land/User land ==
     19
     20
     21== Kernel memory managment ==
     22
     23Cette section explique comment le noyau gère son espace mémoire.
     24
     25
     26== Region based memory allocation ==
     27
     28
     29== Algorithm use for memory allocation ==
     30
     31Dans une région, la mémoire est divisée en bloc. Un bloc est divisé en deux partie:
     32-un header, contenant les informations utilisées par l'allocateur mémoire, de taille fixe.
     33-les "données", correspondant à l'espace destiné à l'utilisateur, de taille variable.
     34
     35Un bloc peut être dans un des deux états suivant: libre ou occupé. Un bloc occupé représente une allocation mémoire en cours d'utilisation. Alors qu'un bloc libre représente une zone allouable.
     36
     37''Schéma bloc libre/occupé''
     38
     39Lorsqu'un utilisateur demande de la mémoire, l'allocateur cherche un bloc dans l'état libre, dont la taille de la partie "données" est au moins égal à la taille demandé. Dans le cas d'une recherche positive, le bloc libre trouvé est utilisé pour servir la demande d'allocation mémoire. Son état passe de libre à occupé. L'adresse de début de la partie "données" est fournie à l'utilisateur.
     40
     41Dans le cas où ce bloc libre possède une partie "données" de taille supérieur à la taille demandé par l'utilisateur, et que le surplus peut contenir un bloc, alors le bloc libre est scindé en deux blocs. Le premier bloc, dont la taille de la partie données est égale à la taille demandé par l'utilisateur, est dans mis dans l'état occupé, et sa partie "données" est fournie à l'utilisateur. Le second bloc est dans l'état libre, et occupe le surplus de mémoire du bloc initial.
     42
     43''Schéma Passage bloc libre->occupé, avec deux cas (pas scindé et scindé)''
     44
     45La technique utilisé par l'allocateur mémoire pour trouver un bloc libre est maintenant détaillé.
     46
     47
     48
     49Un bloc est représenté par la structure de donnée suivante:
     50
     51{{{
     52struct memory_allocator_header_s
     53{
     54  union
     55  {
     56    CONTAINER_ENTRY_TYPE(CLIST) free_entry;
     57    struct
     58    {
     59      struct memory_allocator_region_s  *region;
     60      void *free_null_marker;
     61    };
     62  };
     63
     64  CONTAINER_ENTRY_TYPE(CLIST)   block_entry;
     65
     66#ifdef CONFIG_MUTEK_MEMALLOC_CRC
     67  uint32_t crc;
     68#endif
     69};
     70}}}
     71
     72
     73
     74== Standard API (Malloc/Free) ==
     75
     76
     77== API overview ==
     78
     79
     80== Virtual memory allocation ==
     81
     82
     83== Physical page allocation ==
     84
     85
     86== Todo ==
     87
     88
     89slab allocator
     90debug memory allocator
     91
     92
     93