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

Memory 使用位图与链表的内存管理,memory,memory-management,linked-list,operating-system,Memory,Memory Management,Linked List,Operating System,内存管理有两种方法:使用位和使用链表。 在使用位时,我们维护一个大小等于分配单元数的位映射 在使用liked list时,我们维护两个链表:一个用于分配内存,另一个用于孔 有谁能帮我确定这两种方法的利弊,以及我们什么时候应该选择这两种方法。我已经理解了这两种方法,但无法确定什么情况下我更喜欢其中一种 为了进一步澄清,这两种技术都是操作系统书籍中使用的标准技术。链表 优点:空间要求小,因为每个块可以存储指向下一个空闲块的指针 缺点:要遍历列表,您需要读取每个块!此外,以“连续”的方式维护列表的成本

内存管理有两种方法:使用位和使用链表。 在使用位时,我们维护一个大小等于分配单元数的位映射 在使用liked list时,我们维护两个链表:一个用于分配内存,另一个用于孔

有谁能帮我确定这两种方法的利弊,以及我们什么时候应该选择这两种方法。我已经理解了这两种方法,但无法确定什么情况下我更喜欢其中一种


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

链表

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

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

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

位图

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

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

权衡

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


另请参见:

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