当前位置: 首页 > news >正文

操作系统3.2:连续型分配之动态分区、内存回收

静态分区我们前面已经说过,它是提前给内存划分成几个部分,称为分区。在特定的分区内部,载入进程。
因为静态分区分的数量是固定的,所以往往不能允许太多或太大的进程并发执行。

动态分区是根据进程的需要,动态地为其分配内存空间。

比如现在我有一个20MB的进程,现在内存的情况如图:
在这里插入图片描述
那么在这种情况下,我们的操作系统就可以把22MB中的20MB划给进程。
这就是根据进程的大小,来划分分区。而不是一开始就定好了各分区的大小。

内存空闲区在内存中会用一个双向链表来存储,这样找空闲区域的时候就很方便。

常见的分区分配算法:

1、首次适应算法(First Fit)

【算法过程】:
从头开始,遍历内存空闲区链表。
找到第一个大小可满足的空闲分区,将其分配给进程。

【大白话解释】:
你手上有很多的箱子,当你要往箱子中放东西的时候,你将所有的箱子拿出来。从头开始找哪一个箱子能装下你的物品。找到一个大小合适的了,那就装进去呗!OK!

2、循环首次适应算法(Next Fit)

【大白话解释】:
首次适应算法有个缺点,就是会造成前面的箱子大多数都装满了,而后面的箱子却都空着。
于是提出改进,每次都从上次装完的那个箱子的后一个箱子开始。这样的话,箱子装的更加平均。即,内存的分配更加平均,不会集中于某一处。

3、最佳适应算法(Best Fit)

以上两种算法比较简单,但效果不是太好。因为很容易造成箱子大材小用的情况!
因此提出最佳适应算法。

【大白话解释】:
当你用首次适应算法的时候,你的大箱子很可能只装了一个小杯子。
于是,聪明的你想到,将箱子按照容量大小排个序,然后再依次对比,装箱。
这样一定会保证大材小用的情况不发生。比如:现有排好序的箱子5, 10, 15, 20。当有一个大小为12的物品需要装填的时候,我们会用15这个箱子,而不会使用20.

4、最差适应算法(Worst Fit)

最差适应算法要将空闲区容量从大到小排序。
可能有些人会奇怪,为什么要从大到小排序呢?这样不是大材小用了吗?
对,是的。但是最佳适应算法是有缺点的,它会带来很多的内存碎片

比如刚刚的情况,空闲区为:
5 10 15 20
我们将12放到15中去,那么15这个空闲区就只剩3个单位大小了,这么小的空间几乎不能再放任何进程,因此,该碎片很可能就无法利用了。所以,产生过多的内存碎片对资源是很浪费的。

而如果,我们按照最差适应算法,那么就会把12放到20中去,这样剩余空间应该是20 - 12 = 8。还有8个单位的大小,属于比较大的,有可能可以放其他的进程。
因此,最差适应算法存在的意义就是能减少内存碎片。但它又造成了大材小用的情况

算法总结

由上面的介绍,我们可以看出,其实这四种算法都是各有各的优点,同时也是各有各的缺点。

再来看看内存回收的过程

有内存的分配,那么肯定也有内存的回收。内存是如何回收的呢?
总体一句话:就是要把空闲区和回收区合并起来

经过分析,内存回收只可能存在以下4种情况:

在这里插入图片描述
情况1、

空闲区节点中,地址不变,大小修改即可。要把回收区的大小加进来。

情况2、

该节点地址要变,变成回收区的地址,然后大小也要修改

情况3、

地址变成前面的空闲区地址,大小把前后一加

情况4、

新创建一个空闲区节点,设定大小,插入到空闲区双向链表中即可。

http://www.xdnf.cn/news/860869.html

相关文章:

  • 【Opencv】cv::rectangle、cv::getTextSize、cv::putText、cv::Rect函数详解和示例
  • Linux培训班多少钱?推荐6大Linux云计算运维培训机构名单
  • 13 万字 C 语言从入门到精通保姆级教程2021 年版
  • Windows核心编程学习笔记(20)--同步设备I/O与异步设备I/O1
  • 以数据安全为核心的安全立体防御体系解决方案
  • 摄氏度和开氏度的换算_摄氏度与开氏度换算(开氏度和摄氏度的换算公式)
  • 红客是什么呢?零基础如何成为红客!
  • 八数码难题的多种解法
  • Arduino as ISP 下载器烧录BootLoader的细节详解
  • 聚类分析
  • sql server2008的安装包和密钥
  • 我的软考经验分享
  • 创业者不得不去的10个网站!
  • activate-power-mode安装与设置(去掉activate-power-mode右上角图标)
  • 苹果手机下载不了软件怎么办?6个解决方案等你来
  • aptana手动配置python环境_关于使用Aptana+Pydev构建Python开发环境(Django)
  • 运维工作内容
  • 分销系统搭建流程详解,教你搭建SaaS分销系统!
  • 高防服务器如何防御?
  • 【专访】首届腾讯社交广告“高校算法大赛”落幕 冠亚季军团队参赛心得精彩分享
  • 网页客服系统全解析:在线服务的高效解决方案
  • C语言基本语法知识
  • java入门基础语法--方法(超全详细)
  • 20种富含维生素A的食物盘点,赶紧保存收藏!
  • 减肥日记
  • kernel printk的打印等级
  • 华为鸿蒙系统好在哪,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  • 关于EEG以及如何解释EEG?
  • 百度旗下手机应用大盘点
  • 007-软件测试分类