3.内存连续分配管理方式

操作系统学习之路-内存管理原理 内存管理 概念:操作系统对内存进行合理的划分和有效的动态分配 功能:(1)内存空间分配与回收 (2)内存扩充 (3)地址转换 (4)内存保护 内存管理方式:(1)连续分配:为一个用户程序分配一个连续内存空间 (2)非连续分配:可以将一个程序分散的装入内存 内部碎片:内存空间已经分配出去,但没有被使用的内存空间 外部碎片:内存空间没有分配出去,因为大小空间不足而产生的外部内存空间 一、连续分配管理 1.单一连续分配 内存分为用户区和系统区 有内部碎片,无外部碎片 只能用于单用户、单任务的操作系统中 2.固定 阅读详情

转载自:http://c.biancheng.net/cpp/html/2610.html点击打开链接


连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。

单一连续分配

内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式无需进行内存保护。

这种方式的优点是简单、无外部碎片,可以釆用覆盖技术,不需要额外的技术支持。缺点是只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。

固定分区分配

固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。


图3-4  固定分区分配的两种方法

固定分区分配在划分分区时,有两种不同的方法,如图3-4所示。
  • 分区大小相等:用于利用一台计算机去控制多个相同对象的场合,缺乏灵活性。
  • 分区大小不等:划分为含有多个较小的分区、适量的中等分区及少量的大分区。

为便于内存分配,通常将分区按大小排队,并为之建立一张分区说明表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配),如图3-5(a)所示。当有用户程序要装入时,便检索该表,以找到合适的分区给予分配并将其状态置为”已分配”;未找到合适分区则拒绝为该用户程序分配内存。存储空间的分配情况如图3-5(b)所示。

这种分区方式存在两个问题:一是程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间;二是主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费,这种现象称为内部碎片。

固定分区是可用于多道程序设计最简单的存储分配,无外部碎片,但不能实现多进程共享一个主存区,所以存储空间利用率低。固定分区分配很少用于现在通用的操作系统中,但在某些用于控制多个相同对象的控制系统中仍发挥着一定的作用。


图3-5  固定分区说明表和内存分配情况

动态分区分配

动态分区分配又称为可变分区分配,是一种动态划分内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统中分区的大小和数目是可变的。


图3-6动态分区

如图3-6所示,系统有64MB内存空间,其中低8MB固定分配给操作系统,其余为用户可用内存。开始时装入前三个进程,在它们分别分配到所需空间后,内存只剩下4MB,进程4无法装入。在某个时刻,内存中没有一个就绪进程,CPU出现空闲,操作系统就换出进程2,换入进程4。由于进程4比进程2小,这样在主存中就产生了一个6MB的内存块。之后CPU又出现空闲,而主存无法容纳进程2,操作系统就换出进程1,换入进程2。

动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的碎片(图3-6中最后的4MB和中间的6MB,且随着进程的换入/换出,很可能会出现更多更小的内存块),内存的利用率随之下降。这些小的内存块称为外部碎片,指在所有分区外的存储空间会变成越来越多的碎片,这与固定分区中的内部碎片正好相对。克服外部碎片可以通过紧凑(Compaction)技术来解决,就是操作系统不时地对进程进行移动和整理。但是这需要动态重定位寄存器的支持,且相对费时。紧凑的过程实际上类似于Windows系统中的磁盘整理程序,只不过后者是对外存空间的紧凑。

在进程装入或换入主存时,如果内存中有多个足够大的空闲块,操作系统必须确定分配哪个内存块给进程使用,这就是动态分区的分配策略,考虑以下几种算法:
  • 首次适应(First  Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
  • 最佳适应(Best  Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
  • 最坏适应(Worst  Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
  • 邻近适应(Next  Fit)算法:又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从上次查找结束的位置开始继续查找。

在这几种方法中,首次适应算法不仅是最简单的,而且通常也是最好和最快的。在UNIX 系统的最初版本中,就是使用首次适应算法为进程分配内存空间,其中使用数组的数据结构 (而非链表)来实现。不过,首次适应算法会使得内存的低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。

邻近适应算法试图解决这个问题,但实际上,它常常会导致在内存的末尾分配空间(因为在一遍扫描中,内存前面部分使用后再释放时,不会参与分配),分裂成小碎片。它通常比首次适应算法的结果要差。

最佳适应算法虽然称为“最佳”,但是性能通常很差,因为每次最佳的分配会留下很小的难以利用的内存块,它会产生最多的外部碎片。

最坏适应算法与最佳适应算法相反,选择最大的可用块,这看起来最不容易产生碎片,但是却把最大的连续内存划分开,会很快导致没有可用的大的内存块,因此性能也非常差。

Kunth和Shore分别就前三种方法对内存空间的利用情况做了模拟实验,结果表明:

首次适应算法可能比最佳适应法效果好,而它们两者一定比最大适应法效果好。另外注意,在算法实现时,分配操作中最佳适应法和最大适应法需要对可用块进行排序或遍历查找,而首次适应法和邻近适应法只需要简单查找;回收操作中,当回收的块与原来的空闲块相邻时(有三种相邻的情况,比较复杂),需要将这些块合并。在算法实现时,使用数组或链表进行管理。除了内存的利用率,这里的算法开销也是操作系统设计需要考虑的一个因素。

表3-1三种内存分区管理方式的比较
 作业道数内部
碎片
外部
碎片
硬件支持可用空
间管理
解决碎
片方法
解决空
间不足
提高作
业道数
单道连续
分配
1界地址寄存器、越界
检查机构
----覆盖交换
多道固定
连续分配
<=N
(用户空间划
为N块)
  1. 上下界寄存器、越界检查机构
  2. 基地址寄存器、长度寄存器、动态地址转换机构
----
多道可变连续分配
  • 数组
  • 链表
紧凑

以上三种内存分区管理方法有一共同特点,即用户进程(或作业)在主存中都是连续存放的。这里对它们进行比较和总结,见表3-1。

【操作系统】-- 动态分区分配算法(首次适应算法FF、最佳适应算法BF、最坏适应算法WF、循环首次适应算法NF) 每次从低地址开始查找,找到第一个能满足大小的空闲分区。空闲分区以地址递增的次序排列,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区。空闲分区表、空闲分区链优点:①为分配大的内存空间创造了条件②不需要重新排序,算法开销小缺点:①不断被划分,会留下许多难以利用的小分区,产生碎片。空闲分区表↑空闲分区链(按起始地址有小到大排序)↓由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域,因此为了保证大进程到来时能有连续的大空间,可以尽可能的留下大空间,优先使用小空间。空闲 阅读详情

相关推荐

操作系统: 最佳适配算法和邻近适配算法的模拟实现(内存分配算法)

实现动态分区的分配算法。 (1) 最佳适配算法:选择内存空闲块中最适合进程大小的块分配。 (2) 邻近适配算法:从上一次分配的地址开始查找符合要求的块,所查找到的第一个满足要求的空闲块就分配给进程。 模拟添加进程的时候,假定内存是一块完整的空闲区,对于算法(1)来说,分配的时候遍历所有的空闲内存块,找出其中最适合的一块,注意此时内存分区的总块数可能已经发生了变化; 对于算法(2)来说,则需

NK_test的博客 8229

内存分配---FF、BF、WF三种算法

动态分区分配是根据进程的实际需要,动态的为之分配内存空间。而在实现可变分区分配时,将涉及到分区分配中 所用的数据结构、分区分配算法和分区的分配内存回收的过程。 分区分配中的数据结构:(1)描述空闲块的数据结构。(2)内存块的描述。 #define PROCESS_NAME_LEN 32 //进程名长度 #define MIN_SLICE 10 ...

weixin_30878501的博客 4275

操作系统第五章 存储器管理笔记

第五章 存储管理笔记 1、存储器管理的目的:方便用户和提高主存空间的利用率。 2、存储层次3层:CPU寄存器(寄存器)、主存储器(高速缓存、主存储器、磁盘缓存)、辅助存储器(固定磁盘、可移动存储介质)。 3、可执行存储器:寄存器和主存储器又被称为可执行存储器。 4、访问可执行存储器:进程可以在很少的时钟周期内使用一条load或store指令。 5、访问辅助存储:需要通过I/O设备实现。 6、编译:由编译程序对用户源程序进行编译,形成若干个目标模块。 7、链接:由链接程序将编译后形成的一组目标模块以及它们所需

weixin_45923166的博客 596

内存碎片

内存碎片的产生:&lt;wbr&gt;&lt;/wbr&gt; 内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。 因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,...

wangminshe89 595

3.1.4 内存连续分配管理方式

目录思维导图单一连续分配固定分区分配动态分区分配 思维导图 单一连续分配 固定分区分配 动态分区分配

辉小歌的博客 428

FreeROTS内存管理

● 在小型的嵌入式系统中效率不高。● 会占用很多的代码空间。● 它们不是线程安全的。● 具有不确定性,每次执行的时间不同。● 会导致内存碎片。● 使链接器的配置变得复杂。不同的嵌入式系统对于内存分配和时间要求不同,因此一个内存分配算法可以作为系统的可选选项。FreeRTOS 将内存分配作为移植层的一部分, 这样 FreeRTOS 使用者就可以使用自己 的合适的内存分配方法。

F__Y__的博客 385

【FreeRTOS快速入门-01】内存管理

freertos中对内存做了管理。分为4种方式。不同方式有不同的优缺点,用户可以根据自己的需求来选择自己的内存管理模型。freertos中可以选择若干种内存分配方式,但一般而言就是看内存空间是否连续,来选择heap4还是heap5.

GivemeAK的博客 457

操作系统实验三:内存管理(动态分区分配方式的模拟)

操作系统实验三:内存管理(动态分区分配方式的模拟算法)

fufuyfu的博客 9269

【操作系统——内存连续分配管理方式

这篇文章为大家讲解的是操作系统当中内存分配方式——连续分配管理方式连续分配方式是指一个由用户程序分配一个连续内存空间,就比如说用户需要一块100MB的内存空间,那么就在内存当中为用户分配一块连续的并且大小为100MB的内存空间,连续分配管理方式主要由单一连续分配、固定分区分配和动态分区分配三种方式...

weixin_59658448的博客 2952

操作系统 连续分配存储管理方式(含动态分区分配算法)

看教材枯燥,码字记录提神,根据计算机操作系统(第四版,汤小凤)个人整理,仅作学习记录 :) 为了能将用户程序装入内存,必须为它分配一定大小的内存空间。连续分配存储管理方式是最早出现的一种存储器分配方式。 该分配方式为一个用户程序分配一个连续内存空间,即程序中代码或数据的逻辑地址相邻,体现在内存分配时物理地址的相邻。 连续分配方式可分为四类: 单一连续分配 固定分区分配 动态分区分配 动态可重定位分区分配 1. 单一连续分配 单道程序环境下,当时的存储器管理方式是把内存分为系统区和用户区两部分。 系统

qq_45186202的博客 1万+

内存分配内存管理的一些理解

内存分配内存管理的一些理解 http://www.cnblogs.com/hapjin/p/5689049.html   内存分配方式内存分配算法 内存分配方式有两种,连续内存分配方式和离散内存分配方式。不同的分配方式又有不同的分配算法。 内存分配算法,其实就是:有一大块空闲的资源,如何合理地分配资源?内存分配的思想可以用到很多其他的领域。比如Java虚拟机是如何将内存分配与回收的?...

TuxedoLinux的博客 387

内存管理连续-非连续内存分配方式

进程分配内存空间让其正常支行的三种方式: 1)连续内存分配(为一个进程分配一片连续内存空间) 2)非连续内存分配 3)虚拟内存管理 连续内存分配方案 进程独享用户空间内存区域,把所有的内存一次性分享给进程(程序)使用。这们系统只能执行单程,单用户的模式。 静态内存分配方案 动态内存分配方案 给配给一个进程的内存,且进程没有完全使用这片内存则会产生内部碎片。而由于内存空间太小导致无法正常分配给进程使用,内存剩余产生的叫外部碎片。不管内部或外部碎片都会产生内存的浪费。 关于动态内存分配管理算法这里不作记

清风不知妻美的博客 2703

操作系统--03内存管理

3.1.4 连续分配管理方式—实现内存空间的分配和回收,功能一 连续分配:指为用户进程分配的必须是一个连续内存空间 单一连续分配: 设计思想:内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用户存放操作系统的相关数据;用户区存放用户进程相关数据。内存中同一时刻只能有一道用户程序,用户程序独占整个用户区。 优点:实现简单,无外部碎片。可以采用覆盖技术扩充内存,不一定需要采取内存保护。 缺点:只支持单用户、单任务的操作系统。会产生内部碎片,内部碎片指的没有用上的内存空间。存储器利用率低。 固定分区分

weixin_45229936的博客 1749

最佳适配算法---内存分配

某基于动态分区存储管理的计算机,其主存容量为55MB(初始为空闲),采用最佳适配(Best Fit)算法,分配和释放的顺序为:分配15MB,分配30MB,释放15MB,分配8MB,分配6MB,此时主存中最大空闲分区的大小是(B)。 A、7MB B、9MB C、10MB D、15MB 最佳适配算法是指每次为作业分配内存空间时,总是找到能满足空间大小需要的最小的空闲分区给作业,可以产生最...

lindahan233的博客 1万+

操作系统内存分配算法

最佳适配,首次适配和最差适配算法,内存释放算法和空闲内存分配算法

zkzkzk40的博客 3292

操作系统知识点复习(试卷)

操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调配计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,是计算机系统中最基本的系统软件。

qq_52171945的博客 1097

内存动态分区分配算法

所谓动态分区分配,就是指内存在初始时不会划分区域,而是会在进程装入时,根据所要装入的进程大小动态地对内存空间进行划分,以提高内存空间利用率,降低碎片的大小

qq_46138755的博客 9110

【操作系统】知识梳理(四)存储器管理

4.1 存储器管理的基本概念 1.存储器的结构层次 现代计算机系统中常采用多层结构,使得存储器系统不仅具有能与处理机速度相匹配的、非常快的访问速度,而且还拥有非常大的容量以及便宜的价格。 一般的通用计算机至少将存储器分为CPU寄存器、主存和辅存三个层次,而在较高档的计算机中,还将存储器进一步细分 为寄存器、高速缓存、主存储器、固定磁盘、可移动存储介质等多个层次。 在多层结构的存储器系统中,层次越高(越靠近CPU),存储介质的访问速度越快,价格也越高,相对所配置的存储容量也越小。本章主要讨论主存储器(也

weixin_46601559的博客 2321
上一篇: 2.内存覆盖与内存交换
下一篇: C++对象的内存模型
chengonghao
博客等级 码龄12年 491粉丝 475原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值