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

التاريخ 
تم تطوير 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. #include "rodos.h"

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

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

مثال: 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 الذي يحتوي على قيمة عدد صحيح واحد فقط.

مثال: 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

المراجع

روابط خارجية 

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

نظم تشغيل تعمل على معمارية آرم
نظم تشغيل مضمنة
نظام رودوس هو نظام تشغيل في الوقت الفعلي للأنظمة المدمجة و تم تصميم ه للتطبيقات التي تتطلب موثوقية عالية . التاريخ تم تطوير Rodos في المركز الألماني للفضاء و ل ه جذور ه في نظام التشغيل BOSS . يتم استخدام ه ل برنامج الأقمار الصناعية الدقيقة الحالي ل مركز الفضاء الألماني . يعمل النظام على القمر الصناعي التشغيلي TET - 1 و س يتم استخدام ه للقمر الصناعي BiROS المطوّر حالياً . تم تعزيز رودوس و توسيع نطاق ه في المركز الألماني للفضاء و كذٰلك قسم تكنولوجيا المعلومات الفضائية في جامعة فورتسبورغ . المميزات جانب مهم من Rodos هو الوسيطة المتكاملة في الوقت الحقيقي . يوفر تطوير برنامج التحكم والحمولة في الجزء العلوي من البرامج الوسيطة الحد الأقصى من الوحدات النمطية اليوم . يمكن تطوير التطبيقات / الوحدات ب شكل مستقل و من السهل جداً تبادل الوحدات فيما بعد دون القلق ب شأن الآثار الجانبية ، لأن كل الوحدات يتم تغليف ها ككتل بناء ( BB ) و يمكن الوصول إلي ها و يمكن ها الوصول إلى الموارد الأخرى فقط عن طريق واجهات محددة ب شكل جيد . تم تطبيق Rodos كإطار عمل برمجي في + + C مع واجهة تطبيق موجهة للكائنات ( API ) . يتم تنظيم ها في طبقات : الطبقة الدنياهي المسؤولة عن التحكم في أجهزة النظام المدمجة ( HAL : طبقة تجريد الأجهزة ) . الطبقة التالية نواة : تدير الموارد المحلية و الخيوط و الوقت . على رأس ال نواة ، لدي نا الوسيطة ( الطبقة التي تتيح ا التواصل بين BBs ب استخدام بروتوكول البث المتعدد لمشترك الناشر . و على الجزء العلوي من البرنامج الوسيط ، يمكن للمستخدم تنفيذ تطبيقات ه ( الطبقةكشبكة برامج موزعة تضم BBs بسيط . واجهة برمجة تطبيقات Building Blocks في الجزء العلوي من البرنامج الوسيط هي واجهة موجهة نحو الخدمة . تتفاعل BBs من خلال تقديم الخدمات إلى BBs الأخرى و استخدام الخدمات من BBs الأخرى . كما ذكر من قبل ، كان الغرض الأصلي من رودوس هو التحكم في الأقمار الصناعية . و قد تم تصميم ه ل يكون ب مثابة عقول نظام A vionic و يقدم ل المرة الأولىمفهوم Network C entric . تتكون آلة إلكترونيات الطيران الأساسية ل الشبكة المركزية من عدة مكونات متجانسة تعمل معاً ل تنفيذ الحوسبة الموثوقة ب طريقة بسيطة . في نظام Network C entric ، لدي نا شبكة برمجيات من BBs ومركبات ربط الشبكة ( اتصالات لاسلكية ) و أجهزة كمبيوتر داخل المركبات ( الحافلات وروابط نقطة إلى نقطة ) ، و أجهزة ذكية ( مرفقة ب الحافلات ) ، و أجهزة بسيطة متصلة ب أجهزة الكمبيوتر الأمامية . ل التواصل مع ( العقدة ) الوحدات الخارجية ، ب ما في ذلك الأجهزة و وحدات الحوسبة الأخرى ، توفر كل عقدة بوابة إلى الشبكة و حول الأجهزة العديدة الموجودة في الشبكة ( قد يتم ربط أجهزة IO Devs و عقد الحوسبة ) ب النظام . تبادل الرسائل التي توفر ها الوسيطة والبوابات غير متزامن ، ب استخدام بروتوكول الناشر - المشترك . لم يتم إنشاء مسارات اتصال ثابتة و يمكن إعادة تكوين النظام ب سهولة في وقت التشغيل . على سبيل المثال ، يمكن تشغيل عدة نسخ متماثلة من البرنامج نفس ه في عقد مختلفة و نشر النتيجة ب استخدام نفس الموضوع ، دون معرفة بعض ها البعض . يمكن للناخب ال اشتراك في هذا الموضوع و التصويت على النتيجة الصحيحة . يمكن أن ينتقل التطبيق من عقدة إلى عقدة أو حتى إلى مركبات أخرى دون الحاجة إلى إعادة تكوين نظام الاتصالات . يوزع جوهر البرامج الوسيطة الرسائل محلياً فقط ، و لٰكن ب استخدام البوابات المدمجة إلى شبكة Network C entric ، يمكن أن تصل الرسائل إلى أي عقدة وتطبيق في الشبكة . يشتمل الاتصال في النظام بأكمل ه على تطبيقات البرامج و عقد الحوسبة و حتى أجهزة الإدخال / ال إخراج . يقوم الناشرون ب نشر الرسائل في إطار موضوع معين . يحصل المشتركون ( صفر ، واحد أو أكثر ) في موضوع معين على جميع الرسائل التي يتم نشر ها تحت هذا الموضوع . كما ذكرنا من قبل ، لا يوجد فرق في هذا الاتصال في أي عقدة ( وحدة أو جهاز حوسبة ) يعمل الناشر والمشتركون و ما بعد ها ، ف قد يكونون أي مزيج من مهام البرامج و أجهزة الأجهزة ل إنشاء مسار نقل ، حيث يجب على كل من الناشر والمشترك مشاركة نفس الموضوع . الموضوع هو زوج يتكون من نوع بيانات و عدد صحيح يمثل معرف الموضوع . يقوم كل من البرنامج الوسيط ومفتاح شبكة الأجهزة ( يطلق علي هما رمز التبديل الوسيطة ) ب تفسير نفس بروتوكول الناشر / المشترك . يمكّن Rodos المستخدم من كتابة تطبيقات في الوقت الفعلي لمختلف البنيات ب طريقة سهلة وفعالة . أثناء التطوير ، تم إيلاء اهتمام خاص ل تنفيذ الميزات المختلفة لـ Rodos ب طريقة بسيطة و مع ذلك . تم تجنب التعقيد غير الضروري ل تزويد المستخدم ب نظام مباشر ومرتّب ب شكل واضح . Rodos يدعم الميزات النموذجية ل أنظمة التشغيل في الوقت الحقيقي ، مثل المواضيع والإشارات . من بين الميزات الأخرى التي يقدم ها Rodos : وجوه المنحى C + + في الواجهات . تمهيد سريع جداً . الوقت الحقيقي في الأولوية ل السيطرة الوقائية multithreading . إدارة الوقت ( كنقطة مركزية ) . ا التواصل الآمن و التزامن الآمن . نشر الحدث . أمثلة مرحبا ب العالم - H ello World يشبه برنامج H ello world المثال المشترك في Rodos . # include " rodos.h " class HelloWorld\ : public Thread { void run ( ) { PR I N T F ( " H ello World!\n " ) ; } } h elloworld ; يتم توسيع مؤشر ترابط الفئة ب واسطة إجراء تشغيل مخصص ( ) ، و الذي يكتب H ello World إلى ال إخراج القياسي مع PR I N TF . يمكن الوصول إلى جميع مكونات Rodos اللازمة ل تطوير التطبيق عبر ملف الرأس rodos.h . المنشورات يستخدم Rodos جدولة استباقية ذات أولوية عادلة \ . يتم تنفيذ مؤشر الترابط ذي الأولوية العليا أثناء إيقاف تشغيل مؤشرات الترابط ذات الأولوية الأقل ( تعدد المهام الاستباقية ) . إذا كان هناك أكثر من مؤشر ترابط واحد ل ه نفس الأولوية ، يحصل كل من هم على حصة ثابتة من وقت الحوسبة و يتم تنفيذ ها بال تناوب . مثال : class High PriorityTh read : public Thread{ public : High PriorityTh r ead ( ) \ : Thread ( " H iP riority " ,{ } void run ( ) { wh ile ( 1 ) { xprintf ( " * " ) ; suspend C aller U nti l ( NOW ( ) + SECONDS ) ; } } } high pr io ; class LowPriorityTh read : public Thread { public : LowPriorityT h r ead ( ) \ : Thread ( " L owP riority " ,{ } void run ( ) { wh ile ( 1 ) { xprintf ( " . " ) ; } } } lowprio ; مؤشر الترابط LowPriorityTh read يكتب ب استمرار الحرف " . " و يتم مقاطعة كل ثانية ب واسطة مؤشر ترابط High PriorityTh read ، الذي يكتب الحرف " * " . المواضيع يستخدم Rodos ما يسمى الموضوعات ل تمكين الاتصال بين مؤشرات الترابط وعبّارة بين أنظمة مختلفة . يمثل الموضوع رسالة من نوع معين . يمكن أن ينشر سلسلة الرسائل مواضيع و كذٰلك ال اشتراك في موضوع لاستلام جميع الرسائل التي تنتمي إلى نوع الرسالة . يتوافق نظام الرسائل مع نمط النشر و الاشتراك \ . فيما يلي مثال بسيط مع ناشر واحد ومشترك واحد ، يستخدم كلى هما عداد الموضوعات الذي يحتوي على قيمة عدد صحيح واحد فقط . مثال : Topic <long > counter 1 ( - 1 , " counte r 1 " ) ; class MyPublis h er\ : public Thread { public : MyPublis h er ( ) \ : Thread ( " SenderSim ple " ) { } void run ( ) { long cnt = TI M E _ L O O P ( 3 * S E C ON D S , S E C ONDS ) { PR I N T F ( " Publish : % ld\n " , + + cnt ) ; counter1.publish ( cnt ) ; } } } publis h er ; class MySubscriber\ : public Subscriber R eceiver <long > { public : MySubscriber ( ) \ : Subscriber R eceiver <long > ( counter1 ) { } void put ( long & data ) { PR I N T F ( " Received : % ld\n " , data ) ; } } subscriber ; ينشر Publish er - Thread كل ثلاث ثوان قيمة عداد تصاعدي ، بينما يعرض مؤشر الترابط المشترك ببساطة قيمة الأعداد الصحيحة المستلمة . البنى المدعومة أبنية مجموعة ال تعليمات المدعومة : A RM7 ( على سبيل المثال ARM Cortex - M3 ، Raspberry Pi 's SoC ) A tmel AVR32 STM 32بت PowerPC ( PowerPC علاوة على ذلك ، يمكن تشغيل Rodos كضيف على نظام تشغيل مضيف مختلف مثل : لينكس فري آرتوس RTEMS مايكروسوفت ويندوز TinyOS أنظمة التشغيل المتوافقة مع POSIX المراجع روابط خارجية جامعة فورتسبورغ - إطار رودوس نظم تشغيل تعمل على معمارية آرم نظم تشغيل مضمنة