第十一讲存储器管理之连续分配方式
- 格式:doc
- 大小:111.00 KB
- 文档页数:5
第十一讲存储器管理之连续分配方式连续分配是指将存储器中的空间按照一定的方式连续划分给进程使用的一种存储器管理方式。
常见的连续分配方式有三种:单一连续分配方式、固定分区分配方式和动态分区分配方式。
单一连续分配方式是最简单的分配方式,每个进程只有一个连续的存储区域。
操作系统将整个存储器分成两部分,一部分为操作系统占用,另一部分为用户程序占用。
优点是实现简单,缺点是无法有效利用存储器空间和不能同时运行多个程序。
2.固定分区分配方式固定分区分配方式是将存储器划分成若干个固定大小的区域,每个区域对应一个作业或进程。
每个进程的大小必须小于等于所分配的存储区域大小。
操作系统为每个进程分配存储空间时,优先从大小与所需存储空间最接近的空闲分区开始分配。
优点是管理简单,缺点是会导致存储空间的浪费和外部碎片的产生。
3.动态分区分配方式动态分区分配方式是将存储器分为多个大小不等的存储块,每个进程可以根据需要分配不同大小的存储块。
当新的进程需要存储空间时,操作系统从存储器的起始地址开始查找,找到第一个可用空闲块,并将其分配给进程。
优点是存储空间利用率高,可以同时运行多个进程,但缺点是会导致内部碎片的产生。
对于动态分区分配方式,还可以采用三种具体的分区算法:a. 首次适应算法(First Fit):从前向后遍历所有空闲分区,找到第一个大小大于或等于所需存储空间的空闲分区进行分配。
优点是速度快,但容易产生较多的碎片。
b. 循环首次适应算法(Next Fit):与首次适应算法类似,但从上一次分配的位置开始查找,减少了空闲分区的时间。
可以避免每次都从头开始,但仍会产生较多的碎片。
c. 最佳适应算法(Best Fit):从所有空闲分区中找到最小且大于所需存储空间的空闲分区进行分配。
优点是最大限度地避免碎片,但速度相对较慢。
综上所述,连续分配方式是一种常见的存储器管理方式。
根据应用场景和需求不同,可以选择合适的连续分配方式来管理存储器,以实现存储空间的高效利用和进程的有效管理。
内存管理之⼀段式与页式管理内存管理⽅法内存管理主要包括内存分配和回收、地址变换、内存扩充、内存共享和保护等功能。
下⾯主要介绍连续分配存储管理、覆盖与交换技术以及页式与段式存储管理等基本概念和原理。
1.连续分配存储管理⽅式连续分配是指为⼀个⽤户程序分配连续的内存空间。
连续分配有单⼀连续存储管理和分区式储管理两种⽅式。
(1)单⼀连续存储管理在这种管理⽅式中,内存被分为两个区域:系统区和⽤户区。
应⽤程序装⼊到⽤户区,可使⽤⽤户区全部空间。
其特点是,最简单,适⽤于单⽤户、单任务的操作系统。
CP/M 和 DOS 2.0以下就是采⽤此种⽅式。
这种⽅式的最⼤优点就是易于管理。
但也存在着⼀些问题和不⾜之处,例如对要求内存空间少的程序,造成内存浪费;程序全部装⼊,使得很少使⽤的程序部分也占⽤—定数量的内存。
(2)分区式存储管理为了⽀持多道程序系统和分时系统,⽀持多个程序并发执⾏,引⼊了分区式存储管理。
分区式存储管理是把内存分为⼀些⼤⼩相等或不等的分区,操作系统占⽤其中⼀个分区,其余的分区由应⽤程序使⽤,每个应⽤程序占⽤⼀个或⼏个分区。
分区式存储管理虽然可以⽀持并发,但难以进⾏内存分区的共享。
分区式存储管理引⼈了两个新的问题:内碎⽚和外碎⽚。
前者是占⽤分区内未被利⽤的空间,后者是占⽤分区之间难以利⽤的空闲分区(通常是⼩空闲分区)。
为实现分区式存储管理,操作系统应维护的数据结构为分区表或分区链表。
表中各表项⼀般包括每个分区的起始地址、⼤⼩及状态(是否已分配)。
分区式存储管理常采⽤的⼀项技术就是内存紧缩(compaction):将各个占⽤分区向内存⼀端移动,然后将各个空闲分区合并成为⼀个空闲分区。
这种技术在提供了某种程度上的灵活性的同时,也存在着⼀些弊端,例如:对占⽤分区进⾏内存数据搬移占⽤CPU~t⼨间;如果对占⽤分区中的程序进⾏“浮动”,则其重定位需要硬件⽀持。
1)固定分区(nxedpartitioning)。
固定式分区的特点是把内存划分为若⼲个固定⼤⼩的连续分区。
连续分配存储管理方式什么是连续分配存储管理方式连续分配存储管理方式指的是将内存空间划分为一系列连续的块,并按照一定的规则将这些块分配给进程使用。
这种存储管理方式广泛应用于操作系统中的进程管理和文件系统管理等领域。
连续分配存储管理的常见算法1. 首次适应算法(First Fit)首次适应算法是按照内存空间的地址顺序,从低地址到高地址依次查找可用的空闲块,并将进程分配到第一个满足大小要求的空闲块中。
该算法简单直接,但容易产生碎片。
2. 最佳适应算法(Best Fit)最佳适应算法是在所有可用的空闲块中选择最小且能满足进程大小要求的空闲块进行分配。
该算法能够充分利用内存空间,但是搜索过程较为复杂,效率较低。
3. 最坏适应算法(Worst Fit)最坏适应算法是在所有可用的空闲块中选择最大的空闲块进行分配,这样可以最大程度地保留大块空闲空间。
但是这种策略可能导致产生更多的碎片。
4. 快速适应算法(Next Fit)快速适应算法是首次适应算法的改进版本,在分配空闲块时,从上次分配的位置开始搜索。
这样可以避免每次都从头开始搜索,提高了搜索的效率。
连续分配存储管理的优点和缺点优点1.实现简单:连续分配存储管理算法相对而言比较简单,易于实现和理解。
2.内存利用率高:连续分配存储管理可以充分利用内存空间,减少空闲空间的浪费。
3.顺序访问性好:由于连续分配存储管理方式将内存空间划分为连续的块,所以对于顺序访问的进程来说,访问效率较高。
缺点1.碎片问题:连续分配存储管理容易产生内部碎片和外部碎片。
内部碎片是指分配给进程的内存块比进程所需的内存块大,造成内存空间浪费。
外部碎片是指内存空闲块的分布不连续,无法满足大块连续内存需求,导致内存的浪费。
2.分配效率低:由于需要搜索可用的空闲块,连续分配存储管理的分配效率相对较低。
3.控制粒度难以调整:连续分配存储管理方式中,分配块的大小通常是固定的,难以根据进程的需要进行灵活调整。
第十一讲存储器管理之连续分配方式所谓连续分配方式:是指为一个用户程序分配一个连续的内存空间。
又可把连续分配方式分为:单一连续分配,固定分区分配,动态分区分配,动态重定位分区分配,四种方式。
1 单一连续分配(单独分区分配)最简单的一种存储管理方式,但只能用于单用户、单任务的OS中。
概念:单一连续分配就是整个主存区域的用户空间均归一个用户作业使用。
存储管理方法:将内存分为系统区(内存低端,分配给OS用)和用户区(内存高端,分配给用户用)。
其中用户区是指除了系统区外的内存空间,提供给用户程序使用。
采用静态分配方式,即作业一旦进入内存,就要等待它运行结束后才能释放内存。
主要特点:管理简单,只需小量的软件和硬件支持,便于用户了解和使用。
但因内存中只装入一道作业运行,内存空间浪费大,各类资源的利用率也不高。
例子:一个容量为256KB的内存,操作系统占用32KB,剩下224KB全部分配给用户作业,如果一个作业仅需64KB,那么就有160KB的存储空间被浪费。
2 固定分区分配分区分配方式是满足多道程序设计需要的一种最简单的存储管理方法。
2.1 思想:将内存分成若干个分区(大小相等/不相等),除OS占一区外,其余的每一个分区容纳一个用户程序。
这样来实现多道并发。
2.2 分区划分方法:分区大小相等,分区大小不等。
但事先必须确定,在运行时不能改变。
即分区大小及边界在运行时不能改变。
2.3 内存分配:首先:要先建立一张分区说明表或使用表,以记录分区号、分区大小、分区的起始地址及状态(已分配或未分配)。
其次:当某个用户程序要装入内存时,由内存分配程序检索分区说明表,从表中找出一个满足要求的尚未分配的分区分配该程序,同时修改说明表中相应分区的状态;若找不到大小足够的分区,则拒绝为该程序分配内存。
第三:当程序执行完毕,释放占用的分区,管理程序将修改说明表中相应分区的状态为未分配,实现内存资源的回收。
2.4 特点主要特点:管理简单,但因作业的大小并不一定与某个分区大小相等,从而使一部分存储空间被浪费。
内存连续分配方式实验内存连续分配是操作系统中的重要概念之一、在计算机系统中,内存分配是指将进程所需的内存空间分配给其使用,同时也需要满足内存管理的要求。
内存连续分配方式是指将进程所需的内存空间连续地划分并分配给进程。
下面将介绍内存连续分配的几种方式及实验。
1.固定分区分配方式:固定分区分配方式是将整个内存空间分为若干个大小相等的分区,并为每个分区分配一个进程。
这种分配方式适用于进程数固定或进程大小相对稳定的场景。
固定分区分配方式的优点是简单易实现,缺点是可能会造成内存空间浪费,同时,当进程数或进程大小发生变化时,需要重新划分分区,性能较差。
2.动态分区分配方式:动态分区分配方式是根据进程的实际需要动态地分配内存空间。
动态分区分配方式将内存空间划分为若干个大小不等的分区,每个分区都可以独立地分配给进程使用。
当有新进程需要内存空间时,系统会根据分区空闲情况找到合适的分区进行分配。
动态分区分配方式的优点是充分利用内存空间,缺点是可能会出现内存碎片问题。
3.伙伴系统分配方式:伙伴系统分配方式是一种动态分区分配方式的改进版本。
它将内存空间划分为若干个大小相等的块,每个块大小都是2的幂。
当有新进程需要内存空间时,系统会找到与其大小最接近的空闲块进行分配。
如果找到的块大于所需大小,则将其划分为两个大小相等的块,其中一个分配给进程,另一个留作备用;如果找到的块小于所需大小,则会继续查找更大的空闲块进行分配。
伙伴系统分配方式的优点是减少了内存碎片问题,缺点是实现较为复杂。
实验设计:1.实验目的:通过实验,测试和比较不同的内存连续分配方式在不同场景下的性能和效果。
2.实验环境:使用一台具备内存管理功能的计算机,并在上面运行操作系统。
3.实验步骤:a.首先,选择一种内存连续分配方式,如固定分区分配方式。
b.根据选择的分配方式,设置相应的分区大小和数量。
c.运行一些需要内存空间的进程,并观察它们的分配情况。
d.记录每个进程所分配到的内存空间大小和位置,以及未分配的内存空间大小和位置。
第十一讲存储器管理之连续分配方式
所谓连续分配方式:是指为一个用户程序分配一个连续的内存空间。
又可把连续分配方式分为:单一连续分配,固定分区分配,动态分区分配,动态重定位分区分配,四种方式。
1 单一连续分配(单独分区分配)
最简单的一种存储管理方式,但只能用于单用户、单任务的OS中。
概念:单一连续分配就是整个主存区域的用户空间均归一个用户作业使用。
存储管理方法:将内存分为系统区(内存低端,分配给OS用)和用户区(内存高端,分配给用户用)。
其中用户区是指除了系统区外的内存空间,提供给用户程序使用。
采用静态分配方式,即作业一旦进入内存,就要等待它运行结束后才能释放内存。
主要特点:管理简单,只需小量的软件和硬件支持,便于用户了解和使用。
但因内存中只装入一道作业运行,内存空间浪费大,各类资源的利用率也不高。
例子:一个容量为256KB的内存,操作系统占用32KB,剩下224KB全部分配给用户作业,如果一个作业仅需64KB,那么就有160KB的存储空间被浪费。
2 固定分区分配
分区分配方式是满足多道程序设计需要的一种最简单的存储管理方法。
2.1 思想:将内存分成若干个分区(大小相等/不相等),除OS占一区外,其余的每一个分区容纳一个用户程序。
这样来实现多道并发。
2.2 分区划分方法:分区大小相等,分区大小不等。
但事先必须确定,在运行时不能改变。
即分区大小及边界在运行时不能改变。
2.3 内存分配:
首先:要先建立一张分区说明表或使用表,以记录分区号、分区大小、分区的起始地址及状态(已分配或未分配)。
其次:当某个用户程序要装入内存时,由内存分配程序检索分区说明表,从表中找出一个满足要求的尚未分配的分区分配该程序,同时修改说明表中相应分区的状态;若找不到大小足够的分区,则拒绝为该程序分配内存。
第三:当程序执行完毕,释放占用的分区,管理程序将修改说明表中相应分区的状态为未分配,实现内存资源的回收。
2.4 特点
主要特点:管理简单,但因作业的大小并不一定与某个分区大小相等,从而使一部分存储空间被浪费。
所以主存的利用率不高
3 动态分区分配
3.1 基本思想:根据进程的实际需要,动态的为其分配内存空间。
因此分区大小是动态可变的,分区的个数也是可变的。
3.2 主要特点
管理简单,只需小量的软件和硬件支持,便于用户了解和使用。
进程的大小与某个分区大小相等,从而主存的利用率有所提高。
3.3 分区分配的数据结构
为描述空闲分区合已分配的分区,引入如下数据结构。
3.3.1空闲分区表
用于记录每个空闲分区的情况。
每个空闲分区占一个表目,表目重含有分区序号,分区起始地址,分区大小等数据项。
如下图
3.3.2空闲分区链
用链头指针将系统中的空闲分区链接起来,构成空闲分区链。
每个空闲分区的起始部分存放相应的控制信息(如大小,指向下一空闲分区的指针等).
就是在分区头设置一个前向指针,分区尾部设置一个后向指针,这样把所有空闲分区连起来。
3.4分区分配算法
把一个新作业装入内存,须按照一定的分配算法,从空闲分区表或空闲分区链中选择一俄国分区分配给该作业。
有下面三种分配算法:
3.4.1首次适应算法
算法过程:
算法要求空闲分区(链)按地址递增的次序排列。
在进行内存分配时,从空闲分区表/链首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。
然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表(链)中。
算法的特点
优先利用内存低地址部分的空闲分区,从而保留了高地址部分的大空闲区。
但由于低地址部分不断被划分,致使低地址端留下许多难以利用的很小的空闲分区(碎片或零头),而每次查找又都是从低地址部分开始,这无疑增加了查找可用空闲分区的开销。
3.4.2循环首次适应算法
算法过程:
由首次适应算法发展而来,每次为进程分配内存空间时,不是从链首开始,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个满足要求的空闲分区。
该算法要设置一个起始查寻指针。
用于标识下一次起始查寻的空闲分区。
算法特点
使存储空间的利用更加均衡,不致使小的空闲区集中在存储区的一端,但这会导致缺乏大的空闲分区。
3.4.3最佳适应算法
算法过程:
算法要求空闲分区表/链按容量大小递增的次序排列。
在进行内存分配时,从空闲分区表/链的首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。
按这种方式为作业分配内存,就能把既满足作业要求又与作业大小最接近的空闲分区分配给作业。
如果该空闲分区大于作业的大小,则与首次适应算法相同,将剩余空闲分区仍留在空闲分区表/链中。
算法特点
若存在与作业大小一致的空闲分区,则它必然被选中,若不存在与作业大小一致的空闲分区,则只划分比作业稍大的空闲分区,,从而保留了大的空闲分区,但空闲区一般不可能正好和它申请的内存空间大小一样,因而将其分割成两部分时,往往使剩下的空闲区非常小,从
而在存储器中留下许多难以利用的小空闲区(碎片或零头)。
3.5分区分配操作
这里所谓的操作是:分配内存合回收内存。
3.5.1分配内存操作
实际上是分区的分割。
具体过程如下:
设请求的分区大小为u.size,空闲分区的大小为m.size,若m.size-u.size size(size 是事先规定的不再切割的剩余分区的大小),说明多余部分太小,可不再切割,将整个分区分配给请求者;否则,即多余部分超过size,从该分区中按请求的大小划分出一块内存空间分配出去,余下的部分仍留在空闲分区表/链中,然后,将分配区的首址返回给调用者。
分配流程图:
3.5.2回收内存操作
基本过程:当作业执行结束时,应回收已使用完毕的分区。
系统根据回收分区的大小及首地址,在空闲分区表中检查是否有邻接的空闲分区,如有,则合成为一个大的空闲分区,然后修改有关的分区状态信息。
回收分区与已有空闲分区的相邻情况有以下四种:
1)回收分区上邻接一个空闲分区,合并后首地址为空闲分区的首地址,大小为二者之和。
2)回收分区下邻接一个空闲分区,合并后首地址为回收分区的首地址,大小为二者之和。
3)回收分区上下邻接空闲分区,合并后首地址为上空闲分区的首地址,大小为三者之和。
4)回收分区不邻接空闲分区,这时在空闲分区表中新建一表项,并填写分区大小等信息,并根据其首地址插入到空闲链的适当位置。
如下图:
4 可重定位分区分配
4.1 动态重定位的引入
在连续分配方式中,我们必须把一个系统或用户程序装入一个连续的内存空间。
但是,如果在系统中只有一些小分区并且这些分区不相邻链接,即使它们的相加之后的空间大于要装入的程序,也不可能把程序装入这些内存中。
这些小分区就叫做“零头”或“碎片”。
处理思路“紧凑”:将内存中的所有作业移动到内存的另一端,使它们全部相邻。
这样,就可以把原来分散的多个小分区拼接成一个大分区,这时就可把作业装入了。
称为“紧凑”或“拼接”。
出现问题:紧凑后,明显可以看出内存中的数据和程度的存放位置发生了变化,如果不对程序和数据的地址加以更改,则程序不能运行,因此我们需要重定位。
也就是说在每次紧凑之后需要重定位。
4.2 动态重定位的实现
引入重定位寄存器,程序在执行时,真正访问的内存地址是相对地址和重定位寄存器中的地址相加后的地址。
见课本图p111
动态重定位:地址变换过程是在程序执行期间,随着对每条指令或数据的访问时才进行的。
因此称为动态重定位。
4.3 动态重定位分区分配算法
和动态分区分配算法基本相同,只是增加了紧凑功能。
算法流程如下:
5 对换了解
多道程序环境下,会出现某些进程未执行而占据内存空间,而大量的作业在外存而不能进入内存执行。
为了充分的利用内存空间,我们引入了覆盖和对换。
覆盖是早期的操作系统中运用,有兴趣的同学了解一下。
我们主要说一下对换。
对换:将暂时不用的某个进程及数据(首先是处于阻塞状态优先级最低的,根据系统的采用算法决定)部分(或全部)从内存移到到外存(备份区或对换区,采用连续分配的动态存储管理方式)中去,让出内存空间,同时将某个需要的进程调入到内存中,让其运行。
交换到外存的进程需要时可以被再次交换回(选择换出时间最久的,也是根据系统采用的算法决定)内存中继续执行。
这种内存扩充技术就是交换技术。
6 覆盖
6.1 引入:
其目标是在较小的可用内存中运行较大的程序。
常用于多道程序系统,与分区存储管理配合使用。
6.2 原理:
一个程序的几个代码段或数据段,按照时间先后来占用公共的内存空间。
–将程序的必要部分(常用功能)的代码和数据常驻内存;
–可选部分(不常用功能)在其他程序模块中实现,平时存放在外存中(覆盖文件),在需要用到时才装入到内存;
–不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖。
(即不同时用的模块可共用一个分区)
覆盖示例如下:。