مرحبا جميعا، لدي سؤال يعنيني الكثير وهو كيف استطيع عمل نظام تشغيل كا ويندوز و لينكس وغيرها من الانظمة.
لكن قبل الاجابة علي سؤالي سأقوم بوضع اكثر من نقطة احتاج لفهمها لكي اكون ملم بالموضوع وهذه النقاط تتمثل في التالي:
١. مالمتطلبات التي احتاجها قبل الولوج الي انشاء نظام تشغيل؟
٢. هل يتم انشاء نظام تشغيل علي بيئة معينة او جهاز معين و هل هذا الجهاز في الاساس عليه نظام تشغيل ام لا؟
٣. كيف احصل علي تقنيات من انظمة اخري لتسهيل انشاء النظام وماهي هذه التقنيات؟
٤. بالتفصيل كيف يمكن انشاء نظام تشغيل جديد من البداية الي النهاية ؟
اتمني لمن يجيب علي مشاركتي ان يكون ملم بكل الاسئلة المذكورة في هذه المشاركة وساكون ممتن له كثيرا.
قبل إنشاء نظام تشغيل، عليك أن تعلم أن هذه ليست مهمة سهلة. استغرق الأمر مني حوالي عامين لإنشاء أول نظام تشغيل خاص بي، لكنك ستتعلم الكثير. ضع في اعتبارك أنها عملية طويلة جدًا. لا تمل. إذا كنت لا تستطيع فهم اللغة الإنجليزية، فستكون رحلة صعبة حقًا، حيث أن الموارد العربية قليلة جدًا.
١. الفرق بين نظام التشغيل (Operating System) و النواة (Kernel): يعتقد الكثير من الناس أن Linux هو نظام تشغيل. هذا غير صحيح. لينكس هو نواة. النواة هي الجزء الذي يقع بين التطبيقات وموارد الجهاز. موارد الجهاز هي الأجزاء المتحكمة في طريقة عمله. على سبيل المثال، تتحكم النواة في الذاكرة الأساسية (Memory)، وهي التي تنظم تسجيل وتحرير الذاكرة للتطبيقات، وتمنع الوصول بشكل مباشر لها. يمكنك التفكير في النواة كأنها الجزء الذي يقدم API لنظام التشغيل. دعنا نلقي نظرة على مثال بسيط:
• يحاول مستخدم أن يسجل فيديو على جهازه.
• يضغط المستخدم على زر بدء التسجيل.
• يتم إخطار Kernel بأننا بحاجة إلى الوصول لجهاز الكاميرا وجهاز الميكروفون.
• يحصل التطبيق على سماح للوصول للأجهزة ليستطيع إكمال المهمة.
حاول أن تبني Kernel بنفسك. هذه هي الخطوة الأولى في إنشاء نظام التشغيل الخاص بك.
٢. تعرف على كيفية عمل التمهيد (booting) في أنظمة التشغيل: التمهيد هو عملية بدء تشغيل الكمبيوتر. في هذه الخطوة، حاول معرفة كيفية تحميل نظام التشغيل في ذاكرة جهاز الكمبيوتر الخاص بك. إقرأ كثيراً حول محمل الإقلاع (bootloader)، وكيفية بنائه من الصفر (هذه المهمة صعبة، ولكنها ليست مستحيلة).
٣. تعلم لغة C والـ Assembly جيداً: أنا لا أطلب منك بناء نظام حجوزات، أو لعبة snake. أنا أطلب منك أن تتعمق في مترجم لغة C نفسه. تعلم كيف يتم تجميع (compilation process) برنامج C. تعرف على كيفية تسجيل الذاكرة، ليس فقط على نطاق برنامج، بل على نطاق الـ hardware نفسه. حاول إجراء هندسة عكسية لبرنامج C مترجم بالفعل. كل هذه التمارين ستساعدك عند كتابة أول نظام تشغيل لك.
٤. اقرأ دليل هندسة المعالج الموجود في جهاز الحاسوب الخاص بك: نعم. إذا كنت لا تعرف، فإن كل جهاز استخدمته في أي وقت مضى به دليل على الإنترنت للعمل معه. على سبيل المثال، إذا بحثت عن IA-32 Architectures Software Developer's Manual، ستجد PDF مكون من ألفي صفحة يحتوي على كل رموز التشغيل لبناء نظام تشغيل أو للتعامل مع هذا المعالج مباشرةً.
٥. اقرأ التعليمات البرمجية مفتوحة المصدر (source code) لنظام التشغيل Linux: صدقني، ستتعلم الكثير من خلال قراءة شفرة مصدر Linux.
٦. الآن، أنت جاهز لإنشاء نظام التشغيل الخاص بك فوق الـ Kernel الخاص بك. لن أتمكن من التعمق في كل هذه الموضوعات، لكنني سأعطيك الموضوعات التي تبحث عنها:
• ادارة العمليات (Process Management)
• الـ Threads وعمليات الـ threading
• التزامن (Synchronization)
• جدولة وحدة المعالجة المركزية (CPU Scheduling)
• ادارة التخزين (Storage Management) والـ File Systems
• واجهة المستخدم الرسومية (GUI)
هذه الموضوعات ضخمة. كل واحدة من منهم لديها عشرات الكتب وآلاف المقالات. حاول أن تقرأ بقدر ما تستطيع.
إذا كنت تريد إنشاء نظام تشغيل فقط، يمكنك استخدام Linux Kernel، وبناء نظام تشغيل فوقه، مثل Ubuntu.
شكرا جزيلا اخي الكريم، جعله الله في ميزان حسناتك.
لكن هناك سؤال مهم اخي اريد معرفة اجابته،
هل برمجة نظام التشغيل تكون علي بيئة او جهاز معين لايوجد به اساسا نظام تشغيل ام تكون علي جهاز به نظام تشغيل؟
يمكنك تطوير نظم التشغيل على أي نظام تشغيل به بيئة عمل تتيح لك أن تترجم كود C. فمثلاً، لو كنت تستخدم Windows، عليك التأكد أنه لديك MinGW أو Cygwin. وعند تشغيل الـ Kernel، ستسخدم أداة مثل GRUB.
لا تشغل نفسك بالأسئلة الآن. فقط، قم بتعلم المواضيع التي ذكرتها، وعند الإنتهاء، سيكون كل شئ واضح أمامك.
دعماً لرد الأخ إسلام سأضع المصادر العربية المتاحة و بعض من المصادر الأجنبية
مصادر لتعلم نظام التشغيل (Operating System):
- برمجة و تصميم نظام التشغيل.
مصادر لتعلم نواة لينكس (Kernal):
- كتاب المرجع المختصر في نواة لينكس.
مصادر لتعلم لغة السي (C Language) :
- تعلم البرمجة بلغة السي.
- كتاب الشامل في لغة السي.
- كتاب القرصنة الإلكترونية وأمن المعلومات.
- كتاب لغة سي ببساطة.
مصادر لتعلم لغة الأسمبلي (Assembly language):
- Assembly مرجع في البرمجة بلغة الاسمبلي.
- كتاب مدخل الى الهندسة العكسية الإصدار الأول والثاني.
مصادر لتعلم لينكس (Linux):
- كتاب سطر أوامر لينكس.
- كتاب أوبنتو ببساطة.
- الإدارة المُتقدمة لجنو/لينكس.
- دفتر مدير ديبيان.
- دليل إدارة خواديم أوبنتو
مصادر لتعلم بعض الموضوعات:
هنا بعض من المصادر الأجنبية:-
أتمنى لك التوفيق.
التعليقات