جدول الصفحات

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

تخزن وحدة إدارة الذاكرة (MMU) داخل وحدة المعالجة المركزية (CPU) ذاكرة تخزين مؤقتة لعمليات الربط المستخدمة مؤخرًا من جدول صفحات نظام التشغيل. تُسمى هذه الذاكرة المؤقتة مخزن البحث الجانبي للترجمة (TLB)، وهي ذاكرة تخزين مؤقتة ترابطية.
عند الحاجة إلى ترجمة عنوان افتراضي إلى عنوان فعلي، يتم البحث أولاً في ذاكرة الترجمة (TLB). إذا تم العثور على تطابق، وهو ما يُعرف بـ " نجاح TLB" ، يُعاد العنوان الفعلي ويمكن استئناف الوصول إلى الذاكرة. أما إذا لم يتم العثور على تطابق، وهو ما يُسمى " فشل TLB" ، فإن وحدة إدارة الذاكرة (MMU) أو البرامج الثابتة للنظام أو معالج فشل TLB الخاص بنظام التشغيل عادةً ما يبحث عن تعيين العنوان في جدول الصفحات للتحقق من وجوده، وهو ما يُسمى "استعراض الصفحات" . إذا وُجد تعيين، يُكتب مرة أخرى إلى TLB، وهو أمر ضروري لأن الأجهزة تصل إلى الذاكرة من خلال TLB في نظام الذاكرة الافتراضية، ويُعاد تشغيل التعليمات المُسببة للخطأ، وهو ما قد يحدث بالتوازي أيضًا. ستؤدي الترجمة اللاحقة إلى نجاح TLB، وسيستمر الوصول إلى الذاكرة.
إخفاقات الترجمة
قد يفشل البحث في جدول الصفحات، مما يؤدي إلى حدوث خطأ في الصفحة ، وذلك لسببين:
- قد تفشل عملية البحث إذا لم تتوفر ترجمة للعنوان الظاهري، مما يعني أن هذا العنوان غير صالح. يحدث هذا عادةً بسبب خطأ برمجي، ويتعين على نظام التشغيل اتخاذ إجراء ما لمعالجة المشكلة. في أنظمة التشغيل الحديثة، سيؤدي ذلك إلى إرسال إشارة خطأ تجزئة الذاكرة إلى البرنامج المُسبب للمشكلة.
- قد تفشل عملية البحث أيضًا إذا لم تكن الصفحة موجودة حاليًا في الذاكرة الفعلية. يحدث هذا إذا تم نقل الصفحة المطلوبة من الذاكرة الفعلية لإفساح المجال لصفحة أخرى. في هذه الحالة، تُنقل الصفحة إلى مخزن ثانوي موجود على وسيط تخزين مثل القرص الصلب (يُطلق على هذا المخزن الثانوي، أو "المخزن الاحتياطي"، غالبًا اسم قسم التبديل إذا كان قسمًا من القرص، أو ملف التبديل أو ملف الصفحة إذا كان ملفًا). عند حدوث ذلك ، يجب سحب الصفحة من القرص وإعادتها إلى الذاكرة الفعلية. تُستخدم آلية مماثلة للملفات المُرتبطة بالذاكرة ، والتي تُربط بالذاكرة الافتراضية وتُحمّل إلى الذاكرة الفعلية عند الطلب.
عندما لا تكون الذاكرة الفعلية ممتلئة، تكون هذه عملية بسيطة؛ تُكتب الصفحة مرة أخرى في الذاكرة الفعلية، ويُحدَّث جدول الصفحات وذاكرة الترجمة السريعة (TLB)، ثم يُعاد تنفيذ التعليمات. أما عندما تكون الذاكرة الفعلية ممتلئة، فستحتاج إلى إخراج صفحة أو أكثر من الذاكرة الفعلية لإفساح المجال للصفحة المطلوبة. يجب تحديث جدول الصفحات للإشارة إلى أن الصفحات التي كانت موجودة سابقًا في الذاكرة الفعلية لم تعد موجودة، وللإشارة إلى أن الصفحة التي كانت على القرص أصبحت الآن في الذاكرة الفعلية. كما يجب تحديث ذاكرة الترجمة السريعة (TLB)، بما في ذلك إزالة الصفحة التي أُخرجت منها، ثم يُعاد تنفيذ التعليمات. أما تحديد الصفحة التي يجب إخراجها فهو موضوع خوارزميات استبدال الصفحات .
تتسبب بعض وحدات إدارة الذاكرة (MMUs) في حدوث خطأ في الصفحة لأسباب أخرى، سواء كانت الصفحة موجودة حاليًا في الذاكرة الفعلية ومُرتبطة بمساحة العناوين الافتراضية للعملية أم لا:
- تؤدي محاولة الكتابة عندما تكون بتة القراءة فقط مُفعّلة في جدول الصفحات إلى حدوث خطأ في الصفحة. هذا جزء طبيعي من تطبيق العديد من أنظمة التشغيل لتقنية النسخ عند الكتابة ؛ وقد يحدث أيضًا عند الكتابة إلى موقع يُسمح للعملية بالقراءة منه ولكن لا يُسمح لها بالكتابة إليه، وفي هذه الحالة تُرسل إشارة إلى العملية.
- محاولة تنفيذ التعليمات البرمجية عندما يكون بت NX (بت عدم التنفيذ) مُفعّلاً في جدول الصفحات تُسبب خطأ في الصفحة. يمكن لنظام التشغيل استخدام هذه الخاصية، بالإضافة إلى بت القراءة فقط، لتوفير ميزة " الكتابة XOR والتنفيذ" التي تُوقف بعض أنواع الثغرات الأمنية. [ 3 ]
بيانات جدول الإطار
غالبًا ما تحتفظ أنظمة جداول الصفحات البسيطة بجدول إطارات وجدول صفحات. يحتوي جدول الإطارات على معلومات حول الإطارات التي تم تعيينها. في الأنظمة الأكثر تطورًا، يمكن أن يحتوي جدول الإطارات أيضًا على معلومات حول مساحة العناوين التي تنتمي إليها الصفحة، ومعلومات إحصائية، أو معلومات أساسية أخرى.
بيانات جدول الصفحات
جدول الصفحات عبارة عن مصفوفة من مدخلات جدول الصفحات.
إدخال جدول الصفحات
يحتوي كل مدخل في جدول الصفحات (PTE) على الربط بين العنوان الظاهري للصفحة وعنوان الإطار الفعلي. كما يتضمن معلومات إضافية عن الصفحة، مثل بت التواجد، وبت التعديل أو التغيير، ومعلومات مساحة العنوان أو معرّف العملية، وغيرها.
يمكن استخدام وحدات التخزين الثانوية، مثل محرك الأقراص الصلبة، لزيادة سعة الذاكرة الفعلية. ويمكن نقل الصفحات من وإلى الذاكرة الفعلية والقرص. وتشير بتة "الوجود" إلى الصفحات الموجودة حاليًا في الذاكرة الفعلية أو على القرص، كما تشير إلى كيفية التعامل مع هذه الصفحات المختلفة، أي ما إذا كان سيتم تحميل صفحة من القرص ونقل صفحة أخرى من الذاكرة الفعلية.
تتيح بتة التعديل تحسين الأداء. لا تحتاج الصفحة الموجودة على القرص والتي يتم تحميلها إلى الذاكرة الفعلية، ثم قراءتها منها، ثم إخراجها منها مرة أخرى، إلى إعادة كتابتها إلى القرص، لأن الصفحة لم تتغير. مع ذلك، إذا تمت الكتابة إلى الصفحة بعد تحميلها، فسيتم ضبط بتة التعديل، مما يشير إلى ضرورة إعادة كتابة الصفحة إلى وحدة التخزين الاحتياطية. تتطلب هذه الاستراتيجية أن تحتفظ وحدة التخزين الاحتياطية بنسخة من الصفحة بعد تحميلها إلى الذاكرة. عند عدم استخدام بتة التعديل، يكفي أن يكون حجم وحدة التخزين الاحتياطية مساويًا للحجم الإجمالي اللحظي لجميع الصفحات التي تم إخراجها في أي لحظة. أما عند استخدام بتة التعديل، فستكون هناك دائمًا بعض الصفحات موجودة في كل من الذاكرة الفعلية ووحدة التخزين الاحتياطية.
في أنظمة التشغيل التي لا تعتمد على مساحة عنوان واحدة ، تُعدّ معلومات مساحة العنوان أو مُعرّف العملية ضرورية لكي يعرف نظام إدارة الذاكرة الافتراضية الصفحات التي يجب ربطها بكل عملية. قد تستخدم عمليتان عنوانين افتراضيين متطابقين لأغراض مختلفة. يجب أن يُوفّر جدول الصفحات خرائط ذاكرة افتراضية مختلفة لكلتا العمليتين. يُمكن تحقيق ذلك من خلال تعيين مُعرّفات خريطة عناوين مُختلفة لكلتا العمليتين، أو باستخدام مُعرّفات العمليات. كما يُساعد ربط مُعرّفات العمليات بصفحات الذاكرة الافتراضية في اختيار الصفحات التي سيتم ترحيلها، حيث إن الصفحات المرتبطة بالعمليات غير النشطة، وخاصةً العمليات التي تم ترحيل صفحات التعليمات البرمجية الخاصة بها، أقل عرضةً للاحتياج الفوري من الصفحات التابعة للعمليات النشطة.
كبديلٍ لربط مدخلات جدول الصفحات بمعرفات فريدة لكل عملية، قد يشغل جدول الصفحات نفسه صفحة ذاكرة افتراضية مختلفة لكل عملية، ليصبح بذلك جزءًا من سياق العملية. في هذا التطبيق، يمكن إخراج جدول صفحات العملية من الذاكرة كلما لم تعد العملية موجودة فيها.
أنواع جداول الصفحات
توجد أنواع عديدة من جداول الصفحات، وهي مُحسَّنة لتلبية متطلبات مختلفة. وبشكل أساسي، يجب أن يخزن جدول الصفحات الأساسي العنوان الظاهري، والعنوان الفعلي الذي يقع "تحت" هذا العنوان الظاهري، وربما بعض معلومات مساحة العناوين.
جداول الصفحات المعكوسة
يُمكن اعتبار جدول الصفحات المعكوس ( IPT) امتدادًا خارجيًا لجدول ترجمة العناوين (TLB) يستخدم ذاكرة الوصول العشوائي (RAM) العادية للنظام. على عكس جدول الصفحات الحقيقي، لا يُمكنه بالضرورة استيعاب جميع عمليات الربط الحالية. يجب أن يكون نظام التشغيل مُهيأً للتعامل مع حالات عدم الوصول إلى الصفحة المطلوبة، تمامًا كما هو الحال مع جدول ترجمة العناوين (TLB) البرمجي المُعتمد على معمارية MIPS.
يجمع جدول الصفحات المعكوس (IPT) بين جدول الصفحات وجدول الإطارات في بنية بيانات واحدة. يتكون جوهره من جدول ثابت الحجم، حيث يساوي عدد صفوفه عدد الإطارات في الذاكرة. فإذا كان هناك 4000 إطار، فإن جدول الصفحات المعكوس يحتوي على 4000 صف. لكل صف مدخل لرقم الصفحة الافتراضية (VPN)، ورقم الصفحة الفعلية (وليس العنوان الفعلي)، وبعض البيانات الأخرى، وآلية لإنشاء سلسلة تصادم ، كما سنرى لاحقًا.
يُعدّ البحث في جميع مدخلات بنية IPT الأساسية غير فعّال، ويمكن استخدام جدول تجزئة لربط العناوين الافتراضية (ومعلومات مساحة العناوين/PID عند الحاجة) بفهرس في IPT - وهنا يُستخدم جدول التصادم. يُعرف جدول التجزئة هذا بجدول مرجع التجزئة . لا تُحسّن دالة التجزئة عادةً من حيث التغطية، فالسرعة الخام هي الأهم. وبطبيعة الحال، تتعرض جداول التجزئة للتصادمات. ونظرًا لدالة التجزئة المختارة، قد نواجه العديد من التصادمات أثناء الاستخدام، لذا يُزوّد VPN لكل مدخل في الجدول بالتحقق مما إذا كان المدخل المطلوب أم تصادمًا.
عند البحث عن خريطة، يُستخدم جدول تجزئة الروابط. إذا لم يكن هناك مدخل، يحدث خطأ في الصفحة. وإلا، يتم العثور على المدخل. اعتمادًا على بنية النظام، قد يُعاد وضع المدخل في ذاكرة الترجمة السريعة (TLB) ويُعاد تشغيل مرجع الذاكرة، أو قد يتم تتبع سلسلة التصادم حتى استنفادها وحدوث خطأ في الصفحة.
يمكن تقسيم العنوان الافتراضي في هذا المخطط إلى قسمين، النصف الأول هو رقم الصفحة الافتراضي والنصف الثاني هو الإزاحة في تلك الصفحة.
تتمثل إحدى المشكلات الرئيسية في هذا التصميم في ضعف تجاور البيانات في ذاكرة التخزين المؤقت، والناجم عن دالة التجزئة . تتجنب التصاميم القائمة على الشجرة هذه المشكلة بوضع مدخلات جدول الصفحات للصفحات المتجاورة في مواقع متجاورة، لكن جدول الصفحات المعكوس يُفقد تجاور البيانات مكانيًا بتوزيع المدخلات في أماكن متفرقة. قد يُقلل نظام التشغيل حجم جدول التجزئة للتخفيف من هذه المشكلة، ولكن على حساب زيادة معدل فقدان البيانات.
يوجد عادةً جدول تجزئة واحد، متجاور في الذاكرة الفعلية، تشترك فيه جميع العمليات. يُستخدم مُعرِّف خاص بكل عملية لتمييز صفحات العمليات المختلفة عن بعضها. يُعد حذف إدخالات جدول الصفحات لعملية معينة عملية بطيئة نوعًا ما؛ لذا قد يتجنب نظام التشغيل إعادة استخدام قيم مُعرِّف كل عملية لتأخير هذه العملية. كبديل، يمكن استخدام جداول تجزئة خاصة بكل عملية، لكنها غير عملية بسبب تجزئة الذاكرة ، مما يتطلب تخصيص الجداول مسبقًا.
تُستخدم جداول الصفحات المعكوسة على سبيل المثال في معالجات PowerPC و UltraSPARC و IA-64 . [ 4 ]
جداول الصفحات متعددة المستويات



يحتفظ جدول الصفحات المعكوس بقائمة بالخرائط المُثبّتة لجميع الإطارات في الذاكرة الفعلية. مع ذلك، قد يكون هذا مُهدرًا للموارد. بدلًا من ذلك، يُمكننا إنشاء بنية جدول صفحات تحتوي على خرائط للصفحات الافتراضية. يتم ذلك عن طريق الاحتفاظ بعدة جداول صفحات تُغطي كتلة مُحددة من الذاكرة الافتراضية. على سبيل المثال، يُمكننا إنشاء صفحات أصغر حجمًا (1024 مدخلًا، 4 كيلوبايت) تُغطي 4 ميجابايت من الذاكرة الافتراضية.
يُعدّ هذا مفيدًا لأنّ الأجزاء العلوية والسفلية من الذاكرة الافتراضية تُستخدم غالبًا لتشغيل العمليات؛ فالجزء العلوي يُستخدم عادةً لمقاطع النصوص والبيانات، بينما يُستخدم الجزء السفلي للمكدس، مع وجود مساحة ذاكرة فارغة بينهما. وقد يحتفظ جدول الصفحات متعدد المستويات ببعض جداول الصفحات الأصغر لتغطية الأجزاء العلوية والسفلية من الذاكرة فقط، ولا يُنشئ جداول جديدة إلا عند الضرورة القصوى.
الآن، ترتبط كل من جداول الصفحات الأصغر هذه بجدول صفحات رئيسي، مما يُنشئ فعليًا بنية بيانات شجرية . لا يقتصر الأمر على مستويين فقط، بل قد يكون هناك مستويات متعددة. على سبيل المثال، يمكن تقسيم عنوان افتراضي في هذا المخطط إلى ثلاثة أجزاء: الفهرس في جدول الصفحات الجذرية، والفهرس في جدول الصفحات الفرعية، والإزاحة في تلك الصفحة.
تُعرف جداول الصفحات متعددة المستويات أيضًا باسم "جداول الصفحات الهرمية".
جداول الصفحات الافتراضية
ذُكر أن إنشاء بنية جدول صفحات تحتوي على تعيينات لكل صفحة افتراضية في مساحة العناوين الافتراضية قد يكون مُهدرًا للموارد. ولكن، يُمكننا تجاوز مشكلة المساحة الزائدة بوضع جدول الصفحات في الذاكرة الافتراضية، والسماح لنظام الذاكرة الافتراضية بإدارة الذاكرة الخاصة به.
ومع ذلك، يجب أن يبقى جزء من بنية جدول الصفحات الخطية هذه دائمًا موجودًا في الذاكرة الفعلية من أجل منع أخطاء الصفحات الدائرية والبحث عن جزء رئيسي من جدول الصفحات غير موجود في جدول الصفحات.
جداول الصفحات المتداخلة
يمكن استخدام جداول الصفحات المتداخلة لتحسين أداء المحاكاة الافتراضية للأجهزة . ومن خلال توفير دعم الأجهزة لمحاكاة جداول الصفحات ، تقل الحاجة إلى المحاكاة بشكل كبير. بالنسبة لمحاكاة x86 الافتراضية، تشمل الخيارات الحالية ميزة جدول الصفحات الموسع من إنتل وميزة فهرسة المحاكاة الافتراضية السريعة من AMD .
انظر أيضاً
مراجع
- ↑ "الذاكرة الافتراضية" . umd.edu . تم الاطلاع عليه بتاريخ 28 سبتمبر 2015 .
- ↑ "إدارة جداول الصفحات" . kernel.org . تم الاطلاع عليه بتاريخ 28 سبتمبر 2015 .
- ↑ "W^X - الآلية" .
- ↑ ويليام ستالينجز، الأنظمة التشغيلية الداخلية ومبادئ التصميم ، ص 353.
للمزيد من القراءة
- أندرو س. تانينباوم ، أنظمة التشغيل الحديثة ، رقم ISBN 0-13-031358-0
- أ. سيلبرشاتز ، ب. ب. جالفين، ج. غاني، مفاهيم أنظمة التشغيل ، رقم ISBN 0-471-69466-5
- أنظمة التشغيل: ثلاثة أجزاء سهلة ، تأليف رمزي ح. أرباتشي-دوسو وأندريا س. أرباتشي-دوسو. دار أرباتشي-دوسو للنشر، ٢٠١٤. الفصول ذات الصلة: مساحات العناوين، ترجمة العناوين، مقدمة إلى الترحيل، جداول ترجمة العناوين، جداول الصفحات المتقدمة
- برنامج تعليمي حول الذاكرة الافتراضية، مركز المهندس الجديد، جامعة جورج ماسون، صفحة الجداول
- "فن التجميع، 6.6 الذاكرة الافتراضية، الحماية، والتقسيم إلى صفحات" . مؤرشف من الأصل في 18 فبراير 2012.
- "كتيبات مطوري البرامج لبنيتي Intel 64 و IA-32" . Intel. 18 يناير 2018.
- "دليل مطوري برامج معمارية AMD64" . AMD. مؤرشف من الأصل بتاريخ 13-03-2010.
روابط خارجية
- الذاكرة الافتراضية
- إدارة الذاكرة
- ذاكرة الحاسوب
