为什么Linux内核需要奇数尺寸的小型短期内存块?

时间:2018-02-28 03:25:29

标签: linux memory-management operating-system

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

  

Linux内核内存分配的基础是页面分配   用于用户虚拟内存管理的机制。如在虚拟内存中   方案,使用伙伴算法,以便可以分配内核的内存   并以一页或多页为单位解除分配。因为最低金额   可以这种方式分配的内存是一个页面,单独的页面分配器   由于内核需要小的短期内存块,因此效率低下   奇数。

我能理解有关分页的讨论,但为什么作者说内核需要小的短期内存块 奇数大小。,特别是为什么的奇数

1 个答案:

答案 0 :(得分:2)

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

我怀疑“奇怪的尺寸”它们只是意味着“任意尺寸”;我不认为内核在1,3,5,7等字节分配上异常沉重,但在许多情况下,分配大小不太可能足够一致,以至于固定块分配器可广泛应用。为每个可能的链表节点大小编写一个特殊的块分配器(更不用说动态分配的内存所需的每个其他可能的大小)是不值得的,除非该链表绝对是性能关键的。