操作系统原理 —— 内存动态分区分配算法(二十一)

这篇具有很好参考价值的文章主要介绍了操作系统原理 —— 内存动态分区分配算法(二十一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在上一个章节我们讲了内存连续分配的几种方式,有单一、固定、动态这三种,在固定、动态这种里面,操作系统会记录空闲分区表,这个表是用来记录当前空闲的内存。

那么在之后有新的进程装入内存,需要从空闲分区表中找到一块比较合适的空闲内存,该怎么找呢? 这个就是今天我们要讲解的,几种不同方式的动态分区分配算法

首次适应算法 First Fit

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

如何实现:空闲分区以地址递增的次序排列,每次分配内存时顺序查找空闲分区表或者空闲分区链,找到第一个能满足大小的空闲分区。

这个算法很好理解,就从低位置开始找,找到第一个大小符合要求的就行,看下面的例子:

操作系统原理 —— 内存动态分区分配算法(二十一)

在这个时候进程5想要分配内存,就会从分区1分配 15 MB 大小的内存,因为起始地址为 8,并且内存大小也满足,所以就选择了第一个。

邻近适应算法 Next Fit

算法思想:首次适应算法是每次都需要从表头重新开始查找,这可能会导致低地址部分出现很多小的空闲分区,而每次查找都需要经过这些分区,增加了查找的开销,如果每次都从上次查找结束的位置开始检索,就能解决这个问题。

如何实现:空闲分区以地址递增的顺序开始排列,每次分配内存时从上次查找结束的位置开始查找空闲分区块,最后找到一个满足大小要求的分区即可。

这个算法和刚刚首次适应算法有相同点,也有不相同点。 相同点就是它们都是按照起始地址,依次递增开始排序,不同点就是首次适应算法每次分配每次都是需要重头开始查询是否有满足的分区,而邻近适应算法时从上一次查找结算的位置接着往后开始查找是否有满足的分区。

最佳适应算法 Best Fit

算法思想:由于动态分区分配是一种连续的分配方式,各个进程分配的空间必须是连续的一整块区域,为了考虑大进程到来时能有连续的大空间,所以尽可能更多的留下大片的空闲区,优先使用更小的空闲区。

如何实现:空闲分区表按照容量依次递增次序排列,每次分配内存的时候按照顺序查找,找到第一个大小能满足要求的空闲分区。

我们看下面这个例子:空闲分区表是按照分区大小递增排列,然后选择第一次能够满足要求的分区即可。

操作系统原理 —— 内存动态分区分配算法(二十一)

缺点:每次都选择最小的分区进行分配,会留下很多越来越多的、很小的、难以利用的内存块,就会产生很多内部碎片,如下图:
操作系统原理 —— 内存动态分区分配算法(二十一)

当进程6、进程5,他们使用比较最佳的空闲分区表之后,各剩下了 1 MB 的空闲分区,这种情况会越来越多,就会导致产生很多外部碎片。

最坏适应算法 Worst Fit

算法思想:为了解决最佳适应算法的问题,可以在每次分配时,优先使用最大的连续空闲区,这样分配后的空闲区就不会太小,方便使用。

如何实现:空闲分区按照容量递减次序排列,每次分配内存时顺序查找,找到大小能够满足的第一个空闲分区。

看下面这个例子:空闲分区表是按照分区大小,递减的关系来进行排列的,然后按照顺序查找 进程5 就被安排到了第一个分区。

操作系统原理 —— 内存动态分区分配算法(二十一)

但是这个算法也会有缺点,因为它是优先使用容量最大的分区,这样就会导致如果之后有大进程需要使用内存的时候,分区就无法满足需求了。

本章总结

操作系统原理 —— 内存动态分区分配算法(二十一)文章来源地址https://www.toymoban.com/news/detail-475317.html

到了这里,关于操作系统原理 —— 内存动态分区分配算法(二十一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统动态分区分配方式C/C++语言(首次适应算法(FF)循环首次适应算法(NF)最best适应算法(BF)最坏适应算法(WF))

    一、动态分区分配算法 为把一个新作业装入内存,须按照一定的分配算法, 从空闲分区表或空闲分区链中出一分区分配给该作业。由于内存分配算法对系统性能有很大的影响,故人们对它进行了较为广泛而深入的研究,于是产生了许多动态分区分配算法。传统的四种分配算

    2024年02月10日
    浏览(41)
  • 操作系统-内存分配算法

    操作系统原理实验报告 实验题目   实 验 四内存分配算法     1.1 实验目的 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请主存储器空间时,存储管理必须根据申请者的要求,

    2024年02月03日
    浏览(46)
  • 内存动态分区分配算法

    所谓动态分区分配,就是指 内存在初始时不会划分区域,而是会在进程装入时,根据所要装入的进程大小动态地对内存空间进行划分,以提高内存空间利用率,降低碎片的大小 动态分区分配算法有以下四种: 1. 首次适应算法(First Fit) 空闲分区以 地址递增的次序链接 。分

    2024年02月11日
    浏览(50)
  • 数据结构:动态内存分配+内存分区+宏+结构体

    1.定义一个学生结构体,包含结构体成员:身高,姓名,成绩;定义一个结构体数组有7个成员,要求终端输入结构体成员的值,根据学生成绩,进行冒泡排序。 1.申请一个10个int类型的堆区空间,并实现选择排序(需要导入头文件 #include stdlib.h) 2.用##拼接带参宏的参数 3.宏函

    2024年02月20日
    浏览(43)
  • 动态异长分区内存分配与去配算法的设计-最佳适应算法

    理解存储管理的功能,掌握动态异长分区内存管理中的最佳适应算法。 本设计要求模拟最佳适应算法的分配算法和回收算法。 空闲区域首址 空闲区域长度 … … addr size … … 图1-1 空闲区域表 为了实现存储资源的分配和回收,操作系统需要记录内存资源使用情况,即哪些区

    2024年02月19日
    浏览(46)
  • 操作系统中文件系统的实现和分配方式探析(下)

    我们已经对连续分配的方式有了一定的了解,并且也清楚了它存在的问题和局限性。为了解决这些问题,非连续存放的方式应运而生。非连续空间存储大致可以分为两种形式:链表形式和索引形式。 链式分配是一种离散分配的方式,用于为文件分配非连续的磁盘块。它有两种

    2024年02月10日
    浏览(41)
  • 操作系统中文件系统的实现和分配方式探析(上)

    在 Linux 文件系统中,用户空间、系统调用、虚拟机文件系统、缓存、文件系统以及存储之间存在着紧密的关系。 如下图: 在操作系统中,文件系统起到了重要的作用,它们负责管理操作系统中的文件和目录。然而,不同的文件系统有着不同的实现方式和存储位置。为了提供

    2024年02月10日
    浏览(35)
  • GUID分区与MBR分区有什么区别? 操作系统知识

    GUID分区与MBR分区有什么区别? 操作系统知识 1、MBR分区表类型的磁盘 主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Pr

    2024年02月13日
    浏览(41)
  • 操作系统实验(一)——可变分区存储管理

    湖南师范大学信息科学与工程学院计算机科学与技术非师范班操作系统实验报告 一、实验目的: 加深对可变分区存储管理的理解; 提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数; 掌握用指针实现链表和在链表上的基本操作。

    2024年02月06日
    浏览(42)
  • 银河麒麟桌面操作系统之磁盘分区与磁盘挂载

    今天跟大家分享一篇干货 - - 银河麒麟添加硬盘与挂载硬盘,也就是磁盘分区与磁盘挂载 本文使用fdisk命令进行操作 测试环境:虚拟机(因为使用的是虚拟机,因此小编添加的磁盘容量较小) 系统版本:Kylin-Desktop-V10-SP1-Release-hwe-2107 注:此为桌面系统教程 磁盘分区 1.我们打

    2024年01月19日
    浏览(207)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包