CPU Çizelgeleme Algoritması Nedir? (CPU Scheduling)
Zamanlama algoritmasına değinecek olursak, cpu scheduling cpu’yu en etkili şekilde kullanmayı amaçlar ve bu nedenle çeşitli algoritmalar kullanan bir yapılandırma olduğunu söyleyebiliriz.
İşlemcinin süreçlere öncelik verdiği zamanlama algoritmasıdır. Yapılacak işe göre planlı bir şekilde çalışmasını sağlar.
Bu kısımda iki farklı zamanlama vardır.
Kullanıcı verileri söz konusu olduğunda daha hızlıdır. İşlemci üzerinde en çok yüklenen çizelgelemedir.
Daha uzun işlem çizelgelemesi için tercih edilir. Çoğunlukla çok fazla kullanıcı olmadığında seçilir.
Çizelgeleme işleminde başarılı olmak için kriterler nelerdir?
CPU Kullanımı : CPU’nun yoğun olarak kullanılmasını amaçlar.
Throughput : Birim zamanda yapılan iş miktarıdır.
Turnaroung Time : İşlemlerin başlangıcı ile bitişi arasındaki farktır.
Bekleme Süresi : Kuyruğun gecikme süresidir.
Yanıt Süresi : Sürecin yanıtlanma sıklığıdır.
CPU Çizelgeleme Algoritması
İlk Gelen İlk Hizmet Alır (FCFS) Planlaması
Bu algoritmalar varış sırasına göre çalışır.
Örneğin:
3 işlemimiz var.
X1 = 17 zaman (Patlama Süresi, Çalışma Süresi)
X2 = 6 zaman (Patlama Süresi, Çalışma Süresi)
X3 = 7 zaman (Patlama Süresi, Çalışma Süresi)
Varış sırası
X2 birincisidir. 0 saniyede başlar ve 6 saniyede biter (Bekleme süresi 0)
X1 ikinci adımdır, 6 saniyede başlar ve 24 saniyede biter (Bekleme süresi 6)
X3 3. adım ve son çalışma parametresidir. 24 saniyede başlar ve 31 saniyede biter.
Bekleme süresi şu şekildedir: 0 + 6 + 24 = 30
Ortalama bekleme süresi : 30 / 3 = 10
Geri dönüş süresi : 24 – 6 = 19
Ortalama bekleme süresi algoritmanın varış süresine bağlı olarak değişir.
#include<stdio.h>
//TAYFUN SARIGÜL B1805.090089 YAZILIM MÜHENDİSLİĞİ
int main()
{
int n,bt[50],wt[50],tat[50],avwt=0,avtat=0,i,j;
printf("Total processes number (max 50):");
scanf("%d",&n);
// Bir üst satırda aldığımız n verisiyle kullanıcıdan kaç adet işlem yapacagını alıyoruz.
// Bu kısımda verdiğimiz işlemlerin başlangıç zamanlarını belirleyip ekrana yazdırıyoruz.
printf("\n Enter burst Time of Process\n");
for(i=0;i<n;i++)
{
printf("P[%d]:",i+1);
scanf("%d",&bt[i]);
}
wt[0]=0; //İlk işlemin başlangıç süresinin 0 olduğunu belirtiyoruz.
//Girilen işlemlerin bekleme zamanını hesaplıyoruz.
for(i=1;i<n;i++)
{
wt[i]=0;
for(j=0;j<i;j++)
wt[i]+=bt[j];
}
printf("\nProcess\t\tBurst Time\tWaiting Time\tTurnaround Time");
//geri dönüş süre hesaplaması yapıyoruz.
for(i=0;i<n;i++)
{
tat[i]=bt[i]+wt[i];
avwt+=wt[i];
avtat+=tat[i];
printf("\nP[%d]\t%d\t\t%d\t\t%d",i+1,bt[i],wt[i],tat[i]);
}
avwt/=i;
avtat/=i;
printf("\n\nAverage Waiting Time:%d",avwt);
printf("\nAverage Turnaround Time:%d",avtat);
return 0; }
Total processes number (max 50):3
Enter burst Time of Process
P[1]:6
P[2]:17
P[3]:7
Process Burst Time Waiting Time Turnaround Time
P[1] 6 0 6
P[2] 17 6 23
P[3] 7 23 30
Average Waiting Time:9
Average Turnaround Time:19