Gerçek Zamanlı İşletim Sistemi (RTOS) Nedir ?

Ümit Aksoylu
10 min readMay 23, 2020

Merhabalar, bu yazımızda Gerçek Zamanlı İşletim Sisteminin ne olduğudan ve normal işletim sistemi ile ne gibi farkları olduğundan bahsedeceğiz. Şu aralar işletim sistemi geliştirmeyle meşgul olduğumdan ve bu konuda fazla detaylı Türkçe kaynak bulunamamasından ötürü olabildiğince detaylı bir makale olmasına özen göstereceğim.

Bu yazı şahsi bloğumda ve Medium’da aynen paylaşılacaktır :)

Konuya Giriş Yapalım;

İşletim sistemi denildiğinde aklımıza hep aynı isimler gelir. Windows, Android , IOS…. Oysa bu işletim sistemleri bilinenin aksine bizim teknolojik ihtiyaçlarımızın çok küçük bir bölümünü kapsamaktadır.

Meselenin derinine indiğimizde ise bu mega yazılımlar için tabir edilen buz dağı metaforunun doğru olduğunu farkederiz. İşletim sistemlerinin sayısı aslında çok fazladır. Ve genellikle her biri belirli bir amaca hizmet etmek için tasarlanmıştır.

İşlemlerin zaman dilimine bağımlı olduğu ve gecikmelerin problemler doğurduğu koşullarda kullanılması için Gerçek Zamanlı İşletim Sistemleri (Real Time Operating System, RTOS) mimarisi tasarlanılmıştır.

Zaman Ne Kadar Önemlidir ?

Her işletim sistemi, bir ihtiyacı karşılamaya uygun geliştirilmiştir. Örneğin Android, mobil cihazlara akıllı telefon niteliği katmak için, Windows ise kişisel bilgisayarımızda her ihtiyacımızı görebilmemiz için geliştirilmiştir.

Ancak işletim sistemleri yalnızca günlük kullanıcıların ihtiyaçları için kullanılmaz. Bazıları kritik düzeyde süreçleri yönetir. Örneğin nükleer reaktörler, savunma sanayi silahları, uzay gemileri ve tıbbi cihazlarda normal şartlar altında kullandığımız işletim sistemleri riskli kabul edilir. Çünkü en ufak gecikme kritik problemlere yol açabilir.

(Patriot Hava Savunma Sistemi)
(Patriot Hava Savunma Sistemi)

Bilgisayarınızda oyun oynarken, oyunun bir anlık donduğunu düşünün. Bu sizin en fazla canınızı sıkabilir. Ancak bu donma bir yaşam destek ünitesinde olur ise hastayı öldürebilir. Veya bir hava savunma sisteminin görüntü işleme, radar sinyali işleme, sürücü kontrolleri gibi eş zamanlı yürütmesi gereken bir çok görevi vardır. Zaman bir hava savunma sistemi için o kadar kritiktir ki, milisaniyelik gecikmeler sistemin başarısız çalışmasına (örneğin bir düşman iha’ sını imha edecek füzenin, işletim sistemindeki gecikme sebebi ile geç fırlatılması) sebep olabilir.

Gerçek zamanlı İşletim Sistemleri (RTOS, veya Türkçe olarak GZİS) tam olarak bu sorunu çözmeye yararlar. Normal işletim sistemleri görevleri process (Process, Türkçesi ile iş parçacığı, işlemci düzeyinde anlık çalıştırılabilen bir programın anlık işlemleridir.) leri kuyruğa alır ve sıra ile işler.

Günlük hayatta kullandığımız işletim sistemlerinde bir process eğer gereğinden fazla uzun sürerse veya bir deadlock (donanımı işgal eden sonsuz döngü) ‘a sebep olursa, veya herhangi bir sebepten dolayı bir interrupt (sistem kesme çağrısı) oluşursa bu, sistemin iş planlama akış şemasında kararsızlığa yol açabilir. Bu da sistemin donmasına, belleğin boşaltılması veya tamamen dolmasına, işlemlerin geciktirmesine ve hatta sistemin çökmesine (HALT! yani meşhur mavi ekrana) sebep olabilmektedir.

RTOS ve GPOS Farkları

Not: GPOS (Normal General Purpose Operating System); Windows, Android gibi standart kullanım amacına sahip işletim sistemlerinin genel adıdır.

GPOS işletim sistemleri, Task Schedule adında bir yapıya sahiptir. Bu yapı vasıtası ile yürütülmekte olan bir programın anlık işlevleri olan process leri çeşitli algoritmalara göre bir sıra ile işleme sokarlar. Sistem tarafından bir interrupt (kesme) çağrısı gelene kadar process işlemcide çalıştırılmaya devam eder. İşlemin tamamlanmasının ardından işlemciye sıradaki process girer.

Gerçek zamanlı işletim sistemleri ise çekirdeğinde iş planlama akış şemasında ufak bir fark ile tasarlanırlar. Standart işletim sistemlerinde giren bir process; işi bitene, I/0 çağrısı bekleyene veya sistem tarafından sonlandırılana kadar işlemcide kalmaya devam etmektedir.

Ancak RTOS larda bir işlem koşturulurken daha öncelikli (priority) işlem başlatıldığı anda o esnada işlem gören process çıkarılır ve bekleme moduna geçirilir. Bir diğer (ve asıl) fark ise zamanlama konusundadır.

(RTOS ve GPOS işletim sistemlerinde Interrupt’lar arasındaki gecikme farkı)

Gerçek Zamanlı İşletim sistemi, Process’ in BigO karmaşıklığını kestirebilir. Böylelikle mevcut donanımda process’ in ne kadar sürebileceğine dair tahmini olacaktır. örneğin işletim sisteminin tahminine göre işlem 150 ms sürecek olsun. İşletim sistemi bu process için 250 ms’lik bir Fragment (Zaman Aralığı) oluşturur.

  • Bu işlemin başladığı andan itibaren 250ms sonra tamamlanacaktır.
  • Eğer bu process bir değer döndürüyor ise, döndüreceği değer 250'inci milisaniyede alınacaktır. Process mantıksal olarak çalıştırılmasını farklı donanımsal koşullara bağlı olarak 120.ms’de veya 180.ms’de tamamlayabilir. Bu işletim sistemi için önem arz etmez. İşletim sistemi ne olursa olsun döndürülen değeri 250.ms’de alacaktır. RTOS ve GPOS arasındaki en temel fark da budur. GPOS işletim sistemleri bir process bittiği anda diğerini hemen işlemciye alır.
  • Bu process’in kullandığı donanımsal kaynaklar (örneğin yazdığı bir dosya vb.) içinde bulunduğu Fragment boyunca (250 ms.) asla erişilemez olmak üzere Red Zone Lock ile kilitlenir.
  • Aynı kaynağa erişecek bir başka process, o process’in ne zaman kaynaktan çekileceğini böylece kesin olarak bilmiş olur. GPOS ların aksine Ne erken ne de geç olmaz. Bu da processlerin Deadlock’a girmesine (kaynak sebebi ile kilitlenme) engel olur ve kesin zamanlı çalışmayı sağlar.
  • Process işlemini başarıyla tamamlasa da, çökse de, 250 ms’de bitemese de 250.ms’de işlemciden çıkarılır ve bir sonraki process işlemciye alınır.

Özetle RTOS’lar belirli processlerin her zaman tanımlı zaman aralıklarında işlemini tamamlayacağının garantisini verirler. Ancak bu garanti, işletim sisteminde başka türlü eksikliklere sebebiyet vermektedir.

Performans kaybı RTOS’ların en dikkat çeken dezavantajlarından biridir. Zira 100 ms’de biten bir işlem, durduk yere içinde bulunduğu Fragment’in sonunu beklemektedir. Yukarıdaki örnekte 100.ms de bitmesine rağmen işlemci 150ms boyunca hiçbir iş yapmadan boşu boşuna beklemektedir. Ancak bu sorun RTOS mimarisinin mantığı sebebi ile aşılabilecek bir mesele de değildir.

Bir diğer RTOS dezavantajı ise programlama zorluğudur. Günlük hayatta basit uygulamalarda dahi genellikle Threading (Semafor, paralel çalıştırma) sık kullanılmaz. Ancak RTOS tabanlı işletim sistemlerine uygun geliştirilen yazılımlar Threading mantığına uygun olarak dizayn edilmek zorundadır. Bu da yani tasarım kalıpları ve yeni mimariler demektir.

MikroKernel ve Monolitik Kernel

Monotilik kernel vs. mikro kernel konusu, yıllar yıllar önce’ de Linux’u geliştiren Linus Tolvards ve Minix’i geliştiren rakibi (Bilgisayar Mühendisliği Prof. Andrew S. Tanenbaum ) arasında çekişmeli tartışmalara sebep olmuştu.

Mikro kernel yapıda olan Minix çekirdeği, monolitik yapıda olan Linux’a göre daha yalındır ancak bu sahte bir yalınlıktır. Evet, sistem daha modüler ve birbirinden ayrılmış durumdadır. Ancak bir program yazmak için monolitik işletim sistemlerine yazılım geliştirirken alışkın olduğumuz kernel ile iletişim kurmanız (Hook) yetmez. Kullanıcı, kernel’ ine farklı işlevlerde dosya sistemi veya memory manager sistemi kurmuş olabilir. Bu durumda sizin yazılımınızın ihtiyaç duyduğu paket veya driver (normalde kernelin içinde bulunması gerekirken) yüklendiği cihazda bulunmayabilir. Bu durum işletim sistemini basit tutar. ancak işletim sistemi ile basit şeyler yapmak isteyenleri çok karmaşık bir yol bekliyordur.

Not: Mikro kernellerde aşağıdaki şekilde de görebileceğiniz üzere sürücüler, dosya sistemi vs. kernel ‘ den farklı modüller halinde bulunur. Örneğin dosya sisteminin kodunda bir değişiklik yapabilirsiniz ve bunu yaptığınızda cihaz açık olabilir. Yeniden başlatmanız da gerekmez. Çünkü mikro yapıda kernel ‘in tek görevi CPU’ya processleri işlemesi için ortam sağlamaktır.

Monolitik kernel ‘de dosya sistemi, driverlar ve bellek kontrolü kernel’a dahilken Mikro kernel ‘da kernel yalnızca CPU’yü sürmek ile yükümlüdür.

Monolitik kernelde ise her şey derli toplu ve bir aradadır. Kernel bir bütündür ve mikro kernelde olduğu gibi canlı olarak müdahale edilemez. Ancak monolitik kernelde herşey standartlaşmış olarak kernelin bir parçası olduğundan, geliştirici program yazmak için hangi API’lara bağlanması gerektiğini gözü kapalı bilir. Bu nedenle Monolitik kernel kullanan sistemler daha kullanıcı dostu gelmiş, daha fazla uygulama çeşitliliğine sahip olmuş ve mikro kernelleri günümüzde (En azından GPOS kategorisinde) yenmiştir.

Not : RTOS’larda ise Mikro kernel mimarisi Monolitik kerneli yenmiştir.

Günlük hayatımızda kullandığımız tüm işletim sistemleri Monolitik kernel yapısında iken, gerçek zamanlı işletim sistemleri genelde mikrokernel yapısındadır. Çünkü işletim sistemi kendi esansiyel processlerini de daha kolay yönetmek için dosya yönetimi, Network vb. bir çok temel görevi kernel dışına çıkartmıştır. Kernel yalnızca Inter Process Communication (IPC) olarak bilinen bir method ile bu kernel dışı uygulamalar ile haberleşebilir.

Not: Inter Process Communication, günlük hayatta da bir çok yazılımda kullanılan bir tekniktir. Birbirinden tamamen ayrı iki programın birbiri ile haberleşmesini sağlar. Örneğin iki program da aynı bellek adresinden yazıp okuyarak birbiriyle haberleşebilir. Bunun bir çok çeşidi vardır.

Normalde yalnızca iki process arasında kullanılan IPC yapısı mikrokernellerde dallanıp budaklanarak bir iletişim ağı oluşturur. Çünkü mikrokernel işletim sistemlerinde kernel’in görevi yalnızca CPU ve bellek ile uğraşmaktır. Geri kalan tüm işlevler ise kendisinden bağımsız işlemler olduğundan ancak IPC ile erişilebilirdir.

Not: Bu ağ, mikrokernel işletim sistemlerinde kernelin parçası olan bir programcık ile bir process ağacı oluşturularak denetlenir.

RTOS türleri ve detaylı bilgiler

RTOS’lar zamanda sapmaya toleranslarına göre üç ana sınıfa ayrılırlar.

  • Hard Real Time : Bu tür RTOS sistemlerinde zamanda sapmalara tolerans son derece azdır. Zamanında tamamlanmayan görevler sistem için tehlike arz edebilir. Hard Real Time RTOS sistemler genelde RTOS mantığına uygun dizayn edilmiş paralel işlemcili mimariler üzerinde çalıştırılırlar ancak bu zorunlu değildir.
  • Soft Real Time : Bu tür RTOS sistemler RTOS ile GPOS arasında kalmış ara bir türe benzetilebilir. Sapmalar tolare edilebilir ve çok da önemli değildir.
  • Firm Real Time : Bu tür RTOS sistemler ya hep ya hiç mantığına benzetilebilir. Zamanında zamamlanmayan görev ne olursa olsun kaldırılır. Bu eğer bir mikrokernel işlevi ise sistemin çökmesi beklenir. Ancak safemode modu aktif ise diğer processler ram’de iken kernel baştan başlatılabilir.

Temelde GPOS mantığında çalışan işletim sistemlerinin çekirdeğini RTOS’a çevirmek, kernel kodlarında Find And Replace yapmak kadar kolaydır. Ancak işletim sistemi yalnızca kernelden oluşmaz. Hatta kernel çok küçük bir bölümüdür. Bu değişikliği yaptığınızda, Kernel’inizin üst katmanındaki tüm kütüphaneler ve o kütüphanelerin de üst katmanındaki tüm programlar bu mantıktan farklı olduğundan aşırı bir kasma gerçekleşecektir.

Çünkü tüm işlerin bekleme süresi en iyi ihtimal ile %50 artacaktır. Örneğin mouse’unuzu hareket ettirdiğinizde mouse imlecinin ekrandaki koordinatlarının güncellenmesinden sorumlu Xorg kodu, anlık yapabileceği işi (en iyi ihtimal ile) %50 gecikme sonrasında tamamlayacaktır. Bu performanstan kayıp değildir. Yalnızca tabanın uyuşmamasıdır. RTOS’ların arayüz yazılımları ve tüm diğer programcıkları baştan aşağı RTOS ve Semafor mantığına uyumluluk gösterecek şekilde yazılmaktadır. Böylece aynı işlem RTOS uyumlu bir arayüz yazılımında bir gecikme veya kasma olmaksızın çalışabilir.

Yazılımcıların çok az bir kesiminin yolu RTOS’lardan geçmiştir. Bu da RTOS sistemlerin geliştirme maliyetlerini daima yüksek tutmaktadır. Sunucu sistemlerinden, PLC haberleşmelerine kadar bir çok alanda RTOS önem arz etmektedir.

Bazı Gerçek Zamanlı İşletim Sistemleri

Gerçek zamanlı işletim sistemi denince akla ilk gelen işletim sistemi başlıca QNX’dir. x86 ve ARM olmak üzere bir çok mimariye derlenmiş olan bu işletim sistemi kendine has GUI (X, Masaüstü ortamına) sahiptir. Ayrıca yalın hali yalnızca 1.44mb lık yer kaplar. En çok tercih edilen kapalı kaynak kodlu ve ticari RTOS’lardan birisidir.

Zamanında multitasking özelliği ile dikkat çeken Blackberry O.S 10 mobil işletim sistemi de QNX çekirdeği üzerine geliştirilmiştir. Mobil tarafda RTOS olan ve hatta belki de gündelik kullanıcı ile buluşan tek RTOS’dur.

Özgür yazılım felsefesi ile ortaya atılmış FreeRTOS ise X64 bilgisayarlardan tost makinasına kadar her yerde çalışabilecek kadar hafif ve güçlü bir işletim sistemidir. Fiyatı bir kaç TL olan PICF16 mikrodenetleyicilerde dahi bu işletim sistemi çalıştırılabilir. Aslında yazının devamında bahsedilen BareMetal tekniğinin standartlaşmış bir halidir.

Bir Pic MikroKontrolcü

Windows CE (Windows Embedded Compact), Microsoft’un başta ARM olmak üzere bir çok farklı mimaride çalışabilir halde sunduğu ve gerçek zamanlı olan Windows ailesine ait işletim sistemidir. Ancak RTOS mantığının yazının önceki bölümlerinde açıkladığımız sebeplerinden ötürü normal Windows uygulamaları, Windows CE üzerinde çalışmaz.Fakat platform benzerlik göstermektedir. Bu nedenle bazı yazılımlar büyük firmalar tarafından Windows CE’ye de çıkarılmıştır.

Gerçek Zamanlı İşletim Sisteminin Gerçeklenmesi

gerçek zamanlı işletim sistem’lerinde zamanlama planı için bazı algoritmalar kullanılmaktadır.

Bunlar;
• işbirlikçi zamanlama planı
• sonlandırılabilir zamanlama planı
• eşit zaman parçalamalı planlama
• sabit öncelikli sonlandırılabilir zamanlama planı
• sabit öncelikli gecikmeli sonlandırılabilir zamanlama planı
• sabit öncelikli sonlandırılamaz zamanlama planı
• sonlandırılabilir kritik bölge zamanlama planı
• durağan zamanlama planı
• en kısa zaman sınır öncelikli planlama
• olasılık tabanlı gelişmiş zamanlama planı

Bu algoritmalar, çeşitli senaryolar altında Task Scheduling optimizasyonu sağlamaktadır. Zaten RTOS ve GPOS arasındaki en temel farklardan biri de budur.

GPOS işletim sistemlerinde ise gerçek zamana yakın bir uygulama yapılmak isteniyorsa bilindik bir çözüme başvurulur. Threading (veya düşük seviyeli programlama dillerindeki adı ile Semafor) kullanılarak eş zamanlı görevler koşturulabilir.

Elbette zamanda kesinliği garanti etmeyecektir ancak en azından iki Thread’ in birbirini Mutex kilidi benzeri bir tasarım ile beklemesi sağlanabilir. Eğer Thread’ lerin karmaşıklığı üzerinden zaman tahmini de yapılabilirse, gerçek zamanlı işletim sistemlerine meyilli bir çalışma yapılmış olacaktır. Ancak sistemin geri kalanı GPOS olduğu için, sistemin geri kalanında olan bir process değişikliği bir anda sizin oluşturduğunuz Threadleri de etkileyebilir.

C dili için örnek bir mutex yapısı, processlerin paralel çalışmasını sağlamak için kullanılır

Yani GPOS’larda Threading eş zamanlı çalışmayı sağlayabilsek de hiçbir koşulda kesin zamanlı çalıştırmayı garanti edemeyiz. Ancak kesinlikle gerçek zamanlı çalışacak bir programa veya sisteme ihtiyacımız varsa iki kolay yolu takip ederek bir RTOS sistem inşa edebiliriz.

Qemu Sanallaştırması Tekniği

Bunların dışında GPOS işletim sistemimizde kesin bir gerçek zamanlı yürütmeye ihtiyaç duyuluyor ise Qemu Sanallaştırılması tekniği kullanılabilir.

Bu tekniğe göre, örneğin evinizde kullandığınız bir Windows sisteminiz var. Bu sistemi bozmak istemiyorsunuz fakat Windows sisteminiz vasıtası ile gerçek zamanlı görevler gerçekleştirmeye ihtiyacınız var. İşte bunun gibi durumlarda Qemu yardımımıza koşuyor.

Qemu, sanallaştırmayı destekleyen tüm işlemcilerde (Ki genelde 2008 ve sonrasında üretilen tüm işlemciler destekler) izole bir sandbox alanı tahsis edebilir. Yani 4 çekirdekli bir işlemciniz varsa, windows’un bu çekirdeklerden birinden elini ayağını çekmesini sağlayabilir ve o çekirdeğe bios düzeyinde erişebilir.

Böylece aynı anda bilgisayarınızda iki işletim sistemi de çalışıyor olabilir. VirtualBox ve benzeri programları kullananlar zaten bunu deneyimlemiştir. Ancak Qemu, farklı mimarili datasheet’leri de bu çekirdek üzerinde çalıştırabilir. Örneğin Qemu kullanarak bir ARMV7 işlemciyi simüle edebilirsiniz. Hatta yalnızca ARMV7 üzerinde çalışan bir işletim sistemini Qemu ile emüle edebilirsiniz.

Bu önemli bir detay, çünkü Hard Real Time sistemler çoğunlukla Real Time destekleyen işlemci donanımına ihtiyaç duyarlar ve büyük ihtimalle evinizdeki bilgisayarınızın işlemcisi de real-time destekli değildir. Böylece yalnızca Real Time bir işletim sistemini emüle etmekle kalmayıp, işlemcisinin de emüle edilmesini sağlayabilirsiniz.

BareMetal Tekniği

Yazının genelinde anlaşılabileceği üzere RTOS’lar genellikle gömülü yazılımlarda tercih edilirler. Zira x86- x64 mimarisi ARM vb. gömülü mimarilere göre hem daha pahalıdır hem soğutma ve tasarım açısından sıkıntılara sebep olmaktadır. Gömülü sistem geliştiriciliğinde çoğunlukla ARM tabanlı güçlü CPU’lar tercih edilse de, bazen ihtiyaca göre bir single-board çözümü kullanmak abartı olabilir.

Örneğin Usb Serial Bus üzerinden aldığı bitleri bir saat sinyali ile birlikte işleyen donanımsal bir çözüm geliştirilecekse entegre mikrodenetleyiciler yeterli olmaktadır. Bu iş için işletim sistemi çalıştırabilecek kadar kompleks bir mimari oluşturmaya gerek yoktur. Bu hem maliyetli hem de enerji, yeterlilik, soğutma ve bir çok alanda verimsizliklere neden olacaktır.

Böyle durumlar altında gerçek zamanlı bir uygulama yapıması gerekiyorsa — ki yukardaki örnekte bir saat sinyaline ihtiyaç duyulmaktadır- bu durumda RTOS işletim sistemleri kullanım senaryosunun çok dışında kalmaktadır.

Zira çözüm için bir işletim sistemi de şart değildir. RTOS programlama mantığı bir gömülü yazılımın içine kodlanabilir.

Okuduğunuz için teşekkürler, başka yazılarda görüşmek üzere :)

--

--