تنظيم الكاش في المعالجات التفرعية

مقدمة

تُشكِّل بنية الذاكرة المشتركة Shared memory تصنيفاً أساسياً في أنظمة الحاسب التفرعية والأنظمة متعددة المعالِجات، وتتألف هذه البنية من عدة وحدات معالجة تتشارك معاً الوصول إلى مساحة ذاكرية مشتركة عامة ويتم تحقيق الاتصال والتخاطب ما بين المهام العاملة على تلك المعالِجات عبر عمليات (القراءة من) و(الكتابة إلى) هذه المساحة الذاكرية المشتركة وكذلك يتم التنسيق وتحقيق التزامن بين جميع وحدات المعالجة باستخدام تلك الذاكرة المشتركة. يتألف النظام الحاسوبي ذو بنية الذاكرة المشتركة من مجموعة من المعالجات المستقلة، مجموعة من وحدات الذاكرة، وشبكة ربط بيني interconnection network. كما يوضح ذلك الشكل(1.1).
يتم الأخذ بعين الاعتبار مشكلتين أساسيتين أثناء تصميم نظام ذاكرة مشتركة: 
المشكلة الأولى هي تناقص درجة الأداء performance degradation التي تحدث بصورة أساسية عند محاولة عدة معالِجات الوصول إلى الذاكرة المشتركة العامة معاً بآن واحد، ويمكن استخدام تصميم نموذجي يتألف من ذواكر مخبئية (كاش cache) مرافقة لكل معالج لحل مشكلة التنافس، إلا أن وجود عدة نسخ من المعطيات تنتشر عبر هذه الذواكر المخبئية يقود إلى مشكلة أساسية أخرى هي مشكلة الترابط المنطقي Cache coherency لهذه النُسخ من المعطيات، إذ يمكن القول أن نسخ المعطيات الموجودة في الذواكر المخبئية هي نسخ مترابطة منطقياً إذا امتلكت جميعها نفس القيمة، وفي حال قيام أحد المعالِجات بالكتابة فوق هذه القيمة أو تعديلها من أجل أي نسخة من نسخ المعطيات تلك فإن هذه النسخة ستصبح متناقضة وغير مترابطة منطقياً مع بقية النُسخ لأنها لم تعد تملك نفس القيمة التي تمتلكها تلك النُسخ
سنناقش فيما يلي عدد من الأنظمة التي تعتمد على بنية الذاكرة المشتركة والاستراتيجيات المستخدمة في كل منها لحل مشكلة الترابط المنطقي للذواكر المخبئية.

الطرائق الأساسية لتحقيق الترابط المنطقي للذواكر المخبئية

يؤدي وجود عدة نسخ من المعطيات ضمن الذواكر المخبئية إلى حدوث مشكلة الترابط المنطقي، إذ تُعتبر النسخ الموجودة في تلك الذواكر مترابطة منطقياً إذا امتلكت جميعها نفس القيمة، وفي حال قيام أحد المعالِجات بالكتابة فوق هذه القيمة من أجل أي نسخة من المعطيات موجودة ضمن أي ذاكرة مخبئية تصبح هذه النسخة غير مترابطة منطقياً (غير متناسقة) مع بقية النُسخ لأنها لم تعد تمتلك نفس القيمة التي تملكها تلك النُسخ. بالتالي سيؤدي وجود معطيات غير متناسقة ضمن نظام ذاكرة مشتركة إلى توليد نتائج خاطئة للنظام تقود إلى نتائج نهائية غير صحيحة. لذلك كان من الضروري إيجاد خوارزميات تؤمن الحفاظ على الترابط المنطقي بين معطيات الذواكر المخبئية فيما بينها من جهة وبين معطيات الذواكر المخبئية والذاكرة المشتركة العامة من جهة أخرى.

الترابط المنطقي من النوع cache-memory

يتم تحقيق الترابط المنطقي بين الذاكرة العامة والذاكرة المخبئية ضمن نظام يتألف من ذاكرة مخبئية وحيدة عبر استخدام إحدى السياستين(*) :
الكتابة الآنية write-through
الكتابة المتأخرة write-back
فعندما تقوم مهمة ما تعمل على المعالج P بطلب معطيات من الموقع الذاكري X الموجود في الذاكرة المشتركة العامة فإن محتويات الموقع X تُنسخ إلى الذاكرة المخبئية ليتم تمريرها إلى المعالج فيما بعد. الآن وعندما يقوم المعالج P بتحديث هذه القيمة الموجودة في ذاكرته المخبئية فإن النسخة الأخرى الموجودة في الذاكرة المشتركة تحتاج للتحديث أيضاً بغية الحفاظ على تناسق للمعطيات بين الذاكرة المخبئية والذاكرة الرئيسية
في سياسة write-through يتم تحديث الذاكرة الرئيسية في كل مرة يتم فيها تحديث الذاكرة المخبئية أي أن المعلومات تُكتب في الذاكرتين الرئيسة والمخبئية بنفس الوقت وعلى الرغم من تعقيد هذه السياسة وتكلفتها العالية للتطبيق إلا أن لها بعض المزايا الجيدة فمن ناحية أولى نحافظ على سلامة المعلومات وتناسقها ما بين الذاكرتين، ومن ناحية ثانية لن تحتاج لنقل أي كلمة أو كتلة من الذاكرة المخبئية إلى الرئيسية فعند الحاجة لتحرير مواقع في الذاكرة المخبئية يكفي أن نكتب مباشرة فيها. وتُعتبر هذه السياسة هي الأفضل في الحالات التي تُكتب فيها المعطيات في الموقع لمرة واحدة فقط، إذ يصبح من الأبسط والأسرع أن تُعدّل كلا الذاكرتين بنفس الوقت
أما في سياسة write-back فإن الذاكرة الرئيسية سيتم تحديثها فقط عندما يتم استبدال كامل البلوك الموجود في الذاكرة المخبئية. أي تبقَ الكلمة الأصلية في الذاكرة الرئيسية على حالها ولا يُجرى التعديل إلا عندما نحتاج لاستبعاد البلوك الموافق من الذاكرة المخبئية. يتطلب تنفيذ هذه السياسة بت إضافي يُدعى بت التعديل dirty bit مع كلمة أو بلوك في الذاكرة المخبئية، تُضبط قيمة هذا البت على الصفر في البداية، وتسند له القيمة (1) عندما تُكتب معطيات في الكلمة أو البلوك الموافق للإشارة إلى ضرورة نقلها من جديد إلى الذاكرة الرئيسية قبل استبعادها من الذاكرة المخبئية، وتقلل هذه السياسة من عمليات الرجوع إلى الذاكرة، فقد تتغير محتويات موقع ما عدة مرات خلال فترة وجوده في الذاكرة المخبئية، ومايهمنا هو القيمة النهائية ولاداعي لنقل كل القيم الوسيطة التي قد تظهر أثناء الحساب ويوضح الجدول(1.1) سياستي write-through و write-back
(*) تم الاعتماد في ترجمة مصطلحي write-back و write-through على كتاب "بنية الحاسب" للمهندس فادي حجار الصادر عن دار شعاع للنشر والعلوم طبعة عام 1999

بروتوكولات الاستطلاع Snooping Protocols

تعتمد بروتوكولات الاستطلاع على مراقبة الفعاليات الحاصلة على الممر وبالتالي نقل الأوامر الخاصة بتحقيق الترابط المنطقي بين أجزاء النظام. تتألف الذاكرة المشتركة العامة من كتل (بلوكات) يمتلك كل بلوك حالة متعلقة به تحدد التغيرات الحاصلة على محتوياته الداخلية. تتغير حالة كل بلوك كنتيجة للعمليات read-miss, read-hit, write-miss, write-hit. تعني حالة الفقدان cache-miss إلى عدم وجود البلوك المطلوب في الذاكرة المخبئية أو أنه موجود ولكن قد تم إلغاء تفعيله. تختلف بروتوكولات الاستطلاع عن بعضها فيما إذا كانت تقوم بتحديث أو إبطال تفعيل نُسخ المعطيات الموجودة في الذواكر المخبئية الأخرى عند قيام معالج ما بإجراء عملية كتابة. وهي تختلف أيضاً على المكان الذي ستجلب منه المعطيات الجديدة في حال فقدانها من الذاكرة المخبئية.
سنقوم فيما يلي باستعراض أهم بروتوكولات الاستطلاع المستخدمة للحفاظ على الترابط المنطقي للذواكر المخبئية.