From 7ac2301d899be25b5e51d138fdb227ed0dbdca2d Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Thu, 7 Aug 2014 22:02:20 +0200 Subject: physical memory allocation and fixed some bugs --- kernel/mem.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 98 insertions(+), 14 deletions(-) (limited to 'kernel/mem.c') diff --git a/kernel/mem.c b/kernel/mem.c index 1bb4109..e1253b1 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -9,12 +9,16 @@ //! block alignment #define PMMNGR_BLOCK_ALIGN PMMNGR_BLOCK_SIZE +#define MEM_BITMAP_SIZE 32768 +//#define MEM_BITMAP_SIZE 327 + // memory map bit array. Each bit represents a memory block -static uint32_t _mmngr_memory_map[129*1024]; +//uint32_t _mmngr_memory_map[MEM_BITMAP_SIZE]; +uint32_t *_mmngr_memory_map; + static uint32_t mem_free_blocks; // bit funcs! - void mmap_set(int bit) { _mmngr_memory_map[bit / 32] |= (1 << (bit % 32)); @@ -30,18 +34,19 @@ int mmap_test(int bit) return _mmngr_memory_map[bit / 32] & (1 << (bit % 32)); } -/// - -int mmap_first_free () { +// +int mmap_first_free () +{ //! find the first free bit uint32_t i; int j; - - for (i=0; i< 128 ; i++) + for (i=0; i< MEM_BITMAP_SIZE ; i++) if (_mmngr_memory_map[i] != 0xffffffff) - for (j=0; j<32; j++) { //! test each bit in the dword + for (j=0; j<32; j++) + { + //! test each bit in the dword int bit = 1 << j; if (! (_mmngr_memory_map[i] & bit) ) @@ -49,17 +54,21 @@ int mmap_first_free () { } return -1; + } -void pmmngr_init () { - +void pmmngr_init () +{ //! By default, all of memory is in use // memset (_mmngr_memory_map, 0xf, 128 ); int i; - for(i=0;i++;i<128*1024) + + for(i=0;i