模拟实现一个简单的可变分区存储管理系统

上传人:re****.1 文档编号:429798517 上传时间:2023-05-18 格式:DOCX 页数:14 大小:79.57KB
返回 下载 相关 举报
模拟实现一个简单的可变分区存储管理系统_第1页
第1页 / 共14页
模拟实现一个简单的可变分区存储管理系统_第2页
第2页 / 共14页
模拟实现一个简单的可变分区存储管理系统_第3页
第3页 / 共14页
模拟实现一个简单的可变分区存储管理系统_第4页
第4页 / 共14页
模拟实现一个简单的可变分区存储管理系统_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《模拟实现一个简单的可变分区存储管理系统》由会员分享,可在线阅读,更多相关《模拟实现一个简单的可变分区存储管理系统(14页珍藏版)》请在金锄头文库上搜索。

1、合肥学院计算机科学与技术系实验报告20132014学年第 一 学期课程操作系统原理实验名称模拟实现一个简单的可变分区存储管理系统学生姓名专业班级指导教师谢雪胜2013 年 12 月1实验目的模拟实现一个简单的固定(或可变)分区存储管理系统2实验内容本实验要求完成如下任务:(1)建立相关的数据结构,作业控制块、已分配分区及未分配分区(2)实现一个分区分配算法,如最先适应分配算法、最优或最坏适应分配算法(3)实现一个分区回收算法(4)给定一批作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理。3实验步骤(1)任务分析本实验要实现的功能是模拟分区管理系统,即输入一个批作业,由程序根据 各个作

2、业的大小为批作业分配分区。如果能找到满足条件的分区,则分配成功, 否则分配失败。对于程序的输入,输入用户程序所要请求的分区大小,-1表示输 入完成。程序输入分配分区后各个分区的使用情况,然后回收分区,程序输出回 收分区后各个分区的使用情况。(2)概要设计对于分区的定义,定义的数据结构如下所示typedef structint no; /定义分区编号int size; /定义大小int start; /定义分区起始位置int state; /定义分区状态,已分配或未分配fenqubiao;fenqubiao arr50;其中,no表示分区的编号,size表示当前分区块的大小,start表示当前分

3、 区的起始位置,state表示当前分区的状态,已分配或空闲Arr50表示当前系 统所有分区情况。主程序的流程图如下:(3)详细设计一、初始化分区Fenqubiao arr50=1,10,0,0,2,20,10,1,3,10,30,0,4,12,40,0,5,30,52,1,6,25,82,0,7,20,107,0,8,5,127,1,9,64,132,0,10,32,196,0;二、分区分配函数采用的分区分配函数是最先适应法,每次从地址部分开始遍历。本程序用的 是编号作为遍历的关键字,方便处理。如果当前分区的大小大于所请求的大小, 并且分区处于空闲状态,则进行分区,划出满足请求大小的分区,并修

4、改状态为 已分配。如果所划分分区所剩空间不为 0,则修改其首址,设定其大小,添加到 分区表中。如果当前分区不满足请求,则继续查找,直至所有分区遍历完成。然 后返回分配失败给请求者。具体代码如下:int fun_allocate(int x,int *num,fenqubiao *arr)int i=0,p;fenqubiao t=0,0,0,0;for(i=0;i=x & arri.state=0)break;if(i=*num)return 0;p=i;t.no=arri.no+1;t.size=arri.size-x;t.start=arri.start+x;t.state=0;arri.

5、size=x;arri.state=1;if(t.size!=0)for(i=*num;ip;i-)arri=arri-1;arri.no=arri.no+1;arrp+1=t;*num=*num+1;return *num;三、输出分区使用情况对分区表进行遍历,输出各个分区的信息(编号,大小,起始,状态)。其中 为了简单易懂,若状态为0则输出空闲,否则输出已分配。void fun_print(fenqubiao *arr,int num)int i=0;prin tf(编号大小起始状态n);for(i=0;inum;i+)printf(%2d%7d%7d,arri.no,arri.size,

6、arri.start); if(arri.state=1)printf (“ 已分配n);elseprin tf(“空闲 n);四、回收分区对所要回收的分区,则有四种情况。1、上临空闲,下临空闲:修改上一个分区大小为三个分区大小之和,下临区 之后的分区改变其分区编号,往前移两个。2、上临空闲:修改上一个分区大小为两个分区大小之和,下临区之后的分区 上移一个单位。3、下临空闲:修改当前分区大小为两个分区大小之和,修改状态为未分配。 然后下临区之后的分区上移一个单位。4、上下均无空闲:直接修改状态为未分配。如果具体代码如下:void fun_huishou(int no,int *num,fenq

7、ubiao *arr)int i=0;int p=0;for(i=1;i=*num;i+)if(arri.no=no)p=i;break;if(arrp-l.s tat e=0 & arrp+l.s tat e=0)/上下临区arrp-1.size=arrp-1.size+arrp.size+arrp+1.size;for(i=p;i*num-1;i+)arri=arri+2;arri.no=arri.no-2;*num=*num-2;else if(arrp+l.s tat e=0)/下临区arrp.size=arrp.size+arrp+1.size; arrp.state=0;for(i

8、=p+1;i*num;i+)arri=arri+1;arri.no=arri.no-1;*num=*num-1;else if(arrp-1.state=0) /上临区arrp-1.size=arrp-1.size+arrp.size; for(i=p;i*num;i+)arri=arri+1;arri.no=arri.no-1;*num=*num-1;else /无相邻分区arrp.s tat e=0;(4) 调试分析实验结果截图如下:- C:Us e rsLGQDes Icto p 新建文件夹、Db uigM 次适应算法.exe= = = = = = = = = = = = = =操作系统

9、大实验=题目:模拟实规一个可殳分区存储菅埋系统制作者信息:走国咸益姓万刘许乘学号11040320351104032037:键继续.1rc-狀茨2T空分空空八R=已 謀7 7 2 6 -结M- 2 3 9 - 11111 - -人0 0十:.1 2:超尹0 口区大H贻号SJ542 资大2 6 3&RF 主星R . Tk .1 th 入厶口 0 0 0 0 2 2 -FX1 3 4 5 S 起魚冃己己目冃己己冃冃 上彳西计计酉蒔.一汁酉酉.讦.讦 工笈工S罠工空八务工=己己 束F 吉7 2 2 6 ._-2 3 7 9 1 丄丄 1 1 -.I000205亠丄M丄工3 2号7 K 9 0 一一愉

10、0编丄Z34LTG0 42-+.4 2耳耘010!|_1144TiV C:Use rsLGQDes kt口 新思立毎夹Dub=回收資游请输入回阪并1 10S纟S台0力严 区起号.B 1丄.30.1_b21010束结.7态配配、闲配、闲配配、闲7八SR空空分空空分空空 已已大小102010G725402432起始103040 107 132 172 196状态 已兌配 已务配 ffl 因 fl 已分配空闲请输入回收分区的编号丄结束:4 实验总结首次适应算法,分配时,当进程申请大小为SIZE的内存时,系统从空闲区表 的第一个表目开始查询,直到首次找到等于或大于SIZE的空闲区。从该区中划出 大小为

11、SIZE的分区分配给进程,余下的部分仍作为一个空闲区留在空闲区表中, 但要修改其首址和大小。回收时,按释放区的首址,查询空闲区表,若有与释放区相邻的空闲区,则 合并到相邻的空闲区中,并修改该区的大小和首址,否则,把释放区作为一个空 闲区,将其大小和首址按照首地址大小递增的顺序插入到空闲区表的适当位置。 这里,采用数组的方式,模拟内存分配首次适应算法,动态的为作业分配内存块。 可以根据作业名称回收已分配的内存块,当空闲内存块相邻时,则合并,不相邻 是,直接插入。通过此次的实验,让我对内存分配中首次适应算法更加熟悉,还通过这次实 验了解了分配空间的另外两种方法:最佳和最坏算法。通过编程模拟实现操作

12、系 统的可变分区存储管理的功能,一方面加深对原理的理解,另一方面提高根据已 有原理通过编程解决实际问题的能力,为进行系统软件开发和针对实际问题提出 高效的软件解决方案打下基础。5附录程序源代码#include typedef structint no; /定义分区编号int size; /定义大小int start; /定义分区起始位置 int state; /定义分区状态,已分配或未分配fenqubiao;int fun_alloca te(i nt x,i nt *n um,fenqubiao * arr);/分 区算法,分配成功返回 分区数,否则返回0void fun_print(fenqubiao *arr,int num); /输出当前分区表状态 void fun_huishou(int no,int *num,fenqubiao *arr);int main()fenqubiaoarr50=1,10,0,0,2,20,10,1,3,10,30,0,4,12,40,0,5,30,52,1, 6,25,82,0,7,20,107,0,8,5,127,1,9,64,132,0,10,32,196,0;int num=10;/用于统计分区个数puts(|=操作系统大实验=puts(|puts(|题目:模拟实现一个可变分区存储管理系统puts(|puts

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 电气技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号