مقدمة :
الى الذين يريدون تصميم نظام التشغيل الخاص بهم سواء اكان الهدف كما سبق وقيل كثيرا ان الهدف هو انشاء نظام تشغيل عربى هذه الاسئلة والاجوبة (FAQ) ان شاء الله ستوضح الكثير من الامور مع ملاحظة ان هذا الشرح البسيط لن اقوم فيه بشرح كيفية برمجة تعددية المهام ولا المستخدمين ولا النواة بأنواعها المختلفة (Nano/Micro .etc) أو كيفية استخدا لغة السى او السى بلس او غيرها فى تصميم انظمة التشغيل
لمن هذا الشرح
اولا سوف يكون الشرح ان شاء الله باستخدام المترجم GCC وهو متوفر مجانا من مؤسسة GNU
1- الى المبرمجين الهاويين الذين يريدون معرفة معلومات عن كيفية تصميم انظمة التشغيل والذين يريدون التسلية وبناء نظام التشغيل الخاص بهم نظرية انظمة التشغيل والكلام الصعب اللى الكل عارف مدى تعقيده سيوف يكون مهملا ولا ضرورة له :) :lol:
2- الى من يريد معرفة المبادئ الاساسية فى تصميم انظمة التشغيل
3- الى من يريد ان يعرف كيف يتم تصميم نظم التشغيل لاستخدام هذه المعلومات فى برمجة تطبيقاته
4- الى كل من يريد تعلم العلم لاستخدامه لما يريد وان يحقق التقدم لعلى وعسى ان يقدم شيئا لامتنا فى المستقبل
البداية
اولا سنحتاج الى بعض المتطلبات للعمل عليها ان شاء الله وهى بعض الادوات وفى مقدمتها مترجم GCC الشهير على نظامنا وفى لينكس تلقائيا هذا لمترجم يكون مدمج مع النظام لان النظام بالاساس مبنى عليه لكن فى حالة استخدامنا لنظام التشغيل Windows فيمكننا تحميله واستخدامه على طريق اداتى cgwin
تحتاج ايضا الى تحميل بعض الملفات الاضافية لتثبيت DJGPP
SED
GNU binutils
GNU File Utils
Grep
Patch / Diff
RCS / CVS
SH Utils / bash
Perl
هذا يفترض به ان يحتوى على GCCو GPPو LD وغيرها بالاضافة الى اننا نحتاج الى Nasm وهو اداة اسمبلر لتحويل ملفات الاسمبلى الى ملفات ثنائية سنحتاجه ايضا
ما الذى لا استطيع عمله بلغة الC ؟
هذا يعتمد فى الاساس على الطريقة التى ستستخدمها فى بناء نظام التشغيل الخاص بك فأنت لا يمكنك بناء bootloader باستخدام لغة السى فعليك كتابة الكود الخاص بك فى الاسمبلر (يعنى سنستخدم لغة الاسمبلى ) مع ملاحظة انه يمكن عمل boot loader بلغتى الاسمبلى والسى مع بعضهما
هناك ايضا عمليات محددة فى CPU لا تستطيع عملها باستخدام الC مثل خدمات المقاطعات وال functions الخاص بها مثل تحميل جدول GDT
اذا فما هى الامور التى يينبغى على البدء بها ؟
هذا سؤال اجابته ليست قياسية يمكنك البدء بكتابة BOOT LOADER لكن كما قلت الاجابة ليست قياسية فانت يمكنك استخدام لboot loader جاهز مثل GRUB ومن ثم يمكنك كتابة minimal kernel ومن هذه اللحظة يمكنك التطوير منها
أو يمكنك كتابة اجزاء وقطع في أي ترتيب معين وتضعها معا في نهاية للتطوير بمعنى اصح تقوم بعمل دمج لمكونات النظام .
تقريبا ليس هناك ما يسمى طريق خاطئ وطريق صحيح لكيفية تصميم نظام تشغيل
يوجد فقط طريق للفشل لكن بعد الفشل حتى لو استمر كثيرا نجاح ان شاء الله
اما عن نفسى فأنا بدأت بكتابة Boot Loader ومن ثم قمت بكتابة نواة بسيطة (tiny micro kernel loader) وقمت بدعم نظام الملفات ISO9660 للاقلاع من الCD الخ ..... ومن ثم قمت باللعب قليلا اكثر من قولنا تطوير للنظام ولكن حاليا بدأت اظبط الامور واشتغل على نظام تشغيل بضمير :)
كنت سعيدا بأنى كتبت عدة انظمة تختلف فى بساطتها وكنت اكون سعيدا عندما اراها تعمل كما أردت
انتهى الجزء الاول من الاسئلة والاجابات (FAQS) والى اللقاء فى الجزء الثانى
المصادر
OS FAQS
OS Dev Forums