Görevci Tanıtım
Görevci tanıtımına hoş geldiniz! Öncelikle zamanınız varsa, gelin önce biraz Görevciyi ve hikayesini tanıyalım…
Görevcimiz, küçük çaplı mikrodenetleyiciler için geliştirilen gömülü projelerin kurtarıcısı! Görevci, uygulama yazdığım görece küçük 8-bit PIC mikrodenetleyiciler için eksikliğini hissettiğim çoklu görev yönetimi arayış ve ihtiyacından doğmuş bir projedir.
Yalnızca tek bir 8-bitlik mikrodenetleyicinin, aygıtın bellek kaynakları yettiği kadar, tek bir CPU ile akıcı bir biçimde onlarca görevin üstesinden gelmesi ne kadar iyi olurdu değil mi? Diğer bir deyişle mümkün olan en az kaynakla, mümkün olduğunca çok iş. Malesef bu, konvansiyonel bir programlama yöntemi olan super-loop yani tek bir sonsuz while döngüsü üzerine yazılan uygulamalarla zor yapılacak bir iş. Ayrıca bu tip uygulamaların takibi ve test edilmesi de zor.
İşte Görevci tam olarak bunun için tasarlandı. Derli toplu bir kodlama yapısını kaybetmeden, CPU’yu busy-waiting ile bloklamadan, işini yap bekleme yapma mantığı üzerine kurulu bir görev yönetimi yaparak, görevlerin CPU’yu bloklamadan herhangi bir olayı beklemesini veya zaman gecikmesi yapmasını sağlar.
Lisans Bilgisi
Görevci MIT lisansı ile sunulmaktadır. Lütfen lisans metnini dikkatlice okuyun ancak lisansa çok takılmayın. Bu lisansın kısa özeti şöyle:
Burada sağlanan ürünü arzuladığınız gibi kullanın. Ancak sağlanan ürün için hiçbir teminat verilmemekle birlikte, kullanımdan doğacak hiçbir sorumluluk da kabul edilmemektedir.
Bu lisans geliştiricinin telif haklarını korurken, hiçbir teminat olmaksızın sağlanan ürünün kullanımından doğacak hiçbir şey için geliştiricinin hiçbir şekilde sorumlu tutulamayacağını beyan eder.
Tam lisan metinlerine aşağıdan ulaşabilirsiniz.
Nasıl, cazip geldi mi? if yanıtınız == evet okumayı sürdürerek Görevciyi keşfetmeye devam edin…
Görevci Nedir
Görevci, basit yöntemlerle görev yönetimi yapmak için tasarlanmış bir çoklu
görev (multi-tasking) uygulamasıdır. Protothreads projesinden esinlenerek
yeniden yazılmıştır. API’ler Türkçeleştirilmiştir ve ayrıca Protohreads
projesinde bulunmayan grvOlustur() ve grvGECIK_MS() gibi API’ler de
geliştirilip mümkün olduğunca soyutlanıp bir katman haline getirilmeye
çalışılmıştır.
Görevler için ayrı ayrı görev yığınları (thread stack) kullanılmadığı için
küçük gömülü sistemlerde bile çalışacak kadar hafiftir. Ortalama bir RTOS
(Real Time Operating System) sisteminde herbir thread/task için 64 ve/veya
üzeri byte miktarında thread stack kullanılır. Herbir thread için bu kadar
bellek kullanmanın yalnızca 256 byte RAM’e sahip bir aygıt için ne kadar
maliyetli olacağı açıktır ki; RTOS sistemler bu yüzden böyle küçük aygıtlarda
çalışamazlar.
Görevci üzerinde çalışacağı donanımın büyüklüğüne göre iki farklı kipte kullanılabilecek şekilde tasarlanmıştır:
- Hafif kip
- Normal kip
Bellek bakımından çok kısıtlı; örneğin 2 KByte veya altı ROM ve 256 Byte veya
altı RAM’e sahip aygıtlar için Hafif kip idealdir.
Bu değerlerin üstünde donanım kaynaklarına sahip aygıtlarda Normal kip
kullanılabilir. Elbette uygulamanın büyüklüğüne göre doğru ölçekte bir aygıtı
seçmek tasarımcının sorumluluğundadır.
Kip, projeye eklenecek gorevciypl.h adında bir başlık dosyası içerisinde
grvCALISMA_KIPI tanımlanarak seçilir. grvCALISMA_KIPI 0 olarak
tanımlanırsa Görevci Hafif kipte, 1 olarak tanımlanırsa Normal kipte
yapılandırılacaktır. Kip olarak Hafif kip kullanıldığı durumda programcı,
main döngüsü içinde görev yönetimini kendisi yapar. Her iki kipin kullanımı
port demolarında örneklendirilmektedir.
Bununla birlikte Görevcinin çalışması için de gerekli minimum bellek gereksinimleri vardır. Ancak bu gereksinimler üst düzey RTOS’larla k ıyaslandığında birçok küçük ölçekli aygıt için oldukça kabul edilebilirdir. Görevci her bir Görev Kontrol Bloğu için Hafif kipte 1 word, Normal kipte 2 word RAM kullanımı gerektirir. Gereksinimlerle ilgili ayrıntılı bilgi için Minimum Sistem Gereksinimleri bölümüne bakınız.
Görevci Ne Değildir
Görevci bir işletim sistemi değildir. İşletim sistemleri daha gelişmiş
özelliklere sahiptir. Gömülü sistemlerin çoğunda genelde
Real Time Operating System (RTOS) denen,
Gerçek Zamanlı İşletim Sistem’leri kullanılır.
Örneğin FreeRTOS popüler ve açık kaynaklı bir gerçek zamanlı işletim
sistemidir. İşlevsellik ve zaman kısıtı (time constraint) açısından çok daha
gelişmiştir ki, Hard real-time ve Soft real-time uygulamalar
geliştirmek için kullanılabilir. FreeRTOS priority, cooperative,
preemptive, time slicing (round-robin) veya bunların
karışımı biçiminde farklı planlayıcı yapılandırmalarına sahiptir ve çoğunda
context-switching mekanizmasını kullanır.
Ancak elbette bu gelişmişliğin maliyeti daha fazla ROM, RAM ve CPU zamanı gibi
kaynak kullanımıdır.
Görevci ise daha çok bir Soft real-time niteliğinde olup küçük gömülü
sistemlerde görev organizasyonu için ihtiyaç duyulabilecek birçok işlevselliğe
sahip olmasına rağmen Hard real-time uygulamaların gereksinimlerini
karşılayamayabilir. Çünkü FreeRTOS’un sahip olduğu preemption ve
contex-switching mekanizmalarını içermez.
Görevci işlevselliklerine geliştirme sürecinde yenileri eklenebilir. Görevci
planlayıcısı şu an için yalnızca cooperative (iş birlikçi) planlama türünü
desteklemektedir. Cooperative planlamada görevler kontrolü kendi istekleriyle
teslim edene kadar çalışırlar.
Temel Özellikler
- Çok küçük miktarda RAM kullanır. Her bir Görev Kontrol Bloğu için Normal kipte 6 byte, Hafif kipte ise yalnızca 2 byte gerekir ve extra yığınlar (thread stack) kullanılmaz.
- Oldukça taşınabilir. Görevci çekirdeğinde donanıma özel hiçbir içermediğinden standart C destekleyen bütün derleyicilerde derlenebilir. Bunun yerine farklı mimari portları için her mimarinin kendi port dizininde o mimariye özel tanımlamalar ve kodlar yazılmıştır.
- İçerik-değiştirme (context-switching) ve planlayıcı (scheduler) mekanizmaları olmadan çalışmasına rağmen bloklayıcı bekleme mekanizmaları sağlar.
- Okunaklı, derli ve toplu bir program arayüzü sağlar.