实验二、pcb进程
专业 网络工程 姓名 方俊晖 学号 201406114309
一、 实验目的
通过本实验可以加深对有关进程控制块、进程队列的概念的进一步理解。
二、 实验内容和要求
1.进程PCB的结构体定义
2.定义结构体
3.输入进程序列
4.排序(按到位时间)
5.输出进程运行的结果
三、 实验方法、步骤及结果测试
#include<stdio.h>
typedef struct PCB
{
int time;
int member;
int head;
int end;
}pcb;
void main()
{
int a,b,c,flag=0;
pcb i[10],j;
printf("请输入进程个数:");
scanf("%d",&a);
for( b=0;b<a;b++){
printf("请输入第%d个进程时间:",b+1);
scanf("%d",&b[i].time);
i[b].member=b+1;
i[b].head=i[b].end=0;
}
for(b=0;b<a;b++)
{
for(c=0;c<a;c++)
{
if(i[c].time>i[b].time)
{
j=i[b];
i[b]=i[c];
i[c]=j;
}
}}
for(b=0;b<a;b++)
{
for(c=0;c<=i[b].time;c++)
{
if(c==i[b].time)
{
i[b].head=flag;
i[b].end=flag=flag+c;
printf("进程名称:%d\n完成用时为:%d\n所需时间为:%d \n\n",i[b].member,c,flag);
}
}
}
for(b=0;b<a;b++)
{
printf("执行第%d个进程\n开始时间:%d\n结束时间:%d\n",i[b].member,i[b].head,i[b].end);
}
}
2.原理分析
主函数:实现对函数的运用
void main()
{
int a,b,c,flag=0;
pcb i[10],j;
printf("请输入进程个数:");
scanf("%d",&a);
for( b=0;b<a;b++){
printf("请输入第%d个进程时间:",b+1);
scanf("%d",&b[i].time);
i[b].member=b+1;
i[b].head=i[b].end=0;
}
for(b=0;b<a;b++)
{
for(c=0;c<a;c++)
{
if(i[c].time>i[b].time)
{
j=i[b];
i[b]=i[c];
i[c]=j;
}
}}
for(b=0;b<a;b++)
{
for(c=0;c<=i[b].time;c++)
{
if(c==i[b].time)
{
i[b].head=flag;
i[b].end=flag=flag+c;
printf("进程名称:%d\n完成用时为:%d\n所需时间为:%d \n\n",i[b].member,c,flag);
}
}
}
for(b=0;b<a;b++)
{
printf("执行第%d个进程\n开始时间:%d\n结束时间:%d\n",i[b].member,i[b].head,i[b].end);
}
}
定义结构体:
typedef struct PCB
{
int time;
int member;
int head;
int end;
}pcb;
实验结果:
实验总结
遇到问题:
长时间没有用过C++,对C++的运用不太灵活,对结构体的定义,因此在这过程中需要对PCB进程管理反复试验,才能完成。