【问题标题】:Determining size of bit vectors for memory management given hard limit on memory在给定内存硬限制的情况下确定用于内存管理的位向量大小
【发布时间】:2009-09-30 00:46:39
【问题描述】:

在搜索了一下并查阅了恐龙书之后,我来到 SO 寻求智慧。请注意,这与家庭作业有关,但实际上不是家庭作业问题。此外,这是使用 C 编程语言。

我正在使用当前以 4K 块分配内存的内核。为了减少浪费的内存,我重写了我认为 malloc 的样子,它会抓取一个 4K 页面,然后根据需要从中分配内存。该部分目前工作正常。我计划有一个内存页面的链接列表。内存作为 char* 处理,因此我的结构中有一个 char*。它目前还有一些描述它的整数,以及指向下一个节点的指针。

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

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

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

我相信这是一个线性规划问题,但我尝试过的公式没有成功。

【问题讨论】:

    标签: c memory-management kernel


    【解决方案1】:

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

    X + X/8 = 4096
    

    归结为:

    9X = 32768
    

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

    【讨论】:

    • 噢!我之前在玩弄 Y + X / 8 = 4096。有 Y 而不是 X 是愚蠢的错误。这是非常错误的,但对于我的目的来说已经足够了。我认为我永远不会想要分配 12k,而这或多或少只是我将要处理的事情。我已经可以分配 4k 块的内存,所以如果我需要更多,我可以制作一个链接列表。谢谢。
    • 如果考虑到 OP 提到的将可用空间降至 4062 字节的开销,只需要 452 字节的位图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2010-11-26
    • 2017-07-01
    • 2012-04-27
    • 1970-01-01
    • 2012-06-08
    • 2020-08-03
    相关资源
    最近更新 更多