خابية
من ويكيبيديا، الموسوعة الحرة
محتويات |
[عدل] مقدمة:
تاريخياً وحدة المعالجة المركزية دائما اسرع من الذواكر ، إن عملية تطوير الذواكر كانت تسير بشكل موازي مع عملية تطور CPUs و دائماً كان هناك فرق بالسرعة لصالح وحدة المعالجة المركزية، فبعد أن تطلب وحدة المعالجة المركزية المعلومات من الذاكرة الرئسية تبقي وحدة المعالجة المركزية منتظرة لإستجابة الذاكرة الرئسية ، و في أفضل الأحوال ( أي عندما لا تكون الذاكرة الرئسية مشغولة ) فإنة يجب على وحدة المعالجة المركزية الإنتظار 2 او حتى 3 دورات (دورة الناقل).
في الحقيقة ، المشكلة ليست مشكلة تقنية ، و إنما مشكلة اقتصادية . إن المتخصصين في هذا المجال يعرفون كيفية بناء ذواكر سريعة بحيث تكون سرعتها متوافقة مع سرعة وحدة المعالجة المركزية للتخلص من الوقت الضائع في دورة الناقل، لكن المشكلة في التكلفة المرتفعة لهذا النوع من الذواكر و سيكون من المكلف جداً تجهيز حاسوب مع هذا النوع من الذواكر.
وهكذا ، كان هناك خياران امام مهندسين التصميم ، الأول هو استخدام تلك الذواكر السريعة ذات الكلفة العالية ، و الثاني استخدام ذاكرة رخيصة الثمن وذات سرعة بطيئة. فكان الإختيار بأخذ خاصية السرعة من الجانب الأول و خاصية الكلفة المنخفضة من الجانب الآخر و دمجت هذه الخواص لإنتاج الذواكر سريعة ذات حجم صغير ( للتقليل من الكلفة ) و سميت بــ الخابية Cache Memory.
[عدل] تنظيم الخابية
يحتوي كل موقع في الخابية كلمة واحدة, وهذا الموقع هو في الواقع صورة لموقع موجود في الذاكرة الرئيسية. بالإضافة لذالك, يجب أن تتضمن كلمة الخابية عنوان الموقع المقابل في الذاكرة الرئيسية, إذ يستخدم هذا العنوان عند محاولة الرجوع إلى الذاكرة, لمعرفة إذا كان للموقع المقصود صورة في الخابية. يمكن أن يتم نسخ كلمة من الذاكرة الرئيسية إلى الخابية بطريقتين:
kut turken
- التقابل المباشر أو الثابت(Fixed or Direct mapping)
- التقابل الحر أو الترابطي(Free or associative mapping
[عدل] تنظيم الخابية على شكل قطاعات (Sector Organized Caches )
تنظم الذاكرة , وكذالك أيضا الخابية , على شكل قطاعات (Sectors), ويتألف كل قطاع من عدة كتل, والتقابل بين القطاعات قي الذاكرتين من النوع الحر. لكل قطاع في الخابية وسم عنونة (Address tag ), أما عنوان الكتلة في الخابية فهو مطابق لعنوانها في الذاكرة . تنقل المعلومات من الذاكرة إلى الخابية على شكل كتلة في كل مرة ولا ينقل القطاع بأكمله, وبالتالي يمكن أن يحتوي القطاع في الخابية عدة كتل فارغة, ويمكن ألا يتضمن القطاع إلا كتلة واحدة فقط. للتمييز بين الكتل الفارغة والكتل المشحونة نستخدم لكل كتل بت إضافية نسميها بت الصلاحية (Validity bit ), فإذا كانت هذه البت تحتوي القيمة 1 تكون الكتلة الموافقة موجودة وصالحة للاستخدام.
عند طلب الوصول إلى كتلة يتم أولاً التحقق من وجود عنوان القطاع الموافق في الذاكرة الترابطية, فإذا وجد هذا القطاع يجب اختبار قيمة بت الصلاحية للكتلة في القطاع, فإذا كانت هذه القيمة تساوي الواجد تكون الكتلة موجودة في الخابية وصالحة للاستخدام وإلا يتولد "خطأ الكتلة" مما يستلزم نقل الكتلة المطلوبة من الذاكرة الرئيسية وتسند بعدها القيمة 1 لبت الصلاحية.
أما إذا لم يكن عنوان القطاع موجودا في الذاكرة الترابطية فيتولد "خطأ القطاع" مما يعني ضرورة الرجوع إلى الذاكرة الرئيسية لجلب القطاع, وقد يطلب الأمر استبعاد أحد القطاعات من الخابية لإفساح المجال للقطاع الجديد وينتقى القطاع المستبعد بالاعتماد على المعيار المناسب.
لكن خطأ القطاع لن يؤدي لجلب القطاع بأكمله من الذاكرة , ولا تنقل إلا الكتلة المطلوبة منه. بعد نقل القطع تسند القيمة 1 لبت الصلاحية الموافق له, أما بتات صلاحية الكتل الأخرى في هذا القطاع فتضبط على القيمة 0 إشارة لعدم صلاحيتها, فهي من بتات القطاع المنقول سابقا والذي تم استبعاده .
تمتاز طريقة التنظيم هذه ببساطتها الناتجة عن تقليص عدد مداخل الذاكرة الترابطية, إذ تستخدم علامة عنونة وحيدة لكل قطاع بدلا من علامة لكل كتلة كما يتقلص أيضا عدد بتات كل مدخل لأن عناوين القطاعات اصغر من عناوين الكتل فالذاكرة تحوي عددا من القطاعات اقل من عدد الكتل, أما أهم مساوي هذه الطريقة فهي أن جزءاً هاماً من الذاكرة الترابطية قد يكون في أي لحظة مشغولاً بكتل غير صالحة للاستخدام.
[عدل] مميزات الطرق المختلفة في تنظيم الخابية
تلخص الصورة التالية أهم مميزات الأنماط السابقة, ويبين الشكل (13-11) مخطط التقابل المستخدم في كل طريقة من هذه الطرق ويوضح الشكل كيف أن بعض الطرق ليست إلا حالات خاصة محدودة من طرق أخرى.
[عدل] استبدال الكتل أو الكلمات
عندما تولد الخابية خطأ الكلمة (أو خطأ الكتلة أو خطأ القطاع ) يجب تفريغ كلمة (أو كتلة أو قطاع) لاستيعاب الجديدة. ولانتقاء الوحدة الواجبة استيعابها يمكن الاعتماد على عدة استراتيجيات, منها:
- الخيار العشوائي
- الرتل FIFO (من يدخل أولا يخرج أولا)
- الوحدة الأقل استخداماَ في الماضي Least recently used
والإستراتجية الأخيرة هي الأكثر شيوعا في التطبيق.
[عدل] الكتابة في الخابية
عندما تكون الكتلة المطلوبة الموجودة في الخابية , تقرأ منها دون الرجوع إلى الذاكرة , إلا أنه عند تنفيذ عملية كتابة (write) يجب الولوج إلى الذاكرة حتى لو كانت موجودة في الخابية. فإذا كان للموقع الذي نكتب فيه في الذاكرة صورة في الخابية يجب اختيار أحد إجراءين:
- الكتابة الآنية (Write through): أي تكتب المعلومات في الذاكرة وفي الخابية بنفس الوقت (وهي الطريقة التي وصفناها سابقا).
- الكتابة المتأخرة (Write back): لا ينعكس التغيير الذي طرأ على الموقع الموجود في الخابية, على الموقع المقابل في الذاكرة إلا عند استبعاد الكلمة من الخابية.2
[عدل] الكتابة الآنية:
تكتب المعلومات في الذاكرة والخابية في نفس الوقت ، ومع أن هذه العملية تبدو معقدة إلا أن لها بعض المزايا الجيدة, فمن ناحية أولى نحافظ على سلامة المعلومات (Integrity), فالمعلومات الموجودة في الخابية تطابق بشكل دائم تلك الموجودة في الذاكرة , ومن ناحية ثانية لن تحتاج لنقل أي كلمة أو كتلة من الخابية إلى الذاكرة . فعند الحاجة لتحرير موقع في الخابية يكفي أن نكتب مباشرة فيها, وبما أن الذاكرة تحتوي دوما المعطيات الصحيحة المحدثة(up dated) يمكن أن تستخدم نفس الكلمة كجزء من عملية إدخال وإخراج دون الخوف من الوقوع على معلومات متقادمة (out dated). ويعتبر خيار الكتابة الآنية هو الأفضل في الحالات التي تكتب فيها المعطيات في الموقع لمرة واحدة فقط, إذ يصبح من الأبسط و الأسرع أن تعدل كلا الذاكرتين بنفس الوقت.
[عدل] الكتابة المتأخرة:
تبقى الكلمة الآنية الصلبة في الذاكرة على حالها ولا يجري التعديل إلا عندما نحتاج لاستبعاد الكتلة الموافقة من الخابية. نلاحظ هنا أنه في حال بقيت الكتلة كما هي في الخابية, أي لم تبدل محتوياتها, فإن الذاكرة تحتوي المعطيات الصحيحة ولا داعي لإعادة نقلها من الذاكرة المخبئية.
المخبئية والذاكرة الرئيسية على الترتيب, يصبح عندئذ زمن الولوج الفعلي:
نشير هنا أن Tap هو زمن ولوج الذاكرة محسوباً بعد الأخذ بعين لاعتبار تأثير عملية نقل الصفحات فيحال استخدام الذاكرة الظاهرية, ويعتمد هذا الزمن بالطبع على الإستراتيجية المستخدمة لاستبدال الصفحات
يقترب زمن الولوج الفعلي Teff من زمن ولوج الخابية Tac كلما اقترب h من الواحد, أي كلما ارتفعت نسبة الإصابة(ويحدث ذالك مثلاً بأخذ خابية ذات حجم كبير جداً).
نلاحظ أن تناقص نسبة الإصابة بنسبة واحدة بالمائة يؤدي إلى زيادة الزمن الفعلي بعدد من المرات يساوي تقريباً النسبةk, ومنه نستنتج أن ثمن فقدان المعطيات المطلوبة من الخابية عالٍ نوعاً ما من حيث تأثيره على زمن عمل الآلة.
من الوسائط الأخرى التي تؤثر على فعالية الخابية حجم أو سعة الكتلة, وتأثير هذا الوسيط مشابه لتأثير حجم الصفحة على فعالية الذاكرة الظاهرية.
من الصعب جداً جمع معلومات عن تأثير هذه الوسائط في أوضاع التشغيل الحقيقية, ومن الصعب جداً استخدام دارات الكترونية لمراقبة أداء الذاكرة الافتراضية لان مثل هذه الدارات يجب أن تكون أسرع بكثير من الآلة نفسها.
غلا انه من المكن استخدام برامج لمحاكاة عمل الآلة عند تنفيذها لعمل نمط تقليدي, لكن تعترض هذا المنهج مشكلتان: ففي البداية تكون الخابية فارغة, وتبدي نتيجة لذالك فعالية منخفضة جداً إذ سيظهر عدد كبير من حالات فقدان المعطيات. يطلق على هذا الوضع اسم"الحالة العابرة البدائية "(initialization transient).
وتعتمد مدة هذه الحالة العابرة على حجم الخابية , فكلما ازداد هذا الحجم طالت مدة الحالة العابرة,إن عدد حالت فقدان المعطيات التي تحدث في بداية التشغيل هو تقريباً من نفس سعة مرتبة سعة الذاكرة المخبئية. لذا, وبهدف الحصول على نتائج موثوقة يجب مراقبة أداء الذاكرة لمدة كافية حتى يحدث على الأقل 100 * n حالة فقدان معطيات(حيث n سعة الخابية ) فإذا حصلنا على نسبة فقدان تساوي واحد بالمائة, يجب إنجاز حوال 10000 * n عملية رجوع للذاكرة.
[عدل] المراجع :
- بنية الحاسب
المبادئ النظرية لبرمجيات نظم التشغيل
- ترجمة وإعداد المهندس فادي حجار
- الطبع الأولى 1999
- الناشر شعاع للنشر والعلوم
[عدل] وصلات خارجية وداخلية
- يمكنك مراجعة الموضوع التالي : الذاكرة المخبئية : تعريفها, عملها
- أو يمكنك مراجعة الموضوع التالي : تنظيم الكاش في المعالجات التفرعية
- أو يمكنك مراجعة المو(ا)قع التالي للاستزادة : مواضيع مختلفة في تنظيم الذواكر المخبئية
- يمكنك مراجعة المو(ا)قع التالي للاستزادة : memory -- Encyclopaedia Britannica

