215
ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﲪﻦ ﺍﻟﺮﺣﻴﻢ ﻛﻠﻴﺔ ﺍﻟﻌﻠﻮﻡ ﺍﻟﺮﻳﺎﺿﻴﺔ- ﺟﺎﻣﻌﺔ ﺍﳋﺮﻃﻮﻡ ﻗﺴﻢ ﺍﳊﺎﺳﻮﺏ ﲝﺚ ﻣﻘﺪﻡ ﻟﻨﻴﻞ ﺩﺭﺟﺔ ﺍﻟﺒﻜﺎﻟﻮﺭﻳﻮﺱ ﰲ ﻋﻠﻮﻡ ﺍﳊﺎﺳﻮﺏ ﺑﻌﻨﻮﺍﻥ: ﻴﻞ ﺎﻡ ﺗ ﻧﻈ ﻴﻢ ﺔﻭ "ﻧﻈﺎﻡ ﺇﻗﺮﺃ" : ﺃﲪﺪ ﻋﺼﺎﻡ ﻋﺒﺪ ﺍﻟﺮﺣﻴﻢ ﺃﲪﺪ ﺇﻋﺪﺍﺩ ﺍﻟﺒﺎﺣﺚ : ﺩ.ﻣﺼﻄﻔﻰ ﺑﺎﺑﻜﺮ ﺻﺪﻳﻖ ﺑﺈﺷﺮﺍﻑ٢٠١٠ ﻳﻮﻟﻴﻮ٣

برمجة وتصميم نظام تشغيل

  • Upload
    -

  • View
    418

  • Download
    4

Embed Size (px)

Citation preview

Page 1: برمجة وتصميم نظام تشغيل

الرحيم الرمحن اهللا بسم

الرياضية العلوم كلية - اخلرطوم جامعةاحلاسوب قسم

بعنوان: احلاسوب علوم يف البكالوريوس درجة لنيل مقدم حبث

تشغيل نظام تصميم و برمجةإقرأ" "نظام

أمحد الرحيم عبد عصام أمحد : الباحث إعدادصديق بابكر د.مصطفى : بإشراف

٢٠١٠ يوليو ٣

Page 2: برمجة وتصميم نظام تشغيل

اخلرطوم. جامعةاحلاسوب. قسم - الرياضية العلوم كلية

.LATEX نظام باستخدام البحث هذا كتابة متأمحد. الرحيم عبد عصام أمحد ٢٠١٠ c⃝ حمفوظة احلقوق مجيع

الحق إصدار أي أو ١.٢ اإلصدار جنو احلرة املستندات ترخيص إتفاقية شروط ضمن املستند هذا تعديل و/أو توزيع بنسخ، يسمحإضافة متت لقد خلفي. غالف ونصوص أمامي غالف نصوص ثابتة، أقسام أية دون احلرة، الربجميات مؤسسة قبل من نشره مت

.(GNU احلرة املستندات ترخيص (إتفاقية املعنون القسم يف الترخيص إتفاقية من نسخة

Page 3: برمجة وتصميم نظام تشغيل

املحتويات

١ Basics األساسيات .I٣ التشغيل أنظمة عن مقدمة .١٦ . . . . . . . . . . . . . . . . . . . . . . . . . . التشغيل نظام هو ما .١.١٦ . . . . . . . . . . . . . . . . . ختيلي كجهاز التشغيل نظام .١.١.١٦ . . . . . . . . . . . . . . والعتاد للموارد كمدير التشغيل نظام .٢.١.١٦ . . . . . . . . . . . . . . . . . . . . . . . . . التشغيل أنظمة تاريخ .٢.١٧ . . . . . . امليكانيكية احلواسيب :(١٦٢٤-١٩٤٥) الصفري اجليل .١.٢.١١٠ التوصيل لوحات و املفرغة الصمامات :(١٩٤٥-١٩٥٥) األول اجليل .٢.٢.١

١٥ x86 حواسيب معمارية .٢١٦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . النظام معمارية .١.٢١٦ . . . . . . . . . . . . . . . . . . System Bus النظام مسار .١.١.٢١٨ . . . . . . . . . . . . . . . . . . . . . . الذاكرة متحكم .٢.١.٢١٨ . . . . . . . . . . . . . . . . . . واإلخراج اإلدخال متحكم .٣.١.٢١٩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . املعاجل .٢.٢٢٠ . . . . . . . . . . . . . . . . . . . . التعليمات تنفيذ دورة .١.٢.٢٢٠ . . . . . . . . . . . . . . . . CPU Modes املعاجل عمل أمناط .٢.٢.٢٢٢ . . . . . . . . . . . . . . . . . Real Mode احلقيقي النمط .٣.٢.٢٢٣ . . . . . . . . . . . . . . . Protected Mode املحمي النمط .٤.٢.٢٢٥ . . . . . . . . . . . . . . . . . . . . x86 معاجلات معمارية .٥.٢.٢

٣١ Boo ng احلاسب إقالع .II٣٣ Bootloader النظام وحممل احلاسب إقالع .٣٣٣ . . . . . . . . . . . . . . . . . . . . . . . . . . . . احلاسب إقالع .١.٣٣٤ . . . . . . . . . . . . . . . . . . . . . . . Bootloader النظام حممل .٢.٣

ج

Page 4: برمجة وتصميم نظام تشغيل

املحتويات

٣٥ . . . . . . . . . . . . . . . . . . . . . . . . . . . . الذاكرة خمطط .٣.٣٣٦ . . . . . . . . . . . . . . . . . . . . . . . . . . النظام حممل برجمة .٤.٣٣٧ . . . . . . . . . . . . . . . . . . . . ترحيبية رسالة عرض .١.٤.٣٤٠ . . . . . . . . . . . . . . . . . . . االقالع قطاع معلومات .٢.٤.٣٤٨ . . . . . . int 0x13 املقاطعة باستخدام القرص من قطاع حتميل .٣.٤.٣٥٠ . . . . . . . . . . . . . . . . . . . . . . . . FAT12 نظام اىل مقدمة .٥.٣٥١ . . . . . . . . . . . . . . . . . . . . . . FAT12 نظام قيود .١.٥.٣٥١ . . . . . . . . . . . . . . . . القرص على FAT12 نظام هيكلة .٢.٥.٣٥٤ . . . . . . . . . . . . . . . . . . . . . املرن القرص هيكلة .٣.٥.٣٥٥ . . . . . . . . . . . . . . . FAT12 نظام من الكتابة و القراءة .٤.٥.٣

٦٧ الثانية املرحلة - النظام حممل برجمة .٤٦٧ . . . . . . . . . . . . . . . . . . . . . . . املحمي النمط اىل االنتقال .١.٤٦٨ . . . . . . . . Global Descriptor Table العام الواصفات جدول .١.١.٤٧٢ . . . . . . PMode Memory Addressing املحمي النمط يف العنونة .٢.١.٤٧٢ . . . . . . . . . . . . . . . . . . املحمي النمط اىل االنتقال .٣.١.٤٧٤ . . . . . . . . . . . . . . . . . . . . . . . . . . A20 البوابة تفعيل .٢.٤٧٤ . . . . . . . . . . . . A20 والبوابة 8042 املفاتيح لوحة متحكم .١.٢.٤٧٥ . . . . . . . . . . . . . . . . . . . A20 البوابة تفعيل طرق .٢.٢.٤٨١ . . . . . . . . . . . . . . . . . . . . . . . . . . VGA ال أساسيات .٣.٤٨٢ . . . . . . . . . . . . . . . VGA متحكمات يف الذاكرة عنونة .١.٣.٤٨٣ . . . . . . . . . . . . . . . . . . الشاشة على حرف طباعة .٢.٣.٤٨٧ . . . . . . . . . . . . . . . . strings النصية السالسل طباعة .٣.٣.٤٨٩ . . . . . . . . . . . . . . . Hardware Cursor املؤشر حتديث .٤.٣.٤٩٢ . . . . . . . . . . . . . . . . Clear Screen الشاشة تنظيف .٥.٣.٤٩٣ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . النواة حتميل .٤.٤

١٠١ Kernel النواة .III١٠٣ التشغيل نظام نواة حول مقدمة .٥١٠٣ . . . . . . . . . . . . . . . . . . . . . . . . . . التشغيل نظام نواة .١.٥١٠٤ . . . . . . . . . . . . . . . . . . . . . التجريد مستويات .١.١.٥١٠٥ . . . . . . . . . . . . . . . . . . . . . . . . . . النظام نواة وظائف .٢.٥١٠٥ . . . . . . . . . . . . . . . . . . . . . . . الذاكرة إدارة .١.٢.٥١٠٦ . . . . . . . . . . . . . . . . . . . . . . . . . النواة وتصميم هيكلة .٣.٥١٠٦ . . . . . . . . . . . . . . Monolithic Kernel الضخمة النواة .١.٣.٥١٠٧ . . . . . . . . . . . . . . . . . MicroKernel املصغرة النواة .٢.٣.٥

د

Page 5: برمجة وتصميم نظام تشغيل

املحتويات

١٠٧ . . . . . . . . . . . . . . . . . Hybrid Kernel اهلجينة النواة .٣.٣.٥١٠٧ . . . . . . . . . . . . . . . . . . . . . . . . . . . النظام نواة برجمة .٤.٥١٠٨ . . . . . . . . . . . . . . . . . . . . PE نواة وتنفيذ حتميل .١.٤.٥١١١ . . . . . . . . . . . . . . . . سي++ للغة التشغيل بيئة تطوير .٢.٤.٥١١٦ . . . . . . . . . . . . . . . . . . . . النواة اىل التنفيذ نقل .٣.٤.٥١١٧ . . . . . . . . . . . . . . . . . . . . . . . إقرأ نظام شفرة على نظرة .٥.٥١١٨ . . . . . . . . . . . . . . . . . . . . . . . . . القياسية السي مكتبة .٦.٥

١٢٣ Interrupts املقاطعات .٦١٢٣ . . . . . . . . . . . . . . . . . So ware Interrupts الربجمية املقاطعات .١.٦١٢٣ . . . . . . . . . . . . . . . . . احلقيقي النمط يف املقاطعات .١.١.٦١٢٥ . . . . . . . . . . . . . . . . . املحمي النمط يف املقاطعات .٢.١.٦١٢٧ . . . . . . . . . . . . . . . . . . . . . . . املعاجل أخطاء .٣.١.٦١٢٩ . . . . . . . . . . . . . . GDT العام الواصفات جدول إنشاء .٤.١.٦١٣٣ . . . . Programmable Interrupt Controller للربجمة القابل املقاطعات متحكم .٢.٦١٣٣ . . . . . . . . . . . . Hardware Interrupts العتادية املقاطعات .١.٢.٦١٣٤ . . . . . . . . . . . . . . . . . . . . . PIC متحكم برجمة .٢.٢.٦١٤١ . . . . . . . . . . . . . . . . . Programmable Interval Timer املؤقتة .٣.٦١٤٢ . . . . . . . . . . . . . . . . . . . . . . PIT املؤقتة برجمة .١.٣.٦١٤٥ . . . . . . . . . . . . . . . . . . . . . . . . . . . HAL طبقة توسعة .٤.٦١٤٥ . . . . . . . . . . . . . . . . . . . . . . . . . PIC دعم .١.٤.٦١٤٩ . . . . . . . . . . . . . . . . . . . . . . . . . PIT دعم .٢.٤.٦١٥٢ . . . . . . . . . . . . . . . . . . . . اجلديدة HAL واجهة .٣.٤.٦

١٦١ الذاكرة إدارة .٧١٦١ . . . . . . . . . . Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧١٦٢ . . . . . . . . . . . . . . . . . . . . الذاكرة حجم حساب .١.١.٧١٦٤ . . . . . . . . . . . . . . . . Memory Map الذاكرة خريطة .٢.١.٧١٦٧ . . . . . . . . . . . . . . . . . . املتعدد اإلقالع مواصفات .٣.١.٧١٧١ . . . . . . . . . . . . . . . . . . . . الفيزيائية الذاكرة مدير .٤.١.٧١٧٧ . . . . . . . . . . . Virtual Memory Management التخيلية الذاكرة إدارة .٢.٧

١٨٣ Device Driver االجهزة مشغالت .٨١٨٣ . . . . . . . . . . . . . . . Keyboard Driver املفاتيح لوحة مشغل برجمة .١.٨

١٩٥ الربامج وتشغيل ترمجة ا.١٩٥ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ويندوز نظام ا.١.١٩٥ . . . . . . . . . . . . . . . . . . . . . . . . . . . . لينوكس نظام ا.٢.

ه

Page 6: برمجة وتصميم نظام تشغيل

املحتويات

١٩٧ إقرأ نظام شفرة ب.

و

Page 7: برمجة وتصميم نظام تشغيل

التوضيحية األمثلة٤ . . . . . . . . . . . . . . . . . . . . . . . . . Assembly Language .١.١٣٧ . . . . . . . . . . . . . . . . . . . . . . . . Smallest Bootloader .٣.١٣٧ . . . . . . . . . . . . . . . . . . . . . . . . Welcom to OS World .٣.٢٤٠ . . . . . . . . . . . . . . . . . . . . . . . . Bios Parameter Block .٣.٣٤١ . . . . . . . . . . . . . . . . . . . . . . . . . . . . BPB example .٣.٤٤٤ . . . . . . . . . . . . . . . . . . . . . . . Hex value of bootloader .٣.٥٤٥ . . . . . . . . . . . . . . . . . . . . . . . . . Complete Example .٣.٦٤٨ . . . . . . . . . . . . . . . . . . . . . . . . . Reset Floppy Drive .٣.٧٤٩ . . . . . . . . . . . . . . . . . . . . . . Read Floppy Disk Sectors .٣.٨٥٥ . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hello Stage2 .٣.٩٥٧ . . . . . . . . . . . . . . . . . . . . . . . . . Load Root directory .٣.١٠٥٨ . . . . . . . . . . . . . . . . . . . . . . . Find Stage2 Bootloader .٣.١١٥٩ . . . . . . . . . . . . . . . . . . . . . . . . . . . Load FAT Table .٣.١٢٦٠ . . . . . . . . . . . . . . . . . . . Convert Cluster number to LBA .٣.١٣٦٠ . . . . . . . . . . . . . . . . . . . . . . . . . Convert LBA to CHS .٣.١٤٦١ . . . . . . . . . . . . . . . . . . . . . . . . . . . . Load Cluster .٣.١٥٦٢ . . . . . . . . . . . . . . . . . . . . . . . . Read Sectors Rou ne .٣.١٦٦٤ . . . . . . . . . . . . . . . . . . . . . . . . . . . Read FAT entry .٣.١٧٦٩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GDT .٤.١٧١ . . . . . . . . . . . . . . . . . . . . . . . . Load GDT into GDTR .٤.٢٧٣ . . . . . . . . . . . . . . . . . . . . Switching to Protected Mode .٤.٣٧٥ . . . . . . . . . . . . . . . Enable A20 by System Control Port 0x92 .٤.٤٧٦ . . . . . . . . . . . . . . . . . . . . . Enable A20 by BIOS int 0x15 .٤.٥٧٧ . . . . . . . . . . . . . . . . . . . . . . . . . Wait Input/Output .٤.٦٧٨ . . . . . . . . . . . . . . . . . . . . . . Enable A20 by Send 0xdd .٤.٧٨٠ . . . . . . . Enable A20 by write to output port of Keyboard Controller .٤.٨٨٣ . . . . . . . . . . . . . . . . . . . . . Print 'A' character on screen .٤.٩٨٥ . . . . . . . . . . . . . . . . . . . . . . . . . . putch32 rou ne .٤.١٠٨٧ . . . . . . . . . . . . . . . . . . . . . . . . . . . puts32 rou ne .٤.١١٩٠ . . . . . . . . . . . . . . . . . . . . . . . Move Hardware Cursor .٤.١٢٩٢ . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clear Screen .٤.١٣٩٣ . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hello Kernel .٤.١٤

ز

Page 8: برمجة وتصميم نظام تشغيل

التوضيحية األمثلة

٩٥ . . . . . . . . . . . . . . Loading and Execu ng Kernel: Full Example .٤.١٥١٠٨ . . . . . . . . . . . . . . . . . . . . . Portable Executable Header .٥.١١١٠ . . . . . . . . . . . . . . . . . . . . . . . . Ge ng Kernel entry .٥.٢١١١ . . . . . . . . . . . . . . . . . . . . . Global new/delete operator .٥.٣١١٢ . . . . . . . . . . . . . . . . . . . Pure virtual func on call handler .٥.٤١١٢ . . . . . . . . . . . . . . . . . . . . . . . Floa ng Point Support .٥.٥١١٣ . . . . . . . . . . . . . . . . . . . . . . . . . . Object Ini alizer .٥.٦١١٤ . . . . . . . . . . . . . . . . . . . . . . . . . . . Delete Object .٥.٧١١٦ . . . . . . . . . . . . . . . . . . . . . . . . Kernel Entry rou ne .٥.٨١١٨ . . . . . . . . . . . . . . . . null.h:Defini on of NULL in C and C++ .٥.٩١١٩ . . . . . . . . . . . . . . . . . size t.h:Defini on of size t in C/C++ .٥.١٠١٢٠ . . . . . . . . . . . . . . . . . . . . . . stdint.h:typedef data type .٥.١١١٢٠ . . . . . . . . . . . . . . . . . . . . cstdint:C++ typedef data type .٥.١٢١٢١ . . . . . . . . . . . . . . . . . . ctype.h:determine character type .٥.١٣١٢٦ . . . . . . . . . . . . . . . . . . . Example of interrupt descriptor .٦.١١٢٦ . . . . . . . . . . . . . . . . . . . . . . . . Value to put in IDTR .٦.٢١٢٩ . . . . . . . . . . include/hal.h:Hardware Abstrac on Layer Interface .٦.٣١٣٠ . . . . . . . . . . . . . . . . . . . . . . . hal/gdt.cpp:Install GDT .٦.٤١٣٧ . . . . . . . . . . . . . . . . . . . . Ini aliza on Control Words 1 .٦.٥١٣٨ . . . . . . . . . . . . . . . . . . . . Ini aliza on Control Words 2 .٦.٦١٣٨ . . . . . . . . . . . . . . . . . . . . Ini aliza on Control Words 3 .٦.٧١٣٩ . . . . . . . . . . . . . . . . . . . . Ini aliza on Control Words 4 .٦.٨١٤٠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Send EOI .٦.٩١٤٤ . . . . . . . . . . . . . . . . . . . . . . . . . . PIT programming .٦.١٠١٤٥ . . . . . . . . . . . . . . . . . . . . . . . hal/pic.h: PIC Interface .٦.١١١٤٧ . . . . . . . . . . . . . . . . . . . hal/pic.cpp: PIC Implementa on .٦.١٢١٤٩ . . . . . . . . . . . . . . . . . . . . . . . hal/pit.h: PIt Interface .٦.١٣١٥٠ . . . . . . . . . . . . . . . . . . . hal/pit.cpp: PIT Implementa on .٦.١٤١٥٢ . . . . . . . . . . . . . . . . . . . . . . . . . New HAL Interface .٦.١٥١٥٣ . . . . . . . . . . . . . . . . . . . . . . New HAL Impelmenta on .٦.١٦١٥٦ . . . . . . . . . . . . . . . . . . . . . . . . . . kernel/main.cpp .٦.١٧١٥٦ . . . . . . . . . . . . . . . . . . . . . . . . . kernel/excep on.h .٦.١٨١٥٨ . . . . . . . . . . . . . . . . . . . . . . . . kernel/excep on.cpp .٦.١٩١٥٨ . . . . . . . . . . . . . . . . . . . . . . . . . . kernel/panic.cpp .٦.٢٠١٦٢ . . . . . . . . . . . . . . . . . Using int 0x12 to get size of memory .٧.١١٦٣ . . . . . . . . . Using int 0x15 Func on 0xe801 to get size of memory .٧.٢١٦٥ . . . . . . . . . . . . . . . . . . . . Memory Map Entry Structure .٧.٣١٦٥ . . . . . . . . . . . . . . . . . . . . . . . . . Get Memory Map .٧.٤

ح

Page 9: برمجة وتصميم نظام تشغيل

التوضيحية األمثلة

١٦٨ . . . . . . . . . . . . . . . . . . . Mul boot Inforam on Structure .٧.٥١٦٩ . . . . . . . . . . . . . . . . . . . snippet from stage2 bootloader .٧.٦١٧٠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kernel Entry .٧.٧١٧١ . . . . . . . . . . . . . . . . . Physical Memory Manager Interface .٧.٨١٧١ . . . . . . . . . . . . . . Physical Memory Manager Implemeta on .٧.٩١٧٧ . . . . . . . . . . . . . . . . . . Virtual Memory Manager Interface .٧.١٠١٧٨ . . . . . . . . . . . . . . . Virtual Memory Manager Implemeta on .٧.١١١٨٣ . . . . . . . . . . . . . . . . . . . . . . Keybaord Driver Interface .٨.١١٨٧ . . . . . . . . . . . . . . . . . . . Keybaord Driver Implemeta on .٨.٢

ط

Page 10: برمجة وتصميم نظام تشغيل
Page 11: برمجة وتصميم نظام تشغيل

األشكال قائمة٣ . . . . . . . . . . . . . . . . . . . . . x86 املعاجل ألوامر العام الشكل .١.١٥ . . . . . . . . . . . . . . . . . . . . . . . . . . . احلاسب طبقات .٢.١٧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . باسكال آلة .٣.١٧ . . . . . . . . . . . . . . . . . . بأملانيا متحف يف Step Reckoner آلة .٤.١٨ . . . . . . . . . . . . . . . . بتجميعه بابباج ابن قام أن بعد الفروق حمرك .٥.١٩ . . . . . . . . . . . . . . . . . . . . لندن يف مبتحف التحليلي املحرك .٦.١٩ . . . . . . . . . . . . . . . بأملانيا متحف يف انشائها إعادة بعد Z1 حاسبة .٧.١١٠ . . . . . . . . . Iowa State جامعة يف انشائها إعادة بعد Atanasoff حاسبة .٨.١١٠ . . . . . . . . . . . . . . . . . . . . . . . . Harvard Mark I حاسبة .٩.١١١ . . . . . . . . . . . . . . . . . . وفكها الرسائل لتشفري األملانية إجنما آلة .١٠.١١٢ . . . . . . . . . . . . . . . . إجنما شفرة كسرت اليت colossus احلاسبة .١١.١١٢ . . . . . . . . . . . . . . . . . . . . . . . . . . . ENIAC احلاسبة .١٢.١١٣ . . . . . . . . . . . . . . . . . . . . . . . . . . . EDVAC احلاسبة .١٣.١١٥ . . . . . . . . . . . . . . . . . . . . . . . . x86 حواسيب معمارية .١.٢١٦ . . . . . . . . . . . . . . . . . . x86 الشخصية احلواسيب يف املسارات .٢.٢١٨ . . . . . . . . . . . . . . . . . . . . . . . . . . . . الشمايل اجلسر .٣.٢٢٤ . . . . . . . . . . . . . . . . . . . . احلقيقي النمط يف املقاطع تداخل .٤.٢٢٥ . . . . . . . . . . . . . . . . . . . . . . . . . . . . املعاجل حلقات .٥.٢٣٦ . . . . . . . . . . . . . . . . . . . . . الرئيسية الذاكرة حمتويات خمطط .١.٣٥١ . . . . . . . . . . . . . . . . . . . . . القرص على FAT12 نظام هيكلة .٢.٣١٠٠ . . . . . . . . . . . . . . . . . . . . . . . . العمل أثناء النظام حممل .١.٤١٠٠ . . . . . . . . . . . . . . . . . . . . . . . . . . . النواة تنفيذ بدء .٢.٤١٣٣ . . . . . . . . . . . . . . . . . 8259A للربجمة القابل املقاطعات متحكم .١.٦١٣٥ . . . . . . . . . . . . . . . . . . . . . . . . . PIC متحكم مشابك .٢.٦١٤٢ . . . . . . . . . . . . . . . . . . . . . . . 8253 للربجمة القابلة املؤقتة .٣.٦١٤٢ . . . . . . . . . . . . . . . . . . . . . . . . . . PIT املؤقتة مشابك .٤.٦١٥٩ . . . . . . . . . . . . . . . . . . . HAL طبقة توسعة بعد النظام واجهة .٥.٦١٦٠ . . . . . . . . . . . . . . . . . . . . . اإلفتراضية املقاطعات ختدمي دالة .٦.٦

يا

Page 12: برمجة وتصميم نظام تشغيل
Page 13: برمجة وتصميم نظام تشغيل

اجلداول قائمة٢٠ . . . . . . . . . . . . . . . . . . . . . . x86 حلواسيب الذاكرة خمطط .١.٢٢١ . . . . . . . . . . . . . . . . . x86 حلواسيب واإلخراج اإلدخال منافذ .٢.٢٢٦ . . . . . . . . . . . . . . . . . صفر احللقة صالحية تتطلب اليت األوامر .٣.٢

٤..٢ مسجل األعالم EFLAGS . . . . . . . . . . . . . . . . . . . . . . . . ٢٩١..٦ Interrupt Vector Table . . . . . . . . . . . . . . . . . . . . . . . . ١٢٤

١٢٨ . . . . . . . . . . . . . . . . . . . x86 Processor Excep ons Table .٢.٦١٣٤ . . . . . . . . . . . . . . . . . . . . . x86 حلواسيب العتاد مقاطعات .٣.٦١٣٦ . . . . . . . . . . . . . . . . . . . . . . . . . IRR/ISR/IMR مسجل .٤.٦١٣٦ . . . . . . . . . . . . . . . . . . . . . . . PIC ملتحكم املنافذ عناوين .٥.٦١٣٧ . . . . . . . . . . . . . . . . . . . . . . . . . . ICW1 األول األمر .٦.٦

٧..٦ األمر الثالث للمتحكم الرئيسي ICW3 for Primary PIC . . . . . . . . . . . ١٣٨٨..٦ األمر الثالث للمتحكم الثانوي ICW3 for Slave PIC . . . . . . . . . . . . . ١٣٨٩..٦ األمر الرابع ICW4 . . . . . . . . . . . . . . . . . . . . . . . . . . ١٣٩

١٤٠ . . . . . . . . . . . . . . . . . . . . . . . OCW2 الثاين التحكم أمر .١٠.٦١٤٠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OCW2 أمر .١١.٦١٤٣ . . . . . . . . . . . . . . . . . . . . . . 8253 PIT املؤقتة مسجالت .١٢.٦

يج

Page 14: برمجة وتصميم نظام تشغيل
Page 15: برمجة وتصميم نظام تشغيل

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

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

والباحثني. للطالب املصدر)

يه

Page 16: برمجة وتصميم نظام تشغيل
Page 17: برمجة وتصميم نظام تشغيل

البحث مقدمةلتشغيل األساسية الركائز أهم أحد أصبحت حيث احلياة جماالت شىت يف مهما دورا التشغيل أنظمة تلعبالشخصي احلاسب جهاز من فبدءا ، املتكاملة االلتكرونية الشرائح على يعتمد عتاد أو جهاز أي وادارةوحىت اآللية والصرافات األلعاب أجهزة و (Embedded Device) واملضمنة الكفية األجهزة و اجلواالت والتشغيل أنظمة برجمة جمال فان لذلك ونظرا التشغيل. بأنظمة تعمل كلها (Orbiter) والدورات الفضاء أجهزةالربجمي. والتطبيق العلمي البحث من نصيبها تأخذ أن جيب اليت احلاسب علوم يف املجاالت أهم من يعترب

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

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

املجال. يف العملية الطالب خربة تزداد الوقت نفس ويف األماماألخري للمستخدم وليس والتعليمية األكادميية لالستخدامات هو إقرأ) (نظام النظام هدف أن ايضاح بنا جيدر وجنو/لينوكس. مثل ضخمة أنظمة على للعمل واعداده األداة هذه على الطالب تعليم هو اهلدف أن حيث ،

الرحيم. عبد عصام أمحد٢٩/٦/٢٠١٠

يز

Page 18: برمجة وتصميم نظام تشغيل
Page 19: برمجة وتصميم نظام تشغيل

.I القسمBasics األساسيات

Page 20: برمجة وتصميم نظام تشغيل
Page 21: برمجة وتصميم نظام تشغيل

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

املستخدم. لربامج (Virtual Machine) ومهية تشغيل بيئة توفر وهي مهمة ميزة اىلفجهاز مفصل. بشكل وتوضحيها عليها الوقوف جيب اليت املفاهيم من عددا السابق التعريف ويوضحوتنفيذها األوامر ملعاجلة خاص متحكم وجود بسبب ذلك ويأيت لألوامر حقيقية تشغيلية منصة هو احلاسبوإرسال ومنطقية) حسابية عمليات (من األوامر تنفيذ على يعمل حيث (Processor) املعاجل هو املتحكم هذا ،بناء تكلفة وبسبب الربامج، باسم املعاجل ينفذها اليت األوامر جمموعة وتسمى املطلوبة. األماكن اىل النتائج.(Instruc on Set) األوامر مبجموعة تعرف واليت األوامر من معينا عددا على يتعرف ما غالبا فانه املعاجلاملعاجل١.والشكل يدعمها اليت األوامر ملجموعة وفقا تكتب أن جيب فاا برنامج أي أوامر تنفيذ يتم حىت لذلكوسنركز اختيارية هي منها وجزءا الربامج. منها تتكون اليت املعاجل وأوامر لتعليمات عاما منوذجا يوضح ١.١

املعاجل. أوامر متثل واليت OPCODE ال على هنا

x86 املعاجل ألوامر العام الشكل :.١.١ شكل

هذه ، املستخدم مشاكل حلل الربامج وكتابة احلاسب برجمة ميكن خالهلا من برجمية لغة املعاجل أوامر وتشكلاملعاجل أوامر أن حيث 1 و 0 الرموز من اللغة هذه وتتكون . (Machine Language) اآللة بلغة تسمى اللغةالربنامج حيوي أن جيب ٢AX للمسجل 31744 القيمة لتعيني فمثال الرموز. هذه من معينة سلسلة اال هي ماأمرا اللغة ذه متكامل برنامج كتابة عملية تكون وبالتايل .101110001100000000000111 األمر على

انتشارا. األكثر ألا نظرا البحث هذا يف بت ٣٢ انتل معاجلات عن ١سنتحدثاملعاجل. بداخل ذواكر هي ٢املسجالت

٣

Page 22: برمجة وتصميم نظام تشغيل

التشغيل أنظمة عن مقدمة .١

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

التالية. بالصورة يكون التجميع لغة يف السابق األمر

Example ١.١: Assembly Language

١ MOV AX,0x7C00 ; Instead of 101110001100000000000111

يقوم والذي باملجمع يسمى املحول هذا ، تنفيذه من املعاجل يتمكن حىت اآللة لغة اىل حتويله جيب والذيتبسط املستوى عالية لغة توفري يف التجميع لغة تنجح ومل اآللة٣. بلغة يقابله ما اىل التجميع لغة أمر بتحويلعالية لغات تطوير مت ما سرعان لذلك اآللة للغة خمتصرات أا بسبب وذلك أكرب بشكل الربامج برجمة عمليةوأوامرها اآللة تعقيدات عن بعيدا مبسط بشكل فيها الربامج تكتب حبيث والسي++ السي٤ لغة مثل املستوىبرامج املعاجل ينفذ ولكي املستوى. العالية التحكم ومجل التراكيب من عددا اللغات هذه وتدعم ومسجالابرنامج طريق عن يتم وهذا التجميع بلغة يقابلها ما اىل املصدرية الشفرة ترمجة أوال جيب فانه اللغات هذهيستطيع والذي اآللة بلغة برناجما اىل التجميع شفرة بتحويل املجمع يقوم وبعدها (Compiler) املترجم يسمى

تنفيذه. املعاجلوحدة حسب على ختتلف خمتلفة بطرق متثل فإا احلاسب يف والربامج البيانات متثيل 2خبصوصتتكون فمثال ، ال أم كهربائية طاقة وجود وهو الثنائي املنطق تستخدم اآلخر يف لكنها و التخزين(Transistors) والترانزستورات (Capacitors) املكثفات ماليني من DRAM الرئيسية الذاكرةمن واحد بت تشكل (واليت خلية كل تتكون و ، (Memory Cells) الذاكرة خاليا لتكوينوجود إما هي واليت (البت) اخللية قيمة املكثف حيفظ حبيث وترانزستور مكثف من الذاكرة)قيمة تغيري على الترانزستور ويعمل (0 تساوي (منطقيا عدمها وإما (1 تساوي (منطقيا إلكتروناملعاجل دور ويأيت الرئيسية الذاكرة يف والربامج األوامر مجيع حتفظ الشكل هذا وعلى . املكثفحبفظ يقوم مث ومن وتنفيذها (Decode) وظيفتها وفهم بقرائتها يقوم حيث األوامر هذه لتنفيذوليس الرئيسية الذاكرة على يتواجد أن جيب الربنامج فان برنامج أي املعاجل ينفذ ولكي النتائج.

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

حجم يف وال منهم بأي املكتوبة الربامج أداء يف فرقا يوجد ال حقيقة لذلك اآللة بلغة واحدا أمرا يقابله التجميع بلغة أمر ٣كلاملجمع. طريق عن حتويلها جيب أنه حساب على ولكن التجميع بلغة الربامج تطوير سهولة يف الفرق يظهر وإمنا ، الناتج امللف

بيل. معامل يف Unix يونيكس نظام برجمة دف السي لغة تطوير ٤مت

٤

Page 23: برمجة وتصميم نظام تشغيل

هلذه الرئيسي اهلدف .(Opera ng System) التشغيل بنظام مسيت الطبقة املوارد.هذه هذه مع يتعامل لكيالطبقة هذه مهمة من أصبحت العتاديات هذه إدارة أن حبيث العتاد تعقيدات عن املربمج عزل هي الطبقةيوضح ٢.١ والشكل العتاديات. هذه من لإلستفادة ختيلي) جهاز (أو برجمية واجهة توفر الوقت نفس ويفهي طبقة وأدىن .[?] طبقات عدة اىل احلاسب جهاز قسمنا حالة يف التشغيل) (نظام الطبقة هذه موضع

احلاسب طبقات :.٢.١ شكل

(Integrated Circuit) املتكاملة الشرائح ومن املتحكمات من تتكون حيث (Device Level) العتاديات طبقةبرميجات تظهر وفيها Microarchitecure طبقة الطبقة هذه املادية.يلي باألجهزة يتعلق ما وكل واألسالكبداخل data path ال برميج فمثال وظيفتها تؤدي لكي املتحكمات عمل يف تتحكم (Mircoprogram)احلساب وحدة اىل املسجالت من قيمتني جبلب (Clock Cycle) للساعة دورة كل يف يقوم والذي املعاجلاملسجالت. أحد يف النتيجة حبفظ تقوم مث ومن ما عملية عليهم جتري اليت (Arithme c Logic Unit) واملنطقوتشكل ، واملنطق احلساب وحدة اىل بارساهلا وذلك والتعليمات األوامر تنفيذ هي data path وظيفةInstruc on) األوامر جمموعة طبقة التجميع لغة ملربمج املرئية املسجالت وكذلك املدعومة األوامر جمموعةاألوامر كل على حتوي حيث (Machine Language) اآللة طبقة الطبقة هذه وتسمى (Set Architecture. (Device Controller) العتاد متحكمات مسجالت من والكتابة القراءة أوامر فيها مبا املعاجل يدعمها اليتبربجمة املربمج يقوم أن من فبدال املستخدم عن العتاد وتعزل تفصل واليت التشغيل نظام طبقة الطبقة هذه ويليواجهة يوفر النظام فان القرص على ملف قراءة من يتمكن حىت للملفات ونظام الصلب القرص متحكمواملستخدم) النظام (برامج الربامج طبقة توجد وأخريا .read(fd,buffer,size) بالصورة مبسطةأن جيب التشغيل لنظام تتبع اليت الربامج أن حيث التشغيل نظام ضمن النظام برامج من الكثري تصنف وال

األخرى٥. املستويات يف وليس (Kernel Mode) النواة مستوى يف تعملاملعاجلات. يف احلماية مستويات عن احلديث سيتم اهللا بإذن الثاين الفصل ٥يف

٥

Page 24: برمجة وتصميم نظام تشغيل

التشغيل أنظمة عن مقدمة .١

التشغيل نظام هو ما .١.١كذلك. اآلخرون يعتربه ال ما لنظام تابعا البعض يعتربه فما التشغيل ألنظمة واضحا تعريفا إجياد الصعب منختيلي) (جهاز برجمية واجهة ويوفر احلاسب وموارد عتاد يدير التشغيل نظام أن هو عليه اإلتفاق مت ما لكن

املوارد. هذه من اإلستفادة ميكن خالهلا من

ختيلي كجهاز التشغيل نظام .١.١.١استخدامها ويصعب بدائية هي (Machine Language Level) اآللة طبقة تقدمها اليت الواجهة أن جند سبق ممالنظام شفرة على الربنامج حيوي أن جيب القرص على ملف من للقراءة كمثال ذكرنا فكما ، الربامج كتابة يفللتعامل شفرة على الربنامج حيوي أن جيب وكذلك القرص، على الفيزيائي امللف عنوان نعرف حىت امللفاتاملقطع رقم حتديد جيب القرص من للقراءة حيث باليسرية ليست شفرة وهي الصلب القرص متحكم معلو األمور هذه اليها.كل املقاطع حتميل يتم حىت (Buffer) املؤقتة الذاكرة وحتديد املسار ورقم الرأس ورقمالتشغيل نظام طبقة بإجياد هو احلل كان لذلك االن، عليها هي ملا التطبيقات وصلت ملا الشكل ذا استمرتمن بدال الربامج تستخدمها لكي العتاد وتعقيدات تفاصيل من وجمردة مبسطة أوامر أو واجهة توفر واليت

. اآللة طبقة توفرها اليت األوامر

والعتاد للموارد كمدير التشغيل نظام .٢.١.١لعتاد إدارة الربجمية الواجهة جبانب تقدم الطبقة هذه فان التشغيل نظام طبقة بواسطة املربمج عزل مت أن بعدالعتاد إدارة ومهمة ، املتحكمات) من الشبكة،وغريها واملرنة،كرت الصلبة (املعاجل،الذاكرة،األقراص احلاسبلربنامج املعاجل حيجز بأن وذلك نفسه املعاجل بإدارة التشغيل نظام يقوم فمثال ، وحتريره العتاد حجز يف تتركزموارد أهم النظام يدير وكذلك (Mul tasking املهام (تعدد آخر لربنامج وحيجزه املعاجل حيرر مث ومن مابرامج طلب على بناءا (Memory Blocks) الذاكرة من مقاطع حبجز وذلك الرئيسية الذاكرة وهي احلاسب

الصفحات. ومفهوم التخيلية الذاكرة وإدارة الذواكر حترير عملية وكذلك املستخدم

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

الفترات. تلك يف استخدمت اليت التشغيل أنظمة وبعض

٦

Page 25: برمجة وتصميم نظام تشغيل

التشغيل أنظمة تاريخ .٢.١

امليكانيكية احلواسيب :(١٦٢٤-١٩٤٥) الصفري اجليل .١.٢.١١٩ عمره كان عندما ١٦٤٢ عام يف باسكال٦ بليز الفرنسي العامل قبل من كانت حسابية آلة لبناء حماولة أول(وتعرف اآللة الفرنسية.هذه احلكومة ملصلحة للضرائب حمصال يعمل كان الذي والده ملساعدة وذلك عاما

.(٣.١ الشكل (انظر والطرح اجلمع عملية فقط وتوفر بالكامل ميكانيكية هي (Pascaline باالسم

باسكال آلة :.٣.١ شكل

حسابية آلة ببناء Go ried Wilhelm Leibniz ليبرت جوتفريد الرياضي العامل قام عاما ٣٠ حوايل وبعدأصبح املرة هذه ولكن (Step Reckoner باالسم ومسيت ١٦٩٤ عام يف منها اإلنتهاء (مت أخرى ميكانيكيةومضت .(٤.١ (الشكل والقسمة الضرب و والطرح اجلمع األربعة: احلسابية العمليات إجراء املمكن من

بأملانيا متحف يف Step Reckoner آلة :.٤.١ شكل

آلة بتصميم Charles Babbage بابباج شارلز الربوفيسور قام حىت يذكر شيء أي بدون عاما ١٥٠ حوايلأا يف باسكال آلة تشابه أيضا ميكانيكية آلة وهي ، (٥.١ الشكل (انظر Difference engine الفروق حمرك

له. تشريفا بامسه باسكال الربجمة لغة تسمية مت ٦والذي

٧

Page 26: برمجة وتصميم نظام تشغيل

التشغيل أنظمة عن مقدمة .١

احلدود كثريات دوال قيم حساب لغرض تصميمها مت اآللة هذه لكن والطرح اجلمع عملييت سوى توفر الإخراج طريقة هي اآللة هذه ميز وما . (Method of Finite Differences) املنتهية التقريب طرق باستخدام

بتجميعه بابباج ابن قام أن بعد الفروق حمرك :.٥.١ شكل

تصميمها أن إال جيدا عملت الفروق آلة أن من الرغم وعلى حناسية. ألواح على النتائج تنقش حيث النتائجويستهلك جمددا حماولته يعيد بابباج شارلز جعل ما وهذا فقط٧ واحدة خوارزمية حبساب يسمح كانAnaly cal Engine التحليلي باملحرك عرفت أخرى آلة بناء يف حكومته ثروة ومن وقته من ضخما جزءااملخزن مكونات: أربع على احتوى بالكامل) ميكانيكية آلة أيضا (وهو املحرك هذا .(٦.١ الشكل (انظرالبطاقات (قارئ اإلدخال وحدة ، (Computa on Unit احلساب (وحدة الطاحنة ،(Memory (الذاكرةاملخزن ويتكون املطبوعة). واللوحات املثقبة (البطاقات اإلخراج ووحدة (Punched Card Reader املثقبةفتستقبل الطاحنة أما ، والنتائج املتغريات حلفظ وتستخدم صحيح رقم ٥٠ بطول (Word) كلمة ١٠٠٠ منامليزة املخزن. يف النتائج حتفظ مث ومن األربعة الرياضية العمليات من أي عليهم وجتري املخزن من الوسائطحيث الفروق) حمرك عكس (على املشاكل من كبري عدد حل على قدرته هو التحليلي للمحرك األساسيةالبطاقات هذه وحتوي البطاقات. هلذه قارئا بواسطة املحرك اىل قرائتها ويتم مثقبة بطاقات يف الربامج تكتبحيفظ مث ومن مثال) (مجع ما عملية وجيري املخزن من عددين بقرائة يقوم لكي املحرك اىل موجه أوامر علىوألن التنفيذ. ونقل والتفرع عددين بني املقارنة مثل أخرى أوامر حتوي وكذلك ، أيضا املخزن يف النتيجةAda Lovelace لوفالس آدا باملربجمة بابباج شارلز استعان فقد التجميع) بلغة شبيهة (بلغة للربجمة قابل املحركرمبا املحرك دقة من يزيد أن يف بابباج شارلز ينجح مل احلظ ولسوء التاريخ. يف مربمج كأول صنفت واليتللحواسيب األول اجلد باباج شارلز يعترب بآخر أو وبشكل والعجالت. التروس من آالفا اىل حيتاج ألنه

احلالية. للحواسيب مشاة التحليلي املحرك عمل فكرة أن حيث احلاليةعلى تعتمد ولكنها حسابية آلة ببناء Konrad Zuse تسوزا كونارت األملاين الطالب قام ١٩٣٠ أواخر ويفاملنطق وعلى الريالي على تعتمد حاسبة أول وتعترب (٧.١ الشكل (انظر Z1 جبهاز ومسيت (Relay) الريالي

الفروق. ملحرك مكتمل منوذج ببناء بلندن العلوم متحف قام ١٩٩١ عام ٧يف

٨

Page 27: برمجة وتصميم نظام تشغيل

التشغيل أنظمة تاريخ .٢.١

لندن يف مبتحف التحليلي املحرك :.٦.١ شكل

.١٩٤٣ عام الثانية العاملية احلرب أثناء برلني يف انفجار يف Z1 احلاسبة تدمري مت احلظ ولسوء عملها. يف الثنائيبنائه خطط ومجيع هو تدمريه بسبب تليه اليت احلواسيب تصاميم يف يؤثر مل Z1 تصميم أن من الرغم وعلىJohn أتاناسوف جون قام الزمن من برهة وبعد الوقت. ذاك أثرها هلا كان اليت التصاميم أحد يعترب أنه إال

بأملانيا متحف يف انشائها إعادة بعد Z1 حاسبة :.٧.١ شكل

يستخدم حيث وقته يف مدهشا كان والذي (?? الشكل Atanasoff(انظر جهاز بتصميم Vincent Atanasoffبدايات ويف عمليا. يكن مل اجلهاز ولكن للذاكرة مكثفات وحيوي (Binray Arithme c) الثنائي التحسيبHarvard Mark اىل تسميتها أعيد واليت - ASCC احلاسبة بتصميم Howard Aiken ايكني هوارد قام ١٩٤٠الريالي على يعتمد أن وقرر بابباج منهج نفس هوارد أتبع ٩.١).وقد الشكل (انظر هافارد جامعة يف - Iومت تصميمها من اإلنتهاء مت ١٩٤٤ عام بابباج.ويف شارلز ا فشل واليت العامة لألغراض حاسبة يصمم وأنامليكانيكية احلاسبات عصر انتهى التصميم هذا Harvard.ومع Mark II ب مسيت أيضا حمسنة نسخة تصميم

٩

Page 28: برمجة وتصميم نظام تشغيل

التشغيل أنظمة عن مقدمة .١

Iowa State جامعة يف انشائها إعادة بعد Atanasoff حاسبة :.٨.١ شكل

والتحكم واإلخراج اإلدخال (ب) Mark I حاسبة من األيسر اجلزء (ا)

Harvard Mark I حاسبة :.٩.١ شكل

جديد. عصر وبدأ والريالي

التوصيل لوحات و املفرغة الصمامات :(١٩٤٥-١٩٥٥) األول اجليل .٢.٢.١موجات عرب األملانية الغواصات اىل رسائل يرسل برلني يف البحرية أمري كان ، الثانية العاملية احلرب بدايات يفعن وذلك مشفرة ترسل الرسائل كانت حظهم ولسوء ، التقاطها الربيطانيني حلفاؤها استطاع واليت الراديولتشفري تصنيعه مت والذي Enigma Machine) إجنما جبهاز يسمى جهاز قبل من تنتج خاصة شفرة طريقوذلك األجهزة هذه أحد على احلصول من الربيطانية اإلستخبارات متكنت وقد . تشفريها وفك الرسائلالربيطانيني يتمكن وحىت األملان. من جهازا سرقت قد كانت واليت البولندية اإلستخبارات مع اإلتفاق بعدمعمال أسست ما سرعان لذلك ، طويلة حسابية وعمليات وقتا يتطلب هذا فان الرسائل شفرة فك من

١٠

Page 29: برمجة وتصميم نظام تشغيل

التشغيل أنظمة تاريخ .٢.١

وفكها الرسائل لتشفري األملانية إجنما آلة :.١٠.١ شكل

أشخاص عدة قبل من تصميمها مت احلاسبة هذه .Colossus باالسم عرفت الكترونية حاسبة على حيوي سرياومت سريا املشروع كون وبسبب .١٩٤٣ عام يف للعمل جاهزة وأصبحت تورنج آالن العامل فيها وشاركولكن احلديثة احلواسيب تصاميم على يؤثر مل احلواسيب من النوع هذا فان عاما ٣٠ يقارب ملا عليه التكتمحساباا. يف اهلوائية الصمامات تستخدم للربجمة قابلة إلكترونية حاسبة أول تعترب احلاسبة هذه أن بالذكر جيدرللبدء باملال متويله طالبا األمريكي اجليش اىل مقترحا John Mauchley موكلي جون قدم ١٩٤٣ عام ويفاألخطاء لتقليل وذلك يدويا حساا من بدال املدفعيات إطالق جداول حلساب إلكترونية حاسبة بتصميمحاسبة ببناء إيكريت اخلريج وطالبه موكلي جون وبدأ املشروع على املوافقة متت وقد الوقت، وكسب.Electronic Numerical Integrator And Computer للجملة اختصارا ENIAC إيناك باالسم تسميتها مت٣٠ احلاسبة وتزن ، (Relays) حاكمة ١٥٠٠ و (Vacuum Tubes) مفرغا صماما ١٨٠٠٠ من وتتكونعددا يسع منهم كل مسجل ٢٠ على احلاسبة حتتوي وداخليا الطاقة. من واط كيلو ١٤٠ وتستهلك طن

.Switch مفتاح ٦٠٠٠ طريق عن إيناك برجمة وتتم خانات. ١٠ بطول صحيحااحلاسبة تستخدم ومل انتهت قد احلرب كانت الذي الوقت ، ١٩٤٦ عام إيناك تصميم من اإلنتهاء مت وقدللباحثني مشروعهم لوصف صيفية مدرسة إيكريت وطالبه موكلي جون نظم ذلك وبعد الرئيسي. هلدفهاكانت بعدها حاسبة وأول . الضخمة احلاسبات من كبري عدد ظهور عن أسفر الذي األمر واملهتمني.

١١

Page 30: برمجة وتصميم نظام تشغيل

التشغيل أنظمة عن مقدمة .١

إجنما شفرة كسرت اليت colossus احلاسبة :.١١.١ شكل

ENIAC احلاسبة :.١٢.١ شكل

ILLIAC و JOHNIAC احلاسبات تلته كذلك كامربدج. جامعة يف ويلكس بواسطة ١٩٤٩ عام يف EDSACاختصارا EDVAC باالسم مسيت أخرى حاسبة على بالعمل وإيكريت موكلي جون بدأ ذلك وغريهم.بعدمن بدال الثنائية باألرقام تعمل كانت واليت Electronic Discrete Variable Automa c Computer للجملةاخلاصة. شركتهم أنشئا قد وإيكريت جون أن بسبب املشروع توقف ذلك إيناك).بعد يف (كما العشرية

١٢

Page 31: برمجة وتصميم نظام تشغيل

التشغيل أنظمة تاريخ .٢.١

EDVAC احلاسبة :.١٣.١ شكل

١٣

Page 32: برمجة وتصميم نظام تشغيل
Page 33: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢تنص واليت (John von Neumann architecture) نيومان فون جون العامل ملعمارية تتبع x86 عائلة حواسيب

: التالية وحدات الثالث من يتكون أن جيب حاسب جلهاز تصميم أي أن على

.(Central Processing Unit) مركزية معاجلة وحدة أو معاجل .١.(Memory) ذاكرة .٢

.(I/O Devices) وإخراج إدخال أجهزة .٣

فهي الثانية الوحدة أما ، احلسابية والعمليات األوامر بتنفيذ تقوم واليت املعاجلة وحدة هي االوىل الوحدةاإلدخال وحدات وأخريا ، تنفذها أن املعاجلة وحدة على جيب اليت واألوامر والتعليمات البيانات حتويمثاال يوضح حيث ١.٢ الشكل واخراجها.(انظر البيانات ادخال يف تستخدم اليت االجهزة وهي واإلخراجوظيفة سنستعرض يلي وفيما (System Bus) النظام مسار هو األجزاء هذه كل بني ويربط املعمارية) هلذه

حدة. على جزء كل

x86 حواسيب معمارية :.١.٢ شكل

١٥

Page 34: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

النظام معمارية .١.٢

System Bus النظام مسار .١.١.٢

وظيفة و . الرئيسية الذاكرة متحكم مع (CPU) املركزية املعاجلة وحدة (System Bus) النظام١ مسار يربطللمسارات العامة الصورة يوضح ٢.٢ والشكل املختلفة. احلاسب أجزاء بني البيانات نقل هي املسارات هذهمسار مسارات: ثالث من النظام مسار ويتألف .(Personal Computers) الشخصية احلواسيب أجهزة يف

.(Control Bus) التحكم ومسار (Address Bus) العناوين ومسار (Data Bus) البيانات

x86 الشخصية احلواسيب يف املسارات :.٢.٢ شكل

.Front-side Bus أيضا ١ويسمى

١٦

Page 35: برمجة وتصميم نظام تشغيل

النظام معمارية .١.٢

Data Bus البيانات مسارخط ٣٢ هناك يكون ما وغالبا واحد. بت ميثل خط كل (Lines) خطوط عن عبارة هو البيانات مسار(وحتديدا املعاجل من (Data) البيانات نقل يف املسار هذا ويستخدم بت) ٣٢ بطول البيانات مسار أن (أي.NorthBridge الشمايل اجلسر بداخل يتواجد والذي الذاكرة متحكم اىل (Control Unit التحكم وحدة منبطول بيانات ارسال عند خاصة معاجلة يتطلب هذا فان ثابت حجم هو البيانات مسار حجم أن وبسبب.(Padding) مستخدمة الغري اخلطوط يف أصفار باضافة املعاجل يقوم ما فغالبا ، البيانات مسار طول من أقلبت ٣٢ ترسل مرحلة كل ويف مراحل عدة على تتم نقلها عملية فان أكرب بطول بيانات إرسال حالة يف أما

. البيانات من

Address Bus العناوين مساروحيدد ، عليه الكتابة أو منه للقراءة سواءا استخدامه املراد الذاكرة عنوان نقل يف العناوين مسار يستخدميستطيع اليت الذاكرة حجم حيدد وبالتايل الذاكرة يف اليه الوصل ميكن عنوان أكرب العناوين مسار حجمبت ٢٠ هو املسار هذا حجم كان 8086 انتل معاجلات تستخدم اليت األجهزة ويف . معها التعامل احلاسبحجم فان 80286/80386 معاجلات يف أما ميجا٢ ١ هي املعاجل هذا معها يتعامل ذاكرة أقصى فان وبالتايلذاكرة تنصيب ميكن وبالتايل بت ٣٢ اىل احلجم هذا زيادة مت تليها اليت املعاجلات ويف بت ٢٤ هو مسار هذااملعاجلات على البحث هذا يف سنقتصر ولكننا ، احلجم هذا زيادة مت احلديثة املعاجلات ويف ، جيجا ٤ حبجماحلواسيب أجهزة على الزمن من ملدة وسيطرا انتشارها بسبب بت ٣٢ بطول عناوين مسار تدعم اليت

الشخصية.

Control Bus التحكم مسار

أمر أو العناوين مسار على املوجود العنوان من القراءة أمر مثل األوامر ارسال يف التحكم مسار يستخدموظيفة يؤدي (بت) خط وكل اخلطوط من عدد من املسار هذا ويتألف . املطلوب العنوان على الكتابةجيب العناوين خط على املوجود العنوان أن يعين والذي WRITE الكتابة خط هو اخلطوط هذه أحد حمددة.أن على يدل والذي READ القراءة خط هو اآلخر اخلط . البيانات مسار يف املوجودة القيمة له تعين أنالولوج خط هو يهمنا خط آخر . البيانات مسار اىل قيمته تقرأ أن جيب العناوين مسار يف املوجود العنوانواإلخراج اإلدخال متحكم اىل أم الذاكرة متحكم اىل موجه العنوان كان اذا ما حيدد والذي ACCESS

اإلدخال أجهزة متحكم اىل موجه العنوان أن يعين هذا فان ١ القيمة هي اخلط هذا قيمة كانت حالة ويفREAD and اخلطني قيمة حبسب وذلك اليه الكتابة أو العنوان هذا من القراءة سيتم وبالتايل واإلخراج

.WRITE.٢٠ للقوة مرفوع ٢ حساب من ٢ناجتة

١٧

Page 36: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

الذاكرة متحكم .٢.١.٢احلاسب. جهاز يف (Controllers) املتحكمات ماهية عن نبذة إعطاء جيب املتحكم هذا وظيفة ذكر قبلاستقبال هي وظيفتها الداخلية املسجالت من العديد حتوي ما بعتاد تتحكم شرحية بأنه املتحكم ويعرفتنفذ أوامر اىل الربجمية األوامر بني ما للربط شرحية بأا كذلك تعريفها وميكن العتاد. على وتنفيذها األوامرأو البيانات واستقبال إلرسال كانت سواءا املسجالت من العديد غالبا حيوي متحكم وأي ما. عتاد علىيف أو املتحكم هذا يف املوجودة املسجالت بقية عن مييزه فريد رقم يأخذ أن جيب مسجل وأي ، لألوامراحلديث وسيتم (Port) املنفذ باسم يعرف الرقم هذا ، برجميا معه التعامل ميكن حىت وذلك آخر متحكم أييضع مث ومن األمر هذا تنفيذ يف املتحكم يبدأ حيث اليه أمر يرسل عندما يبدأ املتحكم وعمل الحقا. عنه

القيمة. بقرائة يقوم لكي املعاجل اىل (Interrupt) إشارة ويرسل مسجالته أحد يف النتيجة(NorthBridge) الشمايل اجلسر متحكم على غالبا يتواجد والذي الرئيسية الذاكرة متحكم عن باحلديث وعودةويقوم ، وتنفيذها الذاكرة اىل املرسلة األوامر استقبال يف األساسية وظيفته تكمن .حيث ٣.٢ الشكل إنظرهذه (Refresh) تنعيش بإعادة يقوم كذلك الذاكرة شرائح من أي اىل املرسلة العناوين بتوجيه املتحكم هذا

حمتوياا. الذاكرة تفقد ال حىت احلاسب عمل طيلة الذاكرة

الشمايل اجلسر :.٣.٢ شكلاإلدخال ومتحكم الفيديو وذاكرة والبايوس الرئيسية والذاكرة املعاجل بني ما الوصل حلقة اجلسر هذا يعترب

املطلوب. املتحكم اىل بتوجيهها ويقوم األوامر يستقبل حيث واإلخراج

واإلخراج اإلدخال متحكم .٣.١.٢أجهزة متحكمات ربط يف (SouthBridge اجلنويب اجلسر أيضا (ويسمى واإلخراج اإلدخال متحكم يستخدممع مباشرة يرتبط الشمايل اجلسر أن يظهر حيث .٢.٢ الشكل من يتضح وهذا املعاجل مع واإلخراج اإلدخالواإلخراج اإلدخال عتاد متحكمات يربط بدوره والذي الشمايل اجلسر مع يرتبط اجلنويب اجلسر بينما املعاجلبداخله متحكم لديه ...اخل) الطابعة أو الفأرة أو املفاتيح لوحة (مثل باحلاسب يرتبط جهاز وكل احلاسب. يفاملوجود املتحكم اىل األوامر احلاسب بداخل املوجود املتحكم يرسل حيث ، احلاسب بداخل آخر ومتحكممعرفة طريق عن يتم وهذا احلاسب يف املوجود املتحكم برجمة جيب فانه جهاز أي ولربجمة . العتاد بداخلاليه. الصحيحة األوامر إرسال من نتمكن حىت فيه مسجل كل ووظيفة به املوجودة (Registers) املسجالت

١٨

Page 37: برمجة وتصميم نظام تشغيل

املعاجل .٢.٢

املسجالت األرقام هذه متيز حبيث (So ware Ports) برجمية منافذ تسمى معينة أرقاما تأخذ املسجالت هذهالبعض٣. بعضها من

Ports املنافذ

برامج تكون الشبكات برجمة جمال يف فمثال أشياء عدة على للداللة احلاسب علوم يف املنافذ مفهوم يستخدماملوجودة املنافذ باملفهوم يقصد رمبا كذلك معها، باالتصال العميل لربامج تسمح حىت معني منفذ رقم هلا اخلادمعلى املتحكمات يف املوجودة املسجالت على املفهوم يدل قد أيضا ، ا احلاسب عتاد لوصل األم اللوحة يفواليت املتحكمات ملنافذ الوصول ميكن و البحث. هذا يف املنافذ عن حديثنا يف سنقصده ما وهذا اجلهازout port address والتعليمة in port address املعاجل تعليمة باستخدام I/O ports ب تعرفالتعليمة أما املعاجل مسجالت أحد يف ووضعها متحكم يف مسجل من قيمة لقراءة األوىل تستخدم حيثاألمرين هذين أحد استخدام وعند . املتحكم يف مسجل اىل للمعاجل مسجل يف قيمة لكتابة تستخدم الثانيةاملعاجل يقوم حيث الذاكرة متحكم اىل وليس واإلخراج اإلدخال متحكم اىل موجه العنوان أن يعين ذلك فاناإلدخال متحكم يستجيب وبالتايل (Control Bus) التحكم مسار يف املوجود ACCESS اخلط قيمة بتعنيعنواين تستخدم األجهزة بعض وهناك . املطلوب املتحكم اىل بتوجيهه ويقوم العنوان هذا ويقرأ واإلخراجبيانات أي كتابة عند حيث MemoryMapped I/Oيعرفب ما وهو ا اخلاص للمتحكم للوصول الذاكرةالرئيسية. الذاكرة على وليس لألجهزة متحكمات على البيانات هذه كتابة يعين ذلك فان العناوين هذه علىنظرا احلاسب شاشة على الكتابة اىل يؤدي هذا فان 0xa000:0x0 الذاكرة عنوان على الكتابة عند فمثالخريطة يوضح ١.٢ واجلدول احلاسب شاشة متحكم مع (Memory Mapped) موجه هو العنوان هذا النالكتابة بعكس in/out األوامر استخدام العناوين هذه ملثل الكتابة حتتاج وال ،x86 حواسيب يف الذاكرة

. port I/O املنافذ عنواين يفاملتحكمات على املوجودة املسجالت تستخدمها عناوين هي (Port I/O) واإلخراج اإلدخال منافذ عناوينمنهم. كل ووظيفة املنافذ بعناوين قائمة يعرض ٢.٢ واجلدول ، املسجالت هذه ترقيم مبهمة البايوس ويقوم

املعاجل .٢.٢

. بتفيذها ويقوم األوامر يستقبل حيث احلاسب جلهاز الرئيسي املحرك هو املعاجل يعترب

املسجل حيدد الذي هو كتابة) أو (قراءة املرسل األمر طبيعة لكن ، الرقم نفس تأخذ املتحكمات لبعض املسجالت بعض ٣هناكمعه. التعامل جيب الذي

١٩

Page 38: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

x86 حلواسيب الذاكرة خمطط :.١.٢ جدولالوصف النهاية عنوان البداية عنوان

IVT املقاطعات جدول 0x003ff 0x00000البايوس بيانات منطقة 0x004ff 0x00400

مستخدمة غري 0x07bff 0x00500النظام حممل برنامج 0x07dff 0x07c00

مستخدمة غري 0x9ffff 0x07e00Video RAM الفيديو ذاكرة 0xaffff 0xa0000

Monochrome VRAM اللون أحادية الفيديو ذاكرة 0xb7777 0xb0000Color VRAM امللونة الفيديو ذاكرة 0xbffff 0xb8000

Video ROM BIOS ذاكرة 0xc7fff 0xc0000BIOS Shadow Area منطقة 0xeffff 0xc8000

البايوس نظام 0xfffff 0xf0000

التعليمات تنفيذ دورة .١.٢.٢، ا يقوم أن جيب اليت اخلطوات من بعضا يتطلب هذا فان الذاكرة على املوجودة الربامج املعاجل ينفذ لكي

هلا. سردا يلي وفيما ، اخلطوات هذه من خبطوة بالبدء املعاجل يقوم (Clock ck) للساعة دقة كل ويف

بداخل املسجالت اىل الرئيسية الذاكرة من البيانات جلب يتم وفيها (Fetch) البيانات جلب مرحلة أوالاملعاجل.

.(Decode) البيانات تفسري مرحلة ثانيا.(Execute) البيانات تنفيذ مرحلة ثالثا

.(Write back) النتائج حفظ مرحلة رابعا

CPU Modes املعاجل عمل أمناط .٢.٢.٢حيث املعاجل بأمناط يعرف ما هناك يكن مل بت ١٦ معاجلات من اصدارة أول أنتل شركة طرحت عندمايقوم النمط هذا يف ، (Real Mode) احلقيقي بالنمط االن يعرف ما وهو واحد بنمط يعمل املعاجل كانأي للمستخدم لربنامج ميكن حيث التنفيذ بصالحيات يعرف ما يوجد وال اليه موجه أمر أي بتنفيذ املعاجلاملشاكل من عدد توجد كذلك ، (hlt األمر (مثل العمل عن النظام ايقاف يف يتسبب أمر بتنفيذ يقوماملهام تعدد ملفهوم دعم أي يوجد وال املستخدم برجميات من للذاكرة محاية توجد ال فمثال النمط هذا يفيمكن حبيث ، املشاكل هذه لتحل املعاجل بنية على أمناط عدة بادخال أنتل سارعت لذلك .(Mul tasking)يتبعها معينة طريقة بأنه املعاجل منط ويعرف شاء. وقتما بالتحويل يقوم وأن منط أي يف يعمل أي للمعاجل

٢٠

Page 39: برمجة وتصميم نظام تشغيل

املعاجل .٢.٢

x86 حلواسيب واإلخراج اإلدخال منافذ :.٢.٢ جدولاإلستخدام املنفذ رقمSlave DMA controller 0000-000fSystem 0010-001FFirst Interrupt controller (8259 chip) 0020-0021Second interrupt controller 0030-0031Programable Interval Timer 1 (8254 chip) 0040-0043Programable Interval Timer 2 0048-004BSystem devices 0050-006FNMI Enable / Real Time Clock 0070-0071DMA Page registers 0080-008BSystem devices 0090-009FSlave interrupt controller 00A0-00A1Master DMA controller 00C0-00DESystem devices 00F0-00FFSystem devices 0100-0167IDE Interface - Quaternary channel 0168-016FIDE interface - Secondary channel 0170-0177IDE Interface - Ter ary channel 01E8-01EFIDE interface - Primary channel 01F0-01F7Games Port (joys ck port) 0200-0207Usually used by sound cards, also used by NOVEL NETWARE KEY CARD 0220-022FPlug and Play hardware 0270-0273Parallel Port * 0278-027ASome mes used for LCD Display I/O 0280-028FAlternate VGA Video Display Adaptor assignment (secondary address) 02B0-02DFGPIB 0, data aquisi on card 0 (02E1 to 02E3 only) 02E0-02E7Serial Port - COM 4 02E8-02EFSerial Port - COM 2 02F8-02FFO en used as a default for Network Interface cards (was prototype card) 0300-031FST506 and ESDI Hard Disk Drive Interface (mostly used in PX/XT and early PC/AT) 0320-023FMPU-401 (midi) interface, on Sound Cards 0330-0331Some mes used for Network Interface cards 0360-036FAnother address used by the Secondary IDE Controller (see 0170-0177) 0376-0377Parallel Port * 0378-037AFM (sound) synthesis port on sound cards 0388-038BMDA, EGA and VGA Video Display Adaptor (only 03B0 to 03BB used) 03B0-03BBParallel Port (originally only fi ed to IBM mono display adaptors) * 03BC-03BFEGA / VGA Video Display Adaptor, (Primary address) 03C0-03DFPCIC PCMCIA Port Controller 03E0-03E7Serial Port - COM 3 03E8-03EFFloppy Disk Drive Interface 03F0-03F6Another address used by the Primary IDE Controller (see 01F0-01F7) 03F7-03f7Serial Port - COM 1 03F8-03FFWindows sound system (used by many sound cards) 0533-0537

٢١

Page 40: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

ال حبيث الذاكرة لعنواين محاية هناك كان إذا ما املستخدم النمط حيدد فمثال األوامر لتنفيذ عمله أثناء املعاجلالذاكرة. يف منطقة ألي الوصول معينة صالحيات ميتلك ال لربنامج ميكن

Real Mode احلقيقي النمط .٣.٢.٢تصميمها مت x86 حواسيب أن بسبب وهذا يقلع عندما بالعمل احلاسب اجلهاز يبدأ الذي هو النمط هذااحلقيقي بالنمط يبدأ املعاجل تدع جعلها ما هذا فان ذلك على انتل حتافظ وحىت القدمية األجهزة تدعم حبيثباحلاسب التحكم زمام التشغيل نظام يستلم عندما ذلك وبعد ، القدمية احلواسيب مع توافقا اإلقالع عندحتويل وبني بت ١٦ تشغيل نظام النظام هذا يسمى وبالتايل النمط هذا يف بالعمل اإلستمرار بني ما خمري فانه٣٢ تشغيل نظام النظام يسمى وبالتايل (Protected Mode) املحمي النمط وهو االخر النمط اىل املعاجل منط(ax,bx,cx,dx,...etc املسجالت (مثال بت ١٦ طول من مسجالت املعاجل يستخدم النمط هذا يف و بت.الفقرة يف شرحها سيتم - الرئيسية الذاكرة اىل للوصول (Segment:Offset) املقطع:اإلزاحة عنونة ويستخدمVirtual) التخيلية والذاكرة الذاكرة حلماية دعم أي يقدم وال ميجابايت 1 حبجم ذاكرة يدعم وأيضا التالية-

املستخدم. برجميات من للذاكرة محاية يوفر وال (Memory

(Segment:Offset Addressing) املقطع:اإلزاحة عنونةاملسجالت طول أن حيث الذاكرة حجم مشكلة ظهرت ، بت ١٦ معاجل أول وهو 8086 ملعاجل أنتل طرح بعديتعامل بأن للمسجل مسح ما وهذا بت ١٦ هو والعناوين) البيانات (مسجالت املعاجل هذا يف املستخدمةاألجهزة هذه يف (Address Bus) العناوين مسار أن من الرغم على الذاكرة من فقط كيلوبايت ٦٤ معأنتل شركة أمام اخليار كان هنا اىل ميجا. ١ حبجم ذاكرة باستخدام يسمح ما وهو بت ٢٠ حبجم كانهذه إلن نظرا آنذاك جدا مكلفا كان احلل هذا ولكن املعاجل بداخل املوجودة املسجالت حجم بزيادة هوهو انتل فعلته ما العالية. إمكانياته من الرغم على مكلفا نوع وهو SRAM النوع من ذواكر هي املسجالتاستخدام مت الذاكرة عناوين اىل للوصل واحد مسجل استخدام من فبدال الذاكرة لعنونة خمتلفة طريقة إجيادويستخدم (Segments) مقاطع اىل الذاكرة تقسيم يف كانت الفكرة ، بت ١٦ بطول منهما كل مسجلني٦٥٥٣٦ هناك وبالتايل (Segment Number or Address) املقطع عنوان أو رقم على للداللة املسجالت أحد(Offsets) بالقيم تعرف ما وهي املقطع بداخل العناوين اىل للوصل اآلخر املسجل ويستخدم خمتلف٤ مقطعإذا كيلوبايت). ٦٤ هو املقطع حجم أن (أي بايت ٦٥٥٣٦ حيوي مقطع كل وبالتايل املقطع بداخلوذلك مقطع أي اىل الوصول وميكن كيلوبايت ٦٤ حبجم الذاكرة من منطقة بأا Segments املقطع يعرفاملسجالت (مثل املعاجل بداخل املوجودة املقاطع مسجالت من أي اىل املقطع عنوان أو املقطع رقم بتحميلوذلك Offset اإلزاحة املقطع حمتويات اىل الوصول وميكن ، - الحقا شرحها سيتم - (CS,SS,DS,ES

.216 حساب من ناتج ٤هذا

٢٢

Page 41: برمجة وتصميم نظام تشغيل

املعاجل .٢.٢

0x0 العنوان من مقطع أي يف العناوين (تبدأ القيم مسجالت من أي اىل اليه الوصل املطلوب العنوان بتحميلاملنطقي العنوان مفهوم لنا خلقت الذاكرة عناوين اىل للوصول انتل اقترحتها اليت الطريقة هذه .(0xffff اىلبداخل والعنوان املقطع عنوان حتديد جيب فانه الذاكرة يف مكان أي اىل نصل لكي حيث (Logical Address)حيدد الثاين واجلزء املقطع عنوان حيدد األول اجلزء حيث Segment:Offset الشكل على وذلك املقطع هذايقوم لكي حقيقي أو فيزيائي عنوان اىل املنطقي العنوان حتويل هي حاليا املعاجل مهمة املقطع. بداخل العنوانيتم (Offset) اإلزاحة أن على تعتمد التحويل طريقة و ، الذاكرة متحكم اىل العناوين مسار عرب بارسالهمقطع أي أن بسبب وذلك ١٦ العدد يف ضرا يتم أن بعد ولكن ٥ (Segment) املقطع عنوان اىل مجعها

: كاأليت يتم والتحويل . له السابق املقطع من بايت ١٦ بعد يبدأphysical address = segment ∗ 0x10 + offset

0x10 العدد (أو ١٦ بالعدد 0x07c0 العنوان بضرب وذلك حتويله يتم 0x07c0:0x0000 املنطقي العنوان فمثالالفيزيائي العنوان ليخرج Offset ال اىل مجعه يتم ذلك وبعد ،0x07c00 هكذا ليصبح عشر) السادس بالنظام

.0x07c00

املقاطع تداخل مشكلةاملقاطع أن يعين وهذا ، له السابق املقطع من بايت ١٦ بعد مباشرة يبدأ مقطع أي أن السابقة الفقرة يف ذكرنااستخدمنا السابق مثالنا يف مثال خمتلفة. طريقة من بأكثر معني فيزيائي لعنوان الوصول ميكن حيث متداخلةاملنطقي العنوان نستبدل أن وميكن ، 0x07c00 الذاكرية املنطقة اىل للوصول 0x07c0:0x0000 املنطقي العنوانويف .0x07c00 الفيزيائي العنوان نفس على سنحصل التحويل اجراء وبعد 0x0000:0x7c00 بالعنوان السابقاملقاطع. هذه تداخل لنا يوضح ٤.٢ والشكل الذاكرة٦ يف لعنوان للوصل خمتلفة طريقة ٤٠٩٦ هناك احلقيقةعليها والكتابة آخر برنامج بيانات اىل الوصول إمكانية ما برنامج ألي مسح Overlapping التداخل هذا

الذاكرة. أجزاء محاية ناحية من ضعيف احلقيقي النمط جعل ما وهذا

Protected Mode املحمي النمط .٤.٢.٢يف يعمل معاجل أول كان والذي 80286 املعاجل باصدار أنتل سارعت املشاكل هذه على التعرف مت أن بعدالذاكرة مقاطع محاية وهي مشكلة أهم حل تليها) اليت (واملعاجلات املعاجل هذا . واملحمي) (احلقيقي منطنيالوصول وصالحيات الذاكرة مقاطع وصف طريق عن وذلك املستخدم برامج قبل من العشوائي الوصول منبت ٣٢ معاجل أول هو 80386 املعاجل .(Descriptor Table) الوصفات جداول تسمى جداول يف اليهامع التعامل بإمكانية مسح مما احلجم بنفس أيضا البيانات مسار وحجم يت ٣٢ حبجم مسجالت ويستخدمتعدد ودعم (Paging) الصفحات ومفهوم التخيلية للذاكرة دعم اضافة مت .كذلك جيجابايت ٤ حبجم ذاكرة

.(Offset) القيم لعناوين (Base Address) بداية عنوان هو املقطع عنوان نعترب ٥حبيثhttp://mirror.href.com/thestarman/asm/debug/ الرابط على Daniel B. Sedory الكاتب مقالة اىل ٦انظر

.Segments.html

٢٣

Page 42: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

احلقيقي النمط يف املقاطع تداخل :.٤.٢ شكل

هذا وقتنا حىت انتشارا األكثر أحد باعتبارها بت ٣٢ معاجلات عن احلديث سيتم البحث هذا ويف املهام.نظرا األساس هي تعترب بت ٣٢ معاجلات حول الدراسة ان إال بت ٦٤ معاجلات ظهور من الرغم على ،و

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

CPU Rings املعاجل حلقاتبسبب وهذا ، املستخدم برجميات من للذاكرة محاية يضمن هذا فان املحمي النمط يف املعاجل يعمل عندماالواصفات. جدول وهو الذاكرة لعنونة املعاجل يستخدمه جدول يف هلا الوصول وصالحيات الذاكرة توصيف،(CPU Rings) املعاجل حبلقات يسمى املحمي النمط يف عمله عند املعاجل اىل ادخاله مت الذي الصالحيات نظاماىل حيتاج ما أمر تنفيذ كان اذا ما تقرير يف املعاجل يستخدمها لكي املطلوب احلماية مستوى حتدد احللقات هذهباستخدام مسموح الذاكرة يف معني عنوان اىل الوصول كان اذا ما يقرر لكي وكذلك ال، أم أعلى صالحية.(Ring3) ٣ باحللقة وتنتهي (Ring0) صفر احللقة من تبدأ للمعاجل حلقات أربع ال.وتوجد أم معينة صالحيةالصالحيات لديه صفر احللقة يف يعمل برنامج أي أن بسبب (Kernel Mode) النواة منط تسمى صفر احللقةالنظام ايقاف يف تسببت لو حىت تعليمية أي وتنفيذ الذاكرة يف عنوان أي اىل بالوصول النظام على الكاملةتتبع اليت الربامج هي صفر احللقة يف تعمل اليت الربامج غالبا لذلك الربنامج) على تقع (املسؤولية العمل عنال عليها تعمل اليت الربامج أن حيث (User Mode) املستخدم بنمط تسمى ٣ احللقة أما التشغيل. لنظامعنوان أي اىل الوصول متلك وال (hlt واألمر cli االمر (مثل األوامر من العديد لتنفيذ صالحيات متلكرفع ما وهذا نفسه بالربنامج اخلاصة (Virtual Address Space) التخيلية العنونة مساحة خبالف الذاكرة يفيبدأ وعندما وصالحياا. احللقات هذه يوضح ٥.٢ والشكل ، ممكن حد أقصى اىل الذاكرة محاية درجةكل تنفيذ ميكن أنه حيث حلقات على حيوي ال منط وهو احلقيقي النمط يف يكون املعاجل فان باإلقالع النظاميكون املعاجل فان (PMode) املحمي النمط اىل التحويل وعند ، الذاكرة يف عنوان أي اىل والوصول األوامر

٢٤

Page 43: برمجة وتصميم نظام تشغيل

املعاجل .٢.٢

يف عنوان اىل التنفيذ نقل عند تلقائيا معينة حلقة اىل احللقة حتويل ويتم ، (Kernel Mode) صفر احللقة يفاحللقة. بتلك يعمل بأنه الواصفات جدول يف موصوف الذاكرة

املعاجل حلقات :.٥.٢ شكل

x86 معاجلات معمارية .٥.٢.٢معينة صالحية تتطلب منها بعضا Instruc on Set تسمى األوامر من جمموعة على يتعرف معاجل أيسيتسبب هذا فان وإال األوامر) هذه ملعرفة ٣.٢ اجلدول (انظر بتنفيذها املعاجل يقوم لكي صفر) (احللقةتتعامل دالة تتوفر مل ان والذي (General Protec on Fault) العام اخلطأ يسمى املعاجل من خطأ حدوث يف

العمل. عن النظام توقف اىل يؤدي هذا فان (Excep on Handler) معهما ومنها (General Registers) العامة لألغراض يستخدم ما منها املسجالت من العديد x86معاجلات وحتوياستخدامها ميكن ال مسجالت أيضا وتوجد (Segments Registers) املقاطع وأرقام العناوين حلفظ يستخدممن جمموعة هناك وأخريا النظام عمل على يؤثر فيها التغيري أن حيث النواة) (أي صفر احللقة برامج يف إال

: املسجالت هذه توضح التالية والقائمة برجميا. هلا الوصول ميكن ال واليت للمعاجل الداخلية املسجالتRAX (EAX(AX/AH/AL)), RBX (EBX(BX/BH/BL)), RCX (ECX(CX/CH/CL)), RDX : عامة مسجالت •

.(EDX(DX/DH/DL))عناوين: مسجالت •

. CS,SS,ES,DS,FS,GS:مقاطع مسجالت –

RSI (ESI (SI)), RDI (EDI (DI)), RBP (EBP (BP)). RSP (ESP (SP)), RIP (EIP إزاحة: مسجالت –.(IP))

.RFLAGS (EFLAGS (FLAGS)) األعالم: مسجل •

.DR0, DR1, DR2, DR3, DR4, DR5, DR6, DR7 التنقيح: مسجالت •

٢٥

Page 44: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

صفر احللقة صالحية تتطلب اليت األوامر :.٣.٢ جدولالوصف األمر

GDTR املسجل اىل العام الواصفات جدول حتميل LGDTLDTR املسجل اىل اخلاص الواصفات جدول حتميل LLDT

املهام مسجل حتميل LTRحتكم مسجل اىل بيانات نقل MOV cr x

new Machine Status WORD حتميل LMSWتنقيح مسجل اىل بيانات نقل MOV dr x

األول التحكم مسجل يف Task Switch Flag تصفري CLTSInvalidate Cache without writeback INVD

Invalidate TLB Entry INVLPGInvalidate Cache with writeback WBINVD

املعاجل عمل إيقاف HLTMSR مسجل قراءة RDMSR

MSR مسجل اىل الكتابة WRMSRPerformance Monitoring Counter قراءة RDPMC

me Stamp Counter قراءة RDTSC

.CR0, CR1, CR2, CR3, CR4, CR8 التحكم: مسجالت •

.TR1, TR2, TR3, TR4, TR5, TR6, TR7 اإلختبار: مسجالت •

mm0,mm1,mm2,mm3,mm4,mm5,mm6,mm7, xmm0, xmm1, xmm2, أخرى: مسجالت •.xmm3, xmm4, xmm5, xmm6, xmm7, GDTR, LDTR, IDTR, MSR, and TR

General Purpose Registers العامة املسجالتمن أي وتقسم بايت) ٤) بت ٣٢ هو منها كل طول عامة مسجالت أربع ٤ يوجد بت ٣٢ املعاجلات يفLow) األدىن واجلزء بت ١٦ بطول وهو (High Order Word) األعلى اجلزء جزئني: اىل املسجالت هذهHigh) األعلى اجلزء جزئني: اىل األدىن اجلزء يقسم كذلك ، بت ١٦ بطول أيضا وهو (Order Wordسبيل على بت. ٨ بطول أيضا وهو (Low Order Byte) األدىن واجلزء بت ٨ بطول وهو (Order ByteAX وهو أسفل وجزء مباشر) بشكل اليه الوصول ميكن (ال أعلى جزء اىل يقسم حيث EAX مسجل املثاللكن شيء ألي يستخدم العامة املسجالت هذه من مسجل كل .AL و AH قسمني اىل أيضا يقسم الذي

التالية. القائمة توضحها منهم لكل الغالبة اإلستخدامات بعض هناك

احلسابية. والعمليات البيانات لنقل يستخدم :EAX املسجل •

٢٦

Page 45: برمجة وتصميم نظام تشغيل

املعاجل .٢.٢

يعمل آخر مسجل باستخدام وذلك مباشر غري بشكل للذاكرة الوصول يف يستخدم :EBX املسجل •.Base Address رئيسي كعنوان

والعد. التكرار عمليات يف يستخدم :ECX املسجل •البيانات. ختزين يف يستخدم :EDX املسجل •

Segment Registers املقاطع مسجالتتستخدم مقاطع مسجالت ٦ وتوجد (Segments) املقاطع وعناوين أرقام لتخزين تستخدم املقاطع مسجالت

يلي: كما احلقيقي النمط يفتنفيذه. املراد للربنامج الشفرة مقطع بداية عنوان حيوي :CS املسجل •تنفيذه. املراد للربنامج البيانات مقطع بداية عنوان حيوي :DS املسجل •تنفيذه. املراد للربنامج املكدس مقطع بداية عنوان حيوي :SS املسجل •تنفيذه. املراد للربنامج البيانات مقطع بداية عنوان حيوي :ES املسجل •

بعيد. مقطع عنوان حيوي :FS املسجل •العامة. لألغراض يستخدم :GS املسجل •

اىل تشري وإمنا والبيانات الربامج مقاطع اىل تشري ال املسجالت هذه فإن (PMode) املحمي النمط يف أما(حيوي املقطع ونوع املقطع بداية عنوان حتدد الواصفات هذه ، العام الواصفات جدول يف معينة واصفاتالفصل يف ذلك سنرى كما - فيها والكتابة والقراءة وصالحية التنفيذ صالحية وحتدد ( بيانات أم شفرات

اهللا-. بإذن الرابع

Offset Registers اإلزاحة مسجالت، املقطع بداخل اإلزاحة عنوان يتطلب احلقيقي النمط يف الذاكرة اىل الوصول فإن املقاطع مسجالت جبانببت ١٦ و بت ٣٢ األنظمة يف بت ٣٢ هو منها كل حجم x86 معاجلات يف إزاحة مسجالت ٤ وتوجد

املسجالت: هذه توضح التالية والقائمة بت. ١٦ أنظمة يفالبيانات. مقطع يف اإلزاحة عنوان حيوي :SI املسجل •

السابقة. الوظيفة نفس :DI املسجل •يف عنوان أي على لألشارة استخدام وميكن املكدس مقطع بداخل اإلزاحة عنوان حيوي :BP املسجل •

آخر. مقطع أي

٢٧

Page 46: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

املكدس. مقطع بداخل اإلزاحة عنوان حيوي :SP املسجل •

Instruc on Pointer التعليمة مؤشراملعاجل سيقوم اليت التالية التعليمة عنوان حيوي وهو (CS) الشفرة مقطع بداخل إزاحة ميثل (IP) املسجل هذايف (EIP) بت ٣٢ بطول هو املسجل هذا التالية. للتعليمة الفيزيائي العنوان ميثل CS:IP والعنوان ، بتنفيذهااملعاجل تعليمة باستخدام حمتواه تغيري ميكن ال مسجل وهو بت، ١٦ أنظمة يف (IP) بت ١٦ و بت ٣٢ أنظمة

للتنفيذ. آخر مكان اىل القفز عن حمتواه تغيري يتم وإمنا MOV

FLAGS Register األعالم مسجليف (FLAGS) بت ١٦ حبجم و بت ٣٢ أنظمة يف (EFLAGS) بت ٣٢ حبجم مسجل هو األعالم مسجل، حمدده وظيفه لديه بت كل ذكره) السابق (باحلجم بتات عن عبارة هو املسجل وهذا ، بت ١٦ أنظمةبتات و بتنفيذها املعاجل يقوم اليت األوامر حالة تعكس حبيث (Status) حالة بتات اىل عام بشكل وينقسموظيفة يوضح ٤.٢ واجلدول .(System) للنظام بتات و اخلصائص بعض يف تتحكم حبيث (Control) حتكم

املسجل. هذا يف بت كلحيث (CLI,STI,IN,OUT األوامر (مثل األوامر من جمموعة لتنفيذ املطلوب احلماية مستوى IOPL البتني وحيددأعلى Current Priviledge Level احلايل احلماية مستوى كان حالة يف إال التعليمات هذه مثل تنفيذ يتم لنالتعليمات أن على داللة صفر هي القيمة تكون ما وغالبا ، ٧IOPL البتني يف املوجودة للقيمة مساويا أو من

.(Ring0) النواة لربامج اال تنفيذها يتم ال السابقة

Control Registers التحكم مسجالتCR0, CR1, CR2,CR3, CR4, وهي املعاجل وعمل سلوك يف للتحكم مسجالت ستة بت ٣٢ معاجلات يف توجدالنواة منط يف العمل عند إال هلا الوصول ميكن ال املسجالت هذه فان معها التعامل خلطورة ونظرا ، CR8ويف معها. والتعامل املسجالت هذه اىل الوصول املستخدم لربجميات يمكن وال (Kernel Moder/Ring0)املعاجل منط حتويل بعملية نقوم أو ميكن خالله من حيث CR0 وهو حتكم مسجل أول فقط يهمنا احلايل الوقت(Paging) الصفحات خاصية بتفعيل نقوم أن ميكن وكذلك (PMode) املحمي النمط اىل احلقيقي النمط من

بت. ٣٢ حبجم مسجل وهو CR0 التحكم مسجل يف بت كل حمتويات توضح التالية والتركيبة ،• Bit 0 (PE) : Puts the system into protected mode.

• Bit 1 (MP) : Monitor Coprocessor Flag This controls the opera on of the WAIT instruc on.

• Bit 2 (EM) : Emulate Flag. When set, coprocessor instruc ons will generate an excep on

و٣. ٢ مث ١ احللقة ويليها (Ring0) صفر احللقة هو محاية مستوى ٧أعلى

٢٨

Page 47: برمجة وتصميم نظام تشغيل

املعاجل .٢.٢

EFLAGS األعالم مسجل :.٤.٢ جدولاإلستخدام البت اسم البت رقم

Carry Flag - Status bit CF 0حمجوزة - 1

Parity Flag PF 2حمجوزة - 3

Adjust Flag - Status bit AF 4حمجوزة - 5

Zero Flag - Status bit ZF 6Sign Flag - Status bit SF 7

Trap Flag - System Flag TF 9Interrupt Enabled Flag - System Flag IF 9

Direc on Flag - Control Flag DF 10Overflow Flag - Status bit OF 11

I/O Priviledge Level - Control Flag IOPL 12-13Nested Task Flag - Control Flag NT 14

حمجوزة - 15Resume Flag (386+ Only) - Control Flag RF 16

v8086 Mode Flag (386+ Only) - Control Flag VM 17Alignment Check (486SX+ Only) - Control Flag AC 18

Virtual Interrupt Flag (Pen um+ Only) - Control Flag VIF 19Virtual Interrupt Pending (Pen um+ Only) - Control Flag VIP 20

Iden fica on (Pen um+ Only) - Control Flag ID 21حمجوزة - 22-31

٢٩

Page 48: برمجة وتصميم نظام تشغيل

x86 حواسيب معمارية .٢

• Bit 3 (TS) : Task Switched Flag This will be set when the processor switches to another task.

• Bit 4 (ET) : ExtensionType Flag. This tells us what type of coprocesor is installed.

– 0 - 80287 is installed

– 1 - 80387 is installed.

• Bit 5 (NE): Numeric Error

– 0 - Enable standard error repor ng

– 1 - Enable internal x87 FPU error repor ng

• Bits 6-15 : Unused

• Bit 16 (WP): Write Protect

• Bit 17: Unused

• Bit 18 (AM): Alignment Mask

– 0 - Alignment Check Disable

– 1 - Alignment Check Enabled (Also requires AC flag set in EFLAGS and ring 3)

• Bits 19-28: Unused

• Bit 29 (NW): Not Write-Through

• Bit 30 (CD): Cache Disable

• Bit 31 (PG) : Enables Memory Paging.

– 0 - Disable

– 1 - Enabled and use CR3 register

٣٠

Page 49: برمجة وتصميم نظام تشغيل

.II القسمBoo ng احلاسب إقالع

Page 50: برمجة وتصميم نظام تشغيل
Page 51: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣من النظام نواة نسخ على يعمل املحمل هذا ، له حممل كتابة هي تشغيل نظام برجمة يف األساسيات أهم أحدنظام ويبدأ املحمل عمل دورة تنتهي وهكذا ، النواة اىل التنفيذ ينقل مث الرئيسية الذاكرة اىل األقراص أحدسندرس الفصل هذا يف املستخدم. إحتياجات وتلبية واملهمات االوامر بتنفيذ بالبدء النواة يف متمثال التشغيلدراسة هو املرحلة هذه فالغرض ، FAT12 بنظام مرن قرص من االقالع وسيتم وماهيته املحمل برجمة كيفية

. مبسطة نواة وتنفيذ وحتميل املحمل أساسيات

احلاسب إقالع .١.٣نظام لتحميل بالكهرباء وصله عند اجلهاز ا يقوم خطوة أول هي (Boot-Strapping) احلاسب إقالعإشارة ترسل حيث ، احلاسب يف التشغيل مفتاح على الضغط عند مباشرة العملية هذه وتبدأ التشغيل،Power Supply) الطاقة موزد وحدة اىل بتوجيهها تقوم واليت ( MotherBoard ) االم اللوحة اىل كهربائية١الطاقة، من املطلوبة بالكمية وملحقاته احلاسب تزويد مبهمة تقوم لكي PSU وحدة دور يأيت ذلك بعد .(Unitمت أنه على االشارة هذه تدل . BIOS ال نظام اىل وبالتحديد االم اللوحة إىل Power Good اشارة وإرسالاختصارا يعرف الذي ( Power on Self Test ) الذايت الفحص برنامج سيبدأ وفورا ، الكافية الطاقة تزويد...اخل) التسلسلي والناقل واملاوس املفاتيح ولوحة الذاكرة (مثل احلاسب وحملقات أجهزة بفحص POST بPOST ال سيقوم حيث BIOS ال نظام اىل التحكم بنقل POST ال يقوم بعدها سليمة. أا من والتأكدعنوان أول يف ( jump ) قفز تعليمة بوضع أيضا سيقوم و 0xFFFF0 الذاكرة اية اىل BIOS ال بتحميلأول أن يعين وهذا CS:IP املسجلني تصفري هي POST ال مهام من كذلك ، الذاكرة اية اىل الذاكرة يفالتحكم BIOS ال يستلم . BIOS ال اىل وبالتحديد الذاكرة اية اىل القفز تعليمة هي املعاجل سينفذها تعليميةباملزيد ،ويقوم املقاطعات من العديد وتوفري ( Interrupt Vector Table ) املقاطعات جدول انشاء يف ويبدأاالجهزة يف تشغيل نظام عن البحث مهمة يف يبدأ ذلك وبعد ، للحاسب واالختبار الفحص عمليات منقابال جهازا BIOS ال جيد مل حالة ،ويف Setup برنامج يف BIOS ال اعدادات يف ترتيبها على بناءا املوجودة( Halt ) العمل عن احلاسب ويوقف تشغيل نظام توفر بعدم خطأ رسالة يصدر فانه القائمة كل يف لالقالععلى القطاع هذا حيوي ) منه األول القطاع بتحميل BIOS ال سيقوم لإلقالع قابال جهازا توفر حالة ويف ،املحمل. اىل التنفيذ وسينقل 0x07c00 الفيزيائي العنوان اىل وبالتحديد الرئيسية الذاكرة اىل املحمل) برنامج

احلاسب. تشغيل مت أنه على 1 كانت اذا قيمته تدل ( bit ) بت على حتوي اإلشارة ١هذه

٣٣

Page 52: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

والذي املقاطعات جدول على املقاطعات من العديد BIOS ال نظام لنا يوفر النظام) (اقالع املهمة هذه خاللمعينة وظيفة الداء البايوس نظام لنا يوفرها خدمات هي املقاطعات هذه ، 0x0 العنوان من بدءا انشائه يتمعن للبحث البايوس نظام يستخدمها اليت املقاطعات أهم من واحدة الشاشة. على حرف لطباعة مقاطعة مثلالقطاع حتميل مث ومن اجلهاز هذا عن البحث يف وظيفتها تكمن حيث int 0x19 املقاطعة هي االقالع جهازاملعقد باالمر ليست والتحميل البحث طريقة . اليه التنفيذ ونقل 0x07c00 الفيزيائي العنوان اىل منه األوللالقالع) القابلة االجهزة قائمة على موجود جهاز أي (من قطاع أول يف البحث املقاطعة هذه على حيثاجلهاز هذا أن على تدل االول القطاع آخر على تكون أن جيب بايتني عن عبارة وهي 0xAA55 التوقيع عنكان اذا فقط استخدامها ميكن البايوس نظام لنا يوفرها اليت املقاطعات أن بالذكر اجلدير ومن لالقالع. قابلProtected Mode املحمي النمط اىل املعاجل منط تغيري مت إذا أما Real Mode احلقيقي النمط يف يعمل املعاجلحدوث يف استخدامها سيتسبب بل املقاطعات هذه من االستفادة ميكن لن فانه الحقا- ذلك سنرى كما -

احلاسب. عمل توقف ( Excep on ) استثناءات

Bootloader النظام حممل .٢.٣جيب املحمل اليها.هذا التنفيذ ونقل التشغيل نظام نواة حتميل هي الرئيسية وظيفته برنامج هو النظام حممل

: االتية الشروط فيه تتوفر انبالضبط. بايت 512 يكون أن جيب الربنامج حجم .١

التوقيع حيمل وأن ، 0 املسار ، 0 الرأس ، 1 رقم القطاع : القرص يف األول القطاع على يتواجد أن .٢املعروف.

اليها. التنفيذ ونقل النواة حتميل شفرة حيوي أن .٣ما وهو ( header,symbol table,...etc ) أضافات أي من خايل object code الربنامج يكون أن .٤

. Flat Binary بـ أيضا يعرفيكفي ال احلجم هذا أن حيث متقدمة٢، خصائص توفري على وقدرته املحمل وظيفة يقيد األول الشرطفانه 32-bit ستكون النواة أن وبسبب ، بتنفيذها للبدء هلا الطريق ومتهيد النظام نواة عن املحمل يبحث لكيوانتهاءا A20 البوابة وتفعيل واخلاصة) (العامة الواصفات جداول من بدءا األشياء من العديد جتهيز جيبأكرب حجم اىل حيتاج ذلك كل . تنفيذها يف للمباشرة النواة اىل والقفز املحمي النمط اىل املعاجل منط بتغيريب يسمى ما وهو مرحلتني على جتزئيها اىل املحمالت مربجموا يلجأ ما عادة لذلك املشروط احلجم منحيمل وهو القرص يف قطاع أول على يتواجد أن وهو للمحمل الثاين الشرط . Mul -Stage Boot Loader

التايل: الفيزيائي العنوان1 رقم القطاع •

Safe Mode ال خاصية ٢مثل

٣٤

Page 53: برمجة وتصميم نظام تشغيل

الذاكرة خمطط .٣.٣

0 رقم املسار •0 رقم الرأس •

مقطع نسخ على تساعد اليت االدوات من العديد توفر مع خصوصا املعقد باألمر ليس الشرط هذا وحتقيقكقطاع االول القطاع بتمييز متعلق فهو الشرط من الثاين الشق أما ، آخر قرص يف مقطع اىل ما قرص منيف 0xAA55 التوقيع حيمل أن جيب فانه لالقالع قابال القطاع يكون حىت حيث ، غريه من لالقالع قابلعلى تتعرف لن (0x19 رقم مقاطعة (وحتديدا البايوس فان التوقيع هذا وبدون . 511 و 510 رقم البايتأن املمكن فمن ، اجباري وليس اختياري شرط فهو الثالث الشرط أما لإلقالع. قابل كقطاع القطاع هذاتحمل أن جيب الواقعية احلاالت أغلب يف ولكن ! فقط ترحيب رسالة عرض هي املحمل وظيفة تكون16-bit نواة حتميل عن خيتلف 32-bit نواة حتميل أن وذكرنا أسلفنا وقد املحمل. هذا طريق عن وتنفذ النواةحممل مهمة تقسيم وجب لذلك اخلصائص بعض وتفعيل النواة أمام الطريق جتهيز جيب االوىل يف حيث ،واحدة مبرحلة حتميلها ميكن فانه 16-bit النواة كانت حالة يف أما ، - ذلك كماسنرى - مرحلينت اىل النظامتنفيذية صيغ خترج املترمجات أغلب حيث للمحمل، التنفيذي امللف بصيغة يتعلق االخري والشرط . فقطتنفيذ عملية جيعل ما وهذا ( ELF,PE,COFF,...etc كصيغ ) قبله من املضافة املعلومات من الكثري على حتويالتنفيذ ينقل فانه الذاكرة اىل النظام حممل يقرأ عندما فالبايوس ، مستحيلة البايوس قبل من وتشغيله املحملحالة يف كما - امللف عن هيدر أو معلومات وليس للتنفيذ قابل يكون ان جيب والذي فيه بايت أول اىللألوامر املقابلة الثنائية الصيغة عن عبارة هي املحمل صيغة تكون أن جيب لذلك . ذكرها- السابق الصيغ

.Flat Binary او Object Code أي اضافات أي بدون فيه املوجودة

ألسباب (Assembly 16-bit) التجميع لغة تستخدم فغالبا النظام، حممل برجمة لغة عن احلديث بنا وجيدر) التوفقية ألغراض حتقيقا احلقيقي النمط يف يكون املعاجل فان العمل يبدأ عندما احلاسب أن منها ، كثريةاملمكن من جيعل 16-bit التجميع لغة استخدام أيضا ، السابقة األجهزة مع ( Backward Compa bilityوقت مللفات حاجة ال أخريا ، - 32-bit بيئة اىل االنتقال قبل - البايوس وخدمات مقاطعات استدعاءكل .Machine Language اآللة للغة خمتصرات اال ماهي التجميع لغة أن حيث ، run- me library التشغيللغة تستخدم املحمالت من كبري كم فهناك ! مستحيال السي بلغة النظام حممل كتابة عملية جيعل ال هذاجيب املحمالت هذه مثل برجمة قبل لكن ، ( GRUB,NTLDR,LILO...etc مثل ) واحد آن يف والتجميع السيلكي loader كتابة جيب أيضا ، عليها السي برامج تعمل لكي بيئة لتوفري run- me ال ملفات بعض برجمة

. main ال دالة من التنفيذ ويبدأ السي برنامج من الناجتة الصيغة يقرأ

الذاكرة خمطط .٣.٣.وأول ١.٣ الشكل تأخذ الرئيسية الذاكرة فان النظام حممل اىل التنفيذ ينقل وعندما اإلقالع مرحلة أثناء، للبايوس مقاطعة لكل التنفيذ دالة عنوان حيوي الذي املقاطعات جدول قبل من تستخدم بايت ١٠٢٤

٣٥

Page 54: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

الرئيسية الذاكرة حمتويات خمطط :.١.٣ شكل

البابوس ينقل الذي العنوان وهو 0x07c00 العنوان حتوي خالية ذاكرة مساحة مث البايوس بيانات منطقة يليهامبجرد واليت الفيديو وذاكرة املوسعة بايوس بيانات منطقة ويليها ، النظام) حممل برنامج (عنوان اليه التنفيذومناطق الفيديو ذاكرة على البايوس ويليها (Memory Mapped) الشاشة على األحرف تظهر عليها الكتابةوهو 0xf0000 العنوان من يبدأ والذي البايوس مث ومن واإلخراج اإلدخال أجهزة لبعض الذاكرة من حمجوزة

. (Memory Mapped) الروم ذاكرة على موجود

النظام حممل برجمة .٤.٣متعدد جممع وهو ٣NASM املجمع باستخدام ، وتنفيذه كتابته ميكن للنظام حممل أصغر يوضح ٣.١ املثال

. object code ثنائية ملفات انتاج ميزة ويوفر املنصات

كان سواءا منه القالع ليتم floppy disk or CD اىل نسخه وكيفية املحمل لترمجة املجمع استخدام كيفية ملعرفة ا امللحق ٣راجع. (Virtual Machine) ختيلي جهاز على أو فعلي جهاز على

٣٦

Page 55: برمجة وتصميم نظام تشغيل

النظام حممل برجمة .٤.٣

Example ٣.١: Smallest Bootloader

١٢ ;Simple Bootloader do nothing.٣٤ bits 16 ; 16−bit real mode.٥٦ start: ; label are pointer.٧ cli ; clear interrupt.٨ hlt ; halt the system.٩١٠ times 510−($−$$) db 0 ; append zeros.١١١٢ ; $ is the address of first instruction (should be 0x07c00).١٣ ; $$ is the address of current line.١٤ ; $−$$ means how many byte between start and current.١٥١٦ ; if cli and hlt take 4 byte then time directive will fill١٧ ; 510−4 = 506 zero's.١٨١٩ ; finally the boot signature 0xaa55٢٠ db 0x55 ; first byte of a boot signature.٢١ db 0xaa ; second byte of a boot signature.

ويبدأ 0x0000:0x7c00 العنوان اىل املحمل هذا بنسخ يقوم البايوس فان بالعمل اجلهاز يبدأ وعندماذو بشيء يقوم ال (real mode) احلقيقي النمط يف يعمل الذي هذا املحمل فان املثال هذا ويف ، بتنفيذهاملعاجل عمل يوقف الذي hlt االمر يليها ، املقاطعات عمل يوقف الذي cli االمر بتنفيذ يبدأ حيث فائدة(garbage) هلا معىن ال أوامر تنفيذ يف سيستمر املعاجل فان األمر هذا وبدون ، العمل عن النظام يتوقف وبالتايلآخر وأن بايت 512 يكون أن جيب املحمل حجم أن وبسبب . النظام (Crash) سقوط اىل ستؤدي واليتبايتني واخر قيمة ذات بايت 510 أول تكون أن جيب فانه باملحمل اخلاص التوقيع تكونا أن جيب فيه بايتنيصفر بالقيمة بايت 510 أول من املتبقي ملئ يتم لكي times املوجه استخدام مت لذلك ، 0xaa55 مهاعليه التعرف يتم حىت وذلك باملحمل اخلاص التوقيع كتابة مت ذلك وبعد اخرى) قيمة أي استخدام (وميكن

البايوس. قبل من

ترحيبية رسالة عرض .١.٤.٣مت ٣.٢ املثال ويف ، البايوس مقاطعات استخدام من ميكننا ذلك فان احلقيقي النمط يف نعمل زلنا ما طاملا

. 0xe الدالة int 0x10 البايوس مقاطعة باستخدام رسالة عرض

٣٧

Page 56: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

Example ٣.٢: Welcom to OS World

١٢ ;Hello Bootloader٣٤ bits 16 ; 16−bit real mode.٥ org 0x0 ; this number will added to all addresses (relocating).٦٧ start:٨ jmp main ; jump over data and function to entry point.٩١٠١١١٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٣ ; data١٤ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٥١٦ hello msg db "Welcome to eqraOS, Coded by Ahmad Essam",0xa,0xd,0١٧١٨ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٩ ; puts16: prints string using BIOS interrupt٢٠ ; input:٢١ ; es: pointer to data segment.٢٢ ; si: point to the string٢٣ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٤٢٥ puts16:٢٦٢٧ lodsb ; read character from ds:si to al ,and increment si if

df=0.٢٨٢٩ cmp al,0 ; check end of string ?٣٠ je end puts16 ; yes jump to end.٣١٣٢ mov ah,0xe ; print character routine number.٣٣ int 0x10 ; call BIOS.٣٤٣٥ jmp puts16 ; continue prints until 0 is found.٣٦٣٧ end puts16:٣٨

٣٨

Page 57: برمجة وتصميم نظام تشغيل

النظام حممل برجمة .٤.٣

٣٩ ret٤٠٤١٤٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٣ ; entry point of bootloader.٤٤ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٥٤٦ main:٤٧٤٨ ;−−−−−−−−−−−−−−−−−−−−−٤٩ ; intit registers٥٠ ;−−−−−−−−−−−−−−−−−−−−−٥١٥٢ ; because bootloader are loaded at 0x07c00 we can refrence this

location with many different combination of segment:offsetaddressing.

٥٣٥٤ ; So we will use either 0x0000:0x7c000 or 0x:07c0:0x0000 , and in

this example we use 0x07c0 for segment and 0x0 for offset.٥٥٥٦ mov ax,0x07c0٥٧ mov ds,ax٥٨ mov es,ax٥٩٦٠ mov si,hello msg٦١ call puts16٦٢٦٣ cli ; clear interrupt.٦٤ hlt ; halt the system.٦٥٦٦ times 510−($−$$) db 0 ; append zeros.٦٧٦٨ ; finally the boot signature 0xaa55٦٩ db 0x55٧٠ db 0xaa

data segment البيانات ومقطع code segment الكود مقطع أن هو السابق املثال يف املالحظ الشيءاملقاطع مسجالت قيم تعديل جيب لذلك بايت) 512 ال (داخل الذاكرة على املكان نفس يف متواجدانقمنا الذي النظام حممل برنامج اىل التنفيذ ينقل عندما البايوس أن نذكر بداية و الصحيح. املكان اىل لالشارةداعي ال لذلك cs:ip ال قيم تصحيح منها ينتج واليت far jump بعملية يقوم األمر حقيقة يف فانه بكتابته

٣٩

Page 58: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

.ds,es,ss,fs,gs مثل االخرى املقاطع مسجالت قيم تعديل جيب لكن املسجلني، هذين حول للقلقطريقة 4000 من بأكثر اليه الوصول ميكن 0x07c00 هو النظام ملحمل الفيزيائي العنوان أن نعلم وكماالن نظرا 0x0:0x7c00 العنوان أو 0x07c0:0x0 العنوان استخدام على نقتصر سوف لكن ، خمتلفة

البايوس. تستخدمها اليت الفعلية القيم هي هذهاملثال يف (كما 0x07c0 القيمة حتوي أن جيب املقاطع مسجالت فان االوىل العنونة استخدام حالة ويفمعروف هو وكما ،0x0 القيمة من تبدأ أن جيب فاا (label وال للمتغريات (سواءا العنوانني بقية أما اعاله)0x0 العنوان من بدءأ العناوين بترقيم تبدأ فاا ثنائي ملف اىل امللف ترمجة عملية يف تبدأ عندما املجمعات انويف ، كتابتها مت اليت بالقيمة للعناوين (reloca ng) تعيني اعادة عمل هي org املوجه وظيفة كانت لذلكالنظام حممل مكان اىل للوصول الثانية الطريقة استخدام حالة يف أما ، 0x0 هي القيمة كانت أعاله املثالالعنوان من قيمها تبدأ أن جيب االخرى املسجالت بينما 0x0 القيمة حتوي أن جيب املقاطع مسجالت فاناستخدام جيب لذلك 0x0 العنوان من ستبدأ املجمعات الن الطبيعي بالوضع ميكن ال وهذا ، 0x7c00

. 0x7c00 بالقيمة relocate ال قيمة وحتديد org املوجه

االقالع قطاع معلومات .٢.٤.٣يف تساعد معلومات على كذلك حيوي أن جيب boot sector اإلقالع قطاع فان النظام حممل اىل إضافةOEM معرف حتوي املعلومات هذه ، منه االقالع سيتم الذي القرص ووصف املستخدم امللفات نظام وصفرقم البايت من البيانات هذه كل تبدأ أن وجيب (BPB ب (ختتصر BIOS Parameter Block بيانات وحتويهو البيانات هذه فوائد أحد كذلك النظام حممل تطوير أثناء بكثرة البيانات هذه استخدام يتم وسوف .٤3

القرص. يف املستخدم امللفات نظام على التشغيل أنظمة تعرفExample ٣.٣: Bios Parameter Block

١٢ OEM ID db "eqraOS " ; Name of your OS, Must

be 8 byte! no more no less.٣٤ bytes per sector dw 0x200 ; 512 byte per sector.٥ sectors per cluster db 0x1 ; 1 sector per cluster.٦ reserved sectors dw 0x1 ; boot sector is

reserved.٧ total fats db 0x2 ; two fats.٨ root directory dw 0xe0 ; root dir has 224

entries.٩ total sectors dw 0xb40 ; 2880 sectors in the

volume.

هذه بتنفيذ سيبدأ املعاجل فان القفز وبدون التنفيذية، الشفرة اىل القفز تعليمة ستكون املحمل يف تعليمة أول فان السبب ٤هلذاالنظام. سقوط اىل االخر يف يؤدي ما وهذا تعليمات اا باعتبار البيانات

٤٠

Page 59: برمجة وتصميم نظام تشغيل

النظام حممل برجمة .٤.٣

١٠ media descriptor db 0xf0 ; 1.44 floppy disk.١١ sectors per fat dw 0x9 ; 9 sector per fat.١٢ sectors per track dw 0x12 ; 18 sector per track.١٣ number of heads dw 0x2 ; 2 heads per platter.١٤ hidden sectors dd 0x0 ; no hidden sector.١٥ total sectors large dd 0x0١٦١٧ ; Extended BPB.١٨١٩ drive number db 0x0٢٠ flags db 0x0٢١ signature db 0x29 ; must be 0x28 or 0x29.٢٢ volume id dd 0x0 ; serial number written

when foramt the disk.٢٣ volume label db "MOS FLOPPY " ; 11 byte.٢٤ system id db "fat12 " ; 8 byte.

.OEM and BPB بيانات اضافة بعد املحمل شفرة يوضح ٣.٤ املثال

Example ٣.٤: BPB example

١٢ ;Hello Bootloader٣٤ bits 16 ; 16−bit real mode.٥ org 0x0 ; this number will added to all addresses (relocating).٦٧ start:٨ jmp main ; jump over data and function to entry point.٩١٠١١ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٢ ; OEM Id and BIOS Parameter Block (BPB)١٣ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٤١٥ ; must begin at byte 3(4th byte), if not we should add nop

instruction.١٦١٧ OEM ID db "eqraOS " ; Name of your OS, Must

be 8 byte! no more no less.١٨

٤١

Page 60: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

١٩ bytes per sector dw 0x200 ; 512 byte per sector.٢٠ sectors per cluster db 0x1 ; 1 sector per cluster.٢١ reserved sectors dw 0x1 ; boot sector is

reserved.٢٢ total fats db 0x2 ; two fats.٢٣ root directory dw 0xe0 ; root dir has 224

entries.٢٤ total sectors dw 0xb40 ; 2880 sectors in the

volume.٢٥ media descriptor db 0xf0 ; 1.44 floppy disk.٢٦ sectors per fat dw 0x9 ; 9 sector per fat.٢٧ sectors per track dw 0x12 ; 18 sector per track.٢٨ number of heads dw 0x2 ; 2 heads per platter.٢٩ hidden sectors dd 0x0 ; no hidden sector.٣٠ total sectors large dd 0x0٣١٣٢ ; Extended BPB.٣٣٣٤ drive number db 0x0٣٥ flags db 0x0٣٦ signature db 0x29 ; must be 0x28 or 0x29.٣٧ volume id dd 0x0 ; serial number written

when foramt the disk.٣٨ volume label db "MOS FLOPPY " ; 11 byte.٣٩ system id db "fat12 " ; 8 byte.٤٠٤١٤٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٣ ; data٤٤ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٥٤٦ hello msg db "Welcome to eqraOS, Coded by Ahmad Essam",0xa,0xd,0٤٧٤٨ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٩ ; puts16: prints string using BIOS interrupt٥٠ ; input:٥١ ; es: pointer to data segment.٥٢ ; si: point to the string٥٣ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٥٤٥٥ puts16:

٤٢

Page 61: برمجة وتصميم نظام تشغيل

النظام حممل برجمة .٤.٣

٥٦٥٧ lodsb ; read character from ds:si to al ,and increment si if

df=0.٥٨٥٩ cmp al,0 ; check end of string ?٦٠ je end puts16 ; yes jump to end.٦١٦٢ mov ah,0xe ; print character routine number.٦٣ int 0x10 ; call BIOS.٦٤٦٥ jmp puts16 ; continue prints until 0 is found.٦٦٦٧ end puts16:٦٨٦٩ ret٧٠٧١٧٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٧٣ ; entry point of bootloader.٧٤ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٧٥٧٦ main:٧٧٧٨ ;−−−−−−−−−−−−−−−−−−−−−٧٩ ; intit registers٨٠ ;−−−−−−−−−−−−−−−−−−−−−٨١٨٢ ; because bootloader are loaded at 0x07c00 we can refrence this

location with many different combination٨٣ ; of segment:offset addressing.٨٤٨٥ ; So we will use either 0x0000:0x7c000 or 0x07c0:0x0000٨٦ ; and in this example we use 0x07c0 for segment and 0x0 for

offset.٨٧٨٨ mov ax,0x07c0٨٩ mov ds,ax٩٠ mov es,ax٩١٩٢ mov si,hello msg٩٣ call puts16

٤٣

Page 62: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

٩٤٩٥ cli ; clear interrupt.٩٦ hlt ; halt the system.٩٧٩٨ times 510−($−$$) db 0 ; append zeros.٩٩

١٠٠ ; finally the boot signature 0xaa55١٠١ db 0x55١٠٢ db 0xaa

نالحظ كما حيث Hex Editor عشر سادس حمرر بأي عرضها حالة يف السابقة الشفرة يوضح ٣.٥ املخرج والبيانات هذه فوق القفز يتم أن جيب لذلك املعاجل) (تعليمات التنفيذية الشفرة مع متداخلة املحمل بيانات أن

الصحيح. التوقيع حتمل وأا بايتني آخر من التأكد جيب كذلك ، خاطئة كتعليمات تنفذ ال حىتExample ٣.٥: Hex value of bootloader

Of fse t ( h ) 00 01 02 03 04 05 06 07

00000000 E9 72 00 65 71 72 61 4F ér . eqraO00000008 53 20 20 00 02 01 01 00 S . . . . .00000010 02 E0 00 40 0B F0 09 00 . à .@đ . . .00000018 12 00 02 00 00 00 00 00 . . . . . . . .00000020 00 00 00 00 00 00 29 00 . . . . . . ) .00000028 00 00 00 4D 4F 53 20 46 . . .MOS F00000030 4C 4F 50 50 59 20 66 61 LOPPY fa00000038 74 31 32 20 20 20 57 65 t12 We00000040 6C 63 6F 6D 65 20 74 6F lcome to00000048 20 65 71 72 61 4F 53 2C eqraOS ,00000050 20 43 6F 64 65 64 20 62 Coded b00000058 79 20 41 68 6D 61 64 20 y Ahmad00000060 45 73 73 61 6D 0A 0D 00 Essam . . .00000068 AC 3C 00 74 07 B4 0E CD ¬<. t . ´ . Í00000070 10 E9 F4 FF C3 B8 C0 07 .Ăéôÿ¸À .00000078 8E D8 8E C0 BE 3E 00 E8 .Ø.À¾>.è00000080 E6 FF FA F4 00 00 00 00 æÿúô . . . .00000088 00 00 00 00 00 00 00 00 . . . . . . . .

. . .

. . .000001F0 00 00 00 00 00 00 00 00 . . . . . . . .

٤٤

Page 63: برمجة وتصميم نظام تشغيل

النظام حممل برجمة .٤.٣

000001F8 00 00 00 00 00 00 55 AA . . . . . . Uª

حذف ميكن فمثال الثنائي٥، للملف اهليكس قيم يف املباشر والتعديل املحررات هذه من االستفادة وميكنلن البايوس أن بسبب االقالع ميكن ال بالتأكيد ! القرص من اإلقالع وحماولة رقم بأي واستبداله التوقيعالترحيبة اجلملة وطباعة ائية ال حلقة عمل ميكن كمثال كذلك ، لإلقالع قابل بأنه القرص على يتعرفوإدخال Disassembler ال برامج من أي باستخدام الثنائي امللف جتميع اعادة أوال وجيب ، تكرار كل يف

قبلها. ما اىل السلسلة طباعة دالة استدعاء بعد قفز تعليمة

Example ٣.٦: Complete Example

١ ;Hello Bootloader٢٣ bits 16 ; 16−bit real mode.٤ org 0x0 ; this number will added to all addresses (relocating).٥٦ start:٧ jmp main ; jump over data and function to entry point.٨٩١٠ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١١ ; OEM Id and BIOS Parameter Block (BPB)١٢ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٣١٤ ; must begin at byte 3(4th byte), if not we should add nop

instruction.١٥١٦ OEM ID db "eqraOS " ; Name of your OS, Must

be 8 byte! no more no less.١٧١٨ bytes per sector dw 0x200 ; 512 byte per sector.١٩ sectors per cluster db 0x1 ; 1 sector per cluster.٢٠ reserved sectors dw 0x1 ; boot sector is

reserved.٢١ total fats db 0x2 ; two fats.٢٢ root directory dw 0xe0 ; root dir has 224

entries.٢٣ total sectors dw 0xb40 ; 2880 sectors in the

volume.٢٤ media descriptor db 0xf0 ; 1.44 floppy disk.

.source code املصدر ملف اىل الوصول من نتمكن مل حالة ٥يف

٤٥

Page 64: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

٢٥ sectors per fat dw 0x9 ; 9 sector per fat.٢٦ sectors per track dw 0x12 ; 18 sector per track.٢٧ number of heads dw 0x2 ; 2 heads per platter.٢٨ hidden sectors dd 0x0 ; no hidden sector.٢٩ total sectors large dd 0x0٣٠٣١ ; Extended BPB.٣٢٣٣ drive number db 0x0٣٤ flags db 0x0٣٥ signature db 0x29 ; must be 0x28 or 0x29.٣٦ volume id dd 0x0 ; serial number written

when foramt the disk.٣٧ volume label db "MOS FLOPPY " ; 11 byte.٣٨ system id db "fat12 " ; 8 byte.٣٩٤٠٤١ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٢ ; data٤٣ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٤٤٥ hello msg db "Welcome to eqraOS, Coded by Ahmad Essam",0xa,0xd,0٤٦٤٧ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٨ ; puts16: prints string using BIOS interrupt٤٩ ; input:٥٠ ; es: pointer to data segment.٥١ ; si: point to the string٥٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٥٣٥٤ puts16:٥٥٥٦ lodsb ; read character from ds:si to al ,and increment si if

df=0.٥٧٥٨ cmp al,0 ; check end of string ?٥٩ je end puts16 ; yes jump to end.٦٠٦١ mov ah,0xe ; print character routine number.٦٢ int 0x10 ; call BIOS.٦٣

٤٦

Page 65: برمجة وتصميم نظام تشغيل

النظام حممل برجمة .٤.٣

٦٤ jmp puts16 ; continue prints until 0 is found.٦٥٦٦ end puts16:٦٧٦٨ ret٦٩٧٠٧١ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٧٢ ; entry point of bootloader.٧٣ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٧٤٧٥ main:٧٦٧٧ ;−−−−−−−−−−−−−−−−−−−−−٧٨ ; intit registers٧٩ ;−−−−−−−−−−−−−−−−−−−−−٨٠٨١ ; because bootloader are loaded at 0x07c00 we can refrence this

location with many different combination٨٢ ; of segment:offset addressing.٨٣٨٤ ; So we will use either 0x0000:0x7c000 or 0x07c0:0x0000٨٥ ; and in this example we use 0x07c0 for segment and 0x0 for

offset.٨٦٨٧ mov ax,0x07c0٨٨ mov ds,ax٨٩ mov es,ax٩٠٩١ mov si,hello msg٩٢ call puts16٩٣٩٤ cli ; clear interrupt.٩٥ hlt ; halt the system.٩٦٩٧ times 510−($−$$) db 0 ; append zeros.٩٨٩٩ ; finally the boot signature 0xaa55

١٠٠ db 0x55١٠١ db 0xaa

٤٧

Page 66: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

int 0x13 املقاطعة باستخدام القرص من قطاع حتميل .٣.٤.٣املرحلة وتنفيذ حتميل هي الفعلية املحمل مهمة فان ، ترحيبة رسالة لعرض النظام حممل تشغيل مت أن بعدحجم على القيود بسبب وذلك مرحلتني على ستكون النظام حممل برجمة أن سابقا ذكرنا كما حيث له الثانيةاليها التنفيذ ونقل النظام حممل من الثانية املرحلة عن البحث يف االوىل املرحلة وظيفة وتكمن ، االوىل املرحلةحتميل كيفية االن وسنتناول اليها. التحكم ونقل النظام نواة عن البحث يف الثانية املرحلة دور يأيت وبعدها ،. int 0x13 البايوس مقاطعة باستخدام اليها التحكم ونقل الرئيسية الذاكرة اىل املرن القرص من مقطع

املرن القرص إعادةsector مقطع أول اىل والكتابة القراءة مكان نعيد أن مرة كل يف جيب فانه املرن القرص من القراءة تكرار عندهلذا int 0x13 املقاطعة من 0x0 الدالة وتستخدم مشاكل، حدوث عدم نضمن لكي وذلك القرص يف

الغرض.: املدخالت

.0x0 : ah املسجل •.0x0 وهو املرن القرص حمرك رقم : dl املسجل •

النتيجة:احلالة. : ah املسجل •

بنجاح. العملية متت اذا 0x0 ، خطأ حدث اذا 0x1 : CF •

مثال:Example ٣.٧: Reset Floppy Drive١ reset floppy:٢٣ mov ah,0x0 ; reset floppy routine number.٤ mov dl,0x0 ; drive number٥٦ int 0x13 ; call BIOS٧٨ jc reset floppy ; try again if error occur.

٤٨

Page 67: برمجة وتصميم نظام تشغيل

النظام حممل برجمة .٤.٣

sectors املقاطع قراءةاملقاطع لقراءة 0x2 الدالة int 0x13 البايوس مقاطعة سنستخدم فاننا احلقيقي النمط يف العمل أثناء

. RAM الرئيسية الذاكرة اىل املرن القرص من (sectors): املدخالت

0x2 الدالة :ah املسجل •قرائتها. جيب اليت املقاطع عدد :al املسجل •

واحد. بايت ، (Cylinder) االسطوانة رقم :ch املسجل •hard الصلب القرص مع يستخدمان بتني اخر أما ، 5 - 0 البت من ، املقطع رقم :cl املسجل •

.diskالرأس. رقم :dh املسجل •

.0x0 وهو املرن القرص حمرك رقم : dl املسجل •اليها. املقاطع قراءة سيتم اليت املساحة اىل مؤشر : es:bx العنوان •

النتيجة:احلالة. : ah املسجل •

قرائتها. مت اليت املقاطع عدد :al املسجل •بنجاح. العملية متت اذا 0x0 ، خطأ حدث اذا 0x1 : CF •

مثال:

Example ٣.٨: Read Floppy Disk Sectors

١٢ read sectors:٣٤ reset floppy:٥٦ mov ah,0x0 ; reset floppy routine number.٧ mov dl,0x0 ; drive number٨٩ int 0x13 ; call BIOS١٠١١ jc reset floppy ; try again if error occur.

٤٩

Page 68: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

١٢١٣ ; init buffer.١٤ mov ax,0x1000١٥ mov es,ax١٦ xor bx,bx١٧١٨ read:١٩٢٠ mov ah,0x2 ; routine number.٢١ mov al,1 ; how many sectors?٢٢ mov ch,1 ; cylinder or track number.٢٣ mov cl,2 ; sector number "fisrt sector is 1 not 0",now we read

the second sector.٢٤ mov dh,0 ; head number "starting with 0".٢٥ mov dl,0 ; drive number ,floppy drive always zero.٢٦٢٧ int 0x13 ; call BIOS.٢٨ jc read ; if error, try again.٢٩٣٠ jmp 0x1000:0x0 ; jump to execute the second sector.

FAT12 نظام اىل مقدمة .٥.٣والعديد وخصائصه امللف مفهوم لنا ينشئ حبيث القرص على امللفات حفظ يف يساعد برنامج هو امللفات نظامتواجدها وأماكن امللفات جبميع بقائمة حيتفظ كذلك ، والوقت االنشاء تاريخ من به املتعلقة البيانات منواألماكن القرص يف املستخدمة الغري األماكن متابعة هي امللفات أنظمة فوائد أهم أحد أيضا ، القرص يفاملبعثرة امللفات جتميع بعمل تقوم اجليدة امللفات أنظمة كذلك ، bad sectors آلخر أو بسبب تضررت اليتموجود ملف حذف بسبب ظهرت اليت الصغرية املساحات من تستفيد حىت Defragmenta on القرص علىسيكون القرص مع التعامل فان امللفات أنظمة وبدون اخلالية. املساحة من أقل حجم ذو ملف خترين أوملف بقراءة نقوم ان نستطيع ولن االخرى من مستخدمة الغري املساحات ماهي نعرف لن حيث ! مستحيال

! الشاشة على لعرضه املستخدم طلبهمن: يتكون امللفات نظام فان عام وبشكل

.(Driver) املحرك اسم عليه وسنطلق القرص من والكتابة للقراءة برنامج •

امللفات. نظام درايفر معها القرص،يتعامل على معينة Data Structure بيانات هيكلة وجود •

٥٠

Page 69: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

سنبدأ فاننا ، القرص على امللفات نظام هيكلة على كليا تعتمد والكتابة القراءة برنامج برجمة أن وحيثمن وخلوه النظام هذا لبساطة نظرا ، كمثال مرن قرص على FAT12 نظام نأخذ وسوف أوال عنها باحلديث

التعقيدات.

FAT12 نظام قيود .١.٥.٣السبعينات أواخر منذ املرنة االقراص يف استخدامه انتشر وقد ظهورا امللفات أنظمة أقدم من FAT12 نظام يعترب

: FAT12 نظام ويعيب ،.Root Directory اجلذر يسمى واحد جملد فقط ويدعم اهلرمية للمجلدات دعمه عدم •

.212 هي الكلسترات عدد أن مبعىن ، بت 12 هو (Cluster) العنقود طول •

بت. 12 عن تزيد ال امللفات أمساء •فقط. ملف 4077 أقصى كحد يستوعب •

.32 MB عن يزيد حجمها اليت االقراص يدعم ال فانه ولذا ، بت 16 يف حيفظ القرص حجم •

.(Par ons) القرص على التقسيمات لتمييز 0x01 العالمة يستخدم •تالشى قد أنه من الرغم وعلى ، لبساطته نظرا املرحلة هذه يف النظام هذا سنستخدم أننا ذكرنا وكما

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

القرص على FAT12 نظام هيكلة .٢.٥.٣: ٢.٣ الشكل على تكون القرص تركيبة فان FAT12 بنظام (Format) املرن٦ القرص ئية عند

القرص على FAT12 نظام هيكلة :.٢.٣ شكل

عملية أثناء املستخدم الشتغيل نظام قبل من كانت أو بربجمته سنقوم الذي امللفات نظام درايفر قبل من التهئية كانت ٦سواءا. FAT12 بنظام املرن القرص ئية إعادة ميكن ويندوز يف فمثال ، التطوير

٥١

Page 70: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

اىل باالضافة االوىل) (املرحلة النظام حممل شفرة وحيوي (Boot Sector) االقالع مقطع هو مقطع وأول0 املسار 1 املقطع : هو القرص على الفيزيائي عنوانه املقطع هذا ، BPB and OEM id ومعلومات بياناتالقرص من بالقراءة تقوم اليت int 0x13 البايوس مقاطعة اىل مترير جيب الذي هو العنوان وهذا 0 الرأستعرف واليت العنونة هذه لصعوبة ونظر املرن. القرص متحكم مع املباشر التعامل أردنا ما حالة يف كذلكفبدال ، القرص حمتويات اىل للوصول خمتلف عنونة نظام مع تتعامل امللفات أنظمة فان Absolute Sector ب. للمقطع رقم فقط تستخدم العنونة هذه فان ما مقطع اىل للوصول والرأس واملسار املقطع من كل ذكر منوخيتصر (Logical Sector Addressing) املنطقية بالعنونة يسمى امللفات أنظمة تستخدمه الذي العنونة نظام(Boot Sector) االقالع مقطع من بدئا متسلسل بشكل املقاطع ترقيم على يعتمد بسيط نظام هو LBA بأنه ومبا القرص. يف مقطع آخر اىل نصل حىت جرا هلم وهكذا 1 الثاين واملقطع ، 0 العنوان يأخذ والذيint 0x13 البايوس مقاطعة (تذكر القرص من القراءة حلظة املنطقية من بدال احلقيقة العنونة استخدام جيب-سنناقش املنطقية اىل احلقيقة العنونة من للتحويل طريقة اجياد جيب فانه قيمها) ادخال جيب اليت واملسجالتاملربمج حيجزها أن ميكن مقاطع) عدة (أو مقطع وهو اإلقالع ملقطع التايل املقطع اىل ننتقل الحقا-. املوضوعمبحجوزة واملقصود ، Extra Reserved Sectors االضافية املحجوزة املقاطع وتسمى يريدها وظيفة أي الداءاملتغري قيمة كانت لذلك دائما حمجوز مقطع هو اإلقالع ومقطع ، FAT دليل يف وجود هلا يوجد ال انه أيعليك ما كل أخرى مقاطع حجز أردت ما حالة ويف ، واحد هي BPB معلومات يف reserved sectorsوجود) له كان االضايف(ان املقطع هذا حمتويات اىل وللوصول ، املرغوبة املقاطع بعدد القيمة هذه زيادة هوعام وبشكل .1 املقطع هو له املنطقي العنوان أما ، 0 الرأس 0 املسار 2 املقطع هو له احلقيقي العنوان فانوهو ، FAT جدول هو الثالث املقطع . االقالع مقطع سوى اضافية مقاطع استخدام يتم ال الغالب يف فانهما توضح السجل هذا بيانات ، القرص يف (Cluster) كلستر كل عن بت 12 بطول سجالت حيوي جدوليوضح فانه باخر ليس كان وإذا ال أم للملف كلستر آخر هو وهل ، ال أم االستخدام قيد الكلستر كان اذا

اجلدول هذا تركيبة التايل الشكل ويوضح ، للملف التايل الكلستر لنامجيع معرفة هي االخرى الوظيفة كذلك غريها من اخلالية الكلسترات معرفة هي اجلدول هذا وظيفة هذا اذا

: هي والقيم ، بت) 12 ال (قيمة السجل قيمة اىل بالنظر ذلك ويتم ما مللف الكلسترات

خايل. الكلستر أن على تدل :0x00 القيمة •حمجوز. الكلستر أن على تدل : 0x01 القيمة •

وتوجد حمجوز الكلستر أن آخر (مبعىن التايل الكلستر عنوان على تدل : 0xfef اىل 0x02 من القيم •للملف). متبقية كلسترات

حمجوزة. قيم :0xff6 اىل 0xff0 من القيم •.Bad Cluster على تدل : 0xff6 القيمة •

للملف. االخري هو الكلستر هذا أن على تدل :0xfff اىل 0xff8 من القيم •

٥٢

Page 71: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

أول بعنوان سنأيت فاننا ملف حتميل نريد وعندما ، أعاله القيم من مصفوفة بأنه FAT جدول اىل النظر وميكناىل index ك الكلستر عنوان نستخدم وبعدها الحقا) عليها (سنأيت Root Directory جدول من له كلسترالكلستر على تدل فاا 0xfef اىل 0x02 بني القيمة كانت فاذا ، للكلستر املقابله القيمة ونقرأ FAT جدولاحلال هذا على ونستمر ، اجلديدة القيمة ونقرأ index ك أيضا القيمة هذه سنستخدم مث ومن ، للملف التايلأي مقاطع 9 وطوله ٧1 املنطقي املقطع من يبدأ FAT اجلدول هذا امللف. اية على تدل قيمة نقرأ أن اىلميكن فانه للمقطع احلقيقي العنوان وملعرفة ،10 املقطع آخر يف تكون املقطع يف تكون اجلدول هذا اية أنالقرص هيكلة عن مبسط شرح اىل باالضافة ذلك سيوضح التايل والقسم ، للتحويل املعادالت بعض استخدامكنسخة وتستخدم اجلدول هذا من أخرى نسخة توجد FAT جدول وبعد . للبيانات حفظه وكيفية املرنRoot Directory اجلذر دليل يأيت وبعدها ، االوىل النسخة وخصائص حجم بنفس وهي backup احتياطيةامللفات أمساء حفظ هي الدليل هذا وظيفية ، بايت 32 بطول سجل كل سجل 224 من مصفوفة وهوامللف وحجم والتعديل االنشاء وقت ختص اليت املعلومات من العديد اىل باالضافة املرن القرص على املوجودةكما حيث ، كامال امللف حتميل نستطيع لكي معلومة أهم هو الكلستر عنوان ، للملف كلستر أول وعنوانأخرى كلسترات توجد كانت اذا ما سنحدد وبعدها FAT جدول يف index ك سيعمل العنوان هذا أن ذكرنادليل يف الواحد السجل حمتويات يوضح التايل واجلدول واحد. كلستر من يتكون امللف أن أم حتميلها جيب

االخري: اىل االول البايت من بداءا root directory اللتعبئة املسافة حرف استخدام جيب بايت 8 من أقل احلجم كان حالة ويف امللف( اسم :7-0 البايتات •

املتبقي).املتبقي). لتعبئة أيضا املسافة استخدام امللف(جيب امتداد :10-8 البايتات •

: وهي امللف خصائص :11 البايت •فقط. القراءة :0 البت –

خمفي. :1 البت –نظام. ملف :2 البت –

.Volume Label القرص اسم البت3: –فرعي. جملد هو امللف :4 البت –

أرشيف. :5 البت –جهاز. :6 البت –

مستخدم. غري :7 البت –مستخدم. غري :12 البايت •

.MS بوحدة االنشاء وقت :13 البايت •اإلقالع مقطع باستثناء إضافية مقاطع وجود عدم وهو الغالب الوضع ٧بافتراض

٥٣

Page 72: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

التايل: بالترتيب االنشاء وقت :15-14 البايتات •.(29-0) الثواين :4-0 البتات –

.(59-0) الدقائق :10-5 البتات –.(23-0) الساعات :15-11 البتات –

التايل: بالترتيب االنشاء سنة :17-16 البايتات •.(2107=127 ;1980=0) السنة :4-0 البتات –12=ديسمرب). (1=يناير; الشهر :8-5 البتات –

.(23-0) الساعة :15-9 البتات –السابق). الترتيب نفس (تتبع استخدام آخر تاريخ :19-18 البايتات •

.EA index :21-20 البايتات •.(15-14 البايتات ترتيب نفس (تتبع تعديل آخر وقت :23-22 البايتات •.(17-16 البايتات ترتيب نفس (تتبع تعديل آخر تاريخ :25-24 البايتات •

للملف. كلستر أول عنوان :27-26 البايتات •امللف. حجم :29-28 البايتات •

بطول يكون ان جيب امللف اسم فمثال Fixed Lenght Record ثابت هو السجالت حجم أن مالحظة وجيباالسم كان حالة يف أيضا ، الدليل هذا على ضررا حيدث سوف هذا فان ذلك على زاد حالة ويف بايت 8

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

املرن القرص هيكلة .٣.٥.٣املسارات هذه من وكل (Tracks) مسارات اىل مقسمة أقراص) عدة (أو Pla erقرص من املرن القرص يتكوناملرنة االقراص ويف قرص. كل على والكتابة للقراءة رأسني عادة ويوجد القطاعات من العديد من يتكونقطاع 18 من يتكون مسار وكل (79 املسار اىل 0 املسار (من مسارا 80 يوجد 1.44 MB احلجم ذات

قطاعا. 2880 وتساوي 80 ∗ 18 ∗ 2 هي الكلية القطاعات عدد فان وبالتايل ،واملسار القطاع عنوان من يتكون والذي احلقيقي العنوان حتديد جيب فانه القرص على بيانات ولتخزينوالقطاع ، 0 الرأس 0 املسار 1 القطاع العنوان: يأخذ االقالع) (قطاع القرص يف قطاع وأول ، والرأسأن اىل املرن القرص يف التخزين نظام يستمر وهكذا ، 0 الرأس 0 املسار 2 القطاع العنوان: يأخذ الثاينوسيتم ، االول والرأس االول املسار على قطاع آخر عنوان وهو 0 الرأس 0 املسار 18 العنوان اىل يصلآخر اىل يصل أن اىل ويستمر 1 الرأس 0 املسار 1 القطاع العنوان: على الثاين الرأس يف التالية البيانات حفظ... الثاين املسار االول الرأس يف التالية البيانات حفظ سيتم وبعدها الثاين، الرأس على املسار هذا يف قطاع

،وهكذا.

٥٤

Page 73: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

FAT12 نظام من الكتابة و القراءة .٤.٥.٣FAT12 لنظام درايفر برجمة يلزمنا فانه القطاعات) وكتابة (قراءة املرن القرص مع التعامل من نتمكن حىتتذهب أن جيب ما ملف لقراءة طلب أي أن مبعىن املرن، القرص وبني املستخدم بني كوسيط سيعمل والذيRoot دليل يف البحث طريق (عن ال أم موجودا امللف كان اذا ما سيقرر حيث FAT12 نظام اىل أوالمن نتمكن لكي له كلستر أول ورقم امللف خصائص جبميع لنا سيعود موجودا كان حالة ويف (directoryFAT12 نظام درايفر فان القرص على ملف كتابة املستخدم طلب حالة يف املبدأ ونفس ، كامال امللف حتميلوبعدها املعروفة اخلورازميات أحد باتباع وذلك للملف مناسبة خالية مساحة عن FAT جدول يف سيبحث

. Root directory دليل يف به املتعلقة البيانات وكتابة امللف حفظ سيتمSecond Stage Bootloader النظام حممل من الثانية املرحلة بربجمة وذلك املوضوع على مثال وسنأخذويف ، بنجاح الثانية املرحلة وتنفيذ حتميل مت أنه على داللة ترحيبة رسالة طباعة يف حاليا وظيفته وستقتصر

بت. 32 بيئة اىل االنتقال مرحلة وجتهيز الثانية املرحلة تطوير يف سنبدأ التالية األقساماملرحلة عن بالبحث تقوم أن االوىل املرحلة على جيب االن حيث ، سبق ما عن ستتغري االوىل املرحلة مهمة

التالية: اخلطوات وفق هذا ويتم ، اليها التنفيذ ونقل النظام حممل من الثانية

وأخذ الثانية املرحلة ملف عن البحث مث ومن الذاكرة اىل القرص من Root Directory جدول حتميل .١له. كلستر أول رقم

للملف. الكلسترات مجيع حتميل مث ومن الذاكرة اىل القرص من FAT جدول حتميل .٢النظام. حممل من الثانية املرحلة يف بايت أول اىل التنفيذ نقل .٣

النظام حممل من الثانية املرحلة إنشاءاخلاص نظامنا تطوير الن ونظرا ، املرن القرص اىل ونسخها النظام حممل من الثانية املرحلة بإنشاء سنقوم بدايةيتكفل حيث FAT12 ملفات لنظام درايفر حيوي ما غالبا اآلخر النظام هذا فان آخر نظام حتت يتم ان جيبFAT جدول يف خالية كلسترات عن البحث اىل باالضافة Root Directory جدول اىل البيانات كتابة بعمليةيف الكتابة جزئية سنتجاهل التطوير من املرحلة هذه يف لذلك اجلديد، النظام مطور قبل من تدخل أي دونسيكون وذا ، اجلديد النظام تطوير عملية يف عليه نعتمد الذي التشغيل لنظام املهمة ونترك FAT12 نظاممبشيئة الحقا تكلمته سيتم الذي الكامل الدرايفر من جزء اال هو ما الفصل هذا يف سننشئه الذي الدرايفر

بسيطة. رسالة لعرض املحمل من الثانية للمرحلة مثال توضح التالية اهللا.والشفرةExample ٣.٩: Hello Stage2

١ ; Second Stage Bootloader.٢ ; loaded by stage1.bin at address 0x050:0x0 (0x00500).٣

٥٥

Page 74: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

٤٥ bits 16 ; 16−bit real mode.٦ org 0x0 ; offset to zero.٧٨ start: jmp stage2٩١٠١١ ; data and variable١٢ hello msg db "Welcome to eqraOS Stage2",0xa,0xd,0١٣١٤ ; include files:١٥ %include "stdio.inc" ; standard i/o routines.١٦١٧١٨١٩٢٠ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢١ ; entry point of stage2 bootloader.٢٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٣٢٤ stage2:٢٥٢٦ push cs٢٧ pop ds ; ds = cs.٢٨٢٩ mov si,hello msg٣٠ call puts16٣١٣٢ cli ; clear interrupt.٣٣ hlt ; halt the system.

stage2.sys باالسم سيكون التجميع عملية من الناتج امللف أما stage2.asm باالسم امللف تسمية وسيتمكان حالة ويف ، حروف 3 عن واالمتداد حروف 8 عن االسم يزيد ال أن بشرط اخر اسم بأي تسميته وميكن.Root Directory جدول يتضرر ال حىت Spaces مسافات باضافة سيقوم FAT12 درايفر فان أقل االسم طول(FAT12 نظام ويستخدمها عليها مسافات اضافة يتم اليت (وهي الداخلية امللفات امساء بني نفرق أن وميكننا

املستخدم). ينشئها اليت (وهي اخلارجية واألمساء

٥٦

Page 75: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

الذاكرة اىل Root Directory ال حتميلوالبحث أوال حتميله جيب لذا القرص على تواجدها أماكن و امللفات كل أمساء حيوي Root Directory جدولالذي الداخلي باالسم البحث جيب البحث وعند (stage2.sys اخلارجي االسم (ذو الثانية املرحلة ملف عنللملف. األول الكلستر برقم ونأيت ، "stage2 sys" امللف عن نبحث أن جيب لذلك امللفات نظام يستخدمهيشغلها اليت القطاعات عدد وحساب فيه قطاع أول عنوان معرفة أوال علينا جيب فانه اجلدول هذا حتميل وقبلالتالية والشفرة اليها. اجلدول هذا نقل يتم لكي (Buffer) اخلالية املساحة حتديد جيب كذلك ، اجلدول هذا

ذلك. عمل كيفية توضحExample ٣.١٠: Load Root directory

١ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢ ; Compute Root Directory Size٣ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٤٥ xor cx,cx٦ mov ax,32 ; every root entry size are 32 byte.٧ mul word[root directory] ; dx:ax = 32∗224 bytes٨ div word[bytes per sector]٩ xchg ax,cx ; cx = number of sectors to load.١٠١١ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−١٢ ; Get start sector of root directory١٣ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−١٤١٥ mov al,byte[total fats] ; there are 2 fats.١٦ mul word[sectors per fat] ; 9∗2 sectors١٧ add ax,word[reserved sectors] ; ax = start sector of root

directory.١٨١٩ mov word[data region],ax٢٠ add word[data region],cx ; data region = start sector of data.٢١٢٢٢٣ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٤ ; Load Root Dir at 0x07c0:0x0200 above bootloader.٢٥ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٦٢٧ mov bx,0x0200 ; es:bs = 0x07c0:0x0200.٢٨ call read sectors

٥٧

Page 76: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

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

ذلك. توضح التالية والشفرة العمل. عنExample ٣.١١: Find Stage2 Bootloader

١ ;−−−−−−−−−−−−−−−−−−−٢ ; Find stage2.sys٣ ;−−−−−−−−−−−−−−−−−−−٤٥ mov di,0x0200 ; di point to first entry in root dir.٦ mov cx,word[root directory] ; loop 224 time.٧٨ find stage2:٩١٠ mov si,kernel loader name١١ push cx١٢ push di١٣ mov cx,11 ; file name are 11 char long.١٤١٥ rep cmpsb١٦ pop di١٧ je find successfully١٨١٩ mov di,32 ; point to next entry.٢٠ pop cx٢١٢٢ loop find stage2٢٣٢٤ ; no found ?٢٥ jmp find fail٢٦٢٧ find successfully:٢٨ ;−−−−−−−−−−−−−−−−−−−−−٢٩ ; Get first Cluster.٣٠ ;−−−−−−−−−−−−−−−−−−−−−٣١٣٢ mov ax,word[di+26] ; 27 byte in the di entry are cluster

number.٣٣ mov word[cluster number],ax

٥٨

Page 77: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

الذاكرة اىل FAT جدول حتميل

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

ذلك.

Example ٣.١٢: Load FAT Table

١ ;−−−−−−−−−−−−−−−−−−−−−٢ ; Compute FAT size٣ ;−−−−−−−−−−−−−−−−−−−−−٤٥ xor cx,cx٦ xor ax,ax٧ xor dx,dx٨٩ mov al,byte[total fats] ; there are 2 fats.١٠ mul word[sectors per fat] ; 9∗2 sectors١١ xchg ax,cx١٢١٣ ;−−−−−−−−−−−−−−−−−−−−−−−−−١٤ ; Get start sector of FAT١٥ ;−−−−−−−−−−−−−−−−−−−−−−−−−١٦١٧ add ax,word[reserved sectors]١٨١٩ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٠ ; Load FAT at 0x07c0:0x0200٢١ ; Overwrite Root dir with FAT, no need to Root Dir now.٢٢ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٣٢٤ mov bx,0x0200٢٥ call read sectors

٥٩

Page 78: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

امللف كلسترات حتميلمن جمموعة مع يتعامل FAT12 امللفات نظام لكن Sector بالقطاع هي املرن للقرص والكتابة القراءة وحدةInternel بداخله اخلالية املساحات زادت الكلستر حجم كرب وكلما ،Cluster واحدة ككتلة القطاعاتكل أن أخترنا مرن قرص على FAT12 نظام تنفيذ ويف ، مالئم حجم اختيار جيب لذلك Fragmenta onالقرص من كلستر قراءة كيفية هي ستواجهنا اليت املشكلة املرن. القرص من فقط واحد قطاع يقابل كلستررقم حتويل جيب ولذلك Absolute Address له املطلق العنوان بتحديد اال قطاع اي يقرأ ال املرن فالقرص ،

مطلق. عنوان اىل أيضا LBA عنوان وحتويل مطلق عنوان اىل الكلستركااليت: يتم LBA عنوان اىل Cluster رقم من التحويل

Example ٣.١٣: Convert Cluster number to LBA

١ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢ ; cluster to lba: convert cluster number to LBA٣ ; input:٤ ; ax: Cluster number.٥ ; output:٦ ; ax: lba number.٧ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٨ cluster to lba:٩١٠ ; lba = (cluster − 2)∗ sectors per cluster١١ ; the first cluster is always 2.١٢١٣ sub ax,2١٤١٥ xor cx,cx١٦ mov cl, byte[sectors per cluster]١٧ mul cx١٨١٩ add ax,word[data region] ; cluster start from data area.٢٠ ret

كما - 2 هو FAT12 نظام يف كلستر رقم أول أن بسبب وهذا الكلستر رقم من 2 العدد طرح يتم حيثالحقا-. ذلك سنرى

: Absolute Address عنوان اىل LBA عنوان من وللتحويلExample ٣.١٤: Convert LBA to CHS

١ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢ ; lba to chs: Convert LBA to CHS.

٦٠

Page 79: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

٣ ; input:٤ ; ax: LBA.٥ ; output:٦ ; absolute sector٧ ; absolute track٨ ; absolute head٩ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٠ lba to chs:١١١٢ ; absolute sector = (lba % sectors per track) + 1١٣ ; absolute track = (lba / sectors per track) / number of heads١٤ ; absolute head = (lba / sectors per track) % number of heads١٥١٦ xor dx,dx١٧ div word[sectors per track]١٨ inc dl١٩ mov byte[absolute sector],dl٢٠٢١ xor dx,dx٢٢ div word[number of heads]٢٣ mov byte[absolute track],al٢٤ mov byte[absolute head],dl٢٥٢٦ ret

نقوم ذلك وبعد Root Directory جدول من رقمه على احلصول أوال جيب القرص من كلستر ولتحميلAbolsute Address مطلق عنوان اىل LBA عنوان بتحويل نقوم وبعدها LBA عنوان اىل الرقم هذا بتحويلذلك. توضح التالية والشفرة القرص، من القطاعات لقراءة int 0x13 البايوس مقاطعة استخدام مث ومن

Example ٣.١٥: Load Cluster

١ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢ ; Load all clusters(stage2.sys)٣ ; At address 0x050:0x0٤ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٥٦ xor bx,bx٧ mov ax,0x0050٨ mov es,ax٩١٠ load cluster:

٦١

Page 80: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

١١١٢ mov ax,word[cluster number] ; ax = cluster number١٣ call cluster to lba ; convert cluster number to LBA

addressing.١٤١٥ xor cx,cx١٦ mov cl,byte[sectors per cluster] ; cx = 1 sector١٧١٨ call read sectors bios ; load cluster.

احلقيقي النمط يف فقط تعمل وهي int 0x13 البايوس مقاطعة تستخدم القرص من القطاعات قراءة ودالة.32-bit اخرى بدالة املحمي النمط اىل التحويل عند الحقا استبداهلا وجيب

Example ٣.١٦: Read Sectors Rou ne

١ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢ ; read sectors bios: load sector from floppy disk٣ ; input:٤ ; es:bx : Buffer to load sector.٥ ; ax: first sector number ,LBA.٦ ; cx: number of sectors.٧ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٨ read sectors bios:٩١٠ begin:١١ mov di,5 ; try 5 times to load any sector.١٢١٣ load sector:١٤١٥ push ax١٦ push bx١٧ push cx١٨١٩ call lba to chs٢٠٢١ mov ah,0x2 ; load sector routine number.٢٢ mov al,0x1 ; 1 sector to read.٢٣ mov ch,byte[absolute track] ; absolute track number.٢٤ mov cl,byte[absolute sector] ; absolute sector number.٢٥ mov dh,byte[absolute head] ; absolute head number.٢٦ mov dl,byte[drive number] ; floppy drive number.

٦٢

Page 81: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

٢٧٢٨ int 0x13 ; call BIOS.٢٩٣٠ jnc continue ; if no error jmp.٣١٣٢ ; reset the floppy and try read again.٣٣٣٤ mov ah,0x0 ; reset routine number.٣٥ mov dl,0x0 ; floppy drive number.٣٦ int 0x13 ; call BIOS.٣٧٣٨ pop cx٣٩ pop bx٤٠ pop ax٤١٤٢ dec di٤٣ jne load sector٤٤٤٥ ; error.٤٦ int 0x18٤٧٤٨ continue:٤٩٥٠ mov si,progress msg٥١ call puts16٥٢٥٣ pop cx٥٤ pop bx٥٥ pop ax٥٦٥٧ add ax,1 ; next sector٥٨ add bx,word[bytes per sector] ; point to next empty block in

buffer.٥٩٦٠٦١ loop begin ; cx time٦٢٦٣ ret

القيمة وقراءة FAT جدول اىل به والذهاب للملف كلستر أول رقم أخذ جيب امللف كلسترات بقية ولتحميل

٦٣

Page 82: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

حتميلها.ويلزم جيب اخرى كلسترات هنالك أن أم كلستر آخر هذا كان اذا ما على ستدل واليت له املقابلةاذا أنه أي ، ونصف بايت وتعادل بت 12 بطول سجالت من يتكون وانه FAT جدول بنية باالعتبار األخذ12 قراءة ميكن ال انه وبسبب FAT جدول من االول السجل نقرأ أن جيب فاننا 0 هو الكلستر رقم كانبت 4 الخر mask وعمل الثاين) السجل نصف اىل باالضافة االول (السجل بت 16 قراءة تتم فسوف بتمن الثاين السجل قراءة فيجب 1 هو الكلستر رقم كان حالة ويف الثاين). السجل من قرائته مت ما (الزالةمن أي بت 16 بقراءة سنقوم بت 12 قراءة ميكن ال أنه وبسبب 23-12 البت من يبدأ والذي FAT جدول

بت. 4 أول وازالة 23-8 البت: القانون تطبيق أوال فيجب ما كلستر لرقم املقابلة القيمة لقراءة وباختصار،

cluster = cluster + (cluster/2)

أما ، بت 4 الخر Mask عمل فيجب زوجي رقم هو الكلستر رقم كان اذا ما حالة ويف ، بت 16 وقراءةكلسترات مجيع حتميل كيفية توضح التالية والشفرة . بت 4 أول ازالة فيجب فردي الكلستر رقم كان اذا

. اليها التنفيذ ونقل الذاكرة اىل النظام حممل من الثانية املرحلةExample ٣.١٧: Read FAT entry

١ read cluster fat entry:٢٣ mov ax,word[cluster number]٤٥ ; Every FAT entry are 12−bit long( byte and half one).٦ ; so we must map the cluster number to this entry.٧ ; to read cluster 0 we need to read fat[0].٨ ; cluster 1 −> fat[1].٩ ; cluster 2 −> fat[3],...etc.١٠١١ mov cx,ax ; cx = cluster number.١٢ shr cx,1 ; divide cx by 2.١٣ add cx,ax ; cx = ax + (ax/2).١٤ mov di,cx١٥ add di,0x0200١٦ mov dx,word[di] ; read 16−bit form FAT.١٧١٨١٩ ; Now, because FAT entry are 12−bit long, we should remove 4

bits.٢٠ ; if the cluster number are even, we must mask the last four

bits.٢١ ; if it odd, we must do four right shift.

٦٤

Page 83: برمجة وتصميم نظام تشغيل

FAT12 نظام اىل مقدمة .٥.٣

٢٢٢٣ test ax,1٢٤ jne odd cluster٢٥٢٦ even cluster:٢٧٢٨ and dx,0x0fff٢٩ jmp next cluster٣٠٣١ odd cluster:٣٢٣٣ shr dx,4٣٤٣٥٣٦ next cluster:٣٧ mov word[cluster number],dx ; next cluster to load.٣٨٣٩ cmp dx,0x0ff0 ; check end of file, last cluster?٤٠ jb load cluster ; no, load the next cluster.٤١٤٢٤٣ ; yes jmp to end٤٤ jmp end of first stage٤٥٤٦ find fail:٤٧٤٨ mov si,fail msg٤٩ call puts16٥٠٥١ mov ah,0x0٥٢ int 0x16 ; wait keypress.٥٣ int 0x19 ; warm boot.٥٤٥٥٥٦ end of first stage:٥٧٥٨ ; jump to stage2 and begin execute.٥٩ push 0x050 ; segment number.٦٠ push 0x0 ; offset number.٦١٦٢ retf ; cs:ip = 0x050:0x0

٦٥

Page 84: برمجة وتصميم نظام تشغيل

Bootloader النظام وحممل احلاسب إقالع .٣

٦٣٦٤ times 510−($−$$) db 0 ; append zeros.٦٥٦٦ ; finally the boot signature 0xaa55٦٧ db 0x55٦٨ db 0xaa

٦٦

Page 85: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤مهمة اقتصرت حيث مرحلتني اىل املهمة تقسيم اىل أدى قد هذا فان النظام حممل حجم على القيود بسببيتم ما وغالبا عليها قيود فال stage 2 الثانية املرحلة أما ، املحمل من الثانية املرحلة حتميل على االوىل املرحلة

املرحلة: هذه يف التالية املهمات تنفيذ.PModeاملحمي النمط اىل االنتقال •

بايت. جيجا 4 حىت ذاكرة لدعم A20 البوابة تفعيل •.Interrupt Handler املقاطعات مع للتعامل دوال توفري •

اليها. والتحكم التنفيذ ونقل النواة حتميل •

.Safe Mode مثل اإلقالع أثناء خصائص توفري •التهيئة. ملفات عرب وذلك Mul Boot املتعدد اإلقالع دعم •

املحمي النمط اىل االنتقال .١.٤يعمل برنامج ألي ميكن حيث للذاكرة محاية توفر عدم هي Real Mode احلقيقي النمط يف الرئيسية املشكلةيوجد وال ، الذاكرة من ميجا 1 هو له الوصول ميكن حجم أقصى كذلك ، الذاكرة من جزء ألي يصل أن

له. دعم يوجد ال الربامج تعدد حىت Virtual Memory الظاهرية للذاكرة وال Paging لتقنية دعمعن النمط هذا اىل بسهولة االنتقال وميكن املعاجل اىل املحمي النمط باضافة حلها مت املشاكل هذه كلعنونة طريقة يستخدم النمط هذا يف املعاجل أن بسبب ولكن ، cr0 املسجل يف االول البت تفعيل طريقجداول تسمى اجلداول بعض جتهيز جيب فانه احلقيقي النمط يف املستخدمة الطريقة عن ختتلف للذاكرةGeneral Protec on استثناء سيصدر املعاجل فان اجلداول هذه جتهيز وبدون Descriptor Table الواصفات

العمل. عن النظام وتوقف triple fault حدوث اىل يؤدي بدوره والذي GPF واختصارا Faultوظيفته GDT واختصارا (Global Descriptor Table) العام الواصفات جدول ويسمى اجلداول هذه أحدهو وما ؟ كشفرة سينفذ الذي القسم هو ما حيدد حيث ، الذاكرة استخدام كيفية تعريف هي االساسيةاىل الوصول صالحية اىل باالضافة قسم كل واية بداية أيضا وحيدد ؟ بيانات حيوي أن جيب الذي القسم

القسم. ذلك

٦٧

Page 86: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

Global Descriptor Table العام الواصفات جدول .١.١.٤GDT اجلدول هذا طريق عن تتم الذاكرة اىل وصول عملية أي فان PMode املحمي النمط اىل االنتقال عندخمالفته عدم من والتأكد اليه الوصول املراد العنوان بفحص وذلك الذاكرة محاية على يعمل اجلدول هذا ،ينفذ ال الذي والقسم (Code) كشفرة ينفذ أن ميكن الذي القسم حتدد البيانات اجلدول.هذه هذا لبيانات

االن. سنراها كما اخلصائص من العديد البيانات هذه حتدد كذلك (Data)وهم: بت) 64 هو منها كل (حجم Descriptors واصفات ثالث من GDT جدول يتكون وعادة

العادة. يف فارغة تكون :Null Descriptor •

.Code كشفرة ينفذ الذي الذاكرة من القسم أو املقطع خصائص تصف :Code Descriptor •

.Data بيانات وحيوي ينفذ ال الذي الذاكرة من القسم أو املقطع خصائص تصف :Data Descriptor •

التايل: اجلدول تأخذ Descriptor واصفة أي بياناتاملقطع. حجم من (15- 0 بت (من بايتني أول حتوي :15-0 البتات •

.Base Address املقطع بداية عنوان من بايتات ثالث أول حتوي :39-16 البتات •.(Virtual Memory الظاهرية الذاكرة مع (يستخدم Access Bit الوصول بت :40 البت •

:Descriptor Type الواصفة نوع :41-43 البتات •والكتابة: القراءة :41 البت –

والكتابة. للقراءة 1 والقيمة فقط للقراءة 0 القيمة :Data Descriptor ∗والتنفيذ. للقراءة 1 والقيمة execute فقط للتنفيذ 0 القيمة :Code Descriptor ∗

.Expansion direc on (Data segments), conforming (Code Segments) :42 البت –التنفيذ: قابلية :43 البت –

بيانات. عن عبارة املقطع كان اذا :0 ∗

شفرة. عن عبارة املقطع كان اذا :1 ∗

:Descriptor Bit :44 البت •.System descriptor:0 –

.Code or Data Descriptor :1 –

Privilege Level احلماية مستوى :46-45 البتات •.(Ring 0) Highest :0 –

.(Ring 3) Lowest :3 –

٦٨

Page 87: برمجة وتصميم نظام تشغيل

املحمي النمط اىل االنتقال .١.٤

.Segment is in memory (Used with Virtual Memory) :47 البت •املقطع. حجم من 19- 16 البت حتوي :51-48 البتات •

حمجوزة. :52 البت •

حمجوزة. :53 البت •:Segment type املقطع نوع :54 البت •

بت. 16 املقطع كان اذا :0 –

بت. 32 املقطع كان اذا :1 –

:Granularity :55 البت •.None :0 –

.Limit gets mul plied by 4K :1 –

.Base Address املقطع بداية عنوان من 32- 23 البت حتوي :63-56 البتات •،Code and Data Descriptorوللبيانات للكود واصفة من ويتكون اجلدول هذا ببناء سنقوم املرحلة هذه ويف

.0xffffffff الذاكرة آخر اىل الذاكرة يف بايت أول من الكتابة و القراءة ميكن حبيثExample ٤.١: GDT١ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢ ; Global Descriptor Table٣ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤٥ begin of gdt:٦٧ ; Null Descriptor: start at 0x0.٨٩ dd 0x0 ; fill 8 byte with zero.١٠ dd 0x0١١١٢ ; Code Descriptor: start at 0x8.١٣١٤ dw 0xffff ; limit low.١٥ dw 0x0 ; base low.١٦ db 0x0 ; base middle.١٧ db 10011010b ; access byte.١٨ db 11001111b ; granularity byte.١٩ db 0x0 ; base high.

٦٩

Page 88: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

٢٠٢١ ; Data Descriptor: start at 0x10.٢٢٢٣ dw 0xffff ; limit low.٢٤ dw 0x0 ; base low.٢٥ db 0x0 ; base middle.٢٦ db 10010010b ; access byte.٢٧ db 11001111b ; granularity byte.٢٨ db 0x0 ; base high.٢٩٣٠ end of gdt:

أما ، العادة يف صفرا تكون ومتحوياا بايت 8 وحجمها Null Descriptor اخلالية بالواصفة يبدأ اجلدول هذاسيتسخدم الذي الذاكرة من املقطع وتوضح Code Descriptor الشفرة مقطع واصفة فهي هلا التالية الواصفةعلى تعمل اليت للربامج فقط نسمح أن ميكن حيث استخدامه وصالحيات وحجمه بدايته هي وما كشفرةوميكنك الواصفة هذه ملحتويات شرح يلي املقطع.وفيما هذا اىل بالدخول Kernel Mode النواة مستوى

واصفة. لكل العام الشكل يوضح الذي اجلدول مع املطابقةالعنوان هذا سيكون حيث جدا مهم العنوان وهذا 0x8 العنوان من Code Descriptor الكود واصفة تبدأتدل 0xffff هي والقيمة Segment Limit املقطع حجم حتدد 15-0 من والبتات ، CS املسجل قيمة هو

.0xffff هو معه التعامل ميكن حجم أكرب أن علىهي اختيارها مت اليت والقيمة Base Address املقطع بداية عنوان من 23-0 البتات متثل 39-16 من البتات

. 0xffff النهاية وعنوان 0x0 هو الكود مقطع بداية عنوان أن نعرف وبالتايل 0x0موجودة بت كل ملعىن توضيح يلي وفيما اخلصائص من العديد حيدد Access Byte ويسمى 6 رقم البايت

فيه:.0 القيمة اخترنا لذلك الظاهرية الذاكرة مع ويستخدم Access Bit :0 البت •

يف موجودة بايت أي وتنفيذ قراءة ميكن لذا 1 القيمة اختيار ومت ، والكتابة القراءة بت :1 البت •.0xffff-0x0 من الكود مقطع

.0 هي القيمة لذا حاليا يهم ال expansion direc on :2 البت •.Code Segment شفرة مقطع هذا أن على داللة 1 القيمة اختيار مت :3 البت •

للنظام. وليس للبيانات او للشفرة مقطع هذا أن على داللة 1 القيمة اختيار مت :4 البت •احللقة يف فقط يستخدم املقطع هذا أن على داللة 0 القيمة اختيار ومت احلماية مستوى :6-5 البتات •

.Kernel Mode يسمى ما أو Ring0 صفرامهاهلا. مت لذا الظاهرية الذاكرة مع تستخدم :7 البت •

٧٠

Page 89: برمجة وتصميم نظام تشغيل

املحمي النمط اىل االنتقال .١.٤

موجودة بت كل ملعىن توضيح يلي وفيما اخلصائص، بعض أيضا حيدد granularity ويسمى 7 رقم البايتفيه:

، 0xf هي والقيمة Segment Limit املقطع حجم اية من 19-16 من البتات متثل :3-0 البتات •تفعيل يتم عندما والحقا ، الذاكرة من ميجا 1 أي 0xfffff هو للمقطع عنوان أقصى يكون وذا

الذاكرة. من جيجا 4 حىت الوصول من سنتمكن A20 بوابةامهاهلا. مت لذا للنظام حمجوزة :5-4 البتات •

بت. 32 هو املقطع هذا على داللة 1 القيمة اختيار مت :6 البت •.4 KB ب املقطع إحاطة سيتم 1 القيمة باختيار :7 البت •

الكود مقطع بداية عنوان من 32-24 من البتات ميثل (8 رقم (البايت الكود مقطع واصفة يف االخري البايتالذاكرة. يف بايت أول من أي 0x0 هو الكلي الكود مقطع بداية عنوان وبالتايل 0x0 هي والقيمة

التنفيذ صالحية وكذلك وايته الكود مقطع بداية عنوان حددت Code Descriptor الكود مقطع واصفة إذا.Code Segment كود مقطع هو املقطع بأن وحددت

متاما مشاة وهي 0x10 رقم العنوان من وتبدأ Data Descriptor البيانات مقطع واصفة هي التالية الواصفةبيانات. أم كود املقطع كان اذا ما حيدد حيث 43 رقم البت باستثناء الكود لواصفة

ناقصا اجلدول هذا حجم على gdtr املسجل يحمل أن جيب ، الذاكرة يف (GDT) اجلدول هذا إنشاء وبعداالمر استخدام مث ومن GDT جدول اىل مؤشرا إنشاء طريق عن ذلك ويتم اجلدول، بداية عنوان وعلى واحد

ذلك. توضح التالية والشفرة ، (Ring0 صفر احللقة يف فقط يعمل أمر (وهو lgdtExample ٤.٢: Load GDT into GDTR

١٢ bits 16 ; real mode.٣٤ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٥ ; load gdt: Load GDT into GDTR.٦ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٧٨ load gdt:٩١٠ cli ; clear interrupt.١١ pusha ; save registers١٢ lgdt [gdt ptr] ; load gdt into gdtr١٣ sti ; enable interrupt١٤ popa ; restore registers.١٥

٧١

Page 90: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

١٦ ret١٧١٨١٩ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٠ ; gdt ptr: data structure used by gdtr٢١ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٢٢٣ gdt ptr:٢٤٢٥ dw end of gdt − begin of gdt − 1 ; size −1٢٦ dd begin of gdt ; base of gdt

PMode Memory Addressing املحمي النمط يف العنونة .٢.١.٤املقاطع مسجالت من أي تكون بأن وذلك Segment:Offset عنونة املعاجل يستخدم احلقيقي النمط يف، ما مقطع داخل العنوان حتوي العناوين ومسجالت ، املقطع بداية عنوان حتوي (Segments Registers)سيمر والذي النهائي العنوان على للحصول اليه offset ال ومجع 0x10 بالعدد املقطع عنوان ضرب ويتم

.Address Bus العنوان مسار بداخلحتوي املقاطع مسجالت تكون بأن وذلك Descriptor:Offset عنونة يستخدم فانه PMode املحمي النمط أماحيوي DS البيانات ومسجل 0x8 العنوان حيوي CS مسجل (مثال ببنائها قمنا اليت الواصفات أحد عنوانيف بتحديده قمنا والذي Base Address املقطع بداية عنوان اىل مجعها سيتم offset وال ، (0x10 العنوانأيضا Segment Limit املقطع حجم يتجاوز ال العنوان هذا أن من التأكد سيتم كذلك الواصفات جدولميكن املحمي النمط يف الن ونظرا املطلوب. للعنوان الوصول ميكن وأنه الصالحية مستوى من التأكد سيتم

الذاكرة١. من جيجا 4 عنونة ميكن فانه 32-bit مسجالت استخدام

املحمي النمط اىل االنتقال .٣.١.٤االول البت تفعيل طريق عن املحمي النمط اىل االنتقال ميكن GDTR مسجل وحتميل GDT جدول إنشاء بعدتعطيل جيب لذا البايوس مقاطعات يستخدم ال النمط هذا أن معروف هو وكما ،cr0 التحكم مسجل يف

مشاكل. أي حتدث ال حىت االنتقال قبل املقاطعات عملوبالنسبة ، املقاطع ملسجالت استخدامها جيب اليت الواصفة تعيني جيب فان املحمي النمط اىل االنتقال وبعداالنتقال طريقة يوضح التايل ،والكود far jump تنفيذ طريق عن وذلك قيمته تعديل ميكن فانه CS ملسجل

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

٧٢

Page 91: برمجة وتصميم نظام تشغيل

املحمي النمط اىل االنتقال .١.٤

Example ٤.٣: Switching to Protected Mode

١ ;−−−−−−−−−−−−−−−−−−−−٢ ; Load gdt into gdtr.٣ ;−−−−−−−−−−−−−−−−−−−−٤٥ call load gdt٦٧ ;−−−−−−−−−−−−−−−−٨ ; Go to PMode.٩ ;−−−−−−−−−−−−−−−−١٠ ; just set bit 0 from cr0 (Control Register 0).١١١٢ cli ; important.١٣ mov eax,cr0١٤ or eax,0x1١٥ mov cr0,eax ; entering pmode.١٦١٧١٨ ;−−−−−−−−−−−−−−−−−−−١٩ ; Fix CS value٢٠ ;−−−−−−−−−−−−−−−−−−−−٢١ ; select the code descriptor٢٢ jmp 0x8:stage3٢٣٢٤٢٥ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٦ ; entry point of stage3٢٧ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٨٢٩ bits 32 ; code now 32−bit٣٠٣١ stage3:٣٢٣٣ ;−−−−−−−−−−−−−−−−;٣٤ ; Set Registers.٣٥ ;−−−−−−−−−−−−−−−−;٣٦٣٧ mov ax,0x10 ; address of data descriptor.٣٨ mov ds,ax٣٩ mov ss,ax

٧٣

Page 92: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

٤٠ mov es,ax٤١ mov esp,0x90000 ; stack begin from 0x90000.٤٢٤٣٤٤ ;−−−−−−−−−−−−−−−−−;٤٥ ; Hlat the system.٤٦ ;−−−−−−−−−−−−−−−−−;٤٧ cli ; clear interrupt.٤٨ hlt ; halt the system.

A20 البوابة تفعيل .٢.٤يف التحكم هو منها ٢واهلدف SystemBus النظام ناقل على موجودة ORGate عن عبارة هي A20Gate بوابة(80286 معاجل تسبق اليت املعاجلات (ذات قدميا االجهزة كانت حيث ،Address Line العناوين خطوط عدداحتوت واليت IBM PC اجهزة صدرت وعندما ، (20 address line) للعناوين (خط) بت 20 على حتويالذاكرة من جيجا 4 عنونة املمكن من أصبح وهكذا خط 32 اىل العناوين خط زيادة مت 80286 معاجل علىاخلطوط فتح من A20 بوابة يف التحكم ميكن فانه السابقة االجهزة مع التوافقية على احلفاظ يتم وحىت ،

واغالقها. A31-A20تفعيل وعند ، (Keyboard Controller) املفاتيح لوحة متحكم وهو 8042 متحكم مع مرتبطة البوابة هذهبوابة يفتح هذا فان املفاتيح لوحة ملتحكم التابع (output data port) البيانات خروج منفذ يف 1 رقم البت

0xffffffff-0x0 العنوان من ابتداءا ، الذاكرة من جيجا 4 اىل الوصول نستطيع وذا A20ومن واختبارها الذاكرة حجم حساب ألغراض البوابة هذه بتفعيل يقوم البايوس فان احلاسب اقالع وعند

القدمية. االجهزة مع التوافقية على للحفاظ جمددا بغلقها يقوم مثالعديد ذكر سيتم لذلك معينة أجهزة على يعمل منها العديد ، البوابة هذه لتفعيل الطرق من العديد وتوجد

املختلفة. االجهزة صعيد على حممولية الطرق أكثر واستخدام الطرق من

A20 والبوابة 8042 املفاتيح لوحة متحكم .١.٢.٤مع املباشر التعامل وجيب البايوس مقاطعات استخدام ميكن لن فانه (PMode) املحمي النمط اىل االنتقال عندمتحكم مع A20 بوابة ارتباط وبسبب . الداخلية املتحكم مسجالت من والكتابة والقراءة عتاد أي متحكمأوامر استخدام طريق عن يتم وهذا ، البوابة لتفعيل املتحكم هذا مع التعامل من بد ال فانه املفاتيح لوحة

.out واالمر in املعاجل20 رقم العناوين خط على حتديدا البوابة ٢توجد

٧٤

Page 93: برمجة وتصميم نظام تشغيل

A20 البوابة تفعيل .٢.٤

أو Integrated Circuit شرحية شكل على تأيت ما فغالبا (8042 (متحكم املفاتيح لوحة متحكم وخبصوصمع املتحكم هذا South.ويرتبط Bridge ال يف وتكون (Motherboard) األم اللوحة داخل مضمنة تكوناىل ويرسل Make Code توليد يتم فانه ما زر على الضغط وعند ، املفاتيح لوحة بداخل آخر متحكماحلاسب منفذ طريق عن 8042 متحكم اىل بارساله يقوم بدروه والذي املفاتيح لوحة بداخل املوجود املتحكموحيفظها Scan Code اىل Make code بتحويل يقوم حيث 8042 متحكم دور يأيت .وهنا (Hardware Port)وهذا ،IBM and Compa ble PC أجهزة يف 0x60 الرقم حيمل املسجل هذا Buffer الداخلية مسجالته يف

املدخلة. القيمة قراءة ميكن فانه (in األمر طريق (عن املسجل هذا قراءة حالة يف أنه يعيناملتعلقة األجزاء بتوضيح فقط هنا وسنكتفي ، بالتفصيل املفاتيح لوحة متحكم مناقشة سيتم الثامن الفصل ويف

.A20 بوابة بتفعيل

A20 البوابة تفعيل طرق .٢.٢.٤System Control Port 0x92 بواسطة

، A20 بوابة لتفعيل I/O part 0x92 وهو واالخراج االدخال منافذ أحد استخدام ميكن االجهزة بعض يفتوضيح يلي وفيما ، تدعمها ال االجهزة وبعض حممولية أقل تعترب أا اال الطريقة هذه سهولة من الرغم وعلى

املنفذ: هذا على للبتاتاحلقيقي. النمط اىل والعودة للنظام reset عمل اىل يؤدي البت هذا تفعيل :0 البت •

لتفعيلها. 1 والقيمة ، A20 بوابة لتعطيل 0 القيمة :1 البت •تستخدم. ال :2 البت •

power on password bytes :3 البت •تستخدم. ال :5-4 البتات •

.on :1 القيمة ،off :0 القيمة : HDD ac vity LED :7-6 البتات •. البوابة تفعيل طريقة يوضح التايل واملثال

Example ٤.٤: Enable A20 by System Control Port 0x92

١ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢ ; enable a20 port 0x92:٣ ; Enable A20 with System Control port 0x92٤ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٥٦ enable a20 port 0x92:٧

٧٥

Page 94: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

٨ push ax ; save register.٩١٠ mov al,2 ; set bit 2 to enable A20١١ out 0x92,al١٢١٣ pop ax ; restore register.١٤ ret

يف ويعتمد ، للمنافذ خمتلفة ارقام هناك يكون ورمبا االجهزة كل يف تعمل ال الطريقة هذه أن مالحظة وجيبالعناوين. ملعرفة كتيباا قراءة وجيب االم اللوحات مصنعي على اآلخر

البايوس بواسطة0x2400 والدالة ، A20 بوابة لتفعيل 0x2401 الدالة int 0x15 البايوس مقاطعة استخدام ميكناملقاطعة، هذه استدعاء من نتمكن حىت احلقيقي النمط يف املعاجل يكون أن جيب بأن التذكري لتعطيلها.مع

البايوس. باستخدام التفعيل طريقة يوضح التايل والكودExample ٤.٥: Enable A20 by BIOS int 0x15

١ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢ ; enable a20 bios:٣ ; Enable A20 with BIOS int 0x15 routine 0x2401٤ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٥٦ enable a20 bios:٧٨ pusha ; save all registers٩١٠ mov ax,0x2401 ; Enable A20 routine.١١ int 0x15١٢١٣ popa ; restore registers١٤ ret

املفاتيح لوحة متحكم بواسطةOutput يسمى منه القراءة حالة (يف buffer ال ميثل وهو 0x60 املنفذ املفاتيح: لوحة ملتحكم منفذين يوجدحالة ولقراءة املتحكم اىل االوامر إلرسال وهو 0x64 واملنفذ ،Input Buffer يسمى الكتابة حالة ويف Buffer

٧٦

Page 95: برمجة وتصميم نظام تشغيل

A20 البوابة تفعيل .٢.٤

وسائط هناك كان واذا 0x64 املنفذ طريق عن املتحكم اىل األوامر ارسال يتم حيث .(Status) املتحكم.0x60 املنفذ من النتائج تقرأ وكذلك (0x60 (املنفذ buffer ال اىل فترسل األمر هلذا

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

. التنفيذ الستكمال الربنامجاملرسلة االوامر تنفيذ مت اذا ما نعرف أن (0x64 املنفذ قراءة طريق (عن املتحكم حالة قراءة طريق عن وميكن

ال. ام الربنامج يف قرائتها يتم لكي نتيجة هناك هل وكذلك ، ال امهي: ووظيفتهما ، فقط بتني أول هو حاليا املتحكم حالة قراءة عند البتات من يهمنا وما

:Output Buffer ال حالة :0 البت •االن). تقرأ ال ، نتيجة توجد (ال خايل Output Buffer ال :0 القيمة –االن). بالقراءة قم ، نتيجة (توجد ممتلئ Output Buffer ال :1 القيمة –

:Input Buffer ال حالة :1 البت •االن). الكتابة ميكن ، منفذة غري أوامر توجد (ال خايل Input Buffer ال :0 القيمة –

االن). تكتب ال ، منفذة غري أوامر (توجد ممتلئ Input Buffer ال :1 القيمة –انتظار وكيفية (wait input) اليه املرسله االوامر ينفذ حىت املتحكم انتظار كيفية توضح التالية والشفرة

.(wait output) ما بنتيجة يأيت ان اىل املتحكمExample ٤.٦: Wait Input/Output

١٢ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٣ ; wait output: wait output buffer to be full.٤ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٥٦ wait output:٧٨ in al,0x64 ; read status٩ test al,0x1 ; is output buffer is empty?١٠ je wait output ; yes, hang.١١١٢ ret ; no,there is a result.١٣١٤١٥ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٦ ; wait input: wait input buffer to be empty.

٧٧

Page 96: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

١٧ command executed already.١٨ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٩٢٠ wait input:٢١٢٢ in al,0x64 ; read status٢٣ test al,0x2 ; is input buffer is full?٢٤ jne wait input ; yes, hang.٢٥٢٦ ret ; no,command executed.

اجلزء هذا الن ونظرا ، األوامر من الكثري وتوجد 0x64 املنفذ استخدام جيب فان املتحكم ايل اوامر وإلرسالالسادس الفصل ويف ، حاليا منا اليت االوامر فقط سنناقش فاننا املفاتيح لوحة متحكم لربجمة خمصص غري

اهللا. شاء ان بالتفصيل املوضوع اىل سنعودحاليا: االوامر وقائمة

املفاتيح. لوحة تعطيل :0xad األمر •املفاتيح. لوحة تفعيل :0xae األمر •

.Output Port من القراءة :0xd0 األمر •

.Output Port اىل الكتابة :0xd1 األمر •.A20 بوابة تفعيل :0xdd األمر •.A20 بوابة تعطيل :0xdf األمر •

الطريقة هذه أيضا لكن ، التالية الشفرة يف كما بسهولة A20 البوابة تفعيل ميكن فانه 0xdd األمر طريق وعناألمر. هذا تدعم ال املتحكمات بعض هناك حيث االجهزة كل على تعمل ال

Example ٤.٧: Enable A20 by Send 0xdd

١٢ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٣ ; enable a20 keyboard controller:٤ ; Enable A20 with command 0xdd٥ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٦٧ enable a20 keyboard controller:٨٩ ;cli

٧٨

Page 97: برمجة وتصميم نظام تشغيل

A20 البوابة تفعيل .٢.٤

١٠ push ax ; save register.١١١٢ mov al,0xdd ; Enable A20 Keyboard Controller Command.١٣ out 0x64,al١٤١٥ pop ax ; restore register.١٦ ret

املفاتيح لوحة متحكم يف Output Port اخلروج منفذ طريق عن وهي حممولية أكثر أخرى طريقة وتوجدالتوايل. على 0xd1 و 0xd0 االوامر ارسال طريق عن اليه والكتابة املنفذ هذا قراءة وميكن

تعين: القيم فان املفاتيح) لوحة متحكم اىل d0 االمر (بارسال املنفذ هذا قراءة وعند

:System Reset :0 البت •.Reset Computer :0 القيمة –

.Normal Opera on :1 القيمة –:A20 بوابة :1 البت •

تعطيل. :0 القيمة –تفعيل. :1 القيمة –

معرف. غري :3-2 البتات •.Input Buffer Full :4 البت •

.Output Buffer Empty :5 البت •:Keyboard Clock :6 البت •.High-Z :0 القيمة –

.Pull Clock Low :1 القيمة –:Keyboard Data :7 البت •.High-Z :0 القيمة –

.Pull Data Low :1 القيمة –

البتات بقية على احلفاظ يتم حىت or االمر استخدام وجيب A20 بوابة يفعل هذا فان 1 رقم البت تفعيل وعند. 0xd1 االمر باستخدام املنفذ نفس اىل القيم كتابة جيب ذلك .وبعد

املفاتيح. لوحة ملتحكم Output Port اخلروج منفذ طريق عن A20 بوابة تفعيل كيفية توضح التالية والشفرة

٧٩

Page 98: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

Example ٤.٨: Enable A20 by write to output port of Keyboard Controller

١٢ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٣ ; enable a20 keyboard controller output port:٤ ; Enable A20 with write to keyboard output port.٥ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٦٧ enable a20 keyboard controller output port:٨٩ cli١٠ pusha ; save all registers١١١٢ call wait input ; wait last operation to be finished.١٣١٤ ;−−−−−−−−−−−−−−−−−−١٥ ; Disable Keyboard١٦ ;−−−−−−−−−−−−−−−−−−١٧ mov al,0xad ; disable keyboard command.١٨ out 0x64,al١٩ call wait input٢٠٢١ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٢ ; send read output port command٢٣ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٤ mov al,0xd0 ; read output port command٢٥ out 0x64,al٢٦ call wait output ; wait output to come.٢٧ ; we don't need to wait input bescause when output came we know

that operation are executed.٢٨٢٩ ;−−−−−−−−−−−−−−−−−−−−−−٣٠ ; read input buffer٣١ ;−−−−−−−−−−−−−−−−−−−−−−٣٢ in al,0x60٣٣ push eax ; save data.٣٤ call wait input٣٥٣٦ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣٧ ; send write output port command.٣٨ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

٨٠

Page 99: برمجة وتصميم نظام تشغيل

VGA ال أساسيات .٣.٤

٣٩ mov al,0xd1 ; write output port command.٤٠ out 0x64,al٤١ call wait input٤٢٤٣ ;−−−−−−−−−−−−٤٤ ; enable a20.٤٥ ;−−−−−−−−−−−−٤٦ pop eax٤٧ or al,2 ; set bit 2.٤٨ out 0x60,al٤٩ call wait input٥٠٥١ ;−−−−−−−−−−−−−−−−−٥٢ ; Enable Keyboard.٥٣ ;−−−−−−−−−−−−−−−−−٥٤ mov al,0xae ; Enable Keyboard command.٥٥ out 0x64,al٥٦ call wait input٥٧٥٨٥٩ popa ; restore registers٦٠ sti٦١٦٢ ret

للتأكد wait input الدالة واستدعاء (0xad االمر ارسال طريق (عن املفاتيح لوحة تعطيل مت البداية يف حيث(0xda (االمر املفاتيح لوحة ملتحم اخلروج منفذ قراءة أمر ارسال مت مث ومن تنفيذه مت قد االمر أن مناخلروج منفذ قيمة النتظار wait output الدالة استخدام مت وقد ، االمر تنفيذ من ينتهي حىت املتحكم وانتظاراخلروج منفذ اىل الكتابة أمر ارسال مت ذلك ،وبعد (Stack) املكدس يف وحفظها القيمة هذه قراءة مت وبعدها ،قيمة بارسال قمنا ومن االمر تنفيذ من ينتهي حى املتحكم وانتظار (0xd1 (االمر املفاتيح لوحة ملتحكمتفعيل مت االخري ويف ، A20 بوابة يفعل الذي البت وهو 1 رقم البت تفعيل مت أن بعد اجلديدة اخلروج املنفذ

جمددا. املفاتيح لوحة

VGA ال أساسيات .٣.٤واختصارا Video Graphics Array وهو احلاسب شاشة ملتحكمات مقياس بتطوير IBM قامت 1987 عام يفالعديد استبدلت حيث signle chip واحدة كشرحية تطويره مت النه نظرا Array ب تسميته وجائت VGAمن VGA ال ويتكون ، EGA و CGA و MDA مثل اخرى مقاييس يف تستخدم كانت واليت الشرائح من

٨١

Page 100: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

A ribute و Graphics Controller , Sequencer unit , CRT Controller , Video DAC ,Video Buffer.٣Controller

Memory Mapped للشاشة كذاكرة يعمل segment of memory الذاكرة من مقطع هو Video Buffer الللشاشة كذاكرة 0xa0000 العنوان من بدءا الذاكرة من مساحة خيصص البايوس فان التشغيل بداية وعند ،،MemoryMapping يسمى الربط هذا ، الشاشة يف يغري سوف هذا فان الذاكرة هذه اىل الكتابة مت حالة ويفال يف املوجودة البيانات على بناءا الشاشة حمتويات بتحديث يقوم الذي فهو Graphics Controller ال أما

.Video bufferAPAGraphics الرسومي النمط هو واالخر TextMode النصي النمط هو االول للعرض منطني VGA ال وتدعم

البيانات. عرض وكيفة Video buffer ال مع التعامل طريقة النمط وحيدد Modeمع التعامل ميكن حيث ، البكسالت على يعتمد All Point Addressable Graphics Mode الرسومي النمطالنمط أما الشاشة. على نقطة وتعادل الشاشة يف وحدة أصغر هو والبكسل . حدة على موجود بسكل كلVideo الشاشة متحكم فان النمط هذا ولتطبيق ، Characters احلروف على فيعتمد Text Mode النصيتعرف وهي Character Map احلروف خريطة وهي االوىل two buffers ذاكرتني يستخدم ControllerScreenفهي الثانية الذاكرة أما أخرى، حمارف أنظمة لدعم اخلريطة هذه تغيري وميكن حرف لكل البكسالت

الشاشة. على مباشرة سيظهر التأثري فان عليها الكتابة ومبجرد Bufferويسمى Monochrome Display Adapter مقياس من ابتداءا ، السابقة املقاييس على مبين هو VGA ومقياسا النصي والنمط الرسومي النمط تدعم ال MDA و ، 1981 عام يف IBM طورته والذي MDA اختصارامقياس بتطوير IBM قامت العام نفس ويف .(25*80 ) صف 24 و عمود 80 يدعم (Mode 7 (يسمى16 عرض ميكن حيث االلوان يدعم متحكم أول كان الذي (CGA (واختصارا Color Graphics Adapter

.Enhanced Graphics Adapter تطوير مت ذلك خمتلف.وبعد لونيبدأ فعندما Backward Compa ble السابقة املقاييس مع متوافقة VGA متحكمات بان التذكري بنا وجيدرسنتعامل اننا يعين وهذا ، (MDA يف ظهر (الذي Mode 7 النصي النمط سيكون النمط فان العمل يف احلاسب

صف. 25 و عمود 80 مع

VGA متحكمات يف الذاكرة عنونة .١.٣.٤الفيديو لذاكرة 0xbffff اىل 0xa0000 من العناوين خيصص البايوس فان بالعمل احلاسب يبدأ عندما

كااليت: مقسمة العناوين هذه ، (VGA متحكم على (موجودة Video memroy

.Monochrome Text Mode اللون أحادي النصي للنمط :0xb7777 اىل 0xb0000 من •

.Color Text Mode :0xbffff اىل 0xb8000 من •

التايل واملثال ، كتابتها مت اليت القيم واظهار الشاشة يف يؤثر سوف هذا فان العناوين هذه يف الكتابة وعندسوداء. وخلفية أبيض بلون A حرف كتابة كيفية يوضح

حاليا. احلاجة حبسب االشياء بعض على التركيز وسيتم ، اهللا باذن الحقا سيكون املكونات هذه ٣شرح

٨٢

Page 101: برمجة وتصميم نظام تشغيل

VGA ال أساسيات .٣.٤

Example ٤.٩: Print 'A' character on screen

١٢ %define VIDEO MEMORY 0xb8000 ; Base Address of Mapped Video

Memory.٣ %define CHAR ATTRIBUTE 0x7 ; White chracter on black background.٤٥ mov edi,VIDEO MEMORY٦٧ mov [edi],'A' ; print A٨ mov [edi+1],CHAR ATTRIBUTE ; in white foreground black

background.

الشاشة على حرف طباعة .٢.٣.٤طباعة من نتمكن وحىت Video Memory ال عنوان اىل احلرف ارسال جيب الشاشة على حرف لطباعةهذا حتويل مث ومن والعمود للصف احلايل املكان حلفظ (x,y) متغريان انشاء جيب فانه احلروف من العديدسيكون احلرف ان أي (0,0) هي (x,y) قيم ستكون البداية ويف .Video Memoey ال يف عنوان اىل املكانوهو Video Memory ال بداية عنوان اىل احلرف هذا ارسال وجيب الشاشة يف اليسار من االعلي اجلزء يفاحلرف ارسال وجيب (0,1) هي له (x,y) قيم فان آخر حرف ولطباعة .(Color text Mode) 0xb8000Video العرض لذاكرة عناوين اىل (x,y) قيم بني للتحويل التالية العالقة وسنستخدم ، 0xb8001 العنوان اىل

:Memoryvideomemory = 0xb0000videomemory+ = x+ y ∗ 80

كيفية يوضح التايل واملثال . 80 ب y قيمة ضرب جيب فانه عمود كل يف حرف 80 هناك أن وبسبب. (4,4) عند حرف طباعة

address = x+ y ∗ 80

address = 4 + 4 ∗ 80 = 324

; now add the base address of video memory.

address = 324 + 0xb8000 = 0xb8144

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

العرض متحكم يتعامل النمط هذا يف ، به احلاسب يبدأ الذي هو Mode 7 النصي النمط ان ذكرنا وكما

٨٣

Page 102: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

احلرف ارسال جيب فانه A احلرف طباعة أردنا ما اذا مبعىن ، طباعته يراد حرف لكل الذاكرة من بايتني معقانون تعديل جيب انه يعين وهذا 0xb8001 له التايل العنوان اىل احلرف وخصائص 0xb8000 العنوان اىل

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

احلرف: لون :2-0 البتات •أمحر. :0 البت –

أخضر. :1 البت –أزرق. :2 البت –

فاتح). 1 ، غامق 0 ) احلرف لون كثافة :3 البت •احلرف: خلفية لون :6-4 البت •

أمحر. :0 البت –أخضر. :1 البت –أزرق. :2 البت –

فاتح). 1 ، غامق 0 ) احلرف خلفية لون كثافة :7 البت •األلوان: هذه يوضح التايل واجلدول ، اللون لتحديد بت 4 توجد وهكذا

• 0: Black.• 1: Blue.• 2: Green.• 3: Cyan.• 4: Red.• 5: Magneta.• 6: Brown.• 7: Light gray.• 8: Dark Gray.• 9: Light Blue.• 10: Light Green.• 11: Light Cyan.

٨٤

Page 103: برمجة وتصميم نظام تشغيل

VGA ال أساسيات .٣.٤

• 12: Light Red.• 13: Light Magneta.• 14: Light Brown.• 15: White.

جيب كما ، العرض ذاكرة اىل وخصائصه احلرف ارسال جيب فانه Mode 7 النمط على حرف لطباعة اذااحلايل) املوقع على للداللة وخيتفي يظهر underline خط (هو Cursor املؤشر حتديث من االمور بعض مراعاةطباعته املراد احلرف كان حالة يف أو العمود يف حرف اخر اىل الوصول حالة يف التايل الصف اىل االنتقال وحرف لطباعة تستخدم واليت putch32 الدالة يوضح التايل واملثال . 0xa جديد سطر اىل االنتقال حرف هو

.PMode املحمي النمط يف الشاشة علىExample ٤.١٠: putch32 rou ne

١٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٣ ; putch32: print character in protected mode.٤ ; input:٥ ; bl: character to print.٦ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٧٨ bits 32٩١٠ %define VIDEO MEMORY 0xb8000 ; Base Address of Mapped Video

Memory.١١ %define COLUMNS 80 ; text mode (mode 7) has 80 columns,١٢ %define ROWS 25 ; and 25 rows.١٣ %define CHAR ATTRIBUTE 31 ; white on blue.١٤١٥ x pos db 0 ; current x position.١٦ y pos db 0 ; current y position.١٧١٨ putch32:١٩٢٠ pusha ; Save Registers.٢١٢٢ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٣ ; Check if bl is new line ?٢٤ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٥

٨٥

Page 104: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

٢٦ cmp bl,0xa ; if character is newline ?٢٧ je new row ; yes, jmp at end.٢٨٢٩ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣٠ ; Calculate the memory offset٣١ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣٢ ; because in text mode every character take 2 bytes: one for the

character and one for the attribute, we must calculate thememory offset with the follwing formula:

٣٣ ; offset = x pos∗2 + y pos∗COLUMNS∗2٣٤٣٥ xor eax,eax٣٦٣٧ mov al,2٣٨ mul byte[x pos]٣٩ push eax ; save the first section of formula.٤٠٤١ xor eax,eax٤٢ xor ecx,ecx٤٣٤٤ mov ax,COLUMNS∗2 ; 80∗2٤٥ mov cl,byte[y pos]٤٦ mul ecx٤٧٤٨ pop ecx٤٩ add eax,ecx٥٠٥١ add eax,VIDEO MEMORY ; eax = address to print the character.٥٢٥٣ ;−−−−−−−−−−−−−−−−−−−−−٥٤ ; Print the chracter.٥٥ ;−−−−−−−−−−−−−−−−−−−−−٥٦٥٧ mov edi,eax٥٨٥٩ mov byte[edi],bl ; print the character,٦٠ mov byte[edi+1],CHAR ATTRIBUTE ; with respect to the

attribute.٦١٦٢ ;−−−−−−−−−−−−−−−−−−−−−٦٣ ; Update the postions.

٨٦

Page 105: برمجة وتصميم نظام تشغيل

VGA ال أساسيات .٣.٤

٦٤ ;−−−−−−−−−−−−−−−−−−−−−٦٥٦٦ inc byte[x pos]٦٧ cmp byte[x pos],COLUMNS٦٨ je new row٦٩٧٠ jmp putch32 end٧١٧٢٧٣ new row:٧٤٧٥ mov byte[x pos],0 ; clear the x pos.٧٦ inc byte[y pos] ; increment the y pos.٧٧٧٨ putch32 end:٧٩٨٠ popa ; Restore Registers.٨١٨٢ ret

اجلديد السطر اىل االنتقال حرف مع (bl املسجل يف (موجود طباعته املراد احلرف بفحص الدالة هذه وتبدأy قيمة وزيادة x قيمة بتصفري يقوم والذي الدالة جسم آخر اىل التنفيذ نقل يتم التساوي حالة ويف 0xaالعنوان حساب جيب فانه آخر حرف أي هو احلرف كان حالة يف أما اجلديد. السطر اىل االنتقال على داللةبايتني يستخدم Mode 7 النصي النمط أن ذكرنا وكما ، طباعته ميكن حىت اليه احلرف ارسال جيب الذي

املطلوب. العنوان اىل (x,y) بني ما للتحويل التالية العالقة استخدام سيتم لذا حرف لكلvideomemory = 0xb0000videomemory+ = x ∗ 2 + y ∗ 80 ∗ 2

طباعة مت ذلك وبعد eax املسجل يف وحفظه العنوان هذا حساب مت فقد السابق الكود يف يظهر وكماللدالة (x,y) قيم زيادة هي الدالة يف خطوة وآخر كثابت. مسبقا حتديدها مت اليت باخلصائص املطلوب احلرفيتم فانه الصف يف عمود آخر قيمة مع القيمة تساوت حالة ويف فقط x بزيادة يتم وهذا ، التايل املكان اىل

التايل. الصف اىل االنتقال على داللة x وتصفري y قيمة زيادة

strings النصية السالسل طباعة .٣.٣.٤دالة اىل وارساهلا السلسة من حرف حرف بأخذ وسنقوم احلرف طباعة دالة سنستخدم نصية سلسلة لطباعة

نصية. سلسلة لطباعة puts32 الدالة توضح التالية والشفرة ، السلسلة تنتهي حىت احلرف طباعةExample ٤.١١: puts32 rou ne

٨٧

Page 106: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

١٢٣ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٤ ; puts32: print string in protected mode.٥ ; input:٦ ; ebx: point to the string٧ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٨٩ bits 32١٠١١ puts32:١٢١٣ pusha ; Save Registers.١٤١٥ mov edi,ebx١٦١٧ @loop:١٨ mov bl,byte[edi] ; read character.١٩٢٠ cmp bl,0x0 ; end of string ?٢١ je puts32 end ; yes, jmp to end.٢٢٢٣ call putch32 ; print the character.٢٤٢٥ inc edi ; point to the next character.٢٦٢٧ jmp @loop٢٨٢٩ puts32 end:٣٠٣١ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣٢ ; Update the Hardware Cursor.٣٣ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣٤ ; After print the string update the hardware cursor.٣٥٣٦ mov bl,byte[x pos]٣٧ mov bh,byte[y pos]٣٨٣٩ call move cursor٤٠٤١ popa ; Restore Registers.

٨٨

Page 107: برمجة وتصميم نظام تشغيل

VGA ال أساسيات .٣.٤

٤٢٤٣ ret

(القيمة السلسلة اية اىل نصل أن اىل وطباعته النصية السلسة من حرف حرف قراءة سيتم الدالة هذه يفمعه التعامل الن ونظرا CRT Controller متحكم طريق عن وذلك املؤشر حتديث سيتم ذلك وبعد ، (0x0

. حرف كل طباعة بعد وليس السلسلة طباعة بعد سيكون املؤشر حتديث فان قليال بطئ

Hardware Cursor املؤشر حتديث .٤.٣.٤يتم وهذا ، يدويا حتديده عند اال مكانه من يتحرك ال الكتابة مؤشر فان نصية سلسلة او حرف طباعة عندسوف ولكننا املسجالت من العديد حيوي املتحكم هذا . CRT Controller متحكم مع التعامل طريق عن

.Index Register البيانات نوع ومسجل Data Register البيانات مسجل على نركزIndex مسجل اىل بارساهلا وذلك البيانات نوع حتديد اوال فيجب ، املتحكم هذا اىل بيانات والرسالمسجل فان x86 حواسيب ويف ، Data Register البيانات مسجل اىل البيانات ارسال مث ومن Register

.0x3d4 العنوان يأخذ Index Register ومسجل 0x3d5 العنوان يأخذ البيانات.Index Register البيانات نوع مسجل اىل ارساهلا ميكن اليت القيم يوضح التايل واجلدول

• 0x0: Horizontal Total.• 0x1: Horizontal Display Enable End.• 0x2: Start Horizontal Blanking.• 0x3: End Horizontal Blanking.• 0x4: Start Horizontal Retrace Pulse.• 0x5: End Horizontal Retrace.• 0x6: Ver cal Total.• 0x7: Overflow.• 0x8: Preset Row Scan.• 0x9: Maximum Scan Line.• 0xa: Cursor Start.• 0xb: Cursor End.• 0xc: Start Address High.

٨٩

Page 108: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

• 0xd: Start Address Low.• 0xe: Cursor Loca on High.• 0xf : Cursor Loca on Low.• 0x10: Ver cal Retrace Start.• 0x11: Ver cal Retrace End.• 0x12: Ver cal Display Enable End.• 0x13: Offset.• 0x14: Underline Loca on.• 0x15: Start Ver cal Blanking.• 0x16: End Ver cal Blanking.• 0x17: CRT Mode Control.• 0x18: Line Compare.

سترسل اليت البيانات نوع سيحدد هذا فان Index Reigster مسجل اىل السابقة القيم من أي ارسال وعند، للمؤشر x قيمة ستحدد 0xf القيمة أن سنجد السابق اجلدول ومن .Data Register البيانات مسجل اىلمع التوايل على البيانات مسجل اىل x,y قيم ارسال جيب ذلك للمؤشر.وبعد y قيمة ستحدد 0xe والقيمةللتحويل التايل القانون سنستخدم أننا يعين وهذا حرف لكل واحد بايت مع يتعامل CRT متحكم أن مالحظة

عناوين. اىل (x,y) قيم منvideomemory = x+ y ∗ 80

املؤشر. حتريك على تعمل واليت move cursor الدالة عمل توضح التالية والشفرةExample ٤.١٢: Move Hardware Cursor

١٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٣ ; move cursor: Move the Hardware Cursor.٤ ; input:٥ ; bl: x pos.٦ ; bh: y pos.٧ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٨٩ bits 32١٠

٩٠

Page 109: برمجة وتصميم نظام تشغيل

VGA ال أساسيات .٣.٤

١١ move cursor:١٢١٣ pusha ; Save Registers.١٤١٥ ;−−−−−−−−−−−−−−−−−−−−−−١٦ ; Calculate the offset.١٧ ;−−−−−−−−−−−−−−−−−−−−−−١٨ ; offset = x pos + y pos∗COLUMNS١٩٢٠ xor ecx,ecx٢١ mov cl,byte[x pos]٢٢٢٣ mov eax,COLUMNS٢٤ mul byte[y pos]٢٥٢٦ add eax,ecx٢٧ mov ebx,eax٢٨٢٩ ;−−−−−−−−−−−−−−−−−−−−٣٠ ; Cursor Location Low.٣١ ;−−−−−−−−−−−−−−−−−−−−−٣٢٣٣ mov al,0xf٣٤ mov dx,0x3d4٣٥ out dx,al٣٦٣٧ mov al,bl٣٨ mov dx,0x3d5٣٩ out dx,al٤٠٤١ ;−−−−−−−−−−−−−−−−−−−−−−٤٢ ; Cursor Location High.٤٣ ;−−−−−−−−−−−−−−−−−−−−−−٤٤٤٥ mov al,0xe٤٦ mov dx,0x3d4٤٧ out dx,al٤٨٤٩ mov al,bh٥٠ mov dx,0x3d5٥١ out dx,al

٩١

Page 110: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

٥٢٥٣٥٤ popa ; Restore Registers.٥٥٥٦ ret

Clear Screen الشاشة تنظيف .٥.٣.٤تصفري و (Mode 7 منط يف 25*80) املوجودة احلروف بعدد املسافة حرف ارسال عملية هي الشاشة تنظيف

حرف. لكل كخلفية االزرق اللون وحتديد الشاشة تنظيف كيفية توضح التالية والشفرة . (x,y) قيمExample ٤.١٣: Clear Screen١٢ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٣ ; clear screen: Clear Screen in protected mode.٤ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٥٦ bits 32٧٨ clear screen:٩١٠ pusha ; Save Registers.١١ cld١٢١٣ mov edi,VIDEO MEMORY ; base address of video memory.١٤ mov cx,2000 ; 25∗80١٥ mov ah,CHAR ATTRIBUTE ; 31 = white character on blue

background.١٦ mov al,' '١٧١٨ rep stosw١٩٢٠ mov byte[x pos],0٢١ mov byte[y pos],0٢٢٢٣ popa ; Restore Registers.٢٤٢٥ ret

٩٢

Page 111: برمجة وتصميم نظام تشغيل

النواة حتميل .٤.٤

النواة حتميل .٤.٤عن البحث فقط ويتبقى Second Stage Bootloader النظام حممل من الثانية املرحلة مهمة تنتهي هنا اىلاىل التحكم نقل عملية من التأكد دف جتريبية نواة كتابة سيتم اجلزء هذا ويف اليها٤. التحكم ونقل النواة

أفضل. بشكل النظام حممل شفرة كتابة إعادة دف وكذلك النواةوال Pure Binary سيكون الناتج امللف أن حيث التجريبية النواة هذه لكتابة التجميع لغة استخدام وسيتموالسي++ السي بلغة العمل ونبدأ جانبا التجميع لغة سنترك القادم الفصل من وابتداءا ، خاص حممل اىل حيتاج

.لتحميل int 0x13 البايوس مقاطعة نستخدم أن ميكننا فال PMode املحمي النمط يف نعمل أننا ومبااىل النواة بتحميل نقوم أو املرن القرص ملحرك درايفر بكتابة نقوم أن وجيب ، الذاكرة اىل النواة قطاعاتالحقا. املرن القرص حمرك برجمة جزئية وسنترك ، االن سنفعله ما وهذا املحمي النمط اىل االنتقال قبل الذاكرةالعنوان على بتحميلها سنقوم النواة فان ، جيجا 4 حىت ذاكرة باستخدام يسمح املحمي النمط أن وحيثاىل الوصول يدعم ال احلقيقي النمط بأن التذكر علينا .لكن الذاكرة من ميجا 1 عند أي 0x100000االنتقال وعند 0x3000 وليكن خايل عنوان أي يف أوال النواة بتحميل سنقوم لذلك 0x100000 العنوان

اليها. والتحكم التنفيذ ونقل 0x100000 العنوان اىل بنسخها سنقوم املحمي النمط اىلترحيبية. نواة توضح التالية والشفرة

Example ٤.١٤: Hello Kernel

١٢ org 0x100000 ; kernel will load at 1 MB.٣٤ bits 32 ; PMode.٥٦ jmp kernel entry٧٨ %include "stdio.inc"٩١٠١١١٢ kernel message db 0xa,0xa,0xa," eqraOS v0.1

Copyright (C) 2010 Ahmad Essam"١٣ db 0xa,0xa, " University of Khartoum − Faculty

of Mathematical Sceinces.",0١٤١٥

بالتفصيل. برجمتها وكيفية النواة موضوع سيتناول التايل ٤الفصل

٩٣

Page 112: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

١٦ logo message db 0xa,0xa,0xa,"/ \ / /"

١٧ db 0xa, " / − ) `/ / `/ / / / /\ \ "

١٨ db 0xa, " \ /\ , / / \ , / \ /// "

١٩ db 0xa, " / /",0

٢٠ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢١ ; Entry point.٢٢ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٣٢٤ kernel entry:٢٥٢٦ ;−−−−−−−−−−−−−−−٢٧ ; Set Registers٢٨ ;−−−−−−−−−−−−−−−٢٩٣٠ mov ax,0x10 ; data selector.٣١ mov ds,ax٣٢ mov es,ax٣٣ mov ss,ax٣٤ mov esp,0x90000 ; set stack.٣٥٣٦ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣٧ ; Clear Screen and print message.٣٨ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣٩٤٠ call clear screen٤١٤٢ mov ebx,kernel message٤٣ call puts32٤٤٤٥ mov ebx,logo message٤٦ call puts32٤٧٤٨ ;−−−−−−−−−−−−−−−−−٤٩ ; Halt the system.٥٠ ;−−−−−−−−−−−−−−−−−٥١٥٢ cli

٩٤

Page 113: برمجة وتصميم نظام تشغيل

النواة حتميل .٤.٤

٥٣ hlt

، اليها التنفيذ ونقل وحتميلها النواة عن البحث عن املسؤولة هي ستكون النظام حممل من الثانية واملرحلةالبايوس مقاطعة استخدام من نتكمن حىت وذلك املحمي النمط اىل االنتقال قبل الذاكرة اىل حتميلها وسيتمالنواة. اىل التحكم ونقل ميجا 1 عنوان اىل النواة نسخ سيتم املحمي النمط اىل االنتقال وعند int 0x13حالة ويف النواة ملف عن والبحث الذاكرة اىل Root Directory حتميل أوال جيب الذاكرة اىل النواة ولتحميل(والذي FAT جدول يف index ك سيعمل العنوان هذا ، له كلستر أول عنوان قراءة سيتم موجودا امللف كانهذا كان اذا ما هل ستخربنا واليت index ال هلذا املقابلة القيمة قراءة وسيتم ايضا) الذاكرة اىل حتميله جيب

ال٥. أم للملف كلستر آخر هو الكلسترتنظيما أكثر بشكل الكود تقسيم ومت ، stage2.asm املحمل من الثانية املرحلة ملف توضح التالية والشفرةآخر) ملف يف للتضمني ملف هو .inc (ملف floppy.inc امللف اىل املرن بالقرص تتعلق دالة أي نقل مت حيثودوال stdio.inc يف موجودة االخراج ودوال fat12.inc امللف على موجودة امللفات بنظام املتعلقة والدوال ،اجلدول تفاصيل وكذلك العام الواصفات جدول تعيني ودالة a20.inc امللف على موجودة A20 بوابة تفعيلدائما٦. املستخدمة الثوابت بعض حلفظ common.inc ملف انشاء مت اخريا ، gdt.inc امللف يف موجودة

Example ٤.١٥: Loading and Execu ng Kernel: Full Example

١٢٣ bits 16 ; 16−bit real mode.٤ org 0x500٥٦ start: jmp stage2٧٨ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٩ ; include files:١٠ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١١ %include "stdio.inc" ; standard I/O routines.١٢ %include "gdt.inc" ; GDT load routine.١٣ %include "a20.inc" ; Enable A20 routines.١٤ %include "fat12.inc" ; FAT12 driver.١٥ %include "common.inc" ; common declarations.١٦١٧ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١٨ ; data and variable١٩ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٠

التفاصيل. ملعرفة السابق الفصل ٥راجعالبحث. اية يف ملحقة ستكون النهائية املحمل وشفرة example/ch3/boot/ جملد يف البحث مع مرفقة امللفات شفرات ٦مجيع

٩٥

Page 114: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

٢١ hello msg db 0xa,0xd,"Welcome to eqraOS Stage2",0xa,0xd,0٢٢ fail message db 0xa,0xd,"KERNEL.SYS is Missing. press any key to

reboot...",0٢٣٢٤٢٥٢٦ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٧ ; entry point of stage2 bootloader.٢٨ ; ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗٢٩٣٠ stage2:٣١٣٢ ;−−−−−−−−−−−−−−−٣٣ ; Set Registers.٣٤ ;−−−−−−−−−−−−−−−٣٥٣٦ cli٣٧٣٨ xor ax, ax٣٩ mov ds, ax٤٠ mov es, ax٤١٤٢ mov ax, 0x0٤٣ mov ss, ax٤٤ mov sp, 0xFFFF٤٥٤٦ sti٤٧٤٨ ;−−−−−−−−−−−−−−−−−−−−٤٩ ; Load gdt into gdtr.٥٠ ;−−−−−−−−−−−−−−−−−−−−٥١٥٢ call load gdt٥٣٥٤ ;−−−−−−−−−−−−−−−−−−−−٥٥ ; Enable A20.٥٦ ;−−−−−−−−−−−−−−−−−−−−٥٧ call enable a20 keyboard controller output port٥٨٥٩ ;−−−−−−−−−−−−−−−−٦٠ ; Display Message.

٩٦

Page 115: برمجة وتصميم نظام تشغيل

النواة حتميل .٤.٤

٦١ ;−−−−−−−−−−−−−−−−−٦٢ mov si,hello msg٦٣ call puts16٦٤٦٥ ;−−−−−−−−−−−−−−−−−−−−−٦٦ ; Load Root Directory٦٧ ;−−−−−−−−−−−−−−−−−−−−−−٦٨ call load root٦٩٧٠ ;−−−−−−−−−−−−−−−−−−−−−٧١ ; Load Kernel٧٢ ;−−−−−−−−−−−−−−−−−−−−−٧٣ xor ebx,ebx٧٤ mov bp,KERNEL RMODE BASE ; bx:bp buffer to load kernel٧٥٧٦ mov si,kernel name٧٧ call load file٧٨٧٩ mov dword[kernel size],ecx٨٠ cmp ax,0٨١ je enter stage3٨٢٨٣ mov si,fail message٨٤ call puts16٨٥٨٦ mov ah,0٨٧ int 0x16 ; wait any key.٨٨ int 0x19 ; warm boot.٨٩ cli ; cannot go here!٩٠ hlt٩١٩٢٩٣ ;−−−−−−−−−−−−−−−−٩٤ ; Go to PMode.٩٥ ;−−−−−−−−−−−−−−−−٩٦٩٧ enter stage3:٩٨٩٩ ; just set bit 0 from cr0 (Control Register 0).

١٠٠١٠١ cli ; important.

٩٧

Page 116: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

١٠٢ mov eax,cr0١٠٣ or eax,0x1١٠٤ mov cr0,eax ; entering pmode.١٠٥١٠٦١٠٧ ;−−−−−−−−−−−−−−−−−−−١٠٨ ; Fix CS value١٠٩ ;−−−−−−−−−−−−−−−−−−−−١١٠ ; select the code descriptor١١١ jmp CODE DESCRIPTOR:stage3١١٢١١٣١١٤ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١١٥ ; entry point of stage3١١٦ ;∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗١١٧١١٨ bits 32 ; code now 32−bit١١٩١٢٠ stage3:١٢١١٢٢ ;−−−−−−−−−−−−−−−−;١٢٣ ; Set Registers.١٢٤ ;−−−−−−−−−−−−−−−−;١٢٥١٢٦ mov ax,DATA DESCRIPTOR ; address of data descriptor.١٢٧ mov ds,ax١٢٨ mov ss,ax١٢٩ mov es,ax١٣٠ mov esp,0x90000 ; stack begin from 0x90000.١٣١١٣٢ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−١٣٣ ; Clear Screen and print message.١٣٤ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−١٣٥١٣٦ call clear screen١٣٧١٣٨ mov ebx,stage2 message١٣٩ call puts32١٤٠١٤١ mov ebx,logo message١٤٢ call puts32

٩٨

Page 117: برمجة وتصميم نظام تشغيل

النواة حتميل .٤.٤

١٤٣١٤٤١٤٥١٤٦ ;−−−−−−−−−−−−−−−−−−−−−−−−١٤٧ ; Copy Kernel at 1 MB.١٤٨ ;−−−−−−−−−−−−−−−−−−−−−−−١٤٩ mov eax,dword[kernel size]١٥٠ movzx ebx,word[bytes per sector]١٥١ mul ebx١٥٢ mov ebx,4١٥٣ div ebx١٥٤١٥٥ cld١٥٦١٥٧ mov esi,KERNEL RMODE BASE١٥٨ mov edi,KERNEL PMODE BASE١٥٩ mov ecx,eax١٦٠ rep movsd١٦١١٦٢ ;−−−−−−−−−−−−−−−−−−−−١٦٣ ; Execute the kernel.١٦٤ ;−−−−−−−−−−−−−−−−−−−−١٦٥ jmp CODE DESCRIPTOR:KERNEL PMODE BASE١٦٦١٦٧ ;−−−−−−−−−−−−−−−−−;١٦٨ ; Hlat the system.١٦٩ ;−−−−−−−−−−−−−−−−−;١٧٠ cli ; clear interrupt.١٧١ hlt ; halt the system.

النتيجة:

٩٩

Page 118: برمجة وتصميم نظام تشغيل

الثانية املرحلة - النظام حممل برجمة .٤

العمل أثناء النظام حممل :.١.٤ شكل

النواة تنفيذ بدء :.٢.٤ شكل

١٠٠

Page 119: برمجة وتصميم نظام تشغيل

.III القسمKernel النواة

Page 120: برمجة وتصميم نظام تشغيل
Page 121: برمجة وتصميم نظام تشغيل

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

حدة. على كل

التشغيل نظام نواة .١.٥

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

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

. يليه الذي املستوى خيدم مستوى كل حبيث

١٠٣

Page 122: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

التجريد مستويات .١.١.٥الذي للمستوى واجهة توفري هو مستوى كل وظيفة ، مستويات شكل على بنائها يتم الربجميات من العديداخلصائص بعض ما مستوى حيمي رمبا وكذلك والتفاصيل التعقيدات من العديد الواجهة هذه ختفي حبيث يليهككل النظام تقسيم ميكن حيث الربجميات من النوع هلذا التشغيل نظام يتبع ما وغالبا ، يليه الذي املستوى من

مستويات. عدة اىل

العتاد مستوى األول: املستوىيرتبط حيث ، احلاسب لعتاد متحكمات شكل على ويظهر نعرفه أن ميكن مستوى أدىن هو العتاد مستوىمع التخاطب هي األم اللوحة يف املتحكم وظيفة نفسه. العتاد يف آخر متحكم مع األم اللوحة يف ما متحكم؟ األوامر بتنفيذ املتحكم يقوم كيف املستقبلة. األوامر بتنفيذ يقوم بدوره والذي العتاد يف االخر املتحكم

الثاين. املستوى دور هو هذا

Firmware العتاد برامج مستوى الثاين: املستوى

وظيفة ، (EEPROM ذاكرة (غالبا املتحكم بداخل ذاكرة على موجودة برامج هي (Firmware) العتاد برامجوأي البايوس برنامج الربجميات هذه مثل على االمثلة ومن املتحكم. اىل املرسلة األوامر تنفيذ هي الربامج هذه

املفاتيح. لوحة متحكم مثل متحكم أي يف موجود برنامج

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

الذاكرة. يف عنوان أي اىل املباشر والوصول أمر أي تنفيذ ميكن أنه اي ، صفر احللقة يف النواة

(٢ و ١ (احللقة األجهزة مشغالت مستوى الرابع: املستوى

النواة) طريق عن (وذلك العتاد متحكمات مع التعامل وظيفتها للنظام برامج عن عبارة هي األجهزة مشغالتمن تتمكن حىت ٢ و ١ احللقة يف تعمل أن اىل حتتاج الربامج هذه ، األوامر الرسال او النتائج لقراءة سواءاالنظام تعطل خطورة اىل يؤدي قد هذا فان صفر احللقة على تنفيذها مت حالة ويف ، األوامر من العديد تنفيذاملشغالت أحد يقوم فقد عالية املشغل صالحيات ستكون كذلك املشغالت احد يف عطل هناك كان حالة يف

النظام. يعطل قد بدوره والذي (GDT) العام الواصفات جدول مثل املعاجل جداول أحد بتغيري

١٠٤

Page 123: برمجة وتصميم نظام تشغيل

النظام نواة وظائف .٢.٥

(٣ (احللقة املستخدم برامج مستوى اخلامس: املستوىفقط تتعامل وامنا النواة اىل الوصول الربامج هلذه ميكن ال حيث املستخدم برامج مستوى وهو االخري املستوى

.(API) بدوال تعرف واليت (Applica on Progeamming Interface) التطبيقات برجمة واجهة مع

النظام نواة وظائف .٢.٥لتصميم الطرق من العديد ،فهناك املتبعة التصميم لطريقة تبعا التشغيل نظام نواة ووظائف مكونات ختتلف١(User Program) للمستخدم بربنامج النظام لنواة يتبع بأنه عليه متعارف هو ما جيعل منها بعضا االنويةعند التايل القسم ويف النظام نواة يف الشائعة املكونات حاليا سنذكر لذلك . ذلك عكس االخر والبعضالتصميم. طريقة حبسب ونقسمها املكونات هذه يف أكثر سنفصل األنوبة تصميم وطرق هيكلة عن احلديث

الذاكرة إدارة .١.٢.٥قبل الرئيسية الذاكرة على حتمليه يتم ان جيب برنامج أي أن حيث الذاكرة إدارة هي النظام لنواة وظيفة أهمالتجزئة مشاكل مع والتعامل ، الشاغرة األماكن معرفة هي الذاكرة مدير مهام من لذلك ، تنفيذه يتم أنتكفي ال واليت الصغرية املساحات من الكثري على الذاكرة حتوي أن املمكن من حيث (Fragmenta on)هي معها التعامل الذاكرة مدير على اليت املشاكل أحد ما. لربنامج مساحة حجز حىت أو برنامج أي لتحميل(Posi on Independent) العنواين عن مستقال الربنامج يكون أن جيب حيث ، الربنامج حتميل مكان معرفةلدينا ان فرضنا فلو الربنامج. هلذا (Base Address) البداية عنوان هو ما نعرف فلن وإال حتمليه يتم لكيعليه يكون أن جيب الذي العنوان هو ما معرفة من نتمكن لن فهنا الذاكرة اىل حتميله ونريد binary برنامجوهكذا ،0x0 العنوان من تبدأ اا هو برنامج أي وربط ترمجة عملية من الناتج فان عادة لذلك ، الربنامجبرنامج من أكثر تنفيذ من نتمكن لن الشكل ذا الذاكرة. بداية يف برنامج أي حتميل من دوما سنتمكنباستخدام هو املشاكل هلذه واحلل ، 0x0 العنوان من يبدأ فقط واحدا برناجما هناك سيكون حيث ، واحدبرنامج لكل الذاكرة من ختيلية مساحة ختصيص يتم حيث (Virtual Address Space) التخيلية العنونة مساحة.reloca on مشكلة وحل برنامج من أكثر حتميل مشكلة حل مت وذا 0x0 من ختيليا العنونة تبدأ حبيثهذه ومفهوم 0x0 ال من تيدأ حبيث برنامج لكل العناوين من مساحة هي (VAS) التخيلية العنوان ومساحةحيث ، الذاكرة محاية اىل يؤدي ما وهذا به اخلاصة العناوين مساحة مع سيتعامل برنامج كل أن هو املساحةارتباط لعدم ونظرا .VAS يف املوجودة العناوين خبالف آخر عنوان أي اىل الوصول برنامج أي يستطيع لن(مثال الرئيسية الذاكرة خبالف اخرى ذاكرة اىل ختيلي عنوان يشري ان ميكن فانه الرئيسية الذاكرة مع VAS البني التحويل أن ذكر بنا وجيدر الذاكرة. يف اخلالية املساحات انتهاء مشكلة حيل وهذا الصلب). القرصMemory) املعاجل بداخل الذاكرة ادارة وحدة بواسطة العتاد طريق عن يتم احلقيقية اىل التخيليه العناوين

.٣ احللقة يف تعمل برامج أا ١املقصود

١٠٥

Page 124: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

واليت اخلصائص من وغريها Cache الذاكرة يف والتحكم الذاكرة محاية مهمة Management).وكذلك Unit

اهللا-. مبشيئة - السابع الفصل يف عليها اإلطالع سيتم

النواة وتصميم هيكلة .٣.٥

احلديث جيب ذلك قبل لكن ، البحث هذا يف منها بعض وسنستعرض األنوية لتصميم الطرق من العديد توجدفصل مبعىن أي (Hardware Abstrac on) العتاد جتريد وهي اال األنوية وتصميم هيكلة يف مفيدة طريقة عن(اختصارا HAL طبقة تسمى (So ware Layer) برجمية طبقة وانشاء ، العتاد مع املباشر التعامل من النواةلعتاد واجهة توفري هي HAL طبقة وظيفة ، العتاد وبني النواة بني (Hardware Abstrac on Layer لكلمة

العتاد. مع التعامل من النواة متكن حبيث احلاسبالصيانة يف وأسهل مقروئية أكثر ستكون النواة شفرة ،أوال الفوائد من العديد تتيح العتاد من النواة فصلأمهية واألكثر الثانية امليزة ، العتاد تعقيدات من سهولة أكثر أخرى واجهة مع ستتعامل النواة ألن والتعديليف التغيري بدون (SPARC,MIPS,...etc (مثل خمتلف عتاد ذات ألجهزة (Por ng) النواة نقل امكانية هيكتابة إعادة اىل باالضافة (Implementa on) التطبيق ناحية من HAL طبقة تعديل سيتم فقط ، النواة شفرة

جمددا٢. (Devcie Drivers) األجهزة مشغالت

Monolithic Kernel الضخمة النواة .١.٣.٥النظام برامج كل الن نظرا وذلك العمل يف أنوية وأكفأ أسرع ٣Monoli c بطريقة املصممة األنوية تعترب

. صفر احللقة يف وتعمل النواة ضمن تكون (System Process)سوف النظام فان النظام برامج من أي يف مشكلة أي حدوث عند انه هو التصميم هلذا الرئيسية املشكلةاملستوى هذا يف خلل أي أن سابقا ذكرنا وكما صفر احللقة يف تعمل الا نظرا وذلك العمل عن يتوقفنظام لتغيري أنه مبعىن مرنة غري النواة ان وهي ذكرها ميكن اخرى مشكلة العمل. عن النظام توقف اىل يؤدي

جمددا. النظام تشغيل اعادة جيب مثال امللفاتالقدمية DOS ال وأنظمة ، ولينوكس يونكس أنظمة هي التصميم ذا تعمل تشغيل أنظمة على وكأمثلة

.NT قبل ما وويندوز

سطح أجهزة على جنو/لينوكس نظام يعمل كيف يوما تسائلت هل ،HAL طبقة تستخدم احلالية التشغيل أنظمة أنوية ٢أغلباملضمنة! واألجهزة املكتب

مرنة ليست حجرية كتلة شكل على تكون النواة بأن واملقصود ، حجري فتعين Lithic كلمة أما ، واحد تعين Mono ٣كلمةمعقد. وصيانتها وتطويرها

١٠٦

Page 125: برمجة وتصميم نظام تشغيل

النظام نواة برجمة .٤.٥

MicroKernel املصغرة النواة .٢.٣.٥نظرا وذلك والتطوير والتعديل الصيانة يف واألسهل ومرونة واستقرار ثباتا األكثر هي MicroKernel األنويةالذاكرة ادارة وهي النواة ضمن تكون فقط األساسية الوظائف أن حيث ، ميكن ما أصغر تكون النواة النومشغالت امللفات نظام مثل النظام برامج بقية أما ،(IPC العمليات،أساسيات (جمدول العمليات وادارةحدوث حالة يف يعين وهذا ، (٣ (احللقة املستخدم منط يف وتعمل املستخدم لربامج تتبع وغريها األجهزةاحلاجة دون امللفات) نظام تغيري (مثال الربامج هذه تغيري ميكن كذلك يتأثر لن النظام فان الربامج هذه يف خطأهو التصميم هلذا الرئيسية املشكلة . املستخدم كربامج تعمل النظام برامج أن حيث اجلهاز تشغيل اعادة اىلالرسائل مترير طريق عن البعض بعضها مع تتخاطب أن عليها النظام برامج أن بسبب وذلك النظام عمل بطئInterprocess ب يعرف ما وهذا (Shared Memory) الذاكرة من جزء مشاركة أو (Message Passing)

الثالث. االصدار مينكس نظام هو التصميم هذا يتبع تشغيل لنظام مثال وأشهر .Communica on

Hybrid Kernel اهلجينة النواة .٣.٣.٥تطبق لكنها MicroKernel النواة تكون حيث ، السابقني التصميمني من مزيج إال هو ما للنواة التصميم هذاعلى وكأمثلة .Modified MicroKernel أو Hybrid Kernel التصميم هذا ويسمى ، Monolithic Kernel ك

.Plane 9 و BeOS ونظام ، NT معمارية على تعتمد اليت ويندوز أنظمة هو التصميم ذا تعمل أنظمة

النظام نواة برجمة .٤.٥التجميع لغة استخدام تدعم اللغة أن من التأكد جيب لكن ، برجمة لغة بأي التشغيل نظام نواة برجمة ميكنعند (مثال التجميع لغة أوامر مع املباشر التعامل عليها جيب ما كثريا النواة أن حيث (Inline Assemlby)

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

النظام). على كليا تعتمد واالخراج االدخالميزات من اللغتني به تتمتع ملا نظرا التشغيل أنظمة أنوية لربجمة والسي++ السي لغة تستخدم غالبا لذلكمكتبة اىل حتتاج ال أا هو منها كثرية السباب أكرب بشكل السي لغة وتنتشر ، اللغات باقي عن متيزها فريدةاىل حتتاج واليت سي++ لغة عكس على ا املكتوبة الربامج تعمل حىت (RunTime Library) التشغيل وقت

واهلدم. البناء دوال و االستثنائات مثل اخلصائص من الكثري لدعم (RunTime Library)القياسية والسي++ السي مكتبة من اجزاء تطوير إعادة جيب فانه سي++ أو سي لغة استخدام حالة ويفو scanf و printf دوال مثل التشغيل نظام على تعتمد اليت األجزاء وهي (Standard C/C++ Library)

١٠٧

Page 126: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

.free/delete وحتريرها malloc/new الذواكر حجز دوالاستخدام جيب أنه يعين وهذا بت 32 تكون أن جيب أيضا النواة فان ، بت 32 نظام برجمة بصدد الننا ونظراالثنائي بالشكل يأيت ال (الربنامج) منها املخرج أن املترمجات هذه مشكلة . بت 32 سي++ أو سي مترجممثل ولتحميل .Headers,...etc األشياء من العديد الثنائية الشفرة على يضاف وامنا ،٤ (Flat Binary) فقطمنها. األوامر بتنفيذ البدء مث ومن (main rou ne) للربنامج اإلنطالق نقطة عن البحث جيب فانه الربامج هذهاملشروع يئة خطوات توضيح سيتم امللحق ويف ، النواة لترمجة سي++ فيجوال مترجم استخدام وسيتم

التشغيل. وقت ملفات أو مكتبات على اعتمادية أي وازالةوسنناقش ، والسي++ السي بلغة ولكن السابق الفصل يف التجميع بلغة بربجمتها قمنا اليت النواة كتابة وسنعيدPortable) تنفيذي ملف هو سي++ الفيجوال مترجم من املخرج أن حيث النواة هذه وتنفيذ حتميل كيفية(main()) للنواة الرئيسية الدالة تنفيذ من نتمكن حىت معها التعامل جيب حمددة صيغة ولديه (Executableواليت اللغة خصائص بعض دعم يتم حىت وذلك سي++ للغة التشغيل وقت ملفات تطوير يف سنبدأ كذلك ،ويف ، (Pure Virtual Func on) الظاهرية والدوال واهلدم البناء دوال مثل التشغيل وقت دعم اىل حتتاج

. السي++ لغة يف (Excep ons) لإلستثنائات دعم يوجد ال احلايل الوقت

PE نواة وتنفيذ حتميل .١.٤.٥جيب فانه (Portable Executable) تنفيذي ملف لنا خيرج والذي سي++ فيجوال مترجم سنستخدم أننا مباوليست الرئيسية الدالة اىل التنفيذ ننقل أن النواة حتميل عند نتمكن حىت الصيغة هذه شكل هي ما نعرف أنهذا أن مالحظة جيب لكن (g++ مترجم (مثل أخرى سي++ مترمجات استخدام أخرى.وميكن أماكن اىلالتايل والشكل جنو/لينوكس. نظام على التنفيذية امللفات صيغة وهي ELF بصيغة ملف لنا خيرج املترجم

معه. التعامل بصدد حنن الذي PE ملف صيغة يوضحهلذه خاص حممل بتطوير قمنا حالة ويف سريع بشكل عليها سنطلع PE لصيغة (headers)اضافات أربع يوجد

كالتايل. السي++ بلغة االضافات هذه نصف أن ميكن و بالتفصيل. دراستها فسيتم الصيغةExample ٥.١: Portable Executable Header١٢ // header information format for PE files٣٤ typedef struct IMAGE DOS HEADER { // DOS .EXE header٥ unsigned short e magic; // Magic number (Should be MZ٦ unsigned short e cblp; // Bytes on last page of file٧ unsigned short e cp; // Pages in file٨ unsigned short e crlc; // Relocations٩ unsigned short e cparhdr; // Size of header in paragraphs١٠ unsigned short e minalloc; // Minimum extra paragraphs needed

البحث. هذا بداية يف بتطويره قمنا الذي النظام حممل ٤كربنامج

١٠٨

Page 127: برمجة وتصميم نظام تشغيل

النظام نواة برجمة .٤.٥

١١ unsigned short e maxalloc; // Maximum extra paragraphs needed١٢ unsigned short e ss; // Initial (relative) SS value١٣ unsigned short e sp; // Initial SP value١٤ unsigned short e csum; // Checksum١٥ unsigned short e ip; // Initial IP value١٦ unsigned short e cs; // Initial (relative) CS value١٧ unsigned short e lfarlc; // File address of relocation table١٨ unsigned short e ovno; // Overlay number١٩ unsigned short e res[4]; // Reserved words٢٠ unsigned short e oemid; // OEM identifier (for e oeminfo)٢١ unsigned short e oeminfo; // OEM information; e oemid specific٢٢ unsigned short e res2[10]; // Reserved words٢٣ long e lfanew; // File address of new exe header٢٤ } IMAGE DOS HEADER, ∗PIMAGE DOS HEADER;٢٥٢٦٢٧ // Real mode stub program٢٨٢٩ typedef struct IMAGE FILE HEADER {٣٠ unsigned short Machine;٣١ unsigned short NumberOfSections;٣٢ unsigned long TimeDateStamp;٣٣ unsigned long PointerToSymbolTable;٣٤ unsigned long NumberOfSymbols;٣٥ unsigned short SizeOfOptionalHeader;٣٦ unsigned short Characteristics;٣٧ } IMAGE FILE HEADER, ∗PIMAGE FILE HEADER;٣٨٣٩ typedef struct IMAGE OPTIONAL HEADER {٤٠ unsigned short Magic;٤١ unsigned char MajorLinkerVersion;٤٢ unsigned char MinorLinkerVersion;٤٣ unsigned long SizeOfCode;٤٤ unsigned long SizeOfInitializedData;٤٥ unsigned long SizeOfUninitializedData;٤٦ unsigned long AddressOfEntryPoint; // offset of kernel entry٤٧ unsigned long BaseOfCode;٤٨ unsigned long BaseOfData;٤٩ unsigned long ImageBase; // Base address of kernel entry٥٠ unsigned long SectionAlignment;٥١ unsigned long FileAlignment;

١٠٩

Page 128: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

٥٢ unsigned short MajorOperatingSystemVersion;٥٣ unsigned short MinorOperatingSystemVersion;٥٤ unsigned short MajorImageVersion;٥٥ unsigned short MinorImageVersion;٥٦ unsigned short MajorSubsystemVersion;٥٧ unsigned short MinorSubsystemVersion;٥٨ unsigned long Reserved1;٥٩ unsigned long SizeOfImage;٦٠ unsigned long SizeOfHeaders;٦١ unsigned long CheckSum;٦٢ unsigned short Subsystem;٦٣ unsigned short DllCharacteristics;٦٤ unsigned long SizeOfStackReserve;٦٥ unsigned long SizeOfStackCommit;٦٦ unsigned long SizeOfHeapReserve;٦٧ unsigned long SizeOfHeapCommit;٦٨ unsigned long LoaderFlags;٦٩ unsigned long NumberOfRvaAndSizes;٧٠ IMAGE DATA DIRECTORY DataDirectory[DIRECTORY ENTRIES];٧١ } IMAGE OPTIONAL HEADER, ∗PIMAGE OPTIONAL HEADER;

منها النواة تنفيذ سيبدأ واليت (kernel entry()) للنواة الرئيسية الدالة عنوان هو عليه احلصول نريد ما، IMAGE OPTIONAL HEADER وهي (header) إضافة آخر يف املتغريات أحد يف موجود العنوان هذا ،ذات الثانية االضافة أن بسبب وذلك إضافة أول من نبدأ أن جيب األضافة هذه عنوان على حنصل وحىت

االضافات. بقية مثل ثابته وليست متغري حجماإلضافة عنوان حيوي حيث e lfanew املتغري اىل وبالتحديد IMAGE DOS HEADER إضافة أول اىل وبالنظراملتغري ونقرأ إضافة آخر اىل نصل ومنها ، احلجم ثابته اضافة هي واليت IMAGE FILE HEADER الثالثةوالذي ImageBase املتغري نقرأ وكذلك الرئيسية للدالة offset عنوان حيوي الذي AddressOfEntryPointاالمر بواسطة الدالة اىل التنفيذ نقل يتم ذلك وبعد ، offset ال لقيمة اضافته وجيب للدالة البداية عنوان حيويبعدما مباشرة النظام حممل من الثانية املرحلة يف تنفيذها (ويتم ذلك طريقة توضح التالية والشفرة .call

.(KERNEL PMODE BASE العنوان على الذاكرة اىل النواة حتميل يتمExample ٥.٢: Ge ng Kernel entry

١٢٣ mov ebx,[KERNEL PMODE BASE+60]٤ add ebx,KERNEL PMODE BASE ; ebx = IMAGE FILE HEADER٥٦ add ebx,24 ; ebx = IMAGE OPTIONAL HEADER

١١٠

Page 129: برمجة وتصميم نظام تشغيل

النظام نواة برجمة .٤.٥

٧٨ add ebx,16 ; ebx point to AddressOfEntryPoint٩١٠ mov ebp,dword[ebx] ; epb = AddressOfEntryPoint١١١٢ add ebx,12 ; ebx point to ImageBase١٣١٤ add ebp,dword[ebx] ; epb = kernel entry١٥١٦ cli١٧١٨ call ebp

سي++ للغة التشغيل بيئة تطوير .٢.٤.٥(startup) التشغيلية الشفرات بعض كتابة جيب فانه سي++ لغة خصائص مجيع استخدام من نتمكن حىتللغة التشغيل وقت مكتبة تطوير سيتم اجلزء هذا ويف ، اللغة يف اخلصائص من العديد وتعرف متهد واليتمع تأيت اليت التشغيل وقت مكتبة على اإلعتماد الغينا قد ألننا نظرا وذلك (C++ Run me Library) سي++املستخدم التشغيل نظام على تعتمد املكتبة هذه أن حيث بنا) اخلاص (النظام النظام بناء يف املستخدم املترجم

موجودة. ليست دوال استدعاء مشاكل يسبب مما التطوير عملية يفوكذلك ، الكائنات حذف و (Global Object) العامة الكائنات يئة ميكن فلن املكتبة هذه تطوير وبدون

.(Excep ons) واالستثنائات RTTI و (new,delete) املعامالت بعض استخدام ميكن لن

Global Operator العامة املعامالتمل حاليا الننا ولكن ، السي++ لغة يف (delete) وحتريرها (new) الذاكرة حجز معامل تعريف سيتم

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

Example ٥.٣: Global new/delete operator١٢ void∗ cdecl ::operator new (unsigned int size){return 0;}٣ void∗ cdecl operator new[] (unsigned int size){return 0;}٤ void cdecl ::operator delete (void ∗ p){}٥ void cdecl operator delete[] (void ∗ p){}

١١١

Page 130: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

Pure virtual func on call handler

املترجم سيقوم حيث ،٥(Pure virtual func on ) النقية الظاهرية الدوال مع للتعامل دالة تعريف جيب ايضادعم أردنا أن لذلك ، Pure virtual لدالة استدعاء عملية وجد أينما ٦purecall() الدالة باستدعاء

كااليت. التعريف سيكون وحاليا ، purecall الدالة تعريف جيب Pure virtual الدوال

Example ٥.٤: Pure virtual func on call handler

١٢ int cdecl :: purecall() { for (;;); return 0; }

Floa ng Point Support العائمة الفاصلة دعم

وكذلك ، fltused للمتغري 1 القيمة تعيني جيب فانه سي++ يف (Floa ng Point) العائمة الفاصلة لدعمكالتايل. long النوع اىل float النوع من حتول واليت ftol2 sse() الدالة تعريف جيب

Example ٥.٥: Floa ng Point Support

١٢٣ extern "C" long declspec (naked) ftol2 sse() {٤ int a;٥ #ifdef i386٦ asm {٧ fistp [a]٨ mov ebx, a٩ }١٠ #endif١١ }١٢١٣ extern "C" int fltused = 1;

الدالة تعريف إعادة وجيب (Abstract) جمردة الفئة أن على يدل هذا فإن فئة أي داخل Pure virtual بأا دالة تعريف ٥عند. املشتقة الفئة ستكون واال الدالة، هذه حتوي اليت الفئة من املشتقة الفئات يف (Override)

آلخر. مترجم من ختتلف باستدعائها.وقد سي++ الفيجوال مترجم يقوم الدالة ٦هذه

١١٢

Page 131: برمجة وتصميم نظام تشغيل

النظام نواة برجمة .٤.٥

والساكنة العامة الكائنات يئةالربنامج٧ من خاص قسم يف (Dynamic ini alizer) له ديناميكيا مهيئا يضيف فانه كائنا املترجم جيد عندماكل وتنفيذ استدعاء هي التشغيل وقت مكتبة وظيفة فان الربنامج يعمل أن وقبل ..crt القسم وهومكتبة أزلنا أننا وبسبب .(Constructor البناء دالة (عرب االبتدائية قيمها الكائنات تأخذ حىت وذلك املهيئات(Preprocessor)التمهيدي املعاجل موجهات طريق عن يتم وهذا .crt القسم انشاء جيب فانه التشغيل وقت

املترجم. يف املوجودةالتشغيل وقت مكتبة ووظيفة ، (Func on Pointer) الدوال مؤشرات من مصفوفة حيوي .crt القسم هذاأن نعلم أن جيب و . املوجودة املؤشرات مصفوفة على باملرور وذلك املوجودة الدوال كل استدعاء هيdollar sign العالمة يلي الذي اجلزء أن حيث .crt:xcu القسم داخل حقيقة موجودة املؤشرات مصفوفةفانه املؤشرات مصفوفة طريق عن الدوال وتنفيذ استدعاء من نتمكن وحىت ، القسم بداخل املكان حيدد.crt:xca القسم يف سيكون البداية مؤشر ، ايته ويف .crt:xcu القسم بداية اىل مؤشر انشاء جيبالقسم ويلي .crt:xcz القسم يف سيكون النهاية ومؤشر ، مباشرة .crt:xcu القسم يسبق وهو

. مباشرة .crt:xcuنقوم أن يف احلل لذلك ، فيه وكتابة قراءة صالحيات منلك ال فاننا سننشئه الذي .crt القسم وخبصوص

. .data البيانات قسم مع القسم هذا بدمجسبق. ما توضح التالية والشفرة

Example ٥.٦: Object Ini alizer

١٢ // Function pointer typedef for less typing٣ typedef void ( cdecl ∗ PVFV)(void);٤٥ // xc a points to beginning of initializer table٦ #pragma data seg(".CRT$XCA")٧ PVFV xc a[] = { 0 };٨٩ // xc z points to end of initializer table١٠ #pragma data seg(".CRT$XCZ")١١ PVFV xc z[] = { 0 };١٢١٣ // Select the default data segment again (.data) for the rest of the

unit١٤ #pragma data seg()١٥

.stack واملكدس .code الشفرة وقسم .data البيانات قسم مثال األقسام، من العديد يوجد تنفيذي برنامج أي ٧يف

وغريها.

١١٣

Page 132: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

١٦ // Now, move the CRT data into .data section so we can read/write toit

١٧ #pragma comment(linker, "/merge:.CRT=.data")١٨١٩٢٠ // initialize all global initializers (ctors, statics, globals, etc

..)٢١ void cdecl initterm ( PVFV ∗ pfbegin, PVFV ∗ pfend ) {٢٢٢٣ //! Go through each initializer٢٤ while ( pfbegin < pfend )٢٥ {٢٦ //! Execute the global initializer٢٧ if ( ∗pfbegin != 0 )٢٨ (∗∗pfbegin) ();٢٩٣٠ //! Go to next initializer inside the initializer table٣١ ++pfbegin;٣٢ }٣٣ }٣٤٣٥ // execute all constructors and other dynamic initializers٣٦ void cdecl init ctor() {٣٧٣٨ atexit init();٣٩ initterm( xc a, xc z);٤٠ }

الكائنات حذف، (deini alizer array) اهلدم دوال مؤشرات من مصفوفة انشاء جيب (Objects) الكائنات حذف يتم لكيوذلك املصفوفة هذه بداخل اهلدم دالة اىل مؤشرا يضيف فانه هدم دالة جيد عندما املترجم أن بسبب وذلكمترجم أن حيث atexit الدالة تعريف وجيب ،(exit() الدالة استدعاء (عند الحقا استدعائها يتم حىتهدم لدالة مؤشر اضافة هي الدالة هذه وظيفة ، كائن أي جيد عندما باستدعائها يقوم سي++ الفيجوال. الذاكرة على مكان أي يف حفظها ميكن فانه املؤشرات مصفوفة ،وخبصوص املؤشرات مصفوفة اىل الكائن

سبق. ما توضح التالية والشفرةExample ٥.٧: Delete Object

١١٤

Page 133: برمجة وتصميم نظام تشغيل

النظام نواة برجمة .٤.٥

١٢ /! function pointer table to global deinitializer table٣ static PVFV ∗ pf atexitlist = 0;٤٥ // Maximum entries allowed in table. Change as needed٦ static unsigned max atexitlist entries = 32;٧٨ // Current amount of entries in table٩ static unsigned cur atexitlist entries = 0;١٠١١ //! initialize the de−initializer function table١٢ void cdecl atexit init(void) {١٣١٤ max atexitlist entries = 32;١٥١٦ // Warning: Normally, the STDC will dynamically allocate this.

Because we have no memory manager, just choose١٧ // a base address that you will never use for now١٨ pf atexitlist = ( PVFV ∗)0x5000;١٩ }٢٠٢١ //! adds a new function entry that is to be called at shutdown٢٢ int cdecl atexit( PVFV fn) {٢٣٢٤ //! Insure we have enough free space٢٥ if (cur atexitlist entries>=max atexitlist entries)٢٦ return 1;٢٧ else {٢٨٢٩ //! Add the exit routine٣٠ ∗(pf atexitlist++) = fn;٣١ cur atexitlist entries++;٣٢ }٣٣ return 0;٣٤ }٣٥٣٦ //! shutdown the C++ runtime; calls all global de−initializers٣٧ void cdecl exit () {٣٨٣٩ //! Go through the list, and execute all global exit routines٤٠ while (cur atexitlist entries−−) {

١١٥

Page 134: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

٤١٤٢ //! execute function٤٣ (∗(−−pf atexitlist)) ();٤٤ }٤٥ }

النواة اىل التنفيذ نقل .٣.٤.٥تعترب واليت kernel entry() الدالة اىل التنفيذ ونقل PE ملف لصيغة (Parsing) حتليل بعمل قمنا أن بعدوانشاء املقاطع مسجالت قيم حتديد هو فيها تنفيذه جيب ما وأول ، النظام نواة يف تنفيذها يتم دالة أولشفرة حتوي اليت main() الدالة استدعاء مث ومن العامة الكائنات ئية جيب ذلك وبعد (Stack) مكدسالتالية والشفرة .(Hang) النظام وايقاف الكائنات حذف يتم main() الدالة تعود عندما واخريا ، النواة

ذلك توضحExample ٥.٨: Kernel Entry rou ne

١٢ extern void cdecl main (); // main function.٣ extern void cdecl init ctor(); // init constructor.٤ extern void cdecl exit (); // exit.٥٦ void cdecl kernel entry ()٧ {٨٩ #ifdef i386١٠ asm {١١ cli١٢١٣ mov ax, 10h // select data descriptor in GDT.١٤ mov ds, ax١٥ mov es, ax١٦ mov fs, ax١٧ mov gs, ax١٨ mov ss, ax // Set up base stack١٩ mov esp, 0x90000٢٠ mov ebp, esp // store current stack pointer٢١ push ebp٢٢ }٢٣ #endif

١١٦

Page 135: برمجة وتصميم نظام تشغيل

إقرأ نظام شفرة على نظرة .٥.٥

٢٤٢٥ // Execute global constructors٢٦ init ctor();٢٧٢٨ // Call kernel entry point٢٩ main();٣٠٣١ // Cleanup all dynamic dtors٣٢ exit();٣٣٣٤ #ifdef i386٣٥ asm cli٣٦ #endif٣٧٣٨ for(;;);٣٩ }

خاليا. سيكون حاليا main() الدالة وتعريف

إقرأ نظام شفرة على نظرة .٥.٥األجهزة صعيد على املحمولية خاصية هي التشغيل نظام نواة برجمة أثناء مراعتها جيب اليت اخلصائص أهمتشغيل نظام نواة تصميم أن على اإلتفاق مت لذلك و (Expandibility) النواة توسعة قابلية وخاصية واملنصات٨وعتاد أجهزة لدعم الطبقة هذه تطبيق إعادة بعد فيما مطور ألي تسمح حىت HAL طبقة على بنائها سيتم إقرأالشفرات تقسيم سيتم فانه النظام نواة يف التوسعة وقابلية املحمولية من قدر أعلى على حنصل وحىت آخر.تتوافر أن جيب الوقت نفس ويف ، ما وظيفة وحدة كل تؤدي حبيث مستقلة وحدات اىل للنواة الربجميةاحلاجة دون الوحدة هذه خدمات من االستفادة من نتمكن حبيث وحدة لكل (Interface) عامة واجهةعملية من بكثري أهم تعترب الواجهة تصميم عملية فان املشروع تصميم بداية ويف الداخلية. تفاصيلها ملعرفةهيكلة على يؤثر ال قد التنفيذ الن نظرا (Impelmenta on) بالتنفيذ يسمى ما أو الوحدة حمتويات برجمة

. الواجهة تؤثر مثلما ومعماريته املشروع• eqraOS:

– boot: first-stage and second-stage bootloader.

– core:

∗ kernel:Kernel program PE executable file type.

واملعاجل. العتاد معمارية على يعتمد والذي Bootloader النظام حممل عكس ٨على

١١٧

Page 136: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

∗ hal:Hardware abstrac on layer.

∗ lib:Standard library run me and standard C/C++ library.

∗ include:Standard include headers.

∗ debug:Debug version of eqraOS.

∗ release:Final release of eqraOS.

القياسية السي مكتبة .٦.٥جيب فانه التشغيل نظام نواة تطوير أثناء القياسية والسي++ السي مكتبة على االعتماد إلغاء مت قد ألنه نظرااملكتبات هذه برجمة إعادة عملية أن وبسبب ، وسي++ سي لغة استخدام من نتمكن حىت املكتبة هذه انشاء

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

NULL تعريف.(void*)0 ب تعرف السي لغة يف بينما 0 القيمة أا على NULL تعريف يتم سي++ لغة يف

Example ٥.٩: null.h:Defini on of NULL in C and C++

١٢ #ifndef NULL H٣ #define NULL H٤٥ #if define ( MSC VER) && ( MSC VER > = 1020)٦ #pargma once٧ #endif٨٩ #ifdef NULL١٠ #undev NULL١١ #endif١٢١٣ #ifdef cplusplus١٤ extern "C"١٥ {١٦ #endif١٧١٨ /∗ C++ NULL definition ∗/

١١٨

Page 137: برمجة وتصميم نظام تشغيل

القياسية السي مكتبة .٦.٥

١٩ #define NULL 0٢٠٢١ #ifdef cplusplus٢٢ }٢٣ #else٢٤٢٥ /∗ C NULL definition ∗/٢٦ #define NULL (void∗)0٢٧٢٨ #endif٢٩٣٠ #endif //NULL H

النواة ترمجة حالة يف أما ، لديه معرفة تكون cplusplus القيمة فان سي++ مبترجم النواة ترمجة وعندالقيمة. تلك يعرف ال املترجم فان سي مبترجم

size t تعريف.(unsigned) إشارة بدون 32-bit صحيح عدد أا على size t تعريف يتم

Example ٥.١٠: size t.h:Defini on of size t in C/C++

١٢ #ifndef SIZE T H٣ #define SIZE T H٤٥ #ifdef cplusplus٦ extern "C"٧ {٨ #endif٩١٠ /∗ Stdandard definition of size t ∗/١١ typedef unsigned size t;١٢١٣ #ifdef cplusplus١٤ }١٥ #endif١٦١٧١٨ #endif //SIZE T H

١١٩

Page 138: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

البيانات أنواع تعريف إعادةويفضل ، عليه الربنامج ترمجة مت الذي والنظام املترجم حبسب حجمها ختتلف (Data Types) البيانات أنواع

. واحد آن يف والنوع احلجم لتوضيح (typedef) تعريفها اعادة يتم أنExample ٥.١١: stdint.h:typedef data type١٢ #ifndef STDINT H٣ #define STDINT H`٤٥ #define need wint t٦ #define need wchar t٧٨ /∗ Exact−width integer type ∗/٩ typedef char int8 t;١٠ typedef unsigned char uint8 t;١١ typedef short int16 t;١٢ typedef unsigned short uint16 t;١٣ typedef int int32 t;١٤ typedef unsigned int uint32 t;١٥ typedef long long int64 t;١٦ typedef unsigned long long uint64 t;١٧١٨١٩ // to be continue..٢٠٢١ #endif //STDINT H

اليت التسمية وهي cstdint ملف يف تضمينه سيتم السابق امللف فان سي++ للغة الرأس ملفات ولدعمالرأس٩. ملفات يف السي++ تتبعها

Example ٥.١٢: cstdint:C++ typedef data type١٢ #ifndef CSTDINT H

سي. للغة الرأس ملفات بذكر وسنكتفي جمددا ذكرها يتم لن لذلك األسلوب هذا نفس تتبع سي++ للغة الرأس ٩ملفات

١٢٠

Page 139: برمجة وتصميم نظام تشغيل

القياسية السي مكتبة .٦.٥

٣ #define CSTDINT H٤٥ #include <stdint.h>٦٧ #endif //CSTDINT H

احلرف نوع(عدد،حرف،حرفصغري،مسافة،حرف احلرف نوع حتدد واليت (Macros) املاكرو من العديد حيوي ctype.hملف

حتكم،...اخل).Example ٥.١٣: ctype.h:determine character type

١٢ #ifndef CTYPE H٣ #define CTYPE H٤٥ #ifdef MSC VER٦ #pragma warning (disable:4244)٧ #endif٨٩ #ifdef cplusplus١٠ extern "C"١١ {١٢ #endif١٣١٤ extern char ctype[];١٥١٦ /∗ constants ∗/١٧١٨ #define CT UP 0x01 // upper case١٩ #define CT LOW 0x02 // lower case٢٠ #define CT DIG 0x04 // digit٢١ #define CT CTL 0x08 // control٢٢ #define CT PUN 0x10 // punctuation٢٣ #define CT WHT 0x20 // white space (space,cr,lf,tab).٢٤ #define CT HEX 0x40 // hex digit٢٥ #define CT SP 0x80 // sapce.٢٦

١٢١

Page 140: برمجة وتصميم نظام تشغيل

التشغيل نظام نواة حول مقدمة .٥

٢٧ /∗ macros ∗/٢٨٢٩ #define isalnum(c) ( ( ctype+1)[(unsigned)(c)] & (CT UP | CT LOW |

CT DIG) )٣٠ #define isalpha(c) (( ctype + 1)[(unsigned)(c)] & (CT UP | CT LOW)

)٣١ #define iscntrl(c) (( ctype + 1)[(unsigned)(c)] & (CT CTL))٣٢٣٣٣٤ // to be continue..٣٥٣٦ #ifdef cplusplus٣٧ }٣٨ #endif٣٩٤٠ #endif // CTYPE H

١٢٢

Page 141: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦بتنفيذ والبدء (Current Process) ما عملية تنفيذ من مؤقت بشكل املعاجل إليقاف طريقة هي املقاطعاتمقاطعة يولد هذا فان املفاتيح لوحة يف حرف أي على الضغط عند هو ذلك على وكمثال . أخرى أوامرلكي حيتاجها اليت القيم كل وحيفظ حاليا عليه يعمل ما يوقف بأن املعاجل اىل كإشارة تأيت (Interrupt)وتسمى املفاتيح) لوحة (مقاطعة املقاطعة هذه مع للتعامل دالة وجود حالة ويف ، قطعه مت ما مواصلة يستطيعالتنفيذ فان (Interrupt Service Roun ne) املقاطعة خدمة دالة أو (Interrupt Handler) املقاطعة معاجلة دالةلوحة متحكم من ادخاله مت الذي احلرف قراءة يتم (مثال املقاطعة هذه معاجلة فيها يتم و ، تلقائيا اليها يتنقليعود املعاجل فان عملها من املقاطعة معاجلة دالة تنتهي وعندما الذاكرة) يف متغري اىل ارساله مث ومن املفاتيح(Hardware Interrupt) عتادية مقاطعات تكون إما واملقاطعات عليها. يعمل كان اليت العملية تنفيذ ليكملتعليمة طريق عن الربامج خالل من وتصدر (So ware Interrupt) برجمية تكون أو احلاسب عتاد من وتصدرالعدد على القسمة عن (مثال ما خطأ حدوث عند نفسه املعاجل يصدرها مقاطعات هناك كذلك .int n(Excep ons) املعاجل استثنائات أو املعاجل بأخطاء املقاطعات هذه وتسمى (Page Fault حدوث عند أو صفر

ملعاجلتها. دالة تتوفر مل حالة يف النظام عمل توقف ألا (Error Handler) األخطاء هذه معاجلة وجيب

So ware Interrupts الربجمية املقاطعات .١.٦اىل التنفيذ لنقل (int n األمر طريق (عن الربنامج داخل من اطالقها يتم مقاطعات هي الربجمية املقاطعاتاملستخدم برامج يف املقاطعات هذه تستخدم ما وغالبا ،(Interrupt handler) املقاطعة هذه تعاجل أخرى دالةواإلخراج اإلدخال أجهزة يف والكتابة للقراءة (مثال النظام خدمات من لالستفادة (Ring3 user mode)

املستخدم). منط يف لذلك اخرى طريقة توجد ال حيث

احلقيقي النمط يف املقاطعات .١.١.٦(Interrupt Request) املقاطعة تنفيذ بطلب يسمى ما (وهو املقاطعة أمر تنفيذ يتم عندما احلقيقي النمط يفInterrupt) املقاطعات جدول اىل ا ويذهب تنفيذها املطلوب املقاطعة رقم يأخذ املعاجل فان (IRQبـ وختتصرسجل كل وحيوي 0x3ff العنوان عند وينتهي 0x0 احلقيقي العنوان من يبدأ اجلدول هذا ، (Vector Tableأربع هو العنوان حجم املطلوبة. املقاطعة لتخدمي تنفيذها جيب واليت (IR) املقاطعة معاجلة دالة عنوان على فيه

كالتايل: وتكون بايت

١٢٣

Page 142: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

Interrupt Vector Table :.١.٦ جدولDescrip on Interrupt Number Base AddressDivide by 0 0 0x000Single step (Debugger) 1 0x004Non Maskable Interrupt (NMI) Pin 2 0x008Breakpoint (Debugger) 3 0x00COverflow 4 0x010Bounds check 5 0x014Undefined Opera on Code 6 0x018No coprocessor 7 0x01CDouble Fault 8 0x020Coprocessor Segment Overrun 9 0x024nvalid Task State Segment (TSS)I 10 0x028Segment Not Present 11 0x02CStack Segment Overrun 12 0x030General Protec on Fault (GPF) 13 0x034tPage Faul 14 0x038Unassigned 15 0x03CCoprocessor error 16 0x040Alignment Check (486+ Only) 17 0x044Machine Check (Pen um/586+ Only) 18 0x048Reserved excep ons 19-31 0x05CInterrupts free for so ware use 32-255 0x068 - 0x3FF

• Byte 0: Low offset address of IR.

• Byte 1: High offset address of IR.

• Byte 2: Low Segment address of IR.

• Byte 3: High Segment Address of IR.

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

فيه. املوجودة واملقاطعات IVT يوضح ١.٦ واجلدول البايوس)، مقاطعات طريق عن هذا (يتم السجل

١٢٤

Page 143: برمجة وتصميم نظام تشغيل

So ware Interrupts الربجمية املقاطعات .١.٦

املحمي النمط يف املقاطعات .٢.١.٦Interrupt Descriptor) املقاطعات واصفات جبدول يسمى خاصا جدوال املعاجل يستخدم املحمي النمط يفخمصصة واصفة كل واصفة 256 من يتكون حيث IVT جدول يشابه اجلدول هذا ، IDT ب وخيتصر (Tableاملقاطعة معاجلة دالة عنوان حتوي بايت 8 هو واصفة كل حجم ، مقاطعة) 256 حيوي اجلدول (اذا ما ملقاطعةاملقاطعة معاجلة دالة عليه تعمل الذي GDT جدول يف (selector type: code or data) الناخب نوع و (IR)

التالية. التركيبة توضحها اخلصائص من والعديد املطلوب احلماية مستوى اىل باالضافة ،• Bits 0-15:

– Interrupt / Trap Gate: Offset address Bits 0-15 of IR

– Task Gate: Not used.

• Bits 16-31:

– Interrupt / Trap Gate: Segment Selector (Useually 0x10)

– Task Gate: TSS Selector

• Bits 31-35: Not used

• Bits 36-38:

– Interrupt / Trap Gate: Reserved. Must be 0.

– Task Gate: Not used.

• Bits 39-41:

– Interrupt Gate: Of the format 0D110, where D determins size

∗ 01110 - 32 bit descriptor

∗ 00110 - 16 bit descriptor

– Task Gate: Must be 00101

– Trap Gate: Of the format 0D111, where D determins size

∗ 01111 - 32 bit descriptor

∗ 00111 - 16 bit descriptor

• Bits 42-44: Descriptor Privedlge Level (DPL)

– 00: Ring 0

– 01: Ring 1

– 10: Ring 2

– 11: Ring 3

١٢٥

Page 144: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

• Bit 45: Segment is present (1: Present, 0:Not present)

• Bits 46-62:

– Interrupt / Trap Gate: Bits 16-31 of IR address

– Task Gate: Not used

كامل مثال كتابة وسيتم ، القيم تتبع يسهل حىت التجميع بلغة واحدة واصفة انشاء يوضح التايل واملثالالسي. بلغة الحقا

Example ٦.١: Example of interrupt descriptor

١٢ idt descriptor:٣ baseLow dw 0x0٤ selector dw 0x8٥ reserved db 0x0٦ flags db 0x8e ; 010001110٧ baseHi dw 0x0

العنوان من االخر اجلزء ويكمل IR املقاطعة معاجلة دالة عنوان من بت 16 أول هو baseLow األول املتغريأن ومبا .0x0 العنوان يف ستكون املقاطعة ختدمي دالة أن مبعىن 0x0 هو العنوان املثال هذا ويف baseHi املتغريselector املتغري قيمة فان (Data) بيانات وليست للتنفيذ برجمية شفرة حتوي املقاطعة (ختدمي) معاجلة دالةأما .(GDT) العام الواصفات جدول يف (Code Selector) الشفرة ناخب اىل لإلشارة 0x8 تكون أن جيباحلماية مستوى وأن 32-bit هي الواصفة أن على داللة 010001110b هي قيمته فان flags املتغري

.(Ring0) صفر احللقة هوجدول ننشئ أن جيب ، الذاكرة) على مكان أي (يف متسلسل بشكل الواصفات أغلب انشاء يتم أن وبعدالواصفات اية وعنوان idt start وليكن متغري يف واصفة أول عنوان حفظ طريق عن يتم وهذا IDTحبيث معينة صورة يف يكون أن جيب والذي idt ptr يسمى مؤشرا انشاء مث ومن idt end املتغري يف

: وايته اجلدول بداية عنوان حيفظExample ٦.٢: Value to put in IDTR

١ idt ptr:٢ limit dw idt end − idt start ; bits 0−15 is size of idt٣ base dd idt start ; base of idt

١lidt االمر تنفيذ طريق عن املعاجل) داخل مسجل (وهو IDTR املسجل اىل حتميله يتم أن جيب املؤشر هذا.lidt [idt ptr] التايل بالشكل

وهذا ، idtr املسجل بداخل عنوانه جند والذي اجلديد باجلدول استبداله سيتم املقاطعات جدول فان األمر هذا تنفيذ ١بعدصفر. هي (CPL flag) العلم قيمة كانت اذا إال ينفذ ال األمر

١٢٦

Page 145: برمجة وتصميم نظام تشغيل

So ware Interrupts الربجمية املقاطعات .١.٦

جدول اىل به ويذهب املقاطعة رقم يأخذ و عليه يعمل الذي األمر ينهي املعاجل فان مقاطعة أي حدوث وعندباملعادلة الواصفة مكان حبساب يقوم ذلك وبعد ، (IDTR املسجل بداخل يتواجد اجلدول هذا (عنوان IDTالتنفيذ ينقل أن وقبل بايت. 8 هو IDT جدول يف واصفة كل حجم أن بسبب وذلك int num * 8عمله يتابع أن يستطيع حىت فيه توقف الذي للمكان حفظ بعملية يقوم أن جيب فانه املقاطعة معاجلة دالة اىلعنوان ومسجل CS الشفرة مقطع ومسجل EFLAGS األعالم حفظ ويتم . املقاطعة معاجلة دالة تعود عندماError) اخلطأ شفرة دفع يتم فانه ما خطأ حدوث حالة ويف ، احلايل (Stack) املكدس يف IP التالية التعليمة

التالية. التركيبة وتتبع 32-bit بطول هي اخلطأ وشفرة أيضا. املكدس اىل (Code• Bit 0: External event

– 0: Internal or so ware event triggered the error.

– 1: External or hardware event triggered the error.

• Bit 1: Descrip on loca on

– 0: Index por on of error code refers to descriptor in GDT or current LDT.

– 1: Index por on of error code refers to gate descriptor in IDT.

• Bit 2: GDT/LDT. Only use if the descriptor loca on is 0.

– 0: This indicates the index por on of the error code refers to a descriptor in the current GDT.

– 1: This indicates the index por on of the error code refers to a segment or gate descriptor inthe LDT.

• Bits 3-15: Segment selector index. This is an index into the IDT, GDT, or current LDT to the segmentor gate selector bring refrenced by the error code.

• Bits 16-31: Reserved.

ارجاع يتم حىت iretd أو iret األمر تنفذ أن جيب فانه عملها من املقاطعة معاجلة دالة تنتهي وعندماعمله. املعاجل يكمل وبالتايل .(FLAGS األعالم (قيم املكدس اىل دفعها مت اليت القيم

املعاجل أخطاء .٣.١.٦املعاجل باستثناء يعرف استثناء بتوليد يقوم املعاجل جيعل مما ما خطأ حيدث رمبا فانه لألوامر املعاجل تنفيذ خالل

أنواع: عدة له ويوجد ،وعنوان ، اخلطأ هذا اصالح يتم فرمبا االستثناء من النوع هذا معاجلة دالة تعمل عندما :Fault اخلطأ •

اخلطأ. هذا يف تسبب الذي األمر عنوان هو املكدس اىل دفعه يتم الذي العودةاخلطأ. يف تسبب الذي األمر تلي اليت التعليمة عنوان هو العودة عنوان :Trap اخلطأ •

١٢٧

Page 146: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

x86 Processor Excep ons Table :.٢.٦ جدولDescrip on Class Interrupt NumberDivide by 0 Fault 0Single step Trap/Fault 1Non Maskable Interrupt (NMI) Pin Unclassed 2Breakpoint Trap 3Overflow Trap 4Bounds check Fault 5Unvalid OPCode Fault 6Device not available Fault 7Double Fault Abort 8Coprocessor Segment Overrun Abort 9Invalid Task State Segment Fault 10Segment Not Present Fault 11Stack Fault Excep on Fault 12General Protec on Fault Fault 13Page Fault Fault 14Unassigned - 15x87 FPU Error Fault 16Alignment Check Fault 17Machine Check Abort 18SIMD FPU Excep on Fault 19Reserved - 20-31Avilable for so ware use - 32-255

اخلطأ. معاجلة دالة انتهاء بعد عمله الربنامج يكمل ولن ، للعودة عنوان يوجد ال :Abort اخلطأ •

بتوليدها. يقوم اليت واملقاطعات املعاجل أخطاء يوضح ٢.٦ واجلدولاألمر (بواسطة املقاطعات إلغاء وهي السابقة الفصول يف ذكرناها قد كنا مالحظة على الوقوف بنا وجيدروبالتايل General Protec on Fault خطأ حدوث يف يتسبب ال حىت املحمي النمط اىل االنتقال عند (cliوبالتايل مفعلة العتادية املقاطعات أن يعين cli األمر تنفيذ عدم أن هو ذلك وسبب العمل عن النظام توقفاىل االنتقال بداية وعند . ختدميها دالة اىل التنفيذ ينقل لكي املعاجل اىل مقاطعة يرسل أن ميكنه عتاد أياخلطأ. هذا اىل سيؤدي الستخدامه حماولة وأي انشائه يتم مل IDT املقاطعات جدول فان املحمي النمطPrpgrammable Interval Timer متحكم هو ثابت بشكل املعاجل اىل مقاطعات ترسل اليت املتحكمات أحداملعاجل اىل دائم بشكل مقاطعة ترسل حبيث System Timer النظام ساعة متثل وهي PIT مبتحكم وختتصربداية يف متواجد غري املقطاعات جدول أن وبسبب . املقاطعة هذه ختدمي دالة اىل التنفيذ ينقل بدوره والذي، النظام توقف اىل يؤدي هذا فان املقاطعة هذه لتخدمي دالة توجد ال وكذلك النظام حممل من الثانية املرحلة

١٢٨

Page 147: برمجة وتصميم نظام تشغيل

So ware Interrupts الربجمية املقاطعات .١.٦

كذلك املقاطعات. معاجلة دوال وكتابة املقطاعات جدول انشاء حلني العتادية املقاطعات ايقاف جيب لذلكيستخدمها اليت املقاطعات أرقام نفس تستخدم اا حيث العتادية املقاطعات لبعض أخرى مشكلة توجداىل وحتويلها العتاد من االشارات استقبال عن املسؤولة الشرحية برجمة بإعادة هو وحلها لإلستثناءات املعاجلPIC ب وختتصر Programmable Interrupt Controller تسمى الشرحية هذه ، املعاجل اىل وارساهلا مقاطعات

متشاة. أرقاما تستخدم اليت لألجهزة املقاطعات ارقام وتغيري برجمتها إعادة وجيباملقطاعات ملعاجلة دالة 256 ال وتوفري السي لغة باستخدام (IDT) املقاطعات جدول إنشاء سيتم يلي وفيما(GDT) العام الواصفات جدول بانشاء سنقوم ذلك وقبل ، رسالة طباعة على الدوال عمل سيقتصر وحالياPIC متحكم برجمة يف سنبدأ ذلك وبعد االقالع) مرحلة يف بانشائه قمنا الذي اجلدول الغاء سيتم (أي جمددا

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

GDT العام الواصفات جدول إنشاء .٤.١.٦فكرة اعتماد اىل أدى ما وهذا ، املنصات صعيد على املحمولية هي التشغيل نظام نواة يف الرئيسي اهلدفمعمارية على معتمدا النظام جيعل ما وكل وادارته احلاسب بعتاد يتعلق ما كل حتتها يقبع واليت HAL طبقةويقسم حيدد السابقة- الفصول يف ذكرنا كما - العام الواصفات وجدول ، HAL طبقة حتت جنده أيضا معينةيعتمد اجلدول هذا إنشاء ألن ونظرا ، وغريها بيانات حتوي وأجزاء للتنفيذ قابلة كأجزاء الرئيسية الذاكرة لنااىل النظام نقل أن يعين وهذا ٢HAL طبقة حتت يقع ان جيب فانه فيه املدعومة واألوامر املعاجل معمارية على

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

آخر. حاسوب معمارية على الحقا تطبيقها إعادة من مطور أي يتمكن حىتExample ٦.٣: include/hal.h:Hardware Abstrac on Layer Interface

١٢ #ifndef HAL H٣ #define HAL H٤٥ #ifndef i386٦ #error "HAL is not implemented in this platform"٧ #endif٨٩ #include <stdint.h>١٠١١ #ifdef MSC VER١٢ #define interrupt declspec(naked)١٣ #else

.HAL طبقة يف تكون أن جيب لذلك للمعاجل جداول هي (GDT,LDT and IDT) اجلداول هذه آخر منظور ٢من

١٢٩

Page 148: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

١٤ #define interrupt١٥ #endif١٦١٧ #define far١٨ #define near١٩٢٠٢١ /∗ Interface ∗/٢٢٢٣ extern int cdecl hal init();٢٤ extern int cdecl hal close();٢٥ extern void cdecl gen interrupt(int);٢٦٢٧٢٨ #endif // HAL H

تطبيق أي أن يعين وهذا extern بأا عنها اإلعالن مت دوال ثالث من مكونة HAL طبقة واجهة وحالياتقوم واليت hal init() هي االوىل الدالة الدوال. هذه يعرف أن جيب الواجهة هلذه (Implementa on)الدالة وأخريا والتحرير احلذف بعملية تقوم hal close() الثانية الدالة بينما املعاجل وجداول العتاد بتهيئةاملقاطعة معاجلة دالة أن من والتأكد برجمية مقاطعة إرسال جتربة لغرض وضعها مت واليت gen interrupt

يرام. كما تعمللنا سيسمح ما وهذا السي بلغة انشائه سيتم حيث ٣ (GDT) العام الواصفات جدول اىل باحلديث نعودالشفرة.وسوف يف أكثر ومقروئية وضوح يعطي مما املؤشر و اجلدول عن للتعبري عالية تراكيب باستخدام

دوال٤: ثالث تعريف اىل حنتاجمؤشر انشاء وكذلك وللبيانات للشفرة وواصفة خالية واصفة بتهيئة تقوم :i386 gdt init الدالة •

اجلدول.املطلوبة. الواصفة اىل وتعينها القيم تستقبل حيث الواصفة يئة دالة :i386 gdt set desc الدالة •املسجل اىل بدايته وعنوان اجلدول حجم حيوي الذي املؤشر بتحميل تقوم :gdt install الدالة •

.GDTRاجلدول٥. انشاء كيفية توضح التالية والشفرة

Example ٦.٤: hal/gdt.cpp:Install GDT.١.١.٤ ٣راجع

أقل. وال أكثر ال والتقسيم التنظيم ٤لغرض.hal/gdt.h الرأس ملف لقراءة النظام شفرة ٥راجع

١٣٠

Page 149: برمجة وتصميم نظام تشغيل

So ware Interrupts الربجمية املقاطعات .١.٦

١٢ #include <string.h>٣ #include "gdt.h"٤٥ static struct gdt desc gdt[MAX GDT DESC];٦ static struct gdtr gdtr;٧٨٩ static void gdt install();١٠١١١٢ static void gdt install() {١٣ #ifdef MSC VER١٤ asm lgdt [ gdtr];١٥ #endif١٦ }١٧١٨ extern void i386 gdt set desc(uint32 t index,uint64 t base,uint64 t

limit,uint8 t access,uint8 t grand) {١٩٢٠ if ( index > MAX GDT DESC )٢١ return;٢٢٢٣ // clear the desc.٢٤ memset((void∗)& gdt[index],0,sizeof(struct gdt desc));٢٥٢٦ // set limit and base.٢٧ gdt[index].low base = uint16 t(base & 0xffff);٢٨ gdt[index].mid base = uint8 t((base >> 16) & 0xff);٢٩ gdt[index].high base = uint8 t((base >> 24) & 0xff);٣٠ gdt[index].limit = uint16 t(limit & 0xffff);٣١٣٢ // set flags and grandularity bytes٣٣ gdt[index].flags = access;٣٤ gdt[index].grand = uint8 t((limit >> 16) & 0x0f);٣٥ gdt[index].grand = gdt[index].grand | grand & 0xf0;٣٦ }٣٧٣٨ extern gdt desc∗ i386 get gdt desc(uint32 t index) {٣٩ if ( index >= MAX GDT DESC )٤٠ return 0;

١٣١

Page 150: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

٤١ else٤٢ return & gdt[index];٤٣ }٤٤٤٥ extern int i386 gdt init() {٤٦٤٧ // init gdtr٤٨ gdtr.limit = sizeof(struct gdt desc) ∗ MAX GDT DESC − 1;٤٩ gdtr.base = (uint32 t)& gdt[0];٥٠٥١ // set null desc.٥٢ i386 gdt set desc(0,0,0,0,0);٥٣٥٤ // set code desc.٥٥ i386 gdt set desc(1,0,0xffffffff,٥٦ I386 GDT CODE DESC | I386 GDT DATA DESC |I386 GDT READWRITE |

I386 GDT MEMORY, // 10011010٥٧ I386 GDT LIMIT HI |I386 GDT 32BIT | I386 GDT 4K //

11001111٥٨٥٩ );٦٠٦١ // set data desc.٦٢ i386 gdt set desc(2,0,0xffffffff,٦٣ I386 GDT DATA DESC |I386 GDT READWRITE |I386 GDT MEMORY, //

10010010٦٤ I386 GDT LIMIT HI |I386 GDT 32BIT | I386 GDT 4K // 11001111٦٥ );٦٦٦٧ // install gdtr٦٨ gdt install();٦٩٧٠ return 0;٧١ }

١٣٢

Page 151: برمجة وتصميم نظام تشغيل

Programmable Interrupt Controller للربجمة القابل املقاطعات متحكم .٢.٦

Programmable Interrupt للربجمة القابل املقاطعات متحكم .٢.٦Controller

عدم بسبب هو (PMode) املحمي النمط اىل اإلنتقال عند العتادية املقاطعات تعطيل يف الرئيسي السببفان املقاطعات ملعاجلة دالة ٢٥٦ ال بتوفري قمنا لو وحىت ، اللحظة تلك يف املقاطعات ملعاجلة دوال توفرمقاطعات ترسل اليت PIT النظام مؤقتة فمثال ، غرض من ألكثر املقاطعة رقم نفس استخدام مشكلة هنالكسيتم احلاالت كلتا يف لذلك ، املعاجل استثناءات أحد أيضا هي واليت ٨ رقم املقاطعة تستخدم دائم بشكلاملسؤول املتحكم برجمة بإعادة هو الوحيد احلل لذلك متاما. مرفوض شيء وهو واحدة ختدمي دالة استدعاءاملعاجل يستخدمها اليت األرقام تلك خبالف خمتلفة أرقام وتعيني العتاد متحكمات من اإلشارات استقبال عنمتحكمات من إشارات استقبال هي وظيفته (١.٦ الشكل (انظر املتحكم هذا ، واالستثناءات لألخطاء، اليها التنفيذ بنقل يقوم الذي املعاجل اىل ذلك بعد ترسل مقاطعات أرقام اىل بتحويلها يقوم مث ومن العتادباإلسم أيضا ويعرف Programmable Interrupt Controller ل اختصارا PIC مبتحكم املتحكم هذا ويعرف

.PIC متحكم املسمى سنستخدم البحث هذا ويف ، 8259A

8259A للربجمة القابل املقاطعات متحكم :.١.٦ شكل

Hardware Interrupts العتادية املقاطعات .١.٢.٦أا ذكرنا حيث العتادية املقاطعات عن نبذة إعطاء جيب PIC متحكم تفاصيل يف الدخول يف نبدأ أن قبلوهذا ، ما برنامج من وليس العتاد من يكون مصدرها أن ناحية من الربجمية املقاطعات عن ختتلف مقاطعاتهناك يكن مل قدميا حيث احلاسب. أجهزة على (Interrupt Driven) لألحداث مسري لقب ظهور اىل أدى ماقيمته تتغري حىت العتاد متحكم يف ما مسجل على (loop) برجمية حلقة باستخدام إال العتاد مع للتعامل طريقة٦Polling تسمى العتاد مع التخاطب يف الطريقة هذه ، العتاد من جاءت قد نتيجة أو قيمة هناك أن على داللةحيث العتاد مع التخاطب يف إلغائها مت وقد ال أم ستظهر هل يعرف ال قيمة انتظار يف املعاجل وقت تضيع وهيعلى يعمل قد والذي املعاجل اىل املقاطعات) (وبالتايل اإلشارات إرسال يدعم عتاد متحكم أي أصبح االن(Asynchronous) متزامن غري هو التخاطب وأصبح املعاجل وقت من اإلستفادة مت وهكذا ، أخرى عمليةعتاد بترقيم يقوم البايوس نظام فان اإلقالع يف احلاسب يبدأ وعندما .(Synchronous) متزامن من بدال

.Busy Wai ng ب أيضا ٦وتسمى

١٣٣

Page 152: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

x86 حلواسيب العتاد مقاطعات :.٣.٦ جدولالوصف املقاطعة رقم املشبك(الدبوس) رقم

Timer املؤقتة 0x08 IRQ0املفاتيح لوحة 0x09 IRQ1

ثانوي PIC متحكم مع يربط 0x0a IRQ2٢ التسلسلي املنفذ 0x0b IRQ3١ التسلسلي املنفذ 0x0c IRQ4٢ التوازي منفذ 0x0d IRQ5

املرن القرص متحكم 0x0e IRQ6١ التوازي منفذ 0x0f IRQ7CMOS ال ساعة 0x70 IRQ8/IRQ0

CGA ver cal retrace 0x71 IRQ9/IRQ1حمجوزة 0x72 IRQ10/IRQ2حمجوزة 0x73 IRQ11/IRQ3حمجوزة 0x74 IRQ12/IRQ4

FPU وحدة 0x75 IRQ13/IRQ5الصلب القرص متحكم 0x76 IRQ14/IRQ6

حمجوزة 0x77 IRQ15/IRQ7

وهذا أخرى ألرقام تغيريها جيب فانه األرقام هذه تكرار وبسبب متحكم لكل مقاطعة رقم وإعطاء احلاسبنقوم أن فيجب املحمي النمط يف أما البايوس مقاطعات باستخدام وذلك احلقيقي النمط يف بسهولة يتمأرقام يوضح ٣.٦ واجلدول . تغيريها مث ومن املقاطعات أرقام لديه الذي املتحكم مع املباشر بالتخاطب

احلاسب. ملتحكمات املقاطعات

PIC متحكم برجمة .٢.٢.٦

بتحويلها يقوم مث ومن به موصولة تكون واليت العتاد متحكمات من (Signals) إشارات يستقبل PIC متحكممتحكمات أولية PIC متحكم ويراعي ، ختدميها دالة اىل التنفيذ بنقل املعاجل يقوم لكي مقاطعات أرقام اىلويقوم األولية يراعي سوف املتحكم فان PIC متحكم اىل الوقت نفس يف إشارتني إرسال مت لو فمثال ، العتادالرقم بارسال املتحكم يقوم املقاطعة ختدمي دالة تنتهي أن وبعد أوال األولية ذو العتاد مقاطعة رقم بارسالوهذا (IRQ مقاطعات ٨ (أي خمتلفة أجهزة ٨ مع فقط يتعامل فانه املتحكم بناء لتعقيدات ونظرا . اآلخر. (Secondary/Slave PIC) الثانوي باملتحكم يعرف آخر PIC متحكم توفري اىل احلاسب مصنعى أدى مااجلسر يف يتواجد والذي الثانوي املتحكم مع ويرتبط املعاجل داخل يوجد (Primary PIC) الرئيسي املتحكم

. (SouthBridge) اجلنويب

١٣٤

Page 153: برمجة وتصميم نظام تشغيل

Programmable Interrupt Controller للربجمة القابل املقاطعات متحكم .٢.٦

PIC's Pins املتحكم مشابكونظرا ، رئيسي) متحكم اىل (أو املعاجل اىل املتحكم من البيانات ارسال طريقة هي املتحكم مشابك تعترباملوضوع أن حيث كثريا نفصل لن ولكن املشابك هذه دراسة جيب فانه حمددة وظيفة لديه مشبك كل الن

املشابك. هذه ٢.٦ الشكل ويوضح .(Digital Logic) الرقمي املنطق دراسي وخيص متشعبمتحكم اىل البيانات إلرسال هي D0-D7 املشابك أن حيث

PIC متحكم مشابك :.٢.٦ شكل

بني للتخاطب تستخدم CAS0, CAS1, CAS2 املشابك أما PICمع يرتبط INT واملشبك ، والثانوية الرئيسية PIC متحكماتمع يرتبط INTA املشبك كذلك INTR وهو للمعاجل مشبكحيث الفوائد من العديد هلا املشابك وهذه INTA املعاجل مشبكقيم بتعطيل يقوم فانه مقاطعة أي بتنفيذ املعاجل يقوم عندمايغلق INTR املعاجل مشبك جيعل ما وهذا IF and TF العلمنيعرب مقاطعة أي إرسال PIC ملتحكم ميكن ال وبالتايل مباشرةميكن ال وبالتايل غلقها مت هلا املقابلة اجلهة أن حيث INT مشبكهمسجل يف حجرها يتم وإمنا أخرى مقاطعة تقطع أن ملقاطعة

End Of املقاطعة اية إشارة (تسمى بإشارة والعودة املقاطعة تنفيذ من املعاجل ينتهي أن اىل PIC داخلوهي IR0...IR7 مشابك هي املشابك هذه يف يهمنا ما أخريا انتهت. قد املقاطعة أن على تدل (Interruptعلى (الضغط معني شيء حدوث عند منه اإلشارات استقبال املراد العتاد متحكمات مع ترتبط مشابكشرط يوجد وال أخرى PIC متحكمات مع ترتبط أن املشابك هلذه وميكن مثال) املفاتيح لوحة يف حرفPIC متحكم مع الثمانية املشابك هذه من مشبك كل ربط ميكن وإمنا PIC متحكمني توفر وجوب على ينصالعتاد متحكم أن مالحظة وجيب خمتلفة. عتادية مقاطعة ٢٥٦ حىت تدعم متحكمات ٨ سيتواجد وهكذا

التوايل. على وهكذا التنفيذ يف األوىل األولية لديه IR0 مشبك بأول يرتبط الذي

PIC متحكم مسجالتوهي: داخلية مسجالت عدة على PIC متحكم حيوي

من عدد وهناك ، املتحكم اىل األوامر إلرسال ويستخدم :(Command Reigster) األوامر مسجل •.EOI اشارة ارسال أمر أو ما مسجل من القراءة أمر مثل األوامر

املتحكم. حالة عليه تظهر حيث فقط للقراءة مسجل وهو :(Status Register) احلالة مسجل •

طلبت اليت األجهزة املسجل هذا حيفظ :(Interrupt Request Register) املقاطعات طلبات مسجل •بتات يوضح ٤.٦ واجلدول ، املعاجل من (Acnowledges) إشعار وصول بانتظار وهي مقاطعتها تنفيذ

املسجل. هذا

١٣٥

Page 154: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

IRR/ISR/IMR مسجل :.٤.٦ جدولIRQ Number (Slave controller) IRQ Number (Primary controller) Bit Number

IRQ8 IRQ0 0IRQ9 IRQ1 1

IRQ10 IRQ2 2IRQ11 IRQ3 3IRQ12 IRQ4 4IRQ13 IRQ5 5IRQ14 IRQ6 6IRQ15 IRQ7 7

PIC ملتحكم املنافذ عناوين :.٥.٦ جدولالوصف املنفذ رقمPrimary PIC Command and Status Register 0x20Primary PIC Interrupt Mask Register and Data Register 0x21Secondary (Slave) PIC Command and Status Register 0xA0Secondary (Slave) PIC Interrupt Mask Register and Data Register 0xA1

املعاجل. من اإلشعار بانتظار العتاد متحكم أن يعين فهذا ١ هي بت أي قيمة كانت حالة ويفوأن جنح قد املقاطعة طلب أن على املسجل على يدل :(In Service Register (ISR)) اخلدمة مسجل •

عملها. من املقاطعة ختدمي دالة تنتهي مل لكن وصل قد اإلشعارجتاهلها جيب اليت املقاطعات هي ما املسجل هذا حيدد :(Interrupt Mask Register (IMR)) مسجل •

األهم. املقاطعات على التركيز يتم حىت وذلك هلا إشعار ارسال وعدم

.x86 حواسيب يف املسجالت منافذ عناوين يوضح ٥.٦ واجلدول

PIC متحكم برجمةتأخذ حبيث املتحكم اىل األوامر بعض إرسال يتطلب ذلك فإن املقاطعات ترقيم وإعادة PIC متحكم لربجمةتعرف املتحكم لتهيئة إرساهلا جيب يئة أوامر أريع وتوجد املتحكم. عمل ا تحدد معني منط األوامر هذهعمل يف حتكم أوامر ثالث توجد وكذلك ، ICW يئة بأوامر وختتصر Ini aliza on Control Words بمتحكم من أكثر توفر حالة ويف . OCW ب وختتصر Opera on Control Words ب تعرف PIC متحكمالتهيئة أمر وهو ICW1 األول األمر كذلك. اآلخر املتحكم اىل التهيئة أوامر ترسل أن فيجب النظام على PIC

١٣٦

Page 155: برمجة وتصميم نظام تشغيل

Programmable Interrupt Controller للربجمة القابل املقاطعات متحكم .٢.٦

ICW1 األول األمر :.٦.٦ جدولالوصف القيمة البت رقم

ICW4 األمر إرسال IC4 0واحد PIC متحكم يوجد هل SNGL 1

x86 حواسيب يف صفر القيمة تأخذ ADI 2املقاطعة عمل منط LTIM 3

التهيئة بت 1 4x86 حواسيب يف صفر القيمة تأخذ 0 5x86 حواسيب يف صفر القيمة تأخذ 0 6x86 حواسيب يف صفر القيمة تأخذ 0 7

هذه ٦.٦ اجلدول ويوضح بتات ٧ ويأخذ والثانوي الرئيسي املتحكم اىل أوال إرساله جيب والذي الرئيسيبت. كل ووظيفة البتات

١ هي البت قيمة كان حالة ويف ال أم ICW4 التحكم أمر إرسال جيب كان اذا ما حيدد األول البت أن حيثمتحكم من أكثر هناك أن على داللة صفر القيمة يأخذ فغالبا الثاين البت أما ICW4 األمر إرسال جيب فإنهLevel Triggered هي هل املقاطعة عمل منط فيحدد الرابع أما مستخدم غري الثالث والبت ، النظام يف PICبتهيئة سنقوم أننا على داللة ١ القيمة يأخذ أن فيجب اخلامس البت أما ، Edge Triggered Mode أم Modeاىل األول األمر إرسال توضح ٦.٥ والشفرة .x86 حواسيب يف مستخدمة غري البتات وبقية PIC متحكم

والثانوي. الرئيسي PIC متحكم

Example ٦.٥: Ini aliza on Control Words 1

١ ; Setup to initialize the primary PIC. Send ICW 1٢ mov al, 0x11 ; 00010001٣ out 0x20, al٤٥ ; Send ICW 1 to second PIC command register٦ out 0xA0, al

عن وبالتايل IRQ املقاطعات للطلبات الرئيسية IVT جدول عنواين تغيري إلعادة يستخدم ICW2 الثاين األمرمباشرة األمر هذا يرسل أن وجيب . أخرى أرقام اىل IRQ لل املقاطعات أرقام نغري أن ميكن األمر هذا طريقاملشكلة نفس يف نقع ال حىت املعاجل قبل من مستخدمة غري أرقاما اختيار يتم أن جيب كذلك األول األمر بعد٦.٦ واملثال واحدة). ختدمي دالة لديهم وبالتايل املقاطعة رقم نفس يستخدم IRQ من أكثر وهي ) السابقة٣٢-٣٩ املقاطعات أرقام استخدام يتم حبيث والثانوي الرئيسي PIC ملتحكم IRQ أرقام تغيري كيفية يوضحمباشرة وتقع املعاجل يستخدمها ال خالية أرقاما وهي الثانوي للمتحكم ٤٠-٤٧ من واألرقام األول للمتحكم

.٣١ باملقاطعة وانتهاءا الصفر من بدءا مقاطعة ٣٢ يستخدم الذي للمعاجل مقاطعة آخر بعد

١٣٧

Page 156: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

ICW3 for Primary PIC الرئيسي للمتحكم الثالث األمر :.٧.٦ جدولالوصف القيمة البت رقم

الثانوي املتحكم ا يتصل اليت IRQ رقم S0-S7 0-7

ICW3 for Slave PIC الثانوي للمتحكم الثالث األمر :.٨.٦ جدولالوصف القيمة البت رقم

الرئيسي املتحكم مع ا يتصل اليت IRQ رقم ID0 0-2حمجوزة 3-7 3-7

Example ٦.٦: Ini aliza on Control Words 2

١ ; send ICW 2 to primary PIC٢ mov al, 0x20٣ out 0x21, al٤ ; Primary PIC handled IRQ 0..7. IRQ 0 is now mapped to interrupt

number 0x20٥٦٧ ; send ICW 2 to secondary PIC٨ mov al, 0x28٩ out 0xA1, al١٠ ; Secondary PIC handles IRQ's 8..15. IRQ 8 is now mapped to use

interrupt 0x28

طلب رقم حندد أن جيب حيث PIC متحكم من أكثر هناك كان حالة يف يستخدم ICW3 الثالث األمرما غالبا x86 حواسيب ويف الرئيسي. املتحكم مع للتخاطب الثانوي املتحكم يستخدمها اليت IRQ املقاطعةيوضحها معينة بصيغة األمر يتوقع متحكم كل لكن املتحكم، اىل األمر هذا إرسال جيب لذا IRQ2 يستخدم

. ٨.٦ و ٧.٦ اجلدوالنيستقبل الرئيسي PIC فمتحكم ، للمتحكم البيانات مسجل يقبلها اليت الصيغة حبسب األمر إرسال وجيبالرئيسي املتحكم يرتبط مثالثا ويف IRQ لرقم املقابل البت رقم تفعيل يتم حبيث بت ٧ شكل على IRQ رقم(0x4 تعادل وهي 0000100b القيمة إرسال جيب (أي ٢ البت قيمة تفعيل جيب لذلك IRQ2 عرب الثانوي معبالترميز (وتعادل ٢ وهي الثنائي الشكل على قيمته إرسال طريق عن IRQ رقم يقبل الثانوي املتحكم بينمااىل الثالث األمر إرسال كيفية يوضح ٦.٧ واملثال ، (٨.٦ جدول (انظر حمجوزة البتات وبقية (010 الثنائي

املتحكمني.Example ٦.٧: Ini aliza on Control Words 3

١٣٨

Page 157: برمجة وتصميم نظام تشغيل

Programmable Interrupt Controller للربجمة القابل املقاطعات متحكم .٢.٦

ICW4 الرابع األمر :.٩.٦ جدولالوصف القيمة البت رقم

x86 حواسيب يف البت هذا تفعيل جيب uPM 0EOI إشارة بإرسال يقوم املتحكم جعل AEOI 1

If set (1), selects buffer master. Cleared if buffer slave. M/S 2If set, controller operates in buffered mode BUF 3

x86 حواسيب يف صفر القيمة تأخذ SFNM 4x86 حواسيب يف صفر القيمة تأخذ 0 5-7

١ ; Send ICW 3 to primary PIC٢ mov al, 0x4 ; 0x04 => 0100, second bit (IR line 2)٣ out 0x21, al ; write to data register of primary PIC٤٥ ; Send ICW 3 to secondary PIC٦ mov al, 0x2 ; 010=> IR line 2٧ out 0xA1, al ; write to data register of secondary PIC

جدول يوضحها اليت التركيبة ويأخذ املتحكمني اىل إرساله جيب حتكم أمر آخر هو ICW4 الرابع األمر.٩.٦

مع يستخدم حيث تفعيله جيب بت أول فقط ، اخلصائص هذه كل لتفعيل حوجة يوجد ال الغالب ويفوالثانوي. الرئيسي PIC املتحكم اىل الرابع األمر إرسال كيفة يوضح ٦.٨ واملثال . x86 حواسيب

Example ٦.٨: Ini aliza on Control Words 4

١ mov al, 1 ; bit 0 enables 80x86 mode٢٣ ; send ICW 4 to both primary and secondary PICs٤ out 0x21, al٥ out 0xA1, al

أي حدوث حالة ويف ، والثانوي الرئيسي PIC متحكم يئة عملية تكتمل األربع األوامر هذه إرسال وبعديف بتعيينها قمنا اليت األرقام هي املعاجل اىل سترسل اليت املقاطعات أرقام فإن ، ما لعتاد متحكم من مقاطعةأوامر وخبصوص املعاجل. يستخدمها اليت األرقام عن بالطبع ختتلف وهي (٤٧ اىل ٣٢ من (وتبدأ الثاين األمريرسل أن جيب ألنه نظرا OCW2 الثاين األمر عن احلديث وسيتم مجيعا اليها حنتاج فلن OCW الثالث التحكمدورا تأخذ أن املقاطعات لبقية السماح يتم حىت وذلك عملها من املقاطعة ختدمي دالة تنتهي أن بعد دائماحيث ٥-٧ البتات ويهمنا . التحكم مسجل اىل إرساهلا جيب اليت البتات يوضح ١٠.٦ واجلدول ملعاجلتها.اية إشارة إرسال كيفية يوضح ٦.٩ واملثال .١١.٦ اجلدول يوضحها اليت اخلصائص بعض حتدد قيمهم أن

١٣٩

Page 158: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

OCW2 الثاين التحكم أمر :.١٠.٦ جدولالوصف القيمة البت رقم

Interrupt level upon which the controller must react L0/L1/L2 0-2حمجوزة 0 3-4

End of Interrupt (EOI) EOI 5Selec on SL 6

Rota on op on R 7

OCW2 أمر :.١١.٦ جدولDescrip on EOI Bit SL Bit R Bit

Rotate in Automa c EOI mode (CLEAR) 0 0 0Non specific EOI command 1 0 0

No opera on 0 1 0Specific EOI command 1 1 0

Rotate in Automa c EOI mode (SET) 0 0 1Rotate on non specific EOI 1 0 1

Set priority command 0 1 1Rotate on specific EOI 1 1 1

.Non specific EOI command إلختيار البتات ضبط جيب حيث (EOI) املقاطعة ختدمي دالة عملExample ٦.٩: Send EOI

١ ; send EOI to primary PIC٢٣ mov al, 0x20 ; set bit 4 of OCW 2٤ out 0x20, al ; write to primary PIC command register

العتاد مقاطعات تعمل كيفاىل إشارة إرسال هي ا يقوم خطوة فأول ما شيء اىل املعاجل انتباه لفت عتاد أي متحكم حيتاج عندما(IR0 باملشبك ترتبط واليت PIT املؤقتة متحكم هو املتحكم هذا أن سنفرض املثال سبيل (وعلى PIC متحكميسمى مسجل يف IRQ املتحكم طلب بتسجيل PIC متحكم يقوم حينها ، IR0 مشبك عرب ترسل اإلشارة هذهاملسجل هذا . IRR مبسجل اختصارا ويعرف (Interrupt Request Register) املقاطعات طلبات مسجلمثالنا ويف ، املتحكم من مقاطعة طلب عند بت أي تفعيل ويتم IRQ رقم ميثل فيه بت كل بت ٨ بطولInterrupt مسجل بفحص PIC متحكم يقوم ذلك بعد .IR0 مع ترتبط املؤقتة أن بسبب 0 البت تفعيل سيتم

١٤٠

Page 159: برمجة وتصميم نظام تشغيل

Programmable Interval Timer املؤقتة .٣.٦

املقاطعة على احلالة هذه يف حيث أعلى أولية ذات مقاطعة هناك توجد ال أنه من ليتأكد Mask Registerمن املعاجل اىل إشارة PIC يرسل ذلك وبعد األولوية. ذات املقاطعات كل ختدمي يتم حىت تننظر أن اجلديدةباإلنتهاء يقوم حيث املعاجل دور يأيت وهنا تنفيذها. جيب مقاطعة هناك بأن املعاجل ألخبار INTA مشبك خاللمفعلة غري كانت حالة يف حيث IF العلم قيمة بفحص يقوم مث ومن عليه يعمل الذي احلايل األمر تنفيذ منإشعار بارسال يقوم فانه مفعلة العلم قيمة املعاجل وجد إذا أما املقاطعة، تنفيذ طلب يتجاهل سوف املعاجل فانرقم ويضع INTA مشبك من يستقبلها بدوره الذي PIC متحكم اىل INTR مشبك عرب (Acnowledges)داللة In Service Register مسجل يف ٠ البت قيمة يفعل وأخريا ، D0-D7 املشابك يف IRQ ورقم املقاطعةاليت العملية بوقف يقوم فانه املقاطعة رقم على املعاجل حيصل وعندما تنفيذها. جاري املؤقتة مقاطعة أن علىفإنه احلقيقي النمط يف يعمل املعاجل كان وإذا CS and EIP ومسجل األعالم مسجل قيم وحيفظ عليها يعملمث ومن املقاطعة ختدمي دالة عنوان جيد حيث IVT املقطاعات جدول اىل كدليل ا ويذهب املقاطعة رقم يأخذجدول اىل ا ويذهب املقاطعة رقم يأخذ فانه املحمي النمط يف يعمل املعاجل كان اذا أما ، اليها التنفيذ ينقلجيب فاا عملها من املقاطعة ختدمي دالة تنتهي وعندما املقاطعة. ختدمي دالة جيد حيث املقاطعات واصفات

جمددا. املقاطعات تفعيل يتم حىت EOI إشارة ترسل أن

Programmable Interval Timer املؤقتة .٣.٦

تعمل (Counters or Channels) عدادات ثالث حتوي Dual Inline Package (DIP) شرحية هي املؤقتة(System Timer) النظام مبؤقت ويعرف األول العداد .(٣.٦ الشكل (انظر أشياء ثالث إلدارة كمؤقتاتالفترة هذه ، حمددة فترة كل ما مقاطعة لتنفيذ وذلك PIC متحكم اىل (IRQ0) مقاطعة طلب ارسال وظيفتهملفهوم حتتية بنية وتوفري العمليات تزامن عملية يف املؤقتة هذه من ويستفاد املؤقتة هذه برجمة عند حتديدها يتمالصدار النظام مؤقتة ا تقوم اليت الفترة أن حيث (Mul task and Mul thread) واملسالك العمليات تعددProcess) العمليات طابور يف موجودة (Process) عملية ألي املحدد الوقت هو سيكون املقاطعة طلبتنفيذ يف املعاجل ويبدأ بعد عملها من تنتهي مل حالة يف الصف آخر اىل العملية ترسل ذلك وبعد (Queueالرئيسية الذاكرة تنعيش عملية يف فيستخدم الثاين العداد أما املحددة. الفترة نفس حتت التالية العمليةاملهمة هذه أن ذكر بنا وجيدر احلاسب عمل أثناء الفقدان من حمتوياا على حتافظ حىت (RAM refreshing)أما العادة. يف تستخدم ال املؤقتة هذه وأصبحت (Memory Controller) الذاكرة متحكم اىل أحيلت قد

.(PC Speaker) احلاسب٧ مساعات اىل الصوت إرسال عملية يف فيستخدم األخري العداد

استخداماا وأحد والنغمات الصوت إصدار يف تستخدم داخلية مساعات حاسب كل يف يوجد وإمنا الصوت كرت ذه يقصد ٧الاإلقالع. مرحلة يف (POST) احلاسب فحص عملية بعد اخلطأ رسائل إلصدار

١٤١

Page 160: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

8253 للربجمة القابلة املؤقتة :.٣.٦ شكل

PIT املؤقتة برجمة .١.٣.٦.(SouthBridge) الشمايل اجلسر اىل مستلقة DIP كشرحية (MotherBoard) األم اللوحة من املؤقتة نقل مت مؤخراحىت للنظام الالزم العتادي الدعم يوفر أنه حيث النظام مؤقت وهو األول العداد برجمة على نركز وسوف

واملسالك. العمليات تعدد يدعم

PIT's Pins املؤقتة مشابكمسار عرب وذلك املؤقتة اىل والبيانات األوامر ترسل

PIT املؤقتة مشابك :.٤.٦ شكل

مع املسار هذا يرتبط حيث (Data Bus) البياناتD0...D7 مشابك ٨ وهي املؤقتة يف البيانات مشابكاملؤقتة اىل بيانات إرسال وعند بتات. ٨ وتمثلقيمة يأخذ WR الكتابة مشبك فان كتابة) (عمليةبيانات إرسال عملية هناك أن على داللة منخفضةاملؤقتة من بيانات قراءة حالة يف وكذلك املؤقتة اىلداللة منخفضة قيمة يأخذ RD القراءة مشبك فإنيف ويتحكم املؤقتة. من قراءة عملية هناك أن علىقيمته حتدد حيث CS مشبك والكتابة القراءة مشبك

يرتبط بينما (Address Bus) العناوين مسار مع CS مشبك ويرتبط ، السابقني الشبكني عمل تفعيل أو تعطيليرتبطان -واللذان A0,A1 املشبكني قيمة وتحدد .(Control Bus) التحكم مسار مع والكتابة القراءة مشبك(CLK, OUT, and GATE) املشابك أما املؤقتة. داخل اليها الوصول املطلوب املسجالت العنواين- مسار معاملشبكني ويعترب ، منهم واحدة كل من مشابك ثالث توجد أنه مبعىن أي املؤقتة بداخل عداد لكل فهييستخدم حيث إخراج مشبك (OUT) املشبك بينما للعداد إدخال مشابك (CLK (Clock Input) and GATE)حيث PIC متحكم مع يرتبط النظام) (مؤقتة األول العداد يف اإلخراج مشبك فمثال العتاد مع العداد لربطالطلب بتحويل يقوم والذي PIC متحكم اىل (IRQ0) املقاطعة طلب إرسال النظام مؤقتة تستطيع خالله من

التخدمي. دالة ينفذ لكي املعاجل اىل

١٤٢

Page 161: برمجة وتصميم نظام تشغيل

Programmable Interval Timer املؤقتة .٣.٦

PIT املؤقتة مسجالتمن حيث والثالث) والثاين (األول للعدادات تستخدم منها ثالث ، PIT املؤقتة بداخل مسجالت ٤ توجدمشابك أن وبسبب . بت ١٦ هو العداد مسجل وطول ، فيه الكتابة أو العداد قيمة قراءة ميكن خالهلاالشكل ذ البيانات إرسال من نتمكن لن فانه بت ٨ الطول من هي البيانات ومسار املؤقتة تربط اليت البياناتقراءة أو بيانات إرسال قبل حبيث (ControlWord) التحكم مسجل وهو اخر مسجل إستخدام جيب لذلك .أو البيانات إرسال يتم ذلك وبعد التحكم مسجل اىل املطلوب األمر إرسال جيب فانه عداد أي من بياناتمعها للتعامل املستخدمة واإلخراج اإلدخال منافذ وعنوان املسجالت هذا يوضح ١٢.٦ واجلدول قرائتها.العملية نوع حتديد يف قيمهم تؤثر حيث (A0,A1) العنوان وخط والكتابة القراءة خط قيم مالحظة وجيب ،التحكم مسجل يف املستخدمة البتات ماهية التالية التركيبة وتوضح العداد). ورقم كتابة أم (قراءة املطلوبة

8253 PIT املؤقتة مسجالت :.١٢.٦ جدولالوظيفة A1 خط A0 خط WR خط RD خط املنفذ رقم املسجل اسم

0 املسجل اىل كتابة 0 0 0 1 0x40 Counter 00 املسجل قراءة 0 0 1 0

1 املسجل اىل كتابة 1 0 0 1 0x41 Counter 11 املسجل قراءة 1 0 1 0

2 املسجل اىل كتابة 0 1 0 1 0x42 Counter 22 املسجل قراءة 0 1 1 0

Control Word كتابة 1 1 0 1 0x43 Control Wordعملية توجد ال 1 1 1 0

ما. عداد يف الكتابة أو القراءة من نتمكن حىت معينة قيم إرسال جيب حيث بت) ٨ بطول مسجل (وهو• Bit 0: (BCP) Binary Counter

– 0: Binary

– 1: Binary Coded Decimal (BCD)

• Bit 1-3: (M0, M1, M2) Opera ng Mode. See above sec ons for a descrip on of each.

– 000: Mode 0: Interrupt or Terminal Count

– 001: Mode 1: Programmable one-shot

– 010: Mode 2: Rate Generator

– 011: Mode 3: Square Wave Generator

– 100: Mode 4: So ware Triggered Strobe

– 101: Mode 5: Hardware Triggered Strobe

– 110: Undefined; Don't use

١٤٣

Page 162: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

– 111: Undefined; Don't use

• Bits 4-5: (RL0, RL1) Read/Load Mode. We are going to read or send data to a counter register

– 00: Counter value is latched into an internal control register at the me of the I/O writeopera on.

– 01: Read or Load Least Significant Byte (LSB) only

– 10: Read or Load Most Significant Byte (MSB) only

– 11: Read or Load LSB first then MSB

• Bits 6-7: (SC0-SC1) Select Counter. See above sec ons for a descrip on of each.

– 00: Counter 0

– 01: Counter 1

– 10: Counter 2

– 11: Illegal value

(milliseconds ١٠ (كل 100Hz كل مقاطعة طلب إلرسال النظام مؤقت عداد برجمة كيفية يوضح ٦.١٠ واملثالاملطلوب. العداد اىل املطلوب الوقت إرسال مث ومن أوال التحكم أمر إرسال طريق عن يتم وهذا ،

Example ٦.١٠: PIT programming

١ ; COUNT = input hz / frequency٢٣ mov dx, 1193180 / 100 ; 100hz, or 10 milliseconds٤٥ ; FIRST send the command word to the PIT. Sets binary counting,٦ ; Mode 3, Read or Load LSB first then MSB, Channel 0٧٨ mov al, 110110b٩ out 0x43, al١٠١١ ; Now we can write to channel 0. Because we set the "Load LSB first

then MSB" bit, that is١٢ ; the way we send it١٣١٤ mov ax, dx١٥ out 0x40, al ;LSB١٦ xchg ah, al١٧ out 0x40, al ;MSB

١٤٤

Page 163: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

HAL طبقة توسعة .٤.٦وفيها ، والعتاد النواة بني ما طبقة أو كواجهة وتعمل العتاد مع املباشر التعامل من النظام نواة تبعد HAL طبقةبداخل املقاطعات أرقام تعيني بإعادة تقوم اليت PIC متحكم برجمة أوامر إضافة وسيتم العتاد. تعريفات جندبارسال تقوم لكي للمؤقتة الالزم الوقت حتدد اليت و املؤقتة برجمة شفرة إضافة سيتم وكذلك الطبقة هذه

. (IRQ0) املقاطعة طلب

PIC دعم .١.٤.٦عرضه مت ما تطبيق سيتم القسم هذا ويف ، بالتفصيل برجمته وكيفية PIC متحكم عرض مت ٢.٢.٦ القسم يفاإلعالن حيوي الذي (hal/pic.h) الرأس ملف هو األول PIC ملتحكم ملفني ويوجد إقرأ. نظام نواة علىالدوال. تلك تعريف على حيوي الذي (hal/pic.cpp) التطبيق ملف هو والثاين الثوابت وكذلك الدوال عن(باستخدام ثوابت صورة يف والعناوين األرقام من العديد يغلف الذي الرأس ملف يعرض ٦.١١ واملثال

الشفرة٨. ووضوح مقروئية من تزيد حبيث املاكرو)Example ٦.١١: hal/pic.h: PIC Interface

١ // PIC 1 Devices IRQ٢ #define I386 PIC IRQ TIMER 0٣ #define I386 PIC IRQ KEYBOARD 1٤ #define I386 PIC IRQ SERIAL2 3٥ #define I386 PIC IRQ SERIAL1 4٦ #define I386 PIC IRQ PARALLEL2 5٧ #define I386 PIC IRQ DESKETTE 6٨ #define I386 PIC IRQ PARALLEL1 7٩١٠ // PIC 2 Devices IRQ١١ #define I386 PIC IRQ CMOSTIMER 0١٢ #define I386 PIC IRQ CGARETRACE 1١٣ #define I386 PIC IRQ AUXILIRY 4١٤ #define I386 PIC IRQ FPU 5١٥ #define I386 PIC IRQ HDC 6١٦١٧ // Operation Commamd Word 2 (OCW2)١٨ #define I386 PIC OCW2 MASK L1 1١٩ #define I386 PIC OCW2 MASK L2 2٢٠ #define I386 PIC OCW2 MASK L3 4

الثابتة. القيم هذه وظيفة ملعرفة ٢.٢.٦ القسم اىل ٨إرجع

١٤٥

Page 164: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

٢١ #define I386 PIC OCW2 MASK EOI 0x20٢٢ #define I386 PIC OCW2 MASK SL 0x40٢٣ #define I386 PIC OCW2 MASK ROTATE 0x80٢٤٢٥٢٦ // Operation Commamd Word 3 (OCW3)٢٧ #define I386 PIC OCW3 MASK RIS 1٢٨ #define I386 PIC OCW3 MASK RIR 2٢٩ #define I386 PIC OCW3 MASK MODE 4٣٠ #define I386 PIC OCW3 MASK SMM 0x20٣١ #define I386 PIC OCW3 MASK ESMM 0x40٣٢ #define I386 PIC OCW3 MASK D7 0x80٣٣٣٤٣٥ // PIC 1 port address٣٦ #define I386 PIC1 COMMAND REG 0x20٣٧ #define I386 PIC1 STATUS REG 0x20٣٨ #define I386 PIC1 IMR REG 0x21٣٩ #define I386 PIC1 DATA REG 0x21٤٠٤١٤٢ // PIC 2 port address٤٣ #define I386 PIC2 COMMAND REG 0xa0٤٤ #define I386 PIC2 STATUS REG 0xa0٤٥ #define I386 PIC2 IMR REG 0xa1٤٦ #define I386 PIC2 DATA REG 0xa1٤٧٤٨ // Initializing Commamd Word 1 (ICW1) Mask٤٩ #define I386 PIC ICW1 MASK IC4 0x1٥٠ #define I386 PIC ICW1 MASK SNGL 0x2٥١ #define I386 PIC ICW1 MASK ADI 0x4٥٢ #define I386 PIC ICW1 MASK LTIM 0x8٥٣ #define I386 PIC ICW1 MASK INIT 0x10٥٤٥٥٥٦ // Initializing Commamd Word 4 (ICW4) Mask٥٧ #define I386 PIC ICW4 MASK UPM 0x1٥٨ #define I386 PIC ICW4 MASK AEOI 0x2٥٩ #define I386 PIC ICW4 MASK MS 0x4٦٠ #define I386 PIC ICW4 MASK BUF 0x8٦١ #define I386 PIC ICW4 MASK SFNM 0x10

١٤٦

Page 165: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

٦٢٦٣٦٤ // Initializing command 1 control bits٦٥ #define I386 PIC ICW1 IC4 EXPECT 1٦٦ #define I386 PIC ICW1 IC4 NO 0٦٧ #define I386 PIC ICW1 SNGL YES 2٦٨ #define I386 PIC ICW1 SNGL NO 0٦٩ #define I386 PIC ICW1 ADI CALLINTERVAL4 4٧٠ #define I386 PIC ICW1 ADI CALLINTERVAL8 0٧١ #define I386 PIC ICW1 LTIM LEVELTRIGGERED 8٧٢ #define I386 PIC ICW1 LTIM EDGETRIGGERED 0٧٣ #define I386 PIC ICW1 INIT YES 0x10٧٤ #define I386 PIC ICW1 INIT NO 0٧٥٧٦ // Initializing command 4 control bits٧٧ #define I386 PIC ICW4 UPM 86MODE 1٧٨ #define I386 PIC ICW4 UPM MCSMODE 0٧٩ #define I386 PIC ICW4 AEOI AUTOEOI 2٨٠ #define I386 PIC ICW4 AEOI NOAUTOEOI 0٨١ #define I386 PIC ICW4 MS BUFFERMASTER 4٨٢ #define I386 PIC ICW4 MS BUFFERSLAVE 0٨٣ #define I386 PIC ICW4 BUF MODEYES 8٨٤ #define I386 PIC ICW4 BUF MODENO 0٨٥ #define I386 PIC ICW4 SFNM NESTEDMODE 0x10٨٦ #define I386 PIC ICW4 SFNM NOTNESTED 0٨٧٨٨٨٩ extern uint8 t i386 pic read data(uint8 t pic num);٩٠ extern void i386 pic send data(uint8 t data,uint8 t pic num);٩١ extern void i386 pic send command(uint8 t cmd,uint8 t pic num);٩٢ extern void i386 pic init(uint8 t base0,uint8 t base1);

مسجل اىل األوامر إلرسال ودالة البيانات مسجل من والكتابة للقراءة دالتان منها دوال ٤ الواجهة وحتويتعريف يوضح ٦.١٢ واملثال استدعائها. جيب اليت الدالة وهي املتحكم لتهئية هي األخرية والدالة التحكم

الدوال. هذهExample ٦.١٢: hal/pic.cpp: PIC Implementa on

١ uint8 t i386 pic read data(uint8 t pic num) {٢ if (pic num > 1)٣ return 0;

١٤٧

Page 166: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

٤٥ uint8 t reg = (pic num == 1)?I386 PIC2 DATA REG:I386 PIC1 DATA REG;٦ return inportb(reg);٧ }٨٩ void i386 pic send data(uint8 t data,uint8 t pic num) {١٠ if (pic num > 1)١١ return;١٢١٣ uint8 t reg = (pic num == 1)?I386 PIC2 DATA REG:I386 PIC1 DATA REG;١٤ outportb(reg,data);١٥ }١٦١٧ void i386 pic send command(uint8 t cmd,uint8 t pic num) {١٨١٩ if (pic num > 1)٢٠ return;٢١٢٢ uint8 t reg = (pic num == 1)?I386 PIC2 COMMAND REG:

I386 PIC1 COMMAND REG;٢٣ outportb(reg,cmd);٢٤ }٢٥٢٦٢٧٢٨ void i386 pic init(uint8 t base0,uint8 t base1) {٢٩٣٠ uint8 t icw = 0;٣١٣٢ disable irq(); /∗ disable hardware interrupt (cli) ∗/٣٣٣٤ /∗ init PIC, send ICW1 ∗/٣٥ icw = (icw & ˜I386 PIC ICW1 MASK INIT) | I386 PIC ICW1 INIT YES;٣٦ icw = (icw & ˜I386 PIC ICW1 MASK IC4) | I386 PIC ICW1 IC4 EXPECT;٣٧ /∗ icw = 0x11 ∗/٣٨٣٩ i386 pic send command(icw,0);٤٠ i386 pic send command(icw,1);٤١٤٢ /∗ ICW2 : remapping irq ∗/٤٣ i386 pic send data(base0,0);

١٤٨

Page 167: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

٤٤ i386 pic send data(base1,1);٤٥٤٦ /∗ ICW3 : irq for master/slave pic∗/٤٧ i386 pic send data(0x4,0);٤٨ i386 pic send data(0x2,1);٤٩٥٠ /∗ ICW4: enable i386 mode. ∗/٥١ icw = (icw & ˜I386 PIC ICW4 MASK UPM) | I386 PIC ICW4 UPM 86MODE ;

/∗ icw = 1 ∗/٥٢ i386 pic send data(icw,0);٥٣ i386 pic send data(icw,1);٥٤٥٥ }

PIT دعم .٢.٤.٦

Example ٦.١٣: hal/pit.h: PIt Interface١ #define I386 PIT COUNTER0 REG 0x40٢ #define I386 PIT COUNTER1 REG 0x41٣ #define I386 PIT COUNTER2 REG 0x42٤ #define I386 PIT COMMAND REG 0x43٥٦ #define I386 PIT OCW MASK BINCOUNT 0x1٧ #define I386 PIT OCW MASK MODE 0xe٨ #define I386 PIT OCW MASK RL 0x30٩ #define I386 PIT OCW MASK COUNTER 0xc0١٠١١١٢ #define I386 PIT OCW BINCOUNT BINARY 0x0١٣ #define I386 PIT OCW BINCOUNT BCD 0x1١٤١٥ #define I386 PIT OCW MODE TERMINALCOUNT 0x0١٦ #define I386 PIT OCW MODE ONESHOT 0x2١٧ #define I386 PIT OCW MODE RATEGEN 0x4١٨ #define I386 PIT OCW MODE SQUAREWAVEGEN 0x6١٩ #define I386 PIT OCW MODE SOFTWARETRIG 0x8٢٠ #define I386 PIT OCW MODE HARDWARETRIG 0xa٢١

١٤٩

Page 168: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

٢٢ #define I386 PIT OCW RL LATCH 0x0٢٣ #define I386 PIT OCW RL LSBONLY 0x10٢٤ #define I386 PIT OCW RL MSBONLY 0x20٢٥ #define I386 PIT OCW RL DATA 0x30٢٦٢٧ #define I386 PIT OCW COUNTER 0 0x0٢٨ #define I386 PIT OCW COUNTER 1 0x40٢٩ #define I386 PIT OCW COUNTER 2 0x80٣٠٣١ extern void i386 pit send command(uint8 t cmd);٣٢ extern void i386 pit send data(uint16 t data,uint8 t counter);٣٣ extern uint8 t i386 pit read data(uint16 t counter);٣٤ extern uint32 t i386 pit set tick count(uint32 t i);٣٥ extern uint32 t i386 pit get tick count();٣٦ extern void i386 pit start counter(uint32 t freq,uint8 t counter,

uint8 t mode);٣٧ extern void cdecl i386 pit init();٣٨ extern bool cdecl i386 pit is initialized();

Example ٦.١٤: hal/pit.cpp: PIT Implementa on

١ static volatile uint32 t pit ticks = 0;٢ static bool pit is init = false;٣٤ void cdecl i386 pit irq();٥٦ void i386 pit send command(uint8 t cmd) {٧ outportb(I386 PIT COMMAND REG,cmd);٨ }٩١٠ void i386 pit send data(uint16 t data,uint8 t counter) {١١ uint8 t port;١٢١٣ if (counter == I386 PIT OCW COUNTER 0)١٤ port = I386 PIT COUNTER0 REG;١٥ else if ( counter == I386 PIT OCW COUNTER 1)١٦ port = I386 PIT COUNTER1 REG;١٧ else١٨ port = I386 PIT COUNTER2 REG;١٩

١٥٠

Page 169: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

٢٠ outportb(port,uint8 t(data));٢١ }٢٢٢٣ uint8 t i386 pit read data(uint16 t counter) {٢٤ uint8 t port;٢٥٢٦ if (counter == I386 PIT OCW COUNTER 0)٢٧ port = I386 PIT COUNTER0 REG;٢٨ else if ( counter == I386 PIT OCW COUNTER 1)٢٩ port = I386 PIT COUNTER1 REG;٣٠ else٣١ port = I386 PIT COUNTER2 REG;٣٢٣٣ return inportb(port);٣٤ }٣٥٣٦ uint32 t i386 pit set tick count(uint32 t i) {٣٧ uint32 t prev = pit ticks;٣٨ pit ticks = i;٣٩ return prev;٤٠ }٤١٤٢ uint32 t i386 pit get tick count() {٤٣ return pit ticks;٤٤ }٤٥٤٦ void i386 pit start counter(uint32 t freq,uint8 t counter,uint8 t

mode) {٤٧ if (freq == 0)٤٨ return;٤٩٥٠ uint16 t divisor = uint16 t(1193181/uint16 t(freq));٥١٥٢ /∗ send operation command ∗/٥٣ uint8 t ocw = 0;٥٤٥٥ ocw = (ocw & ˜I386 PIT OCW MASK MODE) | mode;٥٦ ocw = (ocw & ˜I386 PIT OCW MASK RL) | I386 PIT OCW RL DATA;٥٧ ocw = (ocw & ˜I386 PIT OCW MASK COUNTER) | counter;٥٨٥٩ i386 pit send command(ocw);

١٥١

Page 170: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

٦٠٦١ /∗ set frequency rate ∗/٦٢ i386 pit send data(divisor & 0xff,0);٦٣ i386 pit send data((divisor >> 8) & 0xff,0);٦٤٦٥ /∗ reset ticks count ∗/٦٦ pit ticks = 0;٦٧ }٦٨٦٩ void cdecl i386 pit init() {٧٠ set vector(32,i386 pit irq);٧١ pit is init = true;٧٢ }٧٣٧٤ bool cdecl i386 pit is initialized() {٧٥ return pit is init;٧٦ }٧٧٧٨ void cdecl i386 pit irq() {٧٩٨٠ asm {٨١ add esp,12٨٢ pushad٨٣ }٨٤٨٥ pit ticks++;٨٦٨٧ int done(0);٨٨٨٩ asm {٩٠ popad٩١ iretd٩٢ }٩٣ }

اجلديدة HAL واجهة .٣.٤.٦HAL لطبقة العامة الواجهة يوضح ٦.١٥ املثال

Example ٦.١٥: New HAL Interface

١٥٢

Page 171: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

١ extern int cdecl hal init();٢ extern int cdecl hal close();٣ extern void cdecl gen interrupt(int);٤ extern void cdecl int done(unsigned int n);٥ extern void cdecl sound(unsigned int f);٦ extern unsigned char cdecl inportb(unsigned short port num);٧ extern void cdecl outportb(unsigned short port num,unsigned char

value);٨ extern void cdecl enable irq();٩ extern void cdecl disable irq();١٠ extern void cdecl set vector(unsigned int int num,void ( cdecl far &

vect)());١١ extern void ( cdecl far ∗ cdecl get vector(unsigned int int num))();١٢ extern const char∗ cdecl get cpu vendor();١٣ extern int cdecl get tick count();

Example ٦.١٦: New HAL Impelmenta on

١ int cdecl hal init() {٢ i386 cpu init();٣ i386 pic init(0x20,0x28);٤ i386 pit init();٥ i386 pit start counter(100,I386 PIT OCW COUNTER 0,

I386 PIT OCW MODE SQUAREWAVEGEN);٦٧ /∗ enable irq ∗/٨ enable irq();٩١٠ return 0;١١ }١٢١٣ int cdecl hal close() {١٤ i386 cpu close();١٥ return 0;١٦ }١٧١٨ void cdecl gen interrupt(int n) {١٩ #ifdef MSC VER٢٠ asm {٢١ mov al, byte ptr [n]

١٥٣

Page 172: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

٢٢ mov byte ptr [address+1], al٢٣ jmp address٢٤٢٥ address:٢٦ int 0 // will execute int n.٢٧ }٢٨ #endif٢٩ }٣٠٣١٣٢ void cdecl int done(unsigned int n) {٣٣ if (n > 16)٣٤ return;٣٥٣٦ if (n > 7)٣٧ /∗ send EOI to pic2 ∗/٣٨ i386 pic send command(I386 PIC OCW2 MASK EOI,1);٣٩٤٠ /∗ also send toi the primary pic ∗/٤١ i386 pic send command(I386 PIC OCW2 MASK EOI,0);٤٢ }٤٣٤٤ void cdecl sound(unsigned int f) {٤٥ outportb(0x61,3 | unsigned char(f << 2));٤٦ }٤٧٤٨ unsigned char cdecl inportb(unsigned short port num) {٤٩ #ifdef MSC VER٥٠ asm {٥١ mov dx,word ptr [port num]٥٢ in al,dx٥٣ mov byte ptr [port num],al٥٤ }٥٥ #endif٥٦٥٧ return unsigned char(port num);٥٨ }٥٩٦٠٦١ void cdecl outportb(unsigned short port num,unsigned char value) {٦٢ #ifdef MSC VER

١٥٤

Page 173: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

٦٣ asm {٦٤ mov al,byte ptr[value]٦٥ mov dx,word ptr[port num]٦٦ out dx,al٦٧ }٦٨ #endif٦٩ }٧٠٧١ void cdecl enable irq() {٧٢ #ifdef MSC VER٧٣ asm sti٧٤ #endif٧٥ }٧٦٧٧ void cdecl disable irq() {٧٨ #ifdef MSC VER٧٩ asm cli٨٠ #endif٨١ }٨٢٨٣ void cdecl set vector(unsigned int int num,void ( cdecl far & vect)

()) {٨٤ i386 idt install ir(int num,I386 IDT 32BIT |I386 IDT PRESENT /∗

10001110∗/,0x8 /∗code desc∗/,vect);٨٥ }٨٦٨٧ void ( cdecl far ∗ cdecl get vector(unsigned int int num))() {٨٨ idt desc∗ desc = i386 get idt ir(int num);٨٩٩٠ if (desc == 0)٩١ return 0;٩٢٩٣ uint32 t address = desc−>base low | (desc−>base high << 16);٩٤٩٥ I386 IRQ HANDLER irq = (I386 IRQ HANDLER) address;٩٦ return irq;٩٧ }٩٨٩٩ const char∗ cdecl get cpu vendor() {

١٠٠ return i386 cpu vendor();١٠١ }

١٥٥

Page 174: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

١٠٢١٠٣ int cdecl get tick count() {١٠٤ return i386 pit get tick count();١٠٥ }

Example ٦.١٧: kernel/main.cpp

١ int cdecl main()٢ {٣ hal init();٤ enable irq();٥٦ set vector(0,(void ( cdecl &)(void))divide by zero fault);٧ set vector(1,(void ( cdecl &)(void))single step trap);٨ set vector(2,(void ( cdecl &)(void))nmi trap);٩ set vector(3,(void ( cdecl &)(void))breakpoint trap);١٠ set vector(4,(void ( cdecl &)(void))overflow trap);١١ set vector(5,(void ( cdecl &)(void))bounds check fault);١٢ set vector(6,(void ( cdecl &)(void))invalid opcode fault);١٣ set vector(7,(void ( cdecl &)(void))no device fault);١٤ set vector(8,(void ( cdecl &)(void))double fault abort);١٥ set vector(10,(void ( cdecl &)(void))invalid tss fault);١٦ set vector(11,(void ( cdecl &)(void))no segment fault);١٧ set vector(12,(void ( cdecl &)(void))stack fault);١٨ set vector(13,(void ( cdecl &)(void))general protection fault);١٩ set vector(14,(void ( cdecl &)(void))page fault);٢٠ set vector(16,(void ( cdecl &)(void))fpu fault);٢١ set vector(17,(void ( cdecl &)(void))alignment check fault);٢٢ set vector(18,(void ( cdecl &)(void))machine check abort);٢٣ set vector(19,(void ( cdecl &)(void))simd fpu fault);٢٤٢٥ ...

Example ٦.١٨: kernel/excep on.h

١ /∗ Execption Handler ∗/٢٣ /∗ Divide by zero ∗/٤ extern void cdecl divide by zero fault(uint32 t cs,uint32 t eip,

uint32 t eflags);

١٥٦

Page 175: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

٥٦ /∗ Single step ∗/٧ extern void cdecl single step trap(uint32 t cs,uint32 t eip,uint32 t

eflags);٨٩ /∗ No Maskable interrupt trap ∗/١٠ extern void cdecl nmi trap(uint32 t cs,uint32 t eip,uint32 t eflags)

;١١١٢ /∗ Breakpoint hit ∗/١٣ extern void cdecl breakpoint trap(uint32 t cs,uint32 t eip,uint32 t

eflags);١٤١٥ /∗ Overflow trap ∗/١٦ extern void cdecl overflow trap(uint32 t cs,uint32 t eip,uint32 t

eflags);١٧١٨ /∗ Bounds check ∗/١٩ extern void cdecl bounds check fault(uint32 t cs,uint32 t eip,

uint32 t eflags);٢٠٢١ /∗ invalid opcode instruction ∗/٢٢ extern void cdecl invalid opcode fault(uint32 t cs,uint32 t eip,

uint32 t eflags);٢٣٢٤ /∗ Device not available ∗/٢٥ extern void cdecl no device fault(uint32 t cs,uint32 t eip,uint32 t

eflags);٢٦٢٧ /∗ Double Fault ∗/٢٨ extern void cdecl double fault abort(uint32 t cs,uint32 t err,

uint32 t eip,uint32 t eflags);٢٩٣٠ /∗ Invalid TSS ∗/٣١ extern void cdecl invalid tss fault(uint32 t cs,uint32 t err,

uint32 t eip,uint32 t eflags);٣٢٣٣ /∗ Segment not present ∗/٣٤ extern void cdecl no segment fault(uint32 t cs,uint32 t err,uint32 t

eip,uint32 t eflags);٣٥

١٥٧

Page 176: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

٣٦ /∗ Stack fault ∗/٣٧ extern void cdecl stack fault(uint32 t cs,uint32 t err,uint32 t eip,

uint32 t eflags);٣٨٣٩ /∗ General Protection Fault ∗/٤٠ extern void cdecl general protection fault(uint32 t cs,uint32 t err,

uint32 t eip,uint32 t eflags);٤١٤٢ /∗ Page Fault ∗/٤٣ extern void cdecl page fault(uint32 t cs,uint32 t err,uint32 t eip,

uint32 t eflags);٤٤٤٥ /∗ FPU error ∗/٤٦ extern void cdecl fpu fault(uint32 t cs,uint32 t eip,uint32 t eflags

);٤٧٤٨ /∗ Alignment Check ∗/٤٩ extern void cdecl alignment check fault(uint32 t cs,uint32 t err,

uint32 t eip,uint32 t eflags);٥٠٥١ /∗ Machine Check ∗/٥٢ extern void cdecl machine check abort(uint32 t cs,uint32 t eip,

uint32 t eflags);٥٣٥٤ /∗ FPU Single Instruction Multiple Data (SIMD) error ∗/٥٥ extern void cdecl simd fpu fault(uint32 t cs,uint32 t eip,uint32 t

eflags);

Example ٦.١٩: kernel/excep on.cpp

١ /∗ Divide by zero ∗/٢ void cdecl divide by zero fault(uint32 t cs,uint32 t eip,uint32 t

eflags) {٣ kernel panic("Divide by 0");٤ for (;;);٥ }

Example ٦.٢٠: kernel/panic.cpp١ void cdecl kernel panic(const char∗ msg,...) {

١٥٨

Page 177: برمجة وتصميم نظام تشغيل

HAL طبقة توسعة .٤.٦

٢٣ disable irq();٤٥ va list args;٦ va start(args,msg);٧ /∗ missing ∗/٨ va end(args);٩١٠ char∗ panic = "\nSorry, eqraOS has encountered a problem and has

been shutdown.\n\n";١١١٢ kclear(0x1f);١٣ kgoto xy(0,0);١٤ kset color(0x1f);١٥ kputs(panic);١٦ kprintf("∗∗∗ STOP: %s",msg);١٧١٨ /∗ hang ∗/١٩ for (;;) ;٢٠ }

HAL طبقة توسعة بعد النظام واجهة :.٥.٦ شكل

١٥٩

Page 178: برمجة وتصميم نظام تشغيل

Interrupts املقاطعات .٦

اإلفتراضية املقاطعات ختدمي دالة :.٦.٦ شكل

١٦٠

Page 179: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧املخزن ميثل حيث إدارا التشغيل نظام على جيب اليت املوارد أهم من (RAM) الرئيسية احلاسب ذاكرة تعتربالثانوية الذواكر أحد اىل املباشر الوصول للمعاجل ميكن وال ، بتنفيذها ويقوم األوامر منه املعاجل يقرأ الذيدور يأيت وهنا للمعاجل. متاحة تصبح حىت الرئيسية الذاكرة اىل والربامج البيانات حتميل يتم وإمنا مباشرةمستخدم هو ما على ويتعرف الذاكرة أجزاء الربنامج هذا يراقب حيث (MemoryManager) الذاكرة مديربعملية يقوم أن املمكن من كذلك ، وحتريرها الذاكرة مقاطع حلجز دواال يوفر كما مستخدم غري هو وماالذاكرة مدير دراسة سيتم الفصل هذا أفضل.ويف واستغالل مساحة لتوفري وذلك الذاكرة ملقاطع جتزئة إعادةوعرض للذاكرة الكلية املساحة حلساب الطرق بعض عرض سيتم كذلك برجمتهم وكيفية والتخيلية الفيزيائية

النظام. قبل من املستخدمة الذاكرة مقاطع

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧RAM الرئيسية الذاكرة شرحية بداخل توجد ذاكرية كتلة هي (Physical Memoery) الفيزيائية الذاكرةحلفظ والترانزستورات املكثفات تستخدم (فمثال الذاكرة نوع حبسب فيها البيانات حفظ طريقة وختتلفمبتحكم تسمى األم اللوحة داخل شرحية بواسطة الكتلة هذه يف التحكم ويتم ، (DRAM ذاكرة يف البتاتالذاكرة بداخل املكثفات إنعاش بعملية املتحكم هذا يقوم حيث (North Bridge) الشمايل باجلسر أو الذاكرةبتات ٨ أول من بداية الفيزيائية الذاكرة املتحكم هذا يعنون كذلك الضياع من حمتوياا على حتافظ حىتمن الذاكرة عنونة تتم وهكذا ، التالية بتات للثمانية 0x1 العنوان ويليها 0x0 الفيزيائي العنوان تأخذ حيثمن العنوان بقراءة يقوم املتحكم فان الذاكرة متحكم اىل كتابة أو قراءة طلب وصول وعند املتحكم. قبلمن أكثر توجد ما غالبا حيث الصحيح املكان اىل وتوجيهه العنوان تفسري من يتمكن وبالتايل العناوين مسارفيزيائية عناوين مساحة الذاكرة شرائح كل يف العناوين كل جمموعة وتشكل احلاسب. بداخل رام شرحيةيف وذلك فعليا مستخدمة غري العناوين هذه من عددا هناك يكون قد .لكن (Physical Address Space)احلالة هذه ويف الثاين املنفذ يف ذاكرة شرحية وجود وعدم والثالث األول املنفذ يف ذاكرة شرحية وجود حالةحقيقة موجودة غري عناوين هي 2n-1 اىل n-1 من العناوين فان n هي ذاكرة شرحية كل حجم كان اذامن القراءة عند بينما النظام على شيء تؤثر ال الفتحات هذه يف الكتابة وعملية ، (Holes) فتحات وتسمىصحيحة. غري أا من الرغم على قرائتها يتم اليت هي البيانات مسار يف املوجودة البيانات فان الفتحات هذهالذاكرة ومناطق الكلي الذاكرة جحم مثل املعلومات من عددا توفري جيب الذاكرة مدير برجمة يف اخلوض وقبلالذاكرة مدير يتمكن حىت وهذا ، فتحات هناك كانت ان املوجودة الفتحات و املستخدمة وغري املستخدمة

املطلوب. النحو على إدارا من

١٦١

Page 180: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

الذاكرة حجم حساب .١.١.٧إقالع بداية ويف ، تعتمد ال واألخرى النظام على تعتمد بعضها الذاكرة حجم حلساب طرق عدة توجدأحد يف حبفظها ويقوم الذاكرة حجم وأخذ الذاكرة متحكم مع بالتخاطب البايوس نظام يقوم احلاسبحجم على احلصول يف دقة األكثر هي الطريقة هذه وتعترب الذاكرة. يف البايوس بيانات منطقة يف العناوينالنمط يف تعمل واليت النواة بداخل استدعائها ميكن ال البايوس مقاطعات أن مشكلة تبقى ولكن الذاكرةهذا ومترير عملها يف النواة تبدأ أن قبل الذاكرة حجم جبلب اخلاصة املقاطعة استخدام سيتم لذلك املحمي.

النواة. اىل املتعدد اإلقالع معلومات تسمى و االخرى املعلومات بعض مع احلجم

int 0x12 املقاطعةال لكنها (0x413 العنوان من (بالتحديد البايوس بيانات منطقة من الذاكرة حجم جبلب املقاطعة هذا تقوممن أكرب لديك الذاكرة كانت اذا وبالتايل أقصى كحد كيلوبايت ٦٤ حجم جتلب ألا نظرا حاليا تستخدمكيفية يوضح ٧.١ واملثال االن. املقاطعة هذه تستخدم ال لذلك ، الصحيح احلجم جتلب ال فاا احلجم هذا

استخدامهاExample ٧.١: Using int 0x12 to get size of memory

١٢ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٣ ; get conventional memory size٤ ; ret ax=KB size from address 0٥ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٦ get conventional memory size:٧ int 0x12٨ ret

0xe801 الدالة 0x15 املقاطعةبالقيم: وتعود ، الغرض هلذا دائما وتستخدم الصحيح احلجم املقاطعة هذه جتلب

املقاطعة. عمل جناح حالة يف صفر :CF العلم •.16 MB اىل 1 MB العنوان من الكيلوبايتات عدد :EAX املسجل •

الحقا ضرا وجيب ،16MB العنوان من بدئا كيلوبايت ٦٤ من املكونة الوحدات عدد :EBX املسجل •الكيلوبايتات. عدد اىل حتويلها يتم حىت ٦٤ بالعدد

١٦٢

Page 181: برمجة وتصميم نظام تشغيل

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧

٧.٢ واملثال .EBX و EAX املسجلني من بدال EDX و ECX املسجلني البايوس يستخدم األنظمة بعض ويفاملقاطعة. هذه استخدام كيفية يوضح

Example ٧.٢: Using int 0x15 Func on 0xe801 to get size of memory

١٢ ; −−−−−−−−−−−−−−−−−−−−−−−−−−٣ ; get memory size:٤ ; get a total memory size.except the first MB.٥ ; return:٦ ; ax=KB between 1MB and 16MB٧ ; bx=number of 64K blocks above 16MB٨ ; bx=0 and ax= −1 on error٩ ; −−−−−−−−−−−−−−−−−−−−−−−−−−١٠ get memory size:١١١٢ push ecx١٣ push edx١٤ xor ecx,ecx١٥ xor edx,edx١٦١٧ mov ax,0x801 ; BIOS get memory size١٨ int 0x15١٩٢٠ jc .error٢١ cmp ah,0x86٢٢ je .error٢٣ cmp ah,0x80٢٤ je .error٢٥٢٦ jcxz .use eax٢٧٢٨ mov ax,cx٢٩ mov bx,dx٣٠٣١ .use eax:٣٢ pop edx٣٣ pop ecx٣٤ ret٣٥٣٦ .error:

١٦٣

Page 182: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

٣٧ mov ax,−1٣٨ mov bx,0٣٩ pop edx٤٠ pop ecx٤١ ret

جيب الدالة هذه استخدام عند لذلك ، الذاكرة من بايت ميجا أول حتسب ال املقاطعة هذا أن مالحظة وجيدراملسجل ضرب جيب كذلك ، (ax مسجل يف تكون (الزيادة كيلوبايت ١٠٢٤ مبقدار الكلي احلجم زيادةيعين وهذا ، كيلوبايت ٦٤ من املكونة الوحدات عدد هي الدالة تضعها اليت القيمة الن نظرا ٦٤ بالعدد bx

كيلوبايت. 128 وتساوي 2*64 تكون أن جيب النتيجة فان مثال ٢ هو العدد كان ان

Memory Map الذاكرة خريطة .٢.١.٧خريطة فقرة (راجع األغراض لبعض حمجوز منها عددا أن اىل االنتباه جيب الذاكرة حجم حساب مت أن بعدالذاكرة مقاطع لنا وحتدد تعرف اليت الذاكرة خريطة دور يأيت وهنا احلاسب) إقالع فصل يف الذاكرةالدالة int 0x15 البايوس مقاطعة بواسطة الذاكرة خريطة على احلصول وميكن مستخدمة. والغري املستخدمة

التالية: املدخالت تأخذ اليت e820

املقاطعة. عمل جناح حالة يف صفر :CF العلم •رقم فان خطأ حدوث حالة ويف ،ASCII بترميز SMAP وتساوي 0x534d4150 القيمة :eax املسجل •

.ah املسجل يف سيحفظ اخلطأاإلنتهاء. حالة يف صفر أو التايل السجل عنوان :ebx املسجل •

بالبايت. املقطع طول :ecx املسجل •املقطع. واصفة سجل :es:di املسجالن •

باملخرجات: وتعود.0xe820 وهي الدالة رقم :eax املسجل •

البداية. عنوان :ebx املسجل •األقل. على بايت ٢٠ وتساوي (buffer) املؤقتة الذاكرة حجم :ecx املسجل •

.ASCII بترميز SMAP وتساوي 0x534d4150 القيمة :edx املسجل •النتائج. ا ستحفظ اليت buffer الذاكرة عنوان :es:di املسجالن •

١٦٤

Page 183: برمجة وتصميم نظام تشغيل

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧

استدعاء تكرار ويتم بايت ٢٤ بطول وهو سجل بأول ملئها يتم Buffer الذاكرة فان املقاطعة تنفيذ وبعد.٧.٣ املثال يوضحها سجل كل وحمتويات للصفر. مساوية ebx املسجل قيمة تكون أن اىل املقاطعة

Example ٧.٣: Memory Map Entry Structure

١٢ ; Memory Map Entry Structure٣ struc memory map entry٤ .base addr resq 1٥ .length resq 1٦ .type resd 1٧ .acpi null resd 1٨ endstruc

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

متوفرا. املقطع أن على تدل :1 القيمة •حمجوزا. املقطع أن على تدل :2 القيمة •

النظام. يستخدمها لكي حمجوزة منطقة وهي ACPI Reclaim Memory :3 القيمة •للنظام. حمجوزة منقطة هي كذلك ACPI NVS Memory:4 القيمة •موجود. غري أو معرف غري املقطع أن على تدل األخرى القيم بقية •

الحقا. الذاكرة مدير منها يستفيد لكي الذاكرة مقاطع جلب كيفية يوضح ٧.٤ واملثالExample ٧.٤: Get Memory Map

١ ; −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢ ; get memory map:٣ ; Input:٤ ; EAX = 0x0000E820٥ ; EBX = continuation value or 0 to start at beginning of map٦ ; ECX = size of buffer for result (Must be >= 20 bytes)٧ ; EDX = 0x534D4150h ('SMAP')٨ ; ES:DI = Buffer for result٩ ;١٠ ; Return:١١ ; CF = clear if successful

١٦٥

Page 184: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

١٢ ; EAX = 0x534D4150h ('SMAP')١٣ ; EBX = offset of next entry to copy from or 0 if done١٤ ; ECX = actual length returned in bytes١٥ ; ES:DI = buffer filled١٦ ; If error, AH containes error code١٧ ; −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−١٨ get memory map:١٩٢٠ pushad٢١ xor ebx,ebx٢٢ xor bp,bp٢٣ mov edx,'PAMS' ; 0x534D4150٢٤ mov eax,0xe820٢٥ mov ecx,24٢٦ int 0x15 ; BIOS get memory map.٢٧٢٨ jc .error٢٩ cmp eax,'PAMS'٣٠ jne .error٣١٣٢ test ebx,ebx٣٣ je .error٣٤٣٥ jmp .start٣٦٣٧ .next entry:٣٨ mov edx,'PAMS' ; 0x534D4150٣٩ mov eax,0xe820٤٠ mov ecx,24٤١ int 0x15 ; BIOS get memory map.٤٢٤٣ .start:٤٤ jcxz .skip entry٤٥٤٦ mov ecx,[es:di + memory map entry.length]٤٧ test ecx,ecx٤٨ jne short .good entry٤٩ mov ecx,[es:di + memory map entry.length+4]٥٠ jecxz .skip entry٥١٥٢ .good entry:

١٦٦

Page 185: برمجة وتصميم نظام تشغيل

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧

٥٣ inc bp٥٤ add di,24٥٥٥٦ .skip entry:٥٧ cmp ebx,0٥٨ jne .next entry٥٩ jmp .done٦٠٦١ .error:٦٢ stc ; set carry flag٦٣٦٤ .done:٦٥ popad٦٦ ret٦٧٦٨ endstruc

املتعدد اإلقالع مواصفات .٣.١.٧مواصفات عرب وذلك التشغيل أنظمة ملختلف املتعدد اإلقالع تدعم (Bootloader) النظام حممالت من العديدبيانات مترير املقياس هذا ضمن ومن النظام. نواة حتميل عند النظام حممل ا يلتزم أن جيب حمددة ومقاييسمترير هو حاليا يهمنا وما التشغيل. نظام نواة اىل النظام حممل من (Mul boot Informa on) املتعدد اإلقالعالذاكرة خريطة على بناءا إدارا من الذاكرة مدير يتمكن حىت النواة اىل الذاكرة وخريطة الذاكرة حجموخمطط الذاكرة حجم لتحديد مبسطة طريقة توجد ال النواة عمل أثناء أنه سابقا ذكرنا حيث وحجمها.نواة اىل النتائج مترير مث ومن خدماته من واإلستفادة البايوس مقاطعات اىل اللجوء مت لذلك ، فيها املقاطع

قياسية١. هيكلة طريق عن النظام

احلاسب حالةحتميل عند أنه على تنص ،وهي (Machine State) للحاسب معينة حالة توفر أيضا املقاييس هذه ضمن من

كااليت: حمددة قيما تأخذ أن جيب املسجالت بعض فان تشغيل نظام أي نواةيدعم النظام حممل بأن النظام لنواة إشارة وهي 0x2BADB002 الرقم يأخذ أن جيب :eax املسجل •

املتعدد. اإلقالعاملتعدد. اإلقالع هيكلة بداية عنوان على حتتوي :ebx املسجل •

املتعدد. اإلقالع دعم عند الحقا سيفيد قياسية يكلة اإللتزام أن إال طريقة بأي البيانات هذه مترير ميكن أنه من الرغم ١على

١٦٧

Page 186: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

بالعنوان وانتهاءا 0x0 العنوان من بدءا قراءة/تنفيذ بت ٣٢ تكون أن جيب الشفرة واصفة :cs املسجل •.0xffffffff

0x0 العنوان من وتبدأ بت ٣٢ والكتابة القراءة مقاطع تكون أن جيب :ds,es,fs,gs,ss املسجالت •.0xffffffff بالعنوان وتنتهي

.a20 بوابة تفعيل جيب •

(تعطيل يعطل أن جيب ٣١ والبت املحمي) النمط (تفعيل يفعل أن جيب 0 البت :cr0 التحكم مسجل •التصفيح).

املتعدد اإلقالع معلوماتebx املسجل يف عنواا حفظ ويتم ، النواة اىل متريرها جيب اليت اهلياكل أهم من املتعدد معلومات هيكلة تعترباإلقالع ندعم ال املرحلة هذه يف أننا بسبب لكن ، النواة اىل اهليكلة مترير ا يتم اليت القياسية الطريقة وهييوضح ٧.٥ واملثال .(stack) املكدس اىل عنواا كدفع كان شكل بأي البيانات هذه منرر أن فيمكن املتعدد

املتعدد. اإلقالع معلومات هيكلةExample ٧.٥: Mul boot Inforam on Structure

١ boot info:٢٣ istruc multiboot info٤ at multiboot info.flags, dd 0٥ at multiboot info.mem low, dd 0٦ at multiboot info.mem high, dd 0٧ at multiboot info.boot device, dd 0٨ at multiboot info.cmd line, dd 0٩ at multiboot info.mods count, dd 0١٠ at multiboot info.mods addr, dd 0١١ at multiboot info.sym0, dd 0١٢ at multiboot info.sym1, dd 0١٣ at multiboot info.sym2, dd 0١٤ at multiboot info.mmap length, dd 0١٥ at multiboot info.mmap addr, dd 0١٦ at multiboot info.drives length, dd 0١٧ at multiboot info.drives addr, dd 0١٨ at multiboot info.config table, dd 0١٩ at multiboot info.bootloader name, dd 0٢٠ at multiboot info.apm table, dd 0

١٦٨

Page 187: برمجة وتصميم نظام تشغيل

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧

٢١ at multiboot info.vbe control info, dd 0٢٢ at multiboot info.vbe mode info, dw 0٢٣ at multiboot info.vbe interface seg, dw 0٢٤ at multiboot info.vbe interface off, dw 0٢٥ at multiboot info.vbe interface len, dw 0٢٦ iend

من املتعدد اإلقالع معلومات هيكلة يف املستخدمة البيانات لتحديد flags املتغري استخدام املقياس وحيددmem high و mem low املتغريات فان ١ هي flags[0] البت قيمة كانت حالة يف فمثال ، املستخدمة غريmem low للمتغريات قيم وضع وسيتم flags املتغري على التركيز يتم لن وهكذا.وحاليا استخدامها ميكناملتغريات وكذلك ، البايوس بواسطة جلبها مت واليت الفيزيائية الذاكرة حجم حتوي واليت mem high والبايوس بواسطة أيضا جلبه مت الذي الذاكرة خمطط بداية عنوان توضح واليت mmap length و mmap addrاإلقالع لدعم النظام حممل من الثانية املرحلة اىل إضافتها مت اليت األوامر يوضح ٧.٦ طوهلا.واملثال وكذلك

التشغيل. نظام نواة اىل وارساهلا املتعدد اإلقالع معلومات حفظ وكيفية املتعدد

Example ٧.٦: snippet from stage2 bootloader

١٢ ...٣ ; when stage2 begin started, BIOS put drive number where stage1 are

loaded from in dl٤ mov [boot info+multiboot info.boot device],dl٥ ...٦٧ ;−−−−−−−−−−−−−−−−٨ ; Get Memory Size٩ ;−−−−−−−−−−−−−−−−١٠ xor eax,eax١١ xor ebx,ebx١٢ call get memory size١٣١٤ mov [boot info+multiboot info.mem low],ax١٥ mov [boot info+multiboot info.mem high],bx١٦١٧ ...١٨١٩ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٠ ; Pass MultiBoot Info to the Kernel٢١ ;−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−٢٢ mov eax,0x2badb002

١٦٩

Page 188: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

٢٣ mov ebx,0٢٤ mov edx,[kernel size]٢٥ push dword boot info٢٦٢٧ call ebp ; Call Kernel

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

اهليكلة. هلذه النواة استقبال كيفية يوضح ٧.٧ ومقروء.واملثالExample ٧.٧: Kernel Entry١٢ void cdecl kernel entry (multiboot info∗ boot info)٣ {٤٥ #ifdef i386٦ asm {٧ cli٨٩ mov ax, 10h // select data descriptor in GDT.١٠ mov ds, ax١١ mov es, ax١٢ mov fs, ax١٣ mov gs, ax١٤ }١٥ #endif١٦١٧ // Execute global constructors١٨ init ctor();١٩٢٠ // Call kernel entry point٢١ main(boot info);٢٢٢٣ // Cleanup all dynamic dtors٢٤ exit();٢٥٢٦ #ifdef i386٢٧ asm {٢٨ cli٢٩ hlt

١٧٠

Page 189: برمجة وتصميم نظام تشغيل

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧

٣٠ }٣١ #endif٣٢٣٣ for(;;);٣٤ }

الفيزيائية الذاكرة مدير .٤.١.٧

Example ٧.٨: Physical Memory Manager Interface

١٢ #ifndef PMM H٣ #define PMM H٤٥ #include <stdint.h>٦٧ extern void pmm init(size t size,uint32 t base);٨ extern void pmm init region(uint32 t base,size t size);٩ extern void pmm deinit region(uint32 t base,size t size);١٠ extern void∗ pmm alloc();١١ extern void∗ pmm allocs(size t size);١٢ extern void pmm dealloc(void∗);١٣ extern void pmm deallocs(void∗,size t);١٤ extern size t pmm get mem size();١٥ extern uint32 t pmm get block count();١٦ extern uint32 t pmm get used block count();١٧ extern uint32 t pmm get free block count();١٨ extern uint32 t pmm get block size();١٩ extern void pmm enable paging(bool);٢٠ extern bool pmm is paging();٢١ extern void pmm load PDBR(uint32 t);٢٢ extern uint32 t pmm get PDBR();٢٣٢٤ #endif // PMM H

Example ٧.٩: Physical Memory Manager Implemeta on

١

١٧١

Page 190: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

٢ #include <string.h>٣ #include "pmm.h"٤ #include "kdisplay.h"٥٦ #define PMM BLOCK PER BYTE 8٧ #define PMM PAGE SIZE 4096٨ #define PMM BLOCK SIZE PMM PAGE SIZE٩ #define PMM BLOCK ALIGN PMM BLOCK SIZE١٠١١ static uint32 t pmm mem size = 0;١٢ static uint32 t pmm max blocks = 0;١٣ static uint32 t pmm used blocks = 0;١٤ static uint32 t∗ pmm mmap = 0;١٥١٦ inline void mmap set(int bit) {١٧ pmm mmap[bit/32] = pmm mmap[bit/32] | (1 << (bit%32)) ;١٨ }١٩٢٠ inline void mmap unset(int bit) {٢١ pmm mmap[bit/32] = pmm mmap[bit/32] & ˜(1 << (bit%32));٢٢ }٢٣٢٤ inline bool mmap test(int bit) {٢٥ return pmm mmap[bit/32] & (1 << (bit%32));٢٦ }٢٧٢٨ int mmap find first() {٢٩٣٠ for (uint32 t i=0;i<pmm get free block count()/32;++i) {٣١ if ( pmm mmap[i] != 0xffffffff) {٣٢ for (int j=0;j<32;++j) {٣٣ int bit = 1 << j;٣٤ if (!( pmm mmap[i] & bit))٣٥ return i∗32+j;٣٦ }٣٧ }٣٨ }٣٩٤٠ return −1;٤١ }٤٢

١٧٢

Page 191: برمجة وتصميم نظام تشغيل

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧

٤٣ int mmap find squence(size t s) {٤٤ if (s == 0)٤٥ return −1;٤٦٤٧ if (s == 1)٤٨ return mmap find first();٤٩٥٠ for (uint32 t i=0;i<pmm get free block count()/32;++i) {٥١ if ( pmm mmap[i] != 0xffffffff) {٥٢ for (int j=0;j<32;++j) {٥٣ int bit = 1 << j;٥٤ if (!( pmm mmap[i] & bit)) {٥٥٥٦ int start bit = i∗32 + bit;٥٧ uint32 t free bit = 0;٥٨٥٩ for (uint32 t count=0;count<=s;++count) {٦٠ if (!(mmap test(start bit+count)))٦١ free bit++;٦٢٦٣ if (free bit == s)٦٤ return i∗32+j;٦٥ }٦٦ }٦٧ }٦٨ }٦٩ }٧٠٧١ return −1;٧٢ }٧٣٧٤٧٥ void pmm init(size t size,uint32 t mmap base) {٧٦ pmm mem size = size;٧٧ pmm mmap = (uint32 t∗)mmap base;٧٨ pmm max blocks = pmm mem size∗1024 / PMM BLOCK SIZE;٧٩ pmm used blocks = pmm max blocks; // all memory used by default٨٠٨١ memset( pmm mmap,0xf, pmm max blocks/PMM BLOCK PER BYTE);٨٢ }٨٣

١٧٣

Page 192: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

٨٤ void pmm init region(uint32 t base,size t size) {٨٥ int align = base/PMM BLOCK SIZE;٨٦ int blocks = size/PMM BLOCK SIZE;٨٧٨٨ for (;blocks >=0;blocks−−) {٨٩ mmap unset(align++);٩٠ pmm used blocks−−;٩١ }٩٢٩٣ mmap set(0);٩٤ }٩٥٩٦ void pmm deinit region(uint32 t base,size t size) {٩٧ int align = base/PMM BLOCK SIZE;٩٨ int blocks = size/PMM BLOCK SIZE;٩٩

١٠٠ for (;blocks >=0;blocks−−) {١٠١ mmap set(align++);١٠٢ pmm used blocks++;١٠٣ }١٠٤ }١٠٥١٠٦ void∗ pmm alloc() {١٠٧ if (pmm get free block count() <= 0)١٠٨ return 0;١٠٩١١٠ int block = mmap find first();١١١١١٢ if (block == −1)١١٣ return 0;١١٤١١٥ mmap set(block);١١٦١١٧ uint32 t addr = block ∗ PMM BLOCK SIZE;١١٨ pmm used blocks++;١١٩١٢٠ return (void∗) addr;١٢١ }١٢٢١٢٣ void∗ pmm allocs(size t s) {١٢٤ if (pmm get free block count() <= s)

١٧٤

Page 193: برمجة وتصميم نظام تشغيل

Physical Memory Management الفيزيائية الذاكرة إدارة .١.٧

١٢٥ return 0;١٢٦١٢٧ int block = mmap find squence(s);١٢٨١٢٩ if (block == −1)١٣٠ return 0;١٣١١٣٢ for (uint32 t i=0;i<s;++i)١٣٣ mmap set(block+i);١٣٤١٣٥ uint32 t addr = block ∗ PMM BLOCK SIZE;١٣٦ pmm used blocks += s;١٣٧١٣٨ return (void∗) addr;١٣٩ }١٤٠١٤١ void pmm dealloc(void∗ p) {١٤٢ uint32 t addr = (uint32 t)p;١٤٣ int block = addr / PMM BLOCK SIZE;١٤٤ mmap unset(block);١٤٥ pmm used blocks−−;١٤٦ }١٤٧١٤٨ void pmm deallocs(void∗ p,size t s) {١٤٩ uint32 t addr = (uint32 t)p;١٥٠ int block = addr / PMM BLOCK SIZE;١٥١١٥٢ for (uint32 t i=0;i<s;++i)١٥٣ mmap unset(block+i);١٥٤١٥٥ pmm used blocks −= s;١٥٦ }١٥٧١٥٨ size t pmm get mem size() {١٥٩ return pmm mem size;١٦٠ }١٦١١٦٢ uint32 t pmm get block count() {١٦٣ return pmm max blocks;١٦٤ }١٦٥

١٧٥

Page 194: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

١٦٦ uint32 t pmm get used block count() {١٦٧ return pmm used blocks;١٦٨ }١٦٩١٧٠ uint32 t pmm get free block count() {١٧١ return pmm max blocks − pmm used blocks;١٧٢ }١٧٣١٧٤ uint32 t pmm get block size() {١٧٥ return PMM BLOCK SIZE;١٧٦ }١٧٧١٧٨ void pmm enable paging(bool val) {١٧٩ #ifdef MSC VER١٨٠ asm {١٨١١٨٢ mov eax,cr0١٨٣ cmp [val],1١٨٤ je enable١٨٥ jmp disable١٨٦١٨٧ enable:١٨٨ or eax,0x80000000 // set last bit١٨٩ mov cr0,eax١٩٠ jmp done١٩١١٩٢ disable:١٩٣ and eax,0x7fffffff // unset last bit١٩٤ mov cr0,eax١٩٥١٩٦ done:١٩٧ }١٩٨١٩٩ #endif٢٠٠ }٢٠١٢٠٢ bool pmm is paging() {٢٠٣ uint32 t val = 0;٢٠٤ #ifdef MSC VER٢٠٥ asm {٢٠٦ mov eax,cr0

١٧٦

Page 195: برمجة وتصميم نظام تشغيل

Virtual Memory Management التخيلية الذاكرة إدارة .٢.٧

٢٠٧ mov [val],eax٢٠٨ }٢٠٩٢١٠ if ( val & 0x80000000 )٢١١ false;٢١٢ else٢١٣ true;٢١٤ #endif٢١٥ }٢١٦٢١٧ void pmm load PDBR(uint32 t addr) {٢١٨ #ifdef MSC VER٢١٩ asm {٢٢٠ mov eax,[addr]٢٢١ mov cr3,eax٢٢٢ }٢٢٣ #endif٢٢٤ }٢٢٥٢٢٦ uint32 t pmm get PDBR() {٢٢٧ #ifdef MSC VER٢٢٨ asm {٢٢٩ mov eax,cr3٢٣٠ ret٢٣١ }٢٣٢ #endif٢٣٣ }

Virtual Memory Management التخيلية الذاكرة إدارة .٢.٧

Example ٧.١٠: Virtual Memory Manager Interface

١٢ #ifndef VMM H٣ #define VMM H٤٥ #include <stdint.h>٦٧ #include "vmm pte.h"٨ #include "vmm pde.h"

١٧٧

Page 196: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

٩١٠ #define PTE N 1024١١ #define PDE N 1024١٢١٣ struct page table {١٤ uint32 t pte[PTE N];١٥ };١٦١٧ struct page dir table {١٨ uint32 t pde[PDE N];١٩ };٢٠٢١ extern void vmm init();٢٢ extern bool vmm alloc page(uint32 t∗ e);٢٣ extern void vmm free page(uint32 t∗ e);٢٤ extern bool vmm switch page dir table(page dir table∗);٢٥ extern page dir table∗ vmm get page dir table();٢٦ extern void vmm flush tlb entry(uint32 t addr);٢٧ extern void vmm page table clear(page table∗ pt);٢٨ extern uint32 t vmm vir to page table index(uint32 t addr);٢٩ extern uint32 t∗ vmm page table lookup entry(page table∗ pt,uint32 t

addr);٣٠ extern uint32 t vmm vir to page dir table index(uint32 t addr);٣١ extern void vmm page dir table clear(page dir table∗ pd);٣٢ extern uint32 t∗ vmm page dir table lookup entry(page dir table∗ pd,

uint32 t addr);٣٣٣٤٣٥ #endif // VMM H

Example ٧.١١: Virtual Memory Manager Implemeta on

١٢ #include "vmm.h"٣٤ #include <string.h>٥ #include "vmm.h"٦ #include "pmm.h"٧٨ #define PAGE SIZE 4096

١٧٨

Page 197: برمجة وتصميم نظام تشغيل

Virtual Memory Management التخيلية الذاكرة إدارة .٢.٧

٩ #define PT ADDRESS SPACE SIZE 0x400000١٠ #define PD ADDRESS SPACE SIZE 0x100000000١١١٢ page dir table∗ cur page dir = 0;١٣ uint32 t cur page dir base register = 0;١٤١٥ void vmm init() {١٦ page table∗ pt = (page table∗) pmm alloc();١٧ if (!pt)١٨ return ;١٩٢٠ vmm page table clear(pt);٢١٢٢ for (int i=0, frame =0; i < 1024 ; ++i, frame += 4096) {٢٣ uint32 t page = 0;٢٤ pte add attrib(&page,I386 PTE PRESENT);٢٥ pte set frame(&page,frame);٢٦٢٧ pt−>pte[vmm vir to page table index(frame)] = page;٢٨ }٢٩٣٠ page dir table∗ pd = (page dir table∗) pmm allocs(3);٣١ if (!pd)٣٢ return ;٣٣٣٤ vmm page dir table clear(pd);٣٥٣٦ uint32 t∗ pde = vmm page dir table lookup entry(pd,0);٣٧ pde add attrib(pde,I386 PDE PRESENT);٣٨ pde add attrib(pde,I386 PDE WRITABLE);٣٩ pde set frame(pde,(uint32 t)pt);٤٠٤١ cur page dir base register = (uint32 t) &pd−>pde;٤٢ vmm switch page dir table(pd);٤٣٤٤ pmm enable paging(true);٤٥٤٦ }٤٧٤٨ bool vmm alloc page(uint32 t∗ e) {٤٩ void∗ p = pmm alloc();

١٧٩

Page 198: برمجة وتصميم نظام تشغيل

الذاكرة إدارة .٧

٥٠ if (!p)٥١ return false;٥٢٥٣ pte set frame(e,(uint32 t)p);٥٤ pte add attrib(e,I386 PTE PRESENT);٥٥٥٦ return true;٥٧ }٥٨٥٩ void vmm free page(uint32 t∗ e) {٦٠ void∗ p = (void∗)pte get frame(∗e);٦١٦٢ if (p)٦٣ pmm dealloc(p);٦٤٦٥ pte del attrib(e,I386 PTE PRESENT);٦٦٦٧ }٦٨٦٩٧٠ bool vmm switch page dir table(page dir table∗ pd) {٧١ if (!pd)٧٢ return false;٧٣٧٤ cur page dir = pd;٧٥ pmm load PDBR( cur page dir base register);٧٦ return true;٧٧ }٧٨٧٩ page dir table∗ vmm get page dir table() {٨٠ return cur page dir;٨١ }٨٢٨٣ void vmm flush tlb entry(uint32 t addr) {٨٤ #ifdef MSC VER٨٥ asm {٨٦ cli٨٧ invlpg addr٨٨ sti٨٩ }٩٠ #endif

١٨٠

Page 199: برمجة وتصميم نظام تشغيل

Virtual Memory Management التخيلية الذاكرة إدارة .٢.٧

٩١ }٩٢٩٣ void vmm page table clear(page table∗ pt) {٩٤ if (pt)٩٥ memset(pt,0,sizeof(page table));٩٦ }٩٧٩٨ uint32 t vmm vir to page table index(uint32 t addr) {٩٩ if ( addr >= PT ADDRESS SPACE SIZE )

١٠٠ return 0;١٠١ else١٠٢ return addr / PAGE SIZE;١٠٣ }١٠٤١٠٥ uint32 t∗ vmm page table lookup entry(page table∗ pt,uint32 t addr) {١٠٦ if (pt)١٠٧ return &pt−>pte[vmm vir to page table index(addr)];١٠٨ else١٠٩ return 0;١١٠ }١١١١١٢ uint32 t vmm vir to page dir table index(uint32 t addr) {١١٣ if ( addr >= PD ADDRESS SPACE SIZE )١١٤ return 0;١١٥ else١١٦ return addr / PAGE SIZE;١١٧ }١١٨١١٩ void vmm page dir table clear(page dir table∗ pd) {١٢٠ if (pd)١٢١ memset(pd,0,sizeof(page dir table));١٢٢ }١٢٣١٢٤ uint32 t∗ vmm page dir table lookup entry(page dir table∗ pd,uint32 t

addr) {١٢٥ if (pd)١٢٦ return &pd−>pde[vmm vir to page table index(addr)];١٢٧ else١٢٨ return 0;١٢٩ }

١٨١

Page 200: برمجة وتصميم نظام تشغيل
Page 201: برمجة وتصميم نظام تشغيل

Device Driver االجهزة مشغالت .٨Keyboard Driver املفاتيح لوحة مشغل برجمة .١.٨

Example ٨.١: Keybaord Driver Interface

١٢ #ifndef KEYBOARD H٣ #define KEYBOARD H٤٥ #include <stdint.h>٦٧ enum KEY CODE{٨ KEY SPACE = ' ',٩ KEY 0 = '0',١٠ KEY 1 = '1',١١ KEY 2 = '2',١٢ KEY 3 = '3',١٣ KEY 4 = '4',١٤ KEY 5 = '5',١٥ KEY 6 = '6',١٦ KEY 7 = '7',١٧ KEY 8 = '8',١٨ KEY 9 = '9',١٩ KEY A = 'a',٢٠ KEY B = 'b',٢١ KEY C = 'c',٢٢ KEY D = 'd',٢٣ KEY E = 'e',٢٤ KEY F = 'f',٢٥ KEY G = 'g',٢٦ KEY H = 'h',٢٧ KEY I = 'i',٢٨ KEY J = 'j',٢٩ KEY K = 'k',

١٨٣

Page 202: برمجة وتصميم نظام تشغيل

Device Driver االجهزة مشغالت .٨

٣٠ KEY L = 'l',٣١ KEY M = 'm',٣٢ KEY N = 'n',٣٣ KEY O = 'o',٣٤ KEY P = 'p',٣٥ KEY Q = 'q',٣٦ KEY R = 'r',٣٧ KEY S = 's',٣٨ KEY T = 't',٣٩ KEY U = 'u',٤٠ KEY V = 'v',٤١ KEY W = 'w',٤٢ KEY X = 'x',٤٣ KEY Y = 'y',٤٤ KEY Z = 'z',٤٥ KEY RETURN = '\r',٤٦ KEY ESCAPE = 0x1001,٤٧ KEY BACKSPACE = '\b',٤٨ KEY UP = 0x1100,٤٩ KEY DOWN = 0x1101,٥٠ KEY LEFT = 0x1102,٥١ KEY RIGHT = 0x1103,٥٢ KEY F1 = 0x1201,٥٣ KEY F2 = 0x1202,٥٤ KEY F3 = 0x1203,٥٥ KEY F4 = 0x1204,٥٦ KEY F5 = 0x1205,٥٧ KEY F6 = 0x1206,٥٨ KEY F7 = 0x1207,٥٩ KEY F8 = 0x1208,٦٠ KEY F9 = 0x1209,٦١ KEY F10 = 0x120a,٦٢ KEY F11 = 0x120b,٦٣ KEY F12 = 0x120b,٦٤ KEY F13 = 0x120c,٦٥ KEY F14 = 0x120d,٦٦ KEY F15 = 0x120e,٦٧ KEY DOT = '.',٦٨ KEY COMMA = ',',٦٩ KEY COLON = ':',٧٠ KEY SEMICOLON = ';',

١٨٤

Page 203: برمجة وتصميم نظام تشغيل

Keyboard Driver املفاتيح لوحة مشغل برجمة .١.٨

٧١ KEY SLASH = '/',٧٢ KEY BACKSLASH = '\\',٧٣ KEY PLUS = '+',٧٤ KEY MINUS = '−',٧٥ KEY ASTERISK = '∗',٧٦ KEY EXCLAMATION = '!',٧٧ KEY QUESTION = '?',٧٨ KEY QUOTEDOUBLE = '\"',٧٩ KEY QUOTE = '\'',٨٠ KEY EQUAL = '=',٨١ KEY HASH = '#',٨٢ KEY PERCENT = '%',٨٣ KEY AMPERSAND = '&',٨٤ KEY UNDERSCORE = ' ',٨٥ KEY LEFTPARENTHESIS = '(',٨٦ KEY RIGHTPARENTHESIS = ')',٨٧ KEY LEFTBRACKET = '[',٨٨ KEY RIGHTBRACKET = ']',٨٩ KEY LEFTCURL = '{',٩٠ KEY RIGHTCURL = '}',٩١ KEY DOLLAR = '$',٩٢ KEY POUND = '£',٩٣ KEY EURO = '$',٩٤ KEY LESS = '<',٩٥ KEY GREATER = '>',٩٦ KEY BAR = ' |',٩٧ KEY GRAVE = '`',٩٨ KEY TILDE = '˜',٩٩ KEY AT = '@',

١٠٠ KEY CARRET = 'ˆ',١٠١ KEY KP 0 = '0',١٠٢ KEY KP 1 = '1',١٠٣ KEY KP 2 = '2',١٠٤ KEY KP 3 = '3',١٠٥ KEY KP 4 = '4',١٠٦ KEY KP 5 = '5',١٠٧ KEY KP 6 = '6',١٠٨ KEY KP 7 = '7',١٠٩ KEY KP 8 = '8',١١٠ KEY KP 9 = '9',١١١ KEY KP PLUS = '+',

١٨٥

Page 204: برمجة وتصميم نظام تشغيل

Device Driver االجهزة مشغالت .٨

١١٢ KEY KP MINUS = '−',١١٣ KEY KP DECIMAL = '.',١١٤ KEY KP DIVIDE = '/',١١٥ KEY KP ASTERISK = '∗',١١٦ KEY KP NUMLOCK = 0x300f,١١٧ KEY KP ENTER = 0x3010,١١٨ KEY TAB = 0x4000,١١٩ KEY CAPSLOCK = 0x4001,١٢٠ KEY LSHIFT = 0x4002,١٢١ KEY LCTRL = 0x4003,١٢٢ KEY LALT = 0x4004,١٢٣ KEY LWIN = 0x4005,١٢٤ KEY RSHIFT = 0x4006,١٢٥ KEY RCTRL = 0x4007,١٢٦ KEY RALT = 0x4008,١٢٧ KEY RWIN = 0x4009,١٢٨ KEY INSERT = 0x400a,١٢٩ KEY DELETE = 0x400b,١٣٠ KEY HOME = 0x400c,١٣١ KEY END = 0x400d,١٣٢ KEY PAGEUP = 0x400e,١٣٣ KEY PAGEDOWN = 0x400f,١٣٤ KEY SCROLLLOCK = 0x4010,١٣٥ KEY PAUSE = 0x4011,١٣٦ KEY UNKNOWN,١٣٧ KEY NUMKEYCODES١٣٨ };١٣٩١٤٠ extern bool keyboard get scroll lock();١٤١ extern bool keyboard get caps lock();١٤٢ extern bool keyboard get num lock();١٤٣ extern bool keyboard get alt();١٤٤ extern bool keyboard get ctrl();١٤٥ extern bool keyboard get shift();١٤٦ extern void keyboard ignore resend();١٤٧ extern bool keyboard check resend();١٤٨ extern bool keyboard get diagnostic res();١٤٩ extern bool keyboard get bat res();١٥٠ extern bool keyboard self test();١٥١ extern uint8 t keyboard get last scan();١٥٢ extern KEY CODE keyboard get last key();

١٨٦

Page 205: برمجة وتصميم نظام تشغيل

Keyboard Driver املفاتيح لوحة مشغل برجمة .١.٨

١٥٣ extern void keyboard discard last key();١٥٤ extern void keyboard set leds(bool nums,bool caps,bool scroll);١٥٥ extern char keyboard key to ascii(KEY CODE k);١٥٦ extern void keyboard enable();١٥٧ extern void keyboard disable();١٥٨ extern bool keyboard is disabled();١٥٩ extern void keyboard reset system();١٦٠ extern void keyboard install(int);١٦١١٦٢ #endif // KEYBOARD H

Example ٨.٢: Keybaord Driver Implemeta on

١٢ void keyboard install(int irq) {٣ // Install interrupt handler (irq 1 uses interrupt 33)٤ set vector(irq, i386 keyboard irq);٥٦ // assume BAT test is good. If there is a problem, the IRQ handler

where catch the error٧ keyboard bat res = true;٨ scancode = 0;٩١٠ // set lock keys and led lights١١ numlock = scrolllock = capslock = false;١٢ keyboard set leds (false, false, false);١٣١٤ // shift, ctrl, and alt keys١٥ shift = alt = ctrl = false;١٦ }١٧١٨١٩ // keyboard interrupt handler٢٠ void cdecl i386 keyboard irq () {٢١٢٢ asm add esp, 12٢٣ asm pushad٢٤ asm cli٢٥٢٦ static bool extended = false;

١٨٧

Page 206: برمجة وتصميم نظام تشغيل

Device Driver االجهزة مشغالت .٨

٢٧٢٨ int code = 0;٢٩٣٠ // read scan code only if the keyboard controller output buffer is

full (scan code is in it)٣١ if (keyboard ctrl read status () & KEYBOARD CTRL STATS MASK OUT BUF

) {٣٢٣٣ // read the scan code٣٤ code = keyboard enc read buf ();٣٥٣٦ // is this an extended code? If so, set it and return٣٧ if (code == 0xE0 | | code == 0xE1)٣٨ extended = true;٣٩ else {٤٠٤١ // either the second byte of an extended scan code or a single

byte scan code٤٢ extended = false;٤٣٤٤ // test if this is a break code (Original XT Scan Code Set

specific)٤٥ if (code & 0x80) { //test bit 7٤٦٤٧ // covert the break code into its make code equivelant٤٨ code −= 0x80;٤٩٥٠ // grab the key٥١ int key = keyboard scancode std [code];٥٢٥٣ // test if a special key has been released & set it٥٤ switch (key) {٥٥٥٦ case KEY LCTRL:٥٧ case KEY RCTRL:٥٨ ctrl = false;٥٩ break;٦٠٦١ case KEY LSHIFT:٦٢ case KEY RSHIFT:٦٣ shift = false;

١٨٨

Page 207: برمجة وتصميم نظام تشغيل

Keyboard Driver املفاتيح لوحة مشغل برجمة .١.٨

٦٤ break;٦٥٦٦ case KEY LALT:٦٧ case KEY RALT:٦٨ alt = false;٦٩ break;٧٠ }٧١ }٧٢ else {٧٣٧٤ // this is a make code − set the scan code٧٥ scancode = code;٧٦٧٧ // grab the key٧٨ int key = keyboard scancode std [code];٧٩٨٠ // test if user is holding down any special keys & set it٨١ switch (key) {٨٢٨٣ case KEY LCTRL:٨٤ case KEY RCTRL:٨٥ ctrl = true;٨٦ break;٨٧٨٨ case KEY LSHIFT:٨٩ case KEY RSHIFT:٩٠ shift = true;٩١ break;٩٢٩٣ case KEY LALT:٩٤ case KEY RALT:٩٥ alt = true;٩٦ break;٩٧٩٨ case KEY CAPSLOCK:٩٩ capslock = ( capslock) ? false : true;

١٠٠ keyboard set leds ( numlock, capslock, scrolllock);١٠١ break;١٠٢١٠٣ case KEY KP NUMLOCK:١٠٤ numlock = ( numlock) ? false : true;

١٨٩

Page 208: برمجة وتصميم نظام تشغيل

Device Driver االجهزة مشغالت .٨

١٠٥ keyboard set leds ( numlock, capslock, scrolllock);١٠٦ break;١٠٧١٠٨ case KEY SCROLLLOCK:١٠٩ scrolllock = ( scrolllock) ? false : true;١١٠ keyboard set leds ( numlock, capslock, scrolllock);١١١ break;١١٢ }١١٣ }١١٤ }١١٥١١٦ // watch for errors١١٧ switch (code) {١١٨١١٩ case KEYBOARD ERR BAT FAILED:١٢٠ keyboard bat res = false;١٢١ break;١٢٢١٢٣ case KEYBOARD ERR DIAG FAILED:١٢٤ keyboard diag res = false;١٢٥ break;١٢٦١٢٧ case KEYBOARD ERR RESEND CMD:١٢٨ keyboard resend res = true;١٢٩ break;١٣٠ }١٣١ }١٣٢١٣٣ // tell hal we are done١٣٤ int done(0);١٣٥١٣٦ // return from interrupt handler١٣٧ asm sti١٣٨ asm popad١٣٩ asm iretd١٤٠ }

١٩٠

Page 209: برمجة وتصميم نظام تشغيل

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

وجل. عز اهللا فمن صواب من كان وما والشيطانالعاملني. رب هللا احلمد أن دعوانا وآخر . أمجعني وصحبه آله وعلى حممد نبينا على وسلم اللهم وصلى

النتائجالتوصيات

آلخر أو لسبب جتاهلها مت اليت املوضيع من عددا عن احلديث جيب فانه مناسبة ملرحلة البحث يصل حىتالعديد له تضاف أن ميكن حيث التشغيل أنظمة اىل عامة مقدمة يعترب والذي األول الفصل من فبداية ،الفصل أما التشغيل. أنظمة ماهية عن التوضيحات من مزيدا وكذلك احلالية األنظمة عن املعلومات منجزئية كل لشرح متكامال كتابا يتطلب أنه حيث احلاسب معمارية يف القشور عن سوى يتحدث فلم الثاينالفصل اىل اإلنتقال وقبل التشغيل. أنظمة برجمة عند تناوهلا يكثر اليت املواضيع عن واحلديث اإلجياز مت ولكناملترجم النه NASM مترجم مع اللغة أساسيات يشرح حبيث التجميع لغة عن جديد فصل كتابة ميكن الثالثبشكل وتوضيحها عندها الوقوف جيب به خاصة أوامر حيوي أنه حيث الربامج جتميع عملية يف املستخدموميكن إقرأ نظام لتحميل برجمته مت الذي النظام حممل عن فيها احلديث فتم والرابع الثالث الفصل أما جيد.املحمالت أشهر من يعترب والذي GRUB حممل (مثل املصدر املفتوحة املحمالت من أي عن احلديث هناوطرق النواة عن حتدث اخلامس والفصل خالهلم. من مباشرة النظام نواة حتميل وكيفية استخداما) وأكثرهمجماال الفصل هذا ويعترب حدة على منهم كل برجمة وطرق بينهم االختالف يتناول ومل خمتصر بشكل تصميمهاالفصل بينما ، العلومات من املزيد اضافة وميكن تقريبا مكتمل فهو السادس الفصل أما . فيه للبحث كامالشاغرة أماكن عن للبحث First Fit خوارزمية تطبيق ومت الذاكرة ادراة خوارزميات عن يتحدث مل السابعاألماكن ملتابعة املتصلة القائمة تطبيق ميكن كذلك ، الشهرية اخلوارزميات من أي تطبيق وميكن الذاكرة يفنظرا لكن األجهزة مشغالت عن فهو الثامن الفصل أما .Bit Map استخدام من بدال الذاكرة يف الشاغرةهذا يف وميكن ، منه املدخلة األحرف قراءة وكيفية املفاتيح لوحة متحكم عن احلديث مت فقد الوقت لضيقالشبكة لكرت ومشغل الصلب والقرص املرن القرص مشغل مثل األجهزة مشغالت من العديد اضافة الفصل

١٩١

Page 210: برمجة وتصميم نظام تشغيل

Device Driver االجهزة مشغالت .٨

امللفات أنظمة عن للحديث فصل إضافة ميكن أخريا الضرورية. املشغالت من والعديد الصوت وكرتاملهام. تعدد لدعم املجدول لربجمة وفصل FAT12,FAT16,FAT32,EXT3,EXT4,...etc مثل برجمتهم وكيفية

والتحسينات: اإلضافات من العديد اىل حباجة فانه إقرأ نظام ناحية ومن.POSIX واجهة دعم •

.FAT12,FAT16,FAT32,EXT3,EXT4,...etc امللفات ألنظمة دعم •

املهام. لتعدد دعم •

إقرأ. نظام اىل x11 وواجهة gcc,g++ مترجم (port) نقل •

١٩٢

Page 211: برمجة وتصميم نظام تشغيل

Bibliography[١] William Stallings, Operating System: Internals and Design Principles. Prentice Hall, 5th

Edition, 2004.

[٢] AndrewS. Tanenbaum ,Albert SWoodhull,Operating SystemsDesign and Implementation.Prentice Hall, 3rd Edition, 2006.

[٣] Michael Tischer, Bruno Jennrich, PC Intern: The Encyclopedia of System Programming.Abacus Software, 6th Edition, 1996.

[٤] Hans-Peter Messmer, The Indispensable PC Hardware Book. Addison-Wesley Profes-sional, 4th Edition, 2001.

[٥] Andrew S. Tanenbaum, Structured Computer Organization. Prentice Hall, 4th Edition,1998.

[٦] Ytha Yu,Charles Marut, Asssembly Language Programming and Organization IBM PC.McGraw-Hill/Irwin, 1st Edition, 1992.

[٧] Intel® Manuals, Intel® 64 and IA-32 Architectures Software Developer's Manuals. http://www.intel.com/products/processor/manuals/

[٨] OSDev: http://wiki.osdev.org

[٩] brokenthorn: http://brokenthorn.com

[١٠] Computer Sciense Student's Community in Sudan: http://sudancs.com

[١١] Wikipedia: http://wikipedia.org

١٩٣

Page 212: برمجة وتصميم نظام تشغيل
Page 213: برمجة وتصميم نظام تشغيل

الربامج وتشغيل ترمجة ا.هذا ويف التطوير عملية وتيسري تساعد اليت واللغات االدوات من جمموعة استخدام جيب التشغيل نظام لتطوير

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

ويندوز نظام ا.١.لينوكس نظام ا.٢.

١٩٥

Page 214: برمجة وتصميم نظام تشغيل
Page 215: برمجة وتصميم نظام تشغيل

إقرأ نظام شفرة ب.النظام كود

١٩٧