What is round robin scheduling :-
- In this technique ready queue is treated as circular queue.
- In this technique each process is provided a fix time execute which is called time quantum (or time slice).
- CPU goes around the ready queue allocating the CPU to each process for a time interval up to 1 time quantum.
- It is only preemptive.
- This algorithm gives minimum average response time for a given set of process.
- Widely used scheduling method in traditional OS.
- It is designed especially for time sharing system or multi-tasking system.
Code:-
#include<stdio.h>
struct process
{
int id,AT,BT,WT,TAT;
};
struct process a[10];
// declaration of the ready queue
int queue[100];
int front=-1;
int rear=-1;
// function for insert the element
// into queue
void insert(int n)
{
if(front==-1)
front=0;
rear=rear+1;
queue[rear]=n;
}
// function for delete the
// element from queue
int delete()
{
int n;
n=queue[front];
front=front+1;
return n;
}
int main()
{
int n,TQ,p,TIME=0;
int temp[10],exist[10]={0};
float total_wt=0,total_tat=0,Avg_WT,Avg_TAT;
printf("Enter the number of the process\n");
scanf("%d",&n);
printf("Enter the arrival time and burst time of the process\n");
printf("AT BT\n");
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i].AT,&a[i].BT);
a[i].id=i;
temp[i]=a[i].BT;
}
printf("Enter the time quantum\n");
scanf("%d",&TQ);
// logic for round robin scheduling
// insert first process
// into ready queue
insert(0);
exist[0]=1;
// until ready queue is empty
while(front<=rear)
{
p=delete();
if(a[p].BT>=TQ)
{
a[p].BT=a[p].BT-TQ;
TIME=TIME+TQ;
}
else
{
TIME=TIME+a[p].BT;
a[p].BT=0;
}
//if process is not exist
// in the ready queue even a single
// time then insert it if it arrive
// at time 'TIME'
for(int i=0;i<n;i++)
{
if(exist[i]==0 && a[i].AT<=TIME)
{
insert(i);
exist[i]=1;
}
}
// if process is completed
if(a[p].BT==0)
{
a[p].TAT=TIME-a[p].AT;
a[p].WT=a[p].TAT-temp[p];
total_tat=total_tat+a[p].TAT;
total_wt=total_wt+a[p].WT;
}
else
{
insert(p);
}
}
Avg_TAT=total_tat/n;
Avg_WT=total_wt/n;
// printing of the answer
printf("ID WT TAT\n");
for(int i=0;i<n;i++)
{
printf("%d %d %d\n",a[i].id,a[i].WT,a[i].TAT);
}
printf("Average waiting time of the processes is : %f\n",Avg_WT);
printf("Average turn around time of the processes is : %f\n",Avg_TAT);
return 0;
}
Output:-
Enter the number of the process
3
Enter the arrival time and burst time of the process
AT BT
0 5
2 7
4 6
Enter the time quantum
3
ID WT TAT
0 3 8
1 9 16
2 7 13
Average waiting time of the processes is : 6.333333
Average turn around time of the processes is : 12.333333
Recommended post:-
Hackerearth Problems:-
- Very Cool numbers | Hacker earth solution
- Birthday party | Hacker earth solution
- Most frequent | hacker earth problem solution
- program to find symetric difference of two sets
- cost of balloons | Hacker earth problem solution
- Chacha o chacha | hacker earth problem solution
- jadu and dna | hacker earth solution
- Bricks game | hacker earth problem
- Anti-Palindrome strings | hacker earth solution
- connected components in the graph | hacker earth data structure
- odd one out || hacker earth problem solution
- Minimum addition | Hackerearth Practice problem
- The magical mountain | Hackerearth Practice problem
- The first overtake | Hackerearth Practice problem
Data structure:-
- Program to find cycle in the graph
- Implementation of singly link list
- Implementation of queue by using link list
- Algorithm of quick sort
- stack by using link list
- program to find preorder post order and inorder of the binary search tree
- Minimum weight of spanning tree
- Preorder, inorder and post order traversal of the tree
Key points:-
- How to set limit in the floating value in python
- What is boolean data type
- How to print any character without using format specifier
1 Comments
Thank You Very Much For Providing such a good Program.
ReplyDelete