سؤال

إذا كنت القراءة / الكتابة / القفز إلى أي عنوان ummapped.

.text
    .global _start
_start:
     movl   $1,%edx
     jmp     *%edx

وهذا يؤدي إلى خطأ تجزئة.

وأتساءل، ما هو الجزء الفعلي للنظام (النواة) أن اعتراض يقرأ / يكتب إلى عناوين تفاصيلها (كيف؟) ويلقي "وضع المستخدم" إشارة؟

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

المحلول

وتدفق كل شيء من الجدول أبنية الفخ. وعادة ما تسمى هذه entry.S (تقسيم على إلى x86 بين entry_32 وentry_64.S) ولها ارتباط المجمع أن يقوم عدد من الأمور (اعتمادا على التكوين) قبل أن يتوجه إلى رمز C النواة المناسبة.

وحتى الوصول إلى ذاكرة غير صالح يجب أن تدخل عن طريق إما page_fault أو general_protection وربما ينتهي به force_sig_info قبل أن قائمة الانتظار في نهاية المطاف إلى الفضاء المستخدم في send_signal (نواة / signal.c).

نصائح أخرى

ويتم تنفيذ ذلك للهندسة المعمارية المختلفة. على سبيل المثال، على x86 و يمكنك التحقق من مصدر في:

do_page_fault: linux/arch/x86/mm/fault.c  

في رقائق باور ليست "كتاب E" (على سبيل المثال، ورقائق الأخيرة للأنظمة المدمجة)، ويبدأ خطأ تجزئة مع استثناء 0x300 (بيانات) أو 0x400 (للحصول على تعليمات.) تم تعيين علامة وضع المستخدم / مشرف إلى المشرف، يتم تشغيل MMU قبالة، وحدة المعالجة المركزية يقفز لمعالجة 0x300 أو 0x400، مما يتيح التحكم إلى نظام التشغيل.

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