سؤال

أنا أكتب برنامجًا خفيًا صغيرًا جدًا يجب أن يظل مستجيبًا حتى عندما يكون النظام تحت ضغط شديد.إنني ألقي نظرة على الاختلافات بين SCHED_FIFO وSCHED_RR فيما يتعلق بالجدولة، بالإضافة إلى محاولة تحديد أولوية معقولة.

ما هو برنامج الجدولة الذي سيكون مناسبًا لبرنامج مراقبة صغير ولكنه بالغ الأهمية، وما هي الأولوية التي ستكون آمنة بشكل معقول؟ما زلت غامضًا بعض الشيء عند محاولة فهم الاختلافات بين الاثنين.

يخصص برنامجي أقل من 3 كيلو بايت (ويستخدم mlockall())، ويكتب حوالي 600 بايت إلى xenbus ثم ينام، ولكن من المستحيل بالنسبة لي معرفة مقدار الوقت (بالمللي ثانية) الذي ستستغرقه كتابة البيانات فعليًا..لأن ما هو مكتوب يعتمد على ملف التكوين.

شكرا مقدما على أي اقتراحات / تفسيرات.

هل كانت مفيدة؟

المحلول

سيئة السمعة pchdtvr يستخدم البرنامج الذي يلتقط الإشارات التلفزيونية الرقمية SCHED_FIFO للتأكد من أن الحزم التلفزيونية مكتوبة على القرص مهما حدث.يمكنه التقاط 4 عروض في وقت واحد أثناء تشغيل Doom على جهاز كمبيوتر قديم.

البرنامج سيء السمعة لأنه تم إصداره تحت رخصة GPL والمؤلف حاول إلغاء GPL بأثر رجعي.أثار هذا الفعل عاصفة نارية طفيفة.على أية حال، يمكنك العثور على نسخة حديثة للدراسة فيها http://frequal.com/pmn/pchdtvr.html.

نصائح أخرى

لا يمكن استبق

وSCHED_FIFO (السياق تحولت إلى عملية أخرى) ما لم عملية أخرى ذات أولوية أعلى يظهر في قائمة انتظار التنفيذ.

ويمكن استبق SCHED_RR قبل الكم الوقت (تأخير نظرا لعملية لتنفيذ).

وكلاهما أولويات "الوقت الحقيقي" من المنظمون استنادا لينكس.

وأنا لست خبيرا لخطط الجدول الزمني، ولكن إلقاء نظرة على

man sched_setscheduler

وكان يفصل ما الفرق بين خوارزميات جدولة مختلفة و، وتوفير وصلات إلى وظائف جدولة أخرى. SCHED_FIFO يبدو في الواقع خطير جدا، ولكن يوصف بأنه جدولة الأكثر عدوانية:

<اقتباس فقرة>   

وتدير عملية SCHED_FIFO حتى إما يتم حظرها من قبل طلب I / O، واستبق ذلك من خلال عملية أولوية أعلى، أو أنه يدعو sched_yield (2).

وحذار عدم حبس النظام الخاص بك. وأود أن تفعل شخصيا بعض الاختبارات التجريبية لمعرفة ما يناسب الأولوية أفضل وكيف يتصرفون بالضبط.

وإذا كان كل المهام الأخرى الخاصة بك تستخدم جدولة القياسية، فإنه لا فرق. SCHED_FIFO وSCHED_RR تؤثر فقط على جدولة هذه المهام مع بعضها البعض.

وهكذا على نظام طبيعي أنه لا فرق. FIFO هو أسهل للفهم، وذلك باستخدام أنني أعتقد.

إذا كان لديك العديد من المهام من أولويات مختلفة، سيتم تشغيل فقط واحد أعلى إذا كانوا جميعا على استعداد لتشغيل (وليس هناك سوى وحدة المعالجة المركزية الأساسية واحدة)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top