fix: correction HEAP de page et ajout d'information concernant les pages et la mémoire utilisée
This commit is contained in:
parent
4f92e419e2
commit
b6e2ead659
|
@ -110,3 +110,4 @@ void registry_init(void);
|
||||||
u32 getmallocused(void);
|
u32 getmallocused(void);
|
||||||
u32 getmallocfree(void);
|
u32 getmallocfree(void);
|
||||||
u32 getmallocnonallocated(void);
|
u32 getmallocnonallocated(void);
|
||||||
|
u32 virtual_getpagesfree();
|
||||||
|
|
46
lib/memory.c
46
lib/memory.c
|
@ -37,13 +37,29 @@ tmalloc *mallocpage(u8 size)
|
||||||
return chunk;
|
return chunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
/* Retourne le nombre de blocs dynamiques (heap) */
|
||||||
|
|
||||||
|
u32 getmallocnb(void)
|
||||||
|
{
|
||||||
|
u32 realsize=0;
|
||||||
|
tmalloc *chunk;
|
||||||
|
chunk = KERNEL_HEAP;
|
||||||
|
while (chunk < (tmalloc *) kernelcurrentheap) {
|
||||||
|
realsize++;
|
||||||
|
chunk = chunk + chunk->size;
|
||||||
|
}
|
||||||
|
return realsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************/
|
/*******************************************************************************/
|
||||||
/* Retourne la mémoire virtuelle utilisée de façon dynamique (heap) */
|
/* Retourne la mémoire virtuelle utilisée de façon dynamique (heap) */
|
||||||
|
|
||||||
u32 getmallocused(void)
|
u32 getmallocused(void)
|
||||||
{
|
{
|
||||||
u32 realsize=0;
|
u32 realsize=0;
|
||||||
tmalloc *chunk, *new;
|
tmalloc *chunk;
|
||||||
chunk = KERNEL_HEAP;
|
chunk = KERNEL_HEAP;
|
||||||
while (chunk < (tmalloc *) kernelcurrentheap) {
|
while (chunk < (tmalloc *) kernelcurrentheap) {
|
||||||
if (chunk->used)
|
if (chunk->used)
|
||||||
|
@ -59,7 +75,7 @@ u32 getmallocused(void)
|
||||||
u32 getmallocfree(void)
|
u32 getmallocfree(void)
|
||||||
{
|
{
|
||||||
u32 realsize=0;
|
u32 realsize=0;
|
||||||
tmalloc *chunk, *new;
|
tmalloc *chunk;
|
||||||
chunk = KERNEL_HEAP;
|
chunk = KERNEL_HEAP;
|
||||||
while (chunk < (tmalloc *) kernelcurrentheap) {
|
while (chunk < (tmalloc *) kernelcurrentheap) {
|
||||||
if (!chunk->used)
|
if (!chunk->used)
|
||||||
|
@ -435,6 +451,28 @@ void virtual_range_new_kernel(u8 *vaddr, u64 len, u32 flags)
|
||||||
virtual_range_new(NULL, vaddr, len, flags);
|
virtual_range_new(NULL, vaddr, len, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
/* Renvoie le nombre de pages virtuelles occupées */
|
||||||
|
|
||||||
|
u32 virtual_getpagesused()
|
||||||
|
{
|
||||||
|
u32 maxpage=((u32) MAXPAGESSIZE)/((u16) PAGESIZE);
|
||||||
|
return maxpage-virtual_getpagesfree();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
/* Renvoie le nombre de pages virtuelles libres */
|
||||||
|
|
||||||
|
u32 virtual_getpagesfree()
|
||||||
|
{
|
||||||
|
vrange *next;
|
||||||
|
u32 realsize=0;
|
||||||
|
TAILQ_FOREACH(next, &vrange_head, tailq)
|
||||||
|
realsize+=(next->vaddrhigh - next->vaddrlow)/PAGESIZE;
|
||||||
|
return realsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************/
|
/*******************************************************************************/
|
||||||
/* Libère une page virtuelle de la mémoire */
|
/* Libère une page virtuelle de la mémoire */
|
||||||
|
|
||||||
|
@ -514,8 +552,8 @@ void malloc_init(void)
|
||||||
void virtual_init(void)
|
void virtual_init(void)
|
||||||
{
|
{
|
||||||
vrange *vpages = (vrange*) vmalloc(sizeof(vrange));
|
vrange *vpages = (vrange*) vmalloc(sizeof(vrange));
|
||||||
vpages->vaddrlow = (u8 *) KERNEL_HEAP+PAGESIZE;
|
vpages->vaddrlow = (u8 *) KERNEL_PAGES+PAGESIZE;
|
||||||
vpages->vaddrhigh = (u8 *) KERNEL_HEAP+MAXHEAPSIZE;
|
vpages->vaddrhigh = (u8 *) KERNEL_PAGES+MAXPAGESSIZE;
|
||||||
TAILQ_INIT(&vrange_head);
|
TAILQ_INIT(&vrange_head);
|
||||||
TAILQ_INSERT_TAIL(&vrange_head, vpages, tailq);
|
TAILQ_INSERT_TAIL(&vrange_head, vpages, tailq);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "VGA/ansi.c"
|
#include "VGA/ansi.c"
|
||||||
#include "3D/sphere.c"
|
#include "3D/sphere.c"
|
||||||
#include "3D/man.c"
|
#include "3D/man.c"
|
||||||
|
#include "memory.h"
|
||||||
|
|
||||||
static command commands[] = {
|
static command commands[] = {
|
||||||
{"reboot" , "", &rebootnow},
|
{"reboot" , "", &rebootnow},
|
||||||
|
@ -85,8 +86,10 @@ int mem()
|
||||||
{
|
{
|
||||||
u32 libre=getmemoryfree();
|
u32 libre=getmemoryfree();
|
||||||
u32 total=physical_getmemorysize();
|
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 physique (TOTAL)\r\n -libre \33[40D\33[15C%H\r\n -occupee \33[40D\33[15C%H\r\n -total \33[40D\33[15C%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());
|
printf("Memoire HEAP (NOYAU) - % u blocs\r\n -libre \33[40D\33[15C%H\r\n -occupee \33[40D\33[15C%H\r\n -allouables \33[40D\33[15C%H\r\n\r\n",getmallocnb(),getmallocfree(),getmallocused(),getmallocnonallocated());
|
||||||
|
printf("Plan de memoire (NOYAU)\r\n -IDT \33[40D\33[15C%X\r\n -GDT \33[40D\33[15C%X\r\n -PGD \33[40D\33[15C%X\r\n -STACK \33[40D\33[15C%X\r\n -CODE \33[40D\33[15C%X\r\n -PAGES \33[40D\33[15C%X\r\n -HEAP \33[40D\33[15C%X\r\n -VESAFB \33[40D\33[15C%X\r\n\r\n",IDT_ADDR,GDT_ADDR,KERNEL_PD_ADDR,KERNEL_STACK_ADDR,KERNEL_CODE_ADDR,KERNEL_PAGES,KERNEL_HEAP,VESA_FBMEM);
|
||||||
|
printf("Memoire Virtuelle (NOYAU)\r\n -pages libres \33[40D\33[16C% u\r\n -pages occupees \33[40D\33[16C% u\r\n",virtual_getpagesfree(),virtual_getpagesused());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue