Teknomerkez
TR EN ES
Konular
Proje Sayfaları
Görevciye Genel Bakış İsmail Sahillioğlu 25.11.2023

Görevci Tanıtım

Yazar: İsmail Sahillioğlu
Tarih: 24.11.2023
Türkçe


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.

  • MIT - Orijinal metin.
  • MIT-TR - Lisans metninin Türkçe sürümü.

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.

Görevciyi inceleyin veya edinin --> https://github.com/kozmotronik/Gorevci
İlgili yazılar
İsmail Sahillioğlu 25.11.2023