حماية الذاكرة
حماية الذاكرة هي الوسيلة التي يُمكن من خلالها التحكم في حقوق الوصول إلى الذاكرة على أجهزة الحاسوب. تُعتبر حماية الذاكرة جزءًا رئيسيًا من معظم بنيات مجموعات التعليمات وأنظمة التشغيل الحديثة، ويتمثل الغرض الرئيسي منها في منع أي عملية من الوصول إلى الذاكرة غير المخصصة لها، وهو ما يمنع بالتالي أي خطأ أو برنامج خبيث موجود داخل العملية من التأثير على العمليات الأخرى أو على نظام التشغيل نفسه، وقد تشمل الحماية جميع عمليات الوصول إلى منطقة محددة من الذاكرة، وعمليات الوصول للكتابة، أو محاولات تنفيذ محتوياتها. تؤدي محاولة الوصول إلى ذاكرة غير مصرح بها إلى حدوث عطل في الأجهزة، مثل حدوث عطل في التجزئة أو استثناء انتهاك التخزين، مما يؤدي عادةً إلى إنهاء غير طبيعي للعملية المخالفة. يُمكن أن تتضمن أساليب حماية الذاكرة أيضًا تقنيات إضافية لأمن الحاسوب مثل التوزيع العشوائي لتخطيط مساحة العنوان وحماية مساحة الملفات القابلة للتنفيذ.
طُرق الحماية
يشير مُصطلح تجزئة الذاكرة إلى تقسيم ذاكرة الحاسوب إلى أقسام، بحيث يتضمن كل مرجع لموقع ذاكرة قيمة تُعرّف قسمًا. يُمكن لوصف القسم أن يحد من حقوق الوصول، كأن يسمح مثلاً بالقراءة فقط لملفذات محددة. تتميز المعالجات من بنية إكس 86 بخصائص تجزئة متعددة، تُساعد على استخدام الذاكرة المحمية في هذه البنية.[1] في بنية إكس 86، يُمكن استخدام جدول الواصفات العام وجداول الواصفات المحلية للإشارة إلى الأقسام في ذاكرة الحاسوب. كما يُمكن تخزين مؤشرات أقسام الذاكرة في معالجات إكس 86 في سجلات الأقسام الخاصة بالمعالج. في البداية، كانت معالجات إكس 86 تحتوي على أربعة سجلات أقسام، وهي قسم الشفرة، وقسم المكدس، وقسم البيانات)، إلى جانب قسم إضافي، وفي وقت لاحق، أُضيف سجلا قسم آخران.[1]
الذاكرة الافتراضية المُجزأة
في عملية الترحيل، تُقسّم مساحة عنوان الذاكرة أو القسم إلى كتل متساوية الحجم، تُعرف بالصفحات. ومن خلال عتاد الذاكرة الافتراضية، يُمكن وضع كل صفحة في أي موقع على حدود مناسبة للذاكرة الفعلية للحاسوب، أو يُمكن تصنيفها على أنها محمية. تُتيح الذاكرة الافتراضية مساحة عنوان ذاكرة افتراضية خطية يُمكن استخدامها للوصول إلى الكتل المُجزأة عبر مساحة عنوان الذاكرة الفعلية. وتستخدم معظم بنى الحاسوب التي تدعم الترحيل أيضًا طريقة الصفحات كأساس لحماية الذاكرة.
يُعيّن جدول الصفحات الذاكرة الافتراضية إلى الذاكرة الفعلية. قد يكون هناك جدول صفحات واحد، أو جدول صفحات مخصص لكل عملية، أو جدول صفحات مخصص لكل قسم، وقد يكون هناك تسلسل هرمي لجداول الصفحات، وذلك حسب البنية ونظام التشغيل. عادةً ما تكون جداول الصفحات غير مرئية للعملية. تُسهّل جداول الصفحات تخصيص ذاكرة إضافية، حيث يُمكن تخصيص كل صفحة جديدة من أي مكان في الذاكرة الفعلية. في بعض الأنظمة، يُمكن أيضًا لمُدخل جدول الصفحات تعيين صفحة على أنها للقراءة فقط.
تُنشئ بعض أنظمة التشغيل مساحة عنوان مختلفة لكل عملية، مما يوفر حدودًا لحماية الذاكرة الصلبة،[2] بحيث يستحيل على أي تطبيق غير مُصرّح له الوصول إلى صفحة لم تُخصّص له صراحةً، لأن كل عنوان ذاكرة إما يُشير إلى صفحة مُخصّصة لذلك التطبيق، أو يُولّد مُقاطعة تُسمى خطأ صفحة، فتكون الصفحات غير المُخصّصة، والصفحات المُخصّصة لأي تطبيق آخر، ليس لها أي عناوين من وجهة نظر التطبيق. قد لا يُشير خطأ الصفحة بالضرورة إلى وجود خطأ. ولا تُستخدم أخطاء الصفحة لحماية الذاكرة فحسب، بل قد يُدير نظام التشغيل جدول الصفحات بطريقة تجعل الإشارة إلى صفحة مُصرّفة سابقًا إلى وحدة تخزين ثانوية تُسبّب خطأ صفحة. يعترض نظام التشغيل خطأ الصفحة، ويُحمّل صفحة الذاكرة المطلوبة، ويستمر التطبيق كما لو لم يحدث خطأ. يسمح هذا النظام، والذي يعتمد على نوع من الذاكرة الافتراضية، بنقل البيانات غير المُستخدمة حاليًا في الذاكرة إلى وحدة تخزين ثانوية وإعادتها بطريقة شفافة للتطبيقات، لزيادة سعة الذاكرة الإجمالية. وفي بعض الأنظمة، قد يُخصص طلب تخزين افتراضي مجموعة من العناوين الافتراضية التي لم تُخصص لها إطارات صفحات، ولن يُخصص النظام إطارات الصفحات ويُشغّلها إلا عند حدوث أخطاء في الصفحات. وفي بعض الأنظمة الأخرى، قد تُستخدم صفحة حماية، إما لاكتشاف الأخطاء أو لتوسيع هياكل البيانات تلقائيًا.، كذلك تُستخدم آلية خطأ الصفحة في بعض الأنظمة أيضًا لحماية مساحة الملفات القابلة للتنفيذ، مثل ملفات الكتابة أو التنفيذ.
مفاتيح الحماية
تعتمد آلية مفتاح حماية الذاكرة على تقسيم الذاكرة الفعلية إلى كتل ذات حجم محدد (مثل 4 كيلوبايت)، ولكل منها قيمة رقمية مرتبطة بها تُسمى مفتاح الحماية. كما أن لكل عملية قيمة مفتاح حماية مرتبطة بها. وعند الوصول إلى الذاكرة، يتحقق الجهاز من تطابق مفتاح حماية العملية الحالية مع القيمة المرتبطة بكتلة الذاكرة التي يتم الوصول إليها؛ وإلا، يحدث استثناء. طُوّرت هذه الآلية في بنية نظام آي بي إم 360، وهي متوفرة على أجهزة الحاسوب المركزية الحالية من طراز آي بي إم زد، وتُستخدم بكثرة في أنظمة تشغيل حواسب آي بي إم زد وأنظمتها الفرعية.[3] ترتبط مفاتيح حماية نظام آي بي إم 360 بعناوين مادية. ويختلف ذلك عن آلية مفتاح الحماية المستخدمة في بنيات مثل بنية آي أيه-64 من حواسب شركة هيوليت-باكارد وشركة إنتل، وبنية الحوسبة الدقيقة بمجموعة تعليمات مخفضة في حواسب شركة هيوليت-باكارد المرتبطة بعناوين افتراضية، والتي تسمح بمفاتيح متعددة لكل عملية. في البنيات التي تعتمد على معالجات إيتانيوم وعلى الحوسبة الدقيقة بمجموعة تعليمات مخفضة، ترتبط بمدخلات مخزن الترجمة المؤقت،ومفاتيح إيتانيوم، أو معرفات وصول الحوسبة دقيقة بمجموعة تعليمات مخفضة. تحتوي العملية الجارية على عدة سجلات مفاتيح حماية (16 لأنظمة الإيتانيوم و4 لأنظمة الحوسبة الدقيقة بمجموعة تعليمات مخفضة). وتتم مقارنة مفتاح الترجمة المحددة من خلال العنوان الافتراضي بكل سجل من سجلات مفاتيح الحماية، فإذا تطابق أي منها (بالإضافة إلى عمليات التحقق الأخرى المحتملة)، يُسمح بالوصول، أما إذا لم يتطابق أي منها، يحدث خطأ أو استثناء. يمكن لمعالج أخطاء البرنامج، حال الرغبة في ذلك، التحقق من المفتاح المفقود مقابل قائمة أكبر من المفاتيح التي يحتفظ بها البرنامج؛ وبالتالي، يمكن التعامل مع سجلات مفاتيح الحماية داخل المعالج كذاكرة تخزين مؤقتة يديرها البرنامج لقائمة أكبر من المفاتيح المرتبطة بعملية ما. تحتوي الأجهزة التي تعتمد على الحوسبة الدقيقة بمجموعة تعليمات مخفضة على 15-18 بت من المفتاح؛ يشترط إيتانيوم 18 مفتاحًا على الأقل، وعادةً ما ترتبط المفاتيح بمجالات الحماية، مثل المكتبات والوحدات النمطية، إلخ.[4]
في معالجات إكس 86، تسمح بنية مفاتيح الحماية بوضع علامات على العناوين الافتراضية لصفحات المستخدم باستخدام أي من مفاتيح الحماية الستة عشر. تُشكل جميع الصفحات المُعلَّمة بنفس مفتاح الحماية مجال حماية، حيث يحتوي سجل جديد على الأذونات المرتبطة بكل مجال حماية. تُفحص عمليات التحميل والتخزين وفقًا لأذونات جدول الصفحات وأذونات مفتاح الحماية المرتبطة بمجال حماية العنوان الافتراضي، ولا يُسمح بها إلا إذا كان كلا الأذونين يسمحان بالوصول. يمكن تعيين أذونات مفتاح الحماية من مساحة المستخدم، مما يسمح للتطبيقات بتقييد الوصول إلى بيانات التطبيق مباشرةً دون تدخل نظام التشغيل. ونظرًا لارتباط مفاتيح الحماية بعنوان افتراضي، فإن مجالات الحماية تُحدد لكل مساحة عنوان، لذا يمكن للعمليات التي تعمل في مساحات عناوين مختلفة استخدام جميع النطاقات الستة عشر.
حلقات الحماية
في الحواسيب التي تستخدم أنظمة التشغيل مولتكس والأنظمة المشتقة منها، يكون لكل قسم حلقة حماية للقراءة والكتابة والتنفيذ، وبالتالي فإن أي محاولة من عملية ذات رقم حلقة أعلى من رقم حلقة القسم تُسبب خطأً. ويكون هناك آلية لاستدعاء الإجراءات التي تعمل في حلقة أقل بأمان والعودة إلى الحلقة الأعلى. كما توجد آليات تسمح للروتين الذي يعمل برقم حلقة أقل بالوصول إلى مُعامل ذي رقم حلقة أكبر من حلقته وحلقة المُستدعي.
التجزئة بالمحاكاة
تُشير المحاكاة إلى استخدام برنامج مراقبة لتفسير تعليمات برنامج الحاسوب لبعض بنى الحاسوب. يمكن لمثل هذا المُحاكي لمجموعة التعليمات توفير حماية للذاكرة باستخدام نظام يُشبه التجزئة، والتحقق من صحة عنوان الهدف وطول كل تعليمة آنيًا قبل تنفيذها فعليًا. يجب على المُحاكي حساب عنوان الهدف وطوله ومقارنتهما بقائمة نطاقات العناوين الصالحة التي يحتفظ بها والمتعلقة ببيئة الخيط، مثل أي كتل ذاكرة ديناميكية مُكتسبة منذ إنشاء الخيط، بالإضافة إلى أي فتحات ذاكرة ثابتة مشتركة صالحة. قد يتغير معنى هذه الصلاحية طوال عمر الخيط تبعًا للسياق، فقد يُسمح أحيانًا بتغيير كتلة تخزين ثابتة، وأحيانًا لا يُسمح بذلك، وذلك حسب وضع التنفيذ الحالي، والذي قد يعتمد أو لا يعتمد على مفتاح تخزين أو حالة مشرف.
لا يُنصح عمومًا باستخدام هذه الطريقة لحماية الذاكرة عند وجود إمكانيات كافية على وحدة المعالجة المركزية، لأن ذلك يستهلك طاقة معالجة كبيرة من الحاسوب. ولكن تُستخدم هذه الطريقة عادةً لأغراض تصحيح الأخطاء والاختبار لتوفير مستوى إضافي من الدقة لانتهاكات التخزين العامة، ويمكنها تحديد التعليمات التي تحاول الكتابة فوق قسم التخزين المحدد الذي قد يكون له نفس مفتاح التخزين مثل التخزين غير المحمي.
مراجع
- 1 2 Intel (يوليو 2008). Intel 64 and IA-32 Architectures Software Developer's Manuals: Volume 3A: System Programming Guide, Part 1 (PDF). Intel. مؤرشف من الأصل (PDF) في 2009-04-19. اطلع عليه بتاريخ 2008-08-21.
- ↑ Jeffrey S. Chase; Henry M. Levy; Michael J. Feeley; and Edward D. Lazowska. "Sharing and Protection in a Single Address Space Operating System". دُوِي:10.1145/195792.195795 1993. p. 2. نسخة محفوظة 2024-09-21 على موقع واي باك مشين.
- ↑ Memory protection keys, Jonathan Corbet, May 13, 2015, إل دبليو إن.نت نسخة محفوظة 2025-03-04 على موقع واي باك مشين.
- ↑ "Keys in Itanium" (PDF). مؤرشف من الأصل (PDF) في 2007-11-28.