#include
float avg_wt,avg_tt; int i = 0,ttl_wt=0,ttl_tt=0,qt;
struct process
{
int prn; char type; int bt; int wt; int tt; struct process *nxt;
}*stfor,*stbck,*np,*endfor,*endbck,*temp;
void ins_node(struct process *np)
{
if(np->type == 'f') { if(stfor == NULL) stfor = endfor = np; else { endfor->nxt = np; endfor = np; } } else { if(stbck == NULL) stbck = endbck = np; else { endbck->nxt = np; endbck = np; } }
}
void del_node(struct process *np,int choice)
{
if(np->type == 'f') { if(stfor == endfor) stfor = NULL; else stfor = stfor->nxt; if(choice == 1) delete np; } else { if(stbck == endbck) stbck = NULL; else stbck = stbck->nxt; delete np; …show more content…
}
}
void ins_dat()
{
char ch; int j=0; stfor = endfor = stbck = endbck = NULL; do { np = new process; np->prn = ++j; printf("\n Enter the Burst time of Process #%d : ",np->prn); scanf("%d",&np->bt); printf("\n Enter the type of Process #%d (f-foreground or b-background): ",np->prn); np->type = getche(); if(np->type == 'f') np->nxt = stfor; else np->nxt = NULL; np->wt = np->tt = 0; ins_node(np); printf("\n\n Continue ??
: "); ch = getche(); }while(ch == 'y' || stfor == NULL);
}
void …show more content…
Round_Robin()
{
getch(); printf("\n\n Foreground RR Process Scheduling (Quantum Size = %d)\n\n",qt); printf("\n\n Process Burst Time Waiting Time Turnaround Time \n"); printf(" ------------------------------------------------------- \n"); temp = stfor; do { printf(" %d \t\t %d \t\t",stfor->prn,stfor->bt); stfor->wt += (temp->tt - stfor->tt); if(qt >= stfor->bt) { stfor->tt = temp->tt + stfor->bt; stfor->bt = 0;
printf(" %d \t\t %d\n\n",stfor->wt,stfor->tt); ttl_wt += stfor->wt; ttl_tt += stfor->tt; temp = np = stfor; del_node(np,1); ++i; } else { stfor->bt -= qt; stfor->tt = temp->tt + qt; printf(" %d \t\t %d\n\n",stfor->wt,stfor->tt); np = temp = stfor; del_node(np,2); ins_node(temp); } }while(stfor != NULL);
}
void FCFS()
{
getch(); printf("\n\n Background FCFS Process Scheduling \n\n"); printf("\n\n Process Burst Time Waiting Time Turnaround Time \n"); printf(" ------------------------------------------------------- \n"); do { printf(" %d \t\t %d \t\t",stbck->prn,stbck->bt); stbck->wt = temp->tt; stbck->tt = temp->tt + stbck->bt; printf(" %d \t\t %d\n\n",stbck->wt,stbck->tt); ttl_wt += stbck->wt; ttl_tt += stbck->tt; temp = np = stbck; del_node(np,1); ++i; }while(stbck != NULL);
} void main()
{
clrscr(); printf("\n Enter the Quantum time for Foreground Process : "); scanf("%d",&qt); ins_dat(); if(stfor != NULL) Round_Robin(); if(stfor == NULL && stbck != NULL) FCFS(); avg_wt = (float) ttl_wt/i; avg_tt = (float) ttl_tt/i; printf("\n\n Average Waiting Time : %f",avg_wt); printf("\n Average Turnaround Time : %f",avg_tt); getch();
}