3-4连续内存分配:压缩式和交换式碎片整理

文章讨论了两种减少内存碎片的方法:压缩式碎片整理和交换式碎片整理。压缩式碎片整理涉及程序的重定位,可能在程序不占用CPU时进行,但开销较大。交换式碎片整理利用硬盘进行换入换出,但选择程序和粒度控制是挑战。文章强调了内存管理和逻辑到物理地址映射的重要性,以及操作系统如何确保应用执行的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

减少碎片,前面说到了,无论采用哪种算法,都有可能产生内存碎片。

有什么事后能弥补下,让这个碎片尽量下。碎片少,意味着它的空闲空间尽量完整、尽量连续,大小会比较大,便于后续分配。

方法1:压缩式碎片整理

造成空隙的原因:之前分配给别的程序,程序退出,这一块就空出来了。

首先需要考虑两个问题,

1:什么时候做重新拷贝或者叫重定位,把程序从一个地方挪到另外一个地方,什么时候做是合适的?

2:考虑它的开销大不大。

首先什么时候从一个地方挪到另外一个地方,挪的时机,能够在程序执行的时候去做这个操作?运行的时候去挪的话,程序访问的地址可能就不对了。

既然不能在程序运行的时候去做这个事情,那能不能在程序停止的时候,它正在等待某个事情,程序放在内存中,他没有在CPU占用执行,这个时候让程序从一个地方挪到另外一个地方,这是可以的,(有人说这个类似拥有垃圾回收机制的高级语言里面的STW,stop the world)。这是可以的,但是需要考虑开销大不大,也许很快,但是频繁的做这个操作,内存拷贝的开销还是很大的, 甚至影响整个系统的正常执行。这种方法纯靠软件来完成的方法实际上是由很大的开销在里面的。

方式2:交换式碎片整理

换入换出,把硬盘充分利用起来了。

其中的问题,

1:选择哪一个程序换出去?

2:到底在什么时候坐着换入换出操作?

3:另外一方面这个换入换出是以当个程序为粒度的,如果这个程序比较大,那么换入换出的开销就很大。

上述问题有什么办法去进一步完善?后续过程会讲虚存管理,会提到怎么去优化这个方法使得,更有效的去完成换入换出操作,目前换入换出是一个连续的大的内存块。希望将能将一个大块变成一个小块,做到更灵活的换入换出机制,需要后续的知识的补充。

总结:

1:

 

2:

 

地址包含两部分,一部分是逻辑地址,一部分是物理地址,通过编译器就把基于符号的地址空间变成基于逻辑地址的地址空间,这两者是通过编译器来完成的。

通过操作系统可以进一步完成逻辑地址到物理地址的映射,操作系统建立好对应关系,从而使得应用程序在内存中正常执行。

同时保证不同应用程序在执行过程中不会相互破坏,因为操作系统有安全检查。

2:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值