短进程优先算法C语言实现
1、本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单。
短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存运行。
2、实验说明:
(1)PCB:
①作业号 ②到达时间 ③需要运行时间 ④开始时间 ⑤完成时间 ⑥周转时间 ⑦带权周转时间
(2)公式:
完成时间 = 开始时间 + 需要运行时间
周转时间 = 完成时间 - 到达时间
带权周转时间 = 周转时间 / 需要运行时间
(3)附:当全部进程执行完毕,
①打印出平均带权周转时间
②打印出调度顺序
③打印出平均周转时间
最先到的进程从0时刻到达,首先开始执行它。
比较处于等待队列中的进程的需要运行时间, 谁的需要运行时间短就先执行谁,如果需要运行时间相同则看它们的到达时间,到达时间早的先执行。
3、源代码:
#include
#include
#include
#define TAKEIN "Takein"//吸纳状态
#define WAIT "Wait"//就绪状态
#define RUN "Run"//运行状态
#define FINISH "Finish"//完成状态
#define JOBNUMBER 5 //设置进程测试数为5
#define MIN 100
typedef struct PCB{
char jobName[10];//作业号
int arriveTime;//到达时间
int runTime;//需要运行时间
int startTime;//开始时间
int endTime;//完成时间
int turnoverTime;//周转时间
float useWeightTurnoverTime;//带权周转时间
char processStatus[10];//进程状态
};
static int currentTime = 0;
static int finishNumber = 0;
char JobArray[JOBNUMBER][10];
static int indexJob = 1;
//创建PCB
void createPCB(struct PCB* pcb){
freopen("input.txt","r",stdin);
printf("从文件中读入三个参数的数据:\n");
printf("作业号 到达时间 需要运行时间\n");
for(int i = 0; i < 5; i++){
scanf("%s", &pcb[i].jobName);//作业号
scanf("%d", &pcb[i].arriveTime);//到达时间
scanf("%d", &pcb[i].runTime);//需要运行时间
pcb[i].startTime = 0;
pcb[i].endTime = 0;
pcb[i].turnoverTime = 0;
pcb[i].useWeightTurnoverTime = 0.0;
strcpy(pcb[i].processStatus, TAKEIN);
printf("%s\t%d\t%d\n",pcb[i].jobName, pcb[i].arriveTime,pcb[i].runTime);
}
printf("---------------------------------