内存管理有两种方法:使用位和使用链表。在使用比特时,我们保持大小等于分配单元数量的比特映射在使用点赞列表时,我们维护两个链表:一个用于分配的内存,另一个用于孔
有人能帮我确定这两种方法的优缺点吗,以及我们什么时候应该选择另一种。我已经理解了这两种方法,但无法确定何时我更喜欢其中一种。
为了进一步澄清,这两种技术都是操作系统书籍中使用的标准技术。
链接列表
优点:空间要求小,因为每个块都可以存储指向下一个空闲块的指针。
缺点:要遍历列表,您需要读取每个块!此外,为了避免碎片化,以"连续"的方式维护列表的成本很高(想想以比在末尾添加每个新的空闲块更聪明的方式更新列表的成本)。
通过在每个块中存储多个空闲块ID,可以使链表方案稍微更高效(因此,检索一定数量的空闲块所需的I/O更少)。
位图
优点:随机分配:检查一个块是否空闲只需要读取相应的位;此外,检查大的连续部分相对较快(因为您可以在一次读取中检查位图中的位的字大小)。快速删除:你只需翻转一点就可以"释放"一个块,而不会覆盖数据。
缺点:内存要求更高,因为每个块需要一位(对于包含1KB块的1TB磁盘,约128MB)。
权衡
如果磁盘几乎满了,那么使用链表可能是有意义的,因为它需要的块比位图少。但是,大多数情况下位图将存储在主内存中,这将使其比链表更有效率。我想,如果磁盘几乎满了,并且您可以将链表存储在主存中,那么这也是一个很好的选择。
另请参阅:https://en.wikipedia.org/wiki/Free_space_bitmap