برمجة أنظمة تشغيل الكمبيوتر 16 بت أنظمة دوس & يونكس – معالجات x86 –

عام 0 geek4arab
Spread the love

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

1- بنية و عمل أنظمة 16 بت :

بإختصار أنظمة 16 بت هي الأنظمة القديمة وهي عبارة عن شاشة سوداء تستقبل الأوامر

ظهرت هذة الأنظمة للعالم بعد ظهور المعالج 8086 ( إختصارة x86 ) من قبل شركة إنتل

ومن هذة الأنظمة الدوس و اليونكس و OS2 و بعض البرامج المستقلة وغيرها !

هذة الأنظمة تعمل في النمط الحقيقي ( بمعنى أنة لاتوجد قواعد وشروط وإمتيازات للبرامج والنظام )

أهم نقطة في هذة الأنظمة : أنها لا تستطيع تشغيل أكثر من مهمة أو برنامج في نفس الوقت

معلومة : قد تلاحظ أنة في نظام الدوس مثلا أكثر من برنامج مقيم في الذاكرة وكلها شغالة

ومع ذلك لا يعتبر النظام متعدد المهام , لأن كل البرامج المقيمة في الذاكرة لاتعمل في نفس الوقت

وإنما ينتقل التنفيذ من برنامج لآخر بالترتبيب ( وستتضح فكرة تعدد المهام في القسم الثاني من الموضوع)

المسجلات المتوفرة لهذة الأنظمة هي :

المسجلات العامة : AX,BX,CX,DX,SI,DI,BP,SP

مسجلات الأقسام : ES,SS,CS,DS

وكل هذة المسجلات حجمها 16 بت ( ولذلك سميت أنظمة 16 بت )

هذة النقاط تكفي للدخول في الموضوع ,,, سيتم إختيار النظام دوس من بين أنظمة 16 بت

لأنة متوفر عند الأغلبية لتطبيق أمثلة الدرس والنقطة الثانية أن كل الأنظمة متشابهة في طريقة عملها

ذكرنا في الدرس السابق أن آخر عملية يقوم بها الBIOS هي تحميل قطاع الإقلاع ونقل التحكم للنظام

ماذا يكتب نظام الدوس في قطاع الإقلاع ؟

كيف يقوم نظام الدوس ببناء بيئة لنظام التشغيل ؟

يبدأ الBIOS بتحميل قطاع الإقلاع إلى العنوان hex =0000:7C00 بمعنى أن هذا العنوان هو بداية برنامج الإقلاع

في النظام دوس يبدأ برنامج الإقلاع بتعليمة قفز إلى الإزاحة hex =3E والتعليمة هي JMP 3E

ولذلك فإن بداية التنفيذ الفعلي لبرنامج الإقلاع يبدأ عند العنوان hex =0000:7C3E

لماذا يتجاوز النظام دوس 62 بايت تقريبا من بداية القرص ؟!

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

وهذة المعلومات هي عدد القطاعات في كل تجمع وعدد التجمعات وعدد البايتات في كل قطاع … وهكذا
وهي ما تعرف بمقدمة القرص ,,,

يبدأ التنفيذ الفعلي لبرنامج الإقلاع عند العنوان hex =0000:7C3E

بداية برنامج الإقلاع : الخطوة الأولى

0000:7C3E CLI
0000:7C3F XOR AX,AX
0000:7C41 MOV SS,AX
0000:7C43 MOV SP,7C00
0000:7C46 PUSH SS
0000:7C47 POP ES

يبدأ برنامج الإقلاع بتصفير أعلام أو رايات المقاطعات عن طريق التعليمة الأولى

وهذة الطريقة لا تعتبر شرط لبداية الإقلاع لأن برامج الإقلاع لأنظمة IBM لا تستخدم هذة التعليمة

المهم بعد ذلك يصفر المسجل ax ومن خلالة يصفر قسم المكدس وهو ss

ويعطا المسجل sp قيمة تمثل بداية البرنامج في الذاكرة ويتم دفع القيمة للمكدس

لماذا ؟ لأن المسجل sp مرتبط بالمقطع ss ويمثلان مكدس البرنامج وهو ss:sp ويساوي 0000:7C00

وبهذا يكون قد عرف مكدس البرنامج لتخزين المعلومات المؤقتة أو المتغيرات في البرنامج
الخطوة الثانية :

0000:7C48 MOV BX,0078
0000:7C4B SS:
0000:7C4C LDS SI,[BX] // DS:SI = [0000:0078]
0000:7C4E PUSH DS
0000:7C4F PUSH SI
0000:7C50 PUSH SS
0000:7C51 PUSH BX

هذة الخطوة للتغيير في بعض خصائص القرص (بمعنى أن النظام دوس سيغير في خصائص القرص للBIOS) ؟؟

لاحظ التعليمة الأولى المسجل bx = 0078 بعد هذة التعليمة تلاحظ أن باقي التعليمات تنفذ داخل المقطع ss

وقيمة ss = 0000 والتعليمة lds تحمل مقطع البيانات بالقيمة صفر والمسجل si = 0078

والعلاقة هي DS:SI أي أن المسجل والمقطع مرتبطين مع بعض مثل الخطوة الأولى ( وهذة قوانين في لغة الإسمبلي )

المهم كل هذة الشغلة هي لجعل مقطع البيانات يمثل العنوان 0000:0078 بعد إرتباطة بهذة الطريقة DS:SI

ماذا يمثل العنوان ولماذا هذة الشغلة ؟! معرفة هذا العنوان سيحل اللغز الأول ؟ لاحظ

هل قرأت موضوع برمجة الBIOS بدقة ؟ راجع الجدول الأول وهو لعناوين المقاطعات وخاصة المقاطعة INT 1E

ستجد عنوانها بهذة الطريقة INT 1E =0000:0078 وهي خاصة لجدول وبارمترات القرص ؟! أي خصائص القرص

في هذا الجدول يخزن الBIOS معلومات القرص الذي حمل منة قطاع الإقلاع ؟ فيقوم الدوس بقرائتها والتغيير حسب طلبة

كيف ؟ بهذة الطريقة :

0000:7C52 MOV DI,7C3E
0000:7C55 MOV CX,000B
0000:7C58 CLD
0000:7C59 REPZ
0000:7C5A MOVSB
0000:7C5B PUSH ES
0000:7C5C POP DS

تلاحظ أن الدوس نقل بيانات القرص إلى نفس مقطع البرنامج وقد يكون أي عنوان في مقطع البرنامج

والملاحظة الثانية أن حجم البيانات تساوي B أي 11 بايت

بعد ذلك يغير الدوس بعض الخصائص بهذة الطريقة

0000:7C5D MOV BYTE PTR [DI-02],0F
0000:7C61 MOV CX,[7C18]
0000:7C65 MOV [DI-07],CL
0000:7C68 MOV [BX+02],AX
0000:7C6B MOV WORD PTR [BX],7C3E

0000:7C6F STI
0000:7C70 INT 13

أول تعليمة يقوم نظام الدوس بتغيير خاصية تسمى مدة الإنتظار لرأس القرائة والكتابة في القرص

وهي إحدى خصائص القرص ويحدد المدة بالقيمة F ( أعتقد أنها لتسريع القرائة )

التعليمة الثانية والثالثة : يقوم نظام الدوس بتغيير عدد القطاعات في كل مسار ( لكي يحدد قطاعات ملف محدد )

ولو تلاحظ أنة قرأ القيمة الموجودة في مقدمة القرص والإزاحة هي 18 وتمثل عدد القطاعات في المسار

بعد ذلك يقوم بنقل الخصائص بعد تعديلها , والتعليمة sti هي لإعادة تفعيل المقاطعات

وآخر شيء يقوم بتنفيذ مقاطعة إعادة تهئية القرص ,, ويصبح القرص جاهز بعد التغيير

والآن يبدأ النظام بBIOS بتحميل الملفات وتشغيل النظام ,, كيف ؟

يقوم بقرائة مقدمة القرص ويستخرج كل المعلومات الموجودة . بهذة الطريقة

0000:7C84 MOV AL,[7C10]
0000:7C87 MUL WORD PTR [7C16]
0000:7C8B ADD AX,[7C1C]
0000:7C8F ADC DX,[7C1E]
0000:7C93 ADD AX,[7C0E]
0000:7C97 ADC DX,+00
0000:7C9A MOV [7C50],AX
0000:7C9D MOV [7C52],DX
0000:7CA1 MOV [7C49],AX
0000:7CA4 MOV [7C4B],DX

التعليمة الأولى يتعرف على عدد جداول نظام الملفات فات وهي الإزاحة 10

والتعليمة الثانية عدد قطاعات الجدول فات الإزاحة 16 ,, ثم عدد القطاعات المخفية وهكذا

راجع مقدمة القرص لتعرف كل قيمة ماذا تمثل , وكيفية الإستفادة منها

المهم أنة بعد الحسابات يحدد قطاعات ملف معين لبداية تشغيل النظام

وفي مثالنا فإن النظام دوس يبحث عن قطاعات الملف IO.sys يقوم بتحميلة إلى العنوان hex 0070:0000

ملاحظة : يتم قرائة أول 3 قطاعات من الملف فقط وبعد ذلك تنقل للذاكرة

وأكيد بإستخدام الخدمة 2 من المقاطعة INT 13 ( بنفس الطريقة التي قمنا بتطبيقها في موضوع الBIOS )

وآخر خطوة في برنامج الإقلاع هي تعلمية قفز إلى بداية العنوان 700 ( وهي أول 3 قطاعات من الملف io.sys )

هل لاحظت الدورة الغير منتهية ؟! وأهم شيء هل لاحظت تشابة الأفكار ؟!

المعالج يبدأ بقفزة إلى الBIOS ثم يقوم الBIOS بتحميل قطاع الإقلاع إلى العنوان hex 0000:7C00

ثم ينتهي الBIOS بقفزة إلى قطاع الإقلاع

ثم يبدأ قطاع الإقلاع بقفزة ويبدأ التنفيذ ثم يحمل برنامج الإقلاع نواة النظام إلى العنوان hex 0070:0000

ثم ينتهي برنامج الإقلاع بقفزة إلى نواة النظام

وبعد ذلك تبدأ صناعة بيئة نظام التشغيل ؟!

في الحقيقة أن هذة المعلومات لقطاع الإقلاع متشابة في أكل أنظمة التشغيل بما فيها أنظمة 16 بت و 32 بت

ولآن ماهي خطوات صناعة بيئة لنظام التشغيل لمنصة 16 بت ؟

قبل البدء في هذة النقطة , لدي ملاحظة مهمة وهي :

لا تعتقد أن تحميل نواة النظام إلى الذاكرة هي عبارة عن تحميل ملف معين من القرص

والنقطة الثانية وهي الأهم : لا تعتقد أن محتويات القرص هي الملفات الموجودة بة فقط ؟!!

سؤحاول توضيح الفكرة ,, هل لاحظت برنامج الإقلاع الذي عرضنا بعض شفرتة وهو موجود في القطاع الأول

هل يوجد ملف في القرص يدل على هذا البرنامج ؟؟ أكيد لا رغم أنة موجود فعلا في القرص

وتستطيع أن تكتب برنامج كامل في كل مساحة القرص لتحميل النظام .. دون وجود أي ملف مرئي في القرص

وستكون طريقة تحملية للذاكرة أسهل وأفضل لأن محتوياتة ستكون في قطاعات متتالية (ولكنة سيكون غامض للمستخدم)

بإختصار أريد أن أصل لنقطة , وهي أن النظام دوس يحمل برامج لصناعة بيئة للنظام من أماكن متفرقة

في القرص قد تكون من بعض الملفات المرئية أو من قطاعات مخفية لا توجد لها ملفات في القرص !

المهم : تبدأ نواة النظام في العمل .. خطوات بناء بيئة للنظام :

الخطوة الأولى : يتم بناء جدول مقاطعات الدوس وجدول معلومات الدوس ؟ أكيد مرت عليك هذة الجداول؟!

هل راجعت الموضوع السابق ( برمجة الbios ) تقصدت شرح جدولين بالتفصيل وهما جدول مقاطعات الbios

وجدول معلومات الbios ؟! فالنظام دوس أخذ الفكرة كاملة من الBIOS وبنفس التخطيط مئة بالمئة

والآن  نراجع المعلومات :

ذكرنا أن أول جدول هو جدول مقاطعات الbios عند العنوان 0000:0000

بعد ذلك جدول معلومات الbios عند العنوان 0040:0000

بعد ذلك يبدأ الدوس في كتابة جدول للمقاطعات عند العنوان الذي توقفنا عندة في الدرس السابق (وذكرت ملاحظة)

ثم تتم كتابة جدول بيانات الدوس عند العنوان 0050:0000 حجم هذا الجدول 200 بالعنونة =0020:0000

لوجمعت العنوان 0050:0000 و 0020:0000 فالنتيجة هي 0070:0000 ماذا يمثل العنوان

بداية برنامج نواة نظام التشغيل الذي إنتقل لة التنفيذ من قطاع الإقلاع ,, لاحظ الترتيب الدقيق جدا

ولا بايت فارغ من بداية الذاكرة إلى هنا ؟

إذ تعمد النظام من جعل مساحة فارغة تسبق عنوان نواة النظام ليتم كتابة الجداول بها ,

والسؤال : ماهو البرنامج الذي كتب الجدولين للدوس وكيف ؟

أولا : الجدولين عبارة عن أرقام وبيانات لترتيب ونقل التنفيذ مثلا مقاطعة الدوس int 21

تتصل بجدول المقاطعات , جدول المقاطعات ينقل التنفيذ إلى برنامج آخر في الذاكرة لتنفيذ المقاطعة

بمعنى أنة لإنشاء جداول تخطيط في الذاكرة لا نحتاج لأي تعليمة للعتاد أو المنافذ أو مقاطعة للbios

فقط نحتاج لتعليمات نقل المعلومات مثل mov ولذلك تجد البرنامج io.sys لا يحتوي على أي مقاطعة

خارجية , فقط يحتوي على بعض تعليمات الفحص والمنافذ

والنتيجة : أن المسؤل عن بناء الجدولين هو البرنامج io.sys وقد تتدخل بعض قطاعات القرص المخفية

والآن أنشأ نظام الدوس الجدولين ولكن جدول المقاطعات ينقل كل مقاطعة إلى عنوان لتنفيذ المقاطعة

أين هذة العناوين وكيفية إنشائها ؟

يبدأ برنامج io.sys بتحميل جزء من الملف msdos.sys وهذا الملف لا يحتوي على أي تعليمة

فقط يحتفظ بإعدادات تخص الملف io.sys

وبعد ذلك يبدأ بتحميل باقي ملفات القرص بعد تجزئتها حسب العنوان التي ستتصل بة مقاطعة الدوس

كيف ؟

مثلا الملف command.com يقرأ منة 5 قطاعات مثلا وينقلها لعنوان التنفيذ لمقاطعة محددة

وعندما تنفذ المقاطعة ينتقل التنفيذ لجدول المقاطعات بعد ذلك ينقل جدول المقاطعات التنفيذ لعنوان الخمس قطاعات

وهكذا مع بقية الملفات والقطاعات التي لا يوجد لها ملفات تعبر عنها في القرص

والآن مثال لتوضيح الفكرة ؟!

من قائمة start ثم run إكتب command لتشغيل برنامج الدوس

أكتب الأمر التالي : mem /p لإستعراض محتوى الذاكرة

ولاحظ الترتيب الذي سيظهر , أول سطر جدول المقاطعات وعنواة 0 ثم جدول بيانات الbios وعنوانة 40

ثم جدول بيانات الدوس وعنوانة 50 وبعد ذلك لاحظ تقسيم البرامج مثلا io.sys ستجدة أكثر من قسم

وكذلك باقي الملفات مثل msdos و command …, بإختصار هذة هي فكرة أنظمة 16 بت

والإختلاف بسيط بين الدوس واليونكس 16 بت وهو عبارة عن ترتيب للمقاطع التي تم ذكرها
فمثلا اليونكس يكتب معلوماتة بعد جدول معلومات الbios بهذا الترتيب
– نواة النظام –
– ذاكرة مؤقتة لتحميل البرامج –
– وهنا يكتب جداول المعلومات –
– هنا يخصص قسم كبير يستخدم مكدس لكل البرامج –

وفي النهاية هذة الأساليب لبرمجة أنظمة 16 بت لم تعد موجودة أو نادرة الإستخدام

ولكن الهدف من ذكرها لتكون مدخل لأنظمة 32 بت مثل وندوز ولينكس

لتكتشف الفرق الكبير ,,, والتحول من المقاطعات إلى الدوال API والبوابات والإمتيازات والمهام

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

مثل برنامج debug في دوس والبرامج التجارية مثل السوفت آيس وبرنامج TD من بورلند وغيرها الكثير

وعند متابعة أي نظام يجب أن تعرف أن سياسة الأنظمة هي : الترتيب والغموض ؟

الترتيب : وهو عمل النظام وأفكارة دائما تأتي تحت ترتيب أو قانون محدد إما أن يكون مأخوذ من Bios

كما شاهدنا أفكار نظام الدوس أو تكون فكرة جديدة بترتيب معين ( والترتيب هو أساس في صناعة الأنظمة )

الغموض : وهو أن النظام يحاول بكل الطرق أن يظهر مئة علامة تعجب فوق رأسك ؟ كيف قام بهذا العمل ؟

لأن شركات الأنظمة تأخذ من بعضها الأفكار لمحاولة تطوير أنظمتها ,, ودائما تجد بعض الطرق في الأنظمة

تلف وتدور للوصول لهدف يمكن الوصول لة في خطوة واحدة ببساطة ووضوح ؟ فلا تستغرب من هذة الدورة

وبالتوفيق ,,,

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة