Gömülü Sistemlerde Gerçek Zamanlı İşletim Sistemleri ve Katı Zamanlama

Bir hava yastığının “birazdan açılması”, motor kontrol ünitesinin ateşleme sinyalini uygun olduğunda göndermesi veya kalp pilinin birkaç saniyeliğine düşünmesi kabul edilemez. Gömülü sistemlerde başarı yalnızca doğru sonucu üretmek değil, bu sonucu belirlenen zaman sınırı içinde üretmektir. Gerçek Zamanlı İşletim Sistemleri, yani RTOS’lar, görevleri olabildiğince hızlı koşturmaktan ziyade davranışlarını öngörülebilir hâle getirir.

``

Gerçek zamanlı olmak ne demektir?

Genel amaçlı bir işletim sistemi ortalama performansı, kullanıcı deneyimini ve toplam işlem kapasitesini önemser. RTOS ise determinizme odaklanır. Bir görevin en kötü koşullarda ne kadar sürede tamamlanacağının hesaplanabilmesi gerekir.

Bir periyodik görev için temel zamanlama koşulu şöyle gösterilebilir:

\[R_i \leq D_i\]

Burada $R_i$ görevin en kötü durum yanıt süresini, $D_i$ ise son teslim zamanını belirtir. Görev çok hızlı çalışsa bile zaman zaman $D_i$ sınırını aşıyorsa katı gerçek zamanlı sistem için uygun değildir.

Sistem türü Deadline kaçırılırsa Örnek
Katı gerçek zamanlı Sistem başarısız kabul edilir Hava yastığı, uçuş kontrolü
Esnek gerçek zamanlı Kalite düşer ancak çalışma sürer Video konferans, ses akışı
Genel amaçlı Gecikme çoğunlukla performans sorunudur Metin düzenleyici, web tarayıcı

Görev, öncelik ve kesme üçgeni

RTOS uygulamaları birbirinden bağımsız görevlere ayrılır. Zamanlayıcı, işlemciyi bu görevler arasında paylaştırır. Öncelikli ve kesilebilir bir zamanlayıcıda yüksek öncelikli görev hazır olduğunda düşük öncelikli görev durdurulur. Böylece kritik iş, market kuyruğunda alarm veren bir itfaiyeci gibi öne geçer.

Kesme servis rutinleri donanım olaylarına hızlı tepki verir; fakat uzun tutulmaları diğer görevleri geciktirir. Bu nedenle kesme içinde yalnızca gerekli veri alınmalı, ağır işlem bir göreve bildirim gönderilerek ertelenmelidir.

Yaygın zamanlama yaklaşımları şunlardır:

Algoritma Öncelik mantığı Güçlü yönü
Rate Monotonic Kısa periyot yüksek öncelik Basit ve analiz edilebilir
Deadline Monotonic Kısa deadline yüksek öncelik Deadline’lar periyottan farklıysa etkilidir
Earliest Deadline First En yakın deadline önce Yüksek işlemci kullanımı sağlar

Rate Monotonic altında $n$ bağımsız görev için yeterli işlemci kullanım sınırı yaklaşık olarak şöyledir:

\[U=\sum_{i=1}^{n}\frac{C_i}{T_i} \leq n(2^{1/n}-1)\]

$C_i$ en kötü çalışma süresi, $T_i$ görev periyodudur. Bu eşitsizlik sağlanıyorsa görev kümesi zamanlanabilir kabul edilir; sağlanmaması ise otomatik olarak başarısız olduğu anlamına gelmez, daha ayrıntılı yanıt süresi analizi gerekir.

FreeRTOS ile periyodik görev

Aşağıdaki görev, sensörü her 10 milisaniyede bir okur. vTaskDelayUntil, sıradan gecikmenin aksine önceki uyanma zamanını temel alarak periyot kaymasını azaltır.

void SensorTask(void *argument)
{
    TickType_t lastWake = xTaskGetTickCount();
    const TickType_t period = pdMS_TO_TICKS(10);

    for (;;) {
        int sample = read_sensor();
        process_sample(sample);

        vTaskDelayUntil(&lastWake, period);
    }
}

Kodun periyodik olması tek başına garanti sağlamaz. read_sensor() fonksiyonunun en kötü çalışma süresi, kesme gecikmeleri, bağlam değiştirme maliyeti ve daha yüksek öncelikli görevlerin etkisi ölçülmelidir.

Gizli düşmanlar

Öncelik terslenmesi, düşük öncelikli bir görevin kilit tuttuğu için kritik görevi bekletmesidir. Priority inheritance mekanizması, kilidi tutan görevin önceliğini geçici olarak yükselterek sorunu sınırlar. Dinamik bellek tahsisi, belirsiz süreli döngüler, bloklayan sürücüler ve önbellek davranışı da jitter oluşturabilir.

Katı gerçek zamanlı tasarımın özeti şudur: Ortalama süreye değil WCET değerine bak, paylaşılan kaynakları sınırla, görev önceliklerini matematiksel olarak analiz et ve gerçek donanım üzerinde ölçüm yap. RTOS zamanı büyütmez; zamanı disipline eder.

gomulu-sistemlerde-gercek-69

Yorumlar