const NavNode& NavPath::popFront() { const NavNode& node = peekFront(); mNodes.pop_front(); return node; }
void roundRobin(int map[N][5],int proc_count,char filename[]) { QUEUE q; int cur_time=0; int new_proc[N]; int i,k,quantum_used,p,temp,c,cpu_util=0; int blocked[N]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int turn_around[N]; int proc_added=0; q.rear=q.front=-1; FILE *fp=fopen(filename,"w"); fclose(fp); while(1) { int process_state[N]={0}; k=0; for(i=0;i<proc_count;i++) { if(cur_time==map[i][3]) { new_proc[k++]=i; proc_added++; } } for(i=0;i<proc_count;i++) { if(blocked[i]==cur_time) { new_proc[k++]=i; blocked[i]=-1; } } sort_proc(new_proc,k); for(i=0;i<k;i++) insertQ(&q,new_proc[i]); if(q.rear!=q.front) { p=peekFront(q); process_state[p]=1; cpu_util++; quantum_used=(quantum_used+1)%2; map[p][4]++; if(map[p][4]==map[p][1]) { removeQ(&q); quantum_used=0; turn_around[p]=cur_time; } if(quantum_used==0 && map[p][4]!=map[p][1] && map[p][4]!=(map[p][1])/2) { p=removeQ(&q); quantum_used=0; insertQ(&q,p); } if(map[p][4]==(map[p][1])/2) { p=removeQ(&q); quantum_used=0; blocked[p]=map[p][2]+cur_time+1; } } temp=q.front; while(temp!=q.rear) { temp=(temp+1)%N; if(q.arr[temp]!=p) process_state[q.arr[temp]]=2; } for(i=0;i<proc_count;i++) { if(blocked[i]!=-1 && i!=p) { process_state[i]=3; } } printProcessStateToFile(filename,process_state,proc_count,cur_time); c=checkBlocked(blocked,proc_count); if(q.front==q.rear && c && proc_added==proc_count) break; cur_time++; p=-1; } fp=fopen(filename,"a"); fprintf(fp,"\n"); fprintf(fp,"Finishing Time : %d\n",cur_time); fprintf(fp,"CPU utilization : %3.2f\n",(float)cpu_util/(cur_time+1)); for(i=0;i<proc_count;i++) { temp=turn_around[i]-map[i][3]+1; fprintf(fp,"Turnaround process %d : %d\n",i,temp); } fclose(fp); }