进程管理实验设计报告.docx
《进程管理实验设计报告.docx》由会员分享,可在线阅读,更多相关《进程管理实验设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
进程管理实验设计报告
实验1进程管理
班级:
xxxx学号:
xxxxxxxxxxxxxxxxxxx姓名:
xxxxx
上级日期:
2018年9月20日成绩:
一、实验目的:
1、理解进程的概念,明确进程和程序的区别。
2、理解并发执行的实质。
3、掌握进程的创建、睡眠、撤销等进程控制方法
二、实验内容
1、源代码
#include"stdio.h"/*标准输入输出*/
#include"conio.h"/*控制台输入输出*/
#include"stdlib.h"/*标准库头文件,包含C常用函数*/
structPCB_type
{intpid;
intyouxianji;
intdaxiao;
charneirong[10];
intstate;/*0表示不在内存,1表示在内存,2表示挂起*/
};
structPCB_typeneicun[20];
intnum=0,guaqi=0,bj,i,j,pid;/*定义相关参数变量*/
/*********************创建新进程*************************/
voidcreate()
{
if(num>=20)/*判断是否有存储空间*/
printf("\n内存已满,请删除或挂起其他程序");
else{
for(i=0;i<20;i++)
if(neicun[i].state==0)break;/*按顺序在内存中寻找创建新进程的空间*/
printf("\n请输入新建进程的pid值\n");
scanf("%d",&neicun[i].pid);
for(j=0;j
if(neicun[j].pid==neicun[i].pid)
{printf("\n该进程已存在于内存中");
return;
}
printf("\n请输入新进程的优先级\n");
scanf("%d",&neicun[i].youxianji);
printf("\n请输入新进程的大小\n");
scanf("%d",&neicun[i].daxiao);
printf("\n请输入新进程的内容\n");
scanf("%s",&neicun[i].neirong);
neicun[i].state=1;/*将进程状态设为1,表示在内存中*/
num++;/*内存中进程数目加一*/
}
}
/********************查看当前运行进程**************************/
voidrun()
{bj=0;
for(i=0;i<20;i++)
if(neicun[i].state==1)/*若进程状态设为1,表示在内存中,输出查看*/
{printf("\npid=%d",neicun[i].pid);
printf("youxianji=%d",neicun[i].youxianji);
printf("daxiao=%d",neicun[i].daxiao);
printf("neirong=%s",neicun[i].neirong);
bj=1;/*存在于内存中的进程标记为1*/
}
if(bj==0)
printf("\n当前没有运行该进程\n");/*标记为0,表示该进程未创建于内存中*/
}
/********************换出进程***************************/
voidhuanchu()
{if(num==0)/*num=0,表示内存中无进程*/
{printf("\n当前没有运行的进程\n");
return;
}
printf("\n请输入要换出的进程的pid值\n");
scanf("%d",&pid);
bj=0;
for(i=0;i<20;i++)
{
if(pid==neicun[i].pid)
{if(neicun[i].state==1)
{neicun[i].state=2;/*将该进程的状态设为挂起*/
guaqi++;
printf("\n该进程已成功挂起换出\n");
}
elseif(neicun[i].state==0)
printf("\n要换出的进程不存在\n");
elseprintf("\n要换出的进程已经被挂起\n");
bj=1;break;
}
}
if(bj==0)printf("\n要换出的进程不存在\n");
}
/********************杀死进程***************************/
voidkill()
{
if(num==0)
{printf("\n当前没有运行的进程\n");
return;
}
printf("\n请输入要杀死的进程的pid值\n");
scanf("%d",&pid);
bj=0;
for(i=0;i<20;i++)
{
if(pid==neicun[i].pid)
{if(neicun[i].state==1)
{neicun[i].state=0;/*将该进程的状态设为不在内存中*/
num--;/*内存中的进程数目减少一个*/
printf("\n该进程已成功杀死\n");
}
elseif(neicun[i].state==0)
printf("\n要杀死的进程不存在\n");
elseprintf("\n要杀死的进程已经被挂起\n");/*剩余状态为2,挂起*/
bj=1;break;
}
}
if(bj==0)printf("\n要杀死的进程不存在\n");
}
/********************唤醒进程***************************/
voidhuanxing()
{
if(num==0)
{printf("当前没有运行的进程\n");
return;
}
if(guaqi==0)/*guaqi=0,表示没有挂起的进程*/
{printf("\n当前没有换出的进程\n");
return;
}
printf("\n请输入要唤醒的进程的pid值:
\n");
scanf("%d",&pid);
for(i=0;i<20;i++){
if(pid==neicun[i].pid)
{
if(neicun[i].state==2)
{neicun[i].state=1;/*将该进程的状态设为挂起*/
guaqi--;
num++;
printf("\n该进程已成功唤醒\n");
}
elseif(neicun[i].state==0)
printf("\n要唤醒的进程不存在\n");
elseprintf("\n要唤醒的进程已经在内存中\n");
}
}
}
/********************主程序***************************/
voidmain()
{intxuhao,n=1,i;
for(i=0;i<20;i++)
neicun[i].state=0;/*使所有进程都初始设为不在内存中*/
while(n){
printf("\n**********************************************");
printf("\n*进程演示系统*");
printf("\n**********************************************");
printf("\n1.创建新的进程2.查看运行进程");
printf("\n3.换出某个进程4.杀死运行进程");
printf("\n5.唤醒某个进程6.退出程序");
printf("\n**********************************************");
printf("\n请选择(1~6):
");
scanf("%d",&xuhao);
switch(xuhao)
{
case1:
create();break;
case2:
run();break;
case3:
huanchu();break;
case4:
kill();break;
case5:
huanxing();break;
case6:
exit(0);
default:
n=0;
break;
}
}
}
2、流程图
分:
①创建进程
②查看进程
③唤出进程
④杀死进程
⑤唤醒进程
合:
三、实验结果
1、创建进程
2、查看运行进程
3、换出进程
4、杀死运行进程
5、唤醒进程