实验二

实验二、pcb进程管理

专业 网络工程  姓名 邓金烨 学号201406114314

一、        实验目的

 了解进程pcb管理与调度

二、        实验内容和要求

结构体定义pcb

输入进程序列

排序(按到位时间)

输出结果

三、        实验方法、步骤及结果测试

 

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
/*定义进程结构体*/
typedef struct pcb {
char name[30];//进程名称
int priority ;//进程优先数
int serveTime;//进程到达时间
int cpuTime;//进程占用CPU时间
char state;//进程状态
} PCB;

Input(PCB p[MAX],int n) {
int i;
for(i=0; i<n; i++) {
printf("第%d个进程的名称:",i+1);
scanf("%s",&p[i].name);
printf("第%d个进程的优先数:",i+1);
scanf("%d",&p[i].priority);
printf("第%d个进程的服务时间:",i+1);
scanf("%d",&p[i].serveTime);
p[i].state='W';
p[i].cpuTime=0;
printf("\n");
}
}

Output(PCB p[MAX],int n) {
int i;
printf("进程名称\t优先级数\t服务时间\t当前时间\t进程状态\n");
for(i=0; i<n; i++) {
printf(" %s\t",p[i].name);
printf("\t%d\t",p[i].priority);
printf("\t%d\t",p[i].serveTime);
printf("\t%d\t",p[i].cpuTime);
printf("\t%c\t",p[i].state);
printf("\n");
}
}

PrioritySort(PCB p[MAX],int n) {
int m=0,i=0,j ;
PCB temp;
m = n;
for(i = 1 ; i < n ; i++) {
m = m - 1 ;
for(j = 0 ; j < m ; j ++) {
if(p[j].priority < p[j+1].priority) {
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp ;
}
}
}
}

Run(PCB p[MAX] , int n) {
int i ,j ;
int m=0;
for(i = 0 ; i < n ; i ++) {
m = p[i].serveTime+m;
}
for(i = 0 ; i < n ; i ++) {
for(j = 0 ; j < m ; j ++) {
printf("请按回车键继续运行......!\n");
getchar();
p[i].priority--;
p[i].cpuTime++;
p[i].serveTime--;
p[i].state='R';
Output(p,n);
if(p[i].serveTime!=0) {
p[i].state='R';
} else {
p[i].state='F';
printf("********第%d个进程的运行完成!********\n",i+1);
break;
}
}
}
}

End(PCB p[MAX] , int n) {
int i ,j ;
for(i = 0 ; i < n ; i ++) {
if(p[i].serveTime==0){
p[i].state='F';
}
}
Output(p,n);
printf("********进程调度结束!********\n",i+1);
}

main() {
PCB p[MAX];
int n,i;
printf("\n *************进程调度算法(最高优先数调度算法)************\n\n");
printf("请输入进程数目:");
scanf("%d",&n);
printf("\n");
Input(p,n);
PrioritySort(p,n);
Output(p,n);
getchar();
Run(p,n);
End(p,n);
}

四、        实验总结

加深了对进程pcb管理与调度,了解进程pcd工作方式

posted @ 2016-04-06 22:41  14邓金烨  阅读(113)  评论(0编辑  收藏  举报