الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كتابة نظم التشغيل

بدأه MohamedIBrahim في 3 فبراير 2012 · 5 رد · 3,318 مشاهدة · في المقالات العلمية و التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

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

وسأكتب بعض الاشياء التي يمكن تسميتها ملحوظات اكثر منها مقالة كاملة (لكني اطمع ان يحن علي الاخ عبد الله الشمري ب5 نقاط مرة واحدة للمرة الاول فى حياتي هنا :lol: ) والملحوظات تلك أكتسبت بعضها من التواصل مع الاخرين المهتمين بذلك المجال ومنها خلال عملي قبل توقف Arab-OS ( ارجو الا يتحدث أحد عنه مطلقا فى هذا الموضوع وسبب توقفي هو الثانوية العامة فى المقام الآول وبعض الاسباب الاخري ) ومن خلال ايضا بعض ما كتب فى بعض الكتب وخبرات بعض المختصين فى هذا المجال حول كتابة نظم التشغيل

حسنا بعيدا عن الفلسفة والكلام نتكلم قليلا فى الامور الاهم

كتابة نظم التشغيل

نظام التشغيل :

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

المعرفة المطلوبة لكتابة نظم التشغيل : (ليس بالتأكيد لكي تصبح محترف فى كتابتها فهذا أمر نسبي بالتدريب والخبرة والمهارات)

  • معرفة لغة الاسمبلي ولغة C فى الغالب (نعم ان لغة الاسمبلي مهمة ولو كنت ستستخدم لغة مثل C او غيرها فى كتابة معظم النظام لآن هناك امورا سيتوجب استخدامك للاسمبلي فيها )
  • تراكيب البيانات (Data Structure) ومفاهميها المختلفة مثل (Array, Linked List, Binary Tree, Hash…الخ)
  • معرفتك لCompilers , Linkers , Object Files , Executable Files وانواع الملفات التنفيذية وبنيتها مثل ELF و غيرها
  • أنماط عمل المعالج (Precessor Modes) مثل Real Mode ,Protected Mode , Long Mode ... الخ
  • معرفة بالBIOS والمقاطعات (Interrupts) و SR و DMA و IO ...الخ
  • معرفة جيدة بمفاهيم الHardware
  • دراسة جيدة لمبادئ الحاسب OS Concepts

ان كتابة نظام تشغيل متوسط ليست مهمة سهلة لكن كتابة بعض النظم الصغيرة والبسيطة كتدريب وتعلم تعتبر الي حد ما سهلة لكن الاهم هو دراسة المفاهيم والتدرب الجيد لكن وبالرغم من ان كتابة نظم التشغيل ليست مهمة سهلة بل صعبة لكنها أيضا ليست مستحيلة وتطوير نظم التشغيل قد يأخذ الكثير من الوقت عما كنت حتي تتوقعه أنت ويقول بعض المختصين ( الذين اراهم متقدمين فى هذا المجال) ان يمكنك اذا كان لديك المعرفة والمهارة اللازمة كتابة نواة نظام تشغيل تعمل فى غضون 6 أشهر

أهدافك :

كتابة نظام تشغيل تنقسم الي كتابة العديد من المكونات (modules ) وكتابة كل المكونات من الصفر سوف يأخذ الكثير والكثير من الوقت وكذلك فان كل المكونات ليست ضرورية ولازمة وتصلح مع كل انظمة التشغيل لذا قرر اولا اي نوع من انظمة التشغيل تريد الكتابة وهذا فعليا يعتمد بشكل كبير علي نوع Krenel ويمكنك معرفة المزيد عنها من هنا وبالمناسبة هناك العديد من القرارات مثل هل نظامك سيكون يعتمد على shell أم GUI أم الاثنان وخوازرميات المعالجة و ادارة المهام والذاكرة ..... الخ

لذا النصيحة الدائمة هي حدد اهدافك وقراراتك (Set your Goals )

بماذا تبدأ ؟

ابدأ بتحليل تصميم نظامك وKrenel قبل ان تبدأ في التطوير فالدراسة والتخطيط الجيد والبحث العلمي فابحث عن ابحاث ومشاريع سابقة وانظر وضع خطتك وراجعها واعمل تحليل منطقي وبعدها ابدأ بTask Step Task

الادوات المشهورة لدي مطوري انظمة التشغيل :

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

عموما فى البداية لن يكون عليك ذلك

GCCوNASM/FASMوIdوالعديد من الادوات الاخري تستخدم بشكل واسع فى برمجة انظمة التشغيل

وتحتاج ايضا الي معرفة Mixed Code وكيفية استخدام كود لغة C مع لغة Assmbley وهو ما يسمي بMixed Code

التنقيح (Debugging) :

تجربة وتنقيج الKrenel أمر فى غاية الاهمية فسوف تحتاج الي استخدامها وتجربتها على real machine او Virtual Machine واالخيار الثاني افضل ويستحسن وينصح به وامثلته كثيرة مثل Bochs و QEmu و غيرهم

وتحتاج ايضا الي بعض الادوات الاخري مثل FileDisk وبعض الادوات لانشاء image files للتجربة على VM Machine

ملاحظات عامة :

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

  • التصميم 25% (15 % للقراءة والدراسة - 10% للتصميم والتطوير )
  • الادوات وتهيئة بيئة العمل والتطوير 5%
  • تجربة بعض الانظمة البسيطة وتطويرها للتدرب على استخدام مكوان توادوات داخل النظام مثل GRUB وتجربة افكارك 25 %
  • انشاء نواة حقيقة (تختلف فى اكتمالها وتعقيدها وجودتها علي حسب قدراتك ) 30 %
  • التحليل والتنقيج 20 %

المصادر :

الكتب

Operating Systems Design and Implementation

PC Intern: The Encyclopedia of System Programming

Developing Your Own 32-Bit Operating System

Art of Assembly

المواقع

http://wiki.osdev.org/Main_Page

http://www.osdever.net

أتمني ان اكون افدت الجميع ولو بشئ بسيط وأرجو من الجميع فقط طلب بسيط

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

والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة MohamedIBrahim في 3 فبراير 2012 في 04:45

6

GoodBye

#2

شكرا ً استاذ محمد على هذه المقالة الرائعة

عندي سؤال اذا ممكن ؟

ماهو الفرق بين paging و segmentation

حسب ما اعرف انو الـ paging مستخدم في معظم انظمة التشغيل رغم ان الـ segmentation حل مشكلة الـ internal / external fragmentation فليش ال paging هو المفضل لدى الاغلبية !!

تم تعديل هذه المشاركة بواسطة M.B.O في 5 فبراير 2012 في 03:50

M.B.O

Mohamed Bin Othman

إبن المكلا

يابني البشر ماذا فعلتم بالبشر !!

إسـألـنـي

#3
M.B.O كتب:

شكرا ً استاذ محمد على هذه المقالة الرائعة

عندي سؤال اذا ممكن ؟

ماهو الفرق بين paging و segmentation

حسب ما اعرف انو الـ paging مستخدم في معظم انظمة التشغيل رغم ان الـ segmentation حل مشكلة الـ internal / external fragmentation فليش ال paging هو المفضل لدى الاغلبية !!

الامر كله يعتمد على ما هو الفرق بينهما وما هي المتطلبات التي تشير الي امكانية استخدام احداهما (يمكن استخدام الاثنان مع بعض فى بعض النقاط)

فمثلا segments هي وحدة منطقية يمكن لتطبيقات المستخدم فى ring 3 رؤيتها وعنونتها تكون على Two dimensional address (عنوان ذا بعدين) ويكون التقسيم فيها خارجيا وكلا من الاتصال والتحميل تفاعليين (Dynamic )كذلك فان طولها يكون متغير بعكس pages التي يكون الطول فيها ثابتا ويكون فيها العنوان ذا بعد واحد (one dimensional address) لكن لديها العديد من النقاط الغير جيدة على الاقل من وجهة نظري وهي ان كلا من الحماية والمشاركة من النوع الصعب بعكس segments فان كلاهما جيدا الي حد بعيد وكذلك فان الpages يقسم تقسيما داخليا وفى الPages يكون الاتصال مستقر (Static ) اما التحميل فهو تفاعلي (Dynamic ) ولا تستطيع تطبيقات المستخدم رؤيتها

شخصيا أفضل paging للعديد من الاسباب يمكن التحكم ببعض الاجزاء الهامة فى اثناء Implementation وكذلك فان الpaging يخطط عن طريق مخطط الذاكرة الافتراضية (memory management scheme) والتي تتيح حجما أكبر للتعامل من التخطيط باستخدام مخطط ادارة الذاكرة الذي يستخدم في الـ segmentation

شخصيا أؤيد الافكار العديدة القائمة التي تناقش استخدام كلاهما بطريقة تداخلية (وهذه ما زالت افكار وابحاث لا أكثر )

يمكنك رؤية الجدول التالي لمعرفة المزيد

http://cs.nyu.edu/courses/spring00/G22.2250-001/lectures/lecture8/sld012.htm

وهذا نقاش جيد جدا حول هذا الامر سيفيدك كثيرا جدا

http://groups.google.com/group/alt.os.development/browse_thread/thread/6de0c2c05cd27f02

تحياتي لك

والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة MohamedIBrahim في 5 فبراير 2012 في 14:07

1

GoodBye

#4
اقتباس
حسب ما اعرف انو الـ paging مستخدم في معظم انظمة التشغيل رغم ان الـ segmentation حل مشكلة الـ internal / external fragmentation فليش ال paging هو المفضل لدى الاغلبية !!

يوجد فرق كبير بين الـ segmentation داخل kernel mode و الـ user mode.

أيضا الـ segmentation و الـ paging قد يعتمدوا على بعضهم او قد يعمل كل منهم مستقل بذاته، فى النهايه الأمر يعتمد على نظام التشغيل و على اسلوبه فى التعامل مع الذاكره.

الكلام فى هذا الأمر يطول، إقرء الفصل الأول من كتاب Memory Management: Algorithms and Implementation in C++/C حيث يعطيك ملخص مع بعض التفاصيل لهاتين النقطتين و غيرهم.

و الله ولي التوفيق

2

مدونتي: C++ Tips and Tricks

#5

بجد مقاله جميل جدا جدا جدا وواضح جدا ان المقاله مدروسه بعنايه ومتعوب فيها

وبارك الله فيك يا محمد وزادك الله علما بأذن الله

استَعِينُواْ بِالصَّبرِ وَالصَّلاةِ إِنَّ اللَّهَ مَعَ الصَّابِرِينَ

اصبر قليلا فبعد العسر تيسير وكل أمر له وقت وتدبير

طول البال يهدم الجبال

عش رجبا ترى عجبا

#6

شكرا ً لكما MohamedIBrahim و محمد علاء الدين

معلومات مفيدة جزاكم الله كل خير

M.B.O

Mohamed Bin Othman

إبن المكلا

يابني البشر ماذا فعلتم بالبشر !!

إسـألـنـي

مواضيع مشابهة