الوحدة 10: جدولة المعالجات المتعددة والمعالجة الزمنية الحقيقية

Multiprocessor, Multicore, and Real-Time Scheduling

📚 استنادًا إلى الفصل العاشر من كتاب: Operating Systems: Internals and Design Principles – William Stallings – الإصدار التاسع

أهداف الوحدة

  • فهم كيفية جدولة العمليات في أنظمة المعالجة المتعددة والأنوية المتعددة.
  • التعرف على خصائص أنظمة الزمن الحقيقي ومتطلبات الجدولة فيها.
  • مقارنة تقنيات الجدولة في أنظمة التشغيل الشائعة: Linux، Windows، Unix SVR4، FreeBSD.
  • استيعاب التحديات والمفاضلات في بيئات الجدولة المعقدة.

1️⃣ جدولة الأنظمة متعددة المعالجات (Multiprocessor Scheduling)

مع تطور البنية الحاسوبية، أصبحت معظم الأنظمة الحديثة تعتمد على أكثر من معالج مركزي واحد (CPU) أو أكثر من نواة (Core) داخل نفس المعالج. هذا التطور يطرح تحديات جديدة ومعقدة لجدولة العمليات، حيث لم يعد الهدف هو اختيار العملية التالية لمعالج واحد، بل كيفية توزيع العمل على عدة معالجات لزيادة الأداء العام للنظام.

🔍 التحديات الجديدة في جدولة المعالجات المتعددة:

  • كيفية توزيع العمليات على المعالجات المتعددة: هل يجب أن يكون هناك طابور واحد للعمليات الجاهزة يخدمه جميع المعالجات، أم يجب أن يكون لكل معالج طابوره الخاص؟
  • الحفاظ على التوازن في تحميل المعالجات (Load Balancing): يجب توزيع عبء العمل بالتساوي بين جميع المعالجات لضمان عدم وجود معالج يعمل بكامل طاقته بينما آخر يكون خاملاً.
  • تجنب التنافس على الموارد المشتركة: في أنظمة المعالجات المتعددة، تشترك المعالجات غالبًا في الذاكرة الرئيسية، مما يتطلب آليات تزامن قوية لمنع تضارب البيانات.

📍 نوعا المعالجات في أنظمة الجدولة:

  • معالجات متماثلة (SMP - Symmetric Multiprocessing):
    • الوصف: في هذا النوع من الأنظمة، تكون جميع المعالجات متطابقة وتشارك نفس الذاكرة الرئيسية وموارد I/O. يمكن لأي معالج تنفيذ أي عملية أو خيط (Thread) متاح.
    • الجدولة: عادةً ما يكون هناك طابور واحد للعمليات الجاهزة، ويسحب كل معالج العملية التالية من هذا الطابور. يتطلب هذا آليات تزامن قوية لحماية الطابور المشترك.
    • المزايا: سهولة توزيع الحمل، مرونة عالية.
    • العيوب: قد يحدث تنافس على الطابور المشترك، وقد يؤثر على أداء الذاكرة المخبأة (Cache Coherence) إذا انتقلت العمليات بين المعالجات بشكل متكرر.
  • معالجات غير متماثلة (AMP - Asymmetric Multiprocessing):
    • الوصف: في هذا النوع، يكون هناك معالج رئيسي (Master Processor) مسؤول عن جميع أنشطة نظام التشغيل الحرجة، مثل إدارة البيانات، جدولة العمليات، ومعالجة I/O. المعالجات الأخرى (Slave Processors) تتبع أوامر المعالج الرئيسي وتنفذ مهام محددة.
    • الجدولة: تتم الجدولة بشكل مركزي بواسطة المعالج الرئيسي.
    • المزايا: أبسط في التنفيذ، لا توجد مشكلة تنافس على هياكل البيانات الحرجة.
    • العيوب: المعالج الرئيسي يمثل نقطة ضعف (Single Point of Failure) وعنق الزجاجة (Bottleneck) المحتملة.

📍 نماذج الجدولة في أنظمة المعالجات المتعددة:

النموذج الوصف المزايا/العيوب
Scheduler مركزي (Centralized Scheduler) عملية واحدة (أو معالج واحد في AMP) تنسق توزيع العمليات بين جميع المعالجات. يوجد طابور جاهز واحد. المزايا: سهولة تحقيق توازن الحمل. العيوب: قد يصبح عنق زجاجة، ويقلل من قابلية التوسع.
Scheduler لكل معالج (Per-Processor Scheduler) كل معالج يملك قائمة انتظار جاهزة وجدولة محلية خاصة به. المزايا: قابلية توسع عالية، تقليل التنافس على هياكل البيانات المشتركة. العيوب: صعوبة تحقيق توازن الحمل بشكل فعال، قد يؤدي إلى معالجات خاملة بينما أخرى مشغولة.
التهجير (Migration) هل يمكن للعملية الانتقال من معالج لآخر أثناء تنفيذها؟

نعم (Load Sharing): يسمح بتوزيع الحمل بشكل ديناميكي بين المعالجات. إذا كان معالج ما خاملاً ومعالج آخر مشغولاً، يمكن نقل عملية من المعالج المشغول إلى الخامل.

لا (Processor Affinity): يعني أن العملية تميل للبقاء على نفس المعالج الذي بدأت عليه. هذا يقلل من أداء التخزين المؤقت (Cache Performance Loss) لأن بيانات العملية تبقى في ذاكرة التخزين المؤقت للمعالج، مما يسرع الوصول إليها.

🔎 Processor Affinity (تآلف المعالج): هو ميل نظام التشغيل للحفاظ على تشغيل خيط أو عملية معينة على نفس المعالج (أو النواة) قدر الإمكان. الهدف الرئيسي من هذا هو تحسين أداء الذاكرة المخبأة (Cache). عندما تعمل عملية على معالج معين، يتم تخزين جزء كبير من بياناتها وتعليماتها في ذاكرة التخزين المؤقت (Cache) الخاصة بذلك المعالج. إذا تم نقل العملية إلى معالج آخر، يجب إعادة تحميل هذه البيانات إلى ذاكرة التخزين المؤقت للمعالج الجديد، مما يؤدي إلى "فقدان أداء الذاكرة المخبأة" (Cache Performance Loss) ويُبطئ الأداء. لذلك، تسعى أنظمة التشغيل إلى تحقيق توازن بين توازن الحمل (Load Balancing) وتآلف المعالج.


2️⃣ تعدد الأنوية (Multicore Scheduling)

تُعد المعالجات متعددة الأنوية (Multicore Processors) هي السائدة حاليًا، حيث تدمج عدة أنوية معالجة (CPU Cores) على شريحة واحدة. على الرغم من أنها تشبه أنظمة المعالجات المتعددة (SMP) في وجود عدة وحدات تنفيذ، إلا أنها تختلف في أنها تشترك في بعض مستويات الذاكرة المخبأة (Cache) وبعض الموارد الأخرى داخل الشريحة.

🔍 التحديات الخاصة بجدولة تعدد الأنوية:

  • مشكلة مشاركة موارد التخزين المؤقت (Cache Coherence): بما أن الأنوية تشترك في بعض مستويات الذاكرة المخبأة (مثل L2 أو L3 Cache)، يجب على نظام التشغيل ضمان تناسق البيانات بين الأنوية المختلفة. إذا قامت نواة بتعديل بيانات في الذاكرة المخبأة الخاصة بها، يجب أن يتم تحديث هذه البيانات في جميع الأنوية الأخرى التي قد تكون لديها نسخة قديمة.
  • تنسيق جدولة فعال بين النوى: يجب أن تعمل خوارزميات الجدولة على توزيع العمل بذكاء بين الأنوية، مع الأخذ في الاعتبار تآلف المعالج (Processor Affinity) لتقليل فقدان أداء الذاكرة المخبأة.

أنظمة التشغيل الحديثة مثل Linux وWindows تقوم بتطبيق خوارزميات هجينة تراعي هذه القضايا، محاولة تحقيق أفضل توازن بين توازن الحمل وأداء الذاكرة المخبأة.

مثال: CFS في Linux (Completely Fair Scheduler)

  • الوصف: CFS هي خوارزمية الجدولة الافتراضية في نواة Linux. إنها ليست خوارزمية تقليدية تعتمد على الطوابير أو الفترات الزمنية الثابتة، بل هي جدولة "عادل تمامًا" (Completely Fair).
  • كيف تعمل:
    • تُعامل CFS جميع العمليات على أنها "أشجار حمراء سوداء" (Red-Black Tree) بناءً على وقت التنفيذ الافتراضي (Virtual Runtime) لكل عملية.
    • الهدف هو توزيع وقت المعالج بالتساوي بين جميع العمليات النشطة بناءً على "وزنها" (Niceness Value). العمليات ذات الأولوية الأعلى (Niceness الأقل) تحصل على حصة أكبر من وقت المعالج، ولكن بطريقة تضمن أن جميع العمليات تتقدم.
    • تُقلل CFS من الحاجة إلى تبديل السياق المفرط وتحاول الحفاظ على تآلف المعالج لتحسين أداء الذاكرة المخبأة.
  • المزايا: عدالة عالية، استجابة جيدة للأنظمة التفاعلية، كفاءة في استخدام الموارد.

📘 قراءة موسعة: Linux CFS Scheduler – GeeksforGeeks


3️⃣ الجدولة في أنظمة الزمن الحقيقي (Real-Time Scheduling)

تختلف أنظمة الزمن الحقيقي (Real-Time Systems) بشكل كبير عن أنظمة التشغيل العامة في متطلباتها. في هذه الأنظمة، لا يكفي أن تكون النتائج صحيحة، بل يجب أن تكون صحيحة في غضون مهلة زمنية محددة بدقة.

📌 ما هو النظام الزمني الحقيقي؟

هو نظام يجب أن يستجيب للأحداث أو المدخلات ضمن زمن محدد مسبقًا بدقة صارمة. عدم الوفاء بهذه المهلة الزمنية قد يؤدي إلى فشل النظام أو عواقب وخيمة.

  • أمثلة على أنظمة الزمن الحقيقي:
    • أنظمة الملاحة الجوية والتحكم في الطائرات: يجب أن تستجيب الأوامر في جزء من الثانية لضمان السلامة.
    • أنظمة التحكم في المصانع والروبوتات الصناعية: أي تأخير قد يؤدي إلى أخطاء في الإنتاج أو حوادث.
    • أنظمة القلب الصناعي والأجهزة الطبية الحيوية: تتطلب استجابة فورية للحفاظ على حياة المريض.
    • أنظمة الفرامل المانعة للانغلاق (ABS) في السيارات: يجب أن تتفاعل بسرعة فائقة لتجنب الحوادث.

🧭 نوعا الجدولة الزمنية الحقيقية:

النوع الوصف الأهمية
Hard Real-Time (زمن حقيقي صارم) عدم الوفاء بالمهلة الزمنية المحددة يُعتبر فشلاً كارثيًا للنظام. يجب ضمان الوفاء بالمهلة بنسبة 100%. يُستخدم في التطبيقات الحيوية التي تتطلب أقصى درجات الموثوقية والسلامة (مثل أنظمة التحكم في الطائرات أو المفاعلات النووية).
Soft Real-Time (زمن حقيقي مرن) يمكن تجاوز المهلة الزمنية في بعض الأحيان، ولكن مع تدهور في الأداء أو جودة الخدمة. النظام لا يفشل بالكامل، ولكنه يقدم أداءً أقل من الأمثل. يُستخدم في التطبيقات التي تتطلب استجابة سريعة ولكن يمكنها تحمل بعض التأخير العرضي (مثل أنظمة الوسائط المتعددة، ألعاب الفيديو).

📍 خوارزميات الجدولة الزمنية الحقيقية:

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

  • أ. Rate Monotonic Scheduling (RMS) - جدولة المعدل الرتيب:
    • الوصف: هي خوارزمية جدولة ثابتة الأولوية (Static Priority). يتم تعيين أولوية أعلى للعمليات (المهام) التي لديها دورية (Period) أقصر. بمعنى آخر، المهمة التي يجب أن تتكرر بشكل أسرع (لها مهلة زمنية أقصر) تحصل على أولوية أعلى.
    • النوع: استباقية.
    • المزايا: بسيطة في التنفيذ، يمكن تحليل قابليتها للجدولة (Schedulability Analysis) لتحديد ما إذا كان النظام سيتمكن من الوفاء بجميع المهل الزمنية.
    • العيوب: لا تُعد مثالية دائمًا، وقد لا تستغل المعالج بكفاءة عالية (استخدام المعالج الأقصى المضمون هو حوالي 69% لعدد كبير من المهام).
    • مناسب لـ: Hard Real-Time Systems.

    🧪 مثال 1: جدولة RMS

    لنفترض العمليات التالية بخصائصها:

    العمليةالزمن الدوري (Period - ms)زمن التنفيذ (Execution Time - ms)
    P1102
    P2204
    P3505

    الجدولة باستخدام RMS:

    • P1 لديها أقصر زمن دوري (10ms)، لذا تحصل على أعلى أولوية.
    • P2 لديها زمن دوري (20ms)، تحصل على أولوية متوسطة.
    • P3 لديها أطول زمن دوري (50ms)، تحصل على أقل أولوية.

    سيقوم الجادول بتنفيذ P1 أولاً، وإذا أصبحت P2 أو P3 جاهزة أثناء تنفيذ P1، فستستمر P1 لأنها ذات أولوية أعلى. إذا انتهت P1، فسيتم تنفيذ P2 (إذا كانت جاهزة) قبل P3.

  • ب. Earliest Deadline First (EDF) - أقرب موعد نهائي أولاً:
    • الوصف: هي خوارزمية جدولة ديناميكية الأولوية (Dynamic Priority). يتم تعيين الأولوية للعملية التي لديها أقرب موعد نهائي (Deadline) للتنفيذ. تتغير أولوية العمليات أثناء التنفيذ بناءً على مدى قرب موعدها النهائي.
    • النوع: استباقية.
    • المزايا: تُعد مثالية من حيث استغلال المعالج (يمكنها استغلال المعالج بنسبة 100% في بعض السيناريوهات).
    • العيوب: أكثر تعقيدًا في التنفيذ من RMS، وقد يكون تحليل قابليتها للجدولة أصعب.
    • مناسب لـ: Hard و Soft Real-Time Systems.

4️⃣ أمثلة من أنظمة تشغيل مختلفة

تُطبق أنظمة التشغيل الحديثة، سواء كانت عامة الغرض أو مخصصة للزمن الحقيقي، مجموعة متنوعة من استراتيجيات الجدولة لتلبية متطلبات بيئاتها الخاصة.

النظام وصف الجدولة
Linux

يستخدم Completely Fair Scheduler (CFS) كجدول افتراضي للعمليات العادية، والذي يهدف إلى تحقيق العدالة في توزيع وقت المعالج.

يدعم Linux أيضًا جدولة الزمن الحقيقي (Real-Time Scheduling) بخيارات مثل SCHED_FIFO (First-In, First-Out) و SCHED_RR (Round Robin) للمهام ذات الأولويات الصارمة. هذه الخيارات تضمن أن المهام الزمنية الحقيقية تحصل على المعالج قبل المهام العادية.

Windows

يستخدم Windows نظام جدولة يعتمد على Multilevel Feedback Queues مع 32 مستوى أولوية. يُعطي أولوية أعلى للخيوط التي تقوم بعمليات I/O أو التي تفاعلت مؤخرًا مع المستخدم.

يدير Windows العمليات الزمنية الحقيقية من خلال مستويات أولوية حقيقية (Real-Time Priorities) التي تكون أعلى من الأولويات العادية، مما يضمن استجابة سريعة للتطبيقات الحساسة للوقت.

Unix SVR4

يستخدم مستويات متعددة من الأولويات (Multilevel Priority Queues). يتم تقسيم العمليات إلى فئات (مثل: زمن حقيقي، نظام، تفاعلي، دفعي) وكل فئة لها نطاق أولويات خاص بها. يتم استخدام خوارزميات مختلفة داخل كل فئة (مثل Round Robin للعمليات التفاعلية).

يُعطي الأولوية القصوى لعمليات الزمن الحقيقي، ثم عمليات النظام، وهكذا.

FreeBSD

يعتمد على نموذج ULE Scheduler للجدولة المتعددة الأنوية. يهدف ULE إلى تحسين أداء الذاكرة المخبأة (Cache) من خلال الحفاظ على تآلف المعالج (Processor Affinity) قدر الإمكان، مع تحقيق توازن جيد في تحميل الأنوية.

يستخدم طوابير جاهزة لكل نواة، مع آليات سحب (Pull) للعمليات من الأنوية الأخرى إذا كانت نواة ما خاملة.

📘 اقرأ المزيد من المصادر الرسمية:


5️⃣ مقارنات بين الجدولة

لفهم الفروق الدقيقة بين أنواع الجدولة المختلفة في الأنظمة الحديثة، من المفيد مقارنة جوانبها الرئيسية:

الجانب جدولة SMP (المعالجات المتماثلة) جدولة Multicore (تعدد الأنوية) جدولة Real-Time (الزمن الحقيقي)
عدد المعالجات/الأنوية معالجات متعددة منفصلة أنوية متعددة داخل نفس الشريحة يمكن أن تكون أحادية أو متعددة المعالجات/الأنوية
التحديات الرئيسية تحميل متوازن، تنافس على الطابور المشترك، تآلف المعالج. مشاركة الذاكرة المؤقتة (Cache Coherence)، تآلف المعالج، توزيع الحمل بين الأنوية. الاستجابة في وقت معين، ضمان المهل الزمنية، قابلية التنبؤ.
الهدف الأساسي زيادة الإنتاجية الكلية للنظام، تقليل وقت الإنهاء. تحسين الأداء الكلي للنظام مع الاستفادة من الذاكرة المخبأة المشتركة. ضمان أن المهام تُنفذ في غضون مهل زمنية صارمة أو مرنة.
مثال شائع خوادم الويب، قواعد البيانات الكبيرة. أجهزة الكمبيوتر المكتبية والمحمولة الحديثة (معالجات Ryzen/Intel). أنظمة الطيران، التحكم الصناعي، الأجهزة الطبية.
أمثلة خوارزميات Round Robin (مع طابور مشترك)، SJF (مع توازن الحمل). CFS (Linux)، Multilevel Feedback Queues (Windows). Rate Monotonic Scheduling (RMS)، Earliest Deadline First (EDF).

ملخص الوحدة

في هذه الوحدة، استكشفنا تعقيدات **جدولة المعالجات المتعددة (Multiprocessor Scheduling)** و**تعدد الأنوية (Multicore Scheduling)**، حيث تُصبح مهمة توزيع العمليات بين وحدات المعالجة المتعددة أمرًا حيويًا لتحقيق الأداء الأمثل. تعرفنا على أنواع المعالجات (SMP و AMP) ونماذج الجدولة المختلفة، بالإضافة إلى أهمية مفهوم **تآلف المعالج (Processor Affinity)**. كما تعمقنا في **جدولة أنظمة الزمن الحقيقي (Real-Time Scheduling)**، وفهمنا الفروق بين الأنظمة الصارمة والمرنة، واستعرضنا خوارزميات مثل RMS و EDF التي تضمن الوفاء بالمهل الزمنية. وأخيرًا، قمنا بمقارنة كيفية تطبيق هذه المفاهيم في أنظمة تشغيل رائدة مثل Linux وWindows. الفهم العميق لهذه المفاهيم يُمكن الطالب من تصميم وتحليل أنظمة حوسبة عالية الأداء أو زمنية حساسة، وهو أمر بالغ الأهمية في عالم التكنولوجيا اليوم.