可变分区存储管理Word文档格式.docx
- 文档编号:21619919
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:178.36KB
可变分区存储管理Word文档格式.docx
《可变分区存储管理Word文档格式.docx》由会员分享,可在线阅读,更多相关《可变分区存储管理Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
intj;
/*分区名*/
intlen;
/*大小*/
charstate;
/*状态:
'
e'
'
f'
a'
*/
intsaddre;
/*起始地址*/
structspd*next;
}*rspd=null,*p;
structjcb{
charname[10];
intxk;
intsadd;
structjcb*next;
}*jp,*ready;
typedefstructspdSPD;
typedefstructjcbJCB;
voidmainmenu();
voidinput();
voiddisp0();
voiddisp();
voidinitm();
voidallationm();
voidfreem();
voidinitm()
{/*初始化*/
p=getpch(SPD);
p->
j=1;
len=maxm;
state='
;
saddre=0;
rspd=p;
rspd->
next=null;
}
voiddisp2()
{
JCB*first;
inti=0;
first=ready;
if(ready!
=null)
{
printf("
\n内存中现有作业:
\n"
);
while(first!
{
%s\t"
first->
name);
i++;
if(i==5)printf("
first=first->
next;
}
elseprintf("
内存中无作业.\n"
voidinput()
{JCB*first;
\n请输入作业名:
"
scanf("
%s"
&
=null){
if(strcmp(name,jp->
name)==0)
\n此文件名已存在,请重新输入:
elsefirst=first->
\n请输入作业所需的内存空间:
%d"
xk);
if(xk>
600||xk<
0){
\n请重新输入作业所需的内存空间:
jp=getpch(JCB);
strcpy(jp->
name,name);
jp->
xk=xk;
sadd=null;
if(ready==null){/*排序*/
ready=jp;
ready->
else{
while(first->
next!
first->
next=jp;
voidallationm()
intflag=0;
SPD*first;
first=rspd;
input();
if(first->
state=='
&
first->
len>
=jp->
xk){
jp->
sadd=first->
saddre;
j=first->
j+1;
len=first->
len-jp->
xk;
len=jp->
saddre=first->
saddre+jp->
next=first->
next=p;
flag=1;
while(p->
next->
j=p->
p=p->
if(flag==1)break;
if(first==null){
内存不足.\n"
getch();
voidfreem()
{JCB*first,*second,*pp;
SPD*pre;
intadd=null,i;
intflag=0,flag1=0;
longtemp;
disp2();
\n请输入要撤销的作业名:
xk=null;
pre=rspd;
p=pre->
second=first->
/*寻找要撤销的作业,并撤销它*/
if(strcmp(first->
name,jp->
ready=second;
add=first->
sadd;
free(first);
while(flag==0&
second!
if(strcmp(second->
next=second->
second->
add=second->
free(second);
break;
if(second->
second=second->
elsebreak;
/*找出作业的内存地址,释放之*/
if(add==pre->
saddre&
flag==1){
flag1=1;
pre->
if(p->
)
len=p->
len+pre->
len;
next=p->
while(pre->
pre->
j=pre->
j-1;
pre=pre->
free(p);
while(flag==1&
flag1==0&
p!
i=add;
pp=ready;
if(add==p->
saddre){
if(pre->
){
=null&
p->
len=pre->
len+p->
p=rspd;
j-2;
else{
pre=p->
free(pre);
}
elsep->
}/*if*/
if(flag1==1)break;
}/*while*/
if(flag==0)printf("
\n作业不存在,无法撤消.\n"
if(flag1==1)
{printf("
\n...正在撤消\n"
for(temp=1;
temp<
=30000000;
temp++)
{};
作业撤消完毕.\n"
free(jp);
disp0();
voiddisp0()
{/*显示空闲链表*/
\n主存空间的分配情况为:
分区号作业名起始地址分区大小分配情况\n"
while(p!
%4d"
p->
j);
if(first!
\t%s"
\t\t%4dkB"
saddre);
else
\t%4dkB"
\t%4dkB"
len);
)printf("
未分配"
已分配"
voiddisp()
{disp0();
按任意键返回选择执行操作.\n"
voidmain()
{/*界面*/
initm();
intc;
****************************\n"
*主存空间的分配与回收*\n"
1.分配内存2.回收内存3.显示分配4.退出\n"
while
(1)
\n请选择要执行的操作(1~4):
c);
if(c>
4||c<
1)
输入错误,请重新输入:
continue;
switch(c){
case1:
allationm();
case2:
if(ready!
=null)freem();
else{printf("
\n内存中没有作业.\n"
}
case3:
disp();
break;
case4:
gotoend;
end:
getchar();
5、程序运行时初值和运行结果
1.运行结果
(1)初始界面
(2)分配内存演示结果
(3)显示分配演示结果
(4)回收内存演示结果
6、实验总结
通过本次实验加深了对循环首次适应算法,内存分配与回收的机制的理解,也巩固了C++程序语言设计的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可变 分区 存储 管理
![提示](https://static.bdocx.com/images/bang_tan.gif)