Gömülü Sistem Programcılığı

Profesyoneller için

Gömülü sistemler ile yeni tanışan ve konuya ilgi duyan mühendis ve mühendis adaylarının ortak sıkıntıları bu dünyaya ilk adımı nasıl ve nereden atacaklarını kestirememeleridir. Teknoljinin böylesine geniş yelpazeye sahip bir dalında yetkinlik kazanabilmek için ayağı yere basan hedefler konulması son derece önemlidir.  Çoğu zaman bireysel ilgi alanlarının çerçevesi iyice belirlenmeden yapılan başlangıçlar, pek de uzun soluklu olamaz.  Gömülü sistemler ile ilgili yapılacak çalışmalar, kişisel kariyer hedefleri ve ilgi alanları ile paralel olacak şekilde planlanmalıdır.  Bu tip teknolojilerde yetkinlik kazanmanın en iyi yolu somut projeler yapmaktır.   Aslında gömülü sistemlerde yetkinlik kazanmak bir bilgisayar programlama dilinde yetkinlik kazanmaktan çok da farklı değildir.  Nasıl bir dili öğrenmenin en iyi yolu o dili kullanarak programlar geliştirmek ise gömülü sistemlere hakim olmanın yolu da, bu tip sistemleri tasarlamak ve kullanmaktan geçer.  Bunun en sancısız ve ayakları yere basan yolu da, iş ya da akademik hayatta yapılan çalışmalarda gömülü sistemleri kullanmaktır.  Bu teknolojilerin kullanıldığı tasarımlar yapmak ve bunları hayata geçirmek ciddi bir emek ve zaman gerektirir.  İş ya da akademik hayattaki ihtiyaçlar ile örtüşen çalışmalar gerekli motivasyonu sağlaması açısından önemlidir.

Mühendislik lisans eğitimi sırasında alınan dersler ve projeler, hiçbir alanda tam manası ile uzmanlaşmayı sağlamamak ile birlikte herhangi bir alanda çalışabilmek için gerekli minimum alt yapıyı ancak tesis edebilmektedir. Lisans eğitimi sırasında ilgi alanlarının saptanması, geleceğe yönelik akademik ve mesleki kariyer hedeflerinin belirlenmesini kolaylaştırır. Bir konuda uzmanlaşabilmek için genel ilgi alanının daraltılıp etki alanının arttırılması zorunludur.

Gömülü sistemler genellikle bir mühendislik çözümünün amacı değil aracıdırlar.   Gömülü sistem, bir problemin çözümüne yönelik özel olarak tasarlanan ve/veya programlanan bilgisayar ve çevre birimlerinden oluşan sisteme yönelik kabul görmüş genel tanımlamadır. Ülkemizdeki çoğu elektronik ve bilgisayar mühendisliği fakültelerinin lisans ders müfredatlarında, doğrudan gömülü sistemler adı altında açılan dersler bulunmaz. Gömülü sistemlere temel teşkil eden lisans derslerinden ilk akla gelenlerden bazıları; Mantık Devreleri, Mikroişlemciler, Endüstriyel Otomasyon, Gerçek Zamanlı Sistemler, Sayısal Tasarım, Bilgisayar Organizasyonu, İşletim Sistemleri, Yazılım Mühendisliği, C/C++ ile Programlama, Sayısal İşaret İşleyiciler olarak sıralanabilir. Bu dersler gömülü sistemler ile ilgili temel oluşturan derslerdendir. Özellikle lisans eğitiminin son yıllarında, içeriğinde gömülü sistemler ile pratik uygulama deneyimi gerektiren seçmeli derslerin alınması, bu teknolojilerde yetkinlik kazanmanın en etkili yollarındandır.  Lisans bitirme tez konusunun da gömülü sistemler ile çalışmayı içermesi oldukça yararlı olacaktır.

Nihayetinde gömülü sistemler, donanım ve yazılım teknolojilerinin tümleştirilmesi sonucunda ortaya çıkan sistemlerdir. Sistemin kullanım amacına yönelik denetlediği donanımlar farklı olabilir. Bazen de denetlenen donanımlar çok benzer olmasına rağmen sistemin işlevleri farklı olabilir. Benzer donanımlar üzerinde farklı işlevsellikler elde edebilme esnekliği, yazılım teknolojileri sayesinde mümkün olabilmektedir. Gömülü sistemler, kullanıldığı alanlar ve işlevlerine göre farklılık arz etmelerine rağmen, tasarım ve geliştirme aşamaları esnasında yapılan rutin mühendislik faaliyetleri büyük oranlarda benzeşmektedir. Rutinin dışındaki kalan kısımlarda ise alan bilgisine ihtiyaç duyulur.   Örneğin kamera ile otomatik plaka tanıyan bir gömülü sistem geliştirebilmek için imge işleme, radar frekans karıştırıcısı için elektronik harp, motor hız denetleyicisi için otomatik kontrol, Adsl modem için sayısal haberleşme tekniklerinde alan bilgisine sahip olmak gerekir. Rutin mühendislik faaliyetleri ise alan çalışması sonucunda belirlenen isterler ve kısıtlar çerçevesinde, problemin çözümüne yönelik gömülü bilgisayar donanım ve yazılımlarının geliştirilmesi faaliyetleridir. Bu eylemlerin rutin olarak tanımlanmalarının sebebi alan bilgisi gerektirmemeleridir. Gerçek zamanlı işletim enstrümanları başlıklı yazıda, rutin faaliyetlere değinilmiştir. Günümüz işlemcilerinin ve mikro bilgisayar donanımlarının sofistike yapıları bu tip sistemlerin tasarımı ve programlanmaları konusunda da uzmanlaşmayı gerektirmektedir. Geliştirilen sistemin asıl kullanım alanından bağımsız olarak, gömülü bilgisayarlar konusunda da alan bilgisine sahip olmak zorunluluk haline gelmektedir.

Özetlemek gerekirse lisans ya da yüksek lisans çalışmaları sırasında ;

.İlgi alanlarının belirlenmesi ve gömülü sistemlerin ilgi alanındaki kullanım olanaklarının araştırılması

.Gömülü sistemler ile ilgili seçmeli derslerin tercih edilmesi ve mümkünse proje çalışması yapılması

.İşletim sistemleri ile ilgili derslerin takip edilmesi

.Mikroişlemciler ile ilgili derslerin takip edilmesi

gömülü sistemler üzerinde yetkinlik kazanmak adına son derece faydalı olacaktır.

http://www.celik.ws/page,151,tr&read,11,13,1

Mil-Std-1553 ya da namı diğer Aviyonik Veri Yolu ile ilgili bir şeyler karalamak istemiştim ki, Burak Çodur ‘un konu ile ilgili yazdığı bir makale gözüme ilişti.  Yazıda konu güzel bir şekilde özetlenmiş.  Burada benzer şeyleri tekrar etmektense yazının web  bağlantısını vermeyi tercih ediyorum.  Bu makaleye ilave olarak 1553 doğrulama testlerinden söz etmek istiyorum.

Uçan platform üreticileri, platform üzerine tümleştirilecek her türlü alt sistemin, ana gövde üzerinde bulunan diğer sistemler ile uyumlu olarak çalışabildiklerini, kendi tesislerinde yapacakları bir çok tümleştirme testleri ile doğrularlar.   Kendilerinin test edip doğrulamadıkları alt sistemlerin uçan platformlara monte edilmesine onay vermezler.  Böyle bir montaj yapılması durumunda platformlarına yönelik garantiyi sona erdirirler.  Bu nedenle uçan platformlar için kazanımı hedeflenen her türlü sistem, platform üreticisi ile bir anlamda ortaklık yapılarak geliştirilebilmektedir.  Örneğin Lockheed Martin`den alınan F-16 uçaklarının üzerine üreticinin izni olmadan bir vida dahi sıkılamaz.  Durum böyle olunca uçaklara üretici desteğinin devamı talep edildiği sürece,  söz konusu firmalar ile işbirliği yapmak kaçınılmazdır.

Harp uçaklarını diğerlerinden farklı kılan üzerlerindeki sofistike elektronik sistemlerdir.  Bu sistemler, çeşitli donanım ve donanımı kontrol eden amaca yönelik faydalı işler yapan gömülü yazılımların tümleştirilmesi ile oluşmaktadır.  Bu sistemlere en iyi örneklerin başında elektronik harp sistemleri gelir. Harp zamanında stratejik öneme sahiptirler.  Bu tip sistemlerin geliştirilmesinde gizlilik ve dolayısı ile millilik önemli kriterlerdir.  Ancak yukarıda değinilen üretici ilişkilerinden dolayı bu gayeye tam olarak ulaşmak kolay olmamak ile birlikte imkansız da değildir.  Örneğin İsrail Hava Kuvvetleri bir zamanlar ABD`den aldığı savaş uçaklarının üzerine tamamen kendi teknolojisi ile ürettiği elektronik harp sistemlerini monte etmişti.  Tabi uçakları garanti dışı kalmış ve akabinde uçakların tüm modernizasyon işlerini kendi imkanları ile gerçekleştirmek zorunda kalmışlardı.  Ancak İsrail teknik manadaki güçlü alt-yapısı ile bu durumun üstesinden gelmeyi bilmişti.  Ne diyelim, bizim de umuduz ülke olarak o seviyelere bir an evvel ulaşabilmekte…

Asıl konu başlığına dönersek, 1553 haberleşmesinin ana kullanım alanı uçan platformlardır.  Bu tip platformlar, hareketli platformlar içerisinde emniyet ve güvenlik ihtiyaçlarının en fazla olduğu sistemlerdir.  Dolayısı ile bu sistemler geliştirilirken izlenilmesi gereken standardların listesi de bir hayli kabarıktır.  Geliştirme maliyetlerinin önemli bir kalemini doğrulama maliyetlerinin oluşturduğunu söylemek yerinde bir genelleme olur.

Günümüzde, çeşitli bilgisayar ortamları ve işletim sistemlerine yönelik desteği bulunan 1553 haberleşme kartlarını, (COTS) ticari hazır ürün olarak tedarik edebilmek mümkündür.  Aviyonik platformlar için sistem geliştirilirken, COTS (ticari hazır) olarak tedarik edilen alt sistemlerden yararlanmak, toplam geliştirme maliyetlerinde tasarruf sağlanması ve riskleri azaltması bakımından önemlidir.  Ancak söz konusu olan 1553 haberleşmesi olduğunda, evdeki hesabın çarşıya uyduğunu söyleyebilmek her zaman mümkün değildir.

Ticari hazır bir 1553 kartını tedarik edip, uçan platforma yönelik geliştirilen bir sistemde gözünüz kapalı kullanamazsınız. Lockheed Martin, Boeing gibi uçan platform üreticileri, platformlarına tümleştirilecek uzak birim cihazlarının 1553 RT Validation testlerini en titiz şekilde kendileri yaparlar.  Kullanılan 1553 kartının kaliteli olması ve uzak birimin protokole uygun olarak programlanması, doğrulama testleri sırasında çıkabilecek problemleri en aza indirger.  İlginçtir, bu standard bunca yıldır ortalarda olmasına ve kullanılmasına rağmen 1553 doğrulama testlerini birinci kerede hatasız geçebilen uzak birimlerin oranı  %20 civarlarındadır.  Bu yüzdeyi Lockheed Martin`de 1553 testlerinden sorumlu mühendisin bizzat kendisinden duymuştum.  Bu rakamın yirmi beş yılı aşkın bir süredir aynı yerde aynı işi yapan mühendisin gözlemlerini yansıtmaktan öte bir istatistiksel değeri olmasa da, yine de çarpıcı bir gözlem olduğu şüphesiz.

Çalıştığım projelerden birinde F-16 uçaklarına yönelik geliştirilen bir sistemin, Remote Terminal (uzak birim) olarak uçak ICD (ara-yüz) dokümanına uygun şekilde davranmasını, protokol düzeyinde sağlamaktan sorumlu idim.  Geliştirmekte olduğumuz sistemin operasyonel anlamda yetenekleri tam olmayan, ancak 1553 veri yolu için belirlenmiş standardlara, elektriksel ve protokol anlamında uygun şekilde davranabilen bir erken prototipini,  doğrulama testleri için Lockheed Martin`in Teksas’taki fabrikasında hazır etmiştik.  Bu fabrikaya ilk gidişimdi ve testin yapılacağı laboratuar hayalimde içinde son teknoloji test cihazları bulunan bir mekan olarak canlanmakta idi.  Bir çok güvenlik prosedürünü tamamlayıp da testin yapılacağı sözde lab’a ulaştığımızda şok olmuştum.  Öğrencilik yıllarında staj yaptığım tekstil fabrikasının ucube elektronik atölyesi bile bu mekanın yanında NASA Laboratuarları gibi kalırdı.   Meşhur test setinin, 30 yıllık bir scope, bir multimetre ve 80286 tabanlı seksenli yıllardan kalma bir PC  bilgisayardan ibaret olduğunu görünce epey şaşırmıştım.  Ne yalan söyleyim testi yapacak Amerikalı mühendiste çok farklı sayılmazdı doğrusu.  Ancak, “Ayinesi iştir kişinin lafa bakılmaz”, vecizesinin ne kadar doğru olduğunu, özellikle protokol testleri sırasında bir kez daha anlamış oldum.  Intel 80286 tabanlı PC ve Dos işletim sistemi üzerinde koşturulan 1553 test yazılımları gerçekten iyi iş çıkarmıştı.  Ama asıl testi yürüten donanım değil, test mühendisinin bilgisi ve deneyimiydi.  Amerikalı mühendisin yıllardır tek görevi 1553 Validation testlerini yapmak olduğu için konuya tam anlamı ile hakimdi.  Amerikalılar için yetişmiş insan kaynağı ve sistem donanımdan önde gelmekte.  Nihayetinde işleri bir sistem dahilinde yürütenler de insanlar.  Gündelik hayatlarında keyifleri için kolaylıkla abartı tüketimler yapabilseler de, söz konusu iş olunca oldukça tutumlu davranıyorlar.  Bir bilgisayar ya da her hangi bir donanım işini yaptığı sürece kolay kolay yenisi ile değiştirmiyorlar.  Projenin diğer aşamalarında farklı tümleştirme laboratuarlarında da çalışma fırsatımız oldu.  Bu mekanların  RT Validation testinin yapıldığı yerden epey farklı olduğunu da belirtmeliyim.

Uçak üreticileri uzak birime yönelik kendi test setlerini hazırlamadan önce ICD dokümanında belirtilmiş olan 1553 mesajlarına, uzak birimin nasıl davranacağını yazılı olarak talep ederler.  Bazı mesajlara ise nasıl davranılması gerektiğini kendileri dikte ederler.  Örneğin, standarda göre  uzak birime adreslenmiş bir mesaj dikkate alınmıyorsa, uzak birim üç farklı şekilde davranabilir.  Bunlar yanıt vermemek, mesajı teslim alıp içeriği ile ilgilenmemek, ya da mesaj hatası dönmektir.  Uzak birimin nasıl davranacağı doğrulama testlerinden önce belirlenir.  Testler sırasında 1553 mesajlarına, önceden belirlendiği şekilde yanıt verilmez ise yanıtlar standarda uygun dahi olsa testler başarız sayılmaktadır.

1553 doğrulama test planı MIL-HDBK-1553, Appendix A ve daha sonradan  MIL-HDBK-1553A, Section 100 olarak güncellenmiş el kitaplarında ayrıntılı olarak bulunmaktadır. Testler genel olarak :

1. Çevrim dışı elektriksel testler

2. Çevrim içi elektriksel testler

3. Gerekli protokol testleri

4. Şeçmeli protokol testleri

5. Gürültü testleri

başlıkları altında toplanabilirler.

Uzak birimin çevrim dışı elektriksel testleri basit bir ohm-metre yardımı ile kolayca yapılabilir.  Uzak birim 1553 veri yoluna doğrudan ya da trafo üzerinden bağlanabilir.  Her iki durum içinde veri yolundan uzak birime doğru görünen empandans değerleri standarta tanımlanmıştır.   Ohm-metre ile uzak birimin canlı uçları arasında ve uçların  toprak noktasına göre görünen direnç değerleri saptanır ve beklenen değer aralığı ile karşılaştırılır.

Çevrim içi durumdaki elektriksel testler daha kapsamlı olmak ile birlikte belkide en önemli ölçüm; uzak birim aktif olarak veri yolunu kullandığı sırada, işaretin canlı uçları arasında tepeden tepeye ölçülen gerilim değeridir.  Ticari hazır kartların en çok başarısız olduğu testlerden birisi de budur.  İşaretin gücü 1553 haberleşmesi için kritiktir.  Laboratuar ortamında düşük sinyal seviyelerinde dahi haberleşmek mümkündür.  Ancak uçan platformlar elektriksel anlamda gürültülü ortamlardır ve standardta  işaretleşmenin kabul edilebilir  karakteristik değerleri  olumsuz parametreler göz önüne alınarak belirlenmiştir.

Protokol testleri uzak birimin, uçan platformun aviyonik veri yolu üzerindeki 1553 mesajlarına kendisi için tanımlanmış olan ara-yüze uygun şekilde yanıt vermesinin testleridir.   Uzak birimi temsil eden ticari hazır 1553 kartı uygun şekilde programlanmalıdır.  Bu kartlar genel amaçlıdır ve ihtiyaca yönelik olarak yapılandırılırlar.  Genel amaçlı kartların programlanması ile kasıt edilen, kartın iliştirilmiş olduğu host bilgisayar sistemi üzerinde çalışma sırasında, amaca uygun şekilde yazılım kontrollü olarak konfigüre edilmesidir.  Ticari hazır kartlar çeşitli işletim sistemlerine yönelik API desteği ile birlikte gelirler.  Genellikle API fonksiyonları C ile derlenmiş statik kütüphane formundadır.  Bu kütüphaneler 1553 kart donanım fonksiyonlarını soyutlar ve üst seviyeli programlama dilleri içerisinden kullanılabilir hale getirir.  Çoğu 1553 ticari hazır kartının API desteği işletim sistemi çekirdeği seviyesindeki koşturulan yazılımlar içerisinden kullanılabilecek şekilde hazırlanmıştır.   Kullanıcı uzayındaki uygulamalara yönelik üst seviyeli API  desteği sağlamayabilirler.  Uygulamaların işletim sistemi çekirdeğinin bir parçası olarak derlenmediği sistemlerde ise, kart API`larını kullanıcı uzayından erişime açabilmek için standart giriş/çıkış dosya ara-yüzüne haiz sürücü yazılımları ile soyutlamak gerekebilir.  Alternatif olarak her bir API fonksiyonu, işletim sistemi çağrısı (system call) olacak şekilde bir üst seviyedeki özel fonksiyonlar ile de soyutlanabilir.  Ancak uygulanması daha kolay ve taşınabilirliği daha kolay olan yöntem standard ara-yüzlü sürücü yazılımları ile kullanım desteği sunmaktır.

Protokol testleri yürütülürken yalnızca uzak birimin yanıt vermesi gereken mesajlar değil aynı zamanda yanıt dönülmemesi gereken mesaj kombinasyonları da test edilmektedir.  Örneğin 10 numaralı alt adrese, gelen (RX) alma yönündeki mesajda beklenen veri paketinin uzunluğu 5 kelime ise, veri yolu denetleyicinin 5 değil 6 kelimelik veri paketi göndermesi durumunda uzak birimin mesajı hatalı olarak algılaması istenebilir.  Protokol testlerinde 1553 üzerindeki mümkün olan tüm mesaj kombinasyonları veri yolu denetleyicisi tarafından üretilir.   Testin başarılı sayılabilmesi için uzak birimin mesajlar karşısındaki davranışları, ara-yüz dokümanı ve standard ile belirlenen çerçeve dahilinde olmalıdır.

PCI (Peripheral Component Interconnect)  halen günümüz bilgisayar mimarilerinde en sık kullanılan veri yollarının başında gelmektedir.  PCI paralel bir veri yoludur.  Yeni nesil bilgisisayar sistemlerinde seri bir veri yolu standardı olan PCI Express desteğine de rastlanmaktadır.  PCI Express, PCI veri yollarına kıyasla daha yüksek hızlarda veri iletişimi yapılabilmesini desteklemekle birlikte, veri yolu aygıtları arasındaki uçtan uca olan bağlantılar paylaşımlı değildir.  Bu sayede aygıtlar arasında trafik problemi olmadan veri iletimi çift yönlü olarak gerçekleştirilebilir.  PCI veri yollarında ise veri yolu, mevcut aygıtlar arasında genellikle zaman paylaşımlı (farklı arbitration mekanizmaları olabilir) olarak kullanılmaktadır.

PCI veri yollarında ulaşılabilecek maksimum veri iletim hızları:

Veri Yolu 32-Bit İletim 64-Bit İletim
33-MHz PCI 133 MB/sec 266 MB/sec
66-MHz PCI 266 MB/sec 532 MB/sec
100-MHz PCI-X X 800 MB/sec
133-MHz PCI-X X 1 GB/sec

PCI Express için ise:

Şerit genişliği Saat Frekansı İletim Hızı
x1 2.5Ghz 400 MB/s
x2 2.5Ghz 800 MB/s
x4 2.5Gz 1.6 GB/s
x8 2.5Ghz 3.2 GB/s
x16 2.5Ghz 6.4 GB/s

Özellikle çok işlemcili tek kart bilgisayar sistemlerinde PCI veri yolu,  işlemciler arası ortak veri yolu olarak sıklıkla tercih edilmektedir.  PCI destekli kartları tasarlamak donanım mühendislerinin ilgi alanına girse de, gömülü yazılım mühendislerinin desteği olmadan bu karmaşık veri yolunun ayağı kaldırılması mümkün değildir.  PCI standardı elektriksel ara-yüzleri betimlemenin yanı sıra operasyonel betimlemeler de içermektedir.  Yazılım mühendisleri PCI alt detaylarını bilmek zorunda değildirler, ancak  gömülü yazılım mühendisleri, standardın işleyişi betimleyen kısımlarına hakim olmak durumundadırlar.

Masamızda kullandığımız kişisel bilgisayarları ele alırsak bu sistemlerin üzerinde koşturulan ilk program BIOS (Basic Input Output System) yazılımıdır.   PCI veri yolunu donanım olarak içeren her kişisel bilgisayar, mutlaka PCI destekli bir BIOS yazılımına sahiptir.  Herhangi bir işletim sistemi koşturulmadan önce PCI veri yolundaki cihazların saptanıp ilk konfigürasyonlarının yapılması zorunludur.  Bu zorunluluğa bilgisayar ekranları iyi birer örnek teşkil eder.  Bilgisayarların en temel çıkış birimleri ekranlarıdır.   Bilgisayarda yüklü hiç bir işletim sistemi mevcut olmasa bile, güç verildikten sonra ekran aktif hale gelmek durumundadır.  PCI tabanlı bir ekran kartına sahip bir bilgisayarın ekran çıktısı elde edebilmesi için PCI yolunun sisteme besleme verildikten sonra işlevsel hale gelmesi zorunluluktur.  Ekran kartının yanı sıra bir çok çevre birimi de PCI veri yolu üzerinde bulunabilir.  Tüm bunların organizasyonu ve PCI veri yolunun işler hale gelmesinin ilk sorumlusu BIOS yazılımıdır.  Kişisel bilgisayar dünyasında BIOS yazılımı olarak anılan bu programlar, tek kart bilgisayar dünyasında çoğu zaman Bootrom ya da Bootloader olarak anılır.  Bootrom programının sorumlulukları BIOS ‘a kıyasla daha azdır.  Bootrom BIOS ‘dan farklı olarak arka planda çalıştırılan bir sistem yazılımı değildir.

Genellikle mikroişlemcinin donanım reset adresine programlanmış Bootrom’un ana görevi; mikroişlemciyi ve çevre-birimlerini konfigüre etmek, işletim sistemini yüklemek ve mikroişlemciyi işletim sisteminin giriş adresine dallandırmaktır (işletim sistemini başlatmaktır).  İşletim sisteminin çalışması ile birlikte bootrom’un görevi sona erer. Yukarıda bahis edilen sebeplerden dolayı PCI veri yolunun aktif hale getirilmesi genellikle Bootrom tarafından yerine getirilir.  Bootrom PCI Scan olarak adlandırılan veri yolunun taranması işlemini gerçekleştirir.  Veri yolu üzerinde bulunan giriş/çıkış cihazlarını tek tek numaralandırır ve ilk konfigürasyonlarını yapar.  İyi bilinen PCI PNP (Plug and Play) mekanizmasının ilk hakkını veren Bootrom yazılımıdır.   Bootrom PCI veri yolunda tespit ettiği cihazların listesini oluşturur ve bu listeyi işletim sistemine devreder.  İşletim sistemi ayağa kalkarken bu cihazlar ile ilgili aygıt sürücülerini etkinleştirir. Bu satırlarda bahis edilen akış tek kart bilgisayar sistemi üzerinde kullanılan işletim sistemine bağlı olarak değişiklik gösterir.  Ancak prensip olarak yapılan işler aynıdır.

PCI standardları; Konfigürasyon, Bellek ve I/O adres uzayları olmak üzere üç farklı adres uzayı betimlemektedir.  Burada yeni olan konfigürasyon adres uzayıdır.  PCI yapısı gereği, çalışma esnasında dinamik yapılandırılabilme yeteneğine sahiptir.  Bu yapılandırma PCI Scan olarak da anılır.  Birden fazla işlemcinin ortak bir PCI veri yolu üzerinden birbirleri ile irtibatlandırıldığı sistemlerde PCI yolunun taranması ve yapılandırılması sorumluluğu işlemcilerden yalnızca bir tanesinin görevidir.  PCI Scan işleminden sorumlu işlemci Host İşlemci olarak da anılır.

PCI veri yolundaki tüm cihazların konfigürasyon adresleri sabittir.   Cihazlar bir PCI Slot (yuvaya) takılması durumunda bu yuvaya atanmış konfigürasyon adresini alırlar.  Cihazların ana kart üzerinde sabit şekilde monte edilmiş olduğu durumlarda ise konfigürasyon adresleri donanımsal olarak atanmıştır.  Bu adres yollarının organizasyonu ya da eski tabiri ile adres kod çözümleri ana kart tasarımının parçasıdır.  PCI cihazları ya da kartları monte edildikleri ortamın dayattığı konfigürasyon adreslerini almak durumundadırlar. Konfigürasyon adreslerinin donanımsal olarak sabitlenmesi Bellek ve I/O adreslerinin dinamik olarak atanabilmesini sağlar.  PCI Tak ve Kullan özelliği bu yapıdan kaynaklanmaktadır.  PCI kartlar ya da cihazlar PCI Scan esnasında Host işlemci tarafından saptanıp, kaynak ihtiyaçlarına göre adres ve kesme atamaları yapılır.

Standarda göre PCI veri yolunda üretilen bir PCI Reset sonrası tüm cihazlar konfigürasyon yazmaçlarını varsayılan değerleri ile yüklerler.  PCI Scan, bu reset işleminin hemen akabinde Host işlemci tarafından konfigürasyon uzayındaki muhtemel tüm adreslerin doğrusal olarak üretilmesi ve bu adrelerde saptanan cihazların yapılandırılması işlemine verilen adtır.  Örneğin 32 Mbytelık bir ses kartı konfigürasyon yazmaçlarından Command Yazmaçına ihtiyaç duyduğu adres alanını ve tipini yazar.  Host işlemci PCI uzayında keyfi bir taban adresten itibaren ses kartını yerleştirir ve bunu kendi veri tabanına(basit bir veri yapısı kasıt edilmekte) kayıt eder.  Ses kartına yerleştirildiği taban adresleri, BAR (Base Address Register) yazmaçlarına yazılmak sureti ile bildirilir.  O andan itibaren ilgili veri yolunun adres hatlarında ses kartının bulunduğu pencereye düşen adresler üretilmesi durumunda, ses kartı hedef cihaz olarak kendisini deklare eder.

PCI cihazları adres uzayındaki pencerelerin yanı sıra PCI Kesmelerini kullanma ihtiyacı da duyabilirler.  Yine konfigürasyon sırasında cihazın hangi PCI kesme kaynağını kullanacağı Host İşlemci tarafından belirlenir.   PCI kesme mekanizması cihazlar arasında paylaşılan ortak bir kesme mekanizmasıdır.  Bu sebepten ötürü PCI kesmelerini kullanırken dikkatli olmakta fayda vardır.  Zira bir kesme üretildiğinde, Host işlemci ilgili kesme kaynağı ile ilişkilendirilmiş  tüm cihazların kesme hizmet rutinlerini bir biri ardına çağırır.  Kesme hizmet rutinleri hizmet verdikleri cihazları kontrol ederek kesmenin kaynağının kendileri olup olmadığını saptarlar ve gereğini yerine getirirler.  Bu mekanizma Interrupt Latency olarak anılan arzu edilmeyen kesme gecikmesinin uzamasına yol açar.   Genel amaçlı PCI yuvaları için bu kesme mekanizmasını kullanmaktan başka çare olmasa da, ana kartın parçası olarak tasarlanmış PCI cihazları için PCI harici tahsis edilmiş kesmeler tercih edilmektedir.

PCI cihazları bellek yönetimi ve kesme hizmetleri taleplerinin yanı sıra,  PCI veri yolunda Master cihaz olarak davranmak ta isteyebilirler.  Master yetkisi verilen cihazlar, PCI Transaction olarak adlandırılan PCI veri yolu üzerinden okuma ya da yazma işlemlerini kendileri başlatabilirler.  PCI Slave cihazları ise yalnızca bir transaction hedefi olarak okuma ya da yazma yapabilirler.

PCI cihazlarının tüm yapılandırma parametreleri yukarıdakiler ile sınırlı değildir.  Daha fazla bilgi için ilgili PCI standardlarına göz atabilirsiniz.   Peki gömülü yazılım mühendisleri niçin ve nereye kadar bu detayları bilmek durumundadırlar?  Aslında bu sorunun yanıtı mühendislerin uğraştığı projelerde gizlidir.  Proje kapsamı içeresinde PCI destekli bir tek kart bilgisayar sistemini tasarlamak söz konusu ise PCI ‘ın operasyonel ayrıntılarına hakim olmak gerekir.  Eğer kullanılan bilgisayar sistemi COTS (Commercial Off The Shelf) olarak tedarik edilip,  bilgisayar sistemine iliştirilecek PCI cihazlardan birisi özgün tasarlanacak ise bu cihaz için Host işlemci üzerinde koşturulacak bir sürücü yazılımı geliştirilmesi söz konusu olabilir.  Bu durumda ilk örnekteki kadar olmasa da PCI bilgisi önemlidir.

Diyelim ki ana kart özgün tasarlanacak ve kart için PCI Board Support Package kütüphaneleri hazırlanmak durumunda.  Bu durumda izlenecek yol kart üzerinde çalıştırılması hedeflenen işletim sistemi ile doğrudan ilişkilidir.  Örneğin vxWorks işletim sisteminde PCI desteği mevcuttur ve yapılması gereken BSP desteğinin parçası olacak şekilde vxWorks ‘un PCI kütüphanelerinde kullandığı yazılım ara-yüzlerini gerçeklemektir. Kartın donanımına bağlı PCI ile ilişkili fonksiyonlar bazı C dili başlık dosyaları altında soyutlanmıştır.  İşletim sistemi derlenirken bu  dosyalar kullanılmıştır(C dilindeki include işlemi). Fonksiyonların gerçeklenmesi ise kart tasarımcılarına bırakılmıştır.  Bootrom ya da işletim sistemine ait imaj oluşturulurken bu fonksiyonlar Linker tarafından bağlanacaktır.

PCI tabanlı cihazlar için sürücü yazılımı geliştirmek söz konusu olduğunda, cihazın üretebileceği PCI kesmelerine hizmet vermek ilk iştir.  Ayrıca cihaza özel konfigürasyon yazmaçları var ise bunların da doğru şekilde yapılandırılması yine sürücü yazılımının sorumluluğundadır.  Sürücü yazılımı cihaz ile ilişkili hataları yakalayıp cihazı recover etmekten de sorumludur.  Cihazın uygulamalar tarafından doğrudan kullanılması söz konusu ise,  cihaz ile ilgili API ‘ın gerek Sistem Çağrıları olarak gerek standard dosya ara-yüzü ile erişilebilecek şekilde gerçeklenmesi sürücü yazılımı kapsamında düşünülmelidir.

PCI ile ilgili yazılabilecek çok şey var ve bunları bir yazıya sığdırmak tabiki mümkün değil. PCI söz konusu olduğunda bir çok mühendis, standardı betimleyen belgeleri iyi özümsemenin yeterli olacağını düşünür.   Halbuki standartlar doğaları gereği pratik uygulamaya yönelik her ayrıntıyı tarif edemezler.  Bazı hususları üreticilerin insiyatifine bırakmak durumundadırlar.  Örneğin PCI uzayı ve Host yerel uzayı arasındaki dönüşümler ya da pencereler gibi konular, kullanılan PCI Bridge ve Host işlemci cihazlarına bağlı olarak farklı şekillerde gerçeklenebilir.  Marvell Discovery III™ ana kart denetleyicisi gibi tümdevrelerin kullanıcı ve tasarım kılavuzları, PCI destekli bir ana kartın sayısal ve yazılım anlamında nasıl tasarlanabileceğini kavramak açısından çok kıymetli bir kaynaktır.   Marvell bu dokümanını hizmete özel antlaşma karşılığında verdiği için malesef sitede paylaşıma açamıyorum.  Ancak farklı tümdevre üreticilerinin öne çıkan benzer ürünlerine yönelik tasarım dokümanlarını Web sayfalarından bulabilmek mümkündür.  Konuyla ilgilenenler için aşağıdaki adreslere göz atmalarını tavsiye ederim.

http://www.plxtech.com/

http://www.marvell.com

http://www.turksan.com/pci-express-slot.html

İşletim sistemleri bilgisayar programları için kaynak ayırıp çalıştırıldıkları andan itibaren programlar süreç olarak isimlendirilir.  Her bir sürece tahsis edilen bellek alanı ya da erişebilecekleri bellek alanları işletim sistemi tarafından programın ihtiyacına göre belirlenir.   Birden fazla süreçin paralel olarak çalıştırıldığı ortamlarda aksi belirtilmedikçe ana prensip süreçlerin birbirlerinin bellek alanlarından izole olarak çalıştırılmasıdır.  Benzer şekilde kullanıcı seviyesinde yaratılan süreçler çekirdek seviyesindeki süreçlerden de izole edilirler.

Windriver vxWorks 6.x işletim sisteminde çekirdek seviyesinde koşturulan tüm programlar tek bir süreç altında koşturulurlar.  Kullanıcı seviyesindeki programlar ise RTP (real time process) gerçek zaman süreçleri olarak adlandırılır ve ortamda birden fazla süreç paralel olarak çalıştırılabilir.  Çekirdek seviyesinde koşturulan kullanıcı yazılımları aygıt sürücüsü ya da modül olarak tasarlanır.   Aygıt sürücüleri genellikle işletim sistemi ile birlikte (statik binding) derlenirler.  Modüller ise işletim sistemi ile derlenmek zorunda değildirler.  Run time da, (late binding) işletim sistemi tarafından dinamik olarak yüklenebilirler.    vxWorks dünyasında modüller Downloadable Kernel Module olarak adlandırılırlar ve Linux işletim sistemindeki modül yapısına karşı düşerler.   Windows işletim sistemlerindeki  DLL  yapısı da  bu yapıya benzemektedir.  Modüller ile amaçlanan işletim sistemine run time`da eklenti yapabilmektir.  Bu eklenti tak ve kullan (PNP) tipinde bir aygıt sürücüsü olabileceği gibi doğrudan çekirdek seviyesinde koşturulmak istenen bir uygulama programı da olabilir.

İyi tasarlanmış bir gömülü sistem ortamında uygulamalar donanım kaynaklarından ve aygıtlarından mümkün olduğu kadar izole edilmiştir.   Bir donanım aygıtı kullanıldığı sistemden bağımsız olarak her zaman aynı şekilde çalışır.  Öte yandan aynı donanım aygıtlarını kullanan birbirlerinden çok farklı uygulamalar geliştirilebilir.   Daha açık örnek vermek gerekirse, bir DMA (direct memory access) aygıtının işlevi her zaman veriyi bir bellek alanından diğer bir bellek alanına kopyalamaktır.  DMA aygıtı ister çoklu ortam uygulamalarında (ses ve görüntü kartı gibi) , ister  radar uygulamalarında isterse veri tabanı uygulamalarında kullanılsın yaptığı görev ve çalışma mantığı her zaman aynıdır.   DMA aygıtının alt seviyeli ayrıntıları ile ilgilenen kodlamanın uygulama yazılımının bir parçası olarak geliştirilmesi kötü mühendisliktir.   İyi mühendislik ise özellikle genel amaçlı donanımların ara-yüzler yardımı ile soyutlanması ve uygulamaların yalnızca bu ara-yüzlere bağımlı olarak geliştirilmesidir.  Bu sayede aşağı seviyedeki donanım aygıtı ile ilgili değişiklikler ya da farklı bir işletim sistemi kullanılması durumu gibi radikal değişikliklerden uygulamalar neredeyse hiç etkilenmezler.    Uygulamaların asıl ilgilenmesi gereken donanım aygıtlarının işlevleri olmalıdır,  aygıtların kesmeleri, konfigürasyon yazmaçları ve benzeri detayları ile ilgilenen kodlama asla uygulama yazılımı içerisinde olmamalıdır.

Yeri gelmişken bu konu ile ilgili bir tecrübemi aktarmak istiyorum.   Bir zamanlar bir Amerikan firması ile ortak bir proje çalışması içerisinde yer almıştım.     Amerikalı ortaklarımız legacy olarak adlandırdıkları geçmişte geliştirdikleri ve denedikleri alt-sistemleri yeni isterlere uygun şekilde tekrar düzenleyerek, en az mühendislik çabası ile projede kullanmayı hedefliyorlardı.    Bu konuda genelde başarılı idiler ancak aksi durumlar da olmuyor değildi.  Sistemin en önemli FPGA tabanlı giriş/çıkış kartlarından birisi ile mevcut host mikrobilgisayar sistemi arasındaki DMA veri transferinin tetiklenmesi  konusunda büyük sıkıntı yaşadılar.  FPGA yazılımlarını ve kartlarının ara-yüz dokümantasyonlarını yeni baştan hazırlamak zorunda kaldılar.  Tüm bunların nedeni geçmiş projelerinde kullandıkları  ana kart mikrobilgisayar sistemi üzerindeki bir DMA aygıtının yazmaçlarına, PCI veri yolu üzerinden doğrudan erişerek DMA transferini başlatacak şekilde tasarım yapmış olmalarıydı.  Yeni proje de farklı bir ana kart bilgisayar kullanıldı ve üzerindeki DMA aygıtının yazmaçları ve adresleri de doğal olarak farklı idi.  Geliştirdikleri FPGA tabanlı kart, bir tek kart bilgisayar üreticisinin spesifik bir modeline bağımlı idi.  Geçmişte yapılan bu esnek olmayan tasarım kullanılan ana karta bağlı olarak FPGA yazılımlarını güncellemelerini gerektirdi.  Neyin iyi neyin kötü mühendislik olduğu bakış açısına göre değişebiliyor.   FPGA kartının ana kart üzerindeki DMA aygıtınının kendisi için tahsis edilen kanalını doğrudan adresleyerek kullanmasının,  gerçek zamanlı video verisinin aktarılması işlemini daha hızlı başlatacağı zamanında öngörülmüş.  Ancak atılan taşın ürkütülen kurbaya değmediği gibi kendilerine pahalıya mal olmuştu.   Halbuki FPGA kartı DMA transferine ihtiyacı olduğunda bir kesme yardımı ile ana kart bilgisayarını uyarabilir ve host bilgisayardaki sürücü yazılımı kendi DMA aygıtlarını kullanarak bu transferi gerçekleştirebilirdi.  Böyle bir durumda host bilgisayarın kesme gecikmesi ve PCI üzerinden yapılan bir kaç okuma işlemi veri transferine başlamadan önceki ekstra gecikmelerdir ve günümüz bilgisayarları ve RTOS`larında oldukça küçük mertebelerdedir.  Bu yöntem benimsenmiş olsa idi, FPGA kartı üzerinde hiçbir değikilik yapılmadan kullanılabilirdi.   Yapılacak tek şey kartın çalıştırılacağı host bilgisayar ortamına yönelik sürücü yazılımının hazırlanması olacaktı ki,  bu işlem kartın çalıştığı bilinen programını değiştirip sil baştan testlere sokmaktan çok çok daha ucuz ve kolay bir yöntem olurdu.  Kısaca bağlamak gerekirse;  savunma projeleri genellikle pahalı ve çok mühendislik adam saati gerektiren projeler oldukları için mevcut proje çalışmaları sırasında, ilerideki olası projeler de düşünülerek, özellikle yazılım alt sistemleri tekrar kullanılabilirlik kriterleri göz ardı edilmeden tasarlanmalıdır.   Bu sayede hem yürütülmekte olan projelerin bakım masrafları daha az olacak hem de yeni projelere teklif verirken ve gerçekleştirirken önemli maliyet ve takvim avantajları elde edilecektir.

Tekrar konu başlığına dönersek, gerçek zaman kriterlerinin önemli olduğu uygulamalarda, örneğin bir radar sisteminde ya da bir elektronik harp sisteminde, işletim sisteminin çekirdek uzayı ile kullanıcı uzayı arasında ortak bir bellek alanı paylaştırmak gerekebilir.  Yukarıdaki paragrafta değinilen sistem bu gerekliliğe güzel bir örnek teşkil eder.  Gerçek zamanlı olarak toplanan video işareti ana kart bilgisayarının belleğine DMA yöntemi ile sürücü yazılımı tarafından transfer edilir.   Sürücü yazılımları çekirdek uzayında çalışırlar ve tahsis ettikleri bellek alanlarını gelen ve giden verileri tamponlamak için kullanırlar.

Kullanıcı uzayında çalışan bir süreç içinden ilgili sürücüye standart dosya işlemleri ile erişilebilir.   vxWorks işletim sisteminde her sürücünün bir dosya adı vardır.  Sürücünün ismi kullanılarak dosya açma fonksiyonları ile sürücüye ait bir handle alınır.  Sürücünün tamponladığı veri yine standard dosya okuma işlevleri ile alınan handle kullanılarak süreç içinde belirlenen bir alana kopyalanır.  Kopyalanan veri işlenir ve sonuçlar üretilir.  Bu yaklaşımdaki sıkıntı verinin iki defa kopyalanmasıdır.  Dış dünyadan transfer edilen veri önce sürücünün tampon belleğine daha sonra ise RTP alanındaki belleğe kopyalanır.  Stream halinde akan video verilerini bir an önce işlemek önem arz eder.  Bu tip durumlarda ikinci kopyalama işlemi arzu edilmez.   Böyle durumlarda çekirdek uzayı ve RTP arasında bir bellek alanı paylaştırılır.  Dış dünyadan veriler doğrudan bu alana transfer edilir.  Bu alan RTP’nin yani sürecin bellek alanına da eklenmiştir.  RTP içerisinden bu alana sanal adresler kullanılarak erişilebilir.  Paylaşımın özelliğine göre bu alana okunabilir ya da yazılabilir.  Dış dünyadan veri transferleri yapılan bellek alanlarının (cache) ön bellek tamponuna alınmaması önemlidir.    vxWorks`te paylaşılan bölge tanımlanırken ilgili alanın, ön belleğe alınıp alınmayacağı, okuma ve yazma hakları da belirlenir.  vxWorks’te bu işlem için aşağıdaki fonksiyonlar kullanılabilir :

sdOpen (char * name,int options,int mode,UINT32 size,off_t physAddress,MMU_ATTR attr,void ** pVirtAddress);
sdCreate (char * name,int options,UINT32 size,off_t physAddress,MMU_ATTR attr,void ** pVirtAddress);

Asağıdaki kod parçasi çekirdek ve kullanıcı uzayı arasında ortak paylaşılan 8 Kbyte’lık bir hafıza bölgesi tanımlamaktadır. Ayrıca bu bölge üzerinde önbellek işlemleri yapılmaması da garantilenmiştir.  sdOpen fonksiyonu, adı verilen bölge önceden tanımlanmamış ise bölgeyi fonksiyonun içinden çağrıldığı sürecin hafıza adres haritasına ekler,  aksi takdirde bu alanı bir defaya mahsus olmak uzere yaratır. Sistem de bu alan ile ilgilenen süreç kalmadığı zaman bu alan da  tekrar serbest bırakılıp sistem kaynaklarına iade edilir.

/*
* DemoShared
*
* Creates a shared data region between
* user and rtp spaces.
*/
STATUS DemoShared()
{
   void *pRegionStrtAdr = NULL;
   printf("\n< Shared data region demo >");
   SD_ID hdlSharedRegion =  sdOpen("/SharedPartition",
                                   0,
                                   OM_CREATE,
                                   8096, /*8 Kbytes */
                                   0,
                               (MMU_ATTR)(SD_ATTR_RWX | SD_CACHE_OFF),
                                  &pRegionStrtAdr);
   /* Is valid handle ? */
   if( NULL == hdlSharedRegion)
   {
      perror("\nShared region creation errror");
      return ERROR;
   }
   /* Display stats */
   printf("\nRegion handle: 0x%x
           \nRegion start:0x%x",
            hdlSharedRegion,
            pRegionStrtAdr);
   return OK;
}

Askeri sistemler üzerinde en yaygın kullanılan gerçek zamanlı işletim sistemlerinin başında Windriver vxWorks™, Green Hills Integrity™ ve LynxOs™ gelir.  Adı geçen işletim sistemlerinin bir başka ortak noktası da  süreç tabanlı (process based) olmalarıdır.  Süreç tabanlı işletim sistemleri hafıza organizasyonu ve erişimi açısından bazı kısıtlamaları da beraberinde getirir.   Bu özellikler her ne kadar kısıtlama olarak anılsa da aslında işletim sisteminin güvenilirliğini ve gürbüzlüğünü doğrudan etkileyen önemli öğelerdir.

İşletim sisteminde yaratılan her bir süreç  (process) için ayrı bir hafıza bölgesi tahsis edilir ve süreçler varsayılan şartlar altında birbirlerinin hafıza bölgelerine erişemezler.  Eğer sürecin içindeki bir kod parçası süreçe tahsis edilmiş olanın dışında bir hafıza bölgesini adreslemeye kalkarsa,  mikroişlemci (Central Processing Unit) üzerindeki bir donanım  olan MMU (Memory Management Unit) bu erişime izin vermeyecektir.  MMU ilgili erişimi engellemek için derhal bir hata kesmesi (trap) üretir.  İşlemci üzerindeki kod akışı kesme hizmet rutinlerine yani işletim sisteminin hata yakalama rutinlerine yönlenecek ve sistem kendisine ait olmayan adreslere erişmeye çalışan sürece, meşhur  ‘Segmentation Violation’ 11 kodlu sinyalini gönderecektir.  Süreç bu sinyali yakalayıp hatayı ayıklayabilir ya da varsayılan olarak işletim sistemi tarafından sonlandırılır.  Bu mekanizma sayesinde sistemdeki süreçler (programlar), diğer programların yaptıkları hatalı işlemlerden etkilenmeden çalışmalarına devam edebileceklerdir.   Mekanizmaya genel olarak  ‘Memory Protection’ adı verilir.

Hafıza koruma mekanizmaları donanımsal özelliklerdir ve her mikroişlemcide bu destek bulunmayabilir.   PowerPC™, MIPS™ ,Pentium™ gibi işlemci ailelerinde MMU desteği mevcuttur.  Öte yandan mikroişlemci üzerinde bu destek bulunsa bile bu özellikten yararlanabilmek için işletim sisteminin hafıza koruma desteğine sahip olması yani süreç tabanlı bir işletim sistemi olması gereklidir.  Aksi halde programlar arası hafıza korumasından söz etmek mümkün değildir.  VxWorks™ 6.x li sürümlerden itibaren hafıza koruma desteğini içermektedir.   Önceki sürümlerinde ise çalışma esnasında sistemde tek bir süreç bulunur ve bütün işletim sistemi görevleri bu sürece ait hafızayı paylaşırlardı.  Görevlerden birisi hatalı bir işlem yaptığında tüm sistem çökerdi.

Günümüz mikroişlemcileri dedelerine göre binlerce kat daha fazla işlem gücüne sahiptirler.  Benzer şekilde sayısal bellekler de hem daha hızlı hem de daha büyük kapasitelere sahip olarak üretilmektedirler.  Sonuçta ortaya çıkan gelişmiş mikrobilgisayar mimarilerinde  birden fazla programın paralel olarak çalıştırılması sıradan bir iş haline gelmiştir.  MMU desteğinin getirdiği üstünlük sadece süreçler arasındaki hafızanın korunmasından ibaret değildir.  ‘Virtual Memory Space’ sanal hafıza uzayı kavramı da bir o kadar önemlidir.  Sanal hafıza uzayı sayesinde yazılımlar mikrobilgisayar platformlarının gerçek bellek organizasyonundan bağımsız olarak geliştirilebilirler.

Yazılımsal anlamında düşündüğünüzde MMU sayesinde programlara verilen sanal bellek organizasyonu her zaman aynı olabilecektir.  Farklı olan tek şey belleğin büyüklüğü olacaktır.  Bu ilüzyon sayesinde derleyici (compiler) penceresinden işlemci belleği, her zaman sıfır adresinde yerleşik kesintisiz bir blok hafıza olarak gözükebilir. Aslında bellek organizasyonu gerçek uzayda çoğu zamanlar parçalı ve süreksiz bir yapıdadır.  Ancak MMU sanal adresten fiziksel adreslere dönüşüm yaparken bu parçalı yapıyı sanal uzayda ardışık bir bellek bloğu varmış gibi adresleyebileceğinden, derleyicilerin bu ayrıntıları bilmelerine gerek kalmaz.  Ayrıca çalışma esnasında da programlar işlemci üzerinde çalışan tek programın kendileri olduğunu zannederler.

MMU Bloğu Mantıksal Gösterimi

MMU’nun nasıl çalıştığını biraz daha somutlaştırmak için PowerPC işlemcilerinden örnek verebiliriz.   Örneğin MPC7448™  PowerPC işlemcisinin 32 bitlik gerçek (aslında 36 bit), 52 bit ise sanal adres yolu vardır.  Gerçek adres yolu işlemcinin adresleyebileceği fiziksel alanı belirler.  Bu durumda MPC7448™ işlemcisinin etkin adresleyebileceği belleğin sınırı teorik olarak 4 Gigabyte’dır.  MMU,  52 bitlik sanal adres uzayı ile 32 bitlik gerçek adres uzayı arasındaki adres dönüşümlerini yapmaktadır.  Sanal uzaydaki adresleme,  belleği ‘segment ve page’ olarak adlandırılan parçalara bölmek sureti ile yapılmaktadır.  Her bir segment en fazla 256 Mbyte genişliğinde bir bellek bloğuna karşı gelir.  Her bir sayfa (page) ise en az 4Kbyte genişliğindedir.  Basit bir hesapla 1 segmentin 65536 adet sayfadan oluştuğu görülebilir.    İşletim sistemi her bir sayfa için bir adres tanımlayıcısı (page descriptor) tanımlamalıdır.  MMU bu adres tanımlayıcılarını gerçek adresleri hesaplamak ve erişim haklarını denetlemek için kullanır.  Bu tablolar sistem ilklendirilirken bellekte belirli bir alana işletim sistemi tarafından yazılır.  MMU bu tabloları TLB translation lookaside buffer diye adlandırılan kendi üzerinde bulunan cache tipi hafızaya kopyalar.  Benzer şekilde segment bilgilerini de kendi üzerinde bulunan BAT (base address translation) yazmaç dizisinde saklar.  Böylece adres dönüşümleri çok hızlı bir şekilde yapılabilir.

Süreç tabanlı işletim sistemleri için MMU desteği önemlidir.  MMU sayesinde süreçlerin mikrobilgisayar kaynaklarına erişimi kontrol altında tutulabilir.   Örneğin bir sayısal  radar alıcısı sistemini düşünelim:

Blok şemadan da anlaşılacağı üzere Radar Video yakalama kartı ile mikrobilgisayar ortamı arasındaki ara-yüz PCI veri yoludur.     Daha jenerik bir  donanım sistemini örnek  göstermek gerekirse masaüstü bilgisayarlar ve PCI ses kartları da düşünülebilir.   Temelde her iki sistemde benzer döngü ile çalışırlar:

- adım 1: Veri yakalama kartı işareti örnekler ve sayısallaştır.

- adım 2: Elde edilen sayısal veriler kart üzerindeki FIFO yapıdaki tampon bellekte saklanır.

- adım 3: Tampon FIFO bellekleri  dolmadan önce mikrobilgisayar PCI kesmesi ile haberdar edilir.

- adım 4: Mikrobilgisayar sistemi kart üzerindeki tampon bellekten kendi belleğine veri transferi yapar.

Bilgi notu: Adım 3 ve 4 her zaman bu şekilde olmayabilir.  Bazı sistemlerde veri yakalama kartlarının üzerlerinde DMA (direct memory access) birimleri bulunur.   Kart donanımı tampon belleği  DMA kullanarak mikrobilgisayarın tahsis edilmiş belleğine kopyalar.   Kopyalama işleminin sonunda mikrobilgisayar bir kesme ile haberdar edilir.  Özellikle gerçek zamanlı olarak veriyi işlemesi gereken sistemlerde bu yöntem tercih edilir…

Bu adımlarda mikrobilgisayar ve veri yakalama kartı arasındaki etkileşimin kaba bir çerçevesi özetlenmiştir.   Örnek verilen sistem ile MMU ve süreç ilişkisi ilk bakışta muğlaktır.  Sistem mikrobilgisayar  yazılım organizasyonu açısından incelendiğinde, MMU ve süreçlerin belirleyiciliği ortaya çıkar.

Mikrobilgisayar tarafından bakıldığında veri yakalama kartı PCI adres uzayındaki bir taban adrese oturmuş giriş/çıkış cihazıdır.   PCI adres uzayı  işlemcinin (local address) yerel adres uzayına pencerelenmiştir.    Yerel adres ile kasıt edilen  mikroişlemcinin fiziksel olarak adresleyebilediği alandır.   Sanal bellek mimarisinin mevcut olmadığı bir mikrobilgisayar ortamında tüm adresler gerçek adres cinsindendir ve böyle bir ortamda yazılımlar herhangi bir sınırlama olmadan yerel adres alanlarına erişebilirler.  Bu durumda PCI veri yakalama kartına yazılım içinden doğrudan erişmek,  adresini kullanmak sureti ile mümkündür.    Örneğin C dilinde tanımlı pointerlar (işaretçiler) kullanılarak kartın yazmaçlarına doğrudan erişilebilir. Yerel adreslerin PCI adreslerine çevrilmesi ve PCI veri yolu üzerindeki okuma / yazma işlemlerinin gerçekleşmesi,  mikrobilgisayar donanımı ve sistem yazılımının işbirliği ile gerçekleştirilir.  Uygulama yazılımı geliştiricileri bu detaylar ile uğraşmak zorunda değillerdir.  Ancak mikrobilgisayar ortamına BSP kart destek paketi hazırlayan sistem yazılımcıları bu detaylar ile uğraşırlar.

Sanal bellek kullanılan yani MMU desteğinin olduğu ortamlarda ise yazılımlar sadece sürece tahsis edilmiş mantıksal adres bölgelerine doğrudan erişebilirler.  Böyle bir ortamda çalışacak yazılımın içerisinden PCI veri yakalama kartına doğrudan erişmek varsayılan şartlar altında -ilgili adres alanının süreçin adres alanına eklendiği durumlar hariç- mümkün değildir.   İşte tam bu noktada (device driver) sürücü yazılımları imdada yetişir.  Sürücü yazılımları (kernel) çekirdek seviyesinde,  supervisor, admin ya da  priviledged mod olarak adlandırılan işlemci modlarında çalıştırılan kod parçacıklarıdır.  Bu yetki seviyesinde  çalıştırılan yazılımlar hem giriş/çıkış komutlarını yürütebilirler hem de çekirdek ile aynı adres uzayını yani yerel adres uzayını paylaşırlar.  Dolayısı ile PCI  veri yakalama kartını doğrudan adresleyebilmeleri mümkündür.

Örnek akışta adım 3 ve 4 sürücü yazılımının sorumluluğundadır.  Sürücü yazılımı işletim sistemine hangi kesme vektörü ile ilgilendiğini kayıt eder.  İşletim sistemi mikro işlemci üzerinde oluşan her türlü kesmeyi birinci elden yakalar ve kendi kesme hizmet rutini içerisinde, daha önceden kayıt edilmiş kesme servis rutinlerini  sırası ile çağırır.  Bizim örneğimizde PCI veri yakalama kartının sürücü yazılımının parçası olan kesme hizmet rutini işletim sistemi tarafından çağrılır.    Sürücü yazılımı DMA transferi başlatarak kart üzerindeki tampon belleği işlemci hafızasındaki bir tampon alana kopyalar ve ilgili uygulama yazılımlarını verinin varlığından haberdar eder.  Uygulama yazılımı da standart dosya erişim ara-yüzünü kullanarak, veriyi sürücü yazılımının tampon belleğinden kendi bellek alanına kopyalar.  Özellikle gerçek zamanlı video işleme uygulamalarında iki defa kopyalama işleminin getireceği gecikme arzu edilmez.  Böyle durumlarda sürücü yazılımının kullandığı tampon hafıza shared data (paylaşılan veri alanı) olarak tanımlanır ve uygulama yazılımının ait olduğu sürecin bellek alanına adreslenir.   Böylece uygulama yazılımı ilgili tampon alanına doğrudan erişebilir.  Aslında PCI kartın oturduğu alan da paylaşımlı alan olarak tanımlanabilir ve bu durumda kullanıcı modunda çalışan uygulama yazılımı da PCI kartı doğrudan adresleyebilir.  Ancak bu yaklaşım donanım ve uygulama arasındaki izolasyonu kaldırdığı için uygulamanın taşınabilirliğini zorlaştırır.  Ayrıca uygulama yazılımında yapılan hatalar tüm işlemci sistem yazılımını da göçertebilir.

Hafızanın tahsis edilmesi, erişim yetkileri, ön bellekli bir alan tahsis edilmesi  v.b. tüm tanımlamalar MMU desteği sayesinde mümkün olabilmektedir.   Yazılım terminolojisindeki süreç kavramının gerçek anlamını bulabilmesi ancak MMU desteği olan bir işlemci üzerinde mümkündür.

Bu yazıda kısaca değinilen konuların içlerini doldurabilmek için takip eden yazılarda bir sürücü yazılımı nasıl yazılır, çekirdek ve kullanıcı uzayları arasında bellek alanı nasıl paylaştırılır , PCI  veri yolundaki bir çevre birim kartı  kullanıcı uzayına doğrudan nasıl adreslenebilir, gibi pratik değeri yüksek olan husulara değineceğim.  Windriver vxWorks işletim sistemi savunma sektöründe en yaygın kullanılan işletim sistemlerinin başında geldiği için pratik örnekleri vxWorks için vermeyi düşünüyorum. Yeri geldiğinde diğer işletim sistemlerinde de benzer yapıların nasıl kullanıldığının örneklerini sunacağım.   Ancak genel yaklaşımım hedefi geniş tutup pratik değeri olmayan kavramsal örnekler ile bu sayfaları doldurmak yerine, gerçek zamanlı uygulama geliştiren mühendislerin işine gerçekten yarayacak örnekleri vermektir.

Savunma sanayi için geliştirilen gömülü yazılımlar çoğu zaman karmaşık hesaplamaları gerçek zamanlı olarak yerine getirmek durumundadırlar.  Örneğin bir radar iz takip sistemini düşünün.  İz takip sistemi radar ekranında beliren n tane ayrı hedefe yönelik izleme başlatmak ve izlemeyi devam ettirmekten sorumludur.  Sistemde kullanılan radar bir tarama periyotunu tamamlanmadan önce, hedeflere ait parametrelerin kestirim hesaplamalarının yapılmış olması gerekir.   Askeri amaçlı uzak mesafeli gözetleme yapan AN/SPS-49 radarı bir turu 5 saniye de tamamlarken, askeri amaçlı bir CAS radarı bir turu 1 saniye civarında tamamlar.  Her iki durumda da izlemeyi yapan yazılımın yüksek performanslı işlemci gücüne ihtiyaç duyacağını rahatlıkla öngörebilirsiniz.  Ancak sistemin işlem kapasitesinin yanı sıra işlemlerini  her zaman aynı zamanlamalar dahilinde bitirebilmesi de hayatidir.  Sistem gerçek dünyadaki olaylar ile meşgul olmak durumundadır öyleyse görevlerini gerçek zamanlı olarak yerine getirmelidir.  Aksi durumda sistemin faydalı sonuçlar üretebilmesi mümkün değildir.

SPS 49 Arama RadarıSPS 49 Radarı

Bilgisayar ortamında tanımlanan yazılım görevlerinin önceden kestirilebilir zamanlar (deterministic) dahilinde çalıştırılabilmeleri için bilgisayar üzerinde gerçek zamanlı görev tanımlamaya imkan veren işletim sistemlerine ihtiyaç duyulur.   İşletim sistemi kullanılmayan bilgisayar ortamları için geliştirilen yazılımlar da farklı yaklaşımlar ile gerçek zaman isterlerini karşılayacak şekilde geliştirilebilirler.   Örneğin bir radar sistemindeki motorun hız denetimini yapan,  basit bir mikrobilgisayar ortamı için işletim sistemi kullanmaksızın bir PID hız denetleyici uygulaması gerçekleştirmek göreceli olarak kolay bir iştir.   Ancak aynı radar sistemi üzerinde hedef takibinden sorumlu mikrobilgisayar ortamının gelişmiş donanım yapısı ve uygulama karmaşıklığı düşünüldüğünde, işletim sistemlerinden yararlanmak kaçınılmaz olacaktır.     Savunma sistemlerinde iş yükü fazla olan bilgisayarlar, oldukça karmaşık  mikroişlemci ve çevrebirim donanım mimarileri üzerine inşaa edilmişlerdir.   Bu tip sistemlerdeki görev bilgisayarları genellikle birden fazla mikrobilgisayarın VME ya da PCI gibi veri yolları üzerinden birbirleri ile bağdaştırılacak şekilde tasarlanırlar.  Bu tip bilgisayar sistemleri üzerinde  işletim sistemlerinin koşturulması mutlak gereklilik olmasa da,  çok büyük  gereksinimdir.  Aksi durumda görev bilgisayarlarını ayağa kaldırmak için harcanacak mühendislik emeği, sistemin kendisini geliştirmek için gereken emekten bile fazla olabilir.

XtraPower_PPCM2Gefanuc PPCM2™  Tek Kart Bilgisayar

6U_Dual_CPU_280

Tek kart bilgisayar VME Backplane

Söz konusu mühendislik emeğinin neleri içerebileceğini kestirebilmek için aşağıdaki Gefanuc PPCM2™ tek kart bilgisayar blok şemasına göz atılabilir.

GefanucBlok

Gefanuc PPCM2™ Blok ve G/Ç Şeması

Gefanuc PPCM2™ blok şemasında da görüldüğü gibi kart üzerinde iki adet PowerPC™ işlemci ortak bir PCI veri yolu üzerinden birbirleri ile ilişkilendirilmiş durumdadır.  Her iki işlemci de kendine özel bellek birimlerine ve G/Ç cihazlarına sahiptir.  Ortak PCI veri yolu üzerinden karşılıklı kaynaklara çapraz erişim de mümkündür.   Karmaşık çevre birimleri ve veri yollarını  bir arada bulunduran yukarıdaki tek kart bilgisayarın, VME 6U ölçeğindeki bir elektronik kart olarak tasarlanabilmesini mümkün kılan Marvell firmasının Discovery III™ ana kart denetleyici tümdevre teknolojisidir.  Discovery III™ anakart denetleyicisi bir çok çevre birimini fiziksel olarak içermek ile kalmayıp karmaşık  PowerPC  adres veri yolunun denetiminden PCI adres veri yolu denetimine kadar bir çok işlevleri de aynı tümdevre üzerinde desteklemektedir.

PPCM2™ kartındaki iki işlemci için ayrı Discovery III™ denetleyicileri kullanılmıştır.   Ortak PCI veri yolunun PCI arbitration (veri yolu denetimi) sorumluluğu, Discovery III™ denetleyicilerinden ilki tarafından yerine getirilir. Discovery III™ özetle; işlemci bellek kod çözümünü, DRAM tazelemesini, PMC ve ortak PCI veri yollarının işlemci veri yolu ile bağdaştırılmasını, ethernet ve UART seri haberleşme bloklarını , I2C veri yolunu, genel amaçlı paralel giriş/çıkış portlarını,  kesme denetim bloğunu, ortak PCI veri yolu üzerideki PCI kapı zili (doorbell) kesmelerini, 32 bitlik dört adet zamanlayıcıyı, watchdog timer zamanlayıcısını, işlemci reset bloğunu, dört kanallı DMA bloğunu ve benzeri bir çok donanım bloğunu ve hizmetini tek bir tümdevre üzerinde desteklemektedir.

Gefanuc PPCM2™ kartı donanımı üzerinde faydalı bir uygulama yazılımı çalıştırabilmek için öncelikle kartı ayağa kaldıracak bir sistem yazılımına ihtiyaç duyulur.  Sistem yazılımından temelde beklenen; kartın üzerindeki donanımların karta besleme verildikten sonra ilklendirmesi ve kart üzerindeki donanımların birbirleri ile ahenkli çalışabilecek şekildeki konfigürasyonlarını tamamlamasıdır.  Gefanuc PPCM2™ kartı COTS (commercial off-the-shell) yani ticari olarak kullanıma hazır bir ürün olduğu için minimum sistem yazılımı da kart ile birlikte hazır gelmektedir.

Gefanuc PPCM2™ Kart Destek Paketi

Yukarıda blok gösterimde de görüldüğü üzere kart için geliştirilecek uygulama yazılımlarının donanım üzerine dolaylı erişimleri söz konusudur.  Benzer şekilde pembe kutular ile gösterilen işletim sistemi katmanlarinin da donanım erisimi  HAL (Hardware Abstraction Layer) katmanı üzerinden gerceklesmektedir.  Bu gösterimde BSP ve ESP (Enhanced Support Package) HAL katmanı olarak resmedilmişlerdir.

Özet olarak  savunma sistemlerinde gerçek zamanlı gömülü işletim araçları denilence genellikle ilk akla gelenler:

- VME ya da PCI veri yolunu destekleyen tek kart bilgisayarlar

- Kart ortamı için hazırlanmış BSP ve  sürücü yazılımları

- Gerçek zamanlı  işletim sistemleri

- ve hedefe yönelik görev yazılımlarıdır.

Gerçek zamanlı sistemlerine ait terminoloji çeşitli kaynaklarda farklılık arz etmek ile birlikte, bazı temel kavramlar üzerinde fikir birliği oluşmuştur. Aşağıda bu kavramlara değinilmiştir.

İş İle İlgili Tanımlar

İş(Job): Bir sistem tarafından zaman çizelgesine göre yürütülen birim çalışmaya verilen isimdir. Bir kontrol kuralının hesaplanması, hızlı fourier dönüşümü, veri paketi kopyalama gibi ayrıntılı bir şekilde tanımlanan her şey birer iştir.

Görev(Task): Sistemin bir işlevini yerine getirmek üzere ilişkilendirilmiş işlerin bir kümesine verilen isimdir.

Özkaynak(Resource): İşlerin yürütülmesi için özkaynaklar gerekir. Ağ, disk, işlemci birer özkaynaktır. Kuyruk teoremi literatüründe bunlara Sunucu(Server) da denilir. Gerçek zamanlı literatürde bunlar karşımıza aktif özkaynaklar olarak da çıkabilir. Bunların tamamını genelleştirmek için kullanılan bir başka terimde İşlemcidir(Processor).

Zaman İle İlgili Tanımlar

Salma Anı(Release Time): Bir işin yürütülmeye hazır hale geldiği andaki zamanın ifadesidir.

Son An(Deadline): Bir işin yürütülmesinin tamamlanması gereken zamanın ifadesidir.

Yanıt Süresi(Response Time): Bir işin salma anından tamamlandığı ana kadar geçen zamanın büyüklüğüne denir.

Bağıl Son An(Relative Deadline): Bir işin kabul edilebilen en uzun yanıt süresine denir.

Mutlak Son An(Absoulte Deadline): Salma anı ve bağıl son anın toplamında geçen sürenin ifadesidir.

Zaman Kısıtı(Timing Constraint): Bir işin zamana bağlı davranışı üzerinde etkisi olan her türlü kısıta verilen genel isim.

Hoşgörüsüz(Hard): Sistemin çalışması esnasında, tanımlı bir son an zamanının aşılması halinde geri dönüşü olmayan bir etki ya da hasar oluşuyorsa, genellikle bu son an hoşgörüsüz sıfatını alır. Örneğin bir trenin acil durum freni ya da bir bombanın uçaktan bırakılması gibi kritik bazı işler için tanımlanmış son an değerleri, hoşgörüsüz olarak sınıflandırılabilir.

Hoşgörülü(Soft): Aşılması durumunda ciddi sorunlara yol açmayan anacak sistemin başarımı üzerinde olumsuz etkileri olan zaman kısıtlarını nitelendirmek için kullanılır. Bir sistemin ne kadar hoşgörülü olduğunun ölçüsü sonuçları ile ilintilidir.

İşin Gecikmesi(Tardiness of A Job): Bir işin son anını ne kadar aştığının ölçüsüdür. Eğer iş son andan önce tamamlanıyorsa gecikme yoktur. Bir işin sonucunun kullanılabilirliğinin gecikmesine göre değişim oranı, o iş için tanımlı son anın ne kadar hoşgörülü olduğunun ölçüsüdür.

Sağlama(Validation): Benzetim ve test tekniklerinden yararlanılarak bir zaman kısıdının sağlanabileceğinin gösterilmesidir. Son yıllarda bazı gerçek zamanlı sistemlere dinamik olarak tanımlanan görevler kabul edilmeden önce doğru zamanlama ile yürütülebileceğinin sağlaması otomatik olar sistem tarafından gerçekleniyor.

İstatistiksel Kısıt: Zaman kısıtlarının istatistiksel ortalama olarak verildiği hoşgörülü kısıtlardır.

Gerçek Zamanlı Sistemleri Matematiksel Başvuru Modelleri

Gerçek zamanlı sistemlerin matematiksel olarak modellenmeleri sayesinde, uygulamaların zamanlama kısıtları ve kaynak isterleri üzerinde odaklanabilmek mümkün hale gelir. Uygulamaların zaman çizelgesine göre koşturulmasını sağlayacak algoritmaların uygulamaya özel gerçeklenmeleri gerekmeden başarımlarının test edilebileceği çeşitli modeller mevcuttur. Bu modellere göre her sistem üç ana öğe ile karakterize edilir:

  1. Sistem tarafından desteklenen uygulamaların İş Yükü Modeli.
  2. Sistemin uygulamalara sunduğu Sistem Kaynak Modeli.
  3. Uygulamaların kaynaklarını nasıl kullandığına yönelik Algoritma Modeli.

İşlemciler ve ÖzKaynaklar

Tüm sistem kaynakları işlemciler ve özkaynaklar olmak üzere iki ana sınıfa ayrılırlar. İşlemcilere örnekler; sunucular, bilgisayarlar, iletim kanalları, diskler ve veri tabanı sunucuları olabilir. İşlemciler makine kod yürütme, veri kopyalama, sorgu yürütme gibi işleri yaparlar. Her bir işin yürütülmesi için en az bir işlemci ile ilişkilendirilmelidir. Bazı durumlarda işlemcileri de kendi aralarında kategorize etmemiz gerekebilir. Aynı tipten işlemciler birbirlerinin yerine kullanılabilirler. Örneğin aynı veri iletim hızında çalışan iletim kanalları birbirlerinin yerine kullanılabileceği gibi simetrik çoklu işlemcili sistemlerdeki mikroişlemciler de benzer şekilde birbirilerinin yerine kullanılabilirler. Mikroişlemciler, veri iletim kanalları ve disklerin işlevselliği farklılık arz eder. İşlemciler P harfi ile sembolize edilirler. İşlemcilerin zaman çizelgesini hazırlayan algoritmalar incelenirken işlemci tiplerinin bir önemi kalmaz.

Özkaynaklar bazen pasif kaynaklar olarak da anılır. Bu tip kaynaklara örnek olarak; bellekler, seri numaraları, karşılıklı dışlama mekanizmaları (mutex) ve veri tabanı kilitleri gösterilebilir. Bir işin yürütülmesi için işlemciden ile birlikte bazı pasif kaynaklara da ihtiyaç duyulur. Örneğin hesaplama ile uğraşan bir iş diğer işler ile veri paylaşımında bulunuyor olabilir. Paylaşılan veri bir semafor yardımı ile korunuyor olabilir. Bu durumda semafor kaynak olarak modellenir. Özkaynaklar R harfi ile sembolize edilirler. Yukarıdaki kaynaklar tekrar kullanılabilirken bazıları kullanılamaz. Örneğin süreçler arası haberleşme için kullanılan bir mesaj bir daha kullanılamaz.

Bazen aynı sistemdeki elemanları işlemci ya da özkaynak olarak modellenebilir. Dağıtık bir sistemde hesaplama ile uğraşan bir işin uzaktaki bir mikroişlemci üzerinde koşturulması gerekebilir. Bu durumda uzaktaki mikroişlemcinin kaynak ya da işlemci olarak modellenmesi söz konusu olabilir. Modellemeye bağlı olarak farklı bakış açıları elde edilerek, farklı zaman çizelgeleri ve kaynak yönetimi stratejileri belirlenebilir. G/Ç veri yolu gerekli ve çok önemli bir kaynaktır. G/Ç veri yolu üzerindeki gecikmeleri, gerçek zaman başarımını kestirmek için hesaba katılabilir. Bu durumda G/Ç veri yolu özkaynak ya da işlemci olarak da modelleyebiliriz.

Geçici Parametreler ve Gerçek Zamanda İş Yükü

İşlemciler üzerindeki iş yükü işler için ayrılan zaman ve diğer kaynakların tamamıdır. Bir sistemin işlevselliğini yerine getirmek üzere kümelenmiş işler görev adını alır. Genellikle hoşgörüsüz işlerin ve görevlerin birçok parametresi önceden belli olmalıdır. Aksi durumlarda sistemin istenilen zaman kısıtlarına uygun çalışması mümkün olamayabilir. Sistemdeki görevlerin sayısı bir parametre olarak düşünülebilir. Çoğu sistemin çalışma modundaki görevlerinin sayısı ve öncelikleri sabittir. Tipik bir uçuş kontrol sistemi uçuş modunda çalışırken 12 farklı göreve sahiptir. Uçak inişe geçtiğinde kontrol sistemi de iniş moduna geçer ve görevlerin sayısı 24 çıkabilir. Bu tip sistemlerin her bir çalışma modu için tanımlı görevlerinin sayısı önceden belirlenmiştir. Bazı sistemlerde ise görevlerin sayısı aynı çalışma modu için de dinamik olarak değişebilir. Örneğin hava trafik kontrol sisteminde radarın kapsama alanına giren her bir uçak için bir görev yaratılır. Benzer şekilde uçağın radarın kapsama alanından çıkması ile birlikte sistem ilişkili görevi sonlandırır.

Her bir Ji işi geçici, işlevsel, kaynak ve dahili bağlantı parametreleri ile karakterize edilebilir. Geçici parametreler zaman kısıdı ve davranış biçimi hakkında bilgi içerir. Dahili bağlantı parametreleri ise diğer işler ile karşılıklı bağımlılıklar hakkında bilgi içerir. İşlevsellik parametreleri işin kendine has özeliklerini belirler.

Çoğu sistem için işlerin salma anları kesin olarak bilinemez. Salma zamanı olarak en erken zaman ri-, en geç zaman ri+ terimleri ile ifade edilir. Bazı modellerde ri ve gecikmenin toplamı maksimum gecikme olarak düşünülür. Pratik hesaplamalarda bu gecikme(Jitter) göz ardı edilebilir. Çoğu gerçek zamanlı sistem rasgele oluşan harici olaylara da yanıt vermek zorundadır. Sistem bu tip olaylara bir dizi işleri ardışık olarak koşturmak sureti ile yanıt verir. Olay tetiklenene kadar işlerin salma zamanları bilinemez. Bu tip görevlere seyrek (sporadic) işler denir. Örneğin bir jet pilotunun otomatik pilotu ne zaman devreden çıkaracağı önceden bilinemez. Sisteme ait modelde bu tip görevler işler için bir olasılık dağılımı bulunmalıdır. Bu tip görevler için salma zamanı yerine varış zamanı terimi tercih edilmektedir.

Geçici parametrelerden bir diğeri de ei yürütme zamanıdır. Yürütme zamanı genellikle donanım ve yazılıma bağlı olarak bir iş için her zaman aynı sürede olmaz. Örneğin işin içerisinde bulunan karşılaştırma komutlarının işlem süreleri farklı olacağı için o anki duruma bağlı olarak yürütme zamanları da farklı olacaktır. Yürütme zamanı içinde salma zamanına benzer olarak en uzun ve en kısa yürütme zamanları söz konusudur. Ancak yürütme zamanları arasındaki farkın büyük olması durumunda zamanlama kısıtları açısından gürbüz bir sistem tasarlamak zordur. Bu yüzden gerçek zamanlı sistemlerin tasarımında yürütme zamanını değiştirecek etkenlerden en aza indirgenir. Örneğin sanal hafıza kullanımının gerçek zamanlı bir sistemin önceden kestirilebilirliği üzerinde oldukça olumsuz etkisi vardır. En uzun zamanlar kullanılarak tasarlanan bir sistemde ise mikroişlemciden tam anlamı ile yararlanılmamış olunur. Bu durumda gerçek zaman kestirimi üzerinde olumsuz etkisi olabilecek tüm karmaşık donanım ve yazılım mekanizmalarından kaçınmak doğru olacaktır.

Dönemsel Görev Modeli

Bu model en yaygın kullanılan modellerin başında gelir. Birçok geleneksel gerçek zamanlı sistem bu modelle birebir örtüşür. Bu modele dayalı zamanlama algoritmalarının başarımları oldukça iyi ve davranışları önceden kestirilebilirdir.

Modelde belli aralıklar ile sistemin bir işlevini yerine getirmek üzere çalıştırılan her hesaplama ve veri iletimi bir periyodik görev olarak kabul edilir. Periyodik görev Ti’ye ait dönem pi görevdeki ardışık işlerin salma anları arasındaki en küçük zamandır. Yürütme zamanı ise görevin içerdiği işlerin en uzun yürütme zamanlarının toplamı kadardır. Sistemdeki görevlerin dönemleri ve yürütme zamanları her an bilinir. Geleneksel literatürde dönemsel görevin tanımı ile görev içerisindeki işlerin tamamının dönem başında tetiklenmesi anlatılmıştır. Burada verilen dönemsel görev tanımı ise seyrek iş (sporadic job) ile örtüşmektedir. Pratikte görevin içerisindeki işlerin salma anlarının görev dönemi içerisinde her hangi bir zamanda olması kabul edilebilir.

Programlanabilir görev modelinin doğruluğu salma ve yürütme zamanlarındaki gecikmelerin uzaması ile azalır. Dolayısı ile bu model bazı sistemler için çok uygun olmayabilir. Sistemdeki görevleri T1,T2….Tn, görevlerden herhangi birisine ait işleri ise Ji,1, Ji,2 …. Ji,n ile gösterebiliriz. Her Ti görevindeki ilk iş olan Ji,1’in salma zamanı ri1 Ti görevinin fazı olarak tanımlıdır ve Øi ile gösterilir. Bir diğer önemli parametre ise toplam meşguliyet oranı U dır. Ui = ei/pi oranı herhangi bir Ti görevinin işlemciyi ne kadar meşgul ettiğini gösterir. Bir sistemdeki tüm görevlerin yararlanma oranlarının toplamı da o işlemcinin ne kadar bir yüzde ile meşgul olduğunun ifadesidir.

Dönemsel Olmayan(Aperiodic) ve Seyrek (Sporadic) Görevler

Periyodik görev modelinde beklenmeyen olaylara verilen yanıtlardan kaynaklanan iş yükünün modellenmesi dönemsel olmayan ve seyrek işler ile yakalanır. Her dönemsel olmayan ve seyrek görev, seyrek işlerin bir akışıdır. Bu iki görev modelinin tanımları arasındaki küçük bir nüans farkı vardır:

Dönemsel Olmayan Görev: Bu göreve ait işler hoşgörülü bitiş zamanlarına sahiptir. Sistemin böyle bir göreve yanıt verme süresinin en iyisi olmasını istenir ancak bunun yanında sistemdeki hoşgörüsüz bitiş zamanlarına sahip görevleri etkilememesi de beklenir.

Seyrek Görev: Bu göreve ait işlerin bitiş anları hoşgörüsüzdür. Örneğin bir jet pilotunun herhangi bir anda oto pilotu devre dışı bırakmak istemesi bu tip görevlere güzel bir örnek teşkil eder.

Öncelik Kısıtları ve Veri Bağımlılığı

Alışılagelmiş zamanlama teorisinde işlerin belirli bir sıra ile yürütülmesi gerekiyor ise bu işlerin öncelik kısıtları (precedence constraint) vardır denir. Aksi durumlarda işlerin birbirlerinden bağımsız oldukları vurgulanır. Zaman çizelgesi hazırlama algoritmalarında işler arasındaki bu tip ilişkiler Görev ve Öncelik Grafikleri ile gösterilir. Ji < Jk ifadesi ile anlatılmak istenen Jk işinin Ji tamamlanmadan yürütülemeyeceğidir. Bu durumda Ji işi Jk işinin hemen öncesi (immediate predecessor) Jk ‘de Ji’nin hemen sonrası (immediate successor) olarak anılır.

İşler arasındaki bir diğer bağımlılık da veri bağımlılığıdır. Bu tip bir bağımlılık öncelik grafiği üzerinde gösterilemez. Gerçek zamanlı sistemlerde işlerin birbirleri ile haberleşmek üzere sık kullandıkları tekniklerin başında veri paylaşımı gelir. Üretici ve tüketici durumundaki işler eşzamanlı olarak çalışmazlar. Üretici iş veriyi paylaşılan bir adres alanına yazar. Bu veri tüketici iş tarafından herhangi bir anda kullanılır. Böyle bir durumda öncelik grafiğinde işler birbirinden bağımsız olarak gösterilir. Aslında aralarında bir veri bağımlılığı söz konusudur. Örneğin aviyonik sistemlerinde navigasyon görevi uçağın yerini periyodik olarak güncelleyerek bu bilgiyi paylaşılan bir alana yazar. Uçuş kontrol görevi ise bu bilgiye ihtiyaç duyduğunda güncellenen veriyi okur. Bu iki görev arasında bir öncelik kısıdı bulunmamasına rağmen sistemin zaman planlayıcısı bu görevleri birbirlerinden bağımsız düşünerek zaman çizelgelerini planlayamaz. Öte yandan verinin bütünlüğünün korunması adına bir kilit mekanizması kullanılarak paylaşılan veri alanına aynı anda görevlerden yalnızca birinin erişimine olanak tanınır. Bu mekanizmanın dışında şartlı iş koşturma, veya işleri ve boru (pipeline) mekanizmalarından da faydalanılabilir.

Bazı işlerin birbirlerine göre belli bir zaman sonunda tamamlanmasına gereksinim duyulduğu durumlar vardır. Bu tip işlerin tamamlanma zamanları arasındaki farka geçici fark(temporal distance) (td) denir. Bu tip işlerin td değerlerinin belli bir değerden daha büyük olmama zorunluluğu ne zaman bitirileceklerinden daha önemli olur. Örneğin naklen yayın sitemlerindeki ses ve görüntü aktarımı işleri arasındaki gecikmenin 160 ms’den büyük olmaması durumu gibi.

İşlevsel Parametreler

Zaman çizelgesisin hazırlanması ve kaynak erişimi işlere ait en önemli karakteristikleri koyar. Bu karakteristikleri etkileyen başka parametreler de söz konusudur.

(İşlerin bölünebilirliği)(Pre-emptivity of jobs): İşlerin yürütülmelerine zaman zaman ara verilebilir. Zaman planlayıcısı daha az önemli bir işi durdurarak işlemcileri daha acil bir iş için koşturabilir. En acil iş tamamlandığında göreceli olarak daha az aciliyeti olan iş kaldığı yerden devam ettirilir. İşin yürütülürken bölünmesine (pre-emption) denilir.

Bir iş diğer işler için durdurulabiliyorsa o iş bölünebilir (pre-emptable) denilir. Gerçek zamanlı olmayan sistemlerde bu tip işler iyi bilinen Round Robin mantığı ile yürütülür.

Bir işin başından sonuna kadar bölünmeden koşturulması gerekiyorsa o işe durdurulamaz denilir. Örneğin kesme hizmet işleri işlemcinin son durumunu saklayarak çalışmaya başlar ve bu esnada hiçbir suretle kesilemez. Aksi takdirde paylaşılan veri yapılarında bozulmalar olması muhtemeldir.

Durdurma işlemi sırasında durum değişkenlerinin saklanması dahil yapılan işlerin tamamına içerik değiştirme(context switch) denilir.

Bir kaynağın her bir parçası seri olarak kullanılmak zorunda ise bölünmez kaynaktır. Diğer bir ifade ile kaynak bir işe tahsis edildiğinde o kaynağı bekleyen diğer işler beklemek durumundadır. Örneğin veritabanı sistemlerinde bir tabloyu yazmak üzere kilitlemek gibi.

Gerçek Zamanlı Sistemlerde Sık Kullanılan Zaman Paylaşım Teknikleri

Gerçek zamanlı işler belli bir zaman çizelgesi algoritması ve kaynak erişim denetimine tabi tutularak çizelgeye konulur. Bu işi yürüten birime çizelgeci(scheduler) zaman çizelgecisi denir. Zaman çizelgecisinin aşağıdaki şartları sağlaması gerekir:

  1. Her bir işlemci bir kerede yalnızca bir işe atanır.
  2. Her iş bir kerede yalnızca bir işlemciye atanır.
  3. İşler salma zamanlarından erken yürütülmezler.
  4. Algoritmaya bağlı olarak her iş için ayrılan toplam işlemci zamanı o işlerin en uzun yürütme zamanına eşittir.
  5. Tüm öncelik ve kaynak kullanım kısıtları sağlanır.

Uygun Takvim (Feasible Schedule): Verilen sistemdeki her iş son anından önce bitirilebilme durumudur.

Gecikme (Lateness): Tamamlanma zamanı ile bitim zamanı arasında kalan zaman. Tardiness hiçbir zaman negatif değer alamaz. Ama lateness erken biten görevler için negatif değerler alabilir.

Makespan: Gerçek zamanlı işlerden bitiş anları aynı olanlarının en son bitirilenin yanıt süresine denir.

Çoğu sistemde kaynakların bir kısmı mantıksaldır. Bu yüzden mantıksal kaynakların fiziksel kaynaklar üzerinde bir zaman çizelgesine bağlı olarak çalıştırılması gerekir. Fiziksel sistem üzerine mantıksal kaynağın zaman planlayıcısı ile bu mantıksal sistemi kullanan uygulamanın zaman planlayıcısı farklı yapıdadır. Bu yüzden bir sistemdeki zaman planlayıcılar arasında bir hiyerarşi bulunur. Zaman planının her seviyesindeki iş yükünü bir görev grafiği ve kaynak grafiği göstererek tüm hiyerarşik katmanları benzer şekilde gösterebiliriz.

Gerçek zamanlı sistemlerin zaman çizelgelerinin hazırlanmasında üç temel yaklaşım bulunmaktadır. Bu yaklaşımlar aşağıdaki paragraflarda anlatılmıştır.

Saat Tetiklemeli Yaklaşım(Clock Driven Approach)

Zaman tetiklemeli çizelgelemede hangi işlerin hangi zamanlarda yürütüleceğinin kararı belirli zaman aralıklarında verilir. Sistem koşmaya başlamadan önce tüm işler birer öncelik alırlar. Bu tip sistemlerde tüm gerçek zamanlı işlerin parametreleri önceden bilinir ve sabittir. İşlerin zaman planı çevrim dışı iken yapılır ve yürütme zamanına kadar saklanır. Zamanlayıcı karar verme anında bu takvimi kullanarak planlama yapar. Böylece zamanlamadan kaynaklanan yük en aza indirgenir. Dönemsel aralıklar ile zaman planı yapmanın bir yolu donanımsal bir zamanlayıcı kullanarak periyodik olarak kesme üretmektir.

Ağırlıklı Round Robin Yaklaşımı

Round robin yaklaşımı genellikle zaman paylaşımlı uygulamalar için kullanılır. İşler takvime konulduktan sonra koşmaya hazır hale geldiklerinde bir kuyruk alana atılırlar. Bu kuyruğun başındaki iş en fazla bir zaman dilimi boyunca işletilir. Genellikle bir zaman diliminin uzunluğu 10 ms civarındadır. Yürütülen iş ilk zaman diliminde bitirilemez ise kuyruğun sonuna bir daha koşturulmak üzere eklenir. Kuyrukta n iş olması durumunda her n dönüşte bir işin çalıştırılacağı aşikardır. Bu algoritmayı temel alan ağırlıklı Round Robin algoritması genellikle yüksek hızlı anahtarlamalı ağlarda gerçek zamanlı trafiğin zaman çizelgesini hazırlamak için kullanılır. Diğerinden farklı tarafı her işe ayırdığı zamanının işin ağırlığı ile orantılı olmasıdır. Ağırlıkların dinamik olarak değiştirilmesi ile birlikte işlerin tamamlanma hızları değiştirilebilir.

Öncelik Tetiklemeli Yaklaşım (Priority Driven Approach)

Bu tip algoritmaların temel felsefesi kaynakları boş bırakmama üzerine dayandırılmışlardır. Zamanlama kararları yalnızca işler tamamlandığında ya da olaylar üzerine oluşur. Önceliğe göre sürülen algoritmalar olay tetiklemelidirler. Diğer isimleri; Greedy, List, Work Conserving Scheduling olarak da geçer.

Dinamik ve Statik Sistemler

Birden fazla işlemcinin tek bir kuyruğu paylaşması ve kuyruğun başındaki işin tek bir işlemci tarafından yürütülmesi durumundaki çok işlemcili sistemlere dinamik sistem denir. Bu tip sistemlerde işler işlemcilere dinamik olarak dağıtılır.

Bir diğer yaklaşım ise işleri alt sistemlere parçalamak ve alt sistemleri statik olarak işlemcilere bağlamaktır. Sistemdeki işlemcilerden bir tanesi bozulur ya da sistemin çalışma modu değişirse işler bir işlemciden diğerine transfer edilir.

Farklı işlemciler üzerinde yürütülen işler birbirlerine bağımlılar ise işlemciler üzerindeki çizelgeciler işleri bir kaynak erişim protokolüne göre senkronize etmelidirler. Aksi belirtilmedikçe işler işlemciler üzerindeki çizelgeciler tarafından yürürlüğe konulur.

Dinamik sistemlerin zaman kısıtlarını sağlamaları garanti edilemez iken statik sistemlerin sağlamasının yapılması mümkündür. Bu sebepten dolayı neredeyse tüm gerçek zamanlı sistemler statik olarak planlanırlar.

Saat tetiklemeli sistemlere göre öncelik tetiklemeli sistemlerin bir çok avantajı uygulanması daha kolaydır. Ayrıca koşma zamanındaki yükleri de daha azdır. Saat tetiklemeli bir sistemde zaman çizelgecisi işlerin salma ve yürütme zamanları ile öncelik sırası parametrelerine ihtiyaç duyar. Öncelik tetiklemeli sistemlerde ise bu parametrelere ihtiyaç duyulmadığı için değişken zaman ve kaynak ihtiyacı olan sistemler için daha uygundur.

Gerçek zamanlı sistem en yalın ifadesi ile işini kesin bir zaman çizelgesine bağlı olarak yerine getiren sistemdir. Gerçek zamanlı sistemlerden en sık yararlanan sistemler; sayısal kontrol, komuta kontrol, işaret işleme ve haberleşme sistemleri olarak sıralanabilir. Bu sistemler gündelik hayatta her gün kullanılan trafik lambalarından tutunda, hasta olduğumuz zaman kan basıncımızı düzenleyen ve kalp atışlarımızı izleyen cihazlara kadar bir çok yerlerde kullanılırlar.

Gerçek zamanlı uygulamalar zamanlama öz-niteliklerine göre dört ana başlık altında toplanabilirler:

  1. Salt Periyodik:  Bu tip uygulamalardaki her görev periyodik olarak yürütülür.  Görevler ile ilişkili kaynakların kullanım oranları dönemsel olarak değişmez. Uçuş kontrol denetleyicileri bu tip uygulamalara örnek gösterilebilir.
  2. Genellikle Periyodik:  Çoğu görev periyodik olarak yürütülürken, sistem, harici bazı olaylara da asenkron zamanlama ile  yanıt vermek durumundadır.   Örnek olarak modern havacılık ve süreç kontrol sistemleri gösterilebilir.
  3. Asenkron ve önceden kestirilebilen:  Çoğul-ortam, radar işaret işleme ve izleme gibi uygulamalarda çoğu görev periyodik değildir.   Görevlerin ardışık olarak yürütülmeleri arasındaki zamanlar farklılık gösterebilir,  ancak bunların sınırları vardır ve istatistiksel olarak bu farklılıklar önceden bilinmektedir.
  4. Asenkron ve önceden kestirilemeyen:  Asenkron olaylar ile uğraşmak zorunda olan uygulamalardır.   Akıllı gerçek zamanlı kontrol sistemleri, otonom araçlar bunlara güzel birer örnek teşkil eder.

Sayısal Kontrol Sistemleri

En basit ve en belirlenimci (deterministic) gerçek zamanlı sistemlerdir.  Aynı zamanda çok katı zamanlama isterleri vardır.   Genellikle sayısal kontrol sistemleri var olan analog kontrol sistemlerinin sayısallaştırılması prensibi ile elde edilirler.  Bu tip kontrol sistemlerine ‘Örneklenmiş Verili Sistem’ adı verilir. Bu tip sistemlere iyi bir örnek ‘PID Denetleyici’ dir.

Sekil1

Şekil 1 Sayısal Kontrol Referans Modeli

Şekil 1’de gösterilen sayısal kontrol sistemine ait yazılımın sözde programı:

- Zamanlayıcı kesmesini T dönemine ayarla

- Her kesmede

- Analog sayısal dönüşümünü yap ve Y değerini hesap et

- Kontrol çıkışı olan U değerini hesap et

- U çıkışını analog olarak üret.

Yukarıdaki kontrol sisteminde örnekleme dönemi T’nin şeçimi hayati önem taşır.  Sayısal kontrol sisteminin teorik olarak analog kontrol sistemi gibi davranmasını arzu edildiği için T’nin değeri yeterince küçük seçilmelidir. Ancak T değeri küçüldükçe daha sık hesaplama dolayısı ile işlem gücü ihtiyacı ortaya çıkar. T örnekleme döneminin değeri belirlenirken iki ana etken hesaba katılır:

  1. Sistemin algılama duyarlılığı: Sisteme girişi genellikle bir operatör tarafından verilir. Herhangi bir t anındaki sistemin girişi t+T anında örneklenir. Bu durumda sistemin yanıtında bir gecikme olacağı açıktır. Bu yanıt gecikmesinin tolerans sınırları içerisinde kalmasına sağlayacak kadar, T dönemi büyük bir değerde seçilebilir. Genellikle insan operatörler saniyenin onda biri kadar zamandan büyük gecikmeleri algılayabildikleri için T döneminin değeri bu sınırın üstünde seçilmez.

  2. Kontrol edilen sistemin dinamik davranış modeli: Kontrol edilen sistemin referans girişini en az salınım ile izlemesi istenir. Çıkış değerinin giriş değerini takip etmeye çalışırken yaptığı salınımlar bazen kontrol edilen sistemi kararsız bir duruma getirerek tamamen kontrol dışı kalmasına neden olabilir. Sistemin birim basamak girişe verdiği yanıt olan yükselme zamanına T döneminin oranlanması ile sistemin girişi izleme kabiliyetini ölçebiliriz. Genel kabul görmüş pratik bir çıkarıma göre; yükselme zamanı boyunca 10 ila 20 arasında örnek alınması idealdir. Nyquist teoremine göre de, herhangi bir analog işaretin bant genişliğinin 2 katından büyük örnekleme frekanslarında sayısallaştırılması sonucunda tekrar elde edilebilmesi mümkündür. Bu durumda örnekleme döneminin en büyük değerini kısıtlayan etkenlerden birisi de Nyquist oranıdır.

Birden fazla parametrenin kontrol edilmeye çalışıldığı sistemlerde birden fazla algılayıcı ve eyleyici söz konusudur. Bu tip sistemlerde örnekleme frekansı sistemdeki en yüksek frekans göz önüne alınarak seçilir. Tek örnekleme frekansı basit bir yapıda olmasına rağmen gereksiz işlemci gücü gerektirir. Birden fazla örnekleme döneminin kullanılması durumunda ise uzun dönemin kısa dönemin bir harmoniği olmasına dikkat edilir.

PID denetleyici basit mekanizmasını, algılayıcıların durum değişkenlerinin değerlerini doğru olarak ölçtüğü varsayımına borçludur. Gürültülü ortamlarda bu varsayım geçerliliğini yitirir. Ayrıca algılayıcılar çoğu zaman durum değişkenleri yerine düzeneğin ölçülebilen bir büyüklüğünün değerini elde ederler. Durum değişkenlerinin değerini hesap etmek için bir takım hesaplamalar yapmak gerekebilir. Düzeneğin tüm parametrelerinin bilinmediği durumlarda kestirim modellerini kullanmak söz konusudur. Bu amaçla Tembel Kontrol Tekniği ve Kalman Filtrelerinden yararlanılabilir.  Kontrol teknikleri bu raporun konusu dışında olduğu için daha fazla söz edilmeyecektir.

Yüksek Seviyeli Kontrol Sistemleri

Kontrol edilecek fiziksel düzeneğin denetimi hiyerarşik bir yapı içinde birden fazla denetleyici tarafından kontrol edilir. Bu tip kontrol sistemlerinde Hiyerarşik yapıda üstte bulunan her bir denetleyicinin çıkışı diğerleri için giriş olarak kabul edilir. Hasta gözetim sistemi bu tip sistemlere örnek teşkil eder. Kan basıncını, soluk alış verişini, kandaki şeker oranını kontrol eden denetleyiciler ile üst seviyede doktor, hemşire ile olan etkileşimi yürüten bir uzman sistem bulunur. Alt seviyedeki denetleyiciler ms’ler mertebesinde hesap yaparken üst sevideki denetim hesaplamaları dakikalar, saatler mertebesinde olabilir.

Güdüm ve denetim sistemleri de karmaşık denetim sistemlerine örnek teşkil eder. Denetleyicilerden birisi fiziksel düzeneğin dinamik davranışları ile meşgul olurken, diğerleri güdüm ve yol planlaması işlevlerini yerine getirirler. Uçuş kontrol, balistik hesap, radar, silah denetim sistemleri benzeri sistemlerin ihtiyaç duydukları işlem gücü çok yüksek olabileceği gibi uygulamanın ihtiyacına göre de değişiklik gösterebilir. Örneğin bir jet uçağının yolunu 100 feet hassasiyet ile bulabilmesi için 20 hz frekansında pozisyonunun güncellemesi gerekirken, daha yavaş uçaklar için bu frekans 10 hz olabilir.

Sekil2

Şekil 2 Hava Trafik Uçuş Kontrol Hiyerarşi


Komuta kontrol sistemleri hiyerarşinin en tepesinde yer alan denetleyicilerdir.  Hava trafik kontrol sistemi bunun en güzel örneğidir. Şekil 3’de hava trafik kontrol mimarisi blok gösterimi verilmiştir.

İşaret İşleme

Çoğu işaret işleme sisteminin birkaç milisaniyeden birkaç saniyeye kadar olan zamanlama isterleri söz konusudur. Sayısal filtreler, imge ve ses sıkıştırma ve radar işareti işleme bu sistemlere örnek teşkil eder. Bu tip sistemlerde genellikle aşağıdaki hesaplama yapısı söz konusudur:

Formula1

Denklem 1

Ağırlıkların sabit olduğu durumda bu tip bir algoritmanın karmaşıklığı O(n) ile gösterilir ve gerçek zamanlı uygulamanın yapısına bağlı olarak saniyedeki işlem sayısını hesaplamakta kullanılır. Algoritma karmaşası bu tip gerçek zamanlı sistemlerin tasarımında önemli bir parametredir.

Sekil3

Şekil 3 Hava Trafik Kontrol Sistemi Mimarisi


Diğer Gerçek Zamanlı Uygulamalar

Bazı veri tabanı ve çoğul ortam uygulamaları da gerçek zaman isterlerine sahiptir. Bir veri tabanı imge nesneleri olarak adlandırılan gerçek dünya nesnelerini temsil eden veri nesnelerini saklar. İmge nesnenin öznitelikleri temsil edilen nesneninki ile aynıdır. Örneğin bir hava trafik kontrol sisteminin veri tabanında kapsama alanındaki uçaklar saklanır. Bu uçaklara ait öznitelikler ise uçağın konum, hız ve doğrultu bilgileri olabilir. Bu öznitelikler tümleşik olarak çalışan radar sisteminden alınan ölçümlere göre dönemli olarak güncellenir. Bu güncelleme olmadığı takdirde saklanan verile an ve an gerçek değerlerden oldukça uzaklaşacaktır. Bu sebeple gerçek zamanlı veri ölümlü olarak nitelendirilebilir.

Gerçek zamanlı veri tabanı sistemlerinde sık kullanılan önemli bazı kavramlar vardır;

Yaş: Bir imge nesnesinin her hangi bir andaki yaşı en son güncellendiği andan itibaren geçen süre olarak tanımlanır.

Mutlak zamansal tutarlılık: Veri nesnelerinin bir kümesinin mutlak zamansal tutarlı olması için kümedeki verilerin en büyük olanının yaşı önceden saptanmış bir eşik değerinin altında olması gerekir.

Tablo 1 Gerçek Zamanlı Örnek Veri Tabanı Tipik Değerleri

Uygulamalar Boyut

Ort. Yanıt Süresi

En uzun yanıt süresi

Mutlak Tutarlılık

Bağıl Tutarlılık

Kalıcılık

Hava trafik k. 20000 0.50 ms 5.00 ms 3 sn 6 sn 12 saat
Uçak k. 3000 0.05 ms 1.00 ms 0.05 sn 0.20 sn 4 saat
Uzay mekiği k. 5000 0.05 ms 1.00 ms 0.20 sn 1 sn 25 yıl
Süreç kontrol 0.80 ms 5 sn 1 sn 2 sn 24 saat

Zaman Göreceli Tutarlılık: Veri nesnelerinin bir kümesinin zamana göreceli tutarlı olabilmesi için nesnelerin yaşları arasındaki farkın uygulamaya özel belirlenmiş eşik değerinden küçük olması gerekir. Bir otobana giren ve çıkan araçlara göre trafik yoğunluğunun saptandığını düşünün. Burada veri kümesinin bağıl tutarlılığı söz konusu olmaz ise trafik arap saçına dönebilir.

Gerçek zamanlı sistemler üzerine kitabi bilgilerin devamı gelecek…

Biz mühendisler kendimizi farklı ünvanlar ile tanımlamaktan hoşlanırız. Kendimize yakıştırdığımız bu ünvanlar muhatablarımıza uzmanlık alanımızı anlatmanın en kestirme yoludur. İlginç bir şekilde farklı çalışma sektörlerinde kullanılan aynı ünvanlar çok farklı alanlara işaret edebilmektedir. Örnek vermek gerekirse bir ‘Sistem Mühendisi’ savunma sektörü için yazılım ve donanım hakimiyeti olan ilgili mühendislik süreçlerinde bilgili, geliştirilecek projenin ana konusunda yeterince alan bilgisi ve deneyime sahip mühendis tiplemesini betimlemektedir. Bu sektörde geliştirilen projelerin büyüklükleri ve karmaşık yapıları da göz önüne alındığında, sistem mühendisleri geliştirilen projelerin beyin takımlarını oluşturur demek yerinde bir benzetmedir. Öte yandan bilişim alanında bu başlık altında yayınlanan iş ilanlarına şöyle bir göz atıldığında, genellikle bir bilişim firmasının paket programlarının kurulumu, konfigürasyonu ve idamesi hakkında yeterince bilgiye sahip göreceli olarak meslek hayatının başlarında olan mühendisler arandığı görülecektir.

Gömülü sistemler söz konusu olduğunda da durum benzerdir. Farklı sektörlerde farklı ilgi alanlarında çalışan mühendislerin gömülü sistemlerden anladıkları da ilgi alanları ile sınırlıdır. Şüphesiz ki bu satırların yazarının da gömülü sistemlere bakışı kendi perspektifinin çok da ötesinde değildir. Bu bağlamda konuların detaylarına girmeden önce sisteme hangi pencereden baktığımızı da belirlemekte fayda vardır. Yüksek performanslı gömülü sistem denildiğinde çoğu yazılım mühendisi gibi benim de aklımdan ilk geçenler PowerPc tabanlı bir tek kart bilgisayar ve üzerinde koşan vxWorks işletim sistemi olmaktadır. Sayısal tasarım mühendislerinin gözünde ilk canlanan görüntü ise muhtemelen FPGA (Field Processor Gate Array) tabanlı bir elektronik kart olacaktır. Yukarıdaki önerme gömülü sistemlerin neresinde olduğunuzun kaba bir testidir.

Ancak yukarıdaki önerme yazılım mühendisleri arasındaki yerinizi tam olarak belirlemez. Gömülü sistemler üzerine uygulama geliştirmek ile gömülü sistemi uygulama geliştirmeye hazır hale getirmek birbirinden oldukça farklı işlerdir. Uygulama geliştirirken mümkün olduğunca kullanılan sistemin donanım ve sistem yazılım alt yapısından bağımsız olarak tasarım yapılır. Uygulamaların donanım ve işletim sistemine bağlı olan kısımları ise ara-yüzler ile uygulamanın ana gövdesinden ayrılır. Geliştirilen uygulamanın ileride farklı bilgisayar ya da işletim sistemi ortamlarına taşınması ihtiyacı durumlarında, ara-yüzlerin arkasında kalan kısımlar yeni ortam için tekrar kodlanırlar. Bu sayede uygulamaların ana gövdesine dokunulmadan birçok farklı bilgisayar sistemine uyarlanmaları kolaylıkla mümkündür. Özellikle ürün bazli geliştirmeye odaklanmış sektörlerde uygulamaların taşınabilirliği ve tekrar kullanılabilirliği hayati konulardır. Bu konular hakkında söylenebilecek çok şey vardır ancak bunları başka bir yazıda ele almak daha yerinde olacaktır. Kısaca özetlemek gerekirse; uygulama yazılımının hedeflendiği gömülü bilgisayarın donanım alt yapısına ve işletim sistemine mutlak anlamda hakim olmak gerekmeyebilir. Öte yandan, aynı gömülü bilgisayar alt yapısı üzerinde uygulamaların çalıştırılabileceği bir işletim sistemini koşmaya hazır hale getirmek ise, tam bir donanım ve işletim sistemi hakimiyeti gerektir. Kanımca yazılım mühendisi ile gömülü yazılım mühendisi arasındaki en belirgin fark budur.

Peki siz bu işin neresindesiniz ?

Motivasyonum

6 yorum

Savunma sektörü projelerinin bir çoğunun teknik altyapısında ileri teknoloji tek kart bilgisayarlar ve bunların üzerinde koşan gerçek zamanlı işletim sistemlerinden faydalanılmaktadır. Bu alt yapı teknolojilerini geliştirmek ya da bu teknolojileri projelerde verimli şekilde kullanabilmek ciddi anlamda teori destekli pratik deneyimi gerektirir. Günümüz Internet dünyasında bir çok konuda bilgiye hızlıca ulaşmak mümkündür. Ancak organize edilmiş ve içinde pratik uygulama detayları bulanan bilgiye ulaşmak ise çoğu zaman pek de kolay olmamaktadır.   Türkçe hazırlanmış web sayfaları bulmak ise daha da zordur.  Bu günlüğe bir şeyler karalamaktaki  motivasyon kaynağım da tam olarak budur.