Professional Documents
Culture Documents
Algorithm
By Admin | November 16, 2014
6 Comments
Here you will get C and C++ program for priority scheduling algorithm.
Also Read: C/C++ Program for First Come First Served (FCFS)
Scheduling Algorithm
Limitations
The problem occurs when the operating system gives a particular task a
very low priority, so it sits in the queue for a larger amount of time, not
being dealt with by the CPU. If this process is something the user needs,
there could be a very long wait, this process is known as Starvation or
Infinite Blocking.
Solution
C Program
#include<stdio.h>
int main()
{
1 #include<stdio.h>
2
3 int main()
4 {
5 int bt[20],p[20],wt[20],tat[20],pr[20],i,j,n,total=0,pos,temp,avg_wt,avg_tat;
6 printf("Enter Total Number of Process:");
7 scanf("%d",&n);
8
9 printf("\nEnter Burst Time and Priority\n");
10 for(i=0;i<n;i++)
11 {
12 printf("\nP[%d]\n",i+1);
13 printf("Burst Time:");
14 scanf("%d",&bt[i]);
15 printf("Priority:");
16 scanf("%d",&pr[i]);
17 p[i]=i+1; //contains process number
18 }
19
20 //sorting burst time, priority and process number in ascending order using selection sort
21 for(i=0;i<n;i++)
22 {
23 pos=i;
24 for(j=i+1;j<n;j++)
25 {
26 if(pr[j]<pr[pos])
27 pos=j;
28 }
29
30 temp=pr[i];
31 pr[i]=pr[pos];
32 pr[pos]=temp;
33
34 temp=bt[i];
35 bt[i]=bt[pos];
36 bt[pos]=temp;
37
38 temp=p[i];
39 p[i]=p[pos];
40 p[pos]=temp;
41 }
42
43 wt[0]=0; //waiting time for first process is zero
44
45 //calculate waiting time
46 for(i=1;i<n;i++)
47 {
48 wt[i]=0;
49 for(j=0;j<i;j++)
50 wt[i]+=bt[j];
51
52 total+=wt[i];
53 }
54
55 avg_wt=total/n; //average waiting time
56 total=0;
57
58 printf("\nProcess\t Burst Time \tWaiting Time\tTurnaround Time");
59 for(i=0;i<n;i++)
60 {
61 tat[i]=bt[i]+wt[i]; //calculate turnaround time
62 total+=tat[i];
63 printf("\nP[%d]\t\t %d\t\t %d\t\t\t%d",p[i],bt[i],wt[i],tat[i]);
64 }
65
66 avg_tat=total/n; //average turnaround time
67 printf("\n\nAverage Waiting Time=%d",avg_wt);
68 printf("\nAverage Turnaround Time=%d\n",avg_tat);
69
70 return 0;
71 }
C++ Program
#include<iostream>
1 #include<iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int bt[20],p[20],wt[20],tat[20],pr[20],i,j,n,total=0,pos,temp,avg_wt,avg_tat;
8 cout<<"Enter Total Number of Process:";
9 cin>>n;
10
11 cout<<"\nEnter Burst Time and Priority\n";
12 for(i=0;i<n;i++)
13 {
14 cout<<"\nP["<<i+1<<"]\n";
15 cout<<"Burst Time:";
16 cin>>bt[i];
17 cout<<"Priority:";
18 cin>>pr[i];
19 p[i]=i+1; //contains process number
20 }
21
22 //sorting burst time, priority and process number in ascending order using selection sort
23 for(i=0;i<n;i++)
24 {
25 pos=i;
26 for(j=i+1;j<n;j++)
27 {
28 if(pr[j]<pr[pos])
29 pos=j;
30 }
31
32 temp=pr[i];
33 pr[i]=pr[pos];
34 pr[pos]=temp;
35
36 temp=bt[i];
37 bt[i]=bt[pos];
38 bt[pos]=temp;
39
40 temp=p[i];
41 p[i]=p[pos];
42 p[pos]=temp;
43 }
44
45 wt[0]=0; //waiting time for first process is zero
46
47 //calculate waiting time
48 for(i=1;i<n;i++)
49 {
50 wt[i]=0;
51 for(j=0;j<i;j++)
52 wt[i]+=bt[j];
53
54 total+=wt[i];
55 }
56
57 avg_wt=total/n; //average waiting time
58 total=0;
59
60 cout<<"\nProcess\t Burst Time \tWaiting Time\tTurnaround Time";
61 for(i=0;i<n;i++)
62 {
63 tat[i]=bt[i]+wt[i]; //calculate turnaround time
64 total+=tat[i];
65 cout<<"\nP["<<p[i]<<"]\t\t "<<bt[i]<<"\t\t "<<wt[i]<<"\t\t\t"<<tat[i];
66 }
67
68 avg_tat=total/n; //average turnaround time
69 cout<<"\n\nAverage Waiting Time="<<avg_wt;
70 cout<<"\nAverage Turnaround Time="<<avg_tat;
71
72 return 0;
73 }
Output
source code penjadwalan/scheduling cpu
fcfs program di C++
Posted in bahasa-c, Operating System by Kang Anas
penjadwalan proses CPU dengan FCFS ini menggunakan bahasa C++ disini dilengkapi
dengan source code yang telah saya kerja kan sendri dengan teman, awal nya pengen
pakai java tapi berhubung masih belum nguasai java ya sudah pakai yang sederhana,
menggunakan consule.., Ikuti artikel tentang penjadwalan proses CPU dengan FCFS
1.2 Algoritma
P1 24
P2 3
P3 3
P1 P2 P3
0 24 27 30
P2 P3 P1
0 3 6 30
#include<stdio.h>#include<string.h>main()
puts();
puts();
fflush(stdin);
puts();
// SORTING Data
if(ar[i]>ar[j]){
//tukar nama
strcpy(tmpName, name[i]);
strcpy(name[i], name[j]);
strcpy(name[j], tmpName);
tmp=ar[i];
ar[i]=ar[j];
ar[j]=tmp;
//tukar burst
tmp=b[i];
b[i]=b[j];
b[j]=tmp;
time[0]=ar[0];
puts();
wt[i]=time[i]-ar[i];
ta[i]=time[i+1]-ar[i];
totWT+=wt[i];
totTA+=ta[i];
puts(======================================
====);
puts(======================================
============);
puts();
puts(======================================
============);
puts(\n);
puts();
printf(|=========);
printf(|\n);
puts(\n);
1.2 Analisa
1.3 Kesimpulan
Program ini merupakan program penjadwalan
cpu dengan FCFS maksud nya proses yang
pertama kali memintah jatah waktu maka akan di
kerjakan terlebih dahulu baru proses berikutnya,
dengan menggunakan penjadwalan cpu fcfs ini
terdapat kekurangan nya yaitu :
1. Penjadwalan CPU
Penjadwalan CPU adalah pemilihan proses dari antrian ready untuk dapat dieksekusi.
Penjadwalan CPU merupakan konsep dari multiprogramming, dimana CPU digunakan secara
bergantian untuk proses yang berbeda. Suatu proses terdiri dari dua siklus yaitu Burst I/O dan
Burst CPU yang dilakukan bergantian hingga proses selesai. Penjadwalan CPU mungkin
dijalankan ketika proses:
Proses 1 dan 4 adalah proses Non Preemptive, dimana proses tersebut tidak bisa di- interrupt,
sedangkan 2 dan 3 adalah proses Preemptive, dimana proses boleh di interrupt.
Pada saat CPU menganggur, maka sistem operasi harus menyeleksi proses-proses yang ada di
memori utama (ready queue) untuk dieksekusi dan mengalokasikan CPU untuk salah satu
dari proses tersebut. Seleksi semacam ini disebut dengan shortterm scheduler (CPU
scheduler).
Komponen yang lain dalam penjadwalan CPU adalah dispatcher, Dispatcher adalah suatu
modul yang akan memberikan kontrol pada CPU terhadap penyeleksian proses yang
dilakukan selama short-term scheduling . Waktu yang diperlukan oleh dispatcher untuk
menghentikan suatu proses dan memulai proses yang lain disebut dengan dispatch latency.
Jika dalam suatu proses Burst CPU jauh lebih besar daripada Burst I/O maka disebut CPU
Bound. Demikian juga sebaliknya disebut dengn I/O Bound.
Pada algoritma ini setiap proses yang ada di ready queue akan dieksekusi berdasarkan burst
time terkecil. Hal ini mengakibatkan waiting time yang pendek untuk setiap proses dan
karena haltersebut maka waiting time rata-ratanya juga menjadi pendek, sehingga dapat
dikatakan bahwaalgoritma ini adalah algoritma yang optimal.
Contoh 1 :
P1 0.0 7
P2 2.0 4
P3 4.0 1
P4 5.0 4
Contoh: Ada 4 buah proses yang datang berurutan yaitu P1 dengan arrival time pada 0.0 ms
dan burst time 7 ms, P2 dengan arrival time pada 2.0 ms dan burst time 4 ms, P3 dengan
arrivaltime pada 4.0 ms dan burst time 1 ms, P4 dengan arrival time pada 5.0 ms dan burst
time 4 ms.Hitunglah waiting time rata-rata dan turnaround time dari keempat proses tersebut
denganmengunakan algoritma SJF.
P1 P3 P2 P4
0 7 8 12 16
Average waiting time rata-rata untuk ketiga porses tersebut adalah sebesar (9+1+0+2)/4=3
ms.
Contoh 2 :
A 0 10
B 0 5
C 0 7
D 0 1
E 0 3
D 0 1 0 1 0 1
E 0 3 1 4 1 4
B 0 5 4 9 4 9
C 0 7 9 16 9 16
A 0 10 16 26 16 26
TA 56
Rata-Rata 56/5 =
11.2
Tampak di sini bahwa SJF ini menyebabkan rata-rata lama tanggap semua proses itu menjadi
11.2satuan waktu. Rata-rata ini akan lebih singkat jika dibandingkan dengan rata-rata lama
tanggap untuk penjadwalan FIFO.
Jika ada proses yang sedang dieksekusi oleh CPU dan terdapat proses di ready queuedengan
burst time yang lebih kecil daripada proses yang sedang dieksekusi tersebut, makaproses
yang sedang dieksekusi oleh CPU akan digantikan oleh proses yang berada di readyqueue
tersebut.
Preemptive SJF sering disebut juga Shortest-Remaining- Time-Firstscheduling.2.
2. Non-preemptive
Penjadwalan Non Preemptive ialah salah satu jenis penjadwalan dimana sistemoperasi tidak
pernah melakukan context switch dari proses yang sedang berjalan ke proses yang lain.
Dengan kata lain, proses yang sedang berjalan tidak bisa di- interupt .CPU tidak
memperbolehkan proses yang ada di ready queue untuk menggeser prosesyang sedang
dieksekusi oleh CPU meskipun proses yang baru tersebut mempunyai burst time yang lebih
kecil.
Program Penjadwalan Proses Menggunakan Shortest Job First Dengan C++
Berikut ini adalah source code program penghitungan waiting time, turn around time dan
response time sistem penjadwalan proses menggunakan Shortest Job First dengan C++.
#include
#include
void main()
{
int i,j,n,brust_time[10],start_time[10],end_time[10],wait_time[10],temp,tot;
float avg;
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(brust_time[i]>brust_time[j])
{
temp=brust_time[i];
brust_time[i]=brust_time[j];
brust_time[j]=temp;
}
}
if(i==1)
{
start_time[1]=0;
end_time[1]=brust_time[1];
wait_time[1]=0;
}
else
{
start_time[i]=end_time[i-1];
end_time[i]=start_time[i]+brust_time[i];
wait_time[i]=start_time[i];
}
}
printf("\n\n BURST TIME \t STARTING TIME \t END TIME \t WAIT TIME\n");
printf("\n ********************************************************\n");
for(i=1;i<=n;i++)
{
printf("\n %5d %15d %15d %15d",brust_time[i],start_time[i],end_time[i],wait_time[i]);
}
printf("\n ********************************************************\n");
for(i=1,tot=0;i<=n;i++)
tot+=wait_time[i];
avg=(float)tot/n;
printf("\n\n\n AVERAGE WAITING TIME=%f",avg);
for(i=1,tot=0;i<=n;i++)
tot+=end_time[i];
avg=(float)tot/n;
printf("\n\n AVERAGE TURNAROUND TIME=%f",avg);
for(i=1,tot=0;i<=n;i++)
tot+=start_time[i];
avg=(float)tot/n;
printf("\n\n AVERAGE RESPONSE TIME=%f\n\n",avg);
getch();
}
Output :
4. Analisa
Berdasarkan program di atas dapat di simpulkan bahwa semua proses telah masuk pada ready
queque namun dalam algoritma SJF (shortest job first) maka suatu proses akan di eksekusi
berdasarkan burst time atau lamanya eksekusi, dan kemudian proses yang time burst nya
paling kecil akan di utamakan di bandingkan dengan proses yang time burst nya besar.
5. Kesimpulan
Pada program penjadwalan sjf ini setiap proses yang ada di ready queue akan dieksekusi
berdasarkan burst time terkecil. Hal ini mengakibatkan waiting time yang pendek untuk
setiap proses dan karena haltersebut maka waiting time rata-ratanya juga menjadi pendek,
sehingga dapat dikatakan bahwaalgoritma ini adalah algoritma yang optimal.
1. Susahnya untuk memprediksi burst time proses yang akan dieksekusi selanjutnya.
2. Proses yang mempunyai burst time yang besar akan memiliki waiting time yang besar pula
karena yang dieksekusi terlebih dahulu adalah proses dengan burst time yang lebih kecil.