📚 استنادًا إلى الفصل العاشر من كتاب: Operating Systems: Internals and Design Principles – William Stallings – الإصدار التاسع
مع تطور البنية الحاسوبية، أصبحت معظم الأنظمة الحديثة تعتمد على أكثر من معالج مركزي واحد (CPU) أو أكثر من نواة (Core) داخل نفس المعالج. هذا التطور يطرح تحديات جديدة ومعقدة لجدولة العمليات، حيث لم يعد الهدف هو اختيار العملية التالية لمعالج واحد، بل كيفية توزيع العمل على عدة معالجات لزيادة الأداء العام للنظام.
| النموذج | الوصف | المزايا/العيوب |
|---|---|---|
| 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) وتآلف المعالج.
تُعد المعالجات متعددة الأنوية (Multicore Processors) هي السائدة حاليًا، حيث تدمج عدة أنوية معالجة (CPU Cores) على شريحة واحدة. على الرغم من أنها تشبه أنظمة المعالجات المتعددة (SMP) في وجود عدة وحدات تنفيذ، إلا أنها تختلف في أنها تشترك في بعض مستويات الذاكرة المخبأة (Cache) وبعض الموارد الأخرى داخل الشريحة.
أنظمة التشغيل الحديثة مثل Linux وWindows تقوم بتطبيق خوارزميات هجينة تراعي هذه القضايا، محاولة تحقيق أفضل توازن بين توازن الحمل وأداء الذاكرة المخبأة.
📘 قراءة موسعة: Linux CFS Scheduler – GeeksforGeeks
تختلف أنظمة الزمن الحقيقي (Real-Time Systems) بشكل كبير عن أنظمة التشغيل العامة في متطلباتها. في هذه الأنظمة، لا يكفي أن تكون النتائج صحيحة، بل يجب أن تكون صحيحة في غضون مهلة زمنية محددة بدقة.
هو نظام يجب أن يستجيب للأحداث أو المدخلات ضمن زمن محدد مسبقًا بدقة صارمة. عدم الوفاء بهذه المهلة الزمنية قد يؤدي إلى فشل النظام أو عواقب وخيمة.
| النوع | الوصف | الأهمية |
|---|---|---|
| Hard Real-Time (زمن حقيقي صارم) | عدم الوفاء بالمهلة الزمنية المحددة يُعتبر فشلاً كارثيًا للنظام. يجب ضمان الوفاء بالمهلة بنسبة 100%. | يُستخدم في التطبيقات الحيوية التي تتطلب أقصى درجات الموثوقية والسلامة (مثل أنظمة التحكم في الطائرات أو المفاعلات النووية). |
| Soft Real-Time (زمن حقيقي مرن) | يمكن تجاوز المهلة الزمنية في بعض الأحيان، ولكن مع تدهور في الأداء أو جودة الخدمة. النظام لا يفشل بالكامل، ولكنه يقدم أداءً أقل من الأمثل. | يُستخدم في التطبيقات التي تتطلب استجابة سريعة ولكن يمكنها تحمل بعض التأخير العرضي (مثل أنظمة الوسائط المتعددة، ألعاب الفيديو). |
تختلف خوارزميات الجدولة في أنظمة الزمن الحقيقي عن الخوارزميات العامة، حيث تركز على ضمان الوفاء بالمهل الزمنية بدلاً من مجرد تحسين متوسط الأداء.
🧪 مثال 1: جدولة RMS
لنفترض العمليات التالية بخصائصها:
العملية الزمن الدوري (Period - ms) زمن التنفيذ (Execution Time - ms) P1 10 2 P2 20 4 P3 50 5 الجدولة باستخدام RMS:
- P1 لديها أقصر زمن دوري (10ms)، لذا تحصل على أعلى أولوية.
- P2 لديها زمن دوري (20ms)، تحصل على أولوية متوسطة.
- P3 لديها أطول زمن دوري (50ms)، تحصل على أقل أولوية.
سيقوم الجادول بتنفيذ P1 أولاً، وإذا أصبحت P2 أو P3 جاهزة أثناء تنفيذ P1، فستستمر P1 لأنها ذات أولوية أعلى. إذا انتهت P1، فسيتم تنفيذ P2 (إذا كانت جاهزة) قبل P3.
تُطبق أنظمة التشغيل الحديثة، سواء كانت عامة الغرض أو مخصصة للزمن الحقيقي، مجموعة متنوعة من استراتيجيات الجدولة لتلبية متطلبات بيئاتها الخاصة.
| النظام | وصف الجدولة |
|---|---|
| Linux |
يستخدم Completely Fair Scheduler (CFS) كجدول افتراضي للعمليات العادية، والذي يهدف إلى تحقيق العدالة في توزيع وقت المعالج. يدعم Linux أيضًا جدولة الزمن الحقيقي (Real-Time Scheduling) بخيارات مثل |
| 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) للعمليات من الأنوية الأخرى إذا كانت نواة ما خاملة. |
📘 اقرأ المزيد من المصادر الرسمية:
لفهم الفروق الدقيقة بين أنواع الجدولة المختلفة في الأنظمة الحديثة، من المفيد مقارنة جوانبها الرئيسية:
| الجانب | جدولة 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. الفهم العميق لهذه المفاهيم يُمكن الطالب من تصميم وتحليل أنظمة حوسبة عالية الأداء أو زمنية حساسة، وهو أمر بالغ الأهمية في عالم التكنولوجيا اليوم.