نموذج الذاكرة (البرمجة)
في مجال الحوسبة، يصف نموذج الذاكرة تفاعلات الخيوط عبر الذاكرة واستخدامها المشترك للبيانات .
التاريخ والأهمية
يُمكّن نموذج الذاكرة المُصرّف من إجراء العديد من التحسينات الهامة. تشمل هذه التحسينات دمج الحلقات، ونقل التعليمات البرمجية في البرنامج، مما قد يؤثر على ترتيب عمليات القراءة والكتابة للمتغيرات المشتركة . قد تُؤدي التغييرات في ترتيب عمليات القراءة والكتابة إلى حدوث تضارب في البيانات . بدون نموذج الذاكرة، قد لا يُطبّق المُصرّف هذه التحسينات على البرامج متعددة الخيوط، أو قد يُطبّق تحسينات غير متوافقة مع تعدد الخيوط، مما يُؤدي إلى ظهور أخطاء برمجية.
لذا، تُطبّق لغات البرمجة الحديثة مثل جافا نموذجًا للذاكرة. يُحدّد هذا النموذج حواجز التزامن التي تُنشأ عبر عمليات تزامن خاصة ومُحدّدة بدقة، مثل الحصول على قفل بالدخول إلى كتلة أو دالة متزامنة. وينص النموذج على أن التغييرات التي تطرأ على قيم المتغيرات المشتركة لا يلزم أن تكون مرئية للخيوط الأخرى إلا عند الوصول إلى حاجز التزامن هذا. علاوة على ذلك، يُحدّد مفهوم حالة التنافس بالكامل بناءً على ترتيب العمليات بالنسبة إلى حواجز الذاكرة هذه. [ 1 ]
تمنح هذه الدلالات المترجمات المُحسِّنة درجةً أكبر من الحرية عند تطبيق التحسينات: إذ يكفي أن يضمن المترجم أن تكون قيم المتغيرات (التي قد تكون مشتركة) عند حواجز التزامن متطابقةً في كلٍّ من الكود المُحسَّن وغير المُحسَّن. وعلى وجه الخصوص، يفترض المترجم أن إعادة ترتيب العبارات في كتلة من الكود لا تحتوي على حاجز تزامن أمرٌ آمن.
تتمحور معظم الأبحاث في مجال نماذج الذاكرة حول:
- تصميم نموذج ذاكرة يسمح بأقصى قدر من الحرية لتحسينات المترجم مع الاستمرار في تقديم ضمانات كافية بشأن البرامج الخالية من التزامن (وربما الأهم من ذلك) البرامج التي تحتوي على تزامن.
- إثبات صحة تحسينات البرنامج فيما يتعلق بنموذج الذاكرة هذا.
كان نموذج ذاكرة جافا أول محاولة لتوفير نموذج ذاكرة شامل للخيوط في لغة برمجة شائعة. [ 2 ] بعد أن تبيّن أنه لا يمكن تنفيذ الخيوط بأمان كمكتبة دون فرض قيود معينة على التنفيذ، ولا سيما أن معايير C و C++ ( C99 و C++03 ) تفتقر إلى القيود اللازمة، [ 3 ] [ 4 ] شرعت اللجنة الفرعية للخيوط في C++ في العمل على نموذج ذاكرة مناسب؛ وفي عام 2005، قدّمت اللجنة وثيقة عمل C رقم 1131 [ 5 ] لحثّ لجنة C على دعم جهودها. وقد قُبلت النسخة النهائية من نموذج الذاكرة المقترح، C++ رقم 2429، [ 6 ] في مسودة معيار C++ في اجتماع أكتوبر 2007 في كونا. [ 7 ] ثم أُدرج نموذج الذاكرة في معايير C++ وC اللاحقة، C++11 و C11 . [ 8 ] [ 9 ] ورثت لغة البرمجة رست معظم نموذج ذاكرة C/C++. [ 10 ]
انظر أيضاً
مراجع
- ↑ جيريمي مانسون وبرايان غوتز (فبراير 2004). "أسئلة وأجوبة حول JSR 133 (نموذج ذاكرة جافا)" . تم الاطلاع عليه بتاريخ 18 أكتوبر 2010.
يصف نموذج ذاكرة جافا السلوكيات المسموح بها في التعليمات البرمجية متعددة الخيوط، وكيفية تفاعل الخيوط عبر الذاكرة. كما يصف العلاقة بين المتغيرات في البرنامج والتفاصيل الدقيقة لتخزينها واسترجاعها من وإلى الذاكرة أو المسجلات في نظام حاسوبي حقيقي. ويتم ذلك بطريقة يمكن تنفيذها بشكل صحيح باستخدام مجموعة واسعة من الأجهزة ومجموعة متنوعة من تحسينات المُصرّف.
- ↑ غوتز، برايان (24 فبراير 2004). "إصلاح نموذج ذاكرة جافا، الجزء 1" . آي بي إم . تم الاسترجاع في 17 فبراير 2008 .
- ↑ بوهر، بيتر أ. (11 سبتمبر 1995). "هل مكتبات التزامن الآمنة ممكنة؟" (ملف PDF) . اتصالات جمعية آلات الحوسبة . تم الاطلاع عليه بتاريخ 12 مايو 2015 .
- ↑ بوهم، هانز-ج. (12 نوفمبر 2004). "لا يمكن تنفيذ الخيوط كمكتبة" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 30 مايو 2017. تم الاطلاع عليه بتاريخ 12 مايو 2015 .
- ↑ بوهم، هانز ؛ ليا، دوغ ؛ بو، بيل (26 أغسطس 2005). "آثار مناقشات نموذج الذاكرة في لغة C++ على لغة C" (ملف PDF) . www.open-std.org . تاريخ الاسترجاع: 12 مايو 2015 .
- ↑ "WG21/N2429: نموذج ذاكرة التزامن (المراجعة النهائية)" . www.open-std.org . 2007-10-05 . تم الاطلاع عليه بتاريخ 2015-05-12 .
- ↑ "N2480: شرح أقل رسمية لنموذج ذاكرة التزامن المقترح في لغة C++" . www.open-std.org . تاريخ الاسترجاع: 12 مايو 2015 .
- ↑ ألكسندريسكو، أندريه؛ بوهم، هانز؛ هيني، كيفلين؛ هاتشينغز، بن؛ ليا، دوغ؛ بو، بيل (4 مارس 2005). "نموذج الذاكرة للغة C++ متعددة الخيوط: المشكلات" (ملف PDF) . تم الاطلاع عليه بتاريخ 24 أبريل 2014.
تواجه مكتبات الخيوط في لغة C++ معضلة تحديد نموذج ذاكرة موسع للغة C++ (ضمنياً أو صراحةً) لتحديد تنفيذ البرنامج. نقترح دمج نموذج ذاكرة مناسب للتنفيذ متعدد الخيوط في معيار C++.
- ↑ بوهم، هانز. "الخيوط ونموذج الذاكرة للغة C++" . تم الاطلاع عليه بتاريخ 24 أبريل 2014.
يوفر هذا [رابط] معلومات تتعلق بالجهود المبذولة لتوضيح معنى برامج C++ متعددة الخيوط، وتوفير بعض واجهات برمجة التطبيقات القياسية المتعلقة بالخيوط حيثما تكون مفقودة حاليًا.
- ↑ "ذا راستونوميكون، الذرات" . تم الاطلاع عليه بتاريخ 2024-07-08 .
ترث لغة راست بشكل واضح نموذج الذاكرة للذرات من لغة C++20.
- ذاكرة الحاسوب
- نماذج الاتساق
- بناء المترجم
- تصميم لغات البرمجة
- أنظمة وقت التشغيل
- التزامن (علوم الحاسوب)
- نماذج أولية لبرمجة الحاسوب
