السلام عليكم
كثيرا ما شاهدنا مواضيع وإقامة مشاريع هنا وهناك ، سواء من داخل المنتدى أو من خارج المنتدى عن تصميم نظام تشغيل .
والسؤال الذي يطرح نفسه ، والمنطقي في مثل هذه الظروف : هل فعلا سينجح المشروع؟
دعنا نأخذ الموضوع من أوله ، ولكن بشكل مبسط حتى لا أطيل:
ما هو نظام التشغيل؟
نظام التشغيل عبارة عن برنامج software مهمته الرئيسية هي أنه يقوم بإدارة الأجهزة الملحقة باللوحة الأم بدلا من الإنسان.
فكما تعلمون جميعا أن الحاسب ليس له فوائد إلا أنه يحسب أسرع من الإنسان.
جيد ، فما هو البرنامج في حد ذاته إذن؟
البرنامج كما نعلم جميعا هو مجرد من سيالات كهربية مخزنة في مكان ما ، وفي كل مرة نريد تشغيل البرنامج فيها ، فإننا نقوم بإطلاق هذه السيالات الكهربية. ومن الممكن أن يقوم الإنسان بفعل هذا بيده (كما كان الأمر في البداية) ولكن كما قلت أن الكمبيوتر سيؤدي ذلك بشكل أسرع.
ما هو الفرق بين برامج التطبيقات ونظام التشغيل؟
البرامج التطبيقية : هي تلك البرامج التي تستخدم أدوات موجودة أصلا ومدعومة من قبل نظام التشغيل نفسه، بمعنى آخر بدون وجود نظام التشغيل لا تستطيع هذه البرامج أن تعمل لأن البنية الأساسية لها غير موجودة.
طيب ، وما هو نظام التشغيل كبرنامج؟
هو عبارة عن برنامج يبدأ عمله أساسا بتعليمات المعالج (مثل الأمر mov.add.divi,) وما إلى ذلك من تلك التعليمات الخاصة بالمعالج.
(ملاحظة: عندما أقول نظام تشغيل أقصد هنا النواة فقط، حيث أن هذا هو المتعارف عليه في الأنظمة المحترمة مثل يونكس)
هل معنى هذا أن معظم نظام التشغيل مكتوب بتعليمات المعالج(الأسيمبلي)؟
والإجابة هي لا.
فعلى سبيل المثال ، نواة اللينوكس نسبة الأسيمبلي فيها حوالي 2% فقط.
وطبعا هي مستخدمة في بعض العمليات الخاصة التي تحتاج سرعة كبيرة في تنفيذها.
وأحب أن أنوه إلى شيء مهم أيضا، وهو أن نواة اللينوكس ليس نظام كامل ، ولكنه عقل نظام التشغيل والذي يدير كل العمليات من خلاله . وتلحق به بعض الأدوات والبرامج المساعدة حتى يستطيع المستخدم أن يتعامل معه ، إلى غير أن النواة لا تستطيع أن تقوم بذاتها ، ولكنه يوجد برنامج صغير تم تحميله قبل النواة حتى تستطيع أن تنصب ال compiler لعمل compile لنواة اللينوكس. وهذا البرنامج الصغير تقوم كل شركة من شركات اللينوكس بتصميمه حسب ما يترائى لها.
(ملاحظة :أعتقد أن GCC يستطيع أن يقوم بهذه العملية أيضا ، والله أعلم )
إذا كما علمنا، فإن أنظمة التشغيل القوية لا تكون عبارة عن كتلة واحدة مثل نظام ويندوز ، لأنها لو كانت كذلك فإذا حدث خلل في مكان ما فسوف يؤثر على باقي النظام وينهار تماما ، أما لو حدث في برنامج مستقل فما زال النظام ثابتا ولكن حدث خلل في جزء فقط وتستطيع أن تعالجه.
هنا نتوقف قليلا لنسأل:
هل مبرمج نظام التشغيل يكون متخصص في كل شيء يخص النظام؟
قد يقول البعض ، لا من الصعب فعل ذلك ، وقد يقول البعض ممكن فعل ذلك، وأقول هذه لا تتعدى كونها قدرات .
فهل قام واحد ممن أراد أن يصمم نظام تشغيل أن يحلل المشروع بطريقة تسهل عليه العمل ، ويعلم إلى أين يسير وأين هو الآن؟كل الذي نشاهده ، (هيا بنا يا شباب لنصنع نظام تشغيل ، فيقول معظم الشباب هيا بنا) ولم يعد أحد العدة.
كونك أن تقرأ كتابا يتكلم عن نظم التشغيل هذا غير كافي ولا تستعجب إن قلت لك أنك لم تقطع سوى 20% من الطريق ، لأن الكتاب ما هو إلا عرض أفكار مطروحة من قبل وقد تكون قديمة أو على الأقل من وجهة نظر المؤلف .
فنظام التشغيل يحتاج فريق حتى يتم تقسيم العمل (هذا إذا كنت تنوي بناء نظام كبير) ، ويحتاج إلى ممارسة عملية وتجريب ، ومشاهدة مشاريع مشابهة ، وما إلى ذلك.
وطبعا يعلم من يرتاد هذا المجال قصة نظام minix ولماذا ظهر؟وسأسرد لكم القصة باختصار:
كان نظام يونكس مفتوح المصدر مثل لينوكس الآن ، وكان الطلاب يتعلمون كيفية إنشاء نظام تشغيل من خلال هذا المثال العملي الذي كان أمامهم، فكانوا يدرسون نظريا ثم يشاهدوا مثالا عمليا ثم يطبقون، ولكن وبعد أن تم إغلاق كود اليونكس ، فكر أحد الدكاترة وهو andrew tanenbaum بإنشاء نظام مشابه لليونكس ولكنه مفتوح المصدر فقام بإنشاء نظام minix ومنه بدأ لينوس صاحب نظام لينوكس. فكما ترون ليس من الممكن إطلاقا أنه بمجرد قراءتك لكتاب أنك أصبحت مهيئ لكتابة نظام.
جيد والآن كيف من الممكن أن نسير في هذا الطريق بشكل صحيح؟
من خلال ما أهدانيه الله من البحث هنا وهناك وسؤال هذا وذاك توصلت إلى ما يلي:
سأعطيكم مثالا لنواة اللينوكس :
تتكون نواة اللينوكس من الآتي:
*arch وهو عبارة عن التعليمات الخاصة بالنظام تحت 23 معالج ، وحجم الفهرس حوالي 34.3
طبعا سيهتم كل شخص أو فريق بكتابة التعليمات الخاصة بكل معالج ، فمثلا فريق سيأخذ i386 وآخر h8300 وما إلى ذلك.
* deriver وهو عبارة عن التعريفات الخاصة بالهاردويير وطرق التعامل معها. وحجم الفهرس حوالي 91 ميجا. أي أنه يأخذ 47% من حجم النواة.
* fs وهو الفهرس الذي به أنواع نظم الملفات التي يدعمها لينوكس وهي أكثر من 53 نوع، وحجم الفهرس حوالي 16.4 ميجا. وطبعا سيختص كل فريق بنوع أو نوعين، مثلا.
* sound وهو الفهرس المسؤول عن تعريف كارت الصوت لأنواع عدة ، وحجم الفهرس حوالي 13 ميجا.
* net وهو الفهرس المسؤول عن إدارة الشبكات في لينوكس ، وحجمه حوالي 9 ميجا.
* include وهو الفهرس الذي به المكتبات الخاصة باللينوكس كنظام تشغيل ، وأشياء متعلقة بالمعالجات ، وحجمه حوالي 19.2 ميجا ، لاحظ أن هذا المجلد يوجد بداخله مجلد لكل معالج يحتوي على الأشياء الخاصة بالمعالج،فمثلا عندما تطور النظام تحت i386 مثلا ، فتعاملك سيكون مع مجلد asm-i386 فقط.
* documentation وهو الفهرس الذي به الوثائق الخاصة بالنواة ، وهي مفيدة للمطورين.
* ويوجد هناك مجلدات أخرى صغير لا تتعد 5 ميجا تقوم ببعض أعمال النواة مثل : mm,kernel.lib,scripts,securit,crypto,init,ipc .
فلو قلنا مثلا أن هناك أن أحد سيطور نظام كامل للمعالج i386 وسيدعم النوعين ext2,ext3, كنظام ملفات ، (ولن نأخذ في حساباتنا تعريفات device ) فكإنك تطور 0.09 من حجم الكرنل :)
طبعا هذا ليس إغراءا،فالأمر ليس سهلا كما تعتقد ، ولكن حتى تفهم طبيعة الموقف.
هذا لو كنت ستطور في النواة.
ويمكن أيضا أن تكون مطورا في الأدوات المساعدة للنظام ، وهذا أيضا يطلق عليه مطور نظم ، حيث أن هذه الأدوات مهمة جدا لكي يكون التعامل مع النواة ممكنا وغير صعبا.
كما أنه من الممكن أن تكون مطور في compiler ، حيث أنه مهم وأساسي في بناء النواة.
ويمكن أن تكون مطور في boot loader .
هل لاحظت معنى كلمة نظام تشغيل.
يجب أن يتم تحليل الأمر هكذا ، حتى لا يضحك علينا أحد.
وكل فريق يأخذ جزء ويتخصص به ، ثم يتجمعوا كلهم لبناء النظام.
مؤسس النظام نفسه كل ما قام به هو كتابة النواة فقط أما ال compiler فهو كان موجود أصلا وهو cc ، واستعان أيضا بأدوات أخرى.
هذه هي ميزة أنظمة يونكس كلها.
دعونا الآن أن نحدد الأمر بشكل أدق:
يتكون نظام التشغيل من الآتي:
-النواة: ويندرج تحتها الآتي:
*إدارة العمليات process ، والإتصال بين هذه العمليات.طبعا هذا يتطلب دراية بالمعالج الذي ستعمل تحته سواء كان i386 وما إلى ذلك من المعالجات المعروفة.(هذا يحتاج إلى فريق محترم)
*إدارة الذاكرة، وهذا أيضا يتطلب معرفة بالمعالج الذي سيتعمل تحته وبعض تفاصيل الهاردويير الآخرى.(هذا يحتاج إلى فريق محترم)
*نظام الملفات ، حيث أنك تحت كيفية تعامل النظام مع الأجهزة التي تخزن البيانات , وكيفية تحديد الملفات والمجلدات ..(هذا يحتاج إلى فريق محترم)
* I/O :وهي كيفية إرسال واستقبال البيانات من وإلى الأجهزة المتصلة بالنظام..(هذا يحتاج إلى فريق محترم)
*الشبكات: بروتوكولات الاتصال وما إلى ذلك من أمور الشبكات..(هذا يحتاج إلى فريق محترم)
*الأمن: تأمين نظام التشغيل وعمليات التشفير وهكذا..(هذا يحتاج إلى فريق محترم)
-ال compiler الذي سيعمل compile للنواة..(هذا يحتاج إلى فريق محترم)
-boot loader الذي سيشغل النظام..(هذا يحتاج إلى فريق محترم)
-البرامج الملحقة المساعدة للنظام utilities ..(هذا يحتاج إلى فريق محترم)
طبعا لو فكرت لحظة واحدة أن تبني نظام تشغيل أو حتى تساهم في تطويره وأنت تحت ويندوز ، إذا سوف يكون فريقك غير....... :D
لأنه من المستحيلات، أو صعب جدا جدا جدا ، باتفاق العقلاء في هذا المجال.
فأرجو أن لا نرى مثل تلك المشاركات مرة أخرى لأنها بصراحة تشعر بالإحباط(مع أني لا أحب أن أنقل شعوري هذا لصاحب المشروع)
بل نحب أن نرى محاولة كما فعل لينوس وغيره، ثم نجربها ثم بعد ذلك نطرح رأينا ، ونفكر كيف يمكن تطويرها.
ولكن...................
في الوقت الحالي يجب علينا أن نعمل حتى نصبح مطورين في لينوكس ، كل حسب مجاله أو حسب ما يحب، حتى نأخذ فكرة وخبرة ونحتك بالآخرين ،و لأنه لا يوجد أي مسلم عربي حتى الآن يطور في هذا النظام،أي أننا تحت أمرهم..
.ومن يدري لعل الله يحدث بعد ذلك أمرا............
استعينوا بالله واصبروا وصابروا واعلموا أن الله لم يضعكم في هذا المكان بدون تقدير ، كلا وحاشا، ولكن الله سبحانه وتعالى علم أنكم أفضل من يقوم بهذه المهمة ، وإذا أردت تأكيد لكلامي ،افتح التلفاز أو انظر في الشارع والنوادي وسترى النتيجة .
لا يستوي أبدا من يلعب ويمرح طول الوقت ، ومن همه أن يتعلم (مثلنا ) ، ونسأل الله أن يجعل عملنا هذا لوجه خالصا و من النار مخلصا.
واعلموا أن الأمة لا تقوم إلا على اكتاف الشباب ، فلو كان هذا الشباب متصل بالله ستكون النتائج مذهلة للجميع.
أريد أن أسمع أراءكم ومقترحاتكم وانتقاداتكم.
وأريد حوارا هادئا علميا.
والسلام عليكم
الفقير إلى الله
برق
