第8章动态存储结构
8.1在伙伴系统中的伙伴是指任意两块大小相同、位置相邻的内存块。
这种说法对吗?
【解答】不对。只有同一内存块分裂的两块才互称伙伴。
8.2最佳适配法与最先适配法相比,前者容易增加闲置空间的碎片。这种说法对吗?
【解答】对。
8.3设内存中可利用空间已连成一个单链表,对用户的存储空间需求,一般有哪三种分配策略?
【解答】
首次拟合法;从链表头指针开始查找,找到第一个大于等于所需空间的结点即分配。
最佳拟合法:链表结点大小增序排列,找到第一个大于等于所需空间的结点即分配。
最差拟合法:链表结点大小逆序排列,总从第一个结点开始分配,将分配后结点所剩空间插入到链表适当位置。
首次拟合法适合事先不知道请求分配和释放信息的情况,分配时需查询,释放时插在表头。 最佳拟合法适用于请求分配内存大小范围较宽的系统,释放时容易产生存储量很小难以利用的内存碎片,同时保留那些很大的内存块以备将来可能发生的大内存量的需求,分配与回收均需查询。 最差拟合法适合请求分配内存大小范围较窄的系统,分配时不查询,回收时查询,以便插入适当位置。
8.4计算起始二进制地址为011011110000,长度为4(十进制)的块的伙伴地址是多少?
【解答】011011110100
8.5地址为(1664)10大小为(128)10的存储块的伙伴地址是什么?
地址为(2816)10大小为(64)10的存储块的伙伴地址是什么?
【解答】
(1)buddy(1664,7)=1664-128=1536
(2)buddy(2816,6)=2816+64=2880
8.6 试叙述动态存储分配伙伴系统的基本思想,它和边界标识法不同点是什么?
【解答】动态存储分配伙伴系统的基本思想是:在伙伴系统中,无论占用块或空闲块,其大小均为2的k(k为≥0的正整数)次幂。若内存容量为2m,则空闲块大小只能是20,21,22,…,2m。由同一大块分裂而得的两个小块互称“伙伴空间”,如内存大小为210的块分裂成两个大小为29的块。只有两个“伙伴空间”才能合并成一个大空间。
起始地址为p,大小为2k的内存块,其伙伴的起始地址为:
边界标识法在每块的首尾均有“占用”/“空闲”标志,空闲块合并方便。伙伴系统算法简单,速度快,但只有互为伙伴的两个空闲块才可合并,因而易产生虽空闲但不能归并的碎片。
8.7已知一个大小为512个字长的存储,假设先后有6个用户申请大小分别为23,45,52,100,11和19的存储空间,然后再顺序释放大小为45,52,11的占用块。假设以伙伴系统实现动态存储管理。
(1) 画出可利用空间表的初始状态。
(2) 画出为6个用户分配所需要的存储空间后可利用空间表的状态以及每个用户所得到的存储块的起始地址。
(3) 画出在回收3个占用块之后可利用空间表的状态。
【解答】因为512=29,可利用空间表的初始状态图如8-1所示。
当用户申请大小为23的内存块时,因24<23<=25,但没有大小为25的块,只有大小为29的块,故将29的块分裂成两个大小为28的块,其中大小为28的一块挂到可利用空间表上,另一块再分裂成两个大小为27的块。又将其中大小为27的一块挂到可利用空间表上,另一块再分裂成两个大小为26的块,一块26的块挂到可利用空间表上,另一块分裂成两个大小为25的块,其中一块挂到可利用空间表上,另一块分给用户(地址0—31)。如此下去,最后每个用户得到的存储空间的起始地址如图8-2, 6个用户分配所需要的存储空间后可利用空间表的状态如图8-3。
在回收时,因为给申请45的用户分配了26,其伙伴地址是0,在占用中,不能合并,只能挂到可利用空间表上。在回收大小为52的占用块时,其伙伴地址是192,也在占用。回收大小为11的占用块时,其伙伴地址是48,可以合并为大小25的块, 挂到可利用空间表上。回收3个占用块之后可利用空间表的状态如图8-4。
存储大小起始地址
23 0
45 64
52 128
100 256
11 32
19 192
图8-2 图8-1
(注:在图8.3和图8.4画上了占用块,从原理上,只有空闲块才出现在“可利空间表”中。)
图8-3 图
8-4
8.9下图所示的伙伴系统中,回收两块首地址分别为768及128,大小为
27的存储块,请画出回收后该伙伴系统的状态图。
7+1=0,所以768和768+27=896互为伙伴, 伙伴合 【解答】因为768 % 2
并后,首址为768,块大小为28。因为768 % 28+1=28,所以,所以首址768大小为28的块和首址512大小为28的块合并,成为首址512大小为29的空闲块。因为128 % 27+1=27,其伙伴地址为128-27=0, 将其插入可利用空间表中。回收后该伙伴系统的状态图如下。
实验三动态分区存储管理方式的主存分配回收 一、实验目的 深入了解动态分区存储管理方式主存分配回收的实现。 二、实验预备知识 存储管理中动态分区的管理方式。 三、实验内容 编写程序完成动态分区存储管理方式的主存分配回收的实现。实验具体包括: 首先确定主存空间分配表;然后采用最优适应算法完成主存空间的分配和回收;最后编写主函数对所做工作进行测试。 四、提示与讲解 动态分区管理方式预先不将主存划分成几个区域,而把主存除操作系统占用区域外的空间看作一个大的空闲区。当作业要求装入主存时,根据作业需要主存空间的大小查询主存内各个空闲区,当从主存空间中找到一个大于或等于该作业大小的主存空闲区时,选择其中一个空闲区,按作业需求量划出一个分区装入该作业。作业执行完后,它所占的主存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 实现动态分区的分配和回收,主要考虑的问题有三个: 第一,设计记录主存使用情况的数据表格,用来记录空闲区和作业占用的区域;第二,在设计的数据表格基础上设计主存分配算法;第三,在设计的数据表格基础上设计主存回收算法。 首先,考虑第一个问题: 设计记录主存使用情况的数据表格,用来记录空闲区和作业占用的区域。 由于动态分区的大小是由作业需求量决定的,故分区的长度是预先不固定的,且分区的个数也随主存分配和回收变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在主
存中的起始地址和长度。由于分配时空闲区有时会变成两个分区: 空闲区和已分分区,回收主存分区时,可能会合并空闲分区,这样如果整个主存采用一张表格记录已分分区和空闲区,就会使表格操作繁琐。主存分配时查找空闲区进行分配,然后填写已分配区表,主要操作在空闲区;某个作业执行完后,将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。 由此可见,主存的分配和回收主要是对空闲区的操作。这样为了便于对主存空间的分配和回收,就建立两张分区表记录主存使用情况,一张表格记录作业占用分区的 “已分配区表”;一张是记录空闲区的“空闲区表”。这两张表的实现方法一般有两种,一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分配区表”还是“空闲区 表”都必须事先确定长度。它们的长度必须是系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分配区表”还是“空闲区表”都有空闲栏目。已分配区表中除了分区起始地址、长度外,也至少还要有一项“标志”,如果是空闲栏目,内容为“空”,如果为某个作业占用分区的登记项,内容为该作业的作业名;空闲区表中除了分区起始地址、长度外,也要有一项“标志”,如果是空闲栏目,内容为“空”,如果为某个空闲区的登记项,内容为“未分配”。在实际系统中,这两表格的内容可能还要多,实验中仅仅使用上述必须的数据。为此, “已分配区表”和“空闲区表”在实验中有如下的结构定义。 已分配区表的定义: #define n 10// 假定系统允许的最大作业数量为n struct {float address;// 已分分区起始地址 float length; // 已分分区长度,单位为字节 int flag;// 已分配区表登记栏标志, “0表”示空栏目,实验中只支持一个字符的作业名}used_table[n];// 已分配区表 空闲区表的定义:
2.正确 (2) 480-32=448 (2) 011011100000第八章动态存储管理 %1. 选择题1C %1. 判断题1.错误 %1. 填空题 1. (1) 480+8=488 (480 %2>,=0) 2. (1) 011011110100 3. 用户不再使用而系统没有回收的结构和变量。例如,p=malloc(size) ; ???, p=null ; %1. 应用题 1. 在伙伴系统中,无论占用块或空闲块,其大小均为2的k(k 为? 0的正整数)次幕。若内 存容量为2二则空闲块大小只能是2°, 2', 22 ,…,2L 由同一大块分裂而得的两个小块 互称“伙伴空间”,如内存大小为2'°的块分裂成两个大小为2,的块。只有两个“伙伴空 间”才能合并成一个大空间。 起始地址为P ,大小为2,的内存块,其伙伴的起始地址为: buddy(p, k) =p+2k (若 p % 2k l=0),或 buddy(p, k)=p-2‘ (若 p % 2k *-2k ) 2. 首次拟合法;从链表头指针开始查找,找到第一个N 所需空间的结点即分配。 最佳拟合法:链表结点大小增序排列,找到第一个'所需空间的结点即分配。 最差拟合法:链表结点大小逆序排列,总从第一个结点开始分配,将分配后结点所剩空 间 插入到链表适当位置。 首次拟合法适合事先不知道请求分配和释放信息的情况,分配时需查询,释放时插在表 头。最佳拟合法适用于请求分配内存大小范围较宽的系统,释放时容易产生存储量很小难以 利 用的内存碎片,同时保留那些很大的内存块以备将来可能发生的大内存量的需求,分配与 问收均需查询。最差拟合法适合请求分配内存大小范围较窄的系统,分配时不查询,回收时 查询, 以便插入适当位置。 3. 011011110100 4. 011011100000 5. (1) buddy(1664, 7)=1664-128=1536 (2) buddy(2816, 6)=2816+64=2880 6. 动态存储分配伙伴系统的基本思想请参见上面题lo 边界标识法在每块的首尾均有“占 用 空闲”标志,空闲块合并方便°伙伴系统算法简.单,速度快,但只有互为伙伴的两 个空闲块 才可合并,因而易产生虽空闲但不能归并的碎片。 7. 组织成循环链表的可利用空间表的结点大小按递增序排列时,首次适配策略就转变为最 佳 适配策略。 8. 因为512=29 ,可利用空间表的初始状态图如8-1所示。 当用户申请大小为23的内存块时,因24<23<=25,但没有大小为2’的块,只有大小为2" 的 块,故将2,的块分裂成两个大小为2^的块,其中大小为的一块挂到可利用空间表上,另一块 再分裂成两个大小为2,的块。乂将其中大小为2’的一块挂到可利用空间表上,另一块再分裂 成两个大小为牙的块,一块2。的块挂到可利用空间表上,另一块分裂成两个大小为2^的块, 其中一块挂到可利用空间表上,另一?块分给用户(地址0—31)。如此下去,最后每个用户得到 的存储空间的起始地址如图8-2, 6个用户分配所需要的存储空I 、可后可利用空间表的状态如 图 8-3 o 在回收时,因为给申请45的用户分配了 26,其伙伴地址是0,在占用中,不能合并,只能挂 到可利用空间表上。在同收大小为52的占用块时,其伙伴地址是192,也在占用。同收大小 为
内存的存储管理段式和页式管理的区别 页和分段系统有许多相似之处,但在概念上两者完全不同,主要表现在: 1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。 段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。 2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。 段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。 3、分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。 分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。 参考资料:/ctsn/os/skja4.htm 添加评论 炎炎1981|2009-08-2618:28:33 有0人认为这个回答不错|有0人认为这个回答没有帮助 一页式管理 1页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(pageframe),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。 它分为 1静态页式管理。静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。静态页式管理解决了分区管理时的碎片问题。但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待。而且作业和进程的大小仍受内存可用页面数的限制。 2动态页式管理。动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和预调入页式管理。 优点:没有外碎片,每个内碎片不超过页大小。一个程序不必连续存放。便于改变程序占用空间的大小(主要指随着程序运行而动态生成的数据增多,要求地址空间相应增长,通常由系统调用完成而不是操作系统自动完成)。 缺点:程序全部装入内存。 要求有相应的硬件支持。例如地址变换机构,缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本。增加了系统开销,例如缺页中断处理机,请求调页的算法如选择不当,有可能产生抖动现象。虽然消除了碎片,但每个作业或进程的最后一页内总有一部分空间得不到利用果页面较大,则这一部分的损失仍然较大。 二段式管理的基本思想 把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作
可变分区存储管理 设计思路: 整体思路: 可变分区管理方式将内存除操作系统占用区域外的空间看做一个大的空闲区。当作业要求装入内存时,根据作业需要内存空间的大小查询内存中的各个 空闲区,当从内存空间中找到一个大于或等于该作业大小的内存空闲区时,选择其中一个空闲区,按作业需求量划出一个分区装人该作业,作业执行完后,其所占的内存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 设计所才用的算法: 采用最优适应算法,每次为作业分配内存时,总是把既能满足要求、又是最小的空闲分区分配给作业。但最优适应算法容易出现找到的一个分区可能只比作业所需求的长度略大一点的情行,这时,空闲区分割后剩下的空闲区就很小以致很难再使用,降低了内存的使用率。为解决此问题,设定一个限值min size,如果空闲区的大小减去作业需求长度得到的值小于等于min size,不再将空闲区分成己分分区和空闲区两部分,而是将整个空闲区都分配给作业。 内存分配与回收所使用的结构体: 为便于对内存的分配和回收,建立两张表记录内存的使用情况。一张为记录作业占用分区的“内存分配表”,内容包括分区起始地址、长度、作业名/标志(为0时作为标志位表示空栏目);一张为记录空闲区的“空闲分区表”,内容包括分区起始地址、长度、标志(0表空栏目,1表未分配)。两张表都采用顺序表形式。 关于分配留下的内存小碎片问题: 当要装入一个作业时,从“空闲分区表”中查找标志为“ 1”(未分配)且满足作业所需内存大小的最小空闲区,若空闲区的大小与作业所需大小的差值小于或等于min size,把该分区全部分配给作业,并把该空闲区的标志改为“0”(空栏目)。同时,在已分配区表中找到一个标志为“ 0”的栏目登记新装人作业所占用分区的起始地址,长度和作业名。若空闲区的大小与作业所需大小的差值大于
第四章存储器管理 一、填空题 1、对内存的访问是通过一系列对指定进行读或写来实现的。 2、存储器一般分为外存、和高速缓存器。 3、为了提高运算速度和增强处理能力,可以在CPU和内存之间增加______________用来存放程序和数据,CPU可以直接存取其中信息。 4、将编译或汇编后得到的一组目标模块以及它们所需的库函数装配成一个完整的装入模块的过程称为。 5、用户程序经编译之后的每个目标模块都以0为基地址顺序编址,这种地址称为。 6、内存中各存储单元的地址是从统一的基地址顺序编址,这种地址称为。 7、从用户的源程序进入系统到相应程序在机器上运行,要经历的主要处理阶段有:编辑、编译、连接和运行。 8、源程序不能在机器上直接执行,要把源程序编译成处理机能识别的二进制。 9、动态重定位是程序执行期间每次访问内存之前进行重定位,这种变换是靠实现的。 10、动态重定位是程序执行期间每次之前进行重定位,这种变换是靠硬件地址变换机构来实现的。 11、把逻辑地址转变为内存的的过程称为重定位。 12、使用存储管理固定分区法时,内存中的分区个数和都固定。 13、为了提高内存的利用率,在可重定位分区分配方式中可通过________________技术来减少内存碎片。 14、使用动态重定位法,通过紧缩可以消除碎片,但需耗费大量的。 15、紧缩是通过移动内存中的程序数据,从而使得被连成一片,这就要求动态重定位技术支持。 16、所谓对换技术,就是为了解决内存不足的问题,令作业在内存和______________之间交换。 17、某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户表中已调入
实验五动态分区存储管理 一、实验目的 深入了解采用动态分区存储管理方式的内存分配回收的实现。通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉动态分区存储管理的内存分配和回收。 二、实验内容 编写程序完成动态分区存储管理方式的内存分配回收。 具体包括:确定内存空间分配表; 采用最优适应算法完成内存空间的分配和回收; 编写主函数对所做工作进行测试。 三、设计思路 整体思路: 动态分区管理方式将内存除操作系统占用区域外的空间看成一个大的空闲区。当作业要求装入内存时,根据作业需要内存空间的大小查询内存中的各个空闲区,当从内存空间中找到一个大于或等于该作业大小的内存空闲区时,选择其中一个空闲区,按作业需求量划出一个分区装人该作业,作业执行完后,其所占的内存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 设计所采用的算法: 采用最优适应算法,每次为作业分配内存时,总是把既能满足要求、又是最小的空闲分区分配给作业。但最优适应算法容易出现找到的一个分区可能只比作业所需求的长度略大一点的情行,这时,空闲区分割后剩下的空闲区就很小以致很难再使用,降低了内存的使用率。为解决此问题,设定一个限值minsize,如果空闲区的大小减去作业需求长度得到的值小于等于minsize,不再将空闲区分成己分分区和空闲区两部分,而是将整个空闲区都分配给作业。 内存分配与回收所使用的结构体: 为便于对内存的分配和回收,建立两张表记录内存的使用情况。一张为记录作业占用分 区的“内存分配表”,内容包括分区起始地址、长度、作业名/标志(为0时作为标志位表示空栏目);一张为记录空闲区的“空闲分区表”,内容包括分区起始地址、长度、标志(0表空栏目,1表未分配)。两张表都采用顺序表形式。
内存的动态存储管理 一、实验内容 编写程序实现动态分区存储管理方式的主存分配与回收。具体内容包括:首先确定主存空间分配表;然后采用最先适应算法完成主存空间的分配与回收;最后编写主函数对所做工作进行测试 二、实验原理 模拟存储管理中内存空间的管理和分配内存空间的管理分为固定分区管理方式,可变分区管理方式,页式存储管理,段式存储管理。 题目:模拟内存分配与回收 三、实验步骤(或过程) 在Microsoft Visual C++ 6.0环境下运行 1.设计一个空闲分区表,空闲分区表通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲分区低端的空间。 2.设计一个内存分区表,可用链表管理,用以表示当前以内存使用情况。 3.设计一个进程申请队列以及进程完成后的释放顺序,实现主存的分配和回收。 4.要求每次分配和回收后把空闲分区的变化情况以及各进程的申请、释放情况以及各进程的申请、释放情况以图形方式显示、打印出来。 最佳适应算法: 该算法总是把满足要求、又是最小的空闲区分配给作业。检查空闲区说明表是否有满足作业要求的空闲区,也分为三种情况:大于,等于,小于。若检查到有“等于”的情况,就可以直接分配,若没有,则继续检查是否有“大于”的情况
代码实现如下: #include 存储管理的基本原理 内存管理方法 内存管理主要包括内存分配和回收、地址变换、内存扩充、内存共享和保护等功能。 下面主要介绍连续分配存储管理、覆盖与交换技术以及页式与段式存储管理等基本概念和原理。 1.连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。 (1)单一连续存储管理 在这种管理方式中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可使用用户区全部空间。其特点是,最简单,适用于单用户、单任务的操作系统。CP/M和DOS 2.0以下就是采用此种方式。这种方式的最大优点就是易于管理。但也存在着一些问题和不足之处,例如对要求内存空间少的程序,造成内存浪费;程序全部装入,使得很少使用的程序部分也占用—定数量的内存。 (2)分区式存储管理 为了支持多道程序系统和分时系统,支持多个程序并发执行,引入了分区式存储管理。分区式存储管理是把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。分区式存储管理虽然可以支持并发,但难以进行内存分区的共享。 分区式存储管理引人了两个新的问题:内碎片和外碎片。前者是占用分区内未被利用的空间,后者是占用分区之间难以利用的空闲分区(通常是小空闲分区)。为实现分区式存储管理,操作系统应维护的数据结构为分区表或分区链表。表中各表项一般包括每个分区的起始地址、大小及状态(是否已分配)。 分区式存储管理常采用的一项技术就是内存紧缩(compaction):将各个占用分区向内存一端移动,然后将各个空闲分区合并成为一个空闲分区。这种技术在提供了某种程度上的灵活性的同时,也存在着一些弊端,例如:对占用分区进行内存数据搬移占用CPU~t寸间;如果对占用分区中的程序进行“浮动”,则其重定位需要硬件支持。 1)固定分区(nxedpartitioning)。 固定式分区的特点是把内存划分为若干个固定大小的连续分区。分区大小可以相等:这种作法只适合于多个相同程序的并发执行(处理多个类型相同的对象)。分区大小也可以不等:有多个小分区、适量的中等分区以及少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。这种技术的优点在于,易于实现,开销小。缺点主要有两个:内碎片造成浪费;分区总数固定,限制了并发执行的程序数目。 2)动态分区(dynamic partitioning)。 动态分区的特点是动态创建分区:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。与固定分区相比较其优点是:没有内碎片。但它却引入了另一种碎片——外碎片。动态分区的分区分配就是寻找某个空闲分区,其大小需大于或等于程序 实验五动态分区存储管理模拟 一、实验目的 深入了解可变分区存储管理式主存分配回收的实现。 二、实验预备知识 可变分区存储管理式不预先将主存划分成几个区域,而把主存除操作系统占用区域外的空间看作一个大的空闲区。当进程要求装入主存时,根据进程需要主存空间的大小查询主存各个空闲区,当从主存空间找到一个大于或等于该进程大小要求的主存空闲区时,选择其中一个空闲区,按进程需求量划出一个分区装入该进程。进程执行完后,它所占的主存分区被回收,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 这个实验主要需要考虑三个问题: (1)设计记录主存使用情况的数据表格,用来记录空闲区和进程占用的区域; (2)在设计的数据表格基础上设计主存分配算法; (3)在设计的数据表格基础上设计主存回收算法。 首先,考虑第一个问题:设计记录主存使用情况的数据表格,用来记录空闲区和进程占用的区域。 由于可变分区的大小是由进程需求量决定的,故分区的长度是预先不固定的,且分区的个数也随主存分配和回收而变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在主存中的起始地址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收主存分区时,可能会合并空闲分区,这样如果整个主存采用一表格记录已分分区和空闲区,就会使表格操作繁琐。主存分配 时查找空闲区进行分配,然后填写已分分区表,主要操作在空闲区;某个进程执行完成后,将该分区变成空闲区,并将其与相邻空闲区合并,主要操作也在空闲区。由此可见,主存分配和回收主要是对空闲区的操作。 这样,为了便于对主存空间的分配和回收,就建立两分区表记录主存使用情况,一表格记录进程占用分区的“已分分区表”;一是记录空闲区的“空闲区表”。这两表的实现法一般有两种,一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分分区表”还是“空闲区表”都必须事先确定长度。它们的长度必须是系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分分区表”还是“空闲区表”都有空闲栏目。已分分区表中除了分区起始地址、长度外,也至少还要有一项“标志”,如果是空闲栏目,容为“空”,如果为某个进程占用分区的登记项,容为该进程的进程名;空闲区表中除了分区起始地址、长度外,也要有一项“标志”,如果是空闲栏目,容为“空”,如果为某个空闲区的登记项,容为“未分配”。在实际系统中,这两个表格的容可能还要更多,实验中仅仅使用上述必须的数据。为此,“已分分区表”和“空闲区表”在实验中有如下的结构定义: 已分分区表的定义: #define n 10 //假定系统允的进程数量最多为n struct { float address; //已分分区起始地址 float length; //已分分区长度,单位为字节 《操作系统》课程实验报告实验名称:动态分区存储管理 姓名: 学号: 地点: 指导老师: 专业班级: 一、实验目的: 1、熟悉并掌握动态分区分配的算法。 2、熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。 二、实验内容:用高级语言模拟实现动态分区存储管理,要求: 1、分区分配算法至少实现首次适应算法、最佳适应算法和最坏适 应算法中的至少一种。熟悉并掌握各种算法的空闲区组织方式。 2、分区的初始化——可以由用户输入初始分区的大小。(初始化后 只有一个空闲分区,起始地址为0,大小是用户输入的大小) 3、分区的动态分配过程:由用户输入作业号和作业的大小,实现 分区过程。 4、分区的回收:用户输入作业号,实现分区回收,同时,分区的 合并要体现出来。(注意:不存在的作业号要给出错误提示!) 5、分区的显示:任何时刻,可以查看当前内存的情况(起始地址 是什么,大小多大的分区时空闲的,或者占用的,能够显示出 来) 6、要求考虑:(1)内存空间不足的情况,要有相应的显示; (2)作业不能同名,但是删除后可以再用这个名字; (3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。 三、实验代码 #include 操作系统课程设计 动态分区分配存储管理 吕 霆 计算机10-01班 设计题目 学 号 专业班级 学生姓名 指导教师 第一章课程设计概述 1.1 设计任务: 动态分区分配存储管理 1.2 设计要求 建立描述内存分配状况的数据结构; 建立描述进程的数据结构; 使用两种方式产生进程:(a)自动产生,(b)手工输入; 在屏幕上显示内存的分配状况、每个进程的执行情况; 建立分区的分配与回收算法,支持紧凑算法; 时间的流逝可用下面几种方法模拟:(a)按键盘,每按一次可认为过一个时间单位; (b) 响应WM_TIMER; 将一批进程的执行情况存入磁盘文件,以后可以读出并重放; 支持算法:首次适应算法、循环首次适应算法、最佳适应算法:最坏适应算法。1.3 设计目的 旨在让我们更好的了解动态分区管理方面的知识. 第二章原理及算法描述 2.1动态分区分配算法原理 首次适应算法 * 算法概述:分配内存时,从链首开始顺序查找,找到满足的空闲分区则划出空间分配,余下的空闲空间仍保留在空闲链表中 * 实现方法:分配时从数组第一个元素开始比较,若符合条件则将该元素减去对应作业的值 循环首次适应算法 * 算法概述:由首次适应算法演变,只是每次分配改为由上一次找到的空闲分区开始查找 * 实现方法:在首次适应算法的基础上增加一个值用于记录找到的空闲分区的位置 最佳适应算法 * 算法概述:每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区 分配给作业 * 实现方法:我们决定每次分配先把空闲分区按从小到大的顺序排列,然后将第一个匹配分区分配给作业 最坏适应算法 * 算法概述:每次为作业分配内存时,总是挑选一个最大的空闲分区分割给作业使用 * 实现方法:算法与最佳适应算法几乎相同,仅在排序时把空闲分区表按从大到小的顺序排列,所以未作详细注释 回收分区 当进程运行完毕释放内存时,系统根据回收区的首址,从空闲区链(表)中找到相应的插入点,此时可能出现以下四种情况之一; 1)回收区与插入点的前一个空闲分区F1相邻接,此时应将回收区与插入点的前一分 区合并,不必为回收区分配新表项,而只需修改其前一分区F1的大小. 2)回收分区与插入点的后一空闲分区F2相邻接,此时也可将两分区合并,形成新的 空闲分区,但用回收区的首址作为新空闲区的首址,大小为两者之和. 3)回收区同时与插入点的前,后两个分区邻接,此时将三个分区合并,使用F1的表项 和F1的首址,取消F2的表项,大小为三者之和. 4)回收区既不与F1相邻接,又不与F2邻接.这时应为回收区单独建立一新表项,填 写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置. 紧凑算法 通过移动内存中的作业的位置,以把原来多个分散的小分区拼接成一个大分区的方法. 第三章开发环境 此程序是本人利用c++语言在vs2012的开发环境中实现的 第四章程序实现--数据结构 #include 计算机科学与工程学院学生实验报告 专业计算机科学与技术班级 学号姓名 课程名称操作系统课程类型专业必修课 实验名称动态分区存储管理的模拟实现 实验目的: 1.熟悉动态分区存储管理方式下,主存空间的分配和回收算法。 2.提高C语言编程能力。 实验内容: 假设主存当前状态如右表所示: 系统采用最佳适应分配算法为作业分配主存空间, 而且具有紧凑技术。请编程完成以下操作: (1). 输出此时的已分配区表和未分配区表; (2). 装入 Job3(15K),输出主存分配后的已分配 区表和未分配区表; (3). 回收 Job2所占用的主存空间,输出主存回收 后的已分配区表和未分配区表; (4).装入 Job4(130K),输出主存分配后的已分配 区表和未分配区表。 实验要求 1.数据结构参考定义如下,也可根据需要进行改进: (1)已分配区表: #define n 10 /*假定系统允许的最大作业数量为n,n值为10*/ struct {int number; /*序号*/ int address; /*已分配分区起始地址,单位为KB */ int length; /*已分配分区长度,单位KB*/ float flag; /*已分配区表登记栏标志,0:空表项,否则为作业名;*/ }used_table[n]; /*已分配区表*/ (2)未分配区表: #define m 10 /*假定系统允许的空闲区表最大为m,m值为10*/ struct {int number; /*序号*/ int address; /*空闲区起始地址,单位为KB */ int length; /*空闲区长度,单位为KB*/ int flag; /*空闲区表登记栏标志,0:空表项;1:空闲区*/ }free_table[m]; /*空闲区表*/ 2.以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。 3.以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。 4.画出算法实现的N-S流程图。 5.程序调试、运行成功后,请老师检查。 实验步骤: 1.分配内存,结果如下图: 页和分段系统有许多相似之处,但在概念上两者完全不同,主要表现在: 、页是信息地物理单位,分页是为实现离散分配方式,以消减内存地外零头,提高内存地利用率;或者说,分页仅仅是由于系统管理地需要,而不是用户地需要.文档收集自网络,仅用于个人学习 段是信息地逻辑单位,它含有一组其意义相对完整地信息.分段地目地是为了能更好地满足用户地需要. 、页地大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现地,因而一个系统只能有一种大小地页面.文档收集自网络,仅用于个人学习 段地长度却不固定,决定于用户所编写地程序,通常由编辑程序在对源程序进行编辑时,根据信息地性质来划分. 、分页地作业地址空间是维一地,即单一地线性空间,程序员只须利用一个记忆符,即可表示一地址. 分段地作业地址空间是二维地,程序员在标识一个地址时,既需给出段名,又需给出段内地址. 参考资料: 添加评论 炎炎 有人认为这个回答不错有人认为这个回答没有帮助 一页式管理 页式管理地基本原理将各进程地虚拟空间划分成若干个长度相等地页(),页式管理把内存空间按页地大小划分成片或者页面(),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应地硬件地址变换机构,来解决离散地址变换问题.页式管理采用请求调页或预调页技术实现了内外存存储器地统一管理.文档收集自网络,仅用于个人学习 它分为 静态页式管理.静态分页管理地第一步是为要求内存地作业或进程分配足够地页面.系统通过存储页面表、请求表以及页表来完成内存地分配工作.静态页式管理解决了分区管理时地碎片问题.但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待.而且作业和进程地大小仍受内存可用页面数地限制.文档收集自网络,仅用于个人学习 动态页式管理.动态页式管理是在静态页式管理地基础上发展起来地.它分为请求页式管理和预调入页式管理. 优点:没有外碎片,每个内碎片不超过页大小.一个程序不必连续存放.便于改变程序占用空间地大小(主要指随着程序运行而动态生成地数据增多,要求地址空间相应增长,通常由系统调用完成而不是操作系统自动完成).文档收集自网络,仅用于个人学习 缺点:程序全部装入内存. 要求有相应地硬件支持.例如地址变换机构,缺页中断地产生和选择淘汰页面等都要求有相应地硬件支持.这增加了机器成本.增加了系统开销,例如缺页中断处理机,请求调页地算法如选择不当,有可能产生抖动现象.虽然消除了碎片,但每个作业或进程地最后一页内总有一部分空间得不到利用果页面较大,则这一部分地损失仍然较大.文档收集自网络,仅用于个人学习 二段式管理地基本思想 把程序按内容或过程(函数)关系分成段,每段有自己地名字.一个用户作业或进程所包含地段对应一个二维线形虚拟空间,也就是一个二维虚拟存储器.段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址.文档收集自网络, 操作系统原理 课程设计报告 题目:动态分区分配存储管理系统 所在学院:计算机科学与技术学院 班级: 11级计算机科学与技术(非师) 学号: 20111202052 姓名:吴创连 指导教师:黄侠剑 2014年3月18 目录 1 引言 (1) 2 需求分析 (1) 3 概要设计 (1) 4 详细设计 (1) 4.1问题描述和分析 (1) 4.2程序流程图 (2) 4.3数据结构体分析 (3) 4.4主要程序代码分析 (4) 5 调试与操作说明 (11) 5.1初始界面 (11) 5.2模拟内存分配 (12) 5.3回收内存界面 (12) 5.4最佳适应算法的实现 (13) 5.5最坏适应算法的实现 (13) 6总结与体会 (13) 1 引言 操作系统是最重要的系统软件,同时也是最活跃的学科之一。我们通过操作系统可以理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。 存储器是计算机系统的重要组成部分,近年来,存储器容量虽然一直在不断扩大,但仍不能满足现代软件发展的需要,因此,存储器仍然是一种宝贵而又紧俏的资源。如何对它加以有效的管理,不仅直接影响到存储器的利用率,而且还对系统性能有重大影响。而动态分区分配属于连续分配的一种方式,它至今仍在内存分配方式中占有一席之地。 2 需求分析 动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现动态分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配和回收操作这样三个问题。常用的数据结构有动态分区表和动态分区链。在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存储空间,实现分区存储管理的内存分配功能,应该选择最合适的适应算法(最佳适应算法,最坏适应算法),在动态分区存储管理方式中主要实现内存分配和内存回收算法,在这些存储管理中间必然会有碎片的产生,当碎片产生时,进行碎片的拼接等相关的内容。 3 概要设计 本程序采用机构化模块化的设计方法,共分为两大模块。 1.最佳适应算法实现 它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。 2.最坏算法实现 最坏适应分配算法要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。 4 详细设计 4.1 问题描述和分析 系统应利用某种分配算法,从空闲分区链表中找到所需大小的分区,如果空闲分区大小 动态分区分配存储管理系统 学院 专业 学号 学生姓名 指导老师 2014年3月19日 目录 一、设计目的与内容 (4) 1、设计目的 (3) 2、设计内容 (3) 3、设计要求 (3) 二、算法的基本思想 (3) 1、首次适应算法 (3) 2、循环首次适应算法 (3) 三、主要功能模块流程图 (4) 1、主函数流程图 .......................................................................................................................... .4 2、首次适应算法流程图.............................................................................................................. .5 3、循环首次适应算法流程图 ..................................................................................................... .6 四、系统测试 ......................................................................................................................................... .7 输入界面,按要求输入: (7) 五、结论 (8) 六、源程序 (9) 第八章 动态存储管理 一、选择题 1. 动态存储管理系统中,通常可有( )种不同的分配策略。【长沙铁道学院 1998 三、3 (2分)】 A. 1 B. 2 C. 3 D. 4 E. 5 二、判断题 1. 在伙伴系统中的伙伴是指任意两块大小相同、位置相邻的内存块。( ) 【北京邮电大学 2000 一、8(1分)】 2. 在动态存储管理系统中做空间分配时,最佳适配法与最先适配法相比,前者容易增加闲置空间的碎片。( )【东南大学 2001 一、1-1 (1分)】【中山大学 1994 一、1(2分)】 三、填空题 1.起始地址为480,大小为8的块,其伙伴块的起始地址是_______;若块大小为32,则其伙伴块的起始地址为_______。【北方交通大学 1999二、1(4分)】 2.二进制地址为011011110000,大小为(4)10和(16)10块的伙伴地址分别为:________、_________。 【上海大学 2002 二、2(2分)】 3. 无用单元是指________,例________【北方交通大学 1999 二、6(4分)】 四、应用题 1.伙伴空间(名词解释)【西北工业大学 1999 一、4(3分)】2.设内存中可利用空间已连成一个单链表,对用户的存储空间需求,一般有哪三种分配策略? 【北京科技大学 1999 一、6(2分)】 3.计算起始二进制地址为011011110000,长度为4(十进制)的块的伙伴地址是多少? 【中山大学1999一、2(3分)】 4.在一个伙伴系统中,已知某存储块的始址X=(011011110000)2,大小为24,则它的伙伴块的始址是多少?【北方交通大学 1996 一、1(5分)】 第八章动态存储管理 一、选择题 1. 动态存储管理系统中,通常可有()种不同的分配策略。【长沙铁道学院 1998 三、3 (2分)】 A. 1 B. 2 C. 3 D. 4 E. 5 二、判断题 1.1.在伙伴系统中的伙伴是指任意两块大小相同、位置相邻的内存块。() 【北京邮电大学 2000 一、8(1分)】 2.2.在动态存储管理系统中做空间分配时,最佳适配法与最先适配法相比,前者容易增加闲置空间的碎片。()【东南大学 2001 一、1-1 (1分)】【中山大学 1994 一、1(2分)】 三、填空题 1.起始地址为480,大小为8的块,其伙伴块的起始地址是_______;若块大小为32,则其伙伴块的起始地址为_______。【北方交通大学 1999 二、1(4分)】 2.二进制地址为011011110000,大小为(4)10和(16)10块的伙伴地址分别为:________、_________。 【上海大学 2002 二、2(2分)】 3.3.无用单元是指________,例________【北方交通大学 1999 二、6(4分)】 四、应用题 1.伙伴空间(名词解释)【西北工业大学 1999 一、4(3分)】 2.设内存中可利用空间已连成一个单链表,对用户的存储空间需求,一般有哪三种分配策略? 【北京科技大学 1999 一、6(2分)】 3.计算起始二进制地址为011011110000,长度为4(十进制)的块的伙伴地址是多少? 【中山大学1999一、2(3分)】 4.在一个伙伴系统中,已知某存储块的始址X=(011011110000)2,大小为24,则它的伙伴块的始址是多少?【北方交通大学 1996 一、1(5分)】 5.地址为(1664)10大小为(128)10的存储块的伙伴地址是什么? 地址为(2816)10大小为(64)10的存储块的伙伴地址是什么?【清华大学 1996 四、】 6.试叙述动态存储分配伙伴系统的基本思想,它和边界标识法不同点是什么? 【青岛大学 2000 十、(10分)】【中国人民大学 2000 一、1(4分)】 7.组织成循环链表的可利用空间表附加什么条件时,首次适配策略就转变为最佳适配策略? 【北方交通大学 1998 四、(8分)】 8.已知一个大小为512个字长的存储,假设先后有6个用户申请大小分别为23,45,52,100,11和19的存储空间,然后再顺序释放大小为45,52,11的占用块。假设以伙伴系统实现动态存储管理。(1)画出可利用空间表的初始状态。 (2)画出为6个用户分配所需要的存储空间后可利用空间表的状态以及每个用户所得到的存储块的起始地址。 (3)画出在回收3个占用块之后可利用空间表的状态。【清华大学1998三(15分)】【同济大学 1999】9.下图所示的伙伴系统中,回收两块首地址分别为768及128,大小为27的存储块,请画出回收后该伙伴系统的状态图。【北京邮电大学 1996 二、(10分)】内存的存储管理--段式和页式管理的区别
实验五动态分区存储管理模拟
动态分区存储管理
操作系统课程设计动态分区分配存储管理
动态分区存储管理的模拟实现
内存的存储管理段式和页式管理的区别
动态分区存储管理系统分解
动态分区分配存储管理组织系统
算法与数据结构考研试题精析(第二版)第8章 动态存储管理
第八章动态存储管理 习题带答案