18#define MANUX_KMALLOC_MAGIQUE 0x4832
23#define MANUX_KMALLOC_ORDRE_MIN 3
24#define MANUX_KMALLOC_ORDRE_MAX 12
53#ifdef MANUX_KMALLOC_STAT
65 printkc(
"Pages allouees (kmalloc) / total : %d (%d) / %d\n",
67 printkc(
"ordre alloc free blocs\n");
100 while (1<< (result - 1) >= tailleTotale) {
170#ifdef MANUX_KMALLOC_STAT
191 if (enteteBlocAlloue ==
NULL) {
194#ifdef MANUX_KMALLOC_STAT
198 return enteteBlocAlloue + 1;
231 if (siamois !=
NULL) {
246 }
while ((siamois !=
NULL)
272 paniqueNoyau(
"Tentative de libérer un bloc 0x%x inconnu (m=0x%x, o=%d)\n",
276#ifdef MANUX_KMALLOC_STAT
281 reintegrerBloc(bloc);
int nombrePagesAllouees(void)
int nombrePagesTotal(void)
Définition des fonctions de base d'entrée-sortie du noyau.
#define printkc
Une version de printk qui écrit dans la console de la tâche en cours.
#define MANUX_KMALLOC_MAGIQUE
Un nombre qui nous permettra d'avoir un peu plus confiance dans les blocs mémoire rendus par l'utilis...
void kmallocAfficherStatistiques(void)
#define MANUX_KMALLOC_ORDRE_MAX
enteteBlocMemoire * blocsLibres[MANUX_KMALLOC_ORDRE_MAX+1]
Listes d'entêtes de blos libres.
void kmallocInitialisation(void)
Initialisation du sytème kmalloc.
struct _enteteBlocMemoire enteteBlocMemoire
Description d'un bloc mémoire fourni à l'utilisateur En fait, on ne lui fourni que le pointeur vers l...
#define MANUX_KMALLOC_ORDRE_MIN
Log2 de la taille max allouée.
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 l...
Une implatation simple de kmalloc fondé sur les zones siamoises (buddy areas) (C) Emmanuel Chaput 202...
#define paniqueNoyau(fmt, args...)
Description d'un bloc mémoire fourni à l'utilisateur En fait, on ne lui fourni que le pointeur vers l...
union _enteteBlocMemoire::@2 e
struct _enteteBlocMemoire * suivant
struct _enteteBlocMemoire::@2::@3 alloue