كيف يتعامل vxWorks مع مهمتين لهما نفس الأولوية؟

StackOverflow https://stackoverflow.com/questions/79892

  •  09-06-2019
  •  | 
  •  

سؤال

لدينا مهمتان (T1 وT2) في نظامنا المضمن vxWorks لهما نفس الأولوية (110).
كيف يتعامل برنامج جدولة vxWorks العادي مع هذا إذا كانت كلتا المهمتين جاهزتين للتشغيل؟
ما هي المهمة التي يتم تنفيذها أولا؟

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

المحلول

المهمة التي سيتم تشغيلها أولاً هي المهمة التي تم إنشاؤها أولاً كما تم تحقيقها بواسطة مهمة جدولة VxWorks.يستخدم برنامج VxWorks الجدولة على أساس الأولوية بشكل افتراضي.لذلك في حالتك، نظرًا لأن T1 وT2 لهما نفس الأولوية، فإن أيًا منهما يحصل على وحدة المعالجة المركزية أولاً سيستمر في العمل إلى أجل غير مسمى حتى يتم حظره بشكل صريح (باستخدام com.tasksuspend أو TaskDelay)، وفي ذلك الوقت سيتم تنفيذ المهمة READY الأخرى حتى يتم حظرها، وهكذا.يجب أن يتم التحكم في هذا عن طريق الإشارات أو كائنات المزامنة (Mutexes؟)

يتم توضيح المشكلة الرئيسية في الجدولة على أساس الأولوية من خلال هذه المشكلة بالضبط.كيف نحدد المدة التي نسمح فيها بتشغيل هذه المهام؟حقيقة أن لديهم نفس الأولوية يعقد الأمور.مصدر قلق آخر هو أن مهام VxWorks التي لها أولوية عالية (الرقم الأقل يعني أولوية أعلى) يمكن أن تستبق تطبيقك الذي يجب أن تكون مستعدًا له في التعليمات البرمجية الخاصة بك.ويمكن حل هذه المشاكل باستخدام جدولة جولة روبن.تم وصف المشكلات الإضافية التي تطرحها الجدولة الدورية والحلول هنا.

نصائح أخرى

يحتوي برنامج VxWorks على 256 مستوى أولوية (0 هو الأعلى، و255 هو الأدنى).في أي وقت، يتم تشغيل المهمة ذات الأولوية القصوى على وحدة المعالجة المركزية (CPU).يحتوي كل مستوى أولوية من الناحية النظرية على قائمة انتظار حيث يتم وضع مهام متعددة في قائمة الانتظار للتنفيذ.

لدينا 3 مهام بنفس الأولوية A، B، C.افترض أن A يتم تنفيذه.
عندما تكون الكتل A (taskDelay، SemTake، msgQReceive)، سيبدأ B في التنفيذ.
عندما يقوم A بإلغاء الحظر، يتم وضعه في نهاية قائمة الانتظار.لدينا الآن B، C، A.
عندما يحجب B، يتولى C المسؤولية، وما إلى ذلك...

إذا تم تمكين جدولة Round Robin (تقسيم الوقت)، فسيتم تطبيق نفس المفهوم، ولكن يتم وضع المهمة في نهاية قائمة الانتظار عندما تنتهي شريحة الوقت الخاصة بها.

لاحظ أن المهمة التي يتم استباقها بواسطة مهمة ذات أولوية أعلى لن تؤثر على ترتيب قائمة الانتظار.إذا كان A قيد التشغيل وتم استباقه، فسوف يستمر في التنفيذ عند انتهاء المهمة ذات الأولوية الأعلى.ولا يتم وضعها في نهاية قائمة الانتظار.

افتراضيًا، سيتم تنفيذ الخيار الذي تم إنشاؤه أولاً، وما لم يتخلى عن وحدة المعالجة المركزية، فلن يتم تشغيل الآخر أبدًا.

يمكنك تمكين جولة روبن بشكل صريح، مما سيقسمها إلى شرائح زمنية.

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