第三章 内存管理 五、动态分区分配算法(首次适应算法、最佳适应算法、最坏适应算法、临近适应算法)

目录

一、首次适应算法

1、算法思想:

2、如何实现:

3、两种常用的数据结构:

(1)空闲分区表、空闲分区链

4、例子

二、最佳适应算法

1、算法思想:

2、如何实现:

3、例子:

三、最坏适应算法

1、算法思想:

2、如何实现:

3、例子

4、缺点

四、临近适应算法

算法思想:

如何实现:

五、总结


一、首次适应算法

1、算法思想:

每次都从低地址开始查找,找到第一个能满足大小的空闲分区。

2、如何实现:

空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

3、两种常用的数据结构:

(1)空闲分区表、空闲分区链

4、例子

(1)假设我们要插入一个大小为15MB的内存,它会比较空闲区的大小,第一次遇到的空闲区为20MB,所以直接放入。

二、最佳适应算法

1、算法思想:

由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当"大进程"到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。

2、如何实现:

空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

3、例子:

(1)若我们要插入一个为9MB的进程,就从小到大找空闲区。

(2)插入后,我们要重新对空闲区链表进行排序

三、最坏适应算法

1、算法思想:

算法思想:为了解决最佳适应算法的问题――即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。

2、如何实现:

空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

3、例子

(1)我们要将大小为3MB的进程插入内存,找到最大的空闲区并存入

4、缺点

每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有"大进程"到达,就没有内存分区可用了。

四、临近适应算法

算法思想:

首次适应算法每次都从链头开始查找的。

这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。

如果每次都从上次查找结束的位置开始检索,就能解决上述问题。

如何实现:

空闲分区以地址递增的顺序排列((可排成一个循环链表)。

每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

五、总结

相关推荐
瞎胡侃35 分钟前
Spark读取Apollo配置
大数据·spark·apollo
悻运37 分钟前
如何配置Spark
大数据·分布式·spark
懒惰的橘猫1 小时前
Spark集群搭建之Yarn模式
大数据·分布式·spark
2401_824256861 小时前
Spark-Streaming
大数据·分布式·spark
胡耀超1 小时前
附1:深度解读:《金融数据安全 数据安全分级指南》——数据分类的艺术专栏系列
大数据·金融·数据治理·生命周期·数据分类·政策法规
合新通信 | 让光不负所托1 小时前
【合新通信】浸没式液冷光模块与冷媒兼容性测试技术报告
大数据·网络·光纤通信
元6332 小时前
spark和hadoop之间的对比和联系
大数据·hadoop·spark
cooldream20092 小时前
深入解析大数据的Lambda架构:设计、特点与应用场景
大数据·架构·系统架构师
淋一遍下雨天3 小时前
Spark-Streaming核心编程
大数据·kafka
jack xu13 小时前
高频面试题:如何保证数据库和es数据一致性
java·大数据·数据库·mysql·elasticsearch