Round Robin merupakan algoritma yang eksekusi proses diatur berdasarkan alokasi waktu tertentu (slot waktu ) yang di atur dengan clock interrupt, clock interrupt mengatur waktu secara periodik. Bila terjadi clock interrupt maka proses yang seddang running dimasukkan ke dalam antrian ready dan proses di antrian ready paling depan di eksekusi
kekurangan dari round robin
- performansi lebih buruk dibanding FCFS jika ukuran slot lebih besar daripada ukuran proses terbesar
- dapat terjadi overhead berlebihan jika ukuran setiap slot terlalu kecil
- proses I/O bound mendapatkan waktu layanan lebih sedikit
Solusi dari kekurangan round robin
round robin dimodifikasi menjadi virtual round robin(VRR) dengan menambahkan sebuah antrian yang disebut memory antrian auxiliary
Kelebihan dari round robin
- dapat menghindari ketidak adilan layanan terhadap proses kecil seperti yang terjadi pada FCFS
- respone time lebih cepat untuk proses berukuran kecil
- dapat mencegah starvation
- overhead kecil, jika ukuran proses rata rata lebih kecil dibanding ukuran quantum/slot
E. Source Code Java
import java.util.Scanner;
public class RoundRobin
{
void buatGaris(int lenGrantChart)
{
for(int i=0; i < lenGrantChart; i++)
{
System.out.print("------");
}
System.out.println();
}
public RoundRobin()
{
/*inisialisasi variabel*/
Scanner scanner = new Scanner(System.in);
int readyQueue[][];
int grantChart[][];
int totalProcess = 0;
int timeSlice = 0;
int totalBurstTime = 0;
int totalQuantum = 0;
System.out.print("masukkan jumlah proses : ");
totalProcess = scanner.nextInt();
System.out.print("masukkan time slice : ");
timeSlice = scanner.nextInt();
//ini akan membuat array [Pn][name], [Pn][BT], [Pn][WT], [Pn][TO], [Pn][RT]
readyQueue = new int[totalProcess][5];
System.out.println();
/*masukkan burst time proses*/
for(int i=0; i < readyQueue.length; i++)
{
//set nama proses
readyQueue[i][0] = i;
//set burst time proses
System.out.print("masukan burst time P"+ i + " : ");
readyQueue[i][1] = scanner.nextInt();
//hitung jumlah burst time
totalBurstTime += readyQueue[i][1];
//hitung jumlah quantum per proses
totalQuantum += (int) Math.ceil((double)readyQueue[i][1] / (double)timeSlice);
//set default waiting time, turn around time, dan respon time
readyQueue[i][2] = 0; //set waiting time
readyQueue[i][3] = 0; //set turn around time
readyQueue[i][4] = 0; //set respon time
}
/*running proses*/
grantChart = new int[totalQuantum][3];
int time = 0;
int index = 0;
while (time < totalBurstTime)
{
for(int i=0; i < readyQueue.length; i++)
{
//respon time
if(index < totalProcess) readyQueue[i][4] = time;
if(readyQueue[i][1] != 0)
{
//waiting time
readyQueue[i][3] += time;
grantChart[index][0] = readyQueue[i][0]; //name process
grantChart[index][1] = time; //start time quantum process
//jika burst time >= time slice
if(readyQueue[i][1] >= timeSlice)
{
grantChart[index][2] = time = time + timeSlice; //end time quantum process
readyQueue[i][1] -= timeSlice; //kurangi burst time sebanyak time slice
}
else if(readyQueue[i][1] < timeSlice && readyQueue[i][1] > 0)
{
grantChart[index][2] = time = time + readyQueue[i][1]; //end time quantum process
readyQueue[i][1] = 0; //burst time telah habis
}
//turn around time
if(readyQueue[i][1] == 0) readyQueue[i][2] = time;
index++;
}
}
}
//cetak grant chart
buatGaris(grantChart.length);
for(int i=0; i < grantChart.length; i++)
{
System.out.print(" P" + grantChart[i][0] + " ");
}
System.out.println();
buatGaris(grantChart.length);
for(int i=0; i < grantChart.length; i++)
{
if(i == 0) System.out.print(grantChart[i][1]);
System.out.print(" " + grantChart[i][2]);
}
System.out.println();
buatGaris(grantChart.length);
System.out.println();
for(int i = 0; i < readyQueue.length; i++)
{
System.out.println("Proses P"+readyQueue[i][0] + "\n" +
"TO : " + readyQueue[i][2] + "\n" +
"WT : " + readyQueue[i][3] + "\n" +
"RT : " + readyQueue[i][4] + "\n"
);
}
}
public static void main (String[] args)
{
new RoundRobin();
}
}