Son zamanlarda bir röportajda Linux İşletim sistemi tarafından kullanılan Zamanlama algoritması hakkında sorular soruldu. Neden kullanılan algoritma nedir?
Ayrıca, gerçek zamanlı işletim sistemlerinde hangi algoritma kullanılır ve neden?
Son zamanlarda bir röportajda Linux İşletim sistemi tarafından kullanılan Zamanlama algoritması hakkında sorular soruldu. Neden kullanılan algoritma nedir?
Ayrıca, gerçek zamanlı işletim sistemlerinde hangi algoritma kullanılır ve neden?
Yanıtlar:
Geçerli Linux görev zamanlayıcısına Tamamen Adil Zamanlayıcı (CFS) denir. Daha fazla bilgi için http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt adresine göz atmalısınız . Tasarım oldukça karmaşık ve bence RTOS için uygun değil.
Gerçek zamanlı sistemlerde yaygın bir teknik oran monoton çizelgelemedir, çünkü belirli varsayımların geçerli olup olmadığı konusunda güçlü garantilere sahiptir (örneğin statik görev öncelikleri ve sabit yürütme süresi ve oranı). Bir sürü başka algoritma var ve çok fazla araştırma yapıldı. Yani temelde ihtiyacınız olan özellikler ve göreviniz hakkında bildikleriniz ve nelerin düzeltildiği.
Çekirdeğin G / Ç zamanlamasını alıp almadığınızdan emin değilim. Aksi halde: Bu yanıtı dikkate almayın.
Wikipedia, CFG'nin (tamamen Fair Queuing) Çekirdek 2.6.18'den beri varsayılan olduğunu belirtiyor .
OpenSUSE ürünümde (Kernel 2.6.37 çalıştırıyor) CFG, NOOP ve Son Tarih arasında geçiş yapabilirim .
Linux zamanlayıcı tarafından kullanılan algoritma, önleyici öncelik ve önyargılı zaman dilimlemenin birleşiminden oluşan karmaşık bir şemadır. Yüksek öncelikli görevlere daha uzun süre kuantum ve düşük öncelikli görevlere daha kısa zaman kuantum atar.
Her işlemi ya gerçek zamanlı süreç ya da normal (diğer) bir süreç olarak tanımlar. Gerçek zamanlı görevlere, [0,99] aralığında statik öncelikler atanır, burada düşük sayı daha yüksek önceliği gösterir.
Diğer tüm görevler, güzel değerlerini artı veya eksi 5'e dayanan bir görevin etkileşimine dayalı olarak [100,139] aralığında dinamik önceliklere sahiptir. Daha etkileşimli olan görevlerin genellikle daha uzun uyku süreleri vardır ve bu nedenle zamanlayıcı etkileşimli görevleri desteklediğinden −5'e yakın ayarlamalar yapın. (Bir görevin etkileşimi, G / Ç'yi beklerken ne kadar süre uyuduğuna göre belirlenir.) Bir görevin etkileşimi, 5 değerinin hoş değere eklenip eklenmeyeceğini belirler. Bu ayarlamaların sonucu, bu görevler için daha yüksek öncelikler olacaktır. Tersine, daha kısa uyku süresine sahip görevler genellikle daha fazla CPU'ya bağlıdır ve bu nedenle öncelikleri düşürülür.
Çekirdek, bir runqueue veri yapısında çalıştırılabilir tüm görevlerin bir listesini tutar. Bir çalışma dizisi iki öncelik dizisi içerir: etkin ve süresi dolmuş. Etkin dizi, zaman diliminde kalan zamanı olan tüm görevleri içerir ve süresi dolmuş dizi, süresi dolmuş tüm görevleri içerir. Bu öncelik dizilerinin her biri, önceliğe göre dizine eklenen görevlerin bir listesini içerir. Zamanlayıcı, CPU'da yürütmek için etkin diziden en yüksek önceliğe sahip görevi seçer. Tüm görevler zaman dilimlerini tükettiğinde (yani, etkin dizi boştur), iki öncelik dizisi değiştirilir: süresi dolan dizi etkin dizi haline gelir veya bunun tersi de geçerlidir.
Bir görevin dinamik önceliği, görev zaman kuantumunu tükettiğinde ve süresi dolmuş diziye taşındığında yeniden hesaplanır. Böylece, iki dizi değiş tokuş edildiğinde, yeni aktif dizideki tüm görevlere yeni öncelikler ve karşılık gelen zaman dilimleri atanmıştır. (Not: Bu, Abraham Silberschatz ve arkadaşlarının İşletim Sistemi Kavramları (9. baskı) kitabından bir alıntıdır. Ayrıntılar için lütfen bu kitabın 5.6.3 bölümüne bakın)
>
Cevabınızın harici bir kaynaktan aldığınız bölümleri için, özellikle bir kitaptan alıntı yaparken "alıntı" biçimlendirmesini (başlangıç satırları ile ) kullanın.
Bu başka bir sorunuzun cevabı. Gerçek zamanlı sistemler (RTS) sert ve yumuşak olmak üzere iki tiptir. Sert RTS için CPU zamanlama algoritması öncelik temelli önleyici algoritma ve yumuşak RTS için CPU önleyici olmayan önceliktir.