RTLinux

RTLinux هو نظام تشغيل ذو نواة مصغرة يعمل في الوقت الحقيقي ( RTOS) ، ويُشغّل نظام التشغيل لينكس بالكامل كعملية استباقية تمامًا . تُمكّن خاصية الوقت الحقيقي من التحكم في الروبوتات، وأنظمة جمع البيانات ، ومصانع الإنتاج، وغيرها من الأجهزة والآلات الحساسة للوقت من خلال تطبيقات RTLinux. على الرغم من تشابه الاسم، إلا أنه لا يرتبط بمشروع Real-Time Linux التابع لمؤسسة لينكس . [ 1 ]

طُوِّر نظام RTLinux بواسطة فيكتور يودايكن، ومايكل بارابانوف، وكورت دوغان، وآخرين في معهد نيو مكسيكو للتعدين والتكنولوجيا ، ثم طُوِّر كمنتج تجاري في مختبرات FSMLabs. استحوذت شركة Wind River Systems على تقنية FSMLabs المدمجة في فبراير 2007، وأصدرت نسخةً منه باسم Wind River Real-Time Core لنظام Wind River Linux . وفي أغسطس 2011، أوقفت Wind River خط إنتاج Wind River Real-Time Core، ما أنهى فعليًا الدعم التجاري لمنتج RTLinux.

خلفية

كان الهدف الرئيسي لتصميم RTLinux [ 2 ] هو إضافة إمكانيات الوقت الحقيقي الصارمة إلى نظام تشغيل تجاري لتسهيل تطوير برامج تحكم معقدة تجمع بين هاتين الإمكانيتين. [ 3 ] [ 4 ] على سبيل المثال، قد يرغب المستخدم في تطوير وحدة تحكم محركات تعمل في الوقت الحقيقي باستخدام قاعدة بيانات تجارية وتصدير واجهة مستخدم عبر الويب. بدلاً من محاولة بناء نظام تشغيل واحد يدعم إمكانيات الوقت الحقيقي وغير الحقيقي، صُمم RTLinux لمشاركة جهاز حاسوبي بين نظامي تشغيل، أحدهما يعمل في الوقت الحقيقي والآخر لا يعمل فيه، بحيث (1) لا يمكن منع نظام التشغيل الذي يعمل في الوقت الحقيقي من العمل بواسطة نظام التشغيل الذي لا يعمل فيه، و(2) يمكن للمكونات التي تعمل في البيئتين المختلفتين تبادل البيانات بسهولة. وكما يوحي الاسم، صُمم RTLinux في الأصل لاستخدام Linux كنظام غير يعمل في الوقت الحقيقي [ 5 ولكنه تطور لاحقًا بحيث يمكن تشغيل نواة RTCore الخاصة بالوقت الحقيقي مع Linux أو نظام Berkeley Software Distribution (BSD) Unix .

كان نظام التشغيل متعدد البيئات في الوقت الحقيقي (MERT) أول مثال على نظام تشغيل يعمل في الوقت الحقيقي بالتزامن مع نظام يونكس. اعتمد MERT على تقنيات المحاكاة الافتراضية التقليدية : حيث كانت نواة النظام في الوقت الحقيقي هي نظام التشغيل المضيف (أو المشرف )، بينما كان نظام يونكس من شركة بيل سيستمز هو النظام الضيف . شكّل RTLinux محاولة لتحديث مفهوم MERT ليتناسب مع عصر الحواسيب الشخصية والأجهزة المتاحة تجاريًا. كما مثّل محاولة للتغلب على قيود أداء MERT، ولا سيما العبء الإضافي الناتج عن المحاكاة الافتراضية.

بدلاً من تغليف نظام التشغيل الضيف في آلة افتراضية ، قام RTLinux بمحاكاة التحكم في مقاطعات الضيف فقط . سمحت هذه الطريقة لنواة النظام في الوقت الحقيقي بتحويل نظام التشغيل الضيف إلى نظام قابل للمقاطعة بالكامل، ولكنه لا يزال قادرًا على التحكم المباشر، على سبيل المثال، في أجهزة التخزين. على وجه الخصوص، عملت برامج التشغيل القياسية للضيف دون تعديل المصدر، على الرغم من أنها كانت بحاجة إلى إعادة تجميع لاستخدام "خطافات" المحاكاة الافتراضية. انظر أيضًا: المحاكاة الافتراضية الجزئية . تم تكييف قناة يونكس للسماح لبرامج الوقت الحقيقي وغير الوقت الحقيقي بالتواصل، على الرغم من إضافة طرق أخرى مثل الذاكرة المشتركة.

من وجهة نظر المبرمج، بدا نظام RTLinux في البداية كبيئة خيطية صغيرة للمهام الآنية، بالإضافة إلى بيئة لينكس القياسية لبقية العمليات. تم تنفيذ نظام التشغيل الآني كوحدة نواة قابلة للتحميل ، بدأت بمحاكاة التحكم في مقاطعات النظام الضيف، ثم شغّلت مُجدولًا آنيًا. كانت المهام تُخصص لها أولويات ثابتة، وكان الجدولة في البداية تعتمد كليًا على الأولوية. تم دمج نظام التشغيل الضيف كأدنى مهمة ذات أولوية، وكان بمثابة المهمة الخاملة لنظام التشغيل الآني. كانت المهام الآنية تعمل في وضع النواة . لاحقًا، اعتمد تطوير RTLinux واجهة برمجة تطبيقات خيوط POSIX ، مما سمح بإنشاء خيوط في وضع المستخدم مع تشغيل خيوط آنية داخل العمليات الضيفة. في بيئات المعالجات المتعددة، كانت الخيوط مرتبطة بنوى المعالج، وكان من الممكن منع خيط النظام الضيف من العمل على النواة المخصصة (مما يحجز النوى فعليًا للمعالجة الآنية فقط).

تطبيق

يُتيح نظام RTLinux إمكانية تشغيل مهام خاصة تعمل في الوقت الحقيقي ومعالجات المقاطعات على نفس الجهاز الذي يعمل عليه نظام Linux القياسي. تُنفَّذ هذه المهام والمعالجات عند الحاجة بغض النظر عما يفعله نظام Linux. في أسوأ الأحوال، يكون الوقت بين لحظة اكتشاف المعالج لمقاطعة عتادية ولحظة بدء معالج المقاطعة بالتنفيذ أقل من 15 ميكروثانية على نظام RTLinux الذي يعمل على معالج x86 عام (حوالي عام 2000). تُنفَّذ مهمة دورية في نظام RTLinux في غضون 35 ميكروثانية من وقتها المُجدول على نفس العتاد. هذه الأوقات محدودة بقدرات العتاد، ومع تحسُّن العتاد، سيتحسَّن أداء نظام RTLinux أيضًا. يتمتع نظام Linux القياسي بأداء متوسط ​​ممتاز، ويمكنه حتى توفير دقة جدولة تصل إلى مستوى أجزاء من الألف من الثانية للمهام التي تستخدم إمكانيات POSIX للوقت الحقيقي البرمجي. مع ذلك، لم يُصمَّم نظام Linux القياسي لتوفير دقة أقل من أجزاء من الألف من الثانية وضمانات توقيت موثوقة. استند نظام RTLinux إلى آلة افتراضية خفيفة الوزن، حيث مُنح نظام Linux "الضيف" وحدة تحكم افتراضية للمقاطعات ومؤقتًا، وكان الوصول إلى جميع مكونات العتاد الأخرى مباشرًا. من وجهة نظر "المضيف" في الوقت الحقيقي، تُعتبر نواة لينكس بمثابة خيط معالجة. تتم معالجة المقاطعات اللازمة للمعالجة الحتمية بواسطة النواة في الوقت الحقيقي، بينما تُحال المقاطعات الأخرى إلى لينكس، الذي يعمل بأولوية أقل من خيوط المعالجة في الوقت الحقيقي. تتولى برامج تشغيل لينكس معالجة جميع عمليات الإدخال والإخراج تقريبًا. يمكن استخدام أنابيب FIFO (الأول في الأول خارج ) أو الذاكرة المشتركة لتبادل البيانات بين نظام التشغيل وRTLinux.

موضوعي

يتمثل الهدف الرئيسي لتصميم RTLinux في أن يكون النظام شفافًا، معياريًا، وقابلًا للتوسيع . تعني الشفافية عدم وجود أي مكونات داخلية معقدة يصعب الوصول إليها، وأن تكون تكلفة أي عملية قابلة للتحديد. أما المعيارية فتعني إمكانية حذف وظائف معينة وتكاليفها في حال عدم الحاجة إليها. بينما تعني قابلية التوسيع قدرة المبرمجين على إضافة وحدات وتخصيص النظام وفقًا لمتطلباتهم. يدعم نظام RTLinux الأساسي معالجة المقاطعات عالية السرعة فقط. ويحتوي على مُجدول أولويات بسيط يمكن استبداله بسهولة بمُجدولات أكثر ملاءمة لاحتياجات تطبيقات محددة. عند تطوير RTLinux، صُمم النظام لتحقيق أقصى استفادة من نظام Linux وقدراته الفائقة.

المكونات الأساسية

يتألف نظام RTLinux من مكون أساسي صغير ومجموعة من المكونات الاختيارية. يسمح المكون الأساسي بتثبيت معالجات مقاطعات ذات زمن استجابة منخفض للغاية، لا يمكن لنظام Linux نفسه تأخيرها أو مقاطعتها، بالإضافة إلى بعض إجراءات التزامن والتحكم في المقاطعات منخفضة المستوى. وقد تم توسيع هذا المكون الأساسي لدعم المعالجة المتعددة المتناظرة (SMP) ، وفي الوقت نفسه تم تبسيطه بإزالة بعض الوظائف التي يمكن توفيرها خارجه.

الوظائف

توجد معظم وظائف RTLinux ضمن مجموعة من وحدات النواة القابلة للتحميل والتي توفر خدمات اختيارية ومستويات تجريد مختلفة . وتشمل هذه الوحدات ما يلي:

  1. rtl sched - جدولة ذات أولوية تدعم كلاً من واجهة "POSIX الخفيفة" الموضحة أدناه وواجهة برمجة تطبيقات RTLinux الأصلية V1.
  2. rtl time - الذي يتحكم في ساعات المعالج ويصدر واجهة مجردة لربط المعالجات بالساعات.
  3. rtl posixio - يدعم واجهة القراءة/الكتابة/الفتح بنمط POSIX لبرامج تشغيل الأجهزة .
  4. rtl fifo - يربط مهام RT ومعالجات المقاطعات بعمليات Linux من خلال طبقة الجهاز بحيث يمكن لعمليات Linux القراءة / الكتابة إلى مكونات RT.
  5. semaphore - حزمة مساهمة من جيري إبلين توفر إشارات حظر مهام الوقت الحقيقي .
  6. من المخطط أن يتوفر دعم POSIX mutex في التحديث الفرعي التالي لنظام RTLinux.
  7. mbuff هي حزمة مساهمة كتبها توماش موتيليفسكي لتوفير ذاكرة مشتركة بين مكونات RT وعمليات Linux.

مهام الوقت الحقيقي

تُنفَّذ مهام الوقت الحقيقي في RTLinux كوحدات نواة ، على غرار الوحدات التي يستخدمها لينكس لبرامج التشغيل وأنظمة الملفات وما إلى ذلك. تتمتع مهام الوقت الحقيقي بوصول مباشر إلى المكونات المادية ولا تستخدم الذاكرة الافتراضية . عند بدء التشغيل، تُبلغ مهمة الوقت الحقيقي (الوحدة) نواة RTLinux بموعد انتهاء صلاحيتها وفترتها وقيود وقت تحريرها.

الخيوط

يُطبّق نظام RT-Linux واجهة برمجة تطبيقات POSIX للتحكم في الخيوط. يتم إنشاء الخيط باستدعاء الدالة pthread_create. المعامل الثالث لهذه الدالة pthread_createهو دالة تحتوي على الكود الذي يُنفّذه الخيط.

من الضروري تحديد أولويات الخيوط في RTLinux. يمكن للخيوط ذات الأولويات الأعلى مقاطعة الخيوط ذات الأولويات الأقل. على سبيل المثال، قد يكون لدينا خيط يتحكم في محرك خطوي. ولتحريك المحرك بسلاسة، يجب بدء هذا الخيط على فترات منتظمة تمامًا. يمكن ضمان ذلك من خلال تعيين أولوية عالية لهذا الخيط. يوضح المثال threads2.c كيفية تحديد أولويات الخيوط المختلفة. يتم تحديد أولوية الخيط باستخدام الكود الموضح أدناه:

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 " ); /* ... */ }

مخرجات البرنامج هي كما يلي.

الموضوع 1 الموضوع الثاني بدأ بدأ الموضوع الثالث الرسالة: هذا هو الموضوع 1 الرسالة: هذا هو الموضوع الثاني الرسالة: هذا هو الموضوع الثاني الرسالة: هذا هو الموضوع الثاني الرسالة: هذا هو الموضوع 1 الرسالة: هذا هو الموضوع 1 الرسالة: هذا هو الموضوع الثالث الرسالة: هذا هو الموضوع الثالث الرسالة: هذا هو الموضوع الثالث 

الخيط 2 له الأولوية القصوى، بينما الخيط 3 له الأولوية الدنيا. تمت طباعة الرسالة الأولى بواسطة الخيط 1 ذي الأولوية المتوسطة لأنه بدأ قبل الخيط 2 بفترة وجيزة.

انظر أيضاً

مراجع

  1. "realtime:start [ Linux Foundation Wiki ] " . wiki.linuxfoundation.org .
  2. بارابانوف، مايكل. تقديم RTLinux (تقرير). مجلة لينكس. CiteSeerX 10.1.1.302.3221 . 
  3. يودايكن، فيكتور (1999). بيان RTLinux (ملف PDF) (تقرير). وقائع المؤتمر الخامس للينكس.
  4. يودايكن، فيكتور (1996). بحث حول أنظمة التشغيل الرخيصة (تقرير). كامبريدج، ماساتشوستس: وقائع المؤتمر الأول حول الأنظمة القابلة لإعادة التوزيع بحرية. CiteSeerX 10.1.1.39.9505 . 
  5. بارابانوف، مايكل (1996). نظام تشغيل في الوقت الحقيقي قائم على لينكس (PDF) (MS).

مصادر

  • دوجان، كورت (1 فبراير 2004). "قياس جدولة المهام الدورية" . مجلة دكتور دوبس . مؤرشف من الأصل في 14 يونيو 2012. تم الاطلاع عليه في 11 مايو 2026 .
  • براءة الاختراع الأمريكية رقم 5995745 ، يودايكن، فيكتور جيه، "إضافة دعم الوقت الحقيقي لأنظمة التشغيل للأغراض العامة"، نُشرت في 30 نوفمبر 1999، مُخصصة لمختبرات آلات الحالة المحدودة وأنظمة ويند ريفر.