Ana içeriğe geç

Görev Çizelgeleme Analiz Aracı

Bir görev çizelgeleyicisinin (task scheduler) yöneteceği periyodik görev kümesinin zaman sınırlarını tutturup tutturamayacağını hesaplar. Görevlerin periyodunu, en kötü durum yürütme süresini ve zaman sınırını girin; araç çizelgelenebilirlik analizini (schedulability analysis) yapar, her görevin en kötü tepki süresini ve kalan payını verir, çizelgeyi zaman ekseninde çizer.

Görev çizelgeleme
Kesinti

Periyodu kısa olan görev daha yüksek öncelik alır. · 6 görev · U = %90 · hiperperiyot 160 ms

İşlemci kullanımıÇizelgelenebilir
%90
En dar pay
4 ms — İç döngü (kararlılık)
Boşta
%10
Kesinti
24 (160 ms içinde)
Testler
  • Kullanım (geçti)U = %90; gerekli koşul (U ≤ %100) sağlanıyor
  • Liu–Layland sınırı (sonuç vermedi)6 görev için %73,5; yeterli koşuldur, aşılması kaçırma demek değildir
  • Hiperbolik sınır (sonuç vermedi)∏(Uᵢ + 1) = 2,304; 2’yi aşıyor, sonuç vermez
  • Tepki süresi analizi (geçti)Her görevin en kötü tepki süresi zaman sınırının içinde
  • Benzetim (geçti)İlk 160 ms içinde zaman sınırı aşımı yok

Görevler

Periyotları birbirinin katı (harmonik) altı görev. Kullanım %90 ile Liu–Layland sınırının üstündedir, yine de tepki süresi analizi kümenin çizelgelenebilir olduğunu gösterir: yeterli koşulun aşılması kaçırma demek değildir. Süreler örnek değerlerdir.

SıraGörevPeriyot T (ms)Süre C (ms)Zaman sınırı D (ms)ÖncelikTepki (analiz)Tepki (benzetim)PayEn fazla Cİşlemler
11 ms1 ms4 ms1,5 ms
22,5 ms2,5 ms7,5 ms2,5 ms
37,5 ms7,5 ms12,5 ms6 ms
417 ms17 ms23 ms10 ms
535 ms35 ms45 ms16 ms
680 ms80 ms80 ms32 ms

Zaman çizelgesi

İlk 160 ms · çizelge bundan sonra tekrarlar
İç döngü (kararlılı…İç döngü (kararlılık) · iş 1: 0 – 1 ms (1 ms)İç döngü (kararlılık) · iş 2: 5 ms – 6 ms (1 ms)İç döngü (kararlılık) · iş 3: 10 ms – 11 ms (1 ms)İç döngü (kararlılık) · iş 4: 15 ms – 16 ms (1 ms)İç döngü (kararlılık) · iş 5: 20 ms – 21 ms (1 ms)İç döngü (kararlılık) · iş 6: 25 ms – 26 ms (1 ms)İç döngü (kararlılık) · iş 7: 30 ms – 31 ms (1 ms)İç döngü (kararlılık) · iş 8: 35 ms – 36 ms (1 ms)İç döngü (kararlılık) · iş 9: 40 ms – 41 ms (1 ms)İç döngü (kararlılık) · iş 10: 45 ms – 46 ms (1 ms)İç döngü (kararlılık) · iş 11: 50 ms – 51 ms (1 ms)İç döngü (kararlılık) · iş 12: 55 ms – 56 ms (1 ms)İç döngü (kararlılık) · iş 13: 60 ms – 61 ms (1 ms)İç döngü (kararlılık) · iş 14: 65 ms – 66 ms (1 ms)İç döngü (kararlılık) · iş 15: 70 ms – 71 ms (1 ms)İç döngü (kararlılık) · iş 16: 75 ms – 76 ms (1 ms)İç döngü (kararlılık) · iş 17: 80 ms – 81 ms (1 ms)İç döngü (kararlılık) · iş 18: 85 ms – 86 ms (1 ms)İç döngü (kararlılık) · iş 19: 90 ms – 91 ms (1 ms)İç döngü (kararlılık) · iş 20: 95 ms – 96 ms (1 ms)İç döngü (kararlılık) · iş 21: 100 ms – 101 ms (1 ms)İç döngü (kararlılık) · iş 22: 105 ms – 106 ms (1 ms)İç döngü (kararlılık) · iş 23: 110 ms – 111 ms (1 ms)İç döngü (kararlılık) · iş 24: 115 ms – 116 ms (1 ms)İç döngü (kararlılık) · iş 25: 120 ms – 121 ms (1 ms)İç döngü (kararlılık) · iş 26: 125 ms – 126 ms (1 ms)İç döngü (kararlılık) · iş 27: 130 ms – 131 ms (1 ms)İç döngü (kararlılık) · iş 28: 135 ms – 136 ms (1 ms)İç döngü (kararlılık) · iş 29: 140 ms – 141 ms (1 ms)İç döngü (kararlılık) · iş 30: 145 ms – 146 ms (1 ms)İç döngü (kararlılık) · iş 31: 150 ms – 151 ms (1 ms)İç döngü (kararlılık) · iş 32: 155 ms – 156 ms (1 ms)Veri yolu G/ÇVeri yolu G/Ç · iş 1: 1 ms – 2,5 ms (1,5 ms)Veri yolu G/Ç · iş 2: 11 ms – 12,5 ms (1,5 ms)Veri yolu G/Ç · iş 3: 21 ms – 22,5 ms (1,5 ms)Veri yolu G/Ç · iş 4: 31 ms – 32,5 ms (1,5 ms)Veri yolu G/Ç · iş 5: 41 ms – 42,5 ms (1,5 ms)Veri yolu G/Ç · iş 6: 51 ms – 52,5 ms (1,5 ms)Veri yolu G/Ç · iş 7: 61 ms – 62,5 ms (1,5 ms)Veri yolu G/Ç · iş 8: 71 ms – 72,5 ms (1,5 ms)Veri yolu G/Ç · iş 9: 81 ms – 82,5 ms (1,5 ms)Veri yolu G/Ç · iş 10: 91 ms – 92,5 ms (1,5 ms)Veri yolu G/Ç · iş 11: 101 ms – 102,5 ms (1,5 ms)Veri yolu G/Ç · iş 12: 111 ms – 112,5 ms (1,5 ms)Veri yolu G/Ç · iş 13: 121 ms – 122,5 ms (1,5 ms)Veri yolu G/Ç · iş 14: 131 ms – 132,5 ms (1,5 ms)Veri yolu G/Ç · iş 15: 141 ms – 142,5 ms (1,5 ms)Veri yolu G/Ç · iş 16: 151 ms – 152,5 ms (1,5 ms)Dış döngü (güdüm)Dış döngü (güdüm) · iş 1: 2,5 ms – 5 ms (2,5 ms)Dış döngü (güdüm) · iş 1: 6 ms – 7,5 ms (1,5 ms)Dış döngü (güdüm) · iş 2: 22,5 ms – 25 ms (2,5 ms)Dış döngü (güdüm) · iş 2: 26 ms – 27,5 ms (1,5 ms)Dış döngü (güdüm) · iş 3: 42,5 ms – 45 ms (2,5 ms)Dış döngü (güdüm) · iş 3: 46 ms – 47,5 ms (1,5 ms)Dış döngü (güdüm) · iş 4: 62,5 ms – 65 ms (2,5 ms)Dış döngü (güdüm) · iş 4: 66 ms – 67,5 ms (1,5 ms)Dış döngü (güdüm) · iş 5: 82,5 ms – 85 ms (2,5 ms)Dış döngü (güdüm) · iş 5: 86 ms – 87,5 ms (1,5 ms)Dış döngü (güdüm) · iş 6: 102,5 ms – 105 ms (2,5 ms)Dış döngü (güdüm) · iş 6: 106 ms – 107,5 ms (1,5 ms)Dış döngü (güdüm) · iş 7: 122,5 ms – 125 ms (2,5 ms)Dış döngü (güdüm) · iş 7: 126 ms – 127,5 ms (1,5 ms)Dış döngü (güdüm) · iş 8: 142,5 ms – 145 ms (2,5 ms)Dış döngü (güdüm) · iş 8: 146 ms – 147,5 ms (1,5 ms)Hava verisiHava verisi · iş 1: 7,5 ms – 10 ms (2,5 ms)Hava verisi · iş 1: 12,5 ms – 15 ms (2,5 ms)Hava verisi · iş 1: 16 ms – 17 ms (1 ms)Hava verisi · iş 2: 47,5 ms – 50 ms (2,5 ms)Hava verisi · iş 2: 52,5 ms – 55 ms (2,5 ms)Hava verisi · iş 2: 56 ms – 57 ms (1 ms)Hava verisi · iş 3: 87,5 ms – 90 ms (2,5 ms)Hava verisi · iş 3: 92,5 ms – 95 ms (2,5 ms)Hava verisi · iş 3: 96 ms – 97 ms (1 ms)Hava verisi · iş 4: 127,5 ms – 130 ms (2,5 ms)Hava verisi · iş 4: 132,5 ms – 135 ms (2,5 ms)Hava verisi · iş 4: 136 ms – 137 ms (1 ms)Sağlık izlemeSağlık izleme · iş 1: 17 ms – 20 ms (3 ms)Sağlık izleme · iş 1: 27,5 ms – 30 ms (2,5 ms)Sağlık izleme · iş 1: 32,5 ms – 35 ms (2,5 ms)Sağlık izleme · iş 2: 97 ms – 100 ms (3 ms)Sağlık izleme · iş 2: 107,5 ms – 110 ms (2,5 ms)Sağlık izleme · iş 2: 112,5 ms – 115 ms (2,5 ms)KayıtKayıt · iş 1: 36 ms – 40 ms (4 ms)Kayıt · iş 1: 57 ms – 60 ms (3 ms)Kayıt · iş 1: 67,5 ms – 70 ms (2,5 ms)Kayıt · iş 1: 72,5 ms – 75 ms (2,5 ms)Kayıt · iş 1: 76 ms – 80 ms (4 ms)020 ms40 ms60 ms80 ms100 ms120 ms140 ms160 ms

↑ çıkış anı · ↓ periyottan farklı zaman sınırı · kırmızı: kaçırılan zaman sınırı. Sürükleyerek bir aralık seçin ya da Ctrl/⌘ + tekerlekle yakınlaşın; alttaki şeritte görünüm kutusunu sürükleyerek gezinin.

Nasıl kullanılır?​

  1. Görevleri girin ya da bir örnek senaryo seçin. Her görev için periyot (T), en kötü durum yürütme süresi (C) ve göreli zaman sınırı (D) milisaniye olarak yazılır; ondalık değer girilebilir.
  2. Politikayı seçin: sabit öncelik (hız-monoton, zaman sınırı-monoton ya da tablo sırası), EDF ya da döngüsel yürütücü. Sabit öncelik ve EDF için kesintili ya da kesintisiz çalışma ayrıca seçilir.
  3. Kararı ve testleri okuyun. Soldaki kart kümenin çizelgelenebilir olup olmadığını, sağdaki liste bu karara hangi testlerle varıldığını gösterir.
  4. Tabloyu inceleyin. "Tepki (analiz)" en kötü durumu, "Tepki (benzetim)" girdiğiniz fazlarla gözlenen değeri verir. "Pay" zaman sınırına kalan süredir; "En fazla C", diğer görevler değişmeden o görevin süresinin nereye kadar büyüyebileceğini söyler.
  5. Zaman çizelgesinde hangi işin ne zaman çalıştığını, kesintileri ve kaçırılan zaman sınırlarını izleyin; sürükleyerek yakınlaşabilirsiniz.
  6. Paylaşın ya da dışa aktarın: bağlantı tüm görev kümesini taşır, CSV tabloyu sonuçlarıyla birlikte verir.

Görev modeli​

Araç, tek bir işlemci çekirdeğinde çalışan periyodik görevleri ele alır. Bir görev her periyotta bir iş (job) çıkarır; iş, çıkışından itibaren zaman sınırı (deadline) dolmadan bitmelidir.

SimgeAnlamı
TPeriyot: iki çıkış arasındaki süre
CEn kötü durum yürütme süresi (worst-case execution time, WCET)
DGöreli zaman sınırı; çoğu görevde periyoda eşittir
Fazİlk işin çıkış anı; yalnızca benzetimi etkiler
BEngellenme süresi: daha düşük öncelikli bir görevin kritik kesiti (critical section) yüzünden beklenen en uzun süre
UKullanım (utilization): C / T; küme için toplamı alınır

Toplam kullanım %100'ü aşıyorsa hiçbir politika işe yaramaz: işlemci istenen işi yapacak zamana sahip değildir. %100'ün altında kalmak ise tek başına yeterli değildir; sonucu politika belirler.

Politikalar​

PolitikaÖncelik nasıl belirlenir?Not
Hız-monoton (rate-monotonic, RM)Periyodu kısa olan önceD = T olan kümelerde en iyi sabit öncelik ataması
Zaman sınırı-monoton (deadline-monotonic, DM)Zaman sınırı kısa olan önceD ≤ T olan kümelerde en iyi sabit öncelik ataması
Tablo sırasıTablodaki sıraKendi atamanızı denemek için
EDF (earliest deadline first)Çalışma anında: zaman sınırı en yakın işTek çekirdekte %100 kullanıma kadar çizelgeler
Döngüsel yürütücü (cyclic executive)Öncelik yok; işler sabit bir tablodan çalışırZaman tetiklemeli (time-triggered) mimariler

Sabit öncelikte öncelik bir önem sıralaması değil, zaman sınırlarını tutturma aracıdır; ayrıntısı kitabın görev modeli ve öncelik atama başlığındadır.

Kesintili (preemptive) çalışmada daha öncelikli bir iş hazır olduğunda çalışan iş durdurulur. Kesintisiz (non-preemptive) çalışmada başlayan iş bitene kadar sürer; bağlam değiştirme azalır, paylaşılan veri kendiliğinden korunur, ama uzun bir iş kendinden öncelikli herkesi bekletir.

Analiz nasıl yapılır?​

Tepki süresi analizi (response-time analysis), sabit öncelikli bir görevin en kötü tepki süresini, kendisinden öncelikli görevlerin araya girmesini hesaba katarak bulur. Kesintili çalışmada en kötü durum, görevin kendinden öncelikli bütün görevlerle aynı anda çıktığı andır:

R = C + B + Σ ⌈R / Tj⌉ · Cj (j: daha yüksek öncelikli görevler)

R iki yanda da bulunduğu için değer yinelemeyle aranır: R = C + B ile başlanır, sağ taraf değişmeyene kadar yeniden hesaplanır. R ≤ D ise görev zaman sınırını her koşulda tutturur. Zaman sınırı periyottan uzun olan görevlerde aynı meşgul dönem içindeki ardışık işler tek tek incelenir.

Kesintisiz çalışmada engelleme, daha düşük öncelikli görevlerin en uzununun süresidir: o iş başladıysa bitmesi beklenir. Araç bu kipte B sütununu kullanmaz, engellemeyi görev kümesinden kendisi çıkarır.

EDF için zaman sınırı periyottan kısa değilse toplam kullanımın %100'ü aşmaması yeterli ve gereklidir. Kısa zaman sınırı varsa işlemci talep ölçütü (processor demand criterion) sınanır: her mutlak zaman sınırına kadar bitmesi gereken iş, o ana kadar geçen süreyi aşmamalıdır.

Liu–Layland ve hiperbolik sınırlar yalnızca kullanım değerlerine bakan hızlı testlerdir ve yalnızca hız-monoton, kesintili ve D = T olan kümelere uygulanır. İkisi de yeterli koşuldur: sınırın altında kalan küme kesin çizelgelenebilir, üstünde kalan küme için bir şey söylenemez. Araç bu durumda testi "sonuç vermedi" diye işaretler ve kararı tepki süresi analizine bırakır.

Analiz ile benzetim neden farklı çıkar?​

Analiz, işlerin en elverişsiz anda çıktığı durumu ve girilen engellenme sürelerini hesaba katar; fazlardan bağımsızdır. Benzetim ise yalnızca girdiğiniz fazlarla oluşan tek bir çizelgeyi çalıştırır ve engellenmeyi modellemez. Bu yüzden benzetimdeki tepki süresi analizdekinden kısa çıkabilir, uzun çıkamaz.

Fark en çok kesintisiz çalışmada görülür: bütün görevler aynı anda çıkarsa önce en öncelikli çalışır ve engelleme hiç yaşanmaz; en kötü durum, düşük öncelikli uzun işin öncelikli işten hemen önce başlamasıdır. "Kesintisiz çizelgeleme" örneği bunu gösterir. Kanıt olarak analiz kullanılır; benzetim çizelgeyi anlamaya ve analizin beklenen yönde olduğunu görmeye yarar.

Döngüsel yürütücü ve çerçeve seçimi​

Döngüsel yürütücüde çizelge çalışma anında hesaplanmaz: zaman, eşit uzunlukta küçük çerçevelere (minor frame) bölünür ve hangi işin hangi çerçevede çalışacağı önceden bir tabloya yazılır. Tablo ana çerçeve (major frame) boyunca sürer ve başa döner; ana çerçeve, periyotların en küçük ortak katıdır. Araç küçük çerçeve adaylarını üç koşulla sınar:

  1. Çerçeve en uzun görevin süresinden kısa olamaz (iş çerçeve içinde bitmelidir).
  2. Çerçeve ana çerçeveyi tam bölmelidir.
  3. Her görev için çıkış ile zaman sınırı arasına en az bir tam çerçeve sığmalıdır: 2f − obeb(T, f) ≤ D.

Koşulları sağlayan adaylardan biri seçildiğinde işler çerçevelere bölünmeden, zaman sınırı en yakın olandan başlanarak yerleştirilir. Yerleştirme sezgiseldir: bir çözüm bulamaması çözüm olmadığını göstermez; başka bir çerçeve denemek ya da uzun görevi parçalara bölmek gerekebilir. Aynı fikrin bölümler arasındaki karşılığı için kitabın zaman bölümlemesi başlığına bakabilirsiniz.

Varsayımlar ve sınırlar​

  • Tek işlemci çekirdeği varsayılır. Çok çekirdekli işlemcilerde çekirdekler arası girişim ayrı bir analiz konusudur.
  • C değerleri doğru kabul edilir. Araç WCET hesaplamaz; analiz ancak süreler birer üst sınırsa geçerlidir.
  • Bağlam değiştirme, çizelgeleyicinin kendi süresi, kesme yükü ve çıkış titreşimi (jitter) modellenmez. Bu etkileri süreye ya da engellenmeye pay ekleyerek kaba biçimde hesaba katabilirsiniz.
  • Görevler bağımsız sayılır; paylaşılan kaynaklar yalnızca B sütunuyla temsil edilir. B sütunu sabit öncelikli kesintili çalışmada kullanılır.
  • Kesintisiz EDF için kapalı biçimli test uygulanmaz; karar benzetime dayanır ve bu yüzden kanıt değeri taşımaz.
  • Döngüsel yürütücüde faz kullanılmaz ve zaman sınırı periyottan uzun alınmaz.
  • En çok 16 görev çözümlenir. Periyotların ortak katı çok uzunsa benzetim sınırlandırılır ve bu, çizelgenin altında belirtilir.
  • Sonuçlar tasarım aşamasındaki değerlendirme içindir. DO-178C kapsamında zamanlama kanıtı; ölçülmüş ya da analizle bulunmuş WCET değerlerine, hedef donanımdaki ölçümlere ve projenin doğrulama planına dayanır. Bu konu kitabın gerçek zamanlı işletim sistemleri bölümünde, kavramların girişi ise Gerçek Zamanlı Sistemler yazısında anlatılır.