进程管理和存储管理算法Word格式.docx
- 文档编号:7021515
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:14
- 大小:16.98KB
进程管理和存储管理算法Word格式.docx
《进程管理和存储管理算法Word格式.docx》由会员分享,可在线阅读,更多相关《进程管理和存储管理算法Word格式.docx(14页珍藏版)》请在冰点文库上搜索。
//初始化内存状态标志数组
for(i=0;
i<
N;
i++)
block[i]=0;
80;
block[rand()%(N-1)]=1;
blockCount=0;
if(block[i]==0)
blockCount++;
//初始化存放进程的数组
i++){
process[i][0]=0;
for(j=1;
j<
j++)
process[i][j]=-1;
}
processCount=0;
printf("
初始化结果如下:
"
);
output();
flag=false;
}
voidoutput()
\n内存总量:
%d块,已用空间:
%d块,剩余空间:
%d块,进程总数:
%d个\n"
N,N-blockCount,blockCount,processCount);
if(flag&
&
blockCount<
N)
{
printf("
已使用的内存块(%d):
\n"
N-blockCount);
for(intk=0,count=0;
k<
k++)
{
if(block[k]==1)
printf("
%2d"
k,++count);
if(count==10)
{
putchar('
\n'
count=0;
}
}
putchar('
//输出各进程占用内存详细情况
if(processCount>
0)
intid;
请输入要查看的进程号:
"
scanf("
%d"
&
id);
内存详细使用情况如下:
//for(inti=0;
//{
if(process[id][0]>
进程号:
%d占用内存块(%2d):
id,process[id][0]);
|------------|\n"
printf("
|页号|块号|\n"
for(intj=1,count=0;
=process[id][0];
{
|%2d|%2d|\n"
count,process[id][j],count++);
//printf("
process[i][j],count++);
/*if(count==15)
{
putchar('
printf("
count=0;
}*/
}
***输出结束***\n"
//putchar('
//}
else
当前内存无进程!
putchar('
voidfirstin()
{
run=ready;
run->
state='
R'
;
ready=ready->
next;
voidprt1(PCB*q)
*%-10d%-10d%-10d%-10d%-10d%-10c*\n"
q->
pid,q->
cputime,q->
needtime,q->
count,q->
round,q->
state);
voidprt()
PCB*q;
*进程号cpu时间所需时间记数时间片状态*\n"
if(run!
=NULL)
prt1(run);
q=ready;
while(q!
=NULL&
q!
=run)
prt1(q);
if(q->
next==run)
break;
elseq=q->
q=finish;
=NULL)
q=q->
getchar();
voidinsert(PCB*q)
tail->
next=q;
tail=tail->
boolcreateProcess()
intna;
intpages,k=0;
PCB*p;
inttime;
//charna[10];
ready=NULL;
finish=NULL;
run=NULL;
输入进程数:
scanf("
M);
for(intj=1;
j<
=M;
j++)
loop:
printf("
请输入进程号(小于%d)和运行时间和所需页面数:
N);
%d%d%d"
&
na,&
time,&
pages);
if(na>
99)
错误!
进程号过大!
gotoloop;
if(pages>
blockCount)
returnfalse;
blockCount-=pages;
process[na][0]=pages;
for(inti=1;
=pages;
while(block[k]==1&
100)
k++;
process[na][i]=k;
block[k]=1;
k++;
p=(PCB*)malloc(sizeof(PCB));
//strcpy(p->
pid,pid);
p->
pid=na;
p->
cputime=0;
needtime=time;
W'
round=0;
count=0;
if(ready!
insert(p);
else
p->
next=ready;
ready=p;
tail=ready;
processCount++;
创建新进程成功!
\n\n"
returntrue;
Roundrun()
inttimeSlice;
//if(processCount<
1)
//printf("
当前程序无进程,请重新输入\n\n"
//return0;
请输入时间片的大小:
//printf("
"
timeSlice);
时间片轮转法输出信息\n"
*****************************************************************************\n"
next=run;
prt();
while(run!
=NULL)
run->
cputime=run->
cputime+timeSlice;
needtime=run->
needtime-timeSlice;
round+=timeSlice;
count++;
if(run->
needtime<
=0)
run->
needtime=0;
next=finish;
finish=run;
if(run!
=tail)
tail->
next=ready;
else
ready=NULL;
state='
F'
run=NULL;
if(ready!
=NULL)
firstin();
run->
tail=run;
run=ready;
run->
state='
ready=ready->
next;
prt();
输出结束\n"
boolendProcess()
intID,pages;
if(processCount<
1)
当前内存没有进程!
当前内存中的进程有%d个,进程号为:
processCount);
for(inti=0;
if(process[i][0]>
printf("
i);
请输入您要结束的进程号(小于%d):
ID);
PCB*p1,*p2;
p1=ready;
while(ID!
=p1->
pid&
p1->
next!
p2=p1;
p1=p1->
if(ID==p1->
pid)
if(p1==ready)
ready=p1->
p2->
next=p1->
已删除进程%d\n"
ID);
对不起!
您所要结束的进程%d不存在,请重新输入\n\n"
/*pages=process[ID][0];
if(pages==0)
该进程不存在!
*/
for(intj=1;
pages;
block[process[ID][j]]=0;
process[ID][j]=-1;
process[ID][0]=0;
processCount--;
blockCount+=pages;
voidmenu()
intchoice;
while(true)
操作菜单:
1-->
创建进程\n2-->
结束进程\n3-->
查看内存\n4-->
运行程序\n0-->
退出程序\n"
请输入您要进行的操作:
choice);
switch(choice)
case1:
if(createProcess())
//else
//printf("
抱歉!
内存空间不足,创建新进程失败!
continue;
case2:
if(endProcess())
进程已结束!
进程结束失败!
case3:
output();
case4:
Roundrun();
case0:
return;
default:
您的选择有误!
请重新选择!
voidmain()
init();
menu();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 管理 存储 算法