Disusun oleh :
Alif Rizal Pamungkas (1461600195)
Alvan Danang Cahyono (1461600203)
Imam Baehaqi (1461600228)
Galih Kantata Takwa (1461600242)
Robertus Nyarso Listiyono (1461600263)
Teknik Informatika
Fakultas Teknik
Universitas 17 Agustus 1945 Surabaya
2017
FIFO (First-in First-Out) / FCFS
I.1 Deskripsi
P1 24
P2 3
P3 3
P1 P2 P3
0 24 27 30
P2 P3 P1
0 3 6 30
Penjadwalan ini sangat tidak memuaskan, karena proses dapat menunggu lama
Dalam kriteria adil, penjadwalan FIFO adil dalam arti resmi (dalam semantic/arti
antrian) yaitu proses yang pertama datang, akan dilayani pertama juga), tapi
dinyatakan tidak adil karena proses-proses yang perlu waktu lama membuat
proses-proses pendek menunggu. Proses-proses tidak penting dapat membuat
proses-proses penting menunggu.
P1 0 5 0 5 0 5
P2 1 6 5 11 4 10
P3 2 7 11 18 9 16
P4 3 8 18 26 15 23
P5 4 9 26 35 22 31
∑TA = 85
Rata-rata TA = 17
Gantt Chart
P1 P2 P3 P4 P5
0 5 11 18 26 35
Rumus
int main()
{
cout<<"=-=-=-=-=-=-=-=-=-=Metode FIFO (First In First Out)=-=-=-=-
=-=-=-=-=-="<<endl<<endl;
int n,wb[20],wt[20],le[20],me[20],se[20],tat[20],avtat=0,i,j;
cout<<"Masukkan Banyaknya Proses : ";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"\nMasukkan Proses Waktu Tiba P["<<i+1<<"] : ";
cin>>wb[i];
}
for(i=0;i<n;i++)
{
cout<<"\nMasukkan Waktu Lama Eksekusi/Burst Time P["<<i+1<<"] : ";
cin>>le[i];
}
cout<<"\nP["<<i+1<<"]"<<"\t\t"<<wb[i]<<"\t\t"<<le[i]<<"\t\t"<<me[i]<<"\t\t"<<se
[i]<<"\t\t"<<wt[i]<<"\t\t"<<tat[i];
}
cout<<endl<<"NB\t :";
cout<<"\n1. Mulai Eksekusi \t\t = Lama Eksekusi - Waktu Tiba\t "<<endl;
cout<<"2. Selesai Eksekusi \t\t = Lama Eksekusi + Mulai Eksekusi \t
"<<endl;
cout<<"3. Waktu Tunggu \t\t = Mulai Eksekusi - Waktu Tiba \t "<<endl;
cout<<"4. Turn Arround Time \t\t = Waktu Tunggu + Lama Eksekusi \t
"<<endl;
cout<<"5. Rata - Rata Turn Arround Time = Jumlah Turn Arround Time /
Banyaknya Proses \t "<<endl;
system("pause");
}
Hasil Running
ROUND ROBIN
II.1 Deskripsi
Algoritma ini menggilir proses yang ada di antrian. Proses akan mendapat jatah
sebesar time quantum. Jika time quantum-nya habis atau proses sudah selesai,
CPU akan dialokasikan ke proses berikutnya . Proses ini cukup adil, karena
tidak ada proses yang diprioritaskan . Semua proses mendapat jatah waktu
yang sama dari CPU yaitu 1/n, dan tidak akan menunggu lebih lama dari (n-
1)q; dimana q adalah lama 1 quantum .
Proses AT BT FT TAT WT
P1 0 5 17 17 12
P2 1 6 23 22 16
P3 2 7 30 28 21
P4 3 8 32 29 21
P5 4 9 35 31 22
Rata-rata
TAT : 25,4
Gantt Chart
P1 P2 P3 P1 P4 P5 P2 P3 P1
0 2 4 6 8 10 12 14 16 17
P4 P5 P2 P3 P4 P5 P3 P4 P5 P5
17 19 21 23 25 27 29 30 32 34 35
Rumus :
o Finish Time(FT) = TAT + AT
o Waiting Time (WT) = TAT - BT
o Turn Arround Time(TAT) = FT - AT
o Rata - Rata Turn Arround Time = Jumlah Turn Arround Time / Banyaknya Proses
o Rata - Rata Waiting Time = Jumlah Waiting Time / Banyaknya Proses
process Process[10],p1[10],temp;
queue<int> queue1;int accept(int ch);
int main()
{
int i,n,ts,ch,j,x;
Process[0].TurnArroundTime=0;
Process[0].WaitTime=0;
n=accept(ch);
ganttrr(n);
turnwait(n);
display(n);
system("pause");
return 0;
}
int accept(int ch) //functions for accepting inputs from the user
{
int i,n;
printf("\nEnter the no. of process: ");
scanf("%d",&n);
if(n==0)
{
printf("\nInvalid no. of process");
exit(1);
}
for(i=1;i<=n;i++)
{
printf("\nMasukkan Proses Waktu Tiba P%d : ",i);
scanf("%d",&Process[i].ArrivalTime);
Process[i].ProcessID=i;
}
for(i=1;i<=n;i++)
{
printf("\nMasukkan Waktu Lama Eksekusi/Burst Time P%d : ",i);
scanf("%d",&Process[i].BurstTime);
}
if(ch==3)
{
for(i=1;i<=n;i++)
{
printf("\nEnter the priority for P%d: ",i);
scanf("%d",&Process[i].Priority);
}
return n;
}
printf("=====================================================
=========");
printf("\nProcess\tAT\tBT");
for(i=1;i<=n;i++)
printf("\nP%d\t%d\t%d",Process[i].ProcessID,Process[i].ArrivalTime,Process[i
].BurstTime);
printf("\n====================================================
========");
for(i=1;i<=n;i++) // copying of one array into another array(dummy area)
p1[i]=Process[i];
return n;
}
/* FUNCTION FOR DISPLAYING GANTT CHART FOR ROUND ROBIN
SCHEDULING */
void ganttrr(int n)
{
int i,ts,m,nextval,nextarr;
nextval=Process[1].ArrivalTime;
cout<<"\nMasukkan Quantum Time : ";
cin>>ts;
nextval=p1[1].ArrivalTime;
printf("\n\nMenampilkan Gantt Chart\n\n");
cout<<p1[1].ArrivalTime;
for(i=1;i<=n,p1[i].ArrivalTime<=nextval;i++)
queue1.push(p1[i].ProcessID);
nextarr=p1[i].ArrivalTime;
while(!queue1.empty())
{
m=queue1.front();
queue1.pop();
if(p1[m].BurstTime>=ts)
nextval=nextval+ts;
else
nextval=nextval+p1[m].BurstTime;
cout<<"->P"<<p1[m].ProcessID<<"->"<<nextval;
p1[m].BurstTime=p1[m].BurstTime-ts;
if(nextval<nextarr)
{
if(p1[m].BurstTime>0)
queue1.push(m);
if(p1[m].BurstTime<=0)
Process[m].FinishTime=nextval;
}
else
{
while(i<=n&&p1[i].ArrivalTime<=nextval)
{
queue1.push(p1[i].ProcessID);
i++;
}
if(i<=n)
nextarr=p1[i].ArrivalTime;
if(p1[m].BurstTime>0)
queue1.push(m);
if(p1[m].BurstTime<=0)
Process[m].FinishTime=nextval;
}
}
}
/* FUNCTION FOR CALCULATING TURN AROUND TIME OR WAIT TIME */
void turnwait(int n)
{
int i;
for(i=1;i<=n;i++)
{
Process[i].TurnArroundTime=Process[i].FinishTime-
Process[i].ArrivalTime;
Process[i].WaitTime=Process[i].TurnArroundTime-Process[i].BurstTime;
Process[0].TurnArroundTime=Process[0].TurnArroundTime+Process[i].TurnA
rroundTime;
Process[0].WaitTime=Process[0].WaitTime+Process[i].WaitTime;
}
Process[0].TurnArroundTime=Process[0].TurnArroundTime/n;
Process[0].WaitTime=Process[0].WaitTime/n;
}
/* FUNCTION FOR DISPLAYING THE TABLE */
void display(int n)
{
int i;
cout<<"\n\n-------------------TABLE----------------------------------\n";
printf("\nProcess\tAT\tBT\tFT\tTAT\t\tWT");
for(i=1;i<=n;i++)
printf("\nP%d\t%d\t%d\t%d\t%f\t%f",Process[i].ProcessID,Process[i].ArrivalTi
me,Process[i].BurstTime,Process[i].FinishTime,Process[i].TurnArroundTime,
Process[i].WaitTime);
cout<<"\n\n-----------------------------------------------------------";
cout<<endl<<endl<<"NB\t :"<<endl;
cout<<"1. Finish Time(FT) \t\t = TAT + AT"<<endl;
cout<<"2. Waiting Time (WT) \t\t = TAT - BT"<<endl;
cout<<"3. Turn Arround Time(TAT) \t = FT - AT"<<endl;
cout<<"4. Rata - Rata Turn Arround Time = Jumlah Turn Arround Time /
Banyaknya Proses"<<endl;
cout<<"5. Rata - Rata Waiting Time \t = Jumlah Waiting Time / Banyaknya
Proses"<<endl;
}
Hasil Running
Kesimpulan
Penjadwalan proses yaitu kumpulan kebijaksanaan dan mekanisme di sistem
operasi yang berkaitan dengan urutan kerja yang dilakukan oleh sistem komputer.
Penjadwalan bertugas menentukan proses mana yang harus berjalan serta kapan
dan berapa lama proses itu berjalan. Kriteria untuk mengukur dan optimasi kerja
penjadwalan yaitu : Adil, Efesiensi, Waktu Tanggap, Turn Arround Time, dan
Throughtput. Terdapat 3 tipe penjadwalan dalam sistem operasi yaitu : Penjadwalan
Jangka Pendek, Jangka Menengah, dan Jangka Panjang. Macam-macam strategi
penjadwalan dibagi menjadi 2 yaitu Penjadwalan Nonpreemptive dan Penjadwalan
Preemprive. Algoritma penjadwalan pun dibagi menjadi 2, Fifo termasuk Algoritma
Penjadwalan Nonpreemptive dan Round Robin termasuk Algoritma Penjadwalan
Preemptive.
DAFTAR PUSTAKA
https://ridhasariyanti636.wordpress.com/2014/04/10/makalah-so/
http://sim.untag- sby.ac.id/siakad/siakad/index.php?page=download&type=materi&id=11405
http://opensource.telkomspeedy.com/repo/abba/v06/Kuliah/SistemOperasi/BUKU/SistemOp
erasi-4.X-2/ch06s03.html
http://sekilastentangjava.blogspot.co.id/2012/04/sistem-operasi-penjadwalan.html
https://skatel.wordpress.com/2012/05/07/source-code-penjadwalanscheduling-cpu-fcfs-
program-di-c/
http://dwicahyo3396.blogspot.co.id/2014/12/algoritma-penjadwalan-cpu-round-robin.html
https://code.google.com/archive/p/project-penjadwalan-round-robin/source/default/source