固定分区存储管理-操作系统.doc
《固定分区存储管理-操作系统.doc》由会员分享,可在线阅读,更多相关《固定分区存储管理-操作系统.doc(5页珍藏版)》请在冰豆网上搜索。
昆明理工大学信息工程与自动化学院学生实验报告
(2013—2014学年第一学期)
课程名称:
操作系统开课实验室:
2014年11月6日
年级、专业、班
学号
姓名
成绩
实验项目名称
固定分区存储管理
指导教师
教师评语
该同学是否了解实验内容与要求:
A.了解□ B.基本了解□ C.不了解□
设计思想或流程图是否正确:
A.正确□ B.基本正确□ C.较差□
该同学的实验能力:
A.强□ B.中等□ C.差□
该同学的实验是否达到要求:
A.达到□ B.基本达到□ C.未达到□
实验报告是否规范:
A.规范□ B.基本规范□ C.不规范□
是否有运行结果与分析:
A.详细□ B.一般□ C.没有□
是否有总结与体会:
A.详细□ B.一般□ C.没有□
教师签名:
年月日
注:
报告内容按下列的要求进行。
一、实验目的
1.通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。
2.通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的内存分配和回收。
二、实验题目
设计一个固定分区分配的存储管理方案,并模拟实现分区的分配和回收过程。
必须建立分区表,记录空闲区与占用区的状况。
流程图按选定的算法自己完成。
三、算法设计的思想或流程图
本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。
如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。
当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。
四、源程序代码
#include
#include
#include
#defineNUM4
#definealloMemory(type)(type*)malloc(sizeof(type))
structpartiTab
{
intno;
intsize;
intfirstAddr;
charstate;
}parTab[NUM];
typedefstructpartiTabPARTITAB;
typedefstructjcb{
charname[10];
intsize;
structjcb*link;
}JCB;
typedefstruct
{
JCB*front,*rear;
}jcbQue;
jcbQue*jcbReadyQue;
voidAllocateMemory(intsize);
voidcreateTab();
voidcheckTab();
voidrecycleMemory(inti);
voidAllocateMemory(intsize)
{
for(inti=0;i {
PARTITABp=parTab[i];
if(p.state='N'&&p.size>size)
parTab[i].state='Y';
else
printf("没有空闲分区,无法分配内存!
\n");
}
}
voidcreateTab()
{
for(inti=1;i<=NUM;i++)
{
//getPartiTab(PARTITAB);
parTab[i-1].no=i;
parTab[i-1].size=20;
parTab[i-1].firstAddr=21;
parTab[i-1].state='N';
}
}
voidcheckTab()
{
printf("分区号\t大小\t起址\t状态\n");
for(inti=0;i {
printf("%d\t",parTab[i].no);
printf("%d\t",parTab[i].size);
printf("%d\t",parTab[i].firstAddr);
printf("%c\t",parTab[i].state);
printf("\n");
}}
voidrecycleMemory(inti)
{
parTab[i-1].state='N';
}
intmain(intargc,char*argv[])
{
createTab();
checkTab();
printf("请按任意键继续:
\n");
getchar();
printf("每个分区装入一道作业:
\n");
for(inti=0;i {
AllocateMemory((i+1)*3);
}
checkTab();
printf("请按任意键继续:
\n");
getchar();
printf("假如一段时间后,其中一个作业结束,回收给它分配的分区(假如该作业在第2分区)\n");
recycleMemory
(2);
checkTab();
printf("请按任意键继续:
\n");
getchar();
printf("接着,从外存后备作业队列中选择一个作业装入该分区(假如该作业大小为10)\n");
AllocateMemory(10);
checkTab();
return0;
}
五、运行结果与分析
固定分区式分配是最简单的一种可运行多道程序的存储管理方式。
将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,把用户空间划分为几个分区,便允许有几道作业并发运行。
当有一空间时,便可以再从外存的后备作业队列中选择一个适当大小的作业装入该分区,当该作业结束时,又可再从后备作业队列中找出另一作业调入该分区。
六、总结体会
这次实验是通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。
通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的内存分配和回收。
通过这次实验,我在收获了不少的同时,也认识到了自己的不足,我会在以后的学习生活中更加努力,更加认真。
-5-