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

النمط الحقيقي والنمط المحمي

مغلق
بدأه أنس عبد الله في 9 أغسطس 2001 · 8 رد · 2,548 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الأعزاء

من المعلوم أن أنظمة عمل المعالجات هي النمط المحمي Protected mode والنمط الحقيقي Real mode

السؤال هو:

كيف يتم الانتقال من النمط الحقيقي إلى النمط المحمي،، ولماذا لا يسمح لنا النمط المحمي بتنفيذ المقاطعات التي اعتدنا عليها في بيئة الدوس؟؟؟

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

فوق نظام التشغيل وتشغيل النمط الحقيقي ضمن بيئة ويندوز 2000 ؟

وهل ويندوز XP يمنعنا بتاتا من النمط الحقيقي كما فعل شقيقه الأصغر ويندوز 2000؟؟؟؟!!!

#2

السلام عليكم..

أسئلتك كثيرة يا أخ أنس، :) سأحاول الإجابة على ما أقدر عليه.. بالواقع لم أستخدم الأسمبلى منذ حوالي سنة! ولذلك بدأت أصدأ قليلا!!

>كيف يتم الانتقال من النمط الحقيقي إلى النمط المحمي،،

يتم هذا عن طريق تغيير flag من الflags للمعالج EFlags register. لا أذكر اسمه، ولكن لا يهم.

يجب عليك قبل أن تقوم بالتحويل، أن تقوم بضبط الsegments بحيث يستمر التنفيذ بدون مشاكل. عموما، كل هذه التفاصيل ليست هامة جدا، لأنه دائما ما سيقوم manager معين بنقلك إلى protected mode (مثل dpmi، أو dos4gw في حالة الدوس، أو ويندوز نفسه، في حالة الويندور)

>ولماذا لا يسمح لنا النمط المحمي بتنفيذ المقاطعات التي اعتدنا عليها في بيئة الدوس؟؟

لأن المقاطعات ذات الأرقام الصغيرة صارت محجوزة لعمل المعالج (مثلا مقاطعات تحدث عند القسمة على صفر، أو طلب صفحة غير موجودة، وهكذا!). وبالتالى لن يمكنك مناداتها بنفسك. هناك عدة حلول لهذا الموضوع، منها أن تعود إلى ال real mode اولا، ثم تنادي المقطعة ثم ترجع إلى protected mode. عموما هذه الحركة هي - كما هو واضح- خطأ في التصميم من intel. كان يجب عليهم مراعاة التوافق العكسي.

>وهل يمكن أن يشرح أحد لنا كيف يتم تنفيذ تلك المقاطعات ضمن نافذة الدوس في نظام الويندوز مع أن نظام الويندوز يعتمد على النمط المحمي؟؟

لست متأكدا بنسبة 100%، ولكن السبب أن هذه البرامج تعمل في نمط ثالث اسمه virtual 86 تقريبا (لا أذكر الاسم بالضبط). هذا النمط يجعل برامج الreal mode تعمل في الprotected mode بدون أن تشعر أن هذا protected mode

>وهل يمكن بواسطة تعليمات برمجية القفز

فوق نظام التشغيل وتشغيل النمط الحقيقي ضمن بيئة ويندوز 2000 ؟

سأحتاج لبعض المراجعة قبل أن أجيب على هذا السؤال، ولكن ارتجالا أقول لا أعتقد أن هذا ممكن، لأن البرامج التي تعود من protected mode إلى real mode لابد أن يكون لديها privilige 0 (لست متأكدا 100%) وهذه غير متاحة للتطبيقات وإنما لنظام التشغيل

#3

شكرا لك أخي الكريم

وأنا في انتظار المزيد من حديثك

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

#4

السلام عليكم...

معذرة على التأخر في الرد! :)

في الواقع لم أستطع أن أعثر على المراجع التي تعلمت منها على النت الأن. لأني أحضرتها منذ زمن طويل جدا. (3 سنوات تقريبا! والأن كل المواقع أغلقت!! :))

عموما، لقد بحثت عندي على الملفات نفسها، وأرسلتها إليك على الemail (وهذا هو سر التأخر!)

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

والسلام عليكم ورحمة الله...

msdawy

#5

السلام عليكم

وكل عام وانتم بخير

كل يوم يزيد اعجابي بمنتداكم المميز وبدأت فعلا افكر في تعلم هذه اللغة الرائعة...

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

اقتباس
>وهل يمكن أن يشرح أحد لنا كيف يتم تنفيذ تلك المقاطعات ضمن نافذة الدوس في نظام الويندوز مع أن نظام الويندوز يعتمد على النمط المحمي؟؟

لست متأكدا بنسبة 100%، ولكن السبب أن هذه البرامج تعمل في نمط ثالث اسمه virtual 86 تقريبا (لا أذكر الاسم بالضبط). هذا النمط يجعل برامج الreal mode تعمل في الprotected mode بدون أن تشعر أن هذا protected mode

ما معنى هذا بالضبط...هل يمكن ان نتجاوز الوندوز في هذه الحالة .. بالطبع لا يمكن ولكن ممكن توضيح

ومشكورين مقدما

#6

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

#7

السلام عليكم,

هدا فعلا موضوع مهم وقد سبق وأن تطرقنا لمختلف هده الأسئلة سابقا ويمكن أن أزيد بعض التوضيحات .

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

بعد ظهور الوندوز التي تشتغل في النظام المحروس كان من بين المشاكل كيف سيتم تشغيل برامج الدوس وهدا كان شيء ضروري أن تشتغل هده البرامج لأنها كانت متوفرة وكدلك كانت الأعاب كلها متوفرة في هدا الميدان وحسب الضرورة التجارية كان هدا هدفا لا بد منه. ولهدا اقترح المبرمجون أن كل برنامج دوس سيشتغل في كمبيوتر خيالي إد سيوفر له النظام كل ما يحتاجه والبرنامج سيشعر كأنه الوحيد الدي يشتغل وكدلك يشعر أنه يتحكم مباشرة مع مختلف الأدوات لأن هدا من طبيعة هدا النوع من البرامج إلا أنه في الحقيقة يتعامل مع واجهات تمنح للبرنامج أدوات وهمية وأضن أن هدا ربما قد ضيع شيئا ما من مؤهلات النظام الجديد. وكل ما نفتح نافدة دوس فإن نضام الوندوز يقوم بإنشاء VM جديدة أو ما يسمى ب Virtual Machine والمسؤول عن هدا هو برنامج vmm32 أو Virtual Machine Manager وهدا هو الدي سيكون مسؤولا عن مختلف هده النوافد.

أما عن السؤال إن كان ممكنا أن نستعمل المقاطعات في بيئة الوندوز فهدا ممكن وغير ممكن كما دكرت من قبل.فمثلا يمكن أن نستعمل المقاطعة 3 بدون مشكل . لكن عموما كل المقاطعات التي تتطلب الداكرة لا يمكن أن نستعملها أو إن صح القول مباشرة.لكن للبرنامج vmm32 عدة خدمات Service يمكن أن نستعملها لنحقق الهدف.وهدا لن يكون مسموحا لأي برنامج أن يقوم بهده العملية لأن البرنامج يجب أن يتوفر على الصلاحيات التي تمكنه من عمل دلك. وهنا سأركز على نضام وندوز 98 الدي برمجت وجربت في ه هده الأشياء.لإستعمال مختلف المقاطعات الممنوعة في النظام المحمي يجب أن تكون لدينا صلاحية النظام أو نقول الصلاحية الكبرى ولهدا يتوجب علينا أن نكون في الحلقة 0 وللمرور لهده الحلقة في الوندوز 98 هناك عدة طرق. فالطريقة البديهية هي أن نقوم ببرمجة برنامج من نوع VXD ونعلم أن هدا النوع من البرامج يشتغل مباشرة في الحلقة 0 ومن هنا يمكن أن نستدعي المقاطعات باستعمال خدمات الدرايفرات الأخرى مثل vmm ورغم أننا لن نستدعيها كما في الدوس يعني مثلا int 25 وإنما هناك خدمات مثل SimulateInt أو ExecuteInt ورغم أن الأسماء مختلفة ولكن النتيجة تكون هي نفسها. ولكن إدا كانت المقاطعة تستدعي الداكرة فهنا يجب أن نسعمل خدمات إضافية لنتمكن من توفير داكرة من نوع دوس قبل أن نستدعي المقاطعة وبعد الإستدعاء إدا كانت تعطينا نتيجة ما عن طريق الداكرة فهنا يجب مرة أخرى تحويل هده الداكرة التي هي من نوع الدوس إلى داكرة من نوع النمط الحقيقي وهكدا. والمثال الدي قد يجسم هدا هو مثلا محاولة قراءة سكتور معين من قرص الفلوبي مثلا. فهنا يجب أن نعطي للمقاطعة داكرة معينة وبعد عمل المقاطعة تعطينا النتيجة بعد ملئ هده الداكرة.

هدا بتلخيص وإدا كان من يهمه الأمر يمكن أن نلج الميدان ببعض الأمثلة.

إلى اللقاء.

#8

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

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

ماهو الفرق بين ذاكرة دوس و ذاكرة النمط الحقيقي؟

#9

السلام عليكم,

بخلاصة الفرق يكمن في أن في الدوس نتعامل مع السكمنت والأوفسيت لتعريف أو تحديد مكان ما في الذاكرة . فلو أردت معطيات يجب أن أحدد سكمنت المعطيات قبل أن أعطي العنوان مثلا قد تكون قطعة من الكود في العنوان المركب التالي 1234:4125 وقد تكون معطيات في 3256:2810 وهذا راجع إلى سعة السكمنت التي لا تتعدى ما قيمته حوالي 65000 بايت أو 65 كيلو وهذا قد يكون غير كافي للبرامج بينما في النمط المحمي فعندنا الذاكرة على شكل 32 بت وتكون سعتها حوالي 4 جيغا ولهذا لا نحتاج إل تقنية السكمنت للوصول إلى عنوان ما في الذاكرة والكل يبدو كما لو الجميع يوجد في سكمنت واحد فقد يكون هنا مثلا قطعة من الكود في 501020 و معطيات في 806040 وهنا يظهر لنا أن فيه مساحة كافية لكل البرامج أو على الأقل التي موجودة في وقتنا هذا. وقد يتساؤل البعض لمذا قد نشاهد الذاكرة في النمط المحمي على شكل مثلا 178:504010 وهذا يشبه تقنية السكمنت وهنا هذا ليس له علاقة بالسكمنت وعلى سبيل المثال هنا القيمة 178 هي تعرف بما يسمى ب Selector وهي معطيات تسمح لنا بتحديد الذاكرة الحقيقية لأن كما نعرف في النمط المحمي فنحن نتعامل مع الذاكرة الوهمية وإلا كيف ستكون سعة الذاكرة 4 جيغا علما أن في أحسن الاحوال لدينا ذاكرة حقيقية سعتها حوالي 64 ميغا أو 522 ميغا.

إلى اللقاء.

هذا الموضوع مغلق.

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