内部碎片、外部碎片、页内碎片以及紧凑技术

1. 外部碎片 (External Fragmentation)

定义: 外部碎片是指在内存中存在足够大小的空闲空间来满足一个内存请求,但是这些空闲空间被分割成许多小的、不连续的块,而这些块的总大小足以满足请求,但没有一个单独的块足够大。 就像拼图游戏一样,你有足够的碎片,但你找不到一块能够完整拼出所需图案的碎片。

成因: 动态内存分配和释放是外部碎片的主要成因。当程序分配和释放内存时,会留下许多大小不一的空闲空间。这些空闲空间分散在已分配内存块之间,无法被更大的内存请求有效利用。

举例: 假设你的系统有100KB内存,已经分配了20KB、30KB和10KB的内存块。剩余的空闲空间分别是10KB、20KB和10KB。此时,如果有一个程序需要25KB内存,那么虽然总共有40KB的空闲空间,但没有一个单一的空闲块大于25KB,因此内存分配失败,造成了外部碎片。

影响: 外部碎片会降低内存利用率,导致系统无法充分利用可用内存,即使总的空闲空间足够大。这可能会导致程序无法运行或性能下降。

2. 内部碎片 (Internal Fragmentation)

定义: 内部碎片是指分配给进程的内存空间大于进程实际需要的内存空间。 这就好比你订购了一个超大的披萨,但你只吃了一小部分,剩下的披萨就浪费了。

成因: 通常由于内存分配的粒度限制导致的。操作系统通常以固定大小的块(例如页或段)分配内存。即使一个程序只需要少量内存,它也必须获得一个整块的内存。

举例: 假设操作系统以4KB为单位分配内存,而一个程序只需要2KB内存。那么系统会分配4KB内存给该程序,剩余的2KB内存就被浪费了,形成了内部碎片。

影响: 内部碎片直接导致内存浪费,降低内存利用率。虽然不像外部碎片那样会阻止程序运行,但是它会降低系统整体的性能和效率。

3.页内碎片:

页内碎片产生在当一个进程只使用了页面的一部分时。 即使一个页面只使用了1KB,操作系统仍然会分配一个完整的页面(例如4KB)。 剩余的3KB就构成了页内碎片。 这与分配粒度有关,因为页面大小是固定的。

分页存储管理中内部碎片的处理方法:

分页存储管理本身并没有直接的机制来消除内部碎片,因为其核心机制就是以固定大小的页面进行内存分配。 减少内部碎片的影响主要依赖以下策略:

选择合适的页面大小: 这是一个权衡。 较小的页面大小可以减少内部碎片,因为程序只占用需要的空间,但会增加页表的大小和页表管理开销。 较大的页面大小可以减少页表管理开销,但会增加内部碎片。 需要根据系统的具体情况选择最优的页面大小。

页面共享: 多个进程可以共享同一个页面,从而减少内存的浪费。 例如,多个进程可能都需要使用相同的库函数,这时它们可以共享包含这些函数的页面。 这并非直接减少每个进程的内部碎片,而是提高了整体内存利用率。

覆盖技术: 允许程序将不常用的页面交换到磁盘,从而释放内存空间。 这实际上是一种动态调整内存分配的方式,虽然不能直接消除内部碎片,但可以提高内存的利用率,减少因内部碎片导致的内存不足问题。 这需要在空间和时间开销上进行权衡。

改进内存分配算法: 虽然分页本身决定了内部碎片的存在,但操作系统可以优化内存分配算法,尽量减少内部碎片的累计。 例如,一些高级的内存分配算法可以尝试将相邻的空闲页框合并,但这并不能完全消除内部碎片,仅仅是减少其影响。

4. 紧凑技术 (Compaction)

定义: 紧凑技术是一种内存管理技术,用于减少外部碎片。它通过移动已分配的内存块,将所有空闲空间合并成一个大的连续块。 就像把拼图碎片重新排列,使它们形成一个完整的图案。

实现: 紧凑技术需要操作系统暂停所有进程,然后将所有已分配的内存块移动到内存的一端,从而在内存的另一端形成一个大的连续空闲空间。

优缺点:

优点: 有效地减少外部碎片,提高内存利用率。
缺点: 需要暂停所有进程,开销较大,会影响系统性能。 移动内存块也需要时间,并且可能需要修改内存地址(需要进行地址重定位)。 对于大型系统,紧凑的开销可能非常高。
适用场景: 紧凑技术通常应用在单用户系统或实时系统中,这些系统对性能要求不高或能容忍较长的暂停时间。 在多用户系统中,长时间暂停会严重影响系统可用性,因此紧凑技术通常不被频繁使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值