[????] BUILD 0.1.1.??? DATE 9/0?/2011 AT ?:?? ??
==================================================== Mainly changed: Tasking + Implemented multitasking
This commit is contained in:
@ -28,8 +28,7 @@ uint32 _malloc_init2 (uint32 size, uint8 page_aligned, uint32* phys)
|
||||
|
||||
if (phys)
|
||||
{
|
||||
Page *pg = PagingGetPage(ret, 0, KernelDirectory);
|
||||
*phys = (*pg & PageFrame) + (ret & 0xFFF);
|
||||
*phys = PagingGetPhysical(ret, KernelDirectory) + (ret & 0xFFF);
|
||||
|
||||
Log("Mem","%#Allocated %u bytes (%spage aligned) at address 0x%x (phys=%x).\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret, *phys);
|
||||
}
|
||||
|
@ -6,7 +6,6 @@
|
||||
*/
|
||||
|
||||
#include <memory-add.h>
|
||||
// MemoryGetFree(), MemoryGetTotal(), MemoryGet blah blah...
|
||||
|
||||
// Returns total physical memory in bytes
|
||||
uint32 MemoryGetTotal()
|
||||
@ -17,13 +16,13 @@ uint32 MemoryGetTotal()
|
||||
// Returns total free physical memory in bytes
|
||||
uint32 MemoryGetFree()
|
||||
{
|
||||
return (TotalFrames - UsedFrames) * 0x4;
|
||||
return (TotalBlocks - UsedBlocks) * 0x4;
|
||||
}
|
||||
|
||||
// Total used physical memory in bytes
|
||||
uint32 MemoryGetUsed()
|
||||
{
|
||||
return UsedFrames * 0x4;
|
||||
return UsedBlocks * 0x4;
|
||||
}
|
||||
|
||||
// Same as above functions, but in frames
|
||||
@ -34,15 +33,15 @@ uint32 MemoryGetFrameSize()
|
||||
|
||||
uint32 MemoryGetFramesTotal()
|
||||
{
|
||||
return TotalFrames;
|
||||
return TotalBlocks;
|
||||
}
|
||||
|
||||
uint32 MemoryGetFramesUsed()
|
||||
{
|
||||
return UsedFrames;
|
||||
return UsedBlocks;
|
||||
}
|
||||
|
||||
uint32 MemoryGetFramesFree()
|
||||
{
|
||||
return (TotalFrames - UsedFrames);
|
||||
}
|
||||
return (TotalBlocks - UsedBlocks);
|
||||
}
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include "../../drivers/cmos/cmos.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
uint32 mem_kernel_end = 0;
|
||||
uint8 mem_initialized = 0;
|
||||
|
||||
@ -42,7 +41,7 @@ void _memory_reserve_system(MultibootInfo* info)
|
||||
while ((uint32)location < (info->MemoryMapAddress + info->MemoryMapLength))
|
||||
{
|
||||
if (location->Type > 1)
|
||||
MemPhReserveFrames((uint32)location->Address, (uint32)location->Length);
|
||||
MemPhReserveBlocks((uint32)location->Address, (uint32)location->Length);
|
||||
|
||||
location = (MultibootMemoryMapEntry*) ((uint32)location + location->Size + sizeof(uint32));
|
||||
}
|
||||
@ -53,29 +52,35 @@ void _memory_reserve_system(MultibootInfo* info)
|
||||
Error("Mem", "%#Missing %#memory map%# info from bootloader.\n", ColorLightRed, ColorWhite, ColorLightRed);
|
||||
|
||||
// Standard memory hole at 15mb
|
||||
MemPhReserveFrames(0x00F00000, 0x00100000);
|
||||
MemPhReserveBlocks(0x00F00000, 0x00100000);
|
||||
}
|
||||
|
||||
// Standard reserved memory areas
|
||||
MemPhReserveFrames(0x0, 0x400 + 256); // Real mode IVT, BDA
|
||||
MemPhReserveFrames(0x1000, 0x2400); // DMA buffer
|
||||
MemPhReserveFrames(0x9FC00, 385*1024); // EBDA, Video memory, ROM area
|
||||
}
|
||||
|
||||
|
||||
void MemoryInitialize (MultibootInfo* info)
|
||||
{
|
||||
// Get total system memory
|
||||
uint32 totalSystemMemory = _memory_get_total_mem(info);
|
||||
|
||||
// Initialize physical & virtual memory managers
|
||||
uint32 end = mem_kernel_end + 0x80000;
|
||||
MemPhInitialize(totalSystemMemory);
|
||||
PagingInitialize(0x200000);
|
||||
PagingInitialize(&end);
|
||||
|
||||
// Reserve physical blocks
|
||||
_memory_reserve_system(info);
|
||||
|
||||
uint32 i;
|
||||
// Allocate some space for the kernel heap
|
||||
for (i = KERNEL_HEAP_START; i <= KERNEL_HEAP_END; i += 0x1000)
|
||||
PagingMapPage(MemPhAllocateBlock(), i, PageWriteable, KernelDirectory);
|
||||
|
||||
// Create the kernel heap
|
||||
KernelHeap = MemHeapCreate(KERNEL_HEAP_START, KERNEL_HEAP_START
|
||||
+ KERNEL_HEAP_INITIAL_SIZE, 0xCFFFF000, 3); // is kernel, writeable
|
||||
|
||||
Log("Mem", "Done initializing memory!");
|
||||
Log("Mem", "Done initializing memory!\n");
|
||||
|
||||
mem_initialized = 2;
|
||||
}
|
||||
@ -84,5 +89,5 @@ void MemoryTempInitialize (uint32 kernel_end)
|
||||
{
|
||||
mem_initialized = 1;
|
||||
mem_kernel_end = kernel_end;
|
||||
Log("Mem", "Initialized temporary memory manager, allocating from %#0x%x.\n", kernel_end);
|
||||
Log("Mem", "Initialized temporary memory manager, allocating from %#0x%x.\n", ColorWhite, mem_kernel_end);
|
||||
}
|
||||
|
Reference in New Issue
Block a user