【问题标题】:Disadvantage of Using Linked Lists in Memory Management在内存管理中使用链表的缺点
【发布时间】:2015-05-17 07:11:53
【问题描述】:

对于使用链表在维护空闲磁盘块列表方面的主要缺点是什么,我感到有些困惑。我的教授说使用位图将有助于解决上述问题。为什么使用位图可以解决这个问题?

缩小我的问题范围:

  1. 使用链表维护空闲磁盘块列表的主要缺点是什么?

  2. 为什么使用位图可以解决这个问题/缺点?

【问题讨论】:

  • 在你的情况下,链表或位图应该解决的原始问题是什么?您提到“空闲磁盘块”,但它们呢?分配?统一的磁盘块分配频率以最大程度地减少 SSD 驱动器或闪存的磨损?如果没有更多地关注问题,就没有其他优点/缺点,因为链表很容易实现,很早教,每个程序员都可以使用它们
  • @xmojmr 这只是一个样题。这就是所有的。
  • 在这种情况下尝试自己弄清楚(尝试在简单的(纸上?)代码中使用它来建模磁盘管理器)在数据结构访问速度(读/写)方面有什么区别) 和故障恢复。您的思考能力是考试应该验证的关键内容之一。谷歌查询file system allocation bitmap 指向许多有用的文章,如Wikipedia: Free space bitmapIJEAT: Allocation of Free Disk Blocks in UNIX using Bitmaps

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


【解决方案1】:

嗨,

使用链表维护空闲磁盘块列表的主要缺点是什么?

  • 此方案效率不高,因为要遍历列表,我们必须读取需要大量时间的每个块。
  • 第二个缺点是需要额外的内存来维护所有空闲磁盘块的链表。

为什么使用位图可以解决这个问题/缺点?

  • 大多数情况下,可用磁盘空间列表被实现为位图或位向量。每个块由单个位表示。 0(零)标记为空闲块,而 1 用于分配块。因此,无需额外的内存来存储可用磁盘空间。

  • 快速随机访问分配检查:检查扇区是否空闲就像检查相应位一样简单。所以遍历比LinkedList快。

使用位图的其他优点:

  • 快速删除:删除时不需要覆盖数据,翻转对应位即可

希望对您有所帮助。免费填写以作进一步说明。

问候,

巴维克

【讨论】:

  • 空闲块的链表不需要任何内存,假设最小大小的块足够大。
  • 你可以这么说,但与位图相比,它使用的内存更少。
  • 另外,位图更容易找到连续的块
  • 不需要遍历空闲块列表。当你需要一个块时,取列表中的第一个。当您释放一个块时,将其添加到列表的开头。这些任务不需要随机访问。
【解决方案2】:

@FullDecent 在 cmets 中对另一个答案给出了正确的解决方案(他应该得到你的赏金)。详细说明:

假设所讨论的磁盘驱动器是较旧的传统类型,具有旋转的存储表面和一个在表面上以物理方式径向移动的读/写磁头...

一般来说,最好将文件尽可能连续地存储在磁盘上,以便可以顺序读取多个块。如果文件是“碎片化的”(其块分散在磁盘上的不同位置),则需要多次重新定位驱动器磁头才能读取整个文件。重新定位磁头是磁盘读取中涉及的最耗时的操作之一(仅次于在磁盘停止后启动磁盘旋转)。因此,称为“碎片整理”或“碎片整理”的过程重新排列磁盘上已使用的块以使所有文件连续。

对于空闲块的链表,分配涉及从列表的前面获取块,而解除分配涉及将释放的块添加到列表的前面。因此,列表可能会变得混乱,磁盘上不相邻的块经常在列表中相邻。要为大文件找到足够大的连续空闲块,可能需要扫描列表的很大一部分。

使用位图,仍然需要扫描一个大的连续空闲块部分,但这更容易,因为可以一次检查 8、16、32 或 64 位(取决于硬件的字长)操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2012-03-04
    • 2016-07-12
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多