سؤال

ولقد سعيت لننظر حولنا في شفرة المصدر لينكس لهيكل / ويسترن يهمني أن تتوافق مع PTE على النظام إلى x86 مع PAE المعوقين. حتى الآن لقد وجدت فقط ما يلي في قوس / إلى x86 / وتشمل / ASM / page_32.h

typedef union {
        pteval_t pte;
        pteval_t pte_low;
} pte_t;

وأنا قليلا الخلط منذ الآن لدي انتل الدليل المرجعي المجلد 3A مفتوحة أمامي ولا شيء في هذا الاتحاد يتوافق مع عشرات الحقول غريبة موجودة في PTE كما يوضح الدليل.

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

وتحرير: لدي مصدر 2.6.29 معي

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

المحلول

ووpteval_t يعامل مجرد إدخال جدول الصفحة باعتبارها النقطة المعتمة - على بنية كنت تبحث في، انها مجرد قيمة غير موقعة 32 بت

.

ويتم الوصول إلى الحقول داخل PTE باستخدام مشغلي المختصة بالبت وأقنعة - في مصدر لدي متناول يدي (لينكس 2.6.24)، يتم تعريف هذه في include/asm-x86/pgtable_32.h. يتم تعريف الحقول التي تراها في الدليل المرجعي انتل (معظمها الأعلام واحد بت) هنا - على سبيل المثال:

#define _PAGE_PRESENT   0x001
#define _PAGE_RW    0x002
#define _PAGE_USER  0x004
#define _PAGE_PWT   0x008
#define _PAGE_PCD   0x010
#define _PAGE_ACCESSED  0x020
#define _PAGE_DIRTY 0x040
#define _PAGE_PSE   0x080   /* 4 MB (or 2MB) page, Pentium+, if present.. */
#define _PAGE_GLOBAL    0x100   /* Global TLB entry PPro+ */
#define _PAGE_UNUSED1   0x200   /* available for programmer */
#define _PAGE_UNUSED2   0x400
#define _PAGE_UNUSED3   0x800

نصائح أخرى

وأوصي شراء فهم نواة لينكس من أورايلي، وكذلك <أ href ل = "http://oreilly.com/catalog/9780596005900" يختلط = "نوفولو noreferrer"> تشغيل الأجهزة لينكس . والاشتراك في LWN.net . على الرغم من أنك يمكن الحصول على بداية جيدة من لهم نواة مؤشر الصفحة حتى بدون اشتراك.

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

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