有两种方法可以进行内存管理:使用位和使用链表。 在使用位时,我们维护一个大小等于分配单元数的位图 使用喜欢列表时,我们维护两个链表:一个用于分配内存,另一个用于空洞
有人可以帮助我确定这两种方法的优缺点,以及何时我们应该优先考虑另一种方法。我已经理解了这两种方法,但是当我更喜欢一种方法时,我无法确定这种情况。
为了进一步说明,这两种技术都是操作系统书籍中使用的标准技术。
答案 0 :(得分:2)
关联列表
专业版:小空间要求,因为每个块都可以存储指向下一个空闲块的指针。
缺点:要遍历列表,您需要阅读每个块!此外,将列表保持在连续的"中也是昂贵的。方式,以避免碎片化(考虑以更智能的方式更新列表的成本,而不仅仅是在最后附加每个新的空闲块)。
通过在每个块中存储多个空闲块ID,可以使链表方案更有效(因此,检索一定数量的空闲块需要更少的I / O)。
<强>位图强>
优点:随机分配:检查块是否空闲只需要读取相应的位;另外,检查大的连续部分相对较快(因为您可以在单次读取中检查位图的字大小)。快速删除:您可以稍微翻转一下&#34; free&#34;一个块,不覆盖数据。
缺点:更高的内存要求,因为每个块需要一位(对于1KB块的1TB磁盘,大约为128MB)。权衡
如果磁盘几乎已满,则使用链表可能是有意义的,因为它需要比位图更少的块。但是,大多数情况下位图将存储在主存储器中,这将使其比链表更有效。我想如果磁盘几乎已满,并且您可以将链表存储在主存中,那么它也是一个不错的选择。