在给定内存硬限制的情况下确定用于内存管理的位向量的大小

时间:2009-09-30 00:46:39

标签: c memory-management kernel

经过一番搜索并查阅恐龙书后,我来寻求智慧。请注意,这在某种程度上与作业有关,但实际上并不是作业问题。此外,这是使用C编程语言。

我正在使用当前以4K块分配内存的内核。为了减少浪费的内存,我改写了我认为malloc的样子,它会抓住一个4K页面,然后根据需要从中提供内存。那部分目前工作正常。我计划有一个内存页面的链表。内存作为char *处理,所​​以我的struct中有一个char *。它目前还有一些描述它的int,以及指向下一个节点的指针。

问题是:我计划使用位向量来跟踪空闲和已用内存。我想弄清楚需要多少个整数(4个字节,32位)来跟踪内存页中的所有1个字节块。因此位向量中的1位将对应于页面中的1个字节。问题是我必须在4K中分配所有这些,所以我需要弄清楚满足每字节1位约束所需的整数数量4K。

或者更确切地说,我需要最大化我将拥有的“实际”内存,同时最小化每字节映射一位所需的整数数,而两个部分(“实际”内存和位向量)是相同的页。

由于有关页面和指针的信息,我实际上不会使用4K,但更接近4062字节。

我认为这是一个线性编程问题,但我尝试过的那些表达方法还没有解决。

1 个答案:

答案 0 :(得分:1)

您想使用位图来跟踪4k页面中的已分配字节吗?并且想知道如何计算位图应该有多大(以字节为单位)?答案是456(四舍五入后),通过求解这个等式得出:

X + X/8 = 4096

减少到:

9X = 32768

但是......在每个分配的页面中保留位图的整个方法对我来说听起来非常错误。如果要分配12k缓冲区怎么办?