操作系统课程设计报告-主存空间的分配与回收Word文件下载.doc
- 文档编号:357434
- 上传时间:2023-04-28
- 格式:DOC
- 页数:15
- 大小:101.50KB
操作系统课程设计报告-主存空间的分配与回收Word文件下载.doc
《操作系统课程设计报告-主存空间的分配与回收Word文件下载.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计报告-主存空间的分配与回收Word文件下载.doc(15页珍藏版)》请在冰点文库上搜索。
程序框图及流程图
程序框图:
程序流程图:
主要源代码及注释
#include<
stdio.h>
stdlib.h>
string.h>
#defineOK1
#defineERROR0
typedefintStatus;
typedefstructnode//定义一个空闲区说明表结构
{
intnum;
//分区序号
longstart;
//起始地址
longlength;
//分区大小
intstate;
//分区状态
chartag[20];
//作业名称
}job;
typedefstructNode//线性表的双向链表存储结构
jobdata;
structNode*prior;
//前趋指针
structNode*next;
//后继指针
}Node,*LinkList;
LinkListfirst;
//头结点
LinkListend;
//尾结点
intflag;
//记录要删除的分区序号
StatusInitblock()//开创带头结点的内存空间链表
{
first=(LinkList)malloc(sizeof(Node));
end=(LinkList)malloc(sizeof(Node));
first->
prior=NULL;
next=end;
end->
prior=first;
next=NULL;
data.num=1;
data.start=0;
data.length=600;
data.state=0;
strcpy(end->
data.tag,"
无作业"
);
returnOK;
}
voidsort()//分区序号重新排序
Node*p=first->
next,*q;
q=p->
next;
for(;
p!
=NULL;
p=p->
next)
{
for(q=p->
q;
q=q->
{
if(p->
data.num>
=q->
data.num)
{
q->
data.num+=1;
}
}
}
//显示主存分配情况
voidshow()
{intflag=0;
//用来记录分区序号
Node*p=first;
p->
data.num=0;
data.length=0;
data.state=1;
strcpy(p->
"
sort();
printf("
\n\t\t》主存空间分配情况《\n"
**********************************************************\n\n"
分区序号\t作业名\t\t起始地址\t分区大小\t分区状态\n\n"
p=p->
while(p)
{
printf("
%d\t\t%s\t\t%d\t\t%d"
p->
data.num,p->
data.tag,p->
data.start,p->
data.length);
if(p->
data.state==0)printf("
\t\t空闲\n\n"
elseprintf("
\t\t已分配\n\n"
p=p->
}
//首次适应算法
StatusFirst_fit(intrequest,charname[20])
//为申请作业开辟新空间且初始化
Node*p=first->
LinkListtemp=(LinkList)malloc(sizeof(Node));
temp->
data.length=request;
strcpy(temp->
data.tag,name);
p->
while(p)
if((p->
data.state==0)&
&
(p->
data.length==request))
{//有大小恰好合适的空闲块
p->
returnOK;
break;
elseif((p->
data.state==0)&
(p->
data.length>
request))
{//有空闲块能满足需求且有剩余
temp->
prior=p->
prior;
next=p;
data.start=p->
data.start;
data.num=p->
data.num;
p->
prior->
next=temp;
prior=temp;
data.start=temp->
data.start+temp->
data.length;
data.length-=request;
returnOK;
}
p=p->
returnERROR;
//最佳适应算法
StatusBest_fit(intrequest,charname[20])
intch;
//记录最小剩余空间
Node*q=NULL;
//记录最佳插入位置
LinkListtemp=(LinkList)malloc(sizeof(Node));
temp->
strcpy(temp->
p->
while(p)//初始化最小空间和最佳位置
{
if((p->
=request))
{
if(q==NULL)
{
q=p;
ch=p->
data.length-request;
}
elseif(q->
data.length>
p->
data.length)//找到最小插入空闲块
{
q=p;
ch=p->
}
p=p->
if(q==NULL)returnERROR;
//没有找到空闲块
elseif(q->
data.length==request)//相等字节写入
q->
returnOK;
else//不相等,把节点插入链表
temp->
prior=q->
next=q;
data.start=q->
data.num=q->
q->
data.start+=request;
data.length=ch;
returnOK;
//最差适应算法
StatusWorst_fit(intrequest,charname[20])
intch;
//记录最大剩余空间
Node*p=first->
Node*q=NULL;
LinkListtemp=(LinkList)malloc(sizeof(Node));
temp->
strcpy(temp->
while(p)//初始化最大空间和最佳位置
data.state==0&
if(q==NULL)
{
q=p;
ch=p->
elseif(q->
data.length<
data.length)//找到插入最大空闲快
q=p;
ch=p->
}
if(q==NULL)returnERROR;
elseif(q->
data.length==request)
q->
data.length=1;
else
temp->
q->
returnOK;
//主存回收
Statusrecovery(intflag)
next)
if(p->
data.num==flag)
{
if(p->
prior==first)
{
if(p->
next!
=end)//当前P指向的下一个不是最后一个时
{
if(p->
next->
data.state==0)//与后面的空闲块相连
{
p->
data.length+=p->
prior=p;
next=p->
strcpy(p->
data.num=flag;
}
else
{
p->
strcpy(p->
}
}
next==end)//当前P指向的下一个是最后一个时
p->
strcpy(p->
}//结束if(p->
prior==block_first)的情况
elseif(p->
prior!
=first)
=end)
{
deal1(p);
}
else
deal2(p);
=block_first)的情况
}//结束if(p->
data.num==flag)的情况
printf("
\t****回收成功****"
returnOK;
//主函数
voidmain()
inti;
//操作选择标记
inta;
//算法选择标记
printf("
**********************************************************\n"
\t\t用以下三种方法实现主存空间的分配\n"
\t
(1)首次适应算法\t
(2)最佳适应算法\t(3)最差适应算法\n"
printf("
\n"
请输入所使用的内存分配算法:
scanf("
%d"
&
a);
while(a<
1||a>
3)
输入错误,请重新输入所使用的内存分配算法:
scanf("
switch(a)
{
case1:
\n\t****使用首次适应算法:
****\n"
break;
case2:
\n\t****使用最佳适应算法:
case3:
\n\t****使用最坏适应算法:
}
Initblock();
//开创空间表
while
(1)
show();
printf("
\t1:
分配内存\t2:
回收内存\t0:
退出\n"
请输入您的操作:
scanf("
i);
if(i==1)
allocation(a);
//分配内存
elseif(i==2)//内存回收
{
printf("
请输入您要释放的分区号:
scanf("
flag);
recovery(flag);
}
elseif(i==0)
{
printf("
\n退出程序\n"
break;
//退出
}
else//输入操作有误
输入有误,请重试!
continue;
程序测试及结果分析
程序测试:
初始化:
显示功能:
实验总结
这次实验比较复杂,用了很多时间,但同时收获了很多,对主存空间分配认识加深了很多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告 主存 空间 分配 回收
![提示](https://static.bingdoc.com/images/bang_tan.gif)