طريق المعرفة
عزيزي الزائر أنت غير مسجل لدينا ؟
من فضلك ، قم بالتسجيل حتي تستطيع الدخول للمنتدي.


الأستاذ / جمـال إبراهيم عوض الله .Prof.Gamal Ibrahim Awadallah
 
الرئيسيةمكتبة الصورالتسجيلدخول

شاطر | 
 

 إدارة الذاكرة

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
Prof.gamal
Admin
Admin
avatar

ذكر عدد الرسائل : 1311
العمل : معلم وقـائـد كشـفـي
تاريخ التسجيل : 25/01/2008

مُساهمةموضوع: إدارة الذاكرة   الأربعاء مايو 21, 2008 8:35 am

هناك أمر غريب جداً في تصميم الأجهزة PC التي تعتمد على معالجات من عائلة 80x86 التي ينتمي لها البينتيوم وهي قصة طويلة. حيث تم تصميمها على أساس أن أكبر سعة للذاكرة هي 640 كيلو-بايت ولكن في البداية (قبل أن تكون الكلمة 32-بت) كان المسجل 16 بت التي تكفي لعنونة 0xFFFF ست-عشري أي 64 كيلو-بايت فقط فحن بحاجة إلى 20-بت (وهو عرض ناقل العنونة address bus في أجهزة 8086 الجد الأكبر) ، أي نصف بايت (منزلة ست-عشرية) تسمى physical page ، ولأن سعة المسجل الواحد 16 بت فقط فنحن بحاجة لمسجل آخر. يسمى الأول إزاحة offset والثاني مقطع segment يرمز له بالطريقة segment:offset ولكن بدلاً من وضع physical page في المنزلة الست-عشرية الأقل أهمية تم وضعه في الأكثر أهمية في أقصى اليسار (دون ترك أي بت للمستقبل، حيث لا تكون الذاكرة محدودة بواحد ميغابايت) مما يعني أن البايت بالعنوان الفيزيائي 0x51234 يمكن تمثيل عنوانه على سبيل المثال لا الحصر بما يلي: 0x5000:0x1234 أو 0x5100:0x0234 أو 0x5120:0x0034 أو 0x5124:0x0004 كلها تشير لنفس العنوان وذلك بجمع الإزاحة و المقطع بعد ضربه في 16 أي إزاحته لليسار منزلة ست-عشرية. وهذا يعطينا 20 بت أي واحد ميغا-بايت فقط على الرغم من استعمال 32 بت التي يمكنها ترميز 4 غيغا-بايت. السبب هو الفرض بأن كل برنامج يجب أن يعمل في مقطع منفصل لأن تعليمات لغة الآلة ذات 16-بت لا نحدد فيها سوى العنوان (الإزاحة offset) ب16-بت يجب أن يكون نفسه مهما كان العنوان الذي وضع فيه البرنامج، فقالو نقسم الذاكرة إلى مقاطع في كل واحد يمكن أن يحمل برنامج على الإزاحة صفر فيه، وتكون العناوين هي الإزاحة عن بداية المقطع. ولو وضعنا المنزلة الست-عشرية التي تمثل physical page في المنزلة الأقل أهمية في مسجل المقطع فإن ذلك يعني أن لدينا 16 مقطعاً صالحاً فقط (عندما يكون عرض الناقل 20-بت) أي يسمح بتشغيل 16 برنامج لهذا اختاروا الجهة الأخرى. مشكلة أخرى تنتج عن تقسيم الذاكرة إلى مقاطع وهي أن البرنامج يجب أن يوجد له مقاطع متاحة ومتتالية ليوضع فيها وإلا فإن حجمه سيكون محدود بحجم المقطع تسمى هذه Segmentation problem لهذا في دووس لا يكفي أن يكون لديك 128 كيلو-بايت متاحة لتشغيل برنامج يحتاج 128كيلو-بايت أو لحجز تلك الكمية بل يجب أن تكون متوفرة ومتتالية. بعد ظهور أجهزة بناقل 24-بت (80286) ثم أجهزة 32-بت (80386) ، بذواكر أكبر من الحد الأقصى المفترض لهذا يعمل الجهاز في طورين الطور الحقيقي real mode وهو طور التوافقية مع 8086 حيث لا ترى سوى أول ميغا من الذاكرة وتسمى الذاكرة التقليدية Conventional memory ويتم الوصول للبقية بنقل جزء صغير منها إلى الذاكرة التقليدية وقراءته هناك. يتم النقل عبر تعريف في دووس EMS أو XMS الأخير هذا يوفره HIMEM.SYS ولا يعمل ويندوز دونه. الطور الآخر هو الطور المحمي protected mode وفيه تمثل الذاكرة بطريقتين بعنوانها الفيزيائي(طريقة مسطحة) أي مجرد رقم 32-بت يبدأ العد من صفر والثانية بطريقة افتراضية لحل مشكلة Segmentation problem أي شرط التتالي في المقطع ببساطة بتقسيم المقطع segment إلى صفحات pages كل منها له حجم ثابت وإعتمادها كوحدة وعدم اشتراط أن تكون الصفحات متتالية فيظهر هذا المقطع في العنوان الإفتراضي متتالياً مع أنه فيزيائياً قد يكون مفصولاً ببرامج أوبيانات لبرامج أخرى لكنها غير مرئية له. قد يسمى المقطع في الطور المحمي عند بعض المراجع program page كي لا يختلط المفهوم مع المقطع في الطور الحقيقي. وهكذا ويكون العنوان في المسجل هو الإزاحة عن بداية المقطع الافتراضي ، تستعمل مسجلات 32-بت التي تبدأ بحرف e مثل eax لتمثيل الإزاحة أما مسجلات المقطع فتكون مقسومة عدة قسام لتمثل selector و limit الأول الذي يشير إلى أي مقطع عنها تحسب الإزاحة، والثاني إلى الحد الأعلى. يتسبب هذا الحل بمشكلة Pagination Problem وهي الهدر الناتج عن ثبات حجم الصفحة فقد يحدث هدر لا يزيد عن حجم الصفحة×عدد البرامج لهذا نقلل حجم الصفحة مما يزيد عدد الصفحات وهذا بدوره يصنع مشلكة في الاحتفاظ بجدول بكل تلك الصفحات والسرعة الضائعة في تحديثه. يستعمل DPMI أي DOS Protected Mode Interface (ليس جزءاً من دووس وإنما يأتي بشكل مستقل أو مع ويندوز) مجموعة من الوظائف عبر المقاطعة 0x2f للدخول إلى هذا الطور (التحويل من الطور الحقيقي إلى المحمي) ، والمقاطة 0x31 لحجز/تحرير الذاكرة ومحاكاة المقاطعات التي صممت للطور الحقيقي مثل مقاطعة دووس 0x21 التي كانت تستقبل مقطع-حقيقي/إزاحة segment/offset. يعمل ويندوز (95 و 98) على مرحلتين، تكون الأولى (أثناء عرض الشعار)، اضغط ESC لترى دووس يعمل في الطور الحقيقي، يحمّل تعريفات محددة في ملف CONFIG.SYS مثل HIMEM.SYS ثم ينفذ عدداً من تطبيقات ذات 16-بت وربما بعض الفيروسات أو تكون حملت قبلاً مع قطاع رقم صفر (لا شيء مرئي إلى الآن سوى أول ميغا). ثم ينتقل للطور المحمي وبقية النظام متعدد المهام والواجهة الرسومية ... إلخ بمجرد الانتقال للطور المحمي لا يمكن تنفيذ برامج دووس لأنها لا تستدعي المقاطعات عبر 0x31 كما أن الذاكرة التقليدية قد تكون مليئة ويحمل البرنامج خارج أول ميغا فلا يستطيع برنامج دووس بطريقة segment/offset أن يرى نفسه؛ لهذا يقوم ويندوز بمحاكاة دووس (داخل البئية الرسومية محاكاة ولكن قبلها تنفيذ حقيقي وإذا اخترت restart in dos mode يعمل دووس حقيقي) هذه المحاكاة تعمل على إظهار أن البرنامج لا يزال داخل أول ميغا. الخطورة في هذا التصميم بأن البرامج(خصوصاً الفيروسات) قبل الدخول في الطور المحمي يمكنها استعمال EMS و XMS أو طرق مشابهة للوصول لأي جزء من الذاكرة داخل وخارج البرنامج كما أن النظام ليس له أي سلطة عليها.


النظام لينكس صمم والأمان في البال بالطبع لم يتبع هكذا التصميم. بمجرد تحميل نواة لينكس أول ما تقوم به هو الدخول في الطور المحمي. ويختلف لينكس عن باقي الأنظمة بأنه يقسم الذاكرة إلى 4 مقاطع segments فقط (النواة وبيانتها والبرامج وبياناتها) على عكس الأنظمة الأخرى التي تخصص مقطع لكل برنامج كما ذكرنا كما أن فصل النواة في مقطع يجعلها بعيدة عن عبث البرامج. كما أن هذا التقسيم يجعله يوفر في الذاكرة عند تشغيل برنامج/مكتبة أكثر من مرة حيث يحجز له مرة واحدة كبرنامج وبعدد المرات كبيانات، فكود البرنامج نفسه في كل مرة وفقط تختلف البيانات. ويحل مشكلتي segmentation و pagentation معاً. الأولى بالتقسيم لصفحات والثانية بجعل حجم الصفحة 4 كيلو-بايت فقط دون دفع ثمن ذلك من السرعة لأنه يرتبها في Hierarchical Paging تستخدم خوارزميات تسريع مثل Binary search tree (في كل دورة تقسم المجموعة إلى نصفين تهمل مجموعة وتبحث في الثاني بنفس الطريقة). كل البرامج تعطى عناوين افتراضية والنواة وحدها من يستعمل العناوين الفيزيائية المطلقة لهذا كل برنامج لا يستطيع الوصول لذاكرة برنامج آخر. الطريقة الوحيدة ليرى برنامج جزء من ذاكرة برنامج آخر هي عبر قسم/ملف التبديل swap
تلميح
عملية التبديل swap هي عملية توليد ذاكرة افتراضية وهمية فعند الحاجة للمزيد من الذاكرة يتم البحث عن جزء غير مستعمل (برنامج نائم) ، وإرساله (أو جزء/صفحة منه ) للقرص الصلب وتحرير الذاكرة التي كان يشغلها. عند الحاجة لجزء موجود على القرص الصلب يبحث عن جزء آخر غير مستعمل ليأخذ مكانه ومن هنا جاء الاسم. ولا نحتاج لتعديل البرامج لأن العناوين التي مع البرامج افتراضية يديره نظام التشغيل.
فإذا كان هناك برنامج يريد أن لا يرى أي برنامج آخر ذاكرته من خلال swap يطلب قفل lock على الذاكرة الخاصة به ليتم إبقاؤه داخل الرام ولأن ذلك يحجز الكثير من الموارد (خطورة أن تكون كل البرامج تغلق ذكرتها فلا يجد النظام ما يرسله للتبديل swap لتحرير ذاكرة) لهذا فقط الجذر يمكنه قفل الذاكرة.
تلميح
لهذا تحصل تحذير ذاكرة غير آمنة عند توليد مفتاح في برنامج ssh لغير الجذر!
أما إدارة الذاكرة في النظام دووس فيحتفظ مقابل كل جزء من الذاكرة block بسجل يحتوي على حرف M أو Z تبعاً إذا كان هناك block تالي أم لا وحجم الذاكرة وإلى أي برنامج تعود (مؤشر إلى تركيب يسمى PSP - Program segment prefix) فإذا أراد النظام الوصول لجزء من الذاكرة(حجز/تحرير) عليه المرور بكل تلك السجلات.

_________________
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://gamalo.coolbb.net
gamalo
عضو جامد للمنتدى
عضو جامد للمنتدى


عدد الرسائل : 140
تاريخ التسجيل : 23/03/2008

مُساهمةموضوع: رد: إدارة الذاكرة   الثلاثاء يناير 24, 2012 11:08 am

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

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
طريق المعرفة :: الكمبيوتر و الإنترنت-
انتقل الى: