操作系统原理:连续的内存分配

一、由于内存释放导致的内存碎片的问题

 空闲内存碎片化可能导致很多的内存不会被利用。内存碎片包含两种,一种时内部碎片,一种时外部碎片,所谓的内部碎片,就是分配给应用程序使用但是实际却无法被利用的碎片,而外部碎片是在分配单元里的未使用内存。当程序从硬盘加载到内存中的时候就需要一串比较长的连续内存空间。因此,操作系统需要管理内存空间

 

二、分区的动态分配

假如由三块可用的内存空间,1K ,2K ,500B。假如需要分配一个400B内存空间给程序

1)内存空间的分配策略——首次适配

所谓的首次适配,就是第一次匹配到满足要求的内存空间,最后程序的内存空间将会在这1K上去分配出400B的空间。此方法需要对地址进行排序,按顺序查找出首次适配的空闲内存。在内存回收的时候,要考虑到连续内存空间的合并问题。此方法容易产生较多的外部碎片,但是算法简单,分配完后的空闲内存可能还可以保留较大的空间等待接下来的分配。

2)内存空间的分配策略——最佳适配

所谓最佳适配,就是匹配到最适合的且满足要求的内存空间,最匹配的空间块是500B。对内存块size排序,这个方法劣势就是最后的分配的内存空间会十分小无法利用。

3)内存空间的分配策略——最差适配

所谓最差适配与最佳适配算法,先利用最大的空闲内存块。匹配的空间块是2K。对内存块size排序,缺点,运行久了时候,大请求可能就会分配不了。

 

以上三种各有利弊,并没有哪一种内存管理方法是普适的,通常会根据不同的需求来匹配不同的匹配方法。

 

三、压缩式碎片整理

面对程序间的内存碎片,考虑的是调整程序的空间位置,从而变成一个连续被利用的块,腾出一个连续的空间空间。压缩碎片整理通过“拷贝”(重定位)的方式来“移动”程序正在使用的内存空间。要考虑的问题是:什么时候进行调整分配合适?开销是否大? 

首先程序运行的时候不能移动内存空间,而是在程序等待,暂停运行的时候进行移动。 如果利用空间过大,要移动复制的空间也就大,这个造成的开销是否会导致操作系统的正常运行?

 

四、交换式碎片整理

将硬盘利用起来。当成一个备份。当程序的暂停运行的时间,将暂停运行的程序的内存空间数据移动到硬盘上,当再运行程序时,将硬盘上备份的数据丢回内存上重新分配。这需要考虑的问题是,哪一部分的内存空间被换到硬盘上合适 ?何时进行换入换出操作?

Guess you like

Origin blog.csdn.net/superSmart_Dong/article/details/115828607