RTLinux - RTLinux

RTLinux
Orijinal yazar(lar) Victor Yodaiken, Michael Barabanov
Geliştirici(ler) FSMLab'ler, Rüzgar Nehri Sistemleri
Yazılmış C
İşletim sistemi Linux
Uygun İngilizce
Tip Çekirdek
Lisans GPL2

RTLinux , tüm Linux işletim sistemini tamamen önleyici bir süreç olarak çalıştıran patentli bir sabit gerçek zamanlı gerçek zamanlı işletim sistemi (RTOS) mikro çekirdeğidir . Zor gerçek zamanlı özellik, RTLinux uygulamalarından robotları, veri toplama sistemlerini, üretim tesislerini ve diğer zamana duyarlı enstrümanları ve makineleri kontrol etmeyi mümkün kılar. Benzer isme rağmen, Linux Vakfı'nın Gerçek Zamanlı Linux projesi ile ilgili değildir .

RTLinux, Victor Yodaiken, Michael Barabanov, Cort Dougan ve diğerleri tarafından New Mexico Madencilik ve Teknoloji Enstitüsü'nde ve daha sonra FSMLabs'de ticari bir ürün olarak geliştirildi. Wind River Systems , FSMLabs gömülü teknolojisini Şubat 2007'de satın aldı ve Wind River Linux için Wind River Real-Time Core olarak bir sürümü kullanıma sundu . Ağustos 2011 itibariyle Wind River, Wind River Real-Time Core ürün serisini durdurdu ve RTLinux ürünü için ticari desteği etkin bir şekilde sonlandırdı.

Arka plan

RTLinux'un temel tasarım hedefi, her iki yeteneğe sahip karmaşık kontrol programlarının geliştirilmesini kolaylaştırmak için ticari bir işletim sistemine zor gerçek zamanlı yetenekler eklemekti. Örneğin, bir emtia veritabanı kullanan ve bir web operatörü arayüzünü dışa aktaran gerçek zamanlı bir motor kontrolörü geliştirmek isteyebilirsiniz. Gerçek zamanlı ve gerçek zamanlı olmayan yetenekleri destekleyebilecek tek bir işletim sistemi oluşturmaya çalışmak yerine, RTLinux bir bilgi işlem cihazını gerçek zamanlı ve gerçek zamanlı olmayan bir işletim sistemi arasında paylaşmak üzere tasarlanmıştır, böylece (1) gerçek zamanlı işletim sisteminin yürütülmesi gerçek zamanlı olmayan işletim sistemi tarafından asla engellenemez ve (2) iki farklı ortamda çalışan bileşenler kolayca veri paylaşabilir. Adından da anlaşılacağı gibi, RTLinux orijinal olarak Linux'u gerçek zamanlı olmayan sistem olarak kullanmak için tasarlandı, ancak sonunda RTCore gerçek zamanlı çekirdeğinin Linux veya BSD UNIX ile çalışabilmesi için gelişti .

Multi-Environment Real-Time (MERT), bir UNIX sistemi ile birlikte var olan gerçek zamanlı bir işletim sisteminin ilk örneğiydi. MERT, geleneksel sanallaştırma tekniklerine dayanıyordu: gerçek zamanlı çekirdek, ana işletim sistemi (veya hiper yönetici ) idi ve Bell Systems UNIX, konuktu . RTLinux, MERT konseptini PC çağına ve emtia donanımına güncelleme girişimiydi. Ayrıca, MERT'nin performans sınırlarının, özellikle de sanallaştırmanın getirdiği ek yükün üstesinden gelme girişimiydi.

Teknik yalnızca konuk kesme kontrolünü sanallaştırmak için kullanıldı. Bu yöntem, gerçek zamanlı çekirdeğin konuk işletim sistemini tamamen öncelikli ancak yine de örneğin depolama aygıtlarını doğrudan kontrol edebilen bir sisteme dönüştürmesine izin verdi. Özellikle konuk için standart sürücüler, sanallaştırma "kancalarını" kullanmak için yeniden derlenmeleri gerekmesine rağmen kaynak değişikliği olmadan çalıştı. Ayrıca bkz . paravirtualization . UNIX "boru", gerçek zamanlı ve gerçek zamanlı olmayan programların iletişim kurmasına izin verecek şekilde uyarlandı, ancak paylaşılan bellek gibi başka yöntemler de eklendi.

Programcının bakış açısından, RTLinux başlangıçta gerçek zamanlı görevler için küçük bir iş parçacığı ortamına ve diğer her şey için standart Linux ortamına benziyordu. Gerçek zamanlı işletim sistemi, konuk kesme kontrolünü sanallaştırarak başlayan ve ardından gerçek zamanlı bir zamanlayıcı başlatan yüklenebilir bir çekirdek modülü olarak uygulandı . Görevlere statik öncelikler verildi ve zamanlama başlangıçta tamamen öncelik odaklıydı. Konuk işletim sistemi, en düşük öncelikli görev olarak dahil edildi ve esasen gerçek zamanlı sistem için boş görev olarak hareket etti. Gerçek zamanlı görevler çekirdek modunda çalıştırıldı. RTLinux'un sonraki gelişimi, POSIX iş parçacıkları uygulama programlama arabirimini ( API ) benimsedi ve ardından konuk süreçlerinde çalışan gerçek zamanlı iş parçacıklarıyla kullanıcı modunda iş parçacıklarının oluşturulmasına izin verdi. Çok işlemcili ortamlarda, iş parçacıkları işlemci çekirdeklerine kilitlendi ve konuk iş parçacığının belirlenen çekirdek üzerinde çalışmasını önlemek mümkündü (çekirdekleri yalnızca gerçek zamanlı işleme için etkin bir şekilde ayırmak).

uygulama

RTLinux, standart Linux ile aynı makinede özel gerçek zamanlı görevler ve kesme işleyicileri çalıştırma yeteneği sağlar. Bu görevler ve işleyiciler, Linux ne yaparsa yapsın yürütmeleri gerektiğinde yürütülür. İşlemci tarafından bir donanım kesintisinin algılandığı an ile bir kesme işleyicisinin çalışmaya başladığı an arasındaki en kötü durum süresi, genel bir x86 üzerinde çalışan RTLinux'ta 15 mikrosaniyenin altındadır (yaklaşık 2000). Bir RTLinux periyodik görevi, aynı donanım üzerinde planlanan süresinin 35 mikrosaniyesi içinde çalışır. Bu süreler donanımla sınırlıdır ve donanım geliştikçe RTLinux da gelişecektir. Standart Linux, mükemmel bir ortalama performansa sahiptir ve hatta POSIX yumuşak gerçek zamanlı yeteneklerini kullanan görevler için milisaniye düzeyinde zamanlama hassasiyeti sağlayabilir. Ancak Standart Linux, milisaniyenin altında hassasiyet ve güvenilir zamanlama garantileri sağlamak için tasarlanmamıştır. RTLinux, Linux "misafirine" sanallaştırılmış bir kesme denetleyicisi ve zamanlayıcı verildiği ve diğer tüm donanım erişiminin doğrudan olduğu hafif bir sanal makineye dayanıyordu. Gerçek zamanlı "ana bilgisayar" açısından, Linux çekirdeği bir iş parçacığıdır. Deterministik işleme için gereken kesintiler gerçek zamanlı çekirdek tarafından işlenirken, diğer kesintiler gerçek zamanlı iş parçacıklarından daha düşük bir öncelikte çalışan Linux'a iletilir. Linux sürücüleri neredeyse tüm G/Ç'leri yönetti . İlk Giren İlk Çıkar boruları ( FIFO'lar ) veya paylaşılan bellek, işletim sistemi ile RTLinux arasında veri paylaşmak için kullanılabilir.

Amaç

RTLinux tasarım amacı, sistemin şeffaf, modüler ve genişletilebilir olmasıdır. Şeffaflık, açılamaz kara kutular olmadığı ve herhangi bir işlemin maliyetinin belirlenebilir olması gerektiği anlamına gelir. Modülerlik, işlevselliğin ihmal edilmesinin mümkün olduğu ve gerekli olmadığı takdirde bu işlevselliğin maliyetinin ortadan kalktığı anlamına gelir. Ve genişletilebilirlik, programcıların modüller ekleyebilmeleri ve sistemi gereksinimlerine göre uyarlamaları gerektiği anlamına gelir. Temel RTLinux sistemi, yüksek hızlı kesme işlemeyi destekler ve daha fazlasını desteklemez. Bazı özel uygulamaların ihtiyaçlarına daha uygun zamanlayıcılarla kolayca değiştirilebilen basit öncelik zamanlayıcıya sahiptir. RTLinux'u geliştirirken, Linux'a ve güçlü yeteneklerine sahip olmaktan elde ettiğimiz avantajı en üst düzeye çıkarmak için tasarlandı.

Temel bileşenler

RTLinux, küçük bir çekirdek bileşen ve bir dizi isteğe bağlı bileşen olarak yapılandırılmıştır. Çekirdek bileşen, Linux'un kendisi tarafından geciktirilemeyen veya engellenemeyen çok düşük gecikmeli kesme işleyicilerinin ve bazı düşük seviyeli senkronizasyon ve kesme kontrol rutinlerinin kurulumuna izin verir. Bu çekirdek bileşen, SMP'yi destekleyecek şekilde genişletildi ve aynı zamanda çekirdeğin dışında sağlanabilecek bazı işlevler kaldırılarak basitleştirildi.

işlevsellik

RTLinux işlevselliğinin çoğu, isteğe bağlı hizmetler ve soyutlama düzeyleri sağlayan yüklenebilir çekirdek modülleri koleksiyonundadır. Bu modüller şunları içerir:

  1. rtl sched - hem aşağıda açıklanan "lite POSIX" arabirimini hem de orijinal V1 RTLinux API'sini destekleyen bir öncelik zamanlayıcı.
  2. rtl time - işlemci saatlerini kontrol eder ve işleyicileri saatlere bağlamak için soyut bir arabirim verir.
  3. rtl posixio - aygıt sürücülerine POSIX stili okuma/yazma/açma arabirimini destekler.
  4. rtl fifo - RT görevlerini ve kesinti işleyicilerini bir aygıt katmanı aracılığıyla Linux süreçlerine bağlar, böylece Linux süreçleri RT bileşenlerini okuyabilir/yazabilir.
  5. semafor - Jerry Epplin tarafından sağlanan ve semaforları engelleyen RT görevleri veren bir paket.
  6. POSIX mutex desteğinin, RTLinux'un bir sonraki küçük sürüm güncellemesinde kullanıma sunulması planlanmaktadır.
  7. mbuff, Tomasz Motylewski tarafından RT bileşenleri ve Linux süreçleri arasında paylaşılan bellek sağlamak için yazılmış katkılı bir pakettir.

Gerçek zamanlı görevler

RTLinux gerçek zamanlı görevleri , Linux'un sürücüler, dosya sistemleri vb. için kullandığı modül türüne benzer çekirdek modülleri olarak uygulanır . Gerçek zamanlı görevler, donanıma doğrudan erişime sahiptir ve sanal bellek kullanmaz. Başlatma sırasında, bir gerçek zamanlı görev (modül), RTLinux çekirdeğini son tarih, dönem ve yayın zamanı kısıtlamaları hakkında bilgilendirir.

İş Parçacığı

RT-Linux, bir iş parçacığının manipülasyonu için bir POSIX API'si uygular. pthread_createİşlev çağrılarak bir iş parçacığı oluşturulur . pthread_createöğesinin üçüncü parametresi , iş parçacığı tarafından yürütülen kodu içeren bir işlevdir.

RTLinux'ta iş parçacığı önceliklerini ayarlamak gereklidir. Daha yüksek önceliklere sahip diziler, daha düşük önceliklere sahip dizileri önleyebilir. Örneğin, bir step motoru kontrol eden bir ipliğimiz olabilir. Motoru akıcı bir şekilde hareket ettirmek için bu ipliği kesinlikle düzenli aralıklarla başlatmak gerekir. Bu, bu konuya yüksek bir öncelik atayarak garanti edilebilir. Örnek threads2.c, farklı iş parçacığı önceliklerini belirler. İplik önceliği ayarı aşağıda gösterilen kodla yapılır:

int init_module(void)
{
pthread_attr_t attr;
struct sched_param param;
pthread_attr_init(&attr);
param.sched_priority = 1;
pthread_attr_setschedparam(&attr, &param);
pthread_create(&t1, &attr, &thread_code, "this is thread 1");
rtl_printf("Thread 1 started\n");
...
}

Programın çıktısı aşağıdaki gibidir.

Thread 1 started
Thread 2 started
Thread 3 started
Message: this is thread 1
Message: this is thread 2
Message: this is thread 2
Message: this is thread 2
Message: this is thread 1
Message: this is thread 1
Message: this is thread 3
Message: this is thread 3
Message: this is thread 3

2. iplik en yüksek önceliğe ve 3. iplik en düşük önceliğe sahiptir. İlk mesaj, iş parçacığı 2'den kısa bir süre önce başlatıldığı için orta öncelikli iş parçacığı 1 tarafından yazdırılır.

Ayrıca bakınız

Referanslar

Kaynaklar

Dış bağlantılar