Advertisement

[自制操作系统] 连续页面分配 [kmalloc_kfree]

阅读量:

在JOS平台实现连续内存分配与回收,并支持内核态调用的kmalloc和kfree函数;同时,在分配frambuffer时会执行相应的测试。

在Lab2环境中完成的内存管理机制仅限于为单页面生成一个自由列表(free_list)。该列表中的节点均为基于链表组织起来的表示单页面状态的信息结构体(struct PageInfo)。此外,在每次页面释放时,该节点会被放置于这个free_list的头部位置。然而,在这种机制下存在一些潜在的问题:

  • 避免分配超过4k的连续空间区域(在后续操作如创建frambuf时会使用到)
    • 频繁地将项目插入空闲列表头部会导致内存状态变得极其紊乱。这会影响内存组织效率。

所以先要设计一种能够支持分配连续空间的机制。

一种简单的实现

最简单的想法就是保持现有的不动,freelist保证从高地址到低地址。

这要求在page_free的时候做一下手脚,放到合适的位置。

npages_alloc的时候,找到连续的空闲的页即可。

Free

核心任务是在free期间需对freelist进行管理,并根据地址大小排序。为了实现这一目标,请稍微调整page_free的内容以确定插入位置后再执行插入步骤。

特别要注意是否刚好应该插入到free list的头的情况:

如果刚好是最高的地址,那么就需要修改`p

全部评论 (0)

还没有任何评论哟~