Let us learn how to implement the Round Robin scheduling program in C language with its explanation, output, advantages, disadvantages and much more.
What is Round Robin Scheduling Algorithm?
Before beginning with the C program implementation, let us first understand the conceptual theory of the Round Robin Scheduling Algorithm.
- The Round robin algorithm is a pre-emptive process scheduling algorithm. Here, every job request in the queue is associated with a fixed execution time called quantum.
- A pre-emptive process enables the job scheduler to pause a process under execution and move to the next process in the job queue.
- The job scheduler saves the current state of the job and moves to another job in the queue as soon as a particular process/job is executed for a given time quantum.
- The context switch saves the current state of the process. This algorithm is beneficial in terms of its response time.
- In the round robin algorithm, every process gets an equal time of execution which is defined by the quantum time.
- Therefore, no process will be able to hold the CPU for a longer time period.
- The round-robin job scheduling algorithm is, therefore, used in a multi-user, time-sharing or multi-tasking operating systems.
- As a result, it is probably the best scheduling algorithm in operating systems for distributed terminal response time.
- Furthermore, the efficiency of this algorithm is totally dependent on the size of the time quantum and the number of context switches that occur.
- The decision making overhead is very low.
- Equal priority is given to each job within the queue, unlike other scheduling algorithms.
- Hence, starvation does not occur so frequently.
- The throughput in the round-robin algorithm is highly dependent on the quantum length.
- If the quantum is less, then the process switching occurs frequently which decreases the efficiency.
- If the quantum is more, the system may become unresponsive.
The RR scheduling algorithm is quite simple to implement, and the overhead in decision-making is very low. This algorithm is good evenly distributes the terminal response time.
Some of the famous scheduling algorithms in C programs that you must know are:
- SCAN Disk Scheduling Algorithm in C
- C Program For FCFS Algorithm
- Preemptive Shortest Job First Algorithm in C Programming
- C Program For Shortest Remaining Time First Algorithm
- Multi-Level Feedback Queue Algorithm C Program
- C SCAN Scheduling Algorithm C Program
- C Program For Preemptive Priority Algorithm
- Non-Preemptive Priority Scheduling C Program
- C Program For Shortest Seek Time First Algorithm
Note: This round robin scheduling program in C language using arrival time and an Array data structure is compiled with GNU GCC compiler using Linux terminal on Linux Ubuntu operating system.
Round Robin Scheduling Program in C
int i, limit, total = 0, x, counter = 0, time_quantum;
int wait_time = 0, turnaround_time = 0, arrival_time, burst_time, temp;
float average_wait_time, average_turnaround_time;
printf("\nEnter Total Number of Processes:\t");
x = limit;
for(i = 0; i < limit; i++)
printf("\nEnter Details of Process[%d]\n", i + 1);
temp[i] = burst_time[i];
printf("\nEnter Time Quantum:\t");
printf("\nProcess ID\t\tBurst Time\t Turnaround Time\t Waiting Time\n");
for(total = 0, i = 0; x != 0;)
if(temp[i] <= time_quantum && temp[i] > 0)
total = total + temp[i];
temp[i] = 0;
counter = 1;
else if(temp[i] > 0)
temp[i] = temp[i] - time_quantum;
total = total + time_quantum;
if(temp[i] == 0 && counter == 1)
printf("\nProcess[%d]\t\t%d\t\t %d\t\t\t %d", i + 1, burst_time[i], total - arrival_time[i], total - arrival_time[i] - burst_time[i]);
wait_time = wait_time + total - arrival_time[i] - burst_time[i];
turnaround_time = turnaround_time + total - arrival_time[i];
counter = 0;
if(i == limit - 1)
i = 0;
else if(arrival_time[i + 1] <= total)
i = 0;
average_wait_time = wait_time * 1.0 / limit;
average_turnaround_time = turnaround_time * 1.0 / limit;
printf("\n\nAverage Waiting Time:\t%f", average_wait_time);
printf("\nAvg Turnaround Time:\t%f\n", average_turnaround_time);
If you have any doubts about the implementation of the round robin scheduling program in C language, let us know about it in the comment section. Find more about it on Wikipedia.
This is the best code for Round Robin Algorithm that I found. Thank you so much!
I want to display the Average Turnaround and Waiting with only 2 digits after decimal. How to do that?
Is this the preemptive or Non preemptive Round Robin Algorithm?
Round robin is always preemptive.
Round robin is the preemptive process scheduling algorithm.
Most of the Time Sharing systems use Time Slice or Round Robin CPU Scheduling algorithm.
The round robin disk scheduling algorithm is widely used in Network switches, routers, multiplexers and other such networking devices.
Thanks for the RR Scheduling code. This is just too amazing. 🙂
PROCESSES BT AT
P1 29 0
P2 14 6
P3 10 8
P4 8 1
P5 6 13
PLZ HELP ME I THINK THAT CODE GIVE ME WRONG OUTPUT ..M PLZ ANYONE SHOW ME GHAINT CHART OF THIS PROBLEM THANKS IN ADVANCE…
Hello! I am trying to code this with response time and elapsed time of the process. How to find out elapsed time and response time by making additions to this code?
this code goes into an endless loop for me. was there an edit made?
Please send the opengl source code for round robin for computer graphics
This code used here is wrong implementation…. it just give the first process correct all other outputs are wrong.
Is there a way to create a non pre-emptive version of round robin program?
thanks for the RR scheduling code
it is not the good way to find the turn around time for round robin because it runs continuously as there is not used queue to store the uncompleted process in order to maintain the sequence of accessing of processes.
Can I show request /ready queue by this program?
This code is wrong….
for those inputs given the output should be
P1 12 21
P2 5 10
P3 9 12
P4 11 15
The second column is waiting time while the third column is Turn Around Time