# QNX
QNX, gömülü sistemler pazarına yönelik Unix benzeri, gerçek zamanlı işletim sistemidir.
QNX Software Systems tarafından geliştirilen QNX, 2010 yılında Kanadalı Research In Motion firması tarafından satın alındı. 


## Tanım.
Mikrokernel yapılı bir işletim sistemi olan QNX'in mantığı, işletim sistemi elemanlarının çoğunun küçük uygulamalar şeklinde çalıştırılmasıdır. Bu, daha geleneksel bir yapı olan ve işletim sisteminin tek parça olarak çalıştığı ve dev kısımlardan oluşan Monolitik çekirdek (kernel) içeren diğer işletim sistemlerinden çok farklıdır. QNX'in mikrokernel yapısı, sistem hâlâ çalışmakta iken, istenmeyen özelliklerin veya programların kapatılarak üzerlerinde düzenlemeler, geliştirmeler yapılmasına olanak sağlar. Geliştirilip sisteme eklenen örneğin yeni bir yazılım, eski yazılım sürümüyle paralel çalışarak yeni komutların kendine yönlendirilmesini sağlar ve eski sürümün kullanıldığı işlemler yavaş yavaş yeniye geçtikçe, eski sürüm sistemden kendini otomatik olarak koparır ve bunların hepsi sistem çalışıyorken meydana gelir.
QNX mikrokernel yapıda olduğundan dolayı epey küçüktür. Eski sürümleri bir floppy diske bile sığar.
QNX Neutrino (2001) birçok platforma uyarlanmıştır. Şu anda gömülü sistemler pazarındaki neredeyse tüm modern işlemciler üzerinde çalışabilir. Bunlardan bazıları x86 ailesi, MIPS, PowerPC, SH4 ve özellikle ARM, StrongARM ile XScale'dır.
12 Eylül 2007 itibarıyla QNX, ticari kullanım düşünmeyen kullanıcılar için lisans sunmaktadır.


## Tarihçe.
1980 yılında Waterloo Üniversitesi'nde standart bir işletim sistemleri dersi alan Dan Dodge ve Gordon Bell adlı iki öğrenci basit bir gerçek zamanlı işletim sistemi yarattılar. Bu tarz bir sistemin ticari olarak büyük bir ihtiyaç olduğunda hemfikir olarak Ontario, Kanada'da (Ottawa'nın batısında kalan yüksek teknoloji merkezi) Quantum Software Systems adlı şirketi kurdular. 1982 yılında ilk sürümü yayınlanan QNX, Intel 8088 işlemciler için çıktı.
QNX'in ilk genel kullanımı gömülü olmayan sistemlerde başladı. Ontario eğitim sisteminin kendi bilgisayar tasarımı Unisys ICON için işletim sistemi olarak seçildi. QNX, o zamanlar "büyük" projeler için kullanılıyordu çünkü 44k kerneli işlemcilere fazla geliyordu. Güvenilirliği ile dikkat çekerek endüstriyel alanda makine operasyonlarında kullanılmaya başlandı.
1980'lerin sonlarına doğru piyasanın POSIX modeline yöneldiğini gören Quantum, POSIX uyumunu alt seviyede daha iyi sağlayabilmek için kerneli baştan yazmaya karar verdi. Sonuç QNX 4 oldu. Bu arada Robin Burgener (o zaman QNX çalışanı) ile birlikte çalışan Patrick Hayden (stajyer) yeni bir pencereleme konsepti geliştirdi. Bu konsept daha sonra gömülü kullanıcı arayüzü Photon MicroGUI şeklinde geliştirildi. POSIX uyumu sayesinde, Unix ve BSD paketlerinden QNX'e geçiş çok daha kolay hale geldi.
1990'dan sonra QNX, tamamıyla yeni bir sürüm için çalışmalara başladı. Mikrokernel yapısını koruyarak SMP kabiliyetli ve bütün POSIX API'lerini destekleyen bir sistem oluşturulması hedeflendi. Sonuç 2001 yılında çıkan QNX Neutrino oldu. Neutrino kernelinin çıkmasıyla geliştirme araçlarına yoğunlaşan QNX, Eclipse Konsorsiyumu'nun kurucu üyesi oldu ve kısa zamanda Momentics adı altında eklentilerle donatılmış Eclipse geliştirme ortamını çıkardı.
QNX Software Systems tarafından geliştirilen QNX, 2010 yılında Kanadalı Research In Motion firması tarafından satın alındı.


## Teknoloji.
QNX kernelinde sadece işlemci zamanlaması, işlemler arası iletişim, kesme (interrupt) yönlendirme ve timerlar mevcuttur. Diğer her şey, işlem yaratmada ve kernelle beraber çalışarak bellek yönetiminde kullanılan proc adlı özel bir işlem dahil, kullanıcı işlemi olarak çalışır. Kernelde donanım sürücüleri bulunmaz. Ağ Stack'ı ise NetBSD kodunu taban almıştır. Üç çeşit sürücü desteklenmektedir: native, legacy io-net ve NetBSD'den aktarılan sürücüler.
QNX'de işlemler arası iletişim mantığı bir işlemden diğerine mesaj gönderip beklemekten oluşur. Bu MsgSend adı verilen bir işlemdir. Mesaj kernel tarafından gönderen işlemin adres alanından alıcı işlemin adres alanına kopyalanır. Eğer alıcı işlem mesaj için bekliyorsa işlemci kontrolü işlem zamanlayıcıdan geçmeden direkt aktarılır. Bir başka deyişle, bir mesaj gönderip cevap beklemek sıranın kaybedilmesi anlamına gelmez. Çoğu UNIX ve Linux işlemler arası iletişim mekanizmalarında bu düzen bulunmamaktadır.
Mikrokernel yapısı sayesinde QNX dağıtık bir yapıya sahiptir. Patenti Dan Dodge ve Peter van der Veen'de bulunan teknolojinin ticari adı Transparent Distributed Processing'dir.
Neutrino boot loader ile istenilen şekilde başlatılabilir. Şöyle ki, Intel x86 hedeflerinde istenildiği takdirde normal bir şekilde BIOS ile başlatılabilir. 500 KB ile 8 MB'a kadar değişebilen boyutlardaki kernel, istenildiği takdirde ise 100-500 ms gibi bir sürede devreye girebilen anında aktivasyon özelliğini bulundurmaktadır.
Güvenilirliğiyle ön plana çıkan QNX, bunu sistemi koruması ve hata toleransı sayesinde kazanmıştır. Sistemde bir uygulama veya sürücü çöktüğü anda HAM (High Availability Manager) devreye girerek sistem devre dışı kalmadan gerekli işlemleri tekrar aktive eder. HAM'ın kendisi de bir kullanıcı işlemi statüsünde olduğu için ikiziyle birlikte birbirlerini takip ederler.
RealFLEX SCADA sisteminin güvenilirliği konusunda sırtını dayadığı işletim sistemi QNX'tir. Sunucularında QNX Neutrino kullanan sistem, normalde kullanıcı bilgisayarında bilindiği gibi hata oranı yüksek Windows'u sunarken, güvenliğin ve sürekliliğin önemli olduğu durumlarda kullanıcı bilgisayarını da QNX Neutrino ile sunuyor.
QNX'de görsel öğeler kolay bir şekilde işlenebilmektedir. Kullanıcı arayüzü tasarımı, düşük kapasiteli sistemlerde Photon MicroGUI ile tut-çek kolaylığında sağlanırken, yer ve işlemci sıkıntısı daha az olan sistemlerde ise Adobe Flash teknolojileri kullanılabilir. Kullanıcı arayüzlerinde Flash kullanılması, görsel öğelerin çok daha güzel olmasını ve kolay bir şekilde entegre edilebilmesini sağlıyor.
QNX Neutrino Simetrik multiprocessing'i destekler. Bunun yanında QNX, çoklu işlemciye sahip sistemlerde legacy kodu kullanmak mecburiyetinde bulunanlar için BMP (Bound Multiprocessing) ile belli işlemleri belli işlemcilere bağlama özelliğine sahiptir. BMP, çoklu işlemcilerde cache ısınmasını engeller ve SMP uyumlu olmayabilecek uygulamaların sorunsuz bir şekilde aktarılmasını sağlar.
Neutrino içerisinde Adaptive Partitioning Scheduling (APS) adı verilen bir teknoloji bulunmaktadır. APS yoğun yükte her işlemin belirlenen miktarda işlemci gücü alabilmesini sağlar. Ancak normal durumlarda eğer bir işlem kendi hakkını tam kullanmıyorsa, kalan işlemci gücü diğer işlemlere dağıtılır. Ayrıca, bazı kritik threadler yoğun yükte bile gerçek zamanlı olarak çalıştırılacak şekilde ayarlanabilir.


## Kullanım alanları.
Gerçek zamanlı bir kernele (çekirdek) sahip olan QNX, günümüzde otomotiv sektöründe kullanılan en yaygın işletim sistemidir. QNX CAR platformu; Audi, BMW, Cadillac, Chevrolet, Chrysler, Dodge, Fiat, Ford, Honda, Hyundai, Jaguar, Land Rover, Mazda, Mercedes, Mitsubishi, Nissan, Toyota ve Volkswagen gibi üreticilerin de aralarında olduğu pek çok markanın arabalarında kullanılmaktadır.
Bir QNX türevi olan BlackBerry Tablet OS ve BlackBerry 10 geçmişte BlackBerry tablet ve telefonlarda kullanılmıştır.


## Topluluk.
Linux tarzı bir kullanıcı desteği ve katkısına ulaşabilmek ve QNX kullanan herkese birçok kolaylık sağlaması için Foundry27 adlı QNX topluluk sitesi kurulmuştur. Bu site aracılığıyla kullanıcılar, QNX ile ilgili problemlerini paylaşabilir ve hem diğer kullanıcılardan hem de QNX yetkililerinden yardım alabilirler. Bunun yanında kullanıcıların ve QNX yetkililerin ortaklaşa yürüttüğü topluluk projeleri bulunmaktadır ve dilediğiniz takdirde bu projelere katılabilirsiniz.