FreeNOS源代码-Kernel模块-Kernel_Class

2017-07-21  本文已影响0人  小胖妞爱吃肉

kernel.cpp 整体结构

kernel.cpp内部依赖关系图:


kernel.cpp 一部分方法的详细实现代码

  1. Error Kernel::heap(Address base, Size size) 方法
    为kernel创建堆空间用来实现动态空间(通过new()和delete()方法),所以必须在任何对象被调用前调用;
    Error Kernel::heap(Address base, Size size)
    

{
Allocator *bubble, *pool;
Size meta = sizeof(BubbleAllocator) + sizeof(PoolAllocator);

// Clear the heap first
MemoryBlock::set((void *) base, 0, size);

// Setup the dynamic memory heap
bubble = new (base) BubbleAllocator(base + meta, size - meta);
pool   = new (base + sizeof(BubbleAllocator)) PoolAllocator();
pool->setParent(bubble);

// Set default allocator
Allocator::setDefault(pool);
return 0;

}


其中涉及代码:

BubbleAllocator::BubbleAllocator(Address start, Size size)
{
m_start = (u8 *) start;
m_current = (u8 *) start;
m_size = size;
}

上一篇 下一篇

猜你喜欢

热点阅读