|
My Project
|
Allocation mémoire multi-usage pour des tailles jusqu'à 4092 octets. Plus de détails...
#include "manux/printk.h"#include <manux/debug.h>#include <manux/memoire.h>#include <manux/kmalloc-zs.h>
Aller au code source de ce fichier.
Classes | |
| struct | _enteteBlocMemoire |
| Description d'un bloc mémoire fourni à l'utilisateur En fait, on ne lui fourni que le pointeur vers la partie qu'il peut utiliser. Plus de détails... | |
Macros | |
| #define | MANUX_KMALLOC_MAGIQUE 0x4832 |
| Un nombre qui nous permettra d'avoir un peu plus confiance dans les blocs mémoire rendus par l'utilisateur. | |
| #define | MANUX_KMALLOC_ORDRE_MIN 3 |
| Log2 de la taille max allouée. | |
| #define | MANUX_KMALLOC_ORDRE_MAX 12 |
Définitions de type | |
| typedef struct _enteteBlocMemoire | enteteBlocMemoire |
| Description d'un bloc mémoire fourni à l'utilisateur En fait, on ne lui fourni que le pointeur vers la partie qu'il peut utiliser. | |
Fonctions | |
| void | kmallocAfficherStatistiques (void) |
| void | kmallocInitialisation (void) |
| Initialisation du sytème kmalloc. | |
| void * | kmalloc (size_t n) |
| Allocation d'une zone de n octets. | |
| void | kfree (void *p) |
| Libération d'une zone mémoire allouée Si le bloc avait été légitiment alloué, il est réintégré dans les listes de blocs libres, si possible en le fusionnant avec son bloc siamois de sorte à reconstituer un plus gros bloc. | |
Variables | |
| enteteBlocMemoire * | blocsLibres [MANUX_KMALLOC_ORDRE_MAX+1] = {NULL} |
| Listes d'entêtes de blos libres. | |
Allocation mémoire multi-usage pour des tailles jusqu'à 4092 octets.
La technique utilisée ici est celle des zones siamoises (buddy system)
Définition dans le fichier kmalloc-zs.c.
| #define MANUX_KMALLOC_MAGIQUE 0x4832 |
Un nombre qui nous permettra d'avoir un peu plus confiance dans les blocs mémoire rendus par l'utilisateur.
Définition à la ligne 18 du fichier kmalloc-zs.c.
| #define MANUX_KMALLOC_ORDRE_MAX 12 |
Définition à la ligne 24 du fichier kmalloc-zs.c.
| #define MANUX_KMALLOC_ORDRE_MIN 3 |
Log2 de la taille max allouée.
Définition à la ligne 23 du fichier kmalloc-zs.c.
| typedef struct _enteteBlocMemoire enteteBlocMemoire |
Description d'un bloc mémoire fourni à l'utilisateur En fait, on ne lui fourni que le pointeur vers la partie qu'il peut utiliser.
L'entête est une union car elle peut prendre deux formes. Lorsque le bloc est alloué et fourni à l'utilisateur, on y stocque un nombre "magique" qu'on espère retrouver, et une taille qui nous permettra de savoir combien d'octets ont été alloués. Lorsque le bloc est libre, on utilise cet entête pour mettre en place une liste chaînée.
Libération d'une zone mémoire allouée Si le bloc avait été légitiment alloué, il est réintégré dans les listes de blocs libres, si possible en le fusionnant avec son bloc siamois de sorte à reconstituer un plus gros bloc.
Libération d'une zone mémoire allouée.
Définition à la ligne 265 du fichier kmalloc-zs.c.
Allocation d'une zone de n octets.
Définition à la ligne 139 du fichier kmalloc-zs.c.
Définition à la ligne 59 du fichier kmalloc-zs.c.
Initialisation du sytème kmalloc.
Définition à la ligne 80 du fichier kmalloc-zs.c.
| enteteBlocMemoire* blocsLibres[MANUX_KMALLOC_ORDRE_MAX+1] = {NULL} |
Listes d'entêtes de blos libres.
Définition à la ligne 51 du fichier kmalloc-zs.c.