سؤال

أبحث عن معلومات تتعلق بتنفيذ بعض ملحقات وحدة المعالجة المركزية في وحدة نواة. لقد وجدت شيئًا مرتبطًا: http://www.mirrors.docunext.com/lxr/http/source/arch/mips/kernel/unaligned.c في الواقع ، إنه رمز المصدر الوحيد الذي يمكنني العثور عليه حتى قريبًا.

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

هل كانت مفيدة؟

المحلول 4

حسنًا ، بعد قراءة مصدر kernel ، يبدو أن هناك بالفعل دعمًا بسيطًا لهذا الغرض. لا يمكنني حقًا أن أرى مقدار ما يتم استخدامه بالفعل ، ولكن توجد قائمة مرتبطة لتخزين التعليمات المختلفة. إذا كنت قادرًا على الحصول على هذا الأمر فعليًا ، فربما سأغيره إلى Tree-Header الموردة.

إذا كنت أفهم وحدات kernel بشكل صحيح ، فلا يبدو أنه سيكون هناك مشكلة لدعم مضاهاة قابلة للتوصيل.

نصائح أخرى

أعتقد أنه يمكنك القيام بذلك في Userland. تثبيت معالج ل SIGILL مع sigaction() وحدد SA_SIGINFO. الحقل si_code في ال siginfo_t يسمح بالتمييز بين عدة أسباب SIGILL. على سبيل المثال ، محاولة محاكاة التعليمات عندما جاءت الإشارة kill() لا معني له. تشير الحجة الثالثة إلى المعالج إلى هيكل يحتوي على سياق وحدة المعالجة المركزية في وقت الخطأ (انظر الوثائق). من المحتمل أن تقوم بتعديل هذا والعودة من معالج الإشارة ، والتغيرات التي تثير تأثيرها ؛ إذا لم ينجح ذلك ، فحاول setcontext().

من الواضح أنه سيكون أقل كفاءة من فعل ذلك في النواة ، ولكنه أكثر نظافة وأكثر أمانًا.

يمكنك القيام بذلك ، ولكنه مؤلم قليلاً. يجب اعتراض الرموز البائسة غير الصالحة ، لذلك تحتاج إما إلى تعديل معالج التعليمات غير القانوني الحالي ، أو لف المعالج ، وهو قذر ومعقد.

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

لا أعتقد أنه يمكنك إصلاح هذه المشكلة باستخدام وحدة kernel. أعتقد أنك إما بحاجة إلى تشغيل هذا في VM الذي يسمح بالإرشادات المفقودة (سأحاول استخدام Xen) أو إعادة ترجمة الكائن حتى لا يستخدمها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top