Ads 468x60px

Jumat, 19 Oktober 2012

FCFS (First Come First Served) | Contoh

Algoritma ini merupakan algoritma penjadwalan yang paling sederhana yang digunakan CPU. Dengan menggunakan algoritma ini setiap proses yang berada pada status ready dimasukkan kedalam FIFO queue atau antrian dengan prinsip first in first out, sesuai dengan waktu kedatangannya. Proses yang tiba terlebih dahulu yang akan dieksekusi.

Contoh

Ada tiga buah proses yang datang secara bersamaan yaitu pada 0 ms, P1 memiliki burst time 24 ms, P2 memiliki burst time 3 ms, dan P3 memiliki burst time 3 ms. Hitunglah waiting time rata-rata dan turnaround time(burst time + waiting time) dari ketiga proses tersebut dengan menggunakan algoritma FCFS. Waiting time untuk P1 adalah 0 ms (P1 tidak perlu menunggu), sedangkan untuk P2 adalah sebesar 24 ms (menunggu P1 selesai), dan untuk P3 sebesar 27 ms (menunggu P1 dan P2 selesai).

Gambar 14.1. Gantt Chart Kedatangan Proses
Gantt Chart Kedatangan Proses


Urutan kedatangan adalah P1, P2 , P3; gantt chart untuk urutan ini adalah:
Waiting time rata-ratanya adalah sebesar(0+24+27)/3 = 17ms. Turnaround time untuk P1 sebesar 24 ms, sedangkan untuk P2 sebesar 27 ms (dihitung dari awal kedatangan P2 hingga selesai dieksekusi), untuk P3 sebesar 30 ms. Turnaround time rata-rata untuk ketiga proses tersebut adalah (24+27+30)/3 = 27 ms.
Kelemahan dari algoritma ini:
  1. Waiting time rata-ratanya cukup lama.
  2. Terjadinya convoy effect, yaitu proses-proses menunggu lama untuk menunggu 1 proses besar yang sedang dieksekusi oleh CPU. Algoritma ini juga menerapkan konsep non-preemptive, yaitu setiap proses yang sedang dieksekusi oleh CPU tidak dapat di-interrupt oleh proses yang lain.
Misalkan proses dibalik sehingga urutan kedatangan adalah P3, P2, P1. Waiting time adalah P1=6; P2=3; P3=0. Average waiting time: (6+3+0)/3=3.

Gambar 14.2. Gantt Chart Kedatangan Proses Sesudah Urutan Kedatangan Dibalik
Gantt Chart Kedatangan Proses Sesudah Urutan Kedatangan Dibalik
Contoh Program:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class   fcfs  extends JFrame implements ActionListener
{
   JButton jb[] = new JButton[3];
   JTextField  jt1[],jt2[];
   JLabel  jl[],jl1,jl2,jl3;
   JPanel  jp,jp1;
   Container con;
   int  k,p;
   String str[] = {"SUBMIT","RESET","EXIT"};
   String str1[] = {"Process","   AT","ST","WT","FT","TAT","NTAT"};


   public fcfs()
{
       super("fcfs scheduling algoritham");
   con = getContentPane();

   k= Integer.parseInt(JOptionPane.showInputDialog("Enter number of
process"));

   jl1 = new JLabel("Process");
   jl2 = new JLabel("Arival Time");
   jl3 = new JLabel("Service Time");

   jl = new JLabel[k];
       jt1 = new JTextField[k];
   jt2 = new JTextField[k];


       for(int i=0;i<k;i++)
{
   jl[i] = new JLabel("process"+(i+1));
   jt1[i]  = new JTextField(10);
           jt2[i]  = new JTextField(10);
   }

  for(int i=0;i<3;i++)
{
  jb[i] = new JButton(str[i]);
  }

  con.setLayout(new  GridLayout(k+2,3));
  con.add(jl1);
  con.add(jl2);
  con.add(jl3);

  int l=0;

  for(int i=0;i<k;i++)
{
            con.add(jl[l]);
con.add(jt1[l]);
con.add(jt2[l]);
l++;
  }
  l=0;
  for(int i=0;i<3;i++)
{
  con.add(jb[l]);
  jb[l].addActionListener(this);
  l++;
        }
}//end of constructor

public void actionPerformed(ActionEvent ae)
{
int FT[] = new int[k];
   int WT[] = new int[k];
int TAT[] = new int[k];
float NTAT[] = new float[k];
float sum=0;
        float avg;
 JPanel main = new JPanel();
 main.setLayout(new BorderLayout());
 jp = new JPanel();
 jp1 = new JPanel();
 jp.setLayout(new GridLayout(k+1,7));
 jp1.setLayout(new FlowLayout());

if(ae.getSource() == jb[2])
        {
System.exit(0);
    }
  else if(ae.getSource() == jb[0])
        {
  FT[0] = Integer.parseInt(jt1[0].getText()) +
Integer.parseInt(jt2[0].getText());

  for(int i=0;i<k;i++)
{
  if(i==0)
{
  WT[i] = 0;
}
  else
{
  if(FT[i-1] < Integer.parseInt(jt1[i].getText()))
{
  FT[i] =
Integer.parseInt(jt1[i].getText())+Integer.parseInt(jt2[i].getText());
  WT[i] = 0;
}
else
{
FT[i] = FT[i-1] + Integer.parseInt(jt2[i].getText());
WT[i] = FT[i-1] - Integer.parseInt(jt1[i].getText());
}

                }
TAT[i] = WT[i]+Integer.parseInt(jt2[i].getText());
NTAT[i] = TAT[i]/(Integer.parseInt(jt2[i].getText()));
sum = sum+WT[i];


}//end for loop
            for (int i=0;i<7;i++ )
            {
  jp.add(new JLabel(str1[i]));
            }
for (int i=0;i<k;i++)
{
  jp.add(new JLabel("process"+(i+1)));
  jp.add(new JLabel("   "+Integer.parseInt(jt1[i].getText())));
  jp.add(new JLabel(""+Integer.parseInt(jt2[i].getText())));
  jp.add(new JLabel(""+WT[i]));
  jp.add(new JLabel(""+FT[i]));
  jp.add(new JLabel(""+TAT[i]));
       jp.add(new JLabel(""+NTAT[i]));


}
avg = sum/k;
String str2 = "Average Waiting Time is "+ avg;
             jp1.add(new JLabel(str2));
 main.add(jp,BorderLayout.NORTH);
 main.add(jp1,BorderLayout.SOUTH);

JOptionPane.showMessageDialog(null,main,"output",JOptionPane.PLAIN_MESSAGE
);

        }
else if(ae.getSource() == jb[1])
{
setVisible(false);
fcfs  window = new fcfs();
window.setSize(400,300);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}//END ACTION PERFORMED

public static void main(String[] args)
{
            fcfs  window = new fcfs();
window.setSize(400,300);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//end main
}//end class

0 Komentar: