İşlemci zamanlamak, çoklu işlem yapabilen işletim sistemlerinin temelini oluşturur. Bu işletim
sistemleri, CPU kullanımını işlemler arasında değiştirerek bilgisayarlarımızı daha üretken hale getirirler.
Bu yazıda bu işlemlerin nasıl yapıldığı ve hangi kurallara uyulduğu anlatılmıştır.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
CPU Sheduling
1. CPU Scheduling
İşlemci zamanlamak, çoklu işlem yapabilen işletim sistemlerinin temelini oluşturur. Bu işletim
sistemleri, CPU kullanımını işlemler arasında değiştirerek bilgisayarlarımızı daha üretken hale
getirirler.
Tek çekirdekli sistemlerde birim zamanda sadece bir işlem çalışabilir. Diğer işlemlerin
çalışabilmesi için işlemci çekirdeklerinin boşalması ve tekrar zamanlanabilir hale gelmesi gerekir.
Çoklu programlamanın amacı ise işlemci kullanımını en üst düzeye çıkartmaktır.
Basit bilgisayar sistemlerinde bir işlemin başlayabilmesi için diğer işlemin bitmesi gerekir. Örnek
olarak işlemciye gelen bir I/O işlemi aslında o dakikadan itibaren bir bir başka cihazın işlem
biriminde çalışıyor olsa da henüz o cihazdan cevap gelmeyip işlem tamamlanmadığından cevap
gelene kadar CPU boşa çalışmış olur. Fakat çoklu programlama ile birlikte zamanı daha verimli
kullanmaya başlarız. Birkaç işlem aynı anda bellekte barınabilir ve bu sayede bir işlem beklerken
işletim sistemi CPU’yu bu işlemden uzaklaştırıp CPU’ya yeni bir işlem verebilir. Böylece işlem
gücü boşa harcanmamış olur.
Kaynakların zamanlanması verimlik bakımından çok önemlidir. Özellikle de en temel bilgisayar
kaynağı olan işlemcinin zamanlanması bize büyük ölçüde verim sağlayacaktır.
Tekrar Eden CPU ve I/O İşlem Döngüsü
CPU zamanlamasının başarısı, gözlenen süreç özelliklerine bağlıdır. İşlem yürütme CPU yürütme
döngüsünden ve I/O beklemesinden oluşur.
İşlemler bu iki durum arasında değişmektedir. İşlemler
yürümeye CPU burst ile başlarlar sonrasında bunu bir I/O
burst takip eder ve bunu da bir başka CPU burst ve sonra
tekrar I/O burst ve en son sistemin istemesiyle bir CPU
burst ile çalışma durdurulur.
2. Dispatcher
İşlemleri Ready Queden CPU’ya yükleyen ardından da CPU’daki işlemleri RAM’e kaydeden
yani Context switch‘i gerçekleştiren birimdir. Process’leri taşırken kaldığı yerleri kaydedip
tekrar çalışma durumunda kaldığı yerden devam etmesini sağlar.(Register’ları, program
counter’ları kaldığı yerden devam ettirir.)
Dispatch latency, dispatcher’ların bir programı sonlandırıp diğerini başlatması için gereken
süre.(gecikme süresi)
CPU Scheduler
Bellekte(RAM) çalışmaya hazır halde bekleyen işlemlerden birini seçerek işlemciyi ona ayırır.
CPU Scheduler kararlarını işlem;
1. Çalışma(running) durumundan bekleme(waiting) durumuna geçerken,
2. Çalışma(running) durumundan hazır(ready) durumuna geçişte
3. Bekleme(waiting) durumundan hazır(ready) durumuna geçişte
4. Sonlandığında(terminates) verir.
• 1 ve 4 durumlarında yapılan zamanlama nonpreemptive(kesmeyen)
• Diğer durumlar ise preemptive(kesen)
o Tüm modern işletim sistemleri preemptive zamanlama algoritmalarını kullanırlar.
Preemptive : SRTF, RR
NonPreemptive : FCFS ,SJF, Priority
3. Scheduling Criteria
• CPU utilization (İşlemci kullanımı) : İşlemciyi olabildiğince meşgul tutmak.
o 100 birimlik bir işlem vaktinde CPU’ya bindirebildiğimiz işlem yükü.
o Örneğin 100 birimlik bir işlem vaktinde CPU’ya 80 birim iş yaptırmışsak %80’lik bir
CPU kullanımımız mevcuttur.
• Throughput (Üretilen iş) : Birim zamanda bitirdiğimiz işlem sayısı.
• Turnaraound time (Devir zamanı) : Bir işlemin sonlanana kadar geçirdiği toplam zaman.
o Bir işlemin scheduler tarafından ready kuyruğundan seçilip işleminin bitmesine
kadar geçen süre.
o Başlangıcı ile bitişi arasındaki toplam zaman.
• Waiting time (Bekleme zamanı) : Bir işlemin ready kuyruğunda geçirdiği toplam süre.
Bekleme süresi.
• Response time (Yanıt süresi) : Bir isteğin gönderilmesi ile bu isteğine verilen yanıt arasında
geçen süre.
4. 1 - First-Come, First-Served Scheduling, "FCFS"
CPU’nun, işlemleri gelme sırasına göre işleme aldığı zamanlama algoritmasıdır. FCFS’da ilk gelen
işlem ilk yapılır, o bittikten sonra sıradaki işlem CPU’ya alınır ve bu düzen böyle devam eder.
• İşlem önceliği, işlemlerin sıraya girme sıralarına göre belirlenir.
• İşlem sırasının “Process 2, Process 3, Process 1” olması durumunda sonuç nasıl değişirdi?
5. Convoy effect :
FCFS algoritması non-preemptive bir algoritmadır.,Yani bir işleme CPU zamanı tahsis edildiğinde, diğer
işlemler yalnızca mevcut işlem bittikten sonra CPU zamanını alabilir. FCFS planlamasının bu özelliği,
Konvoy Etkisi olarak adlandırılan duruma yol açar.
Konvoy Etkisi'nde, yavaş bir süreç, tüm süreç kümesinin performansını yavaşlatır ve CPU zamanının ve
diğer cihazların israfına yol açar.
Konvoy Etkisinden kaçınmak için, Round Robin Scheduling gibi önleyici zamanlama algoritmaları
kullanılabilir. Daha küçük işlemler CPU zamanı için fazla beklemek zorunda kalmaz .
6. 2. Shortest-Job-First Scheduling, "SJF"
İşlemleri burst time’ı en küçük olan ilk sırada olacak şekilde sıralar ve bu sırada işleme
koyar. SJF en optimal zamanlama algoritmasıdır. Verilen bir iş kümesi için minimum
ortalama bekleme süresini(average waiting time) sağlar.
Bu algoritmada dezvantaj işlemci kullanım sürelerini(burst time) tahmin etmektir.
Not: Bu algortimanın çok verimli çalışmasına karşın sorunu bir işlemin çalışmadan
önce burst time’ını bilemeyecek olmamızdır. İşlemlerin ancak çalıştıktan sonra ne
kadar süre çalıştığını görebiliriz. Ama bunu anlamak için bazı analiz yöntemleri
mevcut. Örneğin önceki verilere göre değerlendirimeler yapılabiliyor. Böylece bir
sonraki işlemin ne kadar süreceği tahmin edilmeye çalışılıyor.
Bir sonraki işlem üssel ortalama(exponential averaging) yöntemiyle sadece tahmin
edilebilir.
• Bu algoritmanın Preemptive versiyonuna “shortest-remaining-time-first”
denir.
8. 3.Priority Scheduling
Her bir işleme öncelik sayısı (tamsayı) atanır. CPU en öncelikli olan işleme tahsis edilir.
• En yüksek öncelik; en küçük tam sayıya aittir., (kabul bu yöndedir)
Bu algoritmanın yanında getirdiği bir problem vardır. Bu da Starvation problemidir(açlık). Düşük
öncelikli bir işlem üzerine ondan daha öncelikli işlemlerin çokça gelmesi durumunda az öncelikli
işlemimiz asla CPU’yu kullanamaz. Bu sorunu gidermek için bir çözüm de vardır.
Aging yöntemi(yaşlandırma) önüne aldığı her işlemde bu önceliği az olan işlemimizin önceliğini
yavaş yavaş artırırız. Böylece bu önceliksiz işlem de sistem kaynaklarından yararlanabilir.
9. 4. Round Robin Scheduling, "RR"
İşlemlerin belirlenen bir süreye göre sıra sıra işleme sokulmasıdır. İşlemlerin CPU’da kalabileceği
maksimum süreye time quantum denir. İşlemler time quantum’a göre sıra sıra işleme girer ve
çıkarlar. Sırası gelen işlem ready queue’den alınıp CPU’da işleme konur time quantum süresi
bitmesi ardından ready queue’nın sonuna koyulur, ready queue’da hazır bekleyen işlem de CPU’ya
verilir. Bir işlemin time quantum’dan önce tamamlanması halinde ise bir sonraki işleme geçilir.
Time quantum’un artması ve azalmasıyla ortaya çıkan bazı problemler var. Bunlar;
Çok yüksek time quantum belirlersek örneğin;
Time quantum’a 1 yıl dersek; bu bir yılda sadece bir işlem çalışacak demek oluyor yani başka bir
proses çalışmayacak. Tabi bu durumda işlem bir yıldan önce biteceği için. İşlem bittikten sonra
öbür işlem gelecek … , Bir noktadan sonra aslında iş FCFS’a dönmüş oluyor.
Time quantum’u çok düşük belirlememiz halinde de CPU’daki context switchlerin maliyeti
artamaya başlıyor. Çünkü time quantum’u küçük belirlememiz çok sık process değişikliği
yapmamıza sebep oluyor.
10. Round Robin Scheduling örneği:
----------------------------------------------------------------------------------------------------------------------
Time quantum
değişirse
------------------------------
11. Multilevel Queue
Şu ana kadar konuştuğumuz priority ve round-robin scheduling alogritmalarında tek bir
kuyruk(queue) kullanılıyordu. Ve işlemler önceliklerine göre değerlendirip işleme
konuyorlardı.
Multilevel Queue yönteminde ise ready queue bölünerek başka queue’ler oluşturuyor.
Bu aşamadan sonra öncelik sıraları işlem bazında değil de kuyruk bazında
değerlendirilmeye başlanıyor. Kuyruklardan birinde çok yoğun işlerin görüldüğü
işlemler barındırılırken, bir diğer kuyrukta ise işlem yükü pek de ağır olamayan hafif işler
tutulmaya başlanıyor.
İşlemleri öncelik sıralarına göre organize ettikten sonra da her bir kuyruk için başka bir
zamanlama algoritması kullanabilir oluyoruz. Mesela işlem gücüne çok ihtiyaç
duyduğumuz kuyruklarda (CPU yoğun işlemlerde) response time önemli olduğundan
buna uygun olan Roud robin algoritmasını tercih ediyoruz. Öte yandan işlem önceliği
çok olmayan düşük öncelikli işlemlerin tutulduğu kuyruklarda ise FCFS gibi bir
algoritmayı kullanabiliriz.
foreground (interactive), cpu yoğun işlemlerin bulunduğu queue’ler background
(batch), CPU’nun nispeten daha az kullanıldığı arkaplan işleri