عطل الحماية العامة
خطأ الحماية العامة ( GPF ) في معمارية مجموعة تعليمات x86 (ISA) هو خطأ (نوع من المقاطعات ) تُفعَّل بواسطة آليات الحماية المُعرَّفة في معمارية مجموعة التعليمات استجابةً لانتهاك الوصول الناتج عن تنفيذ جزء من التعليمات البرمجية، سواءً في نواة النظام أو في برنامج المستخدم. وُصِفَت هذه الآلية لأول مرة في كتيبات وبيانات معالج Intel 80286 ، الذي طُرِحَ عام 1983؛ كما وُصِفَت أيضًا في القسم 9.8.13 من دليل مبرمج Intel 80386 المرجعي الصادر عام 1986. يُنفَّذ خطأ الحماية العامة كمقاطعة ( رقم المتجه 13 (0Dh)). قد تُصنِّف بعض أنظمة التشغيل بعض الاستثناءات غير المتعلقة بانتهاكات الوصول، مثل استثناءات التعليمات البرمجية غير القانونية ، على أنها أخطاء حماية عامة، حتى وإن لم تكن لها علاقة بحماية الذاكرة. إذا اكتشف المعالج انتهاكًا للحماية، فإنه يُوقف تنفيذ التعليمات البرمجية ويُرسِل مقاطعة خطأ الحماية العامة. في معظم الحالات، يقوم نظام التشغيل بإزالة العملية المعطلة من قائمة التنفيذ، ويُعلم المستخدم، ثم يُواصل تنفيذ العمليات الأخرى. مع ذلك، إذا فشل نظام التشغيل في رصد خطأ الحماية العامة، أي إذا حدث انتهاك آخر للحماية قبل عودة نظام التشغيل من مقاطعة خطأ الحماية العامة السابقة، فإن وحدة المعالجة المركزية تُشير إلى خطأ مزدوج ، مما يُوقف نظام التشغيل. في حال حدوث خطأ آخر ( خطأ ثلاثي )، تعجز وحدة المعالجة المركزية عن التعافي؛ فمنذ معالج 80286، تدخل وحدة المعالجة المركزية في حالة توقف خاصة تُسمى "إيقاف التشغيل"، والتي لا يُمكن الخروج منها إلا من خلال إعادة ضبط الجهاز . يتميز جهاز IBM PC AT ، وهو أول نظام متوافق مع أجهزة الكمبيوتر الشخصية ويحتوي على معالج 80286، بأجهزة ترصد حالة إيقاف التشغيل وتُعيد ضبط وحدة المعالجة المركزية تلقائيًا عند حدوثها. جميع الأجهزة اللاحقة لجهاز PC AT تفعل الشيء نفسه، لذا في أجهزة الكمبيوتر الشخصية، يتسبب الخطأ الثلاثي في إعادة ضبط النظام فورًا.
سلوك محدد
مايكروسوفت ويندوز
في نظام التشغيل مايكروسوفت ويندوز ، يظهر خطأ الحماية العامة بلغات مختلفة، وذلك حسب إصدار المنتج:
| نظام التشغيل | رسائل الخطأ | ملحوظات |
|---|---|---|
| ويندوز 3.0 | خطأ في التطبيق لا يمكن إصلاحه إنهاء التطبيق الحالي. | [ 1 ] |
| ويندوز 3.1x | تسبب [اسم البرنامج] في حدوث خطأ حماية عام في الوحدة [اسم الوحدة] في [عنوان الذاكرة]. | قد تظهر رسالة الخطأ هذه (بنفس تصميمها) في إصدارات لاحقة (95 و98 وMe) في حالات نادرة. كما يظهر نص هذا الخطأ في الإصدارات 95 و98 وMe عند النقر على زر "التفاصيل" أو الضغط على Alt+D، مع إضافة معلومات حول السجلات والبايتات في CS:EIP وتفريغ المكدس. |
| ويندوز 95 ويندوز 98 | لقد قام هذا البرنامج بعملية غير قانونية وسيتم إغلاقه. إذا استمرت المشكلة، فاتصل ببائع البرنامج. | أحيانًا، يظهر خطأ يطلب منك إغلاق جميع البرامج ثم إعادة تشغيل جهاز الكمبيوتر، خاصةً إذا كانت المشكلة خطيرة أو كان النظام غير مستقر، وكان عنوان الإرجاع يشير إلى ملف DLL خاص بنظام ويندوز أو عمليات نظام أخرى. قد تظهر هذه الرسالة أيضًا إذا تعذر تحديد البرنامج المُسبب للمشكلة بسهولة. عند تثبيت مصحح الأخطاء، ستجد زر "تصحيح الأخطاء" بين زري "إغلاق" و"التفاصيل". |
| ويندوز إن تي 4.0 ويندوز 2000 | لقد تسبب [اسم البرنامج] في حدوث أخطاء وسيتم إغلاقه بواسطة نظام التشغيل Windows. ستحتاج إلى إعادة تشغيل البرنامج. يتم إنشاء سجل الأخطاء. | |
| ويندوز مي | تسبب [اسم البرنامج] في حدوث خطأ في [اسم الوحدة]. سيتم إغلاق [اسم البرنامج] الآن. إذا استمرت المشاكل، فحاول إعادة تشغيل جهاز الكمبيوتر الخاص بك. | عند تثبيت برنامج تصحيح الأخطاء، يوجد زر "تصحيح الأخطاء" أسفل زر "إغلاق". ويمكن الاطلاع على التفاصيل بالضغط على Alt+D وعبر ملف faultlog.txt. |
| ويندوز إكس بي، ويندوز سيرفر 2003، ويندوز سيرفر 2003 آر 2 | واجه [اسم البرنامج] مشكلةً ما، ويجب إغلاقه. نأسف للإزعاج. إذا كنت منشغلاً بشيء ما، فقد تضيع المعلومات التي كنت تعمل عليها. [...] للحصول على مزيد من المعلومات حول هذا الخطأ، انقر هنا . | كما توفر رسالة الخطأ خيار إرسال تفاصيل الخطأ إلى مايكروسوفت لتحليلها. |
| ويندوز فيستا والإصدارات الأحدث، باستثناء ويندوز 10 وويندوز سيرفر 2008 والإصدارات الأحدث | [اسم البرنامج] توقف عن العمل. حدث خللٌ ما تسبب في توقف البرنامج عن العمل بشكل صحيح. سيقوم نظام ويندوز بإغلاق البرنامج وإعلامك في حال توفر حل. | بشكل افتراضي، سيرسل نظام التشغيل Windows تفاصيل الخطأ إلى Microsoft لتحليلها، ولكن يمكن تهيئة النظام إما لعدم الإرسال، أو لسؤال المستخدم عما يجب فعله في كل مرة. |
| ويندوز 10 |
لم يعد نظام التشغيل Windows 11 يعرض رسائل خطأ لأخطاء الحماية العامة؛ في حالة حدوث خطأ، يتم إغلاق البرنامج ببساطة.
في أنظمة التشغيل ويندوز 95 و98 وMe، تظهر رسالة خطأ بديلة، تُستخدم غالبًا مع برامج ويندوز 3.x: "حدث خطأ في برنامجك. لمتابعة العمل، انقر فوق "تجاهل" واحفظ عملك في ملف جديد. للخروج من هذا البرنامج، انقر فوق "إغلاق". ستفقد المعلومات التي أدخلتها منذ آخر عملية حفظ." يؤدي النقر فوق "إغلاق" إلى ظهور إحدى رسائل الخطأ المذكورة أعلاه، وذلك حسب إصدار ويندوز. أحيانًا يؤدي النقر فوق "تجاهل" إلى ظهور هذه الرسالة أيضًا.
يونكس
في نظام لينكس وأنظمة يونكس الأخرى ، يتم الإبلاغ عن الأخطاء بشكل منفصل (على سبيل المثال، خطأ تجزئة الذاكرة).
أخطاء في الذاكرة
في أخطاء الذاكرة، يصل البرنامج المُعطّل إلى ذاكرة لا ينبغي له الوصول إليها. ومن الأمثلة على ذلك:
- محاولة الكتابة إلى جزء من الذاكرة مخصص للقراءة فقط
- محاولة تنفيذ بايتات في الذاكرة غير مصنفة كتعليمات
- محاولة قراءة بايتات البيانات في الذاكرة التي تم تحديدها كتعليمات
- تعارضات أخرى متنوعة بين تسمية جزء من الذاكرة واستخدامه
مع ذلك، تُطبّق العديد من أنظمة التشغيل الحديثة آليات التحكم في الوصول إلى الذاكرة عبر الترحيل بدلاً من التجزئة، لذا غالباً ما يتم الإبلاغ عن مراجع الذاكرة غير الصالحة في أنظمة تشغيل مثل ويندوز عبر أخطاء الصفحات بدلاً من أخطاء الحماية العامة. توفر أنظمة التشغيل عادةً طبقة تجريدية (مثل معالجة الاستثناءات أو الإشارات) تُخفي آلية المعالج الداخلية المستخدمة لإحداث خطأ في الوصول إلى الذاكرة من البرنامج، وذلك بهدف توفير واجهة قياسية للتعامل مع أنواع مختلفة من حالات الخطأ التي يُسببها المعالج.
فيما يتعلق ببنية x86، فإن أخطاء الحماية العامة خاصة بالحماية القائمة على التجزئة عند الوصول إلى الذاكرة. ومع ذلك، تُستخدم أخطاء الحماية العامة أيضًا للإبلاغ عن انتهاكات حماية أخرى (إلى جانب انتهاكات الوصول إلى الذاكرة) عند استخدام الترحيل، مثل استخدام تعليمات غير متاحة من مستوى الامتياز الحالي (CPL).
على الرغم من أنه من الممكن نظرياً أن يستخدم نظام التشغيل كلاً من الترحيل والتجزئة، إلا أن أنظمة التشغيل الشائعة تعتمد في الغالب على الترحيل لتلبية الجزء الأكبر من احتياجاتها للتحكم في الوصول إلى الذاكرة.
أخطاء الامتيازات
توجد بعض الميزات في الحاسوب مخصصة للاستخدام الحصري لنظام التشغيل . إذا حاول برنامج ليس جزءًا من نظام التشغيل استخدام إحدى هذه الميزات، فقد يتسبب ذلك في حدوث خلل في الحماية العامة.
بالإضافة إلى ذلك، توجد مواقع تخزين محجوزة لكل من نظام التشغيل والمعالج نفسه. ونتيجةً لحجزها، فهي للقراءة فقط، وأي محاولة لكتابة بيانات إليها بواسطة برنامج غير مصرح له ستؤدي إلى حدوث خطأ.
الأسباب التقنية للأعطال
يتم رفع أخطاء الحماية العامة بواسطة المعالج عند مواجهة تعليمات محمية تتجاوز مستوى الإذن للمهمة قيد التنفيذ حاليًا، إما لأن برنامجًا في وضع المستخدم يحاول تنفيذ تعليمات محمية، أو لأن نظام التشغيل قد أصدر طلبًا من شأنه أن يضع المعالج في حالة غير محددة.
تتولى أنظمة التشغيل الحديثة اكتشاف ومعالجة أعطال الحماية العامة. عمومًا، إذا كان العطل ناتجًا عن برنامج يعمل في وضع المستخدم، يتم إنهاء هذا البرنامج. أما إذا كان العطل ناتجًا عن برنامج تشغيل أساسي للنظام أو عن نظام التشغيل نفسه، فعادةً ما يحفظ نظام التشغيل معلومات التشخيص إما في ملف أو على الشاشة ويتوقف عن العمل. إما أن يعيد تشغيل الكمبيوتر أو يعرض شاشة خطأ ، مثل شاشة الموت الزرقاء أو خطأ تعطل النواة .
تجاوزت حدود القطاعات
يمكن تجاوز حدود القطاعات:
- مع سجلات مقطع التعليمات البرمجية (CS) أو مقطع البيانات (DS) أو ES أو FS أو GS (مقطع إضافي)؛ أو
- الوصول إلى جداول الواصفات مثل جدول الواصفات العالمي (GDT) وجدول واصفات المقاطعة (IDT) وجدول الواصفات المحلي (LDT).
تم انتهاك أذونات القطاع
يمكن انتهاك أذونات الوصول إلى القطاعات عن طريق:
- الانتقال إلى أجزاء غير قابلة للتنفيذ
- الكتابة إلى أجزاء التعليمات البرمجية، أو أجزاء للقراءة فقط
- قراءة المقاطع القابلة للتنفيذ فقط
تم تحميل أجزاء بشكل غير قانوني
قد يحدث هذا عندما:
- يتم تحميل مقطع المكدس (SS) بمحدد مقطع لقراءة مقطع فقط، أو مقطع قابل للتنفيذ، أو مقطع فارغ، أو مقطع ذي امتياز وصف لا يتطابق مع الامتياز الحالي في CS
- مقطع برمجي (CS) محمل بمحدد مقطع لبيانات أو نظام أو مقطع فارغ
- SS أو DS أو ES أو FS أو GS هي مقاطع محملة بمحدد مقطع لنظام معين
- SS، DS، ES، FS، أو GS هي مقاطع يتم تحميلها بمحدد مقطع لجزء من التعليمات البرمجية للتنفيذ فقط
- الوصول إلى الذاكرة باستخدام سجلات DS أو ES أو FS أو GS، عندما تحتوي على مُحدِّد فارغ.
التبديل
قد تحدث أعطال في بنية مقطع حالة المهمة (TSS) عندما:
- الانتقال إلى مهمة مشغولة أثناء المكالمة أو تعليمات القفز
- الانتقال إلى مهمة متاحة أثناء تنفيذ تعليمة العودة من المقاطعة (IRET)
- باستخدام محدد مقطع على مفتاح يشير إلى واصف TSS في LDT
متنوع
تشمل الأسباب الأخرى لأعطال الحماية العامة ما يلي:
- محاولة الوصول إلى معالج المقاطعة/الاستثناء من وضع 8086 الافتراضي عندما يكون مستوى امتياز واصف مقطع التعليمات البرمجية للمعالج (DPL) أكبر من الصفر
- محاولة كتابة الرقم واحد في الأجزاء المحجوزة من CR4
- محاولة تنفيذ تعليمات ذات امتيازات عندما لا يكون مستوى الامتياز الحالي (CPL) صفرًا
- محاولة تنفيذ تعليمة واحدة بطول أكبر من 15 بايت (ربما عن طريق إضافة بادئات زائدة إلى التعليمة) [ 2 ]
- الكتابة إلى بت محجوز في تعليمات MSR
- الوصول إلى بوابة تحتوي على محدد مقطع فارغ
- تنفيذ مقاطعة برمجية عندما يكون مستوى التحكم في المقاطعة (CPL) أكبر من مستوى التحكم في المقاطعة (DPL) المحدد لبوابة المقاطعة.
- لا يشير محدد المقطع في بوابة الاستدعاء أو المقاطعة أو المصيدة إلى مقطع التعليمات البرمجية
- انتهاك قواعد الامتياز
- تمكين الترحيل مع تعطيل الحماية
- بالرجوع إلى جدول وصف المقاطعة بعد مقاطعة أو استثناء ليس مقاطعة أو مصيدة أو بوابة مهمة
- Legacy SSE : معامل الذاكرة غير محاذٍ لـ 16 بايت.
مراجع
- ↑ "استكشاف أخطاء "خطأ التطبيق غير القابل للاسترداد" في DrWatson وإصلاحها" . الدعم . مايكروسوفت . 27 فبراير 2014.
- ↑ "الصفحة 223" . تم الاطلاع عليها بتاريخ 24-09-2023 .
للمزيد من القراءة
- دليل مطوري برامج معمارية إنتل - المجلد 3: برمجة النظام
- تقنية نظام التشغيل
- أخطاء الحاسوب
