
_START_ARTICLE_
نظام رودوس التشغيلي
_START_SECTION_
نبذة في التاريخ
_START_PARAGRAPH_
تم تطوير Rodos في المركز الألماني للفضاء وله جذوره في نظام التشغيل BOSS. يتم استخدامه لبرنامج الأقمار الصناعية الدقيقة الحالي لمركز الفضاء الألماني. يعمل النظام على القمر الصناعي التشغيلي TET-1 وسيتم استخدامه للقمر الصناعي BiROS المطوّر حالياً. _NEWLINE_تم تعزيز رودوس وتوسيع نطاقه في المركز الألماني للفضاء وكذلك قسم تكنولوجيا المعلومات الفضائية في جامعة فورتسبورغ.
_START_SECTION_
مرحبا بالعالم - Hello World
_START_PARAGRAPH_
يشبه برنامج Hello world المثال المشترك في Rodos. _NEWLINE_#include "rodos.h"class HelloWorld : public Thread {_NEWLINE_ void run(){_NEWLINE_  PRINTF("Hello World!\n");_NEWLINE_ }} helloworld;_NEWLINE_ يتم توسيع مؤشر ترابط الفئة بواسطة إجراء تشغيل مخصص () ، والذي يكتب Hello World إلى الإخراج القياسي مع PRINTF. يمكن الوصول إلى جميع مكونات Rodos اللازمة لتطوير التطبيق عبر ملف الرأس rodos.h.
_START_SECTION_
المنشورات
_START_PARAGRAPH_
يستخدم Rodos جدولة استباقية ذات أولوية عادلة . يتم تنفيذ مؤشر الترابط ذي الأولوية العليا أثناء إيقاف تشغيل مؤشرات الترابط ذات الأولوية الأقل ( تعدد المهام الاستباقية ). إذا كان هناك أكثر من مؤشر ترابط واحد له نفس الأولوية ، يحصل كل منهم على حصة ثابتة من وقت الحوسبة ويتم تنفيذها بالتناوب. _NEWLINE_مثال: _NEWLINE_class HighPriorityThread: public Thread{public:_NEWLINE_ HighPriorityThread() : Thread("HiPriority", 25) { _NEWLINE_ }_NEWLINE_ void run() {_NEWLINE_  while(1) {_NEWLINE_   xprintf("*");_NEWLINE_   suspendCallerUntil(NOW() + 1*SECONDS);_NEWLINE_  }_NEWLINE_ }} highprio;class LowPriorityThread: public Thread {public:_NEWLINE_ LowPriorityThread() : Thread("LowPriority", 10) { _NEWLINE_ }_NEWLINE__NEWLINE_ void run() {_NEWLINE_  while(1) {_NEWLINE_     xprintf("."); _NEWLINE_  }_NEWLINE_ }} lowprio;_NEWLINE_ مؤشر الترابط LowPriorityThread يكتب باستمرار الحرف "." ويتم مقاطعة كل ثانية بواسطة مؤشر ترابط HighPriorityThread ، الذي يكتب الحرف "*".
_START_SECTION_
المواضيع
_START_PARAGRAPH_
يستخدم Rodos ما يسمى الموضوعات لتمكين الاتصال بين مؤشرات الترابط وعبّارة بين أنظمة مختلفة. يمثل الموضوع رسالة من نوع معين. يمكن أن ينشر سلسلة الرسائل مواضيع وكذلك الاشتراك في موضوع لاستلام جميع الرسائل التي تنتمي إلى نوع الرسالة. يتوافق نظام الرسائل مع نمط النشر والاشتراك . _NEWLINE_فيما يلي مثال بسيط مع ناشر واحد ومشترك واحد ، يستخدم كلاهما عداد الموضوعات 1 الذي يحتوي على قيمة عدد صحيح واحد فقط. _NEWLINE_مثال: _NEWLINE_Topic<long>  counter1(-1, "counter1");class MyPublisher : public Thread {public:_NEWLINE_MyPublisher() : Thread("SenderSimple") { }_NEWLINE__NEWLINE_void run () {_NEWLINE_long cnt = 0;_NEWLINE_TIME_LOOP(3*SECONDS, 3*SECONDS) {_NEWLINE_PRINTF("Publish: %ld\n", ++cnt);_NEWLINE_counter1.publish(cnt);_NEWLINE_}_NEWLINE_}} publisher;class MySubscriber : public SubscriberReceiver<long> {public:_NEWLINE_  MySubscriber() : SubscriberReceiver<long>(counter1) { }_NEWLINE_  void put(long &data) {_NEWLINE_    PRINTF("Received: %ld\n", data);_NEWLINE_  }    _NEWLINE_}subscriber;_NEWLINE_ _NEWLINE_ينشر Publisher-Thread كل ثلاث ثوان قيمة عداد تصاعدي ، بينما يعرض مؤشر الترابط المشترك ببساطة قيمة الأعداد الصحيحة المستلمة.