精华内容
下载资源
问答
  • 分区存储管理

    千次阅读 2019-08-20 14:26:42
    分区存储管理是一种很早期的内存管理方案,其基本思想是将内存区域划分为多个区,给每个作业分配一个区使用,并且每个作业只能在被分配的区中运行。 按照划分方式不同,主要有三种不同的分区方式:固定分区,可变...

    分区存储管理是一种很早期的内存管理方案,其基本思想是将内存区域划分为多个区,给每个作业分配一个区使用,并且每个作业只能在被分配的区中运行。
    按照划分方式不同,主要有三种不同的分区方式:固定分区,可变分区,重定位分区

    固定分区

    固定分区是指当程序载入时,系统为程序选择一个大小最接近作业大小的分区。
    在这里插入图片描述
    如上图所示,新作业大小与分区3接近,故而新作业将被加载到分区3中。
    由于每个作业大小不一定能恰好等于分区大小,故而会产生大量的内碎片,造成内存空间浪费。

    可变分区

    可变分区是指在作业加载时由操作系统根据作业实际大小来分配分区(作业大小等于分区大小)。这种方式能解决固定分区内存浪费的问题。这种方式需要系统记录两张表:已分配分区表和未分配分区表。
    分区选择算法主要分为以下四类:

    最佳适应算法

    这种方式的核心是,假设内存中由n个空白分区。当作业载入时,系统从n个空白分区中找出最接近作业大小的分区。但是由于空白区的大小不可能刚好等于作业大小,故而空白区会被分为两个分区,一个恰好等于作业大小,一个为剩余大小。当空白分区被拆分得不能再分时,剩下的空白空间被称作外碎片。
    在这里插入图片描述

    最差适应算法

    这种方式的核心是,总是将作业加载到最大的空白区,空白区被拆分后的剩余空白区依然很大,这样子就尽可能减少了外碎片。

    首次适应算法

    系统每次加载作业时,都从内存中最低地址开始查找一个能够加载作业的分区。

    循环首次适应算法

    系统每次加载作业时,都从上一次分配的分区开始查找一个能够加载作业的分区。

    重定位分区

    无论是固定分区还是可变分区都不可避免会产生碎片,使用重定位分区的方式可以完全消除这个问题。重定位分区的思想是将已经分配的分区进行移动。当系统不能找到一块足够大的分区加载作业时,移动所有的已经分配的分区,使之“挨”在一起。这样子就会使所有空白分区和外碎片连接在一起,合并起来的空间或许足够再加载作业

    展开全文
  • 2013 --2014 学年 第 3 学期 实验项目 名称 分区存储管理算法模拟 实验 日期 2014/12/2 5 实验 成绩 实验类型 验证型 实 验 目 的 与 要 求 一个好的计算机系统不仅要有一个足够容量的存取速度高的 稳定可靠的主...
  • 可变分区存储管理:1、可变分区:为了解决固定分区因作业装入前,分区的数量和大小确定而造成的内部碎片问题,所以引入了可变分区存储管理。目的就是根据作业对存储空间实际的需求量来划分存储分区。也就是每一个...

    可变分区存储管理:

    1、可变分区:

    为了解决固定分区因作业装入前,分区的数量和大小确定而造成的内部碎片问题,所以引入了可变分区存储管理。目的就是根据作业对存储空间实际的需求量来划分存储分区。也就是每一个分区与进入该分区的作业大小相同,这样能够有效的解决固定分区引起的内部碎片问题。这是比较实用的存储管理方法,因为在系统运行时,无法确定分区的的数目与大小,所以这种可变式分区也称动态分区。

    2、问题引入:

    0487e39d8b834c0db4ed43246c47c3f1.png

    虽然可变分区能够解决内部碎片,但是却引入了外部碎片的问题。就是对于已经分配了并回收的空间,造成内存空间上的不连续。因此该如何选择内存空间来进行分配给下一个作业?

    3、解决措施:

    解决措施

    说明

    图例

    空闲分区的组织形式

    在可变式分区存储管理中,常把空闲区组成空闲分区表空闲分区链表的形式。

    1、空闲分区表

    空闲分区表的组织类似固定分区的分区说明表,包含空闲分区的起始地址和大小。

    因为可变分区数量不确定,造成空闲分区表的长度不定。所以采用空闲分区表占用一定数量的存储单元存放表,增加了系统的开销。

    因此常使用空闲分区的链表组织形式。

    2、空闲分区链表

    空闲分区链表的组织形式:在每个空闲分区的起始部分开辟一个单元,存放一个链表指针和该分区的大小。

    链表指针指向下一个空闲分区。而且系统中用一个固定单元作为空闲分区链表的链表头指针,指向第一块空闲分区的首地址,最后一块空闲分区的链表指针存放链尾标志。

    因为空闲分区链表组织时,空闲区的信息存放在空闲区内,因此不会额外增加系统的开销。

    fb130de4817a027b77b4315b63b3e1ec.png

    内存的分配与回收

    1、分配:

    在可变分区管理中,当一个作业需要X大小的存储空间时,系统从链表表头指针开始检索空闲区,直到找到第一个大于等于X的空闲区。

    1.1、如果 All(空) <  X,则无法分配;

    1.2、如果 空闲区 = X, 则修改链表指针,取消该空闲区,并返回用户该空闲区首地址

    1.3、如果 空闲区 > X, 则将空闲区一分为二,一个为X分给用户,另一个作为余下部分仍然留在空闲区链表中,并修改相应链表指针所指向的的地址和空闲区大小。

    2、回收:

    检查回收区与内存中前后空闲区是否相邻,

    2.1、如果相邻,则进行合并,并对相应链表指针进行修改;

    2.2、不相邻,则应将空闲区插入到空闲区链表的适当位置。

    4、分配算法(分区适应算法):

    在可变分区管理中,对空闲区链表采用不同的组织形式,就对不同的分配和回收算法。

    分区适应算法

    说明

    图例解释

    图例

    首次适应算法(First Fit)

    过程:

    把空闲分区按其在存储空间中地址递增的顺序链接在一起。

    当用户申请一块内存空间时,从空闲分区链表的表头指针开始查找,选择第一个满足要求的空闲分区。

    如果这块满足要求的分区大小不等于作业大小,则将其分成两部分,一部分给作业,另一部分仍留在空闲区链表中。

    优点:

    分配和回收算法比较简单,查找速度快。由于这个算法总是从低地址开始查找,因此留在高地址部分的大空闲区被划分机会少,所以在大作业到来时容易满足。

    如右图:

    1、当系统分配:

    (a)中,空闲区就是按首次适应算法组织的,链接顺序依次是空闲分区1、2和3.。

    作业五需要36k空闲区,那么将从空闲区链表组织形式中的第一个空闲区进行遍历(空闲区1),起始地址40k,然后检测到空闲区1大小满足作业5的大小要求。

    此时就将分区1一分为二,一部分(36k)分配给作业,另一部分则仍留在空闲区链表中。并调整链表头指针指向的起始地址为76k

    2、当系统回收分区时:

    首先检查当前分区是否有前后相邻的空闲区,有则进行合并,且修改相应链表指针指向地址和分区大小。

    例如:作业2完成后,需要释放。此时链表头指针仍然指向40k位置,但是因为分区1、2、3需要合并,所以此时空闲区1的链表指针指向的是空闲区5的起始位置(196kb),并且修改分区的大小为116kb。

    如果回收的分区不和其他空闲区相邻,则根据起始地址大小把他插入到链表的相应位置。

    fb130de4817a027b77b4315b63b3e1ec.png

    最佳适应算法(Best Fit)

    过程:

    此种算法将空闲分区链表按分区大小从小到大进行组织。当有作业申请内存时,首先找到满足要求的最接近作业大小的空闲分区。

    因为作业所需大小和分区的大小相近,从而避免存储管理系统将较大的分区分成两部分。

    缺点:

    因为作业大小不可能与空闲分区大小相同,所以在分配时总是会产生极小的空闲分区,一段时间后内存中可能就会出现很多这样的小分区。

    因为大小而无法分配给其他作业使用,并且由于小分区的数量极多,降低链表查询空闲分区的速度。这些无法使用的小分区称之为外部碎片

    解决措施:

    设置一个参数G,用来判断空闲分区是以一分为二的形式分配给作业,还是全部分配给作业。

    在分配作业内存之后,剩余的空闲区大小 < G时,就把整个分区分配给该作业,不再划分,反之则将空闲分区一分为二并分配。

    例如右图:

    根据该算法的组织形式,形成的链表顺序就是 分区2 -> 分区 1 -> 分区3,按照分区的大小进行组织,并且链表头指针指向分区2的起始位置。

    当作业5(36kb)需要空闲区时,遍历空闲分区链表,找到了第一个满足作业5大小要求的分区2(38kb)。然后分配给作业5,剩余的2kb空闲区仍留在空闲区链表中。

    119e5687d504cdab1ea1ea44888e6eab.png

    最差适应算法(Worst Fit)

    过程:

    这种算法是把空闲区从大到小递减的顺序组织成空闲区链表。

    当有一个作业需要空闲分区,则检查空闲区链表中第一个空闲分区是否满足作业要求的大小。如果不满足则无法分配;若满足,则将该空闲区分配给用户,然后修改和调整空闲区链表的指针和空闲区大小。

    优点:

    查询简单

    缺点:

    因为每一次都是从最大空闲区进行分配,那么容易导致当有大作业进入时而无法得到足够大小的分区

    空闲区链表的组织形式:按照空闲分区从大到小链接;当有作业5(36kb)需要空闲区,则遍历空闲区链表;检索到空闲分区3大小满足作业5。

    因此分配空闲区给作业5,并且重新组织空闲区链表。因为最大的空闲区已经是分区1了。

    c460a66286d73265bef2c82d18c28fad.png
    三种分配算法的比较:其实没什么好比较,这三种算法在不同场景下都能够出色的完成分配,高效利用空闲分区。例如,有4块空闲区可以分配:

    ed5d0ef232229506c39a3692c039f8a7.png

    假设:作业A(15KB)、作业B(16KB)、作业C(15KB)依次装入内存运行,按照三种分配算法,有不同的分配结果

    作业装入顺序

    首次适应算法

    最佳适应算法

    最差适应算法

    A、B、C

    作业C无法分配

    作业C无法分配

    全部满足

    B、A、C

    全部满足

    全部满足

    作业C无法分配

    假设:作业A(15KB)、作业B(16KB)、作业C(15KB)依次装入内存运行,按照三种分配算法,有不同的分配结果

    作业装入顺序

    首次适应算法

    最佳适应算法

    最差适应算法

    A、B、C

    作业C无法分配

    作业C无法分配

    全部满足

    B、A、C

    全部满足

    全部满足

    作业C无法分配

    5、可变分区存储管理的地址重定位:

    重定位方式

    说明

    图例

    静态重定位

    因为用户作业进入内存后,程序的逻辑地址实现了重定位,所以不能在内存中再次进行移动。

    经过一段时间的运行,内存中外部碎片越来越多,导致出现一种情况:就是所有碎片大小总和大于或等于作业大小,但是却无法将作业装入内存中。

    动态重定位

    为了解决因为外部碎片导致的问题,所以采用动态重定位技术,使得程序能够在内存中移动。并采用紧凑技术:将小碎片全部集中起来形成一个大分区。(类似JVM的标记整理)

    也就是移动用户分区中的程序,使得用户程序都集中在一端,使碎片都集中于另一方,这样就可以保证所有碎片都是连续并且形成连成一个较大的分区。

    同时解决内部和外部碎片的问题。

    可变式分区的存储保护采用的是:基址-限长存储保护方式.可参考:存储管理的基本功能

    b0ac6fa9350237c59584b27084aa0174.png
    展开全文
  • 存储管理-分区存储管理 分区管理把内存划分成若干个大小不等的区域,除操作系统占用一个区域之外,其余由多道环境下的各并发进程共享。分区管理是满足多道程序设计的一种最简单的存储管理方法。 固定分区法 固定分区...

    存储管理-分区存储管理

    分区管理把内存划分成若干个大小不等的区域,除操作系统占用一个区域之外,其余由多道环境下的各并发进程共享。分区管理是满足多道程序设计的一种最简单的存储管理方法。

    固定分区法

    固定分区法把内存区固定地划分为若干个大小不等的区域

    划分原则

    分区划分的原则由系统操作员或操作系统决定。例如可划分为长作业分区和短作业分区

    特点

    分区一旦划分结束,在整个执行过程中每个分区的长度和内存的总分区个数保持不变

    管理和控制

    使用数据结构:分区说明表

    分区说明表包括:分区说明表说明各分区号、分区大小、起始地址和是否是空闲区(分区状态)

    分区说明表功能:内存的分配释放、存储保护以及地址变换等都通过分区说明表进行。

    例子:下图中,操作系统占用低地址部分的20K,其余空间被划分为4个分区,其中1,2,3号分区已分配,4号分区未分配。
    1734701-20191121092748982-1252964356.png

    分区的分配和回收

    1.当用户程序要装入执行时,通过请求表提出内存分配要求和所要求的内存空间大小
    2.存储管理程序根据请求表查询分区说明表,从中找出一个满足要求的空闲分区,并将其分配给申请者
    3.当进程执行完毕,不再需要内存资源时,管理程序将对应的分区状态置为“未分配” 即可。

    1734701-20191121094326111-429162175.png

    动态分区法

    与固定分区法相比,动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的,且其大小可随作业或进程对内存的要求而改变

    相比固定分区法的改进

    改变了固定分区法中那种即使是小作业也要占据大分区的浪费现象,从而提高了内存的利用率。

    特点

    采用动态分区法,在系统初启时,除了操作系统中常驻内存部分之外,只有一个空闲分区,随后,分配程序将该区依次划分给调度选中的作业或进程。
    FIFO调度方式时的内存初始分配情况:

    1734701-20191121093007644-350899572.png

    内存的分配和释放

    随着进程的执行,会出现一系列的内存分配和内存释放。

    分配:某一时刻,进程C执行结束并释放内存之后,管理程序为另两个进程E(需内存50K)和F(需内存16K)分配内存。

    释放:如果内存被释放,那么该块内存变为空闲区

    空闲区合并:如果被回收分区有邻接的空闲分区,则进行合并。

    1734701-20191121093345326-579125164.png

    与内存管理相关的数据结构

    1.分区说明表

    2.自由链:动态分区法还把内存中的可用分区单独构成可用分区表或可用分区自由链,以描述系统的内存资源.
    自由链利用每个内存空闲区的头几个单元存放本空闲区的大小及下个空闲区的起始地址,所有的空闲区链接起来。
    系统设置自由链首指针让其指向第一个空闲区,由此管理程序可通过链首指针查到所有的空闲区。
    特点:采用自由链法管理空闲区,查找比可用表困难,但自由链指针利用闲区自身的单元不占用额外的内存区
    1734701-20191121093508141-427569344.png

    3.请求表:请求内存资源的作业或进程也构成一个内存资源请求表。请求表的每个表目描述请求内存资源的作业或进程号以及所请求的内存大小。
    1734701-20191121093616729-563572922.png

    4.可用表:可用表的每个表目记录一个空闲区,主要参数包括区号、长度和起始地址。采用表格结构,管理过程比较简单,但表的大小难以确定,可用表要占用一部分内存。
    1734701-20191121093737787-571107612.png

    动态分区时的分配与回收

    1.根据请求表中要求的内存长度,从可用表或自由链中找出合适的空闲区分配给进程。
    2.分配空闲区之后,更新可用表或自由链。
    3.进程或作业释放内存资源时,新的空闲区和已有的相邻空闲区进行链接合并,更新可用表或自由链

    最先适应法

    1.要求可用表或自由链按起始地址递增的次序排列。
    2.一旦找到大于或等于所要求内存长度的分区,结束搜索。
    3.然后,从找到的分区中划出所要求的内存长度分配给用户,并把余下的部分进行合并(如果有相邻空闲区存在)后留在可用表中,同时修改相应的表项。

    特点:

    • 搜索速度最佳
    • 回收算法最佳

    最佳适用法

    1.要求按从小到大的次序组成空闲区可用表或自由链。
    2.当用户作业或进程申请一个空闲区时,存储管理程序从表头开始查找,当找到第一个满足要求的空闲区时,停止查找。
    3.如果该空闲区大于请求表中的请求长度,则与最先适应法时相同,将减去请求长度后的剩余空闲区部分留在可用表中。

    特点:

    • 找到空间最佳

    最坏适用法

    1.要求空闲区按其大小递减的顺序组成空闲区可用表或自由链。
    2.当用户作业或进程申请一个空闲区时,先检查空闲区可用表或自由链的第一个空闲可用区的大小是否大于或等于所要求的内存长度。
    3.若可用表或自由链的第一个项长度小于所要求的,则分配失败,否则从空闲区可用表或自由链中分配相应的存储空间给用户,然后修改和调整空闲区可用表或自由链。

    特点:

    • 不留下碎片空闲区这一出发点

    动态分区时的回收与拼接

    回收:当用户作业或进程执行结束时,存储管理程序收回已使用完毕的空闲区,并将其插入空闲区可用表或自由链。
    拼接:将回收的空闲区插入可用表或自由链时,和分配空闲区时样,也要碰到剩余空闲区拼接问题,即把不连续的零散空闲区集中起来。

    回收拼接的四种情况

    1734701-20191121095903873-755978264.png

    将一个新可用区插入可用表或队列时,该空闲区和上下相邻区的关系是下述4种关系之一:该空闲区的上下两相邻分区都是空闲区;该空闲区的上相邻区是空闲区;该空闲区的下相邻区是空闲区;两相邻区都不是空闲区。

    四种回收策略

    1.如果释放区与上下两空闲区相邻,则将三个空闲区合并为一个空闲区。新空闲区的起始地址为上空闲区的起始地址,大小为三个空闲区之和。空闲区合并后,取消可用表或自由链中下空闲区的表目项或链指针,修改上空闲区的对应项。

    2.如果释放区只与上空闲区相邻,则将释放区与上空闲区合并为一个空闲区,其起始地址为上空闲区的起始地址,大小为上空闲区与释放区之和。合并后,修改上空闲区对应的可用表的表目项或自由链指针。

    3.如果释放区与下空闲区相邻,则将释放区与下空闲区合并,并将释放区的起始地址作为合并区的起始地址。合并区的长度为释放区与下空闲区之和。同理,合并后修改可用表或自由链中相应的表目项或链指针。

    4.如果释放区不与任何空闲区相邻,则释放区作为一个新可用区插入可用表或自由链。

    有关分区管理其他问题的讨论

    虚拟存储器实现

    1.利用分区式管理,允许每个用户拥有可以自由编程的虚拟空间。
    2.但分区式管理方式无法实现用户进程所需内存容量只受内存和外存容量之和限制的虚拟存储器。
    3.如果不采用内存扩充技术,每个用户进程的内存容量受到分区大小限制。
    4.分区式管理通常使用覆盖或交换技术扩充内存。

    关于地址变换和内存保护

    1.静态地址重定位方法不可用于动态分区时的地址变换
    2.动态地址重定位时,每个分区需要一对硬件寄存器的支持,即基址寄存器和限长寄存器,分别用来存放作业或进程在内存分区的起始地址和长度。
    3.基址寄存器和限长寄存器除了完成动态地址重定位的功能之外,还具有保护内存中数据和程序的功能
    4.保护键法也可以用来提供内存分区

    分区存储管理的主要优缺点

    优点:
    1.实现了多个作业或进程对内存的共享,有助于多道程序设计,从而提高系统的资源利用率
    2.该方法要求的硬件支持少,管理算法简单,因而实现容易

    缺点:
    1.内存利用率仍然不高
    2.存在严重的碎小空闲区(碎片)不能利用的问题,这更进一步影响了内存的利用率
    3.作业或进程的大小受分区大小控制,除非配合采用覆盖和交换技术。
    4.无法实现各分区间的信息共享。

    展开全文
  • 可变分区存储管理:1、可变分区:为了解决固定分区因作业装入前,分区的数量和大小确定而造成的内部碎片问题,所以引入了可变分区存储管理。目的就是根据作业对存储空间实际的需求量来划分存储分区。也就是每一个...

    可变分区存储管理:

    1、可变分区:

    为了解决固定分区因作业装入前,分区的数量和大小确定而造成的内部碎片问题,所以引入了可变分区存储管理。目的就是根据作业对存储空间实际的需求量来划分存储分区。也就是每一个分区与进入该分区的作业大小相同,这样能够有效的解决固定分区引起的内部碎片问题。这是比较实用的存储管理方法,因为在系统运行时,无法确定分区的的数目与大小,所以这种可变式分区也称动态分区。

    2、问题引入:

    17a10709559e9f923a4ec287bb4a80fb.png

    虽然可变分区能够解决内部碎片,但是却引入了外部碎片的问题。就是对于已经分配了并回收的空间,造成内存空间上的不连续。因此该如何选择内存空间来进行分配给下一个作业?

    3、解决措施:

    解决措施

    说明

    图例

    空闲分区的组织形式

    在可变式分区存储管理中,常把空闲区组成空闲分区表空闲分区链表的形式。

    1、空闲分区表

    空闲分区表的组织类似固定分区的分区说明表,包含空闲分区的起始地址和大小。

    因为可变分区数量不确定,造成空闲分区表的长度不定。所以采用空闲分区表占用一定数量的存储单元存放表,增加了系统的开销。

    因此常使用空闲分区的链表组织形式。

    2、空闲分区链表

    空闲分区链表的组织形式:在每个空闲分区的起始部分开辟一个单元,存放一个链表指针和该分区的大小。

    链表指针指向下一个空闲分区。而且系统中用一个固定单元作为空闲分区链表的链表头指针,指向第一块空闲分区的首地址,最后一块空闲分区的链表指针存放链尾标志。

    因为空闲分区链表组织时,空闲区的信息存放在空闲区内,因此不会额外增加系统的开销。

    b435ba920ae449a7aba7e8ef32e7d881.png

    内存的分配与回收

    1、分配:

    在可变分区管理中,当一个作业需要X大小的存储空间时,系统从链表表头指针开始检索空闲区,直到找到第一个大于等于X的空闲区。

    1.1、如果 All(空) <  X,则无法分配;

    1.2、如果 空闲区 = X, 则修改链表指针,取消该空闲区,并返回用户该空闲区首地址

    1.3、如果 空闲区 > X, 则将空闲区一分为二,一个为X分给用户,另一个作为余下部分仍然留在空闲区链表中,并修改相应链表指针所指向的的地址和空闲区大小。

    2、回收:

    检查回收区与内存中前后空闲区是否相邻,

    2.1、如果相邻,则进行合并,并对相应链表指针进行修改;

    2.2、不相邻,则应将空闲区插入到空闲区链表的适当位置。

    4、分配算法(分区适应算法):

    在可变分区管理中,对空闲区链表采用不同的组织形式,就对不同的分配和回收算法。

    分区适应算法

    说明

    图例解释

    图例

    首次适应算法(First Fit)

    过程:

    把空闲分区按其在存储空间中地址递增的顺序链接在一起。

    当用户申请一块内存空间时,从空闲分区链表的表头指针开始查找,选择第一个满足要求的空闲分区。

    如果这块满足要求的分区大小不等于作业大小,则将其分成两部分,一部分给作业,另一部分仍留在空闲区链表中。

    优点:

    分配和回收算法比较简单,查找速度快。由于这个算法总是从低地址开始查找,因此留在高地址部分的大空闲区被划分机会少,所以在大作业到来时容易满足。

    如右图:

    1、当系统分配:

    (a)中,空闲区就是按首次适应算法组织的,链接顺序依次是空闲分区1、2和3.。

    作业五需要36k空闲区,那么将从空闲区链表组织形式中的第一个空闲区进行遍历(空闲区1),起始地址40k,然后检测到空闲区1大小满足作业5的大小要求。

    此时就将分区1一分为二,一部分(36k)分配给作业,另一部分则仍留在空闲区链表中。并调整链表头指针指向的起始地址为76k

    2、当系统回收分区时:

    首先检查当前分区是否有前后相邻的空闲区,有则进行合并,且修改相应链表指针指向地址和分区大小。

    例如:作业2完成后,需要释放。此时链表头指针仍然指向40k位置,但是因为分区1、2、3需要合并,所以此时空闲区1的链表指针指向的是空闲区5的起始位置(196kb),并且修改分区的大小为116kb。

    如果回收的分区不和其他空闲区相邻,则根据起始地址大小把他插入到链表的相应位置。

    b435ba920ae449a7aba7e8ef32e7d881.png

    最佳适应算法(Best Fit)

    过程:

    此种算法将空闲分区链表按分区大小从小到大进行组织。当有作业申请内存时,首先找到满足要求的最接近作业大小的空闲分区。

    因为作业所需大小和分区的大小相近,从而避免存储管理系统将较大的分区分成两部分。

    缺点:

    因为作业大小不可能与空闲分区大小相同,所以在分配时总是会产生极小的空闲分区,一段时间后内存中可能就会出现很多这样的小分区。

    因为大小而无法分配给其他作业使用,并且由于小分区的数量极多,降低链表查询空闲分区的速度。这些无法使用的小分区称之为外部碎片

    解决措施:

    设置一个参数G,用来判断空闲分区是以一分为二的形式分配给作业,还是全部分配给作业。

    在分配作业内存之后,剩余的空闲区大小 < G时,就把整个分区分配给该作业,不再划分,反之则将空闲分区一分为二并分配。

    例如右图:

    根据该算法的组织形式,形成的链表顺序就是 分区2 -> 分区 1 -> 分区3,按照分区的大小进行组织,并且链表头指针指向分区2的起始位置。

    当作业5(36kb)需要空闲区时,遍历空闲分区链表,找到了第一个满足作业5大小要求的分区2(38kb)。然后分配给作业5,剩余的2kb空闲区仍留在空闲区链表中。

    57d1793e26009c41ecac291bf863f9e8.png

    最差适应算法(Worst Fit)

    过程:

    这种算法是把空闲区从大到小递减的顺序组织成空闲区链表。

    当有一个作业需要空闲分区,则检查空闲区链表中第一个空闲分区是否满足作业要求的大小。如果不满足则无法分配;若满足,则将该空闲区分配给用户,然后修改和调整空闲区链表的指针和空闲区大小。

    优点:

    查询简单

    缺点:

    因为每一次都是从最大空闲区进行分配,那么容易导致当有大作业进入时而无法得到足够大小的分区

    空闲区链表的组织形式:按照空闲分区从大到小链接;当有作业5(36kb)需要空闲区,则遍历空闲区链表;检索到空闲分区3大小满足作业5。

    因此分配空闲区给作业5,并且重新组织空闲区链表。因为最大的空闲区已经是分区1了。

    64f651247c338d02ce68a57abfc0c79e.png
    三种分配算法的比较:其实没什么好比较,这三种算法在不同场景下都能够出色的完成分配,高效利用空闲分区。例如,有4块空闲区可以分配:

    341d676908f948eaf0e81c0241d4efec.png

    假设:作业A(15KB)、作业B(16KB)、作业C(15KB)依次装入内存运行,按照三种分配算法,有不同的分配结果

    作业装入顺序

    首次适应算法

    最佳适应算法

    最差适应算法

    A、B、C

    作业C无法分配

    作业C无法分配

    全部满足

    B、A、C

    全部满足

    全部满足

    作业C无法分配

    假设:作业A(15KB)、作业B(16KB)、作业C(15KB)依次装入内存运行,按照三种分配算法,有不同的分配结果

    作业装入顺序

    首次适应算法

    最佳适应算法

    最差适应算法

    A、B、C

    作业C无法分配

    作业C无法分配

    全部满足

    B、A、C

    全部满足

    全部满足

    作业C无法分配

    5、可变分区存储管理的地址重定位:

    重定位方式

    说明

    图例

    静态重定位

    因为用户作业进入内存后,程序的逻辑地址实现了重定位,所以不能在内存中再次进行移动。

    经过一段时间的运行,内存中外部碎片越来越多,导致出现一种情况:就是所有碎片大小总和大于或等于作业大小,但是却无法将作业装入内存中。

    动态重定位

    为了解决因为外部碎片导致的问题,所以采用动态重定位技术,使得程序能够在内存中移动。并采用紧凑技术:将小碎片全部集中起来形成一个大分区。(类似JVM的标记整理)

    也就是移动用户分区中的程序,使得用户程序都集中在一端,使碎片都集中于另一方,这样就可以保证所有碎片都是连续并且形成连成一个较大的分区。

    同时解决内部和外部碎片的问题。

    可变式分区的存储保护采用的是:基址-限长存储保护方式.可参考:存储管理的基本功能

    c69f312f806af5e3449cedb7b188f7c3.png
    展开全文
  • 动态分区存储管理

    2015-11-09 12:34:07
    动态分区存储管理
  • 分区存储管理的实验报告实验题目:可变分区存储管理 一、实验目的 可变分区存储管理方式是操作系统中存储管理的重要方式,其主要思想是用户作业进行连续存储,每次按照用户的请求,如果内存中有能满足用户作业大小...
  • 目录单道程序的内存管理多道程序的内存管理后面详细讨论固定式分区分配和可变式分区分配,它们都是分区存储管理。固定式分区分配把内存划分为若干个固定大小的连续分区,每个分区装入一个作业,分区可以同等大小,也...
  • 操作系统存储管理之分区存储管理

    千次阅读 2019-04-13 14:17:06
    一、单连续分区存储管理 【单连续分区存储管理】 每个进程占用一个物理上完全连续的存储空间(区域),可分为三种: #单用户连续分区存储管理 #固定分区存储管理 #可变分区存储管理 【单用户连续分区存储管理】 ...
  • 实验三 固定分区存储管理 一实验目的 通过编写固定分区存储管理的模拟程序 加深对操作系统存储管 理功能中的固定分区管理方式主存分配表等相应知识的理解 二实验内容 1实现固定分区存储管理方式下存储空间的分配和...
  • 后面详细讨论固定式分区分配和可变式分区分配,它们都是分区存储管理。 固定式分区分配 把内存划分为若干个固定大小的连续分区,每个分区装入一个作业,分区可以同等大小,也可以差异不等。面对分区大小的差异,...
  • 操作系统中动态分区存储管理方式的模拟的详细讲解。包括思想,代码的具体实现等。
  • 连续分区存储管理

    2012-02-13 09:19:48
    操作系统中的一个实验,连续分区存储管理,运行于Linux系统,报告内容很详细
  • 可变分区存储管理

    2014-06-12 10:48:53
    用于操作系统课程设计,在C语言的开发环境下处理可变分区存储管理
  • 可变分区存储管理模拟
  • 存储管理-可变分区存储管理的空间分配与去配 来自当代大学生两天的成果 请多指教 实验目的 要求掌握存储管理中的典型算法,理解各种存储管理的工作原理,特别是可变分区存储管理中最先适应分配算法、最优适应分配...
  • 实验三可变分区存储管理方式的内存分配回收一.实验目的(1)深入了解可变分区存储管理方式的内存分配回收的实现。二.实验内容编写程序完成可变分区存储管理方式的内存分配回收,要求有内存空间分配表,并采用最优...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,145
精华内容 2,858
关键字:

分区存储管理