شباب ميت الحارون

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

شباب ميت الحارون


    البداية في برمجة أنظمة التشغيل

    نسر البلاد
    نسر البلاد


    عدد المساهمات : 4
    تاريخ التسجيل : 21/03/2010
    العمر : 33

    البداية في برمجة أنظمة التشغيل Empty البداية في برمجة أنظمة التشغيل

    مُساهمة  نسر البلاد الأحد مارس 21, 2010 1:21 am

    السلام عليكم

    الكاتب: JAAScois
    تاريخ النشر: 19/10/2004 م


    سنبدأ بدراسة عملية الإقلاع لنظام التشغيل بداية ب BIOS إلى ان نصل إلى الواجهة الرسومية
    تابع الخطوات:
    الآن عندك جهاز كمبيوتر بجانبك ... بشرط أن يكون مغلق . بمعنى أنة غير موصول بالكهرباء!

    قم بتوصيل كل أجزاء الكمبيوتر+ تأكد من توصيل أسلاك الكهرباء + ضع أصبعك على زر التشغيل
    هل أنت مستعد لتشغيل الكمبيوتر ؟!

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

    والآن إضغط على زر التشغيل وإقرأ كل كلمة في الموضوع وفكر بها جيداً ... البداية

    يبدأ موزع الكهرباء أو البور سبلاي بإمداد اللوحة الأم بالطاقة .. مباشرة تصل الطاقة إلى المعالج

    يشتغل المعالج أول ما يقوم بة هو تصفير لكل مسجلات المعالج مثل ax وbx وds و..و..

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

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

    وبعد ذلك يقوم بتحديد الإزاحة للقسم وأكيد بواسطة المسجل ip فيعطية القيمة FFF0

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

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

    والآن المعالج صفر أو هيأ كل المسجلات + حدد بداية التنفيذ في الذاكرة

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

    ماهو BIOS : عبارة عن برنامج مخزن في ذاكرة على اللوحة الأم تسمى الذاكرة ROM

    وهي ذاكرة للقرائة فقط + أنها لاتفقد المعلومات المخزنة بها عند إغلاق الجهاز

    والأمثلة على البرامج المخزنة في ذاكرة ROM كثيرة .. هل لاحظت شعارات الشركات في بداية تشغيل الكمبيوتر

    مثل كرت الشاشة يظهر لك علامة تجارية مثلا SIS .. هذة البرامج كلها مخزنة في الذاكرة ROM

    وللمعلومة : يمكن للهكر أو الكراكر(وهم المختصين في البرمجة العكسية ) الوصول للبرامج المخزنة في ROM !!؟

    والآن كيف تعمل هذة البرامج ... إذا فهمت BIOS ستعرف القصة !


    كيف يعمل نظام BIOS ؟

    بعد أن يجهز المعالج المسجلات يقوم بتسليم القيادة أو التحكم للنظام BIOS

    يبدأ التنفيذ في BIOS عند السطر 430 ( في معالجات إنتل ) يقوم BIOS بعدد من المهام الأساسية

    أول مهمة هي فحص قطع الجهاز :

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

    عن طريق الأمر out وبعد ذلك يقوم بإستقبال أي إشارة من الجهاز عن طريق الأمر IN

    إذا وصلت أي إشارة من الجهاز معنى ذلك أنة شغال ... وإذا لم تصل أي إشارة معناه خطأ في الجهاز

    وهكذا مع كل أجهزة الكمبيوتر .

    في نقطة مهمة في الفحص .. أول مايقوم بة BIOS فحص كرت الشاشة + منفذ الشاشة

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

    يقوم ال BIOS في هذة الحال بإستخدام طريقة الأصوات أو الصافرة لعرض أي خطأ في عملية الفحص

    أمثلة لأهل الصيانة

    قمت بتشغيل الجهاز .. لم يعمل الجهاز .. لم يصدر BIOS أي صوت ( على طول الخطأ في البور سبلاي )

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

    لم يصل إلى BIOS .. لاحظ معنى الأصوات

    صافرة واحدة قصيرة = لا توجد أخطاء في عملية الفحص

    صافرتين قصيرة = خطأ في كرت الشاشة أو طريقة توصيل الشاشة

    وهكذا مع كل الأخطاء

    والنقطة الثانية ... إذا كانت الشاشة شغالة ( يتم عرض الأخطاء بطريقة الأرقام )

    1 short beep Normal POST - system is ok
    2 short beeps POST Error - error code shown on screen
    No beep Power supply or system board problem
    Continuous beep Power supply, system board, or keyboard problem
    Repeating short beeps Power supply or system board problem
    1 long, 1 short beep System board problem
    1 long, 2 short beeps Display adapter problem (MDA, CGA)
    1 long, 3 short beeps Enhanced Graphics Adapter (EGA)
    3 long beeps 3270 keyboard card
    Standard Original IBM POST Error Codes

    أخطاء BIOS في كلى الحالتين تجدها هنا :
    [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
    -
    بعد أن يقوم BIOS بفحص الأجهزة يقوم بإنشاء جدولين

    الأول : جدول مقاطعات ال BIOS

    عند العنوان 0000:0000 ( العنوان صفر ) يبدأ بكتابة عنواين المقاطعات .كل مقاطعة

    تأخذ لها 4 بايت .. لتدل على عنوان بداية تنفيذ المقاطعة , بهذا الشكل

    المقاطعة صفر INT 0 عنوانها 0000:0000 (هذا العنوا يحتوي على عنوان التنفيذ)

    المقاطعة واحد INT 1 عنوانها 0000:0004 , المقاطعة 2 عنوانها 0000:0008

    هذا الجدول الأول ( جدول المقاطعات )




    شيفرة :
    INT 00h 0000:0000h =مقاطعة لراية الفيض في القسمة
    INT 01h 0000:0004h = مقاطعة المعالج للتنفيذ خطوة ..خطوة
    INT 02h 0000:0008h = NMI مقاطعة الأجهزة الخارجية لمايعرف بدبوس
    INT 03h 0000:000Ch =مقاطعة لكتابة نقطة توقف للبرنامج
    INT 04h 0000:0010h =مقاطعة راية الفيض في مسجل الحالة
    INT 05h 0000:0014h = طباعة الشاشة
    INT 06h 0000:0018h =مقاطعة لإختبار تنفيذ تعليمة غير مصرح لها
    INT 07h 0000:001Ch =مقاطعة ضغط وتشفير التعليمات
    INT 08h 0000:0020h = خدمات المؤقت
    INT 09h 0000:0024h = خدمات الجهاز المشغل للوحة المفاتيح
    INT 0Ah 0000:0028h =مقاطعة تستخدم في التبديل بين المهام
    INT 0Bh 0000:002Ch = خدمة المنفذ التسلسلي com2
    INT 0Ch 0000:0030h =خدمة المنفذ com2
    INT 0Dh 0000:0034h = خدمة المنفذ المتوازي LPT 2
    INT 0Eh 0000:0038h =خدمات القرص المرن
    INT 0Fh 0000:003Ch =خدمة المنفذ LPT1
    INT 10h 0000:0040h = خدمات شاشة العرض
    INT 11h 0000:0044h =مقاطعة تعيد الأجهزة المتصلة بالكمبيوتر
    INT 12h 0000:0048H = مقاطعة حجم الذاكرة
    INT 13h 0000:004Ch = خدمات القرص الصلب
    INT 14h 0000:0050h = خدمات منافذ لإتصالات
    INT 15h 0000:0054h = خدمات النظام
    INT 16h 0000:0058h = خدمات لوحة المفاتيح
    INT 17h 0000:005Ch = خدمات الطابعة
    INT 18h 0000:0060h = خدمات لتحميل ROM BASIC
    INT 19h 0000:0064h = مقاطعة تحفيز قرص الإقلاع
    INT 1Ah 0000:0068h = خدمات الوقت الحقيقي للساعة
    INT 1Bh 0000:006Ch =تحديد مدة الإستجابة للوحة المفاتيح
    INT 1Ch 0000:0070h =مقاطة التوقيت مقدر باللحظة
    1Dh 00000074h =مقاطعة جدول وبارمترات شاشة العرض
    1Eh 0000:0078h =مقاطعة جدول وبارمترات القرص المرن
    1Fh 0000:007Ch = مقاطعة خصائص الخط والمحارف





    تلاحظ أننا توقفنا عند العنوان address=1F ... أين بقية المقاطعات

    باقي المقاطعات سنكتبها في وقتها.. لأن نظام الدوس يتطفل ويبدأ في الكتابة عند العنوان الذي توقفنا عندة

    المهم : ماالفائدة من هذا الجدول + ما الفائدة من المقاطعات ؟!

    أولا : الفائدة من الجدول هي نقل التنفيذ .. والمثال على ذلك في وندوز مكاتب الربط dll

    يمكن يكون الشرح غير مفهوم : والحل بالطبيق العملي

    من قائمة start ثم run إكتب debug وإضغط أوكي

    ما رأيكم بمقاطعة حجم الذاكرة وهي المقاطعة 12 .. عنوانها في الذاكرة 0000:0048

    في برنامج الديبغر أكتب الأمر D 0000:0048 وهو عنوان المقاطعة , إحفظ أول 4 بايتات

    ولتكن مثلا : AA 09 0E 02 طبق عليها قانون العكس فتساوي n= 020E:09AA

    هل تعرف مايمثلة العنوان , هو بداية التنفيذ لشفرة المقاطعة ... جرب إذهب للعنوان

    بواسطة أمر فك التجميع u 020E:09AA ولاحظ كيف تنفذ المقاطعة


    الفائدة من المقاطعة :

    أهم فائدة هي تبسيط الأمور وهو إسلوب متبع إلى الآن في الأنظمة الحديثة مثل وندوز xp

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

    كل مرة عند تشغيلك لجهازك ترى بأن النظام BIOS بعد فحص الأجهزة يعرض لك حجم الذاكرة

    هل تريد أن تعرف كيف ينفذها .. عن طريق برمجة المنافذ + البرمجة المباشرة للذاكرة

    بهذا الكود :mov al,18h



    شيفرة :
    out 70h,al
    in al,71h
    mov ah,al
    mov al,17h
    out 70h,al
    in al,71h





    بعد تنفيذ هذا الكود سيصبح مسجل ax = حجم الذاكرة

    هل عرفت فائدة المقاطعة - فقط إستبدل كل الكود بتعليمة المقاطعة INT 12 وسيحمل المسجل ax بحجم الذاكرة

    هذا هو مفهوم المقاطعة , بعد ذلك يبدأ اBIOS في بناء الجدول الثاني

    جدول معلومات ال BIOS :

    وهو جدول يخزن بة BIOS معلومات عن الأجهزة (الهاردوير) الموجودة في الجهاز

    يبدأ نظام BIOS في كتابة معلوماتة عند العنوان 0040:0000

    وهذة المعلومات هي



    شيفرة :
    0040:0000h =عنوان المنفذ com1
    0040:0002h =عنوان المنفذ com2
    0040:0004h =عنوان المنفذ com3
    0040:0006h =عنوان المنفذ com4
    0040:0008h =عنوان المنفذ LPT1
    0040:000Ah =عنوان المنفذ LPT2
    0040:000Ch =عنوان المنفذ LPT3
    0040:000Eh =عنوان المنفذ LPT4
    0040:0010h =مجموعة الأجهزة وهو عبارة عن 16 بت تمثل الأجهزة المثبتة
    0040:0012h = رايات المقاطعة والتحقق من الأخطاء
    0040:0013h =حجم الذاكرة بالبايت
    0040:0015h = معرف أو كود الخطأ

    0040:0017h = رايات الحالة والتغير في لوحة المفاتيح
    0040:001Ah = مؤشر إلى الحرف التالي في مخزن لوحة المفاتيح
    0040:001Ch = مؤشر إلى الحرف الأخير في مخزن لوحة المفاتيح
    0040:001Eh =محتوى مخزن لوحة المفاتيح

    0040:003Eh =معرف القرص المرن A=0 - B=1 C=2 ..
    0040:003Fh = حالة محرك الأقراص المرن
    0040:0042h = مسجل التحكم للقرص الصلب والمرن

    0040:0049h = إعدادات نمط شاشة العرض
    0040:004Ah =عدد الأعمدة في كل سطر
    0040:004Ch =حجم الصفحة في شاشة العرض
    0040:0050h = نقطة ظهور المؤشر في شاشة العرض
    0040:0063h = يحتوي على عنوان منفذ الإدخال والإخراج لشاشة العرض
    0040:066h = لوحة الألوان لشاشة العرض

    0040:075h = عدد الأقراص الصلبة في الجهاز
    0040:076h =بايت التحكم للقرص الصلب
    0040:077h =عنوان منفذ الإدخال والإخراج للقرص الصلب
    0040:08Dh =مسجل أخطاء القرص الصلب


    0040:0A1h = معرف كرت الشبكة المحلية
    0040:0F0h = منطقة معلومات الإتصالات بين التطبيقات


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

    الآن: تحميل نظام التشغيل إلى الذاكرة وبداية عملة :

    يبدأ الBIOS في البحث عن مشغل النظام وهو ما يعرف بقطاع الإقلاع boot sector

    قد يكون في قرص مرن أو قرص صلب أو حتى CD , المهم أن BIOS يبدأ البحث

    في كل الأقراص .. حسب الترتيب الذي حددتة في إعدادات BIOS

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

    العلامة هي أن يكون آخر بايتين في القطاع = AA 55

    كتابة برنامج إقلاع في القطاع الأول شغلة سهلة لأن الموضوع يتطلب فهم أمرين فقط

    الأول: إستخدام مقاطعات الBIOS

    برنامج الإقلاع القياسي يستخدم مقاطعتين فقط وهي المقاطعة 13 لتحميل الملفات من القرص

    والمقاطعة 19 لتحفيز القرص للإقلاع (وهذة المقاطعة قد لا تستخدم دائما )

    والأمر الثاني : معرفة العناوين الذي سينتقل لها التنفيذ + معرفة مخزن القرائة من القرص

    سنتابع قصة إقلاع الكمبيوتر وستتضح الأمور .

    توقفنا عند BIOS وطريقة تحملية لنظام التشغيل , وقلنا أنة سيحمل قطاع واحد فقط

    بعد أن يجد قطاع الإقلاع سيقوم بتحميلة إلى العنوان address =7C00

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

    لينتقل التنفيذ لها , بعد ذلك مباشرة تقوم بإستخدام المقاطعة 13 لتحميل كل محتويات القرص

    أو تحميل برنامج معين , في أمور مهمة عند هذة النقطة ؟ ماذا يعرف BIOS عن القرص

    هل مرت عليك أنظمة الملفات مثل FAT ,NFS ,ex2..3 وغيرها من أنظمة ملفات وندوز ولينكس

    بإختصار برنامج BIOS لا يعرف شيء عن هذة الخرابيط ولا يعرف حتى أسامي الملفات ولا أين تبدأ وأين تنتهي

    ما يعرفة BIOS هو تركيب القرص الفيزيائي مثل الرأس و الإسطوانة و القطاع والمسار

    سأعطيك مثال بارمترات مقاطعة قرائة محتوى القرص



    شيفرة :
    AH=0x02 // خدمة قرائة القرص وتحميل البرامج إلى الذاكرة

    AL=عدد القطاعات

    CH=رقم المسار

    CL=رقم القطاع

    DH=رقم الرأس

    DL=رقم القرص

    ES X=مؤشر إلى المخزن





    قد تعتقد أن تحديد ملف معين أمر معقد , ولهذا السبب ظهرت أنظمة الملفات مثل FAT و..و

    ولكن إذا قمت أنت بكتابة ملف معين في قطاعات القرص بكل بساطة تستطيع أن تحدد موقعة بالضبط

    ملاحظة: في آخر بارمتر وهو ESX هذا البارمتر لا تكتب بة شيء لأنك عندما تنفذ المقاطعة int13

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

    ملاحظة الكود الذي يظهر مع الإبتسامة يكتب هكذا ولكن مع مسافة أكتبها من دون مسافة هناك E S : D X

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

    قد لا تصدق أن تحميل النظام بكل هذة البساطة ,, مارأيك بمثال

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

    وأول ما تشغل الكمبيوتر , وبعد عملية فحص الأجهزة .. سيظهر برنامجنا بكل ثقة ؟!

    سنقوم بكتابة البرنامج داخل قطاع الإقلاع بإستخدام برنامج debug في النظام وندوز

    الآن قم بإدخال القرص المضغوط( الفلوبي ) لا يهم إذا كان مفرمت أو لا لأن الBIOS لا يعرف شيء من هذا

    ولكن لوكان القرص مفرمت سيوفر علينا كتابة توقيع قطاع الإقلاع وهو AA 55 في آخر بايتين

    بعد ذلك من قائمة start ثم run إكتب debug لتشغيل برنامج الديبغر وستلاحظ ظهور العلامة -

    عند العلامة إكتب الأمر L 100 0 0 1

    الحرف L معناة تحميل قطاع من القرص إلى الذاكرة 100 تعني إلى العنوان 100 في نفس المقطع

    الصفر الأولى = محرك الأقراص A و الصفر الثانية تعني رقم القطاع وهو0 أي قطاع الإقلاع

    الواحد الأخير يعني عدد القطاعات التي تريد تحميلها إلى الذاكرة عند العنوان 100

    بهذا الأمر نكون حملنا قطاع الإقلاع إلى الذاكرة , والآن نريد أن نكتب بة برنامج صغير

    أكتب عند علامة - التعليمة a 100 أي أننا نريد كتابة كود إسمبلي عند العنوان 100

    بعد ذلك إكتب البرنامج :



    شيفرة :
    - a 100

    -0B3A:0100 mov ah,09
    -0B3A:0102 mov al,42
    -0B3A:0104 mov bh,0
    -0B3A:0106 mov bl,14
    -0B3A:0108 mov cx,10
    -0B3A:010B int 10




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

    البرنامج الذي كتبناة هو عبارة عن مقاطعة إظهار حرف على الشاشة , الرقم 42 يمثل الحرف B

    الرقم 14 يمثل لون الحرف ولون الخلفية الرقم 10 يمثل عدد تكرار الحرف على الشاشة

    بعد ذلك سنقوم بإدخال برنامجنا إلى العنوان 100 وتخزينة في الذاكرة , بإستخدام التعليمة



    شيفرة :
    e 100 -e 100
    0B3A:0100 B4. 09. B0. 42. B7. 00. B3. 14.
    0B3A:0108 B9. 10. 00. CD. 10.



    كما شرحت سابقا يتم إدخال كل بايت بإستخدام مفتاح المسافة في لوحة المفاتيح

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

    بهذة الطريقة : W 100 0 0 1

    -

    ولآن تأكد من أن القرص المضغوط بداخل السواقة

    تأكد من أن ترتيب الإقلاع في إعدادات الBIOS يبدأ من القرص المضغوط

    وأعد تشغيل الجهاز ....... ولاحظ( برنامجك على الشاشة )

    ألف مبروك أصبحت مبرمج أنظمة معتمد ?!!



    منقوووووووووووووووووووووووووووووووول

      الوقت/التاريخ الآن هو الأحد مايو 19, 2024 10:42 pm