feat: ajout d'une commande MEM et de plusieurs fonctions donnant des indications sur la mémoire

This commit is contained in:
Nicolas Hordé 2018-11-29 21:23:41 +01:00
parent 4a6b7542fc
commit 4f92e419e2
5 changed files with 61 additions and 2 deletions

View File

@ -153,6 +153,7 @@ Pour l'instant quelques commandes seulement sont disponibles:
* REGS affiche les registres CPU, * REGS affiche les registres CPU,
* GDT affiche la table des descripteurs, * GDT affiche la table des descripteurs,
* IDT affiche la table des interruptions, * IDT affiche la table des interruptions,
* MEM affiche les statistiques d'occupation memoire,
* INFO affiche des informations issues de GRUB, * INFO affiche des informations issues de GRUB,
* ERR génère une exception (ARGUMENTS), * ERR génère une exception (ARGUMENTS),
* VIEW visionne la mémoire vive (ARGUMENTS), * VIEW visionne la mémoire vive (ARGUMENTS),
@ -224,4 +225,4 @@ Pour l'instant quelques commandes seulement sont disponibles:
> tout le reste n'est que de l'information.. > tout le reste n'est que de l'information..
> >
> ― Albert Einstein > ― Albert Einstein
> ― Mathématicien, Physicien > ― Mathématicien, Physicien

View File

@ -107,3 +107,6 @@ void virtual_range_new(pd *dst, u8 *vaddr, u64 len, u32 flags);
void malloc_init(void); void malloc_init(void);
void identity_init(void); void identity_init(void);
void registry_init(void); void registry_init(void);
u32 getmallocused(void);
u32 getmallocfree(void);
u32 getmallocnonallocated(void);

View File

@ -28,3 +28,4 @@ int sfont(u8* commandline);
int help(); int help();
int logo(); int logo();
int detectpci(); int detectpci();
int mem();

View File

@ -37,6 +37,46 @@ tmalloc *mallocpage(u8 size)
return chunk; return chunk;
} }
/*******************************************************************************/
/* Retourne la mémoire virtuelle utilisée de façon dynamique (heap) */
u32 getmallocused(void)
{
u32 realsize=0;
tmalloc *chunk, *new;
chunk = KERNEL_HEAP;
while (chunk < (tmalloc *) kernelcurrentheap) {
if (chunk->used)
realsize+=chunk->size;
chunk = chunk + chunk->size;
}
return realsize;
}
/*******************************************************************************/
/* Retourne la mémoire virtuelle libre de façon dynamique (heap) */
u32 getmallocfree(void)
{
u32 realsize=0;
tmalloc *chunk, *new;
chunk = KERNEL_HEAP;
while (chunk < (tmalloc *) kernelcurrentheap) {
if (!chunk->used)
realsize+=chunk->size;
chunk = chunk + chunk->size;
}
return realsize;
}
/*******************************************************************************/
/* Retourne la mémoire virtuelle non allouée de façon dynamique (heap) */
u32 getmallocnonallocated(void)
{
return VESA_FBMEM-((u32) kernelcurrentheap);
}
/*******************************************************************************/ /*******************************************************************************/
/* Alloue de la mémoire virtuelle au noyau de façon dynamique (heap) */ /* Alloue de la mémoire virtuelle au noyau de façon dynamique (heap) */
@ -91,8 +131,10 @@ u64 physical_getmemorysize()
multiboot_memory_map_t *mmap; multiboot_memory_map_t *mmap;
for (mmap = ((struct multiboot_tag_mmap *) tag)->entries;(u8 *) mmap < (u8 *) tag + tag->size; mmap = (multiboot_memory_map_t *) for (mmap = ((struct multiboot_tag_mmap *) tag)->entries;(u8 *) mmap < (u8 *) tag + tag->size; mmap = (multiboot_memory_map_t *)
((unsigned long) mmap + ((struct multiboot_tag_mmap *) tag)->entry_size)) ((unsigned long) mmap + ((struct multiboot_tag_mmap *) tag)->entry_size))
if (mmap->addr+mmap->len>maxaddr) if ((mmap->addr+mmap->len>maxaddr) && mmap->type==1)
maxaddr=mmap->addr+mmap->len; maxaddr=mmap->addr+mmap->len;
if (maxaddr>=MAXMEMSIZE)
maxaddr=MAXMEMSIZE-1;
return maxaddr; return maxaddr;
} }

View File

@ -39,6 +39,7 @@ static command commands[] = {
{"font" , "", &sfont}, {"font" , "", &sfont},
{"test3d" , "", &test3d}, {"test3d" , "", &test3d},
{"detectpci" , "", &detectpci}, {"detectpci" , "", &detectpci},
{"mem" , "", &mem},
}; };
/*******************************************************************************/ /*******************************************************************************/
@ -78,6 +79,17 @@ int test(void)
return; return;
} }
/*******************************************************************************/
/* Affiche des informations sur la mémoire */
int mem()
{
u32 libre=getmemoryfree();
u32 total=physical_getmemorysize();
printf("Memoire physique\r\n -libre : %H\r\n -occupee : %H\r\n -total : %H\r\n\r\n",libre,total-libre,total);
printf("Memoire tas noyau\r\n -libre : %H\r\n -occupee : %H\r\n -allouables : %H\r\n",getmallocfree(),getmallocused(),getmallocnonallocated());
return;
}
/*******************************************************************************/ /*******************************************************************************/
/* Affiche les périphériques PCI */ /* Affiche les périphériques PCI */
int detectpci() int detectpci()