İşlemci Zaman Planlaması Çoklu programlamada bellekte birden fazla proses çalışmaya hazır bekler Bu prosesler hangi sırayla çalıştırılacak? Kriterler Adil Kaynaklara tüm proseslerce eşit ve adil erişim Ayrımcı Farklı öncelikleri olan proseslerin desteklenmesi Verim İşlemciyi mümkün olduğunca meşgul tut Birim zamanda bitirilen iş sayısını arttır Bir prosesin başlatılmasından bitirilmesine kadar geçen toplam bitirilme zamanını asgariye indir
Işlemci Zaman Planlaması Proses başlangıcından bitimine kadar işlemcide çalıştırılma ve Girdi/Çıktı işlemleri dönüşümlü olarak tekrar eder İşlemci İşlemci zaman planlayıcısı (Dispatcher) Ana bellekde olan ve çalıştırılmaya hazır proseslerden birini seçer ve işlemciden o prosesi çalıştırmasını ister Girdi/Çıktı İşlemci Girdi/Çıktı İşlemci Girdi/Çıktı
İlk Gelen İlk Çıkar (First-Come-First-Served) Proses P1 P2 P3 İşlemci zamanı (sn) 24 3 Proseslerin geliş sırası: P1, P2, P3 Proses P1 P2 P3 Geliş zamanı (sn) 1 2 P1 P2 P3 24 27 30 Proseslerin bekleme zamanı: P1=0, P2=23, P3=25 Ortalama bekleme zamanı: (0+23+25)/3 = 16 Proseslerin geliş sırası: P2, P3, P1 Proses P1 P2 P3 Geliş zamanı (sn) 2 1 P2 P3 P1 3 6 30 Proseslerin bekleme zamanı: P1=4, P2=0, P3=2 Ortalama bekleme zamanı =(4+0+2)/3 = 2
En Kısa İş İlk (Shortest-Job-First (SJF)) Her bir prosesin kalan işlemci zamanını kullanarak, işlemciyi en az işlemci zamanına ihtiyacı olan prosese ver. İki versiyonu tanımlanabilir İşlem üstünlüğü kullanılmayan (Non-preemptive): İşlemci bir prosese verildiğinde bu prosesin işi tamamen bitinceye kadar işlemci başka bir prosese verilemez. İşlem üstünlüğü kullanılan (Preemptive): Yeni bir proses iş sıralamasına girdiğinde bu yeni işin işlemci ihtiyacı o geldiğinde işlemciyi kullanan işten daha kısa ise işlemci yeni gelen işe verilir. En kısa iş ilk algoritması en az ortalama bekleme zamanını verir, en iyi algoritmadır.
İşlem üstünlüğü kullanılmayan SJF Proses P1 P2 P3 P4 Geliş Zamanı (sn) 2 4 5 İşlemci zamanı (sn) 7 4 1 Proseslerin bekleme zamanı: P1=0, P2=6, P3=3, P4=7 Ortalama bekleme zamanı: (0+6+3+7)/4 = 4 P1 P3 P2 P4 3 7 8 12 16 Proseslerin bekleme zamanı = Bitme zamanı – Belleğe konma zamanı – İşlemci zamanı
İşlem üstünlüğü kullanılan SJF Proses P1 P2 P3 P4 Geliş zamanı (sn) 2 4 5 CPU zamanı (sn) 7 4 1 Proseslerin bekleme zamanı = Bitme zamanı – Belleğe konma zamanı – İşlemci zamanı Proseslerin bekleme zamanı: P1=9, P2=1, P3=0, P4=2 Ortalama bekleme zamanı: (9+1+0+2)/4 = 3 P1 P2 P3 P2 P4 P1 2 4 5 7 11 16
Çevrimsel Sıralı Her bir prosese işlemci kısa bir süre için verilir. Genelde bu süre 10 ms ile 100 ms arasında değişebilir. Bu süreye kuantum (q) denir. Bu süre sonunda prosesin çalıştırılması durdurulur ve bu proses hazır prosesler kuyruğunun en sonuna eklenir. İşlemcide bu kuyruğun en başında bekleyen prosese verilir. Eğer bu kuyrukta n proses bekliyorsa ve kuantum değeri q ise, her bir proses işlemci zamanının 1/n ini alır ve her alışında q süresince işlemciyi kullanır. Hiçbir proses (n-1)q sürecinden fazla işlemciyi beklemez. q nun bağlam değiştirme zamanından uzun olması gerekir. Aksi takdirde işlemci zamanı prosesleri çalıştırmaktan çok bağlam değiştirmekle geçer.
Çevrimsel Sıralı Kuantum = 20 ms Proses P1 P2 P3 P4 İşlemci zamanı (ms) 53 17 68 24 P1 P2 P3 P4 P1 P3 P4 P1 P3 P3 Kuantum = 20 ms 20 37 57 77 97 117 121 134 154 162 Proseslerin bekleme zamanı = Bitme zamanı – Belleğe konma zamanı – İşlemci zamanı P1=81, P2=20, P3=94, P4=97 Ortalama bekleme zamanı: (81+20+94+97)/4 = 73 ms
Çevrimsel Sıralı Kuantum = 10 ms Proses P1 P2 P3 P4 İşlemci zamanı (ms) 53 17 68 24 P1 P2 P3 P4 P1 P2 P3 P4 P1 P3 P4 P1 P3 P1 P3 P1 P3 P3 Kuantum = 10 ms 10 20 30 40 50 57 67 77 87 97 111 131 144 162 101 121 141 154 Proseslerin bekleme zamanı = Bitme zamanı – Belleğe konma zamanı – İşlemci zamanı P1=91, P2=40, P3=94, P4=77 Ortalama bekleme zamanı: (91+40+94+77)/4 = 75.5 ms
İşlem üstünlüğü kullanılan SJF Proses P1 P2 P3 P4 Geliş zamanı (sn) 2 4 5 CPU zamanı (sn) 7 4 1 Ortalama bekleme zamanını hesaplayın İşlem üstünlüğü kullanılan SJF İşlem üstünlüğü kullanılmayan SJF Çevrimsel sıralı quantum=1 sn
Proses P1 P2 P3 P4 Geliş zamanı (sn) 2 4 5 CPU zamanı (sn) 5 4 3 1 Ortalama bekleme zamanını hesaplayın İşlem üstünlüğü kullanılan SJF İşlem üstünlüğü kullanılmayan SJF Çevrimsel sıralı quantum=1 sn
Öncelikli Çizelgeleme Her bir prosese önceliğini belirleyen bir numara verilir İşlemci bekleyen prosesler içinde önceliği en yüksek olana verilir (en küçük rakam = önceliği en fazla) İşlem üstünlüğü kullanılmayan İşlem üstünlüğü kullanılan Problem: Açlık (İşlemci az öncelikli proseslere hiç verilemeyebilir) Çözüm: Yaşlanma (zaman geçtikçe prosesin önceliğini arttır) Öncelik=0 CPU Öncelik=1
Çok Seviyeli Kuyruklar Hazır kuyruğu birden fazla kuyruğa bölünür Her kuyruğun kendi algoritması olabilir Kuyrukları kendi aralarında sıralandırmak gerekir Sabit öncelik kullanılabilir ama bu açlık sorunu yaratabilir Her bir kuyruğa belli bir zaman verilebilir. Bir kuyruktaki prosesler bu zaman zarfında çalıştırılabilir. Sistem prosesleri Etkileşimli prosesler CPU Toplu yürütüm sistemleri Öğrenci prosesleri
Çokseviyeli Geribeslemeli Kuyruklar Bir proses bir kuyruktan diğerine gidebilir (Yaşlanma bu şekilde gerçekleştirilebilir) Çok seviyeli geribeslemeli kuyrukların parametleri Kuyruk sayısı Her bir kuyrukta kullanılan çizelgeleme Bir prosesin yaşını arttırmak için kullanılan metot Bir prosesin yaşını azaltmak için kullanılan metot Yeni bir prosesin hangi kuyruğa ekleneceğini belirlemek için kullanılan metot
Örnek Üç kuyruk Çizelgeleme Q0: FCFS + kuyruk 0 için kuantum 8 ms Q0 daki prosesler FCFS e göre çalıştırılır. Bir proses çalıştırılmaya başladıktan sonra en fazla 8 ms lik bir zaman verilir. Eğer 8 ms süresinde bitmezse işlemci Q1 a verilir. Q1 deki prosesler de FCFS e göre çalıştırılır. Bir proses çalıştırılmaya başladıktan sonra en fazla 16 ms lik bir zaman verilir. Eğer 16 ms süresinde bitmezse işlemci Q2 a verilir. Q2 deki proses bitinceye kadar işlemciyi tutar. Bitince işlemci yine Q0 da bekleyen bir prosese verilir.