内部碎片与外部碎片

2025年4月4日 | 阅读 4 分钟

什么是碎片化?

“碎片化是一种数据存储过程,其中内存空间使用不足,降低了能力或效率,有时两者兼而有之。” 碎片化的确切含义取决于正在运行的特定存储空间分配方案和特定的碎片类型。在某些情况下,碎片化会导致“未使用的”存储容量,并且该概念也适用于在这种情况下生成的不可用空间。用于保留数据集的内存(例如文件格式)与其他系统(例如 FAT 文件系统)类似,无论碎片化程度如何(从无到极端)。

存在三种不同的碎片化类型:内部碎片、外部碎片和数据碎片,它们可以单独存在或组合存在。为提高效率、性能或可用性,碎片化通常被视为可接受。对于其他工具(如处理器),也会发生类似的情况。

碎片化的基本概念

当计算机程序向操作系统 (OS) 请求存储片段时,这些元素以块的形式分配。当软件程序的某个块完成时,它可以被释放回系统,使其准备好在之后再次传输到下一个或类似的程序。软件在块被其保留的大小和持续时间上有所不同。计算机程序在其生命周期中可以请求和释放多个存储块。

当系统启动时,未使用的内存区域是大的且连续的。大的连续区域会随着时间和利用率而逐渐碎片化成较小的区域。最终,系统访问大的连续存储块可能会变得困难。

Internal vs. External Fragmentation

内部碎片

通常会保留比实际需要更多的内存空间,以遵守管理存储空间的限制。例如,内存只能以块(4 的倍数)的形式提供给系统,因此,如果程序请求 29 字节,它将获得 32 字节的分配。当发生这种情况时,多余的存储空间就会浪费掉。在这种情况下,无用的空间位于分配区域的内部。这种称为固定段的结构存在内存过度使用的问题——无论过程多么微不足道,都会消耗一个巨大的块。这种浪费被称为内部碎片。与许多其他形式的碎片不同,内部碎片通常无法恢复,消除它的唯一方法是重新设计。

例如,在动态存储分配中,通过将空间开销扩展到更多元素上,存储池显著减少了内部碎片。

Internal vs. External Fragmentation

上面提到的图显示了内部碎片,因为内部碎片被认为是分配的存储空间和所需空间或内存之间的区别。

外部碎片化

当已使用的存储空间被分成较小的批次并被分配的内存空间中断时,就会发生外部碎片。它是许多存储分配方法的弱点,因为它们无法有效地调度系统使用的内存。结果是,尽管有未使用的存储空间可用,但实际上无法访问,因为它被单独分割成太小的片段,无法满足软件的要求。“外部”一词源于不可访问空间存储在分配区域之外的事实。

例如,考虑这样一种情况:系统分配三个连续的内存块,然后释放中间块。内存分配器可以将此未使用的存储分配用于将来的分配。幸运的是,如果待保留的存储空间大于此可用区域,它将不会使用此组件。

在数据文件中,外部碎片通常存在于形成、调整大小和丢弃各种大小的多个文件时。如果一个被分成几个小块的文档被删除,影响会更糟,因为这会保留同样小的空闲空间段。

Internal vs. External Fragmentation

您可以看到,在上面提到的图中,有足够的内存空间 (55 KB) 来执行进程-07(需要 50 KB),但存储(碎片)不相邻。在这里,为了使用空闲空间运行一个过程,您可以使用压缩、分页或分段策略。

内部碎片与外部碎片

Internal vs. External Fragmentation

下面以表格形式讨论了内部碎片和外部碎片之间的区别。

序号。内部碎片外部碎片化
1.在固定大小存储的内部碎片中,帧是为处理而指定的。在外部碎片中,可变大小的内存帧被指定给进程。
2.当系统或过程大于存储空间时,发生内部碎片。每当系统或过程被撤销时,发生外部碎片。
3.内部碎片方法是与完美匹配的帧。压缩、分页和差异化是外部碎片的替代方案。
4.当存储空间被分割成固定长度的片段时,会发生内部碎片。当存储空间根据进程长度分割成可变大小的段时,会发生外部碎片。
5.分配内存与所需存储空间或内存之间的区别被认为是内部碎片。非连续存储块之间产生的空闲空间太小,无法运行新系统,这被认为是外部碎片。