### Round Robin Algorithm

## Round Robin Algorithm

### Brief:

Round Robin algorithm is a pre-emptive process scheduling algorithm. Round Robin algorithm gives a user a feel that the processor is running for that user only and gives a feel of multi tasking to the user. It can be easily implemented by using circular queue.

### Working:

In Round Robin Algorithm , A Circular Linked List Data structure is used. We start by processing the first process in this case , Process A. for the defined time quantum. after we emptied the time quantum , we stop the processing and move to the next process i.e. process B. We continue this process of processing for the pre-emptive time and keep moving ahead if we complete any of the process, then we remove the process from the queue and move ahead processing the next process.

e.g. :

Suppose there are 6 processes , A,B,C,D,E,F . Time Quantum :- 3

PROCESS CPU TIME REQUIRED

A 5

B 2

C 3

D 4

E 6

F 7

First process :- A

Last Process :- F

first cycle:

A -> 2

B -> 0 (Remove B)

C -> 0 (Remove C)

D -> 1

E -> 3

F -> 4

second cycle:

A -> 0 (Remove A)

D -> 0 (Remove D)

E -> 0 (Remove E)

F -> 1

third cycle:

F -> 0 (Remove F)

### How to proceed for developing code for Round Robin Algorithm

We know that we will require a circular linked list, we will implement circular linked list with two parameters :

- Process Time
- Process Name

After that we want to make a function which deletes the process, we will do that by using 3 parameters:

- Currently processed(the one to be deleted , b)
- Next Process (a)
- Previous Process(c)

We will delete b , and do c->next = a so as not to disrupt the linked list.

After we made a function to delete we will require a function to process the current node (b) with the given pre-emptive time.

We have some of the problems in this ,

- from which process we should start from? (what will a, b , c be initially)
- how will we delete the node if process time is satisfied?
- what if first process is satisfied and we want to delete it, where will the first pointer point?
- what if last process is satisfied and we want to delete it, where will the last pointer point?
- what is the halting condition?

- We are initialising the first process to be the first node in the circular linked list, i.e. b = first; and we are setting a = b->next , c = last; i.e. b will point towards first, a will point towards second and c will point at last node.
- We will delete a node if the time required by the process is satisfied. we will use an additional pointer d, which we will initialise as d = b; when deleting process we will delete d by using deleteProcess(a,d,c); now after we deleted the d, we have b pointing at nothing so we will have to initialise b as the next node ie a and move a ahead while not changing b. Similarly if the node to be deleted is the last node then we will do last = c; ...
- we will halt the program if a == b == c and we will then process the remaining time required for b.