- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
可变分区存储管理实验报告程序设计思路和感悟概要
实验题目:可变分区存储管理
一、实验目的
可变分区存储管理方式是操作系统中存储管理的重要方式,其主要思想是用户作业进行连续存储,每次按照用户的请求,如果内存中有能满足用户作业大小的空闲区,就采用不同的算法分配给用户,否则,不分配,可变分区容易产生外零头。分区分配算法包括最佳适应算法、最坏适应算法、首次适应算法等。
通过本实验可加深学生对存储器管理方式的把握以及分配算法的理解,并提高程序设计的能力。
二、实验环境
个人PC机WindowsXP操作系统 I5-2400CPU 3.10Ghz 2GB内存
C-Free C语言程序设计软件
三、实验的重点和难点
可变分区的的收回
四、实验内容
利用C语言或C++语言或Java语言实现可变分区存储管理,具体要求如下:
1. 以一个一维数组模拟内存,数组类型为整型,共计1000个元素;
2. 用一个单链表表示可变分区空闲表,链表每个结点表示一个空闲区,每个结点信息包括起始地址、大小。
3. 分区分配算法采用最佳适应算法、首次适应算法,并将算法用函数实现。
4. 自己假设几个作业,包括作业的名称、大小,进入系统的顺序。
5. 初始内存中没有任何作业,随着用户输入的每一个作业的到来,动态为其分配内存。
6. 使用的算法用户要能够随时更换。
五、实验结果或实验代码
(1) 可变式分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需要,并且分区个数可以调整。当要装入一个作业时,根据作业需要的内存量,查看是否有足够的空闲空间,若有,则按需求量分割一部分给作业;若没有,则作业等待。随着作业的装入、完成,内存空间被分割成许多大大小小的分区。有的分区被作业占用,有的分区空闲。例如,某时刻内存空间占用情况如图1所示。
为了说明那些分区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,如表1所示。
表1 空闲区说明表
起始地址 长度 状态 45K 20K 未分配 110K 146K 未分配 空表目 空表目 空表目 …… …… ……
其中,起始地址指出个空闲区的内存起始地址,长度指出空闲区的大小。
状态(未分配:该栏目记录的是有效空闲区)
状态(空表目:没有登记信息)
由于分区个数不定,所以空闲区说明表中应该有足够的空表目项。否则造成溢出,无法登记。
同样,再设一个已分配表,记录作业或进程的内存占用情况。
(2) 当有一个新作业要求装入内存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业需求量,这时应将空闲区一分为二。一个分给作业,另外一个作为空闲区留在空闲区表中。为了尽量减少由于分割造成的碎片,尽可能分配低地址部分的空闲区,将较大空闲区留在高地址端,以利于大作业的装入。为此在空闲区表中,按空闲区首地址从低到高进行登记。为了便于快速查找,要不断地对表格进行紧缩,即让“空表目”项留在表的后部。其分配框图如图2所示。
(3) 当一个作业执行完成时,作业所占用的分区应归还给系统。在归还时要考虑相邻空闲区合并的问题。作业的释放区与空闲区的邻接分以下4种情况考虑:
释放区下邻(低地址邻接)空闲区;
释放区上邻(高地址邻接)空闲区;
释放区上下都与空闲区邻接;
释放区与空闲区不邻接。
首次适应算法回收框图如图3所示。
(4) 请按首次适应算法设计内存分配和回收程序。以表2当前使用的基础,初始化空闲区和已分配区说明表值。设计一个作业申请队列以及作业完成后的释放顺序,实现内存的分配与回收。把空闲区说明表的变化情况以及各作业的申请、释放情况显示或打印出来。
表2 空闲区说明表
起始地址 长度 状态 20K 20KB 1 80K 50KB 1 150K 100KB 1 300K 30KB 0(空表目) 600K 100KB 1 …… …… 空表目 …… …… …… 程序代码
#include iostream.h
#include stdio.h
#include stdlib.h
#include conio.h
#define n 10 //假定系统允许的最大作业数量为n
#define m 10 //假定系统允许的空闲区表最大为m
#define minisize 1000
struct
{
float address; //已分分区起始地址
float length; //已分分区长度,单位为字节
int flag; //已分分区表登记栏标志,用0表示空栏目,实验中只支持一个字符的作业名
}used_table[n]; //已分分区表
struct
{
float address;
您可能关注的文档
最近下载
- 机房接地电阻测试记录.doc VIP
- 获得性血友病A诊断与治疗中国指南(2021年版).pdf VIP
- 2025年天津武清中考语文试题及答案.doc VIP
- H13钢的高温拉伸性能研究.pdf VIP
- 04D201-3室外变压器安装图集.pdf VIP
- Agentic RAG 的现在与未来.pdf VIP
- T_ZZB 3718—2024(纸质卡牌_标准).pdf VIP
- 建筑材料行业研究简报:华东水泥创新高,巨石业绩持续高增长.pdf VIP
- 东风风神-AX4-产品使用说明书-风神AX4 2017款 1.4T DCT潮尚型-DFM7141F3B-AX4使用手册201710.pdf VIP
- 工程设计项目拟投入设计人员及设备.docx VIP
文档评论(0)