خابية
تاريخياً وحدة المعالجة المركزية دائما اسرع من الذواكر، إن عملية تطوير الذواكر كانت تسير بشكل موازي مع عملية تطور 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). ويعتبر خيار الكتابة الآنية هو الأفضل في الحالات التي تكتب فيها المعطيات في الموقع لمرة واحدة فقط, إذ يصبح من الأبسط والأسرع أن تعدل كلا الذاكرتين بنفس الوقت.
الكتابة المتأخرة
تبقى الكلمة الآنية الصلبة في الذاكرة على حالها ولا يجري التعديل إلا عندما نحتاج لاستبعاد الكتلة الموافقة من الخابية. نلاحظ هنا أنه في حال بقيت الكتلة كما هي في الخابية, أي لم تبدل محتوياتها, فإن الذاكرة تحتوي المعطيات الصحيحة ولا داعي لإعادة نقلها من الذاكرة المخبئية.
المخبئية والذاكرة الرئيسية على الترتيب, يصبح عندئذ زمن الولوج الفعلي:
نشير هنا أن هو زمن ولوج الذاكرة محسوباً بعد الأخذ بعين لاعتبار تأثير عملية نقل الصفحات فيحال استخدام الذاكرة الظاهرية, ويعتمد هذا الزمن بالطبع على الإستراتيجية المستخدمة لاستبدال الصفحات
يقترب زمن الولوج الفعلي من زمن ولوج الخابية كلما اقترب h من الواحد, أي كلما ارتفعت نسبة الإصابة(ويحدث ذالك مثلاً بأخذ خابية ذات حجم كبير جداً).
نلاحظ أن تناقص نسبة الإصابة بنسبة واحدة بالمائة يؤدي إلى زيادة الزمن الفعلي بعدد من المرات يساوي تقريباً النسبة k, ومنه نستنتج أن ثمن فقدان المعطيات المطلوبة من الخابية عالٍ نوعاً ما من حيث تأثيره على زمن عمل الآلة.
من الوسائط الأخرى التي تؤثر على فعالية الخابية حجم أو سعة الكتلة, وتأثير هذا الوسيط مشابه لتأثير حجم الصفحة على فعالية الذاكرة الظاهرية.
من الصعب جداً جمع معلومات عن تأثير هذه الوسائط في أوضاع التشغيل الحقيقية, ومن الصعب جداً استخدام دارات إلكترونية لمراقبة أداء الذاكرة الافتراضية لان مثل هذه الدارات يجب أن تكون أسرع بكثير من الآلة نفسها.
غلا انه من المكن استخدام برامج لمحاكاة عمل الآلة عند تنفيذها لعمل نمط تقليدي, لكن تعترض هذا المنهج مشكلتان: ففي البداية تكون الخابية فارغة, وتبدي نتيجة لذالك فعالية منخفضة جداً إذ سيظهر عدد كبير من حالات فقدان المعطيات. يطلق على هذا الوضع اسم"الحالة العابرة البدائية "(initialization transient).
وتعتمد مدة هذه الحالة العابرة على حجم الخابية، فكلما ازداد هذا الحجم طالت مدة الحالة العابرة، إن عدد حالت فقدان المعطيات التي تحدث في بداية التشغيل هو تقريباً من نفس سعة مرتبة سعة الذاكرة المخبئية. لذا, وبهدف الحصول على نتائج موثوقة يجب مراقبة أداء الذاكرة لمدة كافية حتى يحدث على الأقل حالة فقدان معطيات(حيث n سعة الخابية) فإذا حصلنا على نسبة فقدان تساوي واحد بالمائة, يجب إنجاز حوال عملية رجوع للذاكرة.
المراجع
- بنية الحاسب
المبادئ النظرية لبرمجيات نظم التشغيل
- ترجمة وإعداد المهندس فادي حجار
- الطبع الأولى 1999
- الناشر شعاع للنشر
وصلات خارجية وداخلية
- يمكنك مراجعة الموضوع التالي : الذاكرة المخبئية : تعريفها, عملها
- أو يمكنك مراجعة الموضوع التالي : تنظيم الكاش في المعالجات التفرعية
- أو يمكنك مراجعة المو(ا)قع التالي للاستزادة : مواضيع مختلفة في تنظيم الذواكر المخبئية
- يمكنك مراجعة المو(ا)قع التالي للاستزادة : memory -- Encyclopaedia Britannica
af:Kasstelsel als:Cache az:Keş bg:Кеш-памет bjn:Teléh bs:Keš ca:Memòria cau cs:Cache da:Cache de:Cache el:Κρυφή μνήμη Cache]] eo:Kaŝmemoro et:Vahemälu eu:Cache memoria fa:حافظه پنهان fi:Välimuisti fr:Mémoire cache gl:Caché he:זיכרון מטמון hr:Priručna memorija hu:Gyorsítótár ia:Cache id:Tembolok (komputer) is:Skyndiminni it:Cache ja:キャッシュ (コンピュータシステム) kk:Мәліметтер бүркемесі ko:캐시 lt:Podėliavimas lv:Kešatmiņa mhr:КЭШ-шарныш mr:सय ms:Cache nl:Cache pap:Cache pl:Pamięć podręczna pt:Cache ro:Memorie cache ru:Кэш simple:Cache sk:Rýchla vyrovnávacia pamäť sq:Cache sr:Кеш меморија su:Sindangan sv:Cache th:แคช tr:Önbellek uk:Кеш ur:ابطن zh:高速缓存