Round-Robin (RR) Planlayıcı Algoritması
Round-Robin (RR) planlayıcısı, işletim sistemlerinde kullanılan bir zaman paylaşım algoritmasıdır. RR, işlerin veya iş parçacıklarının (threads) eşit ve adil bir şekilde zaman dilimlerine ayrılmasını sağlar. Her iş ya da iş parçacığı, sırayla belirli bir zaman dilimi (genellikle birkaç milisaniye kadar) boyunca CPU zamanına erişir.
Round-Robin algoritması aşağıdaki şekilde çalışır:
Zaman Dilimi Atama: Planlayıcı, her işe eşit bir zaman dilimi atar (örneğin, 10 milisaniye).
İşlerin Yürütülmesi: İlk iş, atanan zaman dilimi boyunca çalıştırılır. Eğer iş, zaman dilimi süresince tamamlanmazsa, sonraki işe geçilir.
Kuyruğa Ekleme: Yürütme sırası sona eren ancak tamamlanmamış işler, kuyruğun sonuna eklenir.
Sonraki İşi Seçme: Kuyruğun başındaki sonraki iş, yürütülmek üzere CPU'ya gönderilir.
Tamamlanmış İşlerin Kaldırılması: Bir iş tamamlandığında, kuyruktan çıkarılır.
Devam: Bu süreç, tüm işler tamamlanana kadar devam eder.
Avantajları ve Dezavantajları:
Avantajlar:
Adillik: Her iş eşit CPU zamanına sahip olduğundan, hiçbir iş diğerinden daha fazla zaman alamaz.
Öngörülebilirlik: İşler, varış sırasına göre yürütüldüğünden, kullanıcılar ne zaman işlerinin tamamlanacağını daha iyi tahmin edebilir.
Dezavantajlar:
İlgisiz Yükseklik: RR, işlerin önceliklerini veya iş yükünü dikkate almaz. Bu, önemli veya acil işlerin daha az önemli işlerle aynı tedaviyi görmesine neden olabilir.
Düşük Verimlilik: Küçük işler büyük işlerle aynı zaman dilimine sahip olduğundan, küçük işlerin hızla tamamlanmasını beklemek yerine, büyük işlerle aynı süreyi beklemek gerekebilir.
Round-Robin, dairesel bir kuyruk kullanarak uygulanabilir, bu da işlerin kuyruğun sonuna döndüğü anlamına gelir. Dairesel kuyruk yapısı, işlerin yürütülme sırasının sürekli bir döngü içinde devam etmesine yardımcı olur.
Bu basit ve adil planlama stratejisi, gerçek zamanlı sistemlerde, sunucu yük dengelemesinde ve diğer zaman hassas uygulamalarda yaygın olarak kullanılmaktadır.
İşte basit bir Round-Robin planlayıcısının bir örneği. Burada, her işin yürütülme süresini temsil eden bir liste kullanacağız. Zaman dilimi belirlenmiş, ve her iş yürütüldükçe zaman dilimi miktarı kadar işin yürütülme süresinden düşülecek.
from collections import deque def round_robin(jobs, time_quantum): # İşlerin kuyruğu queue = deque(jobs) # Toplam bekleme süresini sıfırla total_waiting_time = 0 # Kuyrukta iş olduğu sürece while queue: # İlk işi kuyruktan al job = queue.popleft() # İşin yürütülme süresi zaman diliminden daha uzunsa if job > time_quantum: # İşin yürütülme süresinden zaman dilimini çıkar remaining_time = job - time_quantum # Kalan süreyi kuyruğun sonuna ekle queue.append(remaining_time) # Toplam bekleme süresine zaman dilimini ekle total_waiting_time += time_quantum else: # İş tamamlandı, bekleme süresine işin yürütülme süresini ekle total_waiting_time += job print("Toplam Bekleme Süresi:", total_waiting_time) # Örnek işler listesi ve zaman dilimi jobs = [10, 20, 30, 40] time_quantum = 10 # Round-Robin planlayıcısını çağır round_robin(jobs, time_quantum)
Bu kod, belirtilen işler üzerinde bir Round-Robin planlayıcısı uygular. Her iş, belirlenen zaman dilimi (bu durumda 10) boyunca yürütülür. Eğer işin yürütülme süresi zaman diliminden daha uzunsa, kalan süre kuyruğun sonuna eklenir.
Bu örnek, işlerin yürütülme sürelerinin nasıl azaldığını ve her iş için toplam bekleme süresinin nasıl hesaplandığını gösterir.
0 Comments
Recommended Comments
There are no comments to display.