FreeNOS源代码-Kernel模块-Kernel_Class.cpp

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;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Introduction 该 lab 主要需要编写操作系统的内存管理部分。内存管理分为两个部分: 内核的物理内存分...
    找不到工作阅读 12,391评论 0 12
  • 唐多琳小朋友,5个月啦,冒出来两个小牙齿啦
    唐多琳阅读 149评论 0 0
  • 每个去斩杀恶龙的英雄都没有回来, 因为与恶龙缠绵久了, 恶龙死了 英雄就变成了恶龙 可是 正义从来不会失败 因为那...
    公子清然阅读 350评论 0 2