非抢占式优先级

  • 格式:doc
  • 大小:35.00 KB
  • 文档页数:3
}
printf("\n-------------------------------------------------------------------------------\n");
printf("\n-------------------------------调度顺序----------------------------------------\n");
p[k].order=1;
temp_count=1;
while(temp_count<count){
max_priority=0;
for(j=0;j<count;j++){
//判断到达时间是否小于上一个进程的结束时间并且非处在运行状态
if((p[j].AT<=temp_time)&&(!p[j].flag))
}p[MAX];
int count;
//排列到达时间
//按到达时间与优先数计算执行序列
void P()
{
float temp_time=0;
int i=0,j;
int k,temp_count;
int max_priority;
max_priority=p[i].priority;
j=1;
while((j<count)&&(p[i].AT==p[j].AT)){
printf("进程名优先级到达时间运行时间开始时间结束时间周转时间\n");
for(i=0;i<count;i++){
f1=p[i].fT-p[i].AT;
turn_round_time+=f1;
printf("%s %5d %10.2f %8.2f %8.2f %8.2f %8.2f \n",p[i].name,p[i].priority,p[i].AT,p[i].RT,p[i].sT,p[i].fT,f1);
}
}
p[k].sT=temp_time;
p[k].fT=p[k].sT+p[k].RT;
p[k].flag=1;
temp_time=p[k].fT;
temp_count++;
p[k].order=temp_count;
}
}
void input()
{
int i;
printf("\n-------------------------------------------------------------------------------\n");
printf("\n-----------------------------平均周转时间--------------------------------------\n");
printf("平均周转时间=%5.2f\n",turn_round_time/count);
printf("\n-------------------------------------------------------------------------------\n");
printf("\n请输入进程名到达时间运行时间优先数,例如:a 0 100 1\n");
for(i=0;i<count;i++)
{
printf("进程%d的信息:",i+1);
scanf("%s%f%f%d",p[i].name,&p[i].AT,&p[i].RT,&p[i].priority);
非抢占式优先级
#include<stdio.h>
#define MAX 10
struct Process
{
char name[10];
float AT;
float sT;
float RT;
float fT;
int priority;//优先数
int order;//进程执行次序
int flag;//标记进程状态
p[i].sT=0;
p[i].fT=0;
p[i].order=0;
p[i].flag=0;
}
}
void print()
{
int i;
float turn_round_time=0,f1;
printf("\n-------------------------------进程完成信息------------------------------------\n");
if(p[j].priority>p[i].priority){
max_priority=p[j].priority;
i=j;
}
j++;
}
k=i;
p[k].sT=p[k].AT;//开始时间=达到时间
p[k].fT=p[k].sT+p[k].RT;
p[k].flag=1;
temp_time=p[k].fT;
//判断进程优先数是否大于最大优先数,如果大于,就将其值赋给max_priority
if(p[j].priority>max_priority){
max_priority=p[j].priority;
k=j;
}ቤተ መጻሕፍቲ ባይዱ
if(p[j].AT>temp_time)
{ k=j;
temp_time=p[j].AT;
printf("进程名运行次序\n");
for(i=0;i<count;i++){
printf("%s %8d\n",p[i].name,p[i].order);
}
printf("\n-------------------------------------------------------------------------------\n");
}
}
void main()
{
printf("---------------------------非抢占式优先级调度算法----------------------------\n");
printf("进程个数(不大于10):");
scanf("%d",&count);
input();
P();
print();