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

الدرس العاشر (Rings لغة التجميع ) >> الجزء الاول

بدأه MohamedIBrahim في 5 أبريل 2011 · 2 رد · 861 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

نأتى اليوم الى الدرس العاشر من دورتنا الخاصة بتصميم انظمة التشغيل

فى الدرس السابق تناولنا اوضاع المعالج المختلفة الوضع المحمى, الوضع المحمى , الوضع الوهمى ......الخ وتناولنا ايضا بعض مقاطعات البيوس

وكذلك تناولنا من بعض من اجزاء معالجة الازاحة فى الوضع الحقيقى وايضا قمنا بالتوسع فى عمل Boot Loader الخاص بنا باستخدام OEM Parameter Block"

لطباعة سلسلة نصية على الشاشة

اما فى هذا الدرس ان شاء الله سوف نستعرض الRings المختلفة والفرق بين برمجة التطبيقات Application Programming وبرمجة النظم Systems Programming.

Rings of Assembly Language

نظرية الRings

ما هو ring ؟

الring لغة لغة الاسمبلى ( التجميع ) تمثل مستوى الحماية والسيطرة للبرنامج على النظام وتوجد 4rings

وهم

Ring 0, Ring 1, Ring 2, Ring 3.

Ring 0

البرامج الخاصة به بالفعل تملك التحكم المطلق بكل شئ فى النظام بينما Ring3 يملك سيطرة اقل

الring هو اكثر من مجرد مفهوم - بل انه يبنى داخل معمارية المعالج

عندما يتم فتح الكمبيوتر وعندما يبدأ فى الاقلاع فان المعالج يكون فى ring 0 ,ومعظم التطبيقات مثل تطبيقات الويندوز ودوس تكون فى ring 3

وهذا يعنى ان نظام التشغيل يكون فى ring 0 ويكون له السيطرة المطلقة عن التطبيقات التى توجد فى ring 3

التحويل بين Rings :

لان الrings هى جزء من معمارية الحاسب فان المعالج يقوم بتغيير حالاتهم متى احتاج الى ذلك ويمكنه التغيير فى حالات اتية

1- تعليمة مباشرة تقوم بتنفيذ برنامج فى ring غير الخاص به مثل far jump, far call, far return, الخ ......

2- تعليمات مثل NT, SYSCALL, SYSENTER

3- عند التعبيرات

وفى دروس اخرى سنذكر تعليمات SYSCALL و SYSENTER

اقلاع المراحل المتعددة

مرحلة الاقلاع المنفرد

تذكر ان boot loader وboot sector حجمها فقط يجب ان يكون 512bytes واذا كان boot loader ذو 512byets يقوم بتحميل النواة مباشرة فانه يسمى ويكون Single Stage Bootloader. (مرحلة الاقلاع المنفردة)

المشكلة فى هذا النظام بغض النظر عن الحجم الصغير والذى لا يمكننا فى عمل الكثير فانه من الصعب جدا تحميل وتنفيذ نواة32bit بدون 16bit boot loader وهذا لا يتمضن اخطاء المعالجة اليدوية بل انه يقوم بتضمين الكود ل (GDT, IDT, A20, PMode) من اجل البحث وتحميل نواة 32bit وتنفيذ النواة وايضا اخطاء المعالجة

عمل كل هذا فى حدود 512bytes هو من المستحيل نظريا وعمليا :) لذا فان عملية الاقلاع المنفردة تكون لنواة 16bit

ولهذا السبب فان معظم انظمة التشغيل تستخدم نظام الاقلاع المتعدد (Multi Stage Loaders)

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

والى اللقاء فى الجزء الثانى من الدرس

المراجع

http://www.cs.utah.edu/flux/oskit/

http://wiki.osdev.org/GDT_Tutorial

http://wiki.osdev.org/Microkernel

1

GoodBye

#2

ما علاقة هذا الدرس بالـ Rings؟؟

انت فقط تكلمت عن الـ Boot Loader و لم تذكر حتى اسماء الـ Rings و لا سيما صلاحيات تنفيذ الكود؟؟

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 6 أبريل 2011 في 08:49

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

#3
محمد علاء الدين كتب:

ما علاقة هذا الدرس بالـ Rings؟؟

انت فقط تكلمت عن الـ Boot Loader و لم تذكر حتى اسماء الـ Rings و لا سيما صلاحيات تنفيذ الكود؟؟

lمحمد اولا احب ارحب بيك

اعرف اننى لم اتكلم عن rings لكن مثل ما قلت سابقا وان كنت تتابع الدورة فاننى فى بعض الدروس اقوم بتقسميها الى عدة اجزاء فمثلا الدرس العاشر يتحدث عن rings

لكنى لم ادخل فيه فى الجزء الاول بل بعلاقته بالbootloader وفى الاجزاء القادمة سأتحدث عنه ان شاء الله

تحياتى لك

ملاحظة :

انا قمت بذكر اسماء rings داخل الاكواد

Ring 0, Ring 1, Ring 2, Ring 3.

فى الدرس نفسه

GoodBye

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…