使用位图与链表的内存管理

时间:2012-02-12 09:33:46

标签: memory memory-management linked-list operating-system

有两种方法可以进行内存管理:使用位和使用链表。 在使用位时,我们维护一个大小等于分配单元数的位图 使用喜欢列表时,我们维护两个链表:一个用于分配内存,另一个用于空洞

有人可以帮助我确定这两种方法的优缺点,以及何时我们应该优先考虑另一种方法。我已经理解了这两种方法,但是当我更喜欢一种方法时,我无法确定这种情况。

为了进一步说明,这两种技术都是操作系统书籍中使用的标准技术。

1 个答案:

答案 0 :(得分:2)

关联列表

专业版:小空间要求,因为每个块都可以存储指向下一个空闲块的指针。

缺点:要遍历列表,您需要阅读每个块!此外,将列表保持在连续的"中也是昂贵的。方式,以避免碎片化(考虑以更智能的方式更新列表的成本,而不仅仅是在最后附加每个新的空闲块)。

通过在每个块中存储多个空闲块ID,可以使链表方案更有效(因此,检索一定数量的空闲块需要更少的I / O)。

<强>位图

优点:随机分配:检查块是否空闲只需要读取相应的位;另外,检查大的连续部分相对较快(因为您可以在单次读取中检查位图的字大小)。快速删除:您可以稍微翻转一下&#34; free&#34;一个块,不覆盖数据。

缺点:更高的内存要求,因为每个块需要一位(对于1KB块的1TB磁盘,大约为128MB)。

权衡

如果磁盘几乎已满,则使用链表可能是有意义的,因为它需要比位图更少的块。但是,大多数情况下位图将存储在主存储器中,这将使其比链表更有效。我想如果磁盘几乎已满,并且您可以将链表存储在主存中,那么它也是一个不错的选择。

另请参阅:https://en.wikipedia.org/wiki/Free_space_bitmap