خطأ F00F في معالج بنتيوم

معالج إنتل بنتيوم

يُعدّ خطأ Pentium F00F عيبًا تصميميًا في بنية P5 الدقيقة من إنتل ، وهو موجود في وحدات المعالجة المركزية المبنية عليها، بما في ذلك Pentium الأصلي و Pentium MMX و Pentium OverDrive . تم اكتشافه عام 1997، وقد يؤدي إلى توقف المعالج عن العمل حتى إعادة تشغيل الكمبيوتر. تم تجاوز هذا الخطأ من خلال تحديثات لاحقة لنظام التشغيل . قامت إنتل في النهاية بإصلاح هذا العيب في معالجاتها من فئة B2 ، والتي تم إصدارها حوالي عام 1999 .

الاسم هو اختصار لـ F0 0F C7 C8، وهو الترميز الست عشري لإحدى التعليمات المعيبة . [ 1 ] وبشكل أكثر رسمية، يُطلق على هذا الخطأ اسم خطأ تعليمة CMPXCHG8B ذات المعامل غير الصالح والمقفل . [ 2 ]

وصف

في بنية x86 ، يُمثل تسلسل البايتات F0 0F C7 C8التعليمة lock cmpxchg8b eax(مقارنة وتبديل مُؤمَّن لثمانية بايتات في المسجل EAX). ينطبق هذا الخلل أيضًا على رموز العمليات التي تنتهي بـ `--` C9، CFوالتي تُحدد معاملات مسجلات أخرى غير EAX. F0 0F C7 C8لا تتطلب هذه التعليمة أي امتيازات خاصة .

ترميز هذه التعليمات غير صالح. cmpxchg8bتقارن هذه التعليمات القيمة الموجودة في المسجلين EDX وEAX بقيمة 8 بايت في موقع ذاكرة. ولكن في هذه الحالة، تم تحديد مسجل بدلاً من موقع ذاكرة، وهذا غير مسموح به.

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

نظراً لانتشار معالجات إنتل الدقيقة، اعتُبر وجود هذه التعليمات ذات الامتيازات المفتوحة مشكلة خطيرة آنذاك. واستجاب مُصنّعو أنظمة التشغيل بتطبيق حلول بديلة لكشف هذه الحالة ومنع حدوث العطل. [ 3 ] ظهرت معلومات عن هذا الخلل لأول مرة على الإنترنت في أو حوالي 8 نوفمبر 1997. [ 4 ] وبما أن خلل F00F أصبح معروفاً على نطاق واسع، يُستخدم المصطلح أحياناً لوصف عيوب تصميم الأجهزة المماثلة، مثل خلل غيبوبة Cyrix .

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

حلت خطوة B2 هذه المشكلة لمعالجات بنتيوم من إنتل. [ 2 ]

يمكن اعتبار تعليمة F00F مثالاً على تعليمة إيقاف وإشعال النار (HCF).

حلول بديلة

على الرغم من أن الحل النهائي لهذه المشكلة تطلب نوعًا من مراجعة الأجهزة/البرامج الثابتة، فقد طُرحت حلول بديلة في ذلك الوقت [ 1 ] منعت استغلال هذه المشكلة في شن هجوم حجب الخدمة على الجهاز المتأثر. واعتمدت جميع هذه الحلول على كسر نمط الوصول الخاطئ إلى ناقل البيانات المسؤول عن توقف المعالج. تطلبت حلول إنتل المقترحة (وبالتالي "الرسمية") إعداد جدول مُعرّفات المقاطعات بطريقة غير طبيعية أجبرت المعالج على إصدار خطأ صفحة وسيط قبل أن يتمكن من الوصول إلى الذاكرة التي تحتوي على مُعرّف استثناء رمز العملية غير المُعرّف . وقد تبيّن أن عمليات الوصول الزائدة هذه إلى الذاكرة كافية لكي تتخلى واجهة ناقل البيانات عن شرط القفل الذي كان السبب الجذري للخلل.

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

اقترح الحل الرسمي الثاني من إنتل الإبقاء على جميع الصفحات في الذاكرة، مع جعل الصفحة الأولى للقراءة فقط. وبما أن التعليمة غير القانونية الأصلية كان من المفترض أن تُصدر دورة كتابة في الذاكرة، فإن هذا يكفي لإجبار معالج أخطاء الصفحات على التدخل مرة أخرى. يتميز هذا الحل بأن التعديلات المطلوبة على معالج أخطاء الصفحات طفيفة جدًا مقارنةً بالتعديلات المطلوبة في الحل الأول؛ إذ يكفي ببساطة إعادة التوجيه إلى معالج الاستثناءات غير المُعرَّفة عند الاقتضاء. مع ذلك، يتطلب هذا الحل منع نظام التشغيل نفسه من الكتابة إلى صفحات القراءة فقط (عن طريق ضبط علامة معالج عامة)، وليست جميع أنوية النظام مصممة بهذه الطريقة؛ بل إن الأنوية الأحدث مصممة بها، لأن هذه هي الآلية الأساسية نفسها المستخدمة لتنفيذ النسخ عند الكتابة .

تم اقتراح حلول بديلة أخرى غير الحلول الرسمية من إنتل؛ وفي كثير من الحالات، أثبتت هذه الحلول فعاليتها وسهولة تطبيقها. [ 1 ] أبسط هذه الحلول هو ببساطة وضع علامة "غير قابل للتخزين المؤقت" على الصفحة التي تحتوي على مُعرّفات المقاطعات. مرة أخرى، يبدو أن دورات الذاكرة الإضافية التي يُجبر المعالج على المرور بها لجلب البيانات من ذاكرة الوصول العشوائي (RAM) في كل مرة يحتاج فيها إلى استدعاء معالج استثناءات، هي كل ما يلزم لمنع المعالج من التوقف. في هذه الحالة، لم يكن هناك حاجة إلى أي تعديل على معالج الاستثناءات. وعلى الرغم من عدم ضرورة ذلك تمامًا، فقد تم تطبيق نفس تقسيم جدول مُعرّفات المقاطعات في هذه الحالة، مع وضع علامة "غير قابل للتخزين المؤقت" على الصفحة الأولى فقط. كان ذلك لأسباب تتعلق بالأداء، حيث يمكن للصفحة التي تحتوي على معظم المُعرّفات (والتي تُستخدم بشكل متكرر في الواقع) أن تبقى في ذاكرة التخزين المؤقت.

لأسباب غير معروفة، لم تُعتمد هذه الحلول البديلة غير الرسمية من قِبل شركة إنتل. ربما كان يُشتبه في أنها قد لا تعمل مع جميع إصدارات المعالجات المتأثرة.

انظر أيضاً

مراجع

  1. 1 2 3 كولينز، روبرت ر. (1998-05-01). "خطأ بنتيوم F00F" . مجلة دكتور دوبز . تم الاسترجاع في 27-07-2015 .
  2. 1 2 "81. معامل غير صالح مع تعليمة CMPXCHG8B المقفلة". تحديث مواصفات معالج بنتيوم، الإصدار 041 [ تاريخ الإصدار يناير 1999 ] (ملف PDF) . سانتا كلارا، كاليفورنيا، الولايات المتحدة الأمريكية: شركة إنتل . 1998. الصفحات 51 وما بعدها . رقم الطلب 242480-041. مؤرشف من الأصل (ملف PDF) بتاريخ 2016-03-04 . تم الاسترجاع بتاريخ 2015-07-27 . المشكلة: تقارن تعليمة CMPXCHG8B قيمةً بحجم 8 بايت في EDX وEAX مع قيمة بحجم 8 بايت في الذاكرة (معامل الوجهة). معاملات الوجهة الصالحة الوحيدة لهذه التعليمة هي معاملات الذاكرة. إذا كان مُعامل الوجهة عبارة عن سجل، فيجب على المعالج توليد استثناء رمز عملية غير صالح، وإيقاف تنفيذ تعليمة CMPXCHG8B، ثم يقوم المعالج بتنفيذ معالج استثناء رمز العملية غير الصالح. يحدث هذا الخطأ عند استخدام البادئة LOCK مع تعليمة CMPXCHG8B مع مُعامل وجهة (غير صالح) من نوع سجل. في هذه الحالة، قد لا يبدأ المعالج بتنفيذ معالج استثناء رمز العملية غير الصالح لأن ناقل البيانات مُقفل، مما يؤدي إلى توقف النظام. التبعات: إذا تم استخدام مُعامل وجهة (غير صالح) من نوع سجل مع تعليمة CMPXCHG8B والبادئة LOCK، فقد يتوقف النظام. لا تتلف أي بيانات في الذاكرة، ويمكن للمستخدم إعادة ضبط النظام للعودة إلى التشغيل الطبيعي. تجدر الإشارة إلى أن تسلسل التعليمات البرمجية غير الصالحة اللازم لحدوث هذا الخطأ لا يتم توليده عادةً أثناء البرمجة، كما أن Intel لا تعرف أن مثل هذا التسلسل يتم توليده بواسطة البرامج التجارية المتاحة. ينطبق هذا التصحيح فقط على معالجات بنتيوم، ومعالجات بنتيوم المزودة بتقنية MMX، ومعالجات بنتيوم أوفر درايف، ومعالجات بنتيوم أوفر درايف المزودة بتقنية MMX. أما معالجات بنتيوم برو، ومعالجات بنتيوم II، ومعالجات i486™ والإصدارات الأقدم فلا تتأثر بهذا التصحيح. 
  3. "torvalds/linux" . GitHub . مؤرشف من الأصل بتاريخ 23-06-2022 . تم الاطلاع عليه بتاريخ 09-07-2021 .
  4. يحوم، أونو؛ وآخرون . (1997/11/08). "Nieuwe Intel Pentium Bug" [ Intel الجديد... ] (سلسلة أخبار، 38 مشاركة لـ 22 مؤلفًا) (باللغة الهولندية). مجموعة الأخبار : nl.comp.hardware . تم الاسترجاع 2015/07/27 . بما أننا لا نتحدث عن هذا الأمر، فهو خطأ Intel Pentium BUG الجديد. Daarddoor عبارة عن مساحة مستخدم مخصصة لـ Pentium، وقد يتم تعطلها باستخدام تعليمات واحدة. يجب أن يكون هناك خطأ في استخدام Intel Pentium وIntel Pentium MMX. لا توجد أخطاء في Intel Pentium Pro، وIntel Pentium II، ورقائق AMD، وCyrix، وDeze bug، وهي جميعها لمجموعة من الأشخاص في نظام متعدد المستخدمين (shell) يعمل على Intel Pentium. قد يتعطل نظام التشغيل لأي مستخدم...  

للمزيد من القراءة