操作系统 内部与外部碎片化
什么是碎片化
碎片化是一种数据存储过程,其中内存空间被不充分使用,降低了能力或效率,有时两者都降低。具体的碎片化含义取决于特定的存储空间分配方案和特定的碎片化类型。在某些情况下,碎片化会导致“未使用”的存储容量,这个概念也适用于在该情况下产生的不可用空间。用于保存数据集(例如文件格式)的内存对于其他系统(例如FAT文件系统)是相同的,无论有多少碎片化(从空到极端)。
有三种不同的碎片化类型:内部碎片化、外部碎片化以及可以存在并存或组合的数据碎片化。碎片化常常被认为是对改进、效率或可用性的不利影响。对于处理器等其他工具,类似的情况也发生。
碎片化的基本概念
当计算机程序从操作系统(OS)请求存储的片段时,这些元素会被分配给片段。当软件程序的一个片段完成时,它可以释放回系统,使其可以随后被传输到下一个或类似的程序中。软件在保存片段的大小和持续时间上有所不同。计算机程序在其生命周期中可以要求并释放多个存储块。
当系统启动时,未使用的内存部分是大而连续的。随着时间和使用的增加,这些大的连续区域逐渐变得碎片化为较小的部分。最终,对于系统而言,访问大的连续存储块可能变得困难。
内部碎片
常常会预留比实际所需更多的内存空间,以遵循控制存储空间的限制。例如,内存只能以块(4的倍数)的形式提供给系统,因此,如果程序需要29字节,它将得到一个32字节的块。当发生这种情况时,多余的存储空间被浪费掉。在这种情况下,无用的空间位于一个分配的区域内。这种结构被称为固定分段,因为任何进程都会占用大量的空间,无论多么微不足道,内部碎片就是指这些垃圾。与许多其他形式的碎片不同,内部碎片是不可能恢复的,通常,消除它的唯一方法是使用一种新的设计。
例如,在动态存储分配中,通过将空间开销扩展到更多的元素中,可以显著减少内部碎片。
上述图示说明了内部碎片化,因为内部碎片化是指所分配的存储空间与所需空间或内存之间的差异。
外部碎片化
当已使用的存储被分割成较小的分块,并且被分配的内存空间之间存在间隔时,就会发生外部碎片化。这是许多存储分配方法的一个弱点,因为它们无法有效地调度系统使用的内存。其结果是,虽然有未使用的存储空间可用,但由于被分割成不足以满足软件要求的碎片,这些空间实际上是无法访问的。这个“外部”一词来自于无法访问的空间存储在分配区域之外的事实。
例如,考虑这样一种情况:系统分配了三个连续的内存块,然后释放了中间块。存储分配器可以使用这个未使用的存储分配来进行未来的任务。幸运的是,如果要保留的存储大小比这个可用区域更大,就不会使用这个部分。
在数据文件中,当形成、调整大小和丢弃多个大小不同的文件时,外部碎片化通常存在。如果将一个破碎的文件分成几个小块,并将其移除,影响将会更严重,因为这样会保留同样大小的空闲空间段。
如上所述的图中可以看到,有足够的存储空间(55 KB)来执行一个进程-07(要求50 KB),但存储(片段)不是相邻的。在这里,为了利用空余空间来运行一个过程,可以使用压缩、分页或分段策略。
内部碎片与外部碎片
此处以表格形式讨论了内部碎片和外部碎片之间的区别。
序号 | 内部碎片 | 外部碎片 |
---|---|---|
1. | 在固定大小存储的内部碎片中,帧被指定为处理。 | 在外部碎片中,可变大小的内存帧被指定为处理。 |
2. | 当系统或过程大于存储时,会发生内部碎片。 | 每当系统或过程被退出时,会发生外部碎片。 |
3. | 内部碎片的方法是找到完美匹配的帧。 | 压缩,分页和差异化是外部碎片的替代方法。 |
4. | 内部碎片发生在存储被分成固定长度的片段时。 | 外部碎片发生在存储被分成根据过程长度的可变大小的段时。 |
5. | 分配的内存和所需的存储或内存之间的差异被视为内部碎片。 | 在非连续存储块之间创建的空白空间太小,无法用于新系统运行,被视为外部碎片。 |