【问题标题】:Memory management using bit maps vs linked list使用位图和链表进行内存管理
【发布时间】:2012-03-04 02:28:11
【问题描述】:

内存管理有两种方式:使用位和使用链表。 在使用位时,我们维护一个大小等于分配单元数量的位图 在使用点赞列表时,我们维护了两个链表:一个用于分配的内存,一个用于孔

谁能帮我确定这两种方法的优缺点,以及何时我们应该更喜欢另一种方法。这两种方法我都了解,但无法确定我更喜欢其中一种的情况。

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

【问题讨论】:

  • 在上下文中考虑这两个结构怎么样?例如。如果你需要分配,你使用每种方法做什么,它做起来有多容易,有多快,它的可扩展性如何?然后想想每个结构本身。给定系统中总共 N 字节的内存,您需要多少内存?然后考虑是否可以进行改进,例如加快寻找漏洞的速度。这不是很困难,只要开始把事情放到正确的环境中。

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


【解决方案1】:

链接列表

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

缺点:要遍历列表,您需要读取每个块!此外,为了避免碎片化,以“连续”方式维护列表的成本很高(考虑以更智能的方式更新列表的成本,而不是仅仅在末尾附加每个新的空闲块)。

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

位图

优点:随机分配:检查一个块是否空闲只需要读取相应的位;此外,检查大的连续部分相对较快(因为您可以在一次读取中从位图中检查位的字长)。快速删除:您只需翻转一点即可“释放”一个块,而不会覆盖数据。

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

权衡

如果磁盘快满了,使用链表可能更有意义,因为它需要的块比位图少。但是,大多数时候位图会存储在主存中,这将使其比链表更有效。我想如果磁盘快满了,你可以将链表存储在主存中,那么它也是一个不错的选择。

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

【讨论】:

  • 还值得一提的是,位图的缺点通常是无关紧要的。每 1 TB 128 MB 通常不是问题,除非您在异常情况下工作
猜你喜欢
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多