أنظمة التشغيل للأنظمة المدمجة Embedded operating system


#1

بعد أن تعرفنا في مقال سابق عن ما هي الأنظمة المدمجة و مدى انتشارها و لما يتميز من يعملون بهذا المجال عن أي مبرمج عادي …

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

و في حقيقة الأمر فإن أفضل ما وقعت عليه عيني عند إعدادي لهذا المقال من شرح مبسط لأنظمة التشغيل الخاصة بالأنظمة المدمجة كان ما تناوله د. أحمد العرباوي في الجزء الأول من سلسلة Linux for embedded systems و التي أنصحكم بمتابعتها بشدة … و لذلك فإن مجموعة المقالات الأولى التي تتناول أنظمة التشغيل للأنظمة المدمجة لن تكون سوى تفريغ لمحتوى الفيديوهات التي قدمها د.أحمد العرباوي في هذا الموضوع ثم ننتقل لاحقا لإضافة مقالات أخرى إضافية من مصادر أخرى لتتضح الصورة كاملة أمامكم فلنبدأ على بركة الله …

بداية فإن أنظمة التشغيل بالنسبة للمستخدم العادي لا تعني سوى مجرد الـ interface أو ما يسمى بالـ Front-end مثل الـ interface الخاصة بالـ Windows, Linux, Mac. أما الـ developer فيهتم أكثر بالـ Core الخاص بنظام التشغيل أو ما يسمى بالـ Kernel

يقوم الـ Kernel بمجموعة من الوظائف في الـ Background بعضها لخدمة الـ Hardware الخاص بنظام التشغيل و بعضها لخدمة الـ Application التي تعمل على هذا الـ Hardware.

يتركب هيكل النظام المدمج من الأجزاء الخاصة بالـ HW. مثل الـ processor, Memory, Storage, peripherals, I/O devices أما أول عتصر يبدأ الـ SW. بالتعامل معه عند حدوث عملية الـ boot up للـ HW. هو الـ boot loader initialization و وظيفته هي عمل initialization أو Start-up للـ HW. و عندما يحدث initialization لكل مكونات الـ HW. و بالتالي يعمل نظام التشغيل فينتهي الدور الخاص به و يبدأ نظام التشغيل في تولي زمام الأمور .

و لكي يتمكن نظام التشغيل من التواصل مع كل مكون من مكونات الـ HW. يحتاج لما يسمى بالـ Device drivers و هي عبارة عن مجموعة من الـ Modules يتعامل كل منها مع مكون مختلف من مكونات الـ HW. ليعطي في النهاية صلاحية لنظام التشغيل للتحكم بهذا المكون من الـ HW.

بعد ذلك يكون نظام التشغيل في حاجة للتعامل مع الـ Applications المختلفة و التي بدورها عادة لا تتعامل مع الـ Kernel مباشرة و يكون فيما بينهم كحلقة وصل ما يسمى بالـ C library بمعنى أنه عند حاجة الـ Application لآدء function معينة تقوم بها الـ Kernel كطباعة جملة معينة على الشاشة أو أي function أخرى فيقوم الـ Application بعمل call أو استدعاء للـ function المطلوبة من الـ C library و تبدأ بعد ذلك الـ C library بالتواصل مع الـ Kernel بإستخدام ما يسمى بالـ System call و بالتالي يقوم الـ Kernel بالوظيفة المطلوبة منه و في بعض الأحيان يمكن للـ Application أن يتواصل مباشرة مع الـ Kernel بدون استخدام الـ C library.

و في الصورة التالية وصف للهيكل التركيبي للأنظمة المدمجة

ننتقل الآن للحديث عن الأدوار التي يقوم بها نظام التشغيل :

1- User management

حيث تسمح الـ Kernel لأكثر من مستخدم بالتعامل معها و لكل منهم بياناته الخاصة و امتيازات خاصة به فقط. و بالتأكيد هناك الـ Master user/ Admin و الذي يملك كافة الصلاحية على النظام.

امتيازات كل مستخدم هي التي تحدد حقوقه في التعامل مع البينات الخاصة به و البيانات الخاصة بالمستخدمين الآخرين.

و تقوم الـ Kernel بإدارة هذه الإمتيازات و حماية بيانات كل مستخدم من الوصول إليها من المستخدمين الآخرين ممن ليس لهم الحق بذلك.
و كذلك تقوم الـ Kernel بإدارة البيئة أو مساحة العمل الخاصة بكل مستخدم للنظام.

2- Process management

حيث تسمح الـ Kernel لنظام التشغيل بتشغيل أكثر من Application أو Process في نفس الوقت و كل Application أو Process منها يظن أنه يمتلك كافة موارد النظام من processor, memory, storage, I/O devices و كل Process قد يحتوي على أكثر من Thread يعمل معا على التوازي.

و تملك الـ Kernel ما يسمى بالـ scheduler و هو ما يقوم بتحديد الوقت اللازم لكل Process أو Thread يعمل بشكل محدد مسبقا ليتمكن نظام التشغيل من تنفيذ أكثر من وظيفة في نفس الوقت أو ما يسمى بالـ Multitasking.
أما تقدير و ترتيب الوقت الذي تستهلكه كل process يعتمد على ما يدعى بـ Scheduling algorithm.

هناك عدة طرق مختلف لعملية الـ Scheduling أشهرها هي round robin, priority based scheduling.

يمكن للـ process أن تقوم بعمل block لبعض الـ events مثل الـ HW. job completion و تقوم بعض الـ Processes الأخرى بالإحلال محلها في الـ processor cycle.

و يمكن للـ Scheduler أن يكون Preemptive بمعنى أن المهام ذات الأهمية العليا يجوز لها عمل interrupt أو إيقاف عمل المهام الأخرى الأقل في الأهمية قبل اكتمالها. أو يكون Non-preemptive بمعنى أنه بمجرد بدأ الـ Process فيجب أن تكتمل قبل أن تبدأ أي Process أخرى بالعمل.

3- Memory management

عند قيام الـ Processor بآداء أكثر من Process في نفس الوقت فعلى كل Process منها أن تمتلك Memory خاصة بها. و لهذا تقوم الـ Kernel بالعمل مع الـ Processor لتوفير وظيفتين في غاية الأهمية و هما :

** Memory protection unit - MPU

و هي مسؤولة عن حماية الـ Memory الخاصة بكل Process من التعرض لها من أي Process أخرى تعمل.

مع الأخذ في الإعتبار بأن الـ processor يجب أن يحتوي على دعم لخاصية الـ Memory protection أولاً قبل ذلك لكي تتمكن الـ Kernel من عمل Memory Protection لاحقاً.

** Memory management unit - MMU

و هي مسؤولة عن جعل كل Process تتعامل مع الـ Memory الخاصة بها و كأنها تماما تملك الـ memory الخاصة بالنظام بأكمله

مع الأخذ في الإعتبار هنا أيضا أن الـ Processor يجب أن يكون داعماً لخاصية الـ MMU لكي يتمكن الـ Kernel من استخدامها كما هو الحال تماما مع الـ MPU و معنى أنه يكون داعم لخاصية معينة أي يكون به من الداخل HW. Module مخصص لهذه الخاصية.

4- File system management

ذكرنا في الجزء الأول الهيكل المكون للنظام المدمج و ذكرنا أنه من ضمن أجزاء الـ HW. الموجودة هناك ما يسمى بالـ Storage devices و هي تمثل في جهاز الكمبيوتر العادي بالـ Hard disks و من الممكن أن يتواجد أكثر من واحد منها و كل منها بداخله ما يسمى بالـ Partitions و هناك أيضا CD/DVD partition و الـ Flash desk partition و كل ذلك يدعى بالـ Storage devices و وظيفة الـ Kernel هنا هي عمل Interface بينه و بين الـ applications لتتمكن من التعامل مع هذه الـ Storage devices ويكأنها Files و Directories و بذلك يسهل التعامل معها.

5- Power management

و وظيفة الـ Kernel هنا التحكم في استهلاك الـ Power فيما يتعلق بالوظائف المختلفة التي يقوم بها الـ Processor بمعنى أنها يمكنها وضع الـ Processor في حالة الـ sleep mode ان لم يكن عليه حمل لتخفيف استهلاك الطاقة و التي بدورها من أهم متطلبات أي نظام مدمجا نظراً لكون معظم الأنظمة المدمجة تعمل بالبطارية.
و أيضا تقوم الـ Kernel بالتحكم في الـ Frequency أو الـ Clock rate تبعا لمقدار الحمل الموجود على الـ Processor فكلما خفت الأحمال على الـ Processor يتم تقليل الـ Clock rate و بالتالي يقل استهلاك الطاقة أيضا.

6- I/O Interrupt handling

يتصل الـ Processor بعدد كبير من الأجهزة التي تعمل سواء كدخل أو خرج و بعض هذه الأجهزة قد يحتاج أحينا لعمل Interrupt للحصول على انتباه الـ Processor لأمر ما … لذا تكون الـ Kernel مسؤولة عن معالجة اشارات الـ Interrupt القادمة من وحدات الإدخال و الإخراج المختلفة.

7- Timers & Time related tasks

احساس الـ System بالوقت يكون build in داخل الـ Kernel بمعنى أن الـ Processor تصل إليه مجموعة من الـ Interrupts أو الـ Ticks كل فترة محددة من الوقت و المسؤول عن معالجة هذه الـ Ticks لمعرفة الوقت هي الـ Kernel . و تعد الفترة المحددة بين الـ Ticks هي وحدة الوقت عن الـ system أي أنها بزيادتها و نقصانها يتم التحكم في الـ Resolution الخاصة بالـ system ، فعلى سبيل المثال لو كانت الفترة بين وصول الـ Ticks هي 100ms تكون وحدة الوقت بالـ Kernel هي أيضاً 100ms بمعنى أن هذا النظام لا يمكنه تنفيذ أمر بالإنتظار لمدة 150ms على الإطلاق فهو لا يقدر إلا على الانتظار لفترة 100ms أو 200ms.

و لحل هذه المشكلة يتم زيادة الـ Resolution الخاصة بالـ System من خلال جعل الفترة بين الـ Ticks و بعضها أقل … لكن هذا الحل يعد ميزة و عيب في نفس الوقت فالميزة الموجودة به ي زيادة دقة النظام كما وضحنا و لكن العيب هنا هو زيادة عدد الـ Interrupts التي تصل إلى الـ Processor لذا لا يجب المبالغة في زيادة دقة النظام. و بنفس الفكرة كذلك يمكن للـ Kernel تحديد الساعة و التاريخ الخاصة باليوم .

8- Networking & Communication

حيث تكون الـ Kernel مسؤولة عن ادارة وسائل الإتصال المختلفة بالنظام بإحتوائها على الـ Software stacks الخاصة ببروتوكولات الاتصال مثل الإتصال بالشبكات من خلال الأسلاك أو لاسلكيا بدون أسلاك ، أو استخدم بروتوكولات الاتصال المختلفة الأخرى مثل الـ USB, SDIO, Serial, SPI, I2C, NFC, WIFI إلى آخره من هذه البروتوكولات المختلفة.

و بذلك نكون فد تناولنا الوظائف الأساسية المسؤول عنها نظام التشغيل في أي نظام مدمج و بالتأكيد هناك الكثير و الكثير من الوظائف الأخرى لكننا قد اكتفينا بأهم هذه الوظائف.

هو هل بالضروري وجود نظام تشغيل في أي نظام مدمج أم لا ؟

و ما هي العوامل الي يتوقف عليها اختيارنا لنظام التشغيل المناسب ؟

بداية فإنه لا يشترط وجود نظام تشغيل في كافة الأنظمة المدمجة ، فالأنظمة المدمجة البسيطة ليست في حاجة حقيقية إلى نظام تشغيل و عمل هذه الأنظمة يتعلق مباشرة بالـ HW. المكونة منه فقط كما أنا الكود البرمجي الخاص بالـ boot loader أو الـ Kernel لا يتطلب وجود نظام تشغيل.

عادة ما يتم بناء و تطوير هذه الأنظمة البسيطة بإستخدام لغة التجميع و المعروفة بالـ Assembly أو بإستخدام لغة الـ C كذلك. و لا تدعم هذه الأنظمة إمكانية القيام بعدة وظائف في نفس الوقت أو عدد من الـ Processes معا فكل ما يتواجد حقيقة هو مجرد Loop بسيطة تعمل على تنفيذ وظيفة تلو الأخرى تبعاً للبرنامج المكتوب.

كما أنه لا يوجد دعم أو امكانية لإستخدام الـ Timers فما يتواجد حقيقة هو مجرد بعض الـ Delay loops و تخزين المعلومات في الـ Flash memory يتم بطريقة بسيطة و بدائية و تعد هذه الأنواع من الأنظمة المدمجة محدودة بشكل كبير في الإمكانيات.

حسنا فلنفترض أننا اكتشنا أننا في حاجة لاستخدام نظام تشغيل في النظام المدمج الذي نعمل عليه فأي نظام تشغيل سنختار ؟

أو دعونا نعرف أولا ما هي العوامل التي تحكمنا عند اختيار نظام التشغيل المناسب ؟

1- Cost

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

أولا >> أنظمة التشغيل التجارية ( Commercial Operating systems )

و ينقسم هذا النوع بدوره إلى عدة نماذج :

1) Fixed price OS. license

أي تكون رخصة استخدام هذا النوع من أنظمة التشغيل ثابتة و محددة القيمة و يتم بيعها بأكثر من صورة :

  • يتم بيع رخصة لكل عائلة أو نوع من الأجهزة التي تستخدم نظام التشغيل.
  • يتم بيع رخصة لكل نوع من أنواع الـ Processors المستخدمة.
  • يتم بيع رخصة على كل خط انتاج خاص بنوع معين من المنتجات المستخدم فيها نظام التشغيل … فلنفترض ان شركة ما مثل شركة Cisco ستقوم بشراء نظام تشغيل ما -بالرغم من ان Cisco تقوم بإنتاج أنظمة تشغيل خاصة بها و لكن لنفترض ذلك- فبالتالي فإن سلسلة انتاج الـ Routers لها رخصة خاصة بها و بسعر مختلف عن الرخصة الخاصة بسلسلة انتاج الـ Access points و هكذا تباعا …

2) Per seat license for associated tools

فبفرض أن هناج مجموعة من المطورين سيعملون على استخدام نظام التشغيل هذا فسيتم احتساب تكلفة لرخصة استخدام نظام التشغيل مع الأدوات المختلفة المستخدمة مع نظام التشغيل مثل الـ Compilers, Debuggers و في هذا الحالة يتم احتساب التكلفة Per seat أي بناء على عدد المطورين الموجودين بمعنى أنه إذا كان كل مطور يملك نسخة من نظام التشغيل فيتم احتساب ثمن رخصة باستخدام نظام التشغيل لكل مطور.

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

3) License fee per unit - Royalty cost

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

و هناك العديد و العديد من النماذج المختلفة و عليك اختيار النموذج المناسب لك و للمنتج الذي تعمل عليه.

ثانيا >> أنظمة التشغيل المجانية ( Free operating systems )

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

و لكن أحيانا ما تكون التكلفة بشكل غير مباشر … فالشركة المنتجة توفر نظام التشغيل بشكل مجاني تماما و لكن الدعم الفني لمستخدمي هذا النظام لا يكون مجاني و هناك العديد من الشركات القائمة على هذا المنهج مثل شركة Red hat فهي توفر لك نظام التشغيل Linux مجانا تمام و الدعم الفني لمستخدمي النظام لا يكون بالمجان.

و كذلك هناك بعض الشركات توفر خدمات أخرى بشكل غير مجاني مثل عمل Porting لنظام التشغيل على Platform مختلف خاص بك … و أحياناً ما يكون هناك نسخات مجانية لنظام التشغيل و كذلك بعض النسخات الغير مجانية من نفس النظام حيث يكون مضافاً إليها بعض الخصائص أو الأدوات الأخرى و قد تكون ذات سرعة أكبر فعلى سبيل المثال نظام الـ Fedora الذي تنتجه شركة Red hat مجاني تماما و لكن هناك نسخة منه تدعى Fedora enterprise غير مجانية.

و مع مرور الوقت تبدأ العديد من الأدوات المجانية الخاصة بنظام التشغيل في الظهور و يزداد حجم المجتمع المستخدم لنظام التشغيل هذا و بالتالي تقل الحاجة لدفع تكاليف الدعم الفني للشركة المنتجة لنظام التشغيل و من هذه الأنظمة Linux, Ecos, uClinux

و بهذا نكون قد انتهينا من شرح العامل الأول الذي يحكمنا عند اختيار نظام التشغيل المناسب.

2- Hardware requirements

لا يكفي فقط اختيار أي نظام تشغيل بسعر مناسب فلكل نظام تشغيل متطلبات مختلفة من الـ HW. فبعضها يتطلب وجود 32 bit processor و البعض يكتفي بـ 8 bit processor و هناك أنظمة تشغيل تتطلب وجود Memory Management Unit و التي تحدثنا عنها في الجزء السابق و من هذه الأنظمة الـ Linux فلا يمكن وضعه على Processor لا يحتوي على MMU لذا نحتاج لإستخدام Patches أو Versions مختلفة من الـ Linux لأستخدامها مع هذا الـ Processor و البعض الآخر لا يتطلب ذلك فلكل نظام تشغيل حد أدنى من متطلبات الـ HW. التي ينبغي توفرها لكي يعمل بشكل سليم.

و قد يكون له متطلبات من حيث حجم الذاكرة المطلوب و كذلك فإن النظام المدمج أو الـ Hardware نفسه قد يكون له متطلبات خاصة يجب توفرها أولا في نظام التشغيل مثل وجود دعم للـ USB 2.0 أو دعم للـ TCP/IP و هكذا

3- Portability

ربما نحتاج مستقبلاً إلى الإنتقال لاستخدام عائلة أخرى من الـ Processor فكل نظام تشغل يدعم عدد محدد من الـ Processors المختلفة و يجب التخطيط لهذه الخطوة من البداية و قبل اختيار نظام التشغيل.

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

و يمكن تحقيق ذلك من خلال كون نظام التشغيل داعماً للواجهات الرسومية القياسية المختلفة - Standard APIs - مثل الـ POSIX بمعنى أنه عند كتابة Function ما فإن الـ API الخاص بها يجب أن يشبه الـ API الخاص بأنظمة التشغيل الأخرى فبالتالي يمكن تغيير نظام التشغيل مع تعديلات بسيطة في الكود البرمجي المكتوب مسبقا و لا يقتصر الأمر على تغيير نظام التشغيل فليس من المنطقي أن اتعلم طريقة التعامل مع API جديد في كل مرة أقوم بالعمل على مشرو جديد أو نظام تشغيل جديد لذلك فمن الهام جدا أن يدعم نظام التشغيل للـ Standard APIs فيما تم تعريفه بالـ Portability .

4 - Foot-print

و المقصود بها هو حجم الـذاكرة المطلوب توفره لكي يتمكن نظام التشغيل من العمل بفاعلية فبعض أنظمة التشغيل لا تحتاج سوى مساحة صغيرة جدا من الذاكرة قد تكون على سبيل المثال 2KB فقط في حين أن البعض الآخر قد يحتاج إلى ذاكرة كبيرة مكونة من عدة Mega Bytes.

و بذلك فإن حجم الذاكرة الخاصة بالنظام المدمج تصبح عامل مؤثر و يجب مراعاته عند اختيار نظام التشغيل المناسب لهذا النظام المدمج.

5- Support of Real-time

عادة ما تكون الأنظمة المدمجة مقيدة بالعمل في الـ Real-time أي تتطلب وجود RTOS (Real Time Operating System) و هذا لا يعني دائما أن يكون نظام التشغيل سريع جدا في الإستجابة و تنفيذ أي أمر و لكن المطلوب هنا أن يكون الوقت الخاص بإستجابة نظام التشغيل يمكن توقعه و تحديده بدقة.

فعلى سبيل المثال فأثناء كتابة الكود الخاص بالنظام المدمج يتم احتساب الزمن المتوقع ان يستغرقه نظام التشغيل في تنفيذ أمر ما و ليكن وجد أنه 2msec. فمن غير المقبول أن يكون نظام التشغيل سريع جدا في بعض الأحيان فينتهي من تنفيذ هذا الأمر في 1msec. و في أحيان أخرى يكون بطئ بعض الشئ فيستغرق تنفيذ الأمر 3msec.

فهنا تكمن أهمية الـ RTOS في كون زمن استجابة هذا النوع من الأنظمة يمكن توقعه و تحديده بدقة و بالتالي نضمن فعالية هذه الأنظمة في حالة وجود Hard real time constraints.

و هذا يعني أيضا أنه ليس من المحتمل و غير مرغوب بالتأكيد أن يقوم نظام التشغيل فجأة بالعمل على بعض المهام الغير متوقعة في الـ Background مما يؤثر على زمن استجابته و تنفيذه للمهام المحددة و التي يعمل عليها مسبقا.

و المسؤول عن تحديد ما ان كان نظام التشغيل يدعم الـ Real time أم لا هو بعض الخواص الموجودة في تصميم معمارية أو هيكل نظام التشغيل نفسه.

و كذلك نجد أن الـ Scheduler algorithm يجب أن يكون محددا و متوقع … فعلى سبيل المثال لو لم يكن الـ Scheduler داعما للـ Priorities و بفرض أنه يدعم الـ Round robin فهنا تظهر مشكلة كبيرة حيث يستهلك الـ Application المطلوب تنفيذه الـ Processor time بأكمله في حالة أنها تعمل وحدها ولا يوجد أي Application أخرى تعمل معها في نفس الوقت أما في حالة ظهور أي Application أخرى تعمل على الـ Processor فبالتالي و طبقا للـ Round robin algorithm سيتم اقتسام الـ Processor time بين الوظيفتين و اذا ما ظهرت Application جديدة أخرى نجد ان الـ Application الأساسية أصبحت تستهلك فقط 1/3 Processor time و هكذا …

أما إذا كان الـ Scheduler algorithm يدعم الـ Priorities فبالتالي مهما أضفت مهام أخرى للـ Processor فلن تستهلك Process time كبير نظرا لكون الوظيفة الأساسية تكون هنا High priority و الوظائف الأخرى Low priority.

فمن المهم جدا منع أي Process من أن تظهر بشكل عشوائي و غير متوقع مما يؤثر على الوقت المتوقع لتنفيذ الـ Processes الأخرى .

مثال آخر هو الـ Interrupts تظهر عادة بشكل غير متوقع و بالتالي يتوقف الـ Processor عن العمل على المهمة المحددة له و يبدأ في تشغيل الـ Interrupt handler و الحل لهذه المشكلة هو تقليل الوقت المستقطع الذي يأخذه الـ Processor لتنفيذ المهام الأخرى في حالة حدوث Interrupt فيما يعرف بالـ Short Interrupt latency و كذلك يجب مراعاة استخدام Interrupt handler صغير و خفيف مع الوظائف الأخرى اثناء التصميم فلا يسبب ضرر لباقي الـ Applications مما يجعلها تفقد عامل الـ Predictability و لا تكون Real time.

كذلك يجب تقليل الوقت الذي يستغرقه الـ Processor في الإنتقال من وظيفة لأخرى في حالة الـ Multitasking فيما يعرف بالـ Context switch

الخلاصة … لتحقيق الـ Real time يجب توفر عامل السرعة و الـ Predictability و تقليل أي احتمالية ظهور أي أمر آخر بشكل عشوائي.

6- Configurability

عادة ما يدعم نظام التشغيل الكثير من الأمور و الوظائف التي قد لا نحتاج إلى استخدامها تبعا للـ Application الذي نعمل عليه و بالتالي يجب أن تتوفر إمكانية تهيئة نظام التشغيل بما يناسب الـ Application المطلوب أي تكون بعض الوظائف موجودة بشكل اختياري و يتم عمل Enable/Disable لها بما يناسب الـ Application المطلوب و أشياء أخرى يتم التحكم في الـ Size الخاص بها أو المساحة التي تستهلكها من الذاكرة.

و كذلك امكانية التحكم في الـ Tick duration تبعا للـ Application التي يتعامل معها الـ Processor و التي سبق الحديث عنها في الأجزاء السابقة حيث يكون لها مميزاتها و عيوبها في حالة زيادتها و كذلك في حالة تقليلها.

و بالتالي يمكن تشكيل نظام التشغيل بالكامل تبعا للـ Application المطلوب و بعض أنظمة التشغيل تتميز بكونها Highly configurable مثل الـ Linux على سبيل المثال و الهدف النهائي هو تحقيق Foot print أصغر و زيادة سرعة النظام المدمج بوجه عام.

7- Support

بالتأكيد أثناء استخدام نظام التشغيل ستظهر العديد من المشاكل و قد تكون هناك بعض الأمور الخاص بالـ Behavior الخاص بنظام التشغيل غير واضحة و نحتاج إلى بعض المساعدة لمعرفة كيف يتم التحكم بها و هكذا …

لذلك يجب معرفة ما إذا كانت الشركة المنتجة لنظام التشغيل توفر الدعم الكافي له أم لا و ما إذا كان هذا الدعم مجاني أم لا.

و اذا كان حجم الـ Community support الذي يستخدم نظام التشغيل ذلك كبير و بالتالي يسهل الحصول على دعم في حالة مواجهة اي مشاكل متعلقة بنظام التشغيل أم لا … فعلى سبيل المثال قد تجد نظام تشغيل جديد و عند استخدامه لأول مرة تجد أنه جيد جدا و لكنك تكون أول من يستخدم هذا النظام و عند ظهور أي مشكلة سيكون من الصعب جدا معرفة سببها و الحصول على دعم في وقت قصير.

و كذلك يجب الحرص على وجود Documentation جيد من قبل الشركة المنتجة لهذا النظام ليسهل فهمه و التعامل معه لاحقا.

8- Source code

أحيانا ما تكون هناك بعض أنظمة التشغيل Closed source و أخرى Open source و أخرى Hybrid أي يكون جزء من نظام التشغي Closed source و آخر open source.

و بالتأكيد من المهم جدا عند العمل على أي نظام تشغيل أن يكون هذا النظام Open source لكي نتمكن من فهم الـ behavior الخاص بالنظام و نتمكن من تغيير الـ Configurations الخاصة به أو تصليح مشكلة أو Bug موجودة بنظام التشغيل نفسه.

و كذلك في حالة ارتباط الـ Application المطلوبة ببعض تفاصيل نظام التشغيل يجب أن تكون هناك إمكانية لقراءة الكود الخاص بنظام التشغيل أثناء عمل الـ Debugging لذلك فكون نظام التشغيل Open source يعد عامل مهم جدا اثناء اختيار نظام التشغيل المناسب للـ Application المطلوب.

و في النهاية أتمني أن تكون قد استفدت من هذا المقال و لا تنسى أن تشارك به غيرك و لا تحرمنا من الدعاء بظهر الغيب.

منقول من صفحة Embedded Systems Geeks