【发布时间】:2012-11-19 11:24:02
【问题描述】:
当进程从内存中加载和删除时,可用内存空间被分成小块,导致碎片......但是这是怎么发生的呢? 外部碎片的最佳解决方案是什么?
【问题讨论】:
-
通过压缩可以减少外部碎片。一种方法是混洗内存内容,将所有空闲内存放在一个大块中。只有当重定位是动态的并且在执行时完成时,压缩也是可能的。
标签: operating-system
当进程从内存中加载和删除时,可用内存空间被分成小块,导致碎片......但是这是怎么发生的呢? 外部碎片的最佳解决方案是什么?
【问题讨论】:
标签: operating-system
当有足够的总内存来满足请求(通常来自进程)时,存在外部碎片,但所需的总内存在连续位置不可用,即碎片。
外部碎片的解决方案:
1) 压缩:将碎片化的内存洗牌到一个连续的位置。
2) 使用分页和分段的虚拟内存寻址。
【讨论】:
当动态内存分配算法分配了一些内存并且剩下一小块无法有效使用时,就会发生外部碎片。如果发生过多的外部碎片,可用内存量将大大减少。总内存空间存在以满足请求,但它不是连续的。
请参阅以下示例
0x0000 0x1000 0x2000
A B C //Allocated three blocks A, B, and C, of size 0x1000.
A C //Freed block B
现在请注意,B 使用的内存不能包含在大于 B 大小的分配中
【讨论】:
可以通过压缩或混洗内存内容以将所有空闲内存放在一个大块中来减少外部碎片。为了使压缩可行,重定位应该是动态的。使用分页技术也可以避免外部碎片。
【讨论】:
避免外部碎片的最佳解决方案是分页。 分页是一种内存管理技术,通常由虚拟内存操作系统使用,以帮助确保您需要的数据尽快可用。 有关更多信息,请参阅:What's the difference between operating system "swap" and "page"?
在分页的情况下,没有外部碎片,但不能避免内部碎片。
【讨论】: