السلام عليكم ورحمة الله ,,,
لاحظت مواضيع كثيرة ومشاريع الهدف منها بناء نظام تشغيل عربي ؟!
لاحظت بأن أغلب الأعضاء أهدافهم كبيرة في مجال البرمجة ... ولكن بدون أساس !
قرأت أغلب الأسئلة ... ووجدت أن جوابها واحد ؟ والسؤال واحد ؟
كيف يعمل جهاز الكمبيوتر ؟!
أعتقد أن جواب هذا السؤال البسيط ... علم كثير وكبير في كل مجالات الكمبيوتر
مثل البرمجة والهندسة والصيانة وحتى البرمجة العكسية والهكر وسأضع لك الأمثلة عند كل نقطة تقرئها
وسؤحاول في هذا الموضوع تقريب الإجابة عن السؤال !
أولا : عملية الإقلاع
الآن عندك جهاز كمبيوتر بجانبك ... بشرط أن يكون مغلق . بمعنى أنة غير موصول بالكهرباء!
قم بتوصيل كل أجزاء الكمبيوتر+ تأكد من توصيل أسلاك الكهرباء + ضع أصبعك على زر التشغيل
هل أنت مستعد لتشغيل الكمبيوتر ؟!
سنقوم الآن بكتابة كل عملية تحدث من أول ما تضغط على زر التشغيل ..إلى أن تظهر نافذة نظام التشغيل
والآن إضغط على زر التشغيل وإقرأ كل كلمة في الموضوع بتفكير عميق ... البداية
يبدأ موزع الكهرباء أو البور سبلاي بإمداد اللوحة الأم بالطاقة .. مباشرة تصل الطاقة إلى المعالج
يشتغل المعالج أول ما يقوم بة هو تصفير لكل مسجلات المعالج مثل ax وbx وds و..و..
بعد ذلك يقوم بشغلة مهمة لبدء التحكم .. يقوم المعالج بإعطاء المسجل cs وهو قسم الشفرة أو التنفيذ
القيمة F000 (كل الأرقام بالرمز الست عشري أو الهكس ) وبهذا يكون المعالج قد حدد قسم التنفيذ
وبعد ذلك يقوم بتحديد الإزاحة للقسم وأكيد بواسطة المسجل ip فيعطية القيمة FFF0
تلاحظ أن المعالج بدأ التنفيذ في النمط الحقيقي أي نمط 16 بت وقد إستخدم مسجلات هذا النمط
والسبب في ذلك هو التوافقية بين الأنظمة + إمكانية الوصول إلى أي عنوان في الذاكرة
والآن المعالج صفر أو هيأ كل المسجلات + حدد بداية التنفيذ في الذاكرة
بعد ذلك يقوم بنقل التنفيذ من العنوان الذي حددة المعالج إلى نظام الإدخال والإخراج الأساسي ( البويس )
ماهو البويس : عبارة عن برنامج مخزن في ذاكرة على اللوحة الأم تسمى الذاكرة ROM
وهي ذاكرة للقرائة فقط + أنها لاتفقد المعلومات المخزنة بها عند إغلاق الجهاز
والأمثلة على البرامج المخزنة في ذاكرة ROM كثيرة .. هل لاحظت شعارات الشركات في بداية تشغيل الكمبيوتر
مثل كرت الشاشة يظهر لك علامة تجارية مثلا SIS .. هذة البرامج كلها مخزنة في الذاكرة ROM
وللمعلومة : يمكن للهكر أو الكراكر(وهم المختصين في البرمجة العكسية ) الوصول للبرامج المخزنة في ROM !!؟
وتغيير محتوها .. بل وكسر حمايتها ؟ أكيد تريد أمثلة .. تفضل
http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html
والآن كيف تعمل هذة البرامج ... إذا فهمت البويس ستعرف القصة !
=====================================
كيف يعمل البويس ؟
بعد أن يجهز المعالج المسجلات يقوم بتسليم القيادة أو التحكم للنظام بويس
يبدأ التنفيذ في البويس عند السطر 430 ( في معالجات إنتل ) يقوم البويس بعدد من المهام الأساسية
أول مهمة للبويس هي فحص قطع الجهاز :
لا تعتقد أن طريقة فحص الأجهزة أمر معقد ... بكل بساطة يقوم البويس بإرسال إشارة لمنفذ الجهاز
عن طريق الأمر out وبعد ذلك يقوم بإستقبال أي إشارة من الجهاز عن طريق الأمر IN
إذا وصلت أي إشارة من الجهاز معنى ذلك أنة شغال ... وإذا لم تصل أي إشارة معناة خطأ في الجهاز
وهكذا مع كل أجهزة الكمبيوتر .
في نقطة مهمة في الفحص .. أول مايقوم بة البويس فحص كرت الشاشة + منفذ الشاشة
إذا وجد أي خطأ فية ( بمعنى أن الشاشة لا تعمل ولايمكن رؤية أي ملاحظة يكتبها البويس على الشاشة )
يقوم البويس في هذة الحال بإستخدام طريقة الأصوات أو الصافرة لعرض أي خطأ في عملية الفحص
أمثلة لأهل الصيانة :)
قمت بتشغيل الجهاز .. لم يعمل الجهاز .. لم يصدر البويس أي صوت ( على طول الخطأ في البور سبلاي )
لأنة كما ذكرنا. يقوم البويس بإصدار صوت إذا وجد خطأ. وإذا لم يصدر أي صوت معنى ذلك أن التنفيذ
لم يصل إلى البويس .. لاحظ معنى الأصوات في البويس
صافرة واحدة قصيرة = لا توجد أخطاء في عملية الفحص
صافرتين قصيرة = خطأ في كرت الشاشة أو طريقة توصيل الشاشة
وهكذا مع كل الأخطاء
والنقطة الثانية ... إذا كانت الشاشة شغالة ( يتم عرض الأخطاء بطريقة الأرقام )
أخطاء البويس في كلى الحالتين تجدها هنا :
http://www.pchell.com/hardware/beepcodes.shtml
-----------------------------------
بعد أن يقوم البويس بفحص الأجهزة يقوم بإنشاء جدولين
الأول : جدول مقاطعات البويس
عند العنوان 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
ما رأيكم بتشريح مقاطعة إظهار حجم الذاكرة .. لأنها أسهل مقاطعة و أول مقاطعة ينفذها البويس
كل مرة عند تشغيلك لجهازك ترى بأن النظام بويس بعد فحص الأجهزة يعرض لك حجم الذاكرة
هل تريد أن تعرف كيف ينفذها .. عن طريق برمجة المنافذ + البرمجة المباشرة للذاكرة
بهذا الكود :
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 بحجم الذاكرة
هذا هو مفهوم المقاطعة , بعد ذلك يبدأ البويس في بناء الجدول الثاني
جدول معلومات البويس :
وهو جدول يخزن بة البويس معلومات عن الأجهزة (الهاردوير) الموجودة في الجهاز
يبدأ نظام البويس في كتابة معلوماتة عند العنوان 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 = منطقة معلومات الإتصالات بين التطبيقات
وبهذا يكون نظام البويس قد جهز خدماتة وهي المقاطعات وبعد ذلك جهز معلوماتة
بعد ذلك يبحث عن نظام التشغيل لتحميلة إلى الذاكرة وتسليمة مهمة القيادة والتحكم
كيف ... تابــــع الموضوع
