分区分配算法(Partitioning Placement Algorithm)

写在前面:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。

来源:

https://blog.csdn.net/u011070169/article/details/53177987

https://www.gatevidyalay.com/contiguous-memory-allocation-practice-problems/

 

首次适应算法(first-fit):从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。

最佳适应算法(best-fit):从全部空闲区中找出能满足作业要求的,且大小最小的空闲分区,这种方法能使碎片尽量小。

 

最差适应算法(worst-fit):它从全部空闲区中找出能满足作业要求的、且大小最大的空闲分区,从而使链表中的节点大小趋于均匀。

 

下面先来看一个实例:

Given five memory partitions of 100 KB, 500 KB, 200 KB, 300 KB, and 600 KB (in order), how would each of the first-fit, best-fit, and worst-fit algorithms place processes of 212 KB, 417 KB, 112 KB, and 426 KB (in order)? Which algorithm makes the most efficient use of memory?

 

1、首次适应算法:

  • 为 212k分配空间:

        依次找寻,找到第一个大于 212k的空闲区;

        找到第二个空闲区 500k > 212k,分配给 212k,剩余 288k空闲区;

  • 为 417k分配空间:

        依次找寻,找到第一个大于 417k的空闲区;

        找到第五个空闲区 600k > 417k,分配给 417k,剩余 183k空闲区

  • 为 112k分配空间:

        依次找寻,找到第一个大于 112k的空闲区;

        找到第二个空闲区 288k > 112k,分配给 112k,剩余 176k空闲区

  • 为 426k分配空间:

        依次找寻,找到第一个大于 426k的空闲区;

        未找到,此作业将等待释放空间

 

2、最佳适应算法:

  • 为 212k分配空间:

        找到第一个跟 212k大小最接近的空闲区

        找到第四个空闲区 300k > 212k,剩余 88k空闲区

  • 为 417k分配空间:

        找到第一个跟 417k大小最接近的空闲区

        找到第二个空闲区 500k > 417k,剩余 83k空闲区

  • 为 112k分配空间:

        找到第一个跟 112k大小最接近的空闲区

        找到第三个空闲区 200k > 112k,剩余 88k空闲区

  • 为 426k分配空间:

        找到第一个跟 426k大小最接近的空闲区

        找到第五个空闲区 600k > 426k,剩余 174k空闲区

 

3、最差适应算法:

  • 为212k分配空间:

        找到第一个大小最大的空闲区

        找到第五个空闲区 600k > 212k,剩余 388k空闲区

  • 为 417k分配空间:

        找到第一个大小最大的空闲区

        找到第二个空闲区 500k > 417k,剩余 83k空闲区

  • 为 112k分配空间:

        找到第一个大小最大的空闲区

        找到第三个空闲区 388k > 112k,剩余 276k空闲区

  • 为426k分配空间:

        找到第一个大小最大的空闲区

        达到大小最大的空闲区 300k < 426k,所以不分配

 

Answer

Free partition100500200 300 600Not satisfied
First-fit 212,112  417426
Best-fit 417112212426 
Worst-fit 417  212,112426

 

文字图表看不懂,那接着配合动图来了解:

这次我们考虑六个大小为 200 KB,400 KB,600 KB,500 KB,300 KB和 250 KB的内存分区;这些分区需要按此顺序分配给四个进程,大小分别为 357 KB,210 KB,468 KB和 491 KB。

依次执行:

  • 首次适应算法
  • 最佳适应算法
  • 最差适应算法

1、首次适应算法:

  • 进程 P4无法分配内存,这是因为没有大于或等于处理 P4的大小的分区可用。


2、最佳适应算法:

 

3、最差适应算法:

  • 无法为进程 P3和进程 P4分配内存,这是因为没有大于或等于处理 P3和处理 P4的大小的分区可用。
在计算机内存管理中,可变分区分配算法(Dynamic Partitioning Algorithms)允许根据需要动态地调整分区大小以适应不同大小的进程请求。常见的几种可变分区分配算法包括: 1. **首次适应法(First Fit, FF)**:当一个进程申请内存时,从空闲区表的头部开始查找,找到第一个足够大的空闲区就分配给它。这种方法简单快速,但可能导致内存碎片。 2. **最佳适应法(Best Fit, BF)**:与首次适应类似,但它总是选择尺寸恰好匹配进程需求的最小空闲区,从而减少了碎片。查找过程可能较慢,因为需要遍历所有空闲区。 3. **最差适应法(Worst Fit, WF)**:也是从头开始搜索,但总是选择最大的空闲区分配,这可能会导致大块的未充分利用的内存和较小的请求难以分配。 4. **下次适配法(Next Fit, NF)**:如果一个进程请求不能立即用首次适应法满足,该方法会继续寻找下一个空闲区,直到找到合适的。它结合了首次适应和最佳适应的优点,减少碎片但可能增加查找时间。 5. **循环首次适应法(Cycle First Fit, CFF)**:当首次适应无法找到连续空间时,算法会在空闲区表上形成一个循环,并从循环的开始位置继续查找。 6. **优先级排队法(Priority Queue)**:将空闲区按照某种策略(如大小、地址等)排序,提高分配效率,但需要额外的数据结构支持。 每个算法都有其优点和缺点,适用于不同的系统场景。例如,对于内存资源有限的小型系统,首次适应法可能是更实际的选择,而对内存利用率有较高要求的大规模系统,可能会使用最佳适应法或优先级队列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值