赞
踩
#include<stdio.h> #define N 100 struct PCB{ int num; //number进程标号 int at; //arrival time到达时间 int st; //service time服务时间 int ct; //completion time完成时刻 int st1; //剩余服务时间 }pcb[N]; int queue[2*N];//队列存放PCB的下标 int f=0,r=0;//队列头指针,尾指针 int n;//进程个数 int time;//时间片长度 void initPCB() { printf("输入时间片长度:"); scanf("%d",&time); printf("输入任务个数:"); scanf("%d",&n); printf("按照到达时间从小到大输入时间片信息(到达时间、服务时间):\n"); for(int i=0;i<n;i++) { printf("时间片%d:",i); scanf("%d%d",&pcb[i].at,&pcb[i].st); pcb[i].st1=pcb[i].st; } } void prit() { int i; for(i=0;i<n;i++) printf("进程%d的到达时间%d,服务时间%d\n",i,pcb[i].at,pcb[i].st); } void print() { int i; for(i=0;i<n;i++) printf("进程%d的到达时间%d,完成时间%d\n",i,pcb[i].at,pcb[i].ct); } void RR() { prit(); int t=0;//当前时间 queue[f]=0;//队头元素 r++; int ts=0;//当前时间片大小 int p=0;//完成的进程个数 while(p<n) { printf("%d~%d时间内,进程%d在运行\n",t,t+1,queue[f]); t++; ts++; pcb[queue[f]].st1--; for(int i=queue[f]+1;i<n;i++) if(pcb[i].at==t) queue[r++]=i; if(pcb[queue[f]].st1&&ts==time) { queue[r++]=queue[f]; ts=0; } else if(pcb[queue[f]].st1==0) { ts=0; p++; pcb[queue[f]].ct=t; } if(ts==0) f++; } print(); } int main() { initPCB(); RR(); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。