نظام رودوس التشغيلي

**نظام رودوس**  هو نظام تشغيل في الوقت الفعلي للأنظمة المدمجة وتم تصميمه للتطبيقات التي تتطلب موثوقية عالية.

## التاريخ
تم تطوير **Rodos** في المركز الألماني للفضاء وله جذوره في نظام التشغيل **BOSS**. يتم استخدامه لبرنامج الأقمار الصناعية الدقيقة الحالي لمركز الفضاء الألماني. يعمل النظام على القمر الصناعي التشغيلي **TET-1** وسيتم استخدامه للقمر الصناعي **BiROS** المطوّر حالياً.

تم تعزيز رودوس وتوسيع نطاقه في المركز الألماني للفضاء وكذلك قسم تكنولوجيا المعلومات الفضائية في جامعة فورتسبورغ.

## المميزات
جانب مهم من Rodos هو الوسيطة المتكاملة في الوقت الحقيقي. يوفر تطوير برنامج التحكم والحمولة في الجزء العلوي من البرامج الوسيطة الحد الأقصى من الوحدات النمطية اليوم. يمكن تطوير التطبيقات / الوحدات بشكل مستقل ومن السهل جداً تبادل الوحدات فيما بعد دون القلق بشأن الآثار الجانبية، لأن كل الوحدات يتم تغليفها ككتل بناء (**BB**) ويمكن الوصول إليها ويمكنها الوصول إلى الموارد الأخرى فقط عن طريق واجهات محددة بشكل جيد.

تم تطبيق Rodos كإطار عمل برمجي في **++C** مع واجهة تطبيق موجهة للكائنات (**API**). يتم تنظيمها في طبقات:
* الطبقة الدنيا (**1**) هي المسؤولة عن التحكم في أجهزة النظام المدمجة (**HAL**: طبقة تجريد الأجهزة).
* الطبقة التالية (**2**) نواة: تدير الموارد المحلية والخيوط والوقت. على رأس النواة، لدينا الوسيطة
* (الطبقة **3**) التي تتيح التواصل بين BBs باستخدام بروتوكول البث المتعدد لمشترك الناشر. وعلى الجزء العلوي من البرنامج الوسيط، يمكن للمستخدم تنفيذ تطبيقاته
* (الطبقة **4**) كشبكة برامج موزعة تضم BBs بسيط. واجهة برمجة تطبيقات **Building Blocks** في الجزء العلوي من البرنامج الوسيط هي واجهة موجهة نحو الخدمة. تتفاعل BBs من خلال تقديم الخدمات إلى BBs الأخرى واستخدام الخدمات من BBs الأخرى.

كما ذكر من قبل، كان الغرض الأصلي من رودوس هو التحكم في الأقمار الصناعية. وقد تم تصميمه ليكون بمثابة عقول نظام **Avionic** ويقدم للمرة الأولى (2001) مفهوم **NetworkCentric**. تتكون آلة إلكترونيات الطيران الأساسية للشبكة المركزية من عدة مكونات متجانسة تعمل معاً لتنفيذ الحوسبة الموثوقة بطريقة بسيطة. في نظام NetworkCentric، لدينا شبكة برمجيات من BBs ومركبات ربط الشبكة (اتصالات لاسلكية) وأجهزة كمبيوتر داخل المركبات (الحافلات وروابط نقطة إلى نقطة)، وأجهزة ذكية (مرفقة بالحافلات)، وأجهزة بسيطة متصلة بأجهزة الكمبيوتر الأمامية. للتواصل مع (العقدة) الوحدات الخارجية، بما في ذلك الأجهزة ووحدات الحوسبة الأخرى، توفر كل عقدة بوابة إلى الشبكة وحول الأجهزة العديدة الموجودة في الشبكة (قد يتم ربط أجهزة **IO Devs** وعقد الحوسبة) بالنظام. تبادل الرسائل التي توفرها الوسيطة والبوابات غير متزامن، باستخدام بروتوكول الناشر-المشترك. لم يتم إنشاء مسارات اتصال ثابتة ويمكن إعادة تكوين النظام بسهولة في وقت التشغيل. على سبيل المثال، يمكن تشغيل عدة نسخ متماثلة من البرنامج نفسه في عقد مختلفة ونشر النتيجة باستخدام نفس الموضوع، دون معرفة بعضها البعض. يمكن للناخب الاشتراك في هذا الموضوع والتصويت على النتيجة الصحيحة. يمكن أن ينتقل التطبيق من عقدة إلى عقدة أو حتى إلى مركبات أخرى دون الحاجة إلى إعادة تكوين نظام الاتصالات. يوزع جوهر البرامج الوسيطة الرسائل محلياً فقط، ولكن باستخدام البوابات المدمجة إلى شبكة NetworkCentric، يمكن أن تصل الرسائل إلى أي عقدة وتطبيق في الشبكة. يشتمل الاتصال في النظام بأكمله على تطبيقات البرامج وعقد الحوسبة وحتى أجهزة الإدخال / الإخراج. يقوم الناشرون بنشر الرسائل في إطار موضوع معين. يحصل المشتركون (صفر، واحد أو أكثر) في موضوع معين على جميع الرسائل التي يتم نشرها تحت هذا الموضوع. كما ذكرنا من قبل، لا يوجد فرق في هذا الاتصال في أي عقدة (وحدة أو جهاز حوسبة) يعمل الناشر والمشتركون وما بعدها، فقد يكونون أي مزيج من مهام البرامج وأجهزة الأجهزة لإنشاء مسار نقل، حيث يجب على كل من الناشر والمشترك مشاركة نفس الموضوع. الموضوع هو زوج يتكون من نوع بيانات وعدد صحيح يمثل معرف الموضوع. يقوم كل من البرنامج الوسيط ومفتاح شبكة الأجهزة (يطلق عليهما رمز التبديل الوسيطة) بتفسير نفس بروتوكول الناشر / المشترك.

يمكّن Rodos المستخدم من كتابة تطبيقات في الوقت الفعلي لمختلف البنيات بطريقة سهلة وفعالة. أثناء التطوير، تم إيلاء اهتمام خاص لتنفيذ الميزات المختلفة لـ Rodos بطريقة بسيطة ومع ذلك. تم تجنب التعقيد غير الضروري لتزويد المستخدم بنظام مباشر ومرتّب بشكل واضح. Rodos يدعم الميزات النموذجية لأنظمة التشغيل في الوقت الحقيقي، مثل المواضيع والإشارات.

من بين الميزات الأخرى التي يقدمها Rodos:

* وجوه المنحى C ++ في الواجهات.
* تمهيد سريع جداً.
* الوقت الحقيقي في الأولوية للسيطرة الوقائية multithreading.
* إدارة الوقت (كنقطة مركزية).
* التواصل الآمن والتزامن الآمن.
* نشر الحدث.

## أمثلة

### مرحبا بالعالم - Hello World
يشبه برنامج Hello world المثال المشترك في Rodos. 
```cpp
#include "rodos.h"

class HelloWorld : public Thread {
 void run(){
  PRINTF("Hello World!\n");
 }
} helloworld;
```
 يتم توسيع مؤشر ترابط الفئة بواسطة إجراء تشغيل مخصص () ، والذي يكتب Hello World إلى الإخراج القياسي مع PRINTF. يمكن الوصول إلى جميع مكونات Rodos اللازمة لتطوير التطبيق عبر ملف الرأس rodos.h.

### المنشورات
يستخدم Rodos *[[جدولة (حاسوب)|جدولة]] استباقية ذات أولوية عادلة* . يتم تنفيذ مؤشر الترابط ذي الأولوية العليا أثناء إيقاف تشغيل مؤشرات الترابط ذات الأولوية الأقل ( تعدد المهام الاستباقية ). إذا كان هناك أكثر من مؤشر ترابط واحد له نفس الأولوية، يحصل كل منهم على حصة ثابتة من وقت الحوسبة ويتم تنفيذها بالتناوب.

**مثال:** 
```cpp
class HighPriorityThread: public Thread{
public:
 HighPriorityThread() : Thread("HiPriority", 25) { 
 }
 void run() {
  while(1) {
   xprintf("*");
   suspendCallerUntil(NOW() + 1*SECONDS);
  }
 }
} highprio;

class LowPriorityThread: public Thread {
public:
 LowPriorityThread() : Thread("LowPriority", 10) { 
 }

 void run() {
  while(1) {
     xprintf("."); 
  }
 }
} lowprio;
```
 مؤشر الترابط ***LowPriorityThread*** يكتب باستمرار الحرف "." ويتم مقاطعة كل ثانية بواسطة مؤشر ترابط ***HighPriorityThread*** ، الذي يكتب الحرف "*".

### المواضيع
يستخدم Rodos ما يسمى *الموضوعات* لتمكين الاتصال بين مؤشرات الترابط وعبّارة بين أنظمة مختلفة. يمثل *الموضوع* رسالة من نوع معين. يمكن أن ينشر سلسلة الرسائل *مواضيع* وكذلك الاشتراك في *موضوع* لاستلام جميع الرسائل التي تنتمي إلى نوع الرسالة. يتوافق نظام الرسائل مع نمط النشر والاشتراك .

فيما يلي مثال بسيط مع ناشر واحد *ومشترك* واحد، يستخدم كلاهما *عداد* *الموضوعات* *1 الذي* يحتوي على قيمة عدد صحيح واحد فقط.

**مثال:** 
```cpp
Topic<long> counter1(-1, "counter1");

class MyPublisher : public Thread {
public:
	MyPublisher() : Thread("SenderSimple") { }

	void run () {
		long cnt = 0;
		TIME_LOOP(3*SECONDS, 3*SECONDS) {
			PRINTF("Publish: %ld\n", ++cnt);
			counter1.publish(cnt);
		}
	}
} publisher;

class MySubscriber : public SubscriberReceiver<long> {
public:
  MySubscriber() : SubscriberReceiver<long>(counter1) { }
  void put(long &data) {
    PRINTF("Received: %ld\n", data);
  }    
}subscriber;
```
 *ينشر *'Publisher-Thread**' كل ثلاث ثوان قيمة عداد تصاعدي، بينما يعرض مؤشر *الترابط المشترك* ببساطة قيمة الأعداد الصحيحة المستلمة.

## البنى المدعومة
أبنية مجموعة التعليمات المدعومة:

* ARM7 (على سبيل المثال ARM Cortex-M3، Raspberry Pi 's SoC)
* Atmel AVR32
* STM32 32 بت
* PowerPC (PowerPC 405)

علاوة على ذلك، يمكن تشغيل Rodos كضيف على نظام تشغيل مضيف مختلف مثل:

* لينكس
* فري آرتوس
* RTEMS
* مايكروسوفت ويندوز
* TinyOS
* أنظمة التشغيل المتوافقة مع POSIX

## المراجع

## روابط خارجية

* جامعة فورتسبورغ - إطار رودوس

تصنيف:نظم تشغيل تعمل على معمارية آرم
تصنيف:نظم تشغيل مضمنة