【问题标题】:Why does the Linux kernel require small short-term memory chunks in odd sizes?为什么 Linux 内核需要奇数大小的小短期内存块?
【发布时间】:2018-08-07 20:33:06
【问题描述】:

我正在阅读 William Stallings 的操作系统:内部结构和设计原则,第 7 版。在第 8.4 节 Linux 内存管理中,当谈到 内核内存管理时,它是这样的:

Linux内核内存分配的基础是页面分配 用于用户虚拟内存管理的机制。和虚拟内存一样 方案,使用伙伴算法,以便可以为内核分配内存 并以一页或多页为单位释放。因为最小量 可以以这种方式分配的内存是一页,单独的页分配器 效率低下,因为内核需要小的短期内存块 大小不一。

我可以理解关于分页的讨论,但是为什么作者说内核需要小的短期内存块 尺寸奇数。,尤其是为什么尺寸奇数

【问题讨论】:

    标签: linux memory-management operating-system


    【解决方案1】:

    因为大多数程序需要在相对较短的时间内以各种大小进行少量分配?这就是malloc 和朋友存在的原因:将来自操作系统的较大分配细分为具有子页面大小粒度的较小部分。想要一个链表(通常在操作系统内核中需要)?您需要能够分配包含值和指向下一个节点的指针(也可能还有反向指针)的小节点。

    我怀疑“奇数大小”只是指“任意大小”;我不希望内核在 1、3、5、7 等字节分配上异常繁重,但在许多情况下,分配大小不太可能足够一致,以至于固定块分配器广泛适用。为每个可能的链表节点大小(更不用说动态分配内存所需的所有其他可能大小)编写一个特殊的块分配器是不值得的,除非该链表毕竟对性能至关重要。

    【讨论】:

    • 那部分是在讨论内核内存管理,那么程序需要小分配的事实是否相关?
    • @Mark:内核也是一个“程序”。比大多数人肯定的要复杂,但它仍然需要完成大多数用户级程序需要做的事情,以及内核需要处理的所有特殊事情。就内存分配而言,需求非常相似。
    • 我明白了。您能否举一些例子来说明内核需要少量分配?
    • @Mark:我已经给出了链表的明显例子。如果您在您最喜欢的搜索引擎中搜索kernel linked list,您会立即看到有关该主题的几篇文章。或者只是grep 用于使用kmalloc 的Linux 内核源代码(Linux 内核等效于malloc)。问“为什么需要小额分配”有点奇怪。为什么 any 程序需要少量分配?内核和任何程序的答案都是一样的。
    猜你喜欢
    • 2019-04-28
    • 2015-02-04
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多