【问题标题】:How does external fragmentation happen?外部碎片是如何发生的?
【发布时间】:2012-11-19 11:24:02
【问题描述】:

当进程从内存中加载和删除时,可用内存空间被分成小块,导致碎片......但是这是怎么发生的呢? 外部碎片的最佳解决方案是什么?

【问题讨论】:

  • 通过压缩可以减少外部碎片。一种方法是混洗内存内容,将所有空闲内存放在一个大块中。只有当重定位是动态的并且在执行时完成时,压缩也是可能的。

标签: operating-system


【解决方案1】:

当有足够的总内存来满足请求(通常来自进程)时,存在外部碎片,但所需的总内存在连续位置不可用,即碎片。

外部碎片的解决方案:

1) 压缩:将碎片化的内存洗牌到一个连续的位置。

2) 使用分页和分段的虚拟内存寻址。

【讨论】:

    【解决方案2】:

    外部碎片

    当动态内存分配算法分配了一些内存并且剩下一小块无法有效使用时,就会发生外部碎片。如果发生过多的外部碎片,可用内存量将大大减少。总内存空间存在以满足请求,但它不是连续的。 请参阅以下示例

     0x0000 0x1000  0x2000  
       A    B     C               //Allocated three blocks A, B, and C, of size 0x1000.
       A          C         //Freed block B
    

    现在请注意,B 使用的内存不能包含在大于 B 大小的分配中

    【讨论】:

    • 你知道为什么叫external吗?
    • 内部碎片是指给定内存块内的浪费位,在这种情况下是一个页面。另一方面,外部碎片是指块/页面外部的内存浪费。
    • 如果我错了,请纠正我,但这个答案似乎混合了外部和内部碎片。内存分配算法旨在最大限度地减少内部碎片(它接触的每个内存都在块/页内)。虚拟寻址方案(分页与分段)负责外部碎片。
    • 命名法:内部碎片 - 不可用的内存在分配的内存块内,外部碎片 - 不可用的内存在分配的内存块之外
    【解决方案3】:

    可以通过压缩或混洗内存内容以将所有空闲内存放在一个大块中来减少外部碎片。为了使压缩可行,重定位应该是动态的。使用分页技术也可以避免外部碎片。

    【讨论】:

      【解决方案4】:

      避免外部碎片的最佳解决方案是分页。 分页是一种内存管理技术,通常由虚拟内存操作系统使用,以帮助确保您需要的数据尽快可用。 有关更多信息,请参阅:What's the difference between operating system "swap" and "page"?

      在分页的情况下,没有外部碎片,但不能避免内部碎片。

      【讨论】:

        猜你喜欢
        • 2018-06-08
        • 2017-12-09
        • 2018-12-13
        • 2012-01-09
        • 1970-01-01
        • 2015-12-21
        • 2010-11-15
        • 2017-01-29
        • 1970-01-01
        相关资源
        最近更新 更多