Merhaba sevgili e-bergi okuyucuları kısa bir aranın ardından bu ayki yazımda gerçek zamanlı işletim sistemlerini anlatmaya çalışacağım. Sizlere, gerçek zamanlı işletim sistemlerinin (GZİS) nasıl dizayn edildiklerinden, nasıl ve nerelerde kullanıldıklarından, programlar arası zaman ve hafıza paylaşımını nasıl yaptıklarından bahsetmeye çalışacağım.

Gerçek zamanlı işletim sistemleri adından da anlaşılabileceği gibi temelde işletim sistemleridir. Normalde, günlük hayatta, kullandığımız işletim sistemlerinden farklı olarak bu sistemlerin üzerinde çalışan programlar “gerçek zamanlı”dır. Yani çalışan uygulamaların belirli bir süre içerisinde görevini bitirmesi gerekmektedir. Gerçek zamanlı işletim sistemi, onun üzerinde uygulama yazan programcılara, uygulamaların birbirlerine göre olan öncelikleriyle ilgili daha fazla kontrol hakimiyeti sağlar. Hatta bazen sistemin kendi uygulamalarının üzerinde bir öncelik bile tanımlanabilir. Bu durumda GZİS'lerin en önemli özelliklerinden biri, bir uygulamanın verdiği görevi bitirene kadar geçen sürede oldukça tutarlı olmalarıdır. Bu noktada asıl amacın en yüksek işlem hacmi değil de verilen görevleri belirli süreler içinde yapmak olduğu açıktır. GZİS'lerin yaptıkları görevler arasında zaman planlamasını yapan algoritmaları doğal olarak oldukça gelişmiştir. Ancak yine uymaları gereken zaman sınırlamaları yüzünden bu algoritmayı uygulamak için bile çok az zaman harcamaları gerekmektedir. GZİS'lerdeki en önemli avantaj, kesintilerdeki gecikmeyi ve çalışan uygulamayı değiştirmesinden kaynaklanan gecikmeyi asgariye indirmektir.

Gerçek zamanlı işletim sistemleri dizayn edilirken 2 temel zaman planlama stratejisi vardır. 1.si olay güdümlüdür, 2.si ise zamanı paylaşmaya yöneliktir. 1. yöntemde o an uygulanan görev ancak daha yüksek önceliğe sahip olan bir görevin işlenmesi gerektiğinde işletimden alınır. 2.sinde ise işlenmesi gereken görevler belirli zaman aralıklarıyla aynı sırayla sürekli olarak işleme konur. Hemen anlaşılacaktır ki 2. yöntemde bazen gereksiz görev değişimleri gerçekleşiyor olabilir ancak; bu kullanıcılara daha fazla cevap dönmeyi sağlar ve dolayısıyla sanki sistem sürekli onlar için çalışıyormuşçasına bir illuzyon yaratır. Eski işlemcilerde görev değişimi için çok fazla zaman gerektiğinden dolayı, eski işletim sistemlerinde görev değişimi sayısını olabildiğince düşük sayıda tutmaya çalışıyorlardı. Görevlerin zamanlamasını yapmak GZİS'lerin en kritik işlerinden biri olduğu için her ne kadar 2 temel yöntem olsa da bir çok farklı çeşitte algoritma mevcuttur. Bunlardan en basit ve geçerli olan algoritmalardan biri ise en yakın zamanda bitmesi gereken görevi ilk önce bitirmeye çalışan algoritmadır. Bu aslında oldukça güçlü bir yöntem, hatta muhtemelen deterministik bir ortamda bundan daha iyi bir algoritmanın olamayacağı ispatlanabilir. Ancak bu yöntem her zaman işe yaramayabilir. Örneğin, bazen en yakın bitirme zamanı uzak ise ve bitirilmesi gereken görev uzun bir görev ise arkasına çok kısa işler sıkışabilir. Tabi ki, yine de görevleri istenilen zamanda bitirebilir ancak; genelde işlem kısaysa bir an önce işlenip bekleyenler listesinden çıkartılması tercih edilmektedir.

Tipik bir dizaynda bir görevin üç durumu vardır. Çalışır halde, çalışmaya hazır halde veya engellenmiş halde. Genelde bazı operasyonlarını tamamlamaya çalışan görevler engellenirler. Görevini bitirmek için engellenmesi ilk bakışta çok saçma gibi dursa da aslında kastedilen operasyonlar genelde dışarıdan bir veri alma gibi işlemciye göre çok yavaş mekanizmalardan cevap beklenmesidir. Bu durumda işlemci gereksiz beklemek yerine diğer görevleri biraz daha işleyip gereken süre geçtiğinde önceki göreve geri dönmeyi tercih eder. Engelleri kalkan görevler çalışmaya hazır hale gelir ve işletim sisteminin hazır görevler listesine eklenir. Gerek öncelik olsun, gerek sadece listeye yerleştirildikleri sıralama olsun, belirlenen görev zaman planlaması algoritmasına göre belirli zamanlarla o an çalışan görev ya da işlemci çok çekirdekliyse görevler durdurulur ve listeden yeni bir görev çalıştırılmak üzere listeden ayrılır. Aynı anda tek bir işlemcide çalışan tek bir görev vardır. Genelde hazır görevler listesinin veri yapısı zamanlana algoritmasının kritik bölge olarak adlandırılan kod bölgesinde en kötü durumda geçireceği toplam süreyi en kısa tutmaya yöneliktir ancak bunun dışında da birçok etken vardır. Eğer hazırlar listesinin eleman sayısı çok düşükse, genelde bu listenin yapısı çift bağlı liste olduğunda neredeyse optimaldir. Eğer listede genelde az eleman olmasına rağmen bazen de çok eleman olabiliyorsa, listeyi önem sırasına göre sıralamak tercih edilir. Bu sayede en önemli görevi bulmak için bütün listeyi gezmek gerekmez, direk ilk elemana ulaşmak yeterli olur. Bu durumda listeye yeni bir görev eklemek için ya listenin sonuna kadar ya da daha düşük öneme sahip bir görev bulunana kadar arama devam edilir. Tabi bu da ekleme süresini beklenmedik şekilde arttırabileceği için buradaki zamanlama algoritmasına ayrılan süreyi kısaltmak için işlemi küçük parçalara bölmek gibi bazı ilave önlemler alınabilir. Yeni bir görevi sıraya ekleyip sonra en yüksek önemdeki görevi çalışır duruma getirmek için gereken süreye “kritik cevap zamanı” denir. İyi dizayn edilmiş bir GZİS'te yeni bir görevi hazırlar listesine eklemek listedeki her eleman için 3 ila 20 komut gerektirirken, en yüksek önemdeki görevi çalışır duruma getirmek 5 ila 30 komut gerektirmektedir. Daha gelişmiş sistemlerde ise, gerçek zamanlı görevler kaynaklarını gerçek zamanlı olmayan görevlerle paylaşabilir ve hazır listesinde bulunan görevlerin sayısı çeşitli büyüklüklerde olabilir. Bu tip sistemlerde hazırlar listesini bağlı liste olarak yazmak oldukça verimsiz olacaktır. Bu sistemlerde listenin yazılma şekli sistemin kendi özelliklerine göre değişkenlik gösterebilir.

GZİS'lerde zamanlama planı için kullanılan bazı algoritmalar:

  • İşbirlikçi zamanlama planı
  • Sonlandırılabilir zamanlama planı
  • Eşit zaman parçalamalı planlama
  • Sabit öncelikli sonlandırılabilir zamanlama planı
  • Sabit öncelikli gecikmeli sonlandırılabilir zamanlama planı
  • Sabit öncelikli sonlandırılamaz zamanlama planı
  • Sonlandırılabilir kritik bölge zamanlama planı
  • Durağan zamanlama planı
  • En kısa zaman sınır öncelikli planlama
  • Olasılık tabanlı gelişmiş zamanlama planı

Hafızadan yer alma ve hafızayı paylaşma uygulamaları diğer işletim sistemlerine göre GZİS'lerde daha fazla dikkat edilmesi gereken konulardır. Öncelikle yer alma hızı oldukça önemlidir. Standart bir hafıza alma düzeni uygun bir boş hafıza bölgesi bulabilmek için, uzunluğu belli olmayan bağlı bir listeyi tarar ancak bu GZİS'lerde kabul edilebilir bir yöntem değildir. Çünkü GZİS'lerde hafızadan yer alma belirli bir zaman içerisinde gerçekleşmelidir. Basit bir belirli büyüklükte hafıza bloğu alma algoritması gömülü sistemlerdeki GZİS'ler için oldukça başarılı bir çözümdür. Bu yöntem, verilerin işletim sistemi tarafından daha hızlı işlenebilmesi ve sonuçlandırılabilmesi açısından oldukça etkilidir.

GZİS'lerin kullanım alanlarına bakacak olursak gömülü sistemler karşımıza çıkacaktır. Bilinen en yaygın GZİS'ler QNX, RTLinux, VxWorks ve Windows CE'dir. GZİS'lerin üzerlerinde gerçek zamanlı görevlerin çalıştırıldığını düşündüğümüzde, örnek olarak uçaklardaki kritik zamanlamalarla yapılması gereken hesapların, bu işletim sistemleriyle gerçekleştiğini görürüz. Başka bir örnek olarak ise çeşitli tıbbi elektronik cihazlar verilebilir. Aslında GZİS'in doğru çalışması yukarıdaki örneklerden de anlaşılabiliceği gibi hayati önem taşıyabilir. GZİS'lerin çalışması sırasında ortaya çıkan hatalardan en çok ses getireni ve en ünlüsü ise NASA'nın Mars'a yolladığı kaşif aracındaki zamanlama algoritmasında var olan bir yazılım hatasıdır. Bu problem yüzünden araç topladığı tüm veriyi kendisine reset atarak silmektedir ve bu ufak hata yüzünden, yapılan milyonlarca dolarlık yatırım boşa gitmiştir.

Başka bir sayıda, başka bir yazıda görüşmek üzere, kendinize iyi bakın, hoşçakalın.