My Project
Chargement...
Recherche...
Aucune correspondance
Classes | Macros | Définitions de type | Fonctions | Variables
Référence du fichier kmalloc-zs.c

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>
Graphe des dépendances par inclusion de kmalloc-zs.c:

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.
 

Description détaillée

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.

Documentation des macros

◆ MANUX_KMALLOC_MAGIQUE

#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.

◆ MANUX_KMALLOC_ORDRE_MAX

#define MANUX_KMALLOC_ORDRE_MAX   12

Définition à la ligne 24 du fichier kmalloc-zs.c.

◆ MANUX_KMALLOC_ORDRE_MIN

#define MANUX_KMALLOC_ORDRE_MIN   3

Log2 de la taille max allouée.

Définition à la ligne 23 du fichier kmalloc-zs.c.

Documentation des définitions de type

◆ 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.

Documentation des fonctions

◆ kfree()

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.

Libération d'une zone mémoire allouée.

Définition à la ligne 265 du fichier kmalloc-zs.c.

◆ kmalloc()

void * kmalloc ( size_t  n)

Allocation d'une zone de n octets.

Renvoie
Pointeur sur la zone en cas de succès, NULL en cas d'échec

Définition à la ligne 139 du fichier kmalloc-zs.c.

◆ kmallocAfficherStatistiques()

void kmallocAfficherStatistiques ( void  )

Définition à la ligne 59 du fichier kmalloc-zs.c.

◆ kmallocInitialisation()

void kmallocInitialisation ( void  )

Initialisation du sytème kmalloc.

Définition à la ligne 80 du fichier kmalloc-zs.c.

Documentation des variables

◆ blocsLibres

Listes d'entêtes de blos libres.

Définition à la ligne 51 du fichier kmalloc-zs.c.