هيكل PTE في نواة لينكس
-
10-07-2019 - |
سؤال
ولقد سعيت لننظر حولنا في شفرة المصدر لينكس لهيكل / ويسترن يهمني أن تتوافق مع 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 . على الرغم من أنك يمكن الحصول على بداية جيدة من لهم نواة مؤشر الصفحة حتى بدون اشتراك.
لإدارة الذاكرة، والبحث على صفحة الفهرس لقسم "إدارة الذاكرة" ... وقسم "نظم ذاكرة كبيرة". هذا الأخير لديه عدد قليل من المواد التي تتحدث عن هذه الخطوة إلى جداول صفحة المستوى الأربعة التي ينبغي أن تكون مفيدة في فهم هذا المجال من التعليمات البرمجية.