نموذج الاتساق
في علوم الحاسوب ، يُحدد نموذج الاتساق عقدًا بين المبرمج والنظام، يضمن فيه النظام أنه إذا اتبع المبرمج قواعد العمليات على الذاكرة، فستكون الذاكرة متسقة ، وستكون نتائج قراءة الذاكرة أو كتابتها أو تحديثها قابلة للتنبؤ. تُستخدم نماذج الاتساق في الأنظمة الموزعة، مثل أنظمة الذاكرة المشتركة الموزعة أو مخازن البيانات الموزعة (مثل أنظمة الملفات ، وقواعد البيانات ، وأنظمة النسخ المتماثل التفاؤلي ، أو التخزين المؤقت للويب ). يختلف الاتساق عن التماسك، الذي يحدث في الأنظمة التي تستخدم التخزين المؤقت أو لا تستخدمه، وهو اتساق البيانات بالنسبة لجميع المعالجات. يهتم التماسك بالحفاظ على ترتيب عالمي بحيث ترى جميع المعالجات عمليات الكتابة إلى موقع واحد أو متغير واحد. أما الاتساق فيهتم بترتيب العمليات على مواقع متعددة بالنسبة لجميع المعالجات.
تحافظ لغات البرمجة عالية المستوى ، مثل C++ و Java ، على عقد الاتساق من خلال ترجمة عمليات الذاكرة إلى عمليات منخفضة المستوى بطريقة تحافظ على دلالات الذاكرة ، وإعادة ترتيب بعض تعليمات الذاكرة، وتغليف التزامن المطلوب باستخدام استدعاءات المكتبة مثل pthread_mutex_lock(). [ 1 ]
مثال
افترض حدوث الحالة التالية: [ 2 ]
- يتم تكرار الصف X على العقدتين M و N
- يقوم العميل أ بكتابة الصف X إلى العقدة M
- بعد فترة زمنية t، يقرأ العميل B الصف X من العقدة N
يحدد نموذج الاتساق ما إذا كان العميل B سيرى بالتأكيد عملية الكتابة التي قام بها العميل A، أو لن يراها بالتأكيد، أو لا يمكنه الاعتماد على رؤية عملية الكتابة.
الأنواع
تُحدد نماذج الاتساق قواعد الترتيب الظاهر ووضوح التحديثات، وهي تقع على متصل مع وجود مفاضلات. [ 2 ] هناك طريقتان لتعريف نماذج الاتساق وتصنيفها؛ طريقة الإصدار وطريقة العرض.
- مشكلة
- تصف طريقة الإصدار القيود التي تحدد كيفية إصدار العمليات من قبل عملية ما.
- منظر
- طريقة العرض التي تحدد ترتيب العمليات المرئية للعمليات.
على سبيل المثال، يمكن لنموذج الاتساق أن يحدد أنه لا يُسمح لعملية ما بإصدار عملية أخرى حتى تكتمل جميع العمليات التي صدرت سابقًا. وتفرض نماذج الاتساق المختلفة شروطًا مختلفة. يُعتبر نموذج اتساق أقوى من آخر إذا تطلب جميع شروط ذلك النموذج، بالإضافة إلى شروط أخرى. بعبارة أخرى، يُعتبر النموذج ذو القيود الأقل نموذج اتساق أضعف.
تُحدد هذه النماذج كيفية تصميم المكونات المادية، وبشكل عام، كيفية كتابة المبرمج للبرمجيات. كما يؤثر النموذج المُختار على كيفية إعادة ترتيب التعليمات بواسطة المُترجم . عمومًا، إذا كانت تبعيات التحكم بين التعليمات، وكتابة البيانات في نفس الموقع، مُرتبة، فيمكن للمُترجم إعادة الترتيب حسب الحاجة. مع ذلك، في النماذج الموضحة أدناه، قد تسمح بعض النماذج بإعادة ترتيب كتابة البيانات قبل تحميلها، بينما قد لا تسمح نماذج أخرى بذلك.
نماذج الاتساق القوي
اتساق صارم
يُعدّ الاتساق الصارم أقوى نماذج الاتساق. وبموجب هذا النموذج، يجب أن تُرى عملية الكتابة إلى متغير من قِبل أي معالج على الفور من قِبل جميع المعالجات.
يصف كل من مخطط النموذج الصارم ومخطط النموذج غير الصارم قيد الوقت - اللحظي. ويمكن فهم ذلك بشكل أفضل كما لو كان هناك ساعة عالمية، حيث يجب أن تنعكس كل عملية كتابة في جميع ذاكرات التخزين المؤقت للمعالج بحلول نهاية فترة الساعة تلك. ويجب أن تحدث العملية التالية فقط في فترة الساعة التالية.
في الرسم التخطيطي التالي، يرمز الحرف P إلى "العملية" ويتم تمثيل قيمة الساعة العالمية في عمود التسلسل.
| تسلسل | نموذج صارم | نموذج غير صارم | ||
|---|---|---|---|---|
| الصفحة 1 | الصفحة 2 | الصفحة 1 | الصفحة 2 | |
| 1 | W ( x )1 | W ( x )1 | ||
| 2 | R ( x )1 | R ( x )0 | ||
| 3 | R ( x )1 | |||
هذا هو النموذج الأكثر جمودًا. في هذا النموذج، سيحصل المبرمج على النتيجة المتوقعة في كل مرة. إنه نموذج حتمي. تقتصر أهميته العملية على التجربة الفكرية والشكلية، لأن تبادل الرسائل الفوري مستحيل. لا يُساعد هذا النموذج في الإجابة على سؤال حل التعارضات في عمليات الكتابة المتزامنة لنفس عنصر البيانات، لأنه يفترض استحالة الكتابة المتزامنة.
الاتساق التسلسلي
اقترح لامبورت (1979) نموذج الاتساق التسلسلي. وهو نموذج ذاكرة أضعف من نموذج الاتساق الصارم. [ 3 ] لا يشترط أن تُرى عملية الكتابة إلى متغير ما بشكل فوري، ولكن يجب أن تُرى عمليات الكتابة إلى المتغيرات من قبل معالجات مختلفة بنفس الترتيب من قبل جميع المعالجات. يتحقق الاتساق التسلسلي إذا كانت "نتيجة أي تنفيذ هي نفسها كما لو تم تنفيذ عمليات (القراءة والكتابة) لجميع العمليات على مخزن البيانات بترتيب تسلسلي، وتظهر عمليات كل معالج فردي في هذا التسلسل بالترتيب المحدد في برنامجه." [ 3 ] [ 4 ] حدد أدفي وغاراتشورلو، 1996 [ 5 ] شرطين لتطبيق الاتساق التسلسلي: ترتيب البرنامج وذرية الكتابة.
- ترتيب البرنامج: يضمن ترتيب البرنامج أن كل عملية تصدر طلب ذاكرة مرتبة حسب برنامجها.
- خاصية كتابة البيانات الذرية: تحدد خاصية كتابة البيانات الذرية أن طلبات الذاكرة تتم معالجتها بناءً على ترتيب قائمة انتظار FIFO واحدة.
في الاتساق التسلسلي، لا يوجد مفهوم للوقت أو عمليات الكتابة الأخيرة. توجد بعض العمليات المتداخلة التي تكون متطابقة لجميع العمليات. يمكن للعملية رؤية عمليات الكتابة لجميع العمليات الأخرى، ولكنها لا ترى سوى عمليات القراءة الخاصة بها. يجب الحفاظ على ترتيب البرنامج داخل كل معالج، والترتيب التسلسلي للعمليات بين المعالجات. وللحفاظ على الترتيب التسلسلي للتنفيذ بين المعالجات، يجب أن تبدو جميع العمليات وكأنها تُنفذ بشكل فوري أو ذري بالنسبة لأي معالج آخر.
لا تحتاج هذه العمليات إلا إلى أن تبدو مكتملة، لأنه من المستحيل فعليًا إرسال المعلومات بشكل فوري. على سبيل المثال، في نظام يستخدم ناقلًا واحدًا مشتركًا عالميًا، بمجرد إرسال المعلومات إلى خط الناقل، يُضمن أن جميع المعالجات ستراها في اللحظة نفسها. وبالتالي، فإن تمرير المعلومات إلى خط الناقل يُكمل التنفيذ بالنسبة لجميع المعالجات، ويبدو أنه قد تم تنفيذه. قد تحتوي البنى غير المُخزنة مؤقتًا أو البنى المُخزنة مؤقتًا ذات شبكات الربط البيني غير الفورية على مسار بطيء بين المعالجات والذاكرات. يمكن أن تؤدي هذه المسارات البطيئة إلى عدم اتساق تسلسلي، لأن بعض الذاكرات تستقبل بيانات البث أسرع من غيرها.
قد يؤدي التناسق التسلسلي إلى نتائج غير حتمية. ويعود ذلك إلى أن تسلسل العمليات المتسلسلة بين المعالجات قد يختلف خلال عمليات تشغيل البرنامج المختلفة. يجب أن تتم جميع عمليات الذاكرة وفقًا لترتيب البرنامج.
يمكن تعريف قابلية الترتيب الخطي [ 6 ] (المعروفة أيضًا بالاتساق الذري أو الذاكرة الذرية) [ 7 ] بأنها اتساق تسلسلي مع مراعاة قيود الوقت الحقيقي، وذلك بتحديد وقت بدء ووقت انتهاء لكل عملية. يكون التنفيذ قابلاً للترتيب الخطي إذا تم تنفيذ كل عملية بترتيب خطي، وذلك بوضع نقطة بين وقت بدايتها ووقت انتهائها، مما يضمن الاتساق التسلسلي.
إن التحقق من الاتساق التسلسلي من خلال فحص النموذج غير قابل للتقرير بشكل عام، حتى بالنسبة لبروتوكولات تماسك ذاكرة التخزين المؤقت ذات الحالة المحدودة . [ 8 ]
الاتساق السببي
يُعرّف الاتساق السببي [ 4 ]، كما ورد في تعريف هوتو وأحمد عام 1990 [ 9 ]، بأنه تبسيط لنموذج الاتساق التسلسلي، حيث يُصنّف الأحداث إلى أحداث مرتبطة سببيًا وأخرى غير مرتبطة. ويُحدد هذا التعريف أن عمليات الكتابة المرتبطة سببيًا فقط هي التي يجب أن تُرى بنفس الترتيب من قِبل جميع العمليات. على سبيل المثال، إذا حدث حدثٌ ما (ب) نتيجةً لحدثٍ سابق (أ)، فإن الاتساق السببي يضمن أن ترى جميع العمليات الحدث (ب) بعد الحدث (أ). وقدّم تانينباوم وآخرون عام 2007 تعريفًا أكثر دقة، مفاده أن مخزن البيانات يُعتبر متسقًا سببيًا في ظل الشروط التالية: [ 4 ]
- يجب أن ترى جميع العمليات عمليات الكتابة التي يحتمل أن تكون مرتبطة سببيًا بنفس الترتيب.
- قد تظهر عمليات الكتابة المتزامنة بترتيب مختلف على أجهزة مختلفة.
يُخفف هذا النموذج من شرط الاتساق التسلسلي في عمليات الكتابة المتزامنة التي يُجريها المعالج، وفي عمليات الكتابة غير المرتبطة سببيًا. قد تصبح عمليتا كتابة مرتبطتين سببيًا إذا كانت إحداهما تعتمد على عملية كتابة سابقة لأي متغير، شريطة أن يكون المعالج الذي يُجري الكتابة الثانية قد قرأ الكتابة الأولى للتو. وقد تكون العمليتان قد أُجريتا بواسطة المعالج نفسه أو بواسطة معالجين مختلفين.
كما هو الحال في الاتساق التسلسلي، لا تحتاج القراءات إلى عكس التغييرات على الفور، ولكنها تحتاج إلى عكس جميع التغييرات التي تطرأ على متغير ما بشكل تسلسلي.
| تسلسل | الصفحة 1 | الصفحة 2 | الصفحة 3 | الصفحة 4 |
|---|---|---|---|---|
| 1 | W(x)1 | R(x)1 | R(x)1 | R(x)1 |
| 2 | W(x)2 | |||
| 3 | W(x)3 | R(x)3 | R(x)2 | |
| 4 | R(x)2 | R(x)3 |
يحدث W(x)2 بعد W(x)1 نتيجةً للقراءة التي أجراها P2 إلى x قبل W(x)2، وبالتالي فإن هذا المثال متسق سببيًا وفقًا لتعريف هوتو وأحمد (ولكن ليس وفقًا لتعريف تانينباوم وآخرون، لأن W(x)2 وW(x)3 لا يُشاهدان بنفس الترتيب لجميع العمليات). ومع ذلك، يحدث R(x)2 وR(x)3 بترتيب مختلف على P3 وP4، وبالتالي فإن هذا المثال غير متسق تسلسليًا . [ 10 ]
اتساق المعالج
لضمان اتساق البيانات وتحقيق أنظمة معالجة قابلة للتوسع حيث يمتلك كل معالج ذاكرته الخاصة، تم اشتقاق نموذج اتساق المعالج . [ 10 ] يجب أن تكون جميع المعالجات متسقة في ترتيب قراءة عمليات الكتابة التي يقوم بها معالج واحد، وفي طريقة قراءة عمليات الكتابة التي تقوم بها معالجات مختلفة إلى الموقع نفسه (يتم الحفاظ على التماسك). مع ذلك، لا يلزم أن تكون متسقة عندما تتم عمليات الكتابة بواسطة معالجات مختلفة إلى مواقع مختلفة.
يمكن تقسيم كل عملية كتابة إلى عدة عمليات كتابة فرعية على جميع الذاكرات. قد تتم قراءة البيانات من إحدى هذه الذاكرات قبل اكتمال عملية الكتابة إليها. لذلك، قد تصبح البيانات المقروءة قديمة. وبالتالي، يمكن للمعالج في الحاسوب الشخصي تنفيذ عملية تحميل أحدث عندما يحتاج إلى إيقاف عملية تخزين أقدم. ويظل ترتيب القراءة قبل الكتابة، والقراءة بعد القراءة، والكتابة قبل الكتابة محفوظًا في هذا النموذج.
يشابه نموذج اتساق المعالج [ 11 ] نموذج اتساق ذاكرة الوصول العشوائي غير المتطايرة (PRAM)، مع شرط أقوى ينص على أن جميع عمليات الكتابة إلى نفس موقع الذاكرة يجب أن تُرى بنفس الترتيب التسلسلي من قِبل جميع العمليات الأخرى. يُعد اتساق المعالج أضعف من الاتساق التسلسلي، ولكنه أقوى من نموذج اتساق ذاكرة الوصول العشوائي غير المتطايرة (PRAM).
يُطبّق نظام ستانفورد داش متعدد المعالجات نمطًا مختلفًا من اتساق المعالجات لا يُقارن (لا هو أضعف ولا هو أقوى) بتعريفات غودمان. [ 12 ] يجب أن تكون جميع المعالجات متسقة في ترتيب قراءة عمليات الكتابة من معالج واحد، وفي طريقة قراءة عمليات الكتابة من معالجات مختلفة إلى الموقع نفسه. مع ذلك، لا يلزمها الاتساق عندما تكون عمليات الكتابة من معالجات مختلفة إلى مواقع مختلفة.
اتساق ذاكرة الوصول العشوائي المتسلسل، أو اتساق FIFO
قدّم ليبتون وساندبرغ في عام 1988 [ 13 ] مفهوم اتساق ذاكرة الوصول العشوائي المُجزأة (اتساق PRAM) كأحد أوائل نماذج الاتساق الموصوفة. ونظرًا لتعريفه غير الرسمي، توجد في الواقع نسختان مختلفتان بشكل طفيف على الأقل [ 12 ] ، إحداهما من إعداد أحمد وآخرون، والأخرى من إعداد موسبرغر.
في اتساق PRAM، تنظر جميع العمليات إلى عمليات عملية واحدة بنفس ترتيب إصدارها، بينما يمكن النظر إلى العمليات الصادرة عن عمليات مختلفة بترتيبات مختلفة من عمليات مختلفة. يُعد اتساق PRAM أضعف من اتساق المعالج. يُخفف PRAM من الحاجة إلى الحفاظ على التماسك في موقع واحد عبر جميع معالجاته. هنا، يمكن تنفيذ عمليات القراءة لأي متغير قبل عمليات الكتابة في المعالج. مع ذلك، يبقى ترتيب القراءة قبل الكتابة، والقراءة بعد القراءة، والكتابة قبل الكتابة محفوظًا في هذا النموذج.
| تسلسل | الصفحة 1 | الصفحة 2 | الصفحة 3 | الصفحة 4 |
|---|---|---|---|---|
| 1 | W(x)1 | |||
| 2 | R(x)1 | |||
| 3 | W(x)2 | |||
| 4 | R(x)1 | R(x)2 | ||
| 5 | R(x)2 | R(x)1 |
اتساق ذاكرة التخزين المؤقت
يتطلب اتساق ذاكرة التخزين المؤقت [ 11 ] [ 14 ] أن تُنفذ جميع عمليات الكتابة إلى نفس موقع الذاكرة بترتيب تسلسلي. يُعد اتساق ذاكرة التخزين المؤقت أضعف من اتساق المعالج، ولا يُقارن باتساق ذاكرة الوصول العشوائي الثابتة (PRAM).
اتساق بطيء

في نموذج الاتساق البطيء، [ 14 ] إذا قرأ أحد العمليات قيمةً كُتبت مسبقًا في موقع ذاكرة، فلن يتمكن من قراءة أي قيمة سابقة من ذلك الموقع لاحقًا. وتكون عمليات الكتابة التي تُجريها العملية مرئيةً لها فورًا. يُعدّ الاتساق البطيء نموذجًا أضعف من نموذجي اتساق ذاكرة الوصول العشوائي الثابتة (PRAM) واتساق ذاكرة التخزين المؤقت.
مثال: يوضح مخطط الذاكرة البطيئة مثالاً على بطء التناسق. يكتب المعالج الأول القيمة 1 في موقع الذاكرة X، ثم يكتبها في موقع الذاكرة Y. يقرأ المعالج الثاني القيمة 1 من Y، ثم يقرأ القيمة 0 من X، على الرغم من أن X كُتبت فيه القيمة قبل Y.
يوضح هوتو، وفيليب دبليو، ومصطفى أحمد (1990) [ 9 ] أنه من خلال البرمجة المناسبة، يمكن للذاكرة البطيئة (الاتساق) أن تكون معبرة وفعالة. ويشيرون إلى أن الذاكرة البطيئة تتمتع بخاصيتين قيّمتين: الموضعية ودعم الاختزال من الذاكرة الذرية. ويقترحون خوارزميتين لعرض قدرة الذاكرة البطيئة على التعبير.
ضمانات الجلسة
تم اقتراح نماذج الاتساق الأربعة هذه في ورقة بحثية عام 1994. وهي تركز على الضمانات في الحالة التي يقوم فيها مستخدم واحد أو تطبيق واحد فقط بإجراء تعديلات على البيانات. [ 15 ]
اتساق القراءة الرتيب
إذا قرأت عملية ما قيمة عنصر بيانات x، فإن أي عملية قراءة لاحقة على x بواسطة تلك العملية ستعيد دائمًا نفس القيمة أو قيمة أحدث. [ 4 ]
اتساق كتابة رتيب
تُستكمل عملية الكتابة التي يقوم بها أحد العمليات على عنصر البيانات X قبل أي عملية كتابة لاحقة على X بواسطة نفس العملية. [ 4 ]
اتساق قراءة كتاباتك
ستكون القيمة التي يكتبها أحد العمليات على عنصر البيانات X متاحة دائمًا لعملية قراءة لاحقة يقوم بها نفس العملية على عنصر البيانات X. [ 4 ]
اتساق الكتابة بعد القراءة
تضمن عملية الكتابة التي يقوم بها أحد العمليات على عنصر البيانات x بعد عملية قراءة سابقة على x من قبل نفس العملية، أن تتم على نفس قيمة x التي تمت قراءتها أو على قيمة أحدث منها. [ 4 ]
نماذج اتساق الذاكرة الضعيفة
تتطلب النماذج التالية مزامنة محددة من قبل المبرمجين.
ترتيب ضعيف
يُصنّف الترتيب الضعيف عمليات الذاكرة إلى فئتين: عمليات البيانات وعمليات التزامن . ولفرض ترتيب البرنامج، يحتاج المبرمج إلى إيجاد عملية تزامن واحدة على الأقل فيه. تُشير عمليات التزامن إلى المعالج للتأكد من إتمامه لجميع العمليات السابقة التي نفذتها جميع المعالجات الأخرى، ومن اطلاعه عليها. يُحافظ على ترتيب البرنامج وذريته فقط في عمليات التزامن، وليس في جميع عمليات القراءة والكتابة. وقد استُنتج هذا من فهم أن بعض عمليات الذاكرة - كتلك التي تُجرى في القسم الحرج - لا يلزم أن تراها جميع المعالجات إلا بعد إتمام جميع العمليات في القسم الحرج. ويفترض هذا أن إعادة ترتيب عمليات الذاكرة إلى مناطق البيانات بين عمليات التزامن لا يؤثر على نتيجة البرنامج. ويستغل هذا حقيقة أن البرامج المصممة للتنفيذ على نظام متعدد المعالجات تحتوي على التزامن المطلوب لضمان عدم حدوث تضارب في البيانات، وإنتاج نتائج القسم الحرج دائمًا. [ 16 ]
| الصفحة 1 | الصفحة 2 |
|---|---|
X = 1؛ سياج xready = 1; | سور بينما (!xready) {}; سور ص = 2؛ |
لا يتم التهاون في التناسق في هذا النموذج. بمجرد استيفاء هذه المتطلبات، يمكن إعادة ترتيب جميع عمليات البيانات الأخرى. وتتمثل آلية العمل في أن عدادًا يتتبع عدد عمليات البيانات، ولا تُنفَّذ عملية التزامن إلا بعد أن يصبح هذا العداد صفرًا. علاوة على ذلك، لا تُنفَّذ أي عمليات بيانات أخرى إلا بعد اكتمال جميع عمليات التزامن السابقة. يمكن تداخل عمليات الذاكرة بين متغيري تزامن وإعادة ترتيبها دون التأثير على صحة البرنامج. يضمن هذا النموذج الحفاظ على ذرية الكتابة دائمًا، وبالتالي لا حاجة إلى أي آلية أمان إضافية للترتيب الضعيف.
للحفاظ على الترتيب الضعيف، يجب تنفيذ عمليات الكتابة السابقة لعملية التزامن بشكل عام قبل عملية التزامن نفسها. كما يجب تنفيذ العمليات اللاحقة لعملية التزامن فقط بعد اكتمالها. وبالتالي، يكون الوصول إلى متغيرات التزامن متسقًا تسلسليًا، ويجب ألا تتم أي عملية قراءة أو كتابة إلا بعد اكتمال عمليات التزامن السابقة.
يعتمد البرنامج بشكل كبير على التزامن الصريح. بالنسبة لنماذج الترتيب الضعيف، يجب على المبرمج استخدام تعليمات القفل الذرية مثل اختبار وتعيين، وجلب وتنفيذ، وتخزين مشروط، وتحميل مرتبط، أو تسمية متغيرات التزامن أو استخدام الحواجز.
اتساق الإصدار
يُخفف نموذج اتساق الإصدار من نموذج الاتساق الضعيف من خلال التمييز بين عملية مزامنة الدخول وعملية مزامنة الخروج. في ظل الترتيب الضعيف، عند الرغبة في رؤية عملية مزامنة، يجب أن تكون جميع العمليات في جميع المعالجات مرئية قبل إتمام عملية المزامنة ومتابعة المعالج. أما في ظل نموذج اتساق الإصدار، أثناء الدخول إلى قسم حرج، يُسمى "الاستحواذ"، يجب إكمال جميع العمليات المتعلقة بمتغيرات الذاكرة المحلية. أثناء الخروج، الذي يُسمى "الإصدار"، يجب نشر جميع التغييرات التي أجراها المعالج المحلي إلى جميع المعالجات الأخرى. ويظل التماسك محفوظًا.
عملية الاستحواذ هي عملية تحميل/قراءة تُجرى للوصول إلى القسم الحرج. أما عملية التحرير فهي عملية تخزين/كتابة تُجرى للسماح للمعالجات الأخرى باستخدام المتغيرات المشتركة.
من بين متغيرات التزامن، يمكن الحفاظ على الاتساق التسلسلي أو اتساق المعالج. باستخدام الاتساق التسلسلي، يجب معالجة جميع متغيرات التزامن المتنافسة بالترتيب. أما باستخدام اتساق المعالج، فيكفي أن يتبع زوج من المتغيرات المتنافسة هذا الترتيب فقط. ويمكن السماح بعمليات الاستحواذ الأحدث قبل الإصدارات الأقدم.
RCsc و RCPC
يوجد نوعان من اتساق الإصدار: اتساق الإصدار مع الاتساق التسلسلي (RCsc) واتساق الإصدار مع اتساق المعالج (RCpc). يشير النوع الأخير إلى نوع الاتساق المطبق على العمليات المحددة أدناه كعمليات خاصة.
توجد عمليات ذاكرة خاصة (مقارنةً بالعمليات العادية)، تتألف بدورها من فئتين: عمليات التزامن (sync ) وعمليات عدم التزامن ( nsync) . الأخيرة هي عمليات لا تُستخدم للتزامن، بينما الأولى تُستخدم للتزامن، وتتألف من عمليتي الاستحواذ والإفراج . الاستحواذ هو في جوهره عملية قراءة من الذاكرة تُستخدم للوصول إلى مجموعة معينة من المواقع المشتركة. أما الإفراج، فهو عملية كتابة تُنفذ لمنح الإذن بالوصول إلى المواقع المشتركة.
بالنسبة للاتساق التسلسلي (RCsc)، فإن القيود هي:
- الحصول على → الكل،
- الكل → إصدار،
- خاص → خاص.
لتحقيق اتساق المعالج (RCpc)، يتم تخفيف ترتيب كتابة البرنامج للقراءة، مع وجود قيود:
- الحصول على → الكل،
- الكل → إصدار،
- خاص → خاص (باستثناء عندما تتبع عملية الكتابة الخاصة عملية قراءة خاصة).
ملاحظة: يشير الرمز A → B أعلاه إلى أنه إذا سبقت العملية A العملية B في ترتيب البرنامج، فسيتم فرض ترتيب البرنامج.
اتساق الدخول
هذا نموذج مُعدَّل من نموذج اتساق الإصدار. ويتطلب أيضًا استخدام تعليمات الاستحواذ والإصدار لتحديد الدخول أو الخروج من قسم حرج بشكل صريح. مع ذلك، في ظل اتساق الدخول، يُخصَّص لكل متغير مشترك متغير تزامن خاص به. بهذه الطريقة، فقط عند الاستحواذ على المتغير x، يجب إكمال جميع العمليات المتعلقة بـ x بالنسبة لهذا المعالج. يسمح هذا بتنفيذ عمليات متزامنة على أقسام حرجة مختلفة لمتغيرات مشتركة مختلفة. لا يمكن ملاحظة التزامن في العمليات الحرجة على نفس المتغير المشترك. سيكون نموذج الاتساق هذا مفيدًا عندما يمكن معالجة عناصر مصفوفة مختلفة في الوقت نفسه.
الاتساق المحلي
في نموذج الاتساق المحلي، [ 14 ] تُنفّذ كل عملية عملياتها الخاصة بالترتيب الذي يُحدده برنامجها. ولا يوجد أي قيد على ترتيب تنفيذ عمليات الكتابة للعمليات الأخرى. يُعدّ الاتساق المحلي أضعف نماذج الاتساق في أنظمة الذاكرة المشتركة.
الاتساق العام
في الاتساق العام، [ 17 ] جميع نسخ موقع الذاكرة تكون متطابقة في النهاية بعد اكتمال جميع عمليات الكتابة.
الاتساق النهائي
يُعدّ نموذج الاتساق النهائي [ 4 ] نموذجًا للاتساق الضعيف في نظام يفتقر إلى التحديثات المتزامنة. وينص هذا النموذج على أنه إذا لم يستغرق أي تحديث وقتًا طويلاً جدًا، فإن جميع النسخ المتماثلة تصبح متسقة في النهاية.
تعتمد معظم قواعد البيانات اللامركزية المشتركة نموذج اتساق نهائي، إما نموذج BASE: المتاح أساسًا؛ ذو الحالة المرنة؛ والمتسق في النهاية، أو نموذج SALT: الذي يجمع بين خصائص ACID وBASE، ويُسمى أحيانًا SALT: التسلسلي؛ المتفق عليه؛ المسجل؛ المقاوم للتلاعب، والمتماثل أيضًا؛ غير الخاضع لإدارة المسؤول؛ المسجل؛ والمتوافق زمنيًا. [ 18 ] [ 19 ] [ 20 ]
نماذج اتساق الذاكرة المرنة
يمكن تعريف نماذج اتساق مختلفة بتخفيف شرط واحد أو أكثر من شروط الاتساق التسلسلي ، وتُسمى هذه النماذج بنماذج الاتساق المُخففة. [ 7 ] لا تُوفر هذه النماذج اتساق الذاكرة على مستوى العتاد. في الواقع، يتحمل المبرمجون مسؤولية تطبيق اتساق الذاكرة من خلال استخدام تقنيات التزامن. تُصنف النماذج المذكورة أعلاه بناءً على أربعة معايير، وسيتم شرحها بالتفصيل لاحقًا.
هناك أربع مقارنات لتحديد الاتساق المرن:
- الاسترخاء
- إحدى طرق تصنيف الاتساق المُخفف هي تحديد متطلبات الاتساق التسلسلي التي يتم تخفيفها. يمكننا الحصول على نماذج أقل صرامة بتخفيف متطلبات ترتيب البرنامج أو متطلبات ذرية الكتابة التي حددها أدفي وغاراتشورلو، 1996. [ 5 ] يضمن ترتيب البرنامج أن كل عملية تُصدر طلب ذاكرة مُرتبًا حسب برنامجها، بينما تُحدد ذرية الكتابة أن طلبات الذاكرة تُلبى بناءً على ترتيب قائمة انتظار FIFO واحدة. عند تخفيف ترتيب البرنامج، يمكن تخفيف أي أو كل ترتيب أزواج العمليات، سواءً كانت كتابةً تلو كتابة، أو قراءةً تلو كتابة، أو قراءةً/كتابةً تلو قراءة. في نموذج ذرية الكتابة المُخفف، يمكن للعملية رؤية كتاباتها قبل أي معالجات أخرى.
- التزامن مقابل عدم التزامن
- يمكن تعريف نموذج التزامن بتقسيم عمليات الوصول إلى الذاكرة إلى مجموعتين، وتخصيص قيود اتساق مختلفة لكل مجموعة، مع الأخذ في الاعتبار أن إحدى المجموعتين قد يكون لها نموذج اتساق ضعيف، بينما تحتاج الأخرى إلى نموذج اتساق أكثر صرامة. في المقابل، يُخصص نموذج التزامن غير المتزامن نفس نموذج الاتساق لأنواع الوصول إلى الذاكرة.
- المشكلة مقابل الرأي
- [ 14 ] توفر طريقة الإصدار محاكاة اتساق تسلسلي من خلال تحديد القيود المفروضة على العمليات لإصدار عمليات الذاكرة. بينما تصف طريقة العرض قيود الرؤية على ترتيب الأحداث للعمليات.
- قوة النموذج النسبية
- تختلف نماذج الاتساق في مدى تقييدها. بمعنى آخر، تفرض نماذج الاتساق الصارمة قيودًا أكثر كمتطلب للاتساق. يمكن تحديد قوة النموذج من خلال تخفيف قيود ترتيب البرنامج أو الذرية، كما يمكن مقارنة قوة النماذج. ترتبط بعض النماذج ارتباطًا مباشرًا إذا طبقت نفس التخفيفات أو أكثر. في المقابل، لا ترتبط النماذج التي تخفف متطلبات مختلفة ارتباطًا مباشرًا.
يتطلب التناسق التسلسلي شرطين أساسيين: ترتيب البرنامج وذرية الكتابة. ويمكن الحصول على نماذج تناسق مُخففة مختلفة بتخفيف هذين الشرطين. ويتم ذلك لتحسين الأداء، مع تخفيف القيود، ولكن يظل المبرمج مسؤولاً عن تطبيق تناسق الذاكرة باستخدام تقنيات التزامن، ويجب أن يكون لديه فهم جيد للأجهزة.
تخفيفات محتملة:
- اكتب لقراءة ترتيب البرنامج
- اكتب لكتابة ترتيب البرنامج
- اقرأ لتقرأ واقرأ لتكتب أوامر البرنامج
الكتابة المريحة للقراءة
تتمثل إحدى طرق تحسين الأداء على مستوى العتاد في تخفيف قيود ترتيب تنفيذ عمليات الكتابة المتبوعة بعمليات القراءة، مما يُخفي فعليًا زمن استجابة عمليات الكتابة. ويعتمد هذا النوع من التخفيف على السماح بعمليات القراءة اللاحقة بترتيب أقل صرامة بالنسبة لعمليات الكتابة السابقة من المعالج. وبسبب هذا التخفيف، قد تفشل بعض البرامج، مثل XXX، في إعطاء نتائج متسقة. في المقابل، من المتوقع أن تُعطي برامج مثل YYY نتائج متسقة نظرًا لالتزامها بقيود ترتيب تنفيذ البرامج المتبقية.
تندرج ثلاثة نماذج ضمن هذه الفئة. يُعدّ نموذج IBM 370 الأكثر صرامةً، حيث يُمكن إتمام عملية قراءة قبل عملية كتابة سابقة إلى عنوان مختلف، ولكن يُمنع إعادة قيمة الكتابة إلا بعد أن تكون جميع المعالجات قد اطلعت عليها. يُخفف نموذج SPARC V8 لترتيب التخزين الكلي (TSO) جزئيًا من قيود نموذج IBM 370، إذ يسمح لعملية القراءة بإعادة قيمة كتابة معالجها الخاص بالنسبة لعمليات الكتابة الأخرى إلى الموقع نفسه، أي أنها تُعيد قيمة كتابتها قبل أن يراها الآخرون. وكما في النموذج السابق، لا يُمكن إعادة قيمة الكتابة إلا بعد أن تكون جميع المعالجات قد اطلعت عليها. أما نموذج اتساق المعالج (PC) فهو الأكثر مرونةً بين النماذج الثلاثة، حيث يُخفف القيود بحيث يُمكن إتمام عملية قراءة قبل عملية كتابة سابقة حتى قبل أن تصبح مرئية للمعالجات الأخرى.
في المثال (أ)، لا يمكن تحقيق هذه النتيجة إلا في معالج IBM 370 لأن أمر القراءة (أ) لا يُنفذ إلا بعد اكتمال أمر الكتابة (أ) في ذلك المعالج. من ناحية أخرى، يمكن تحقيق هذه النتيجة في معالجي TSO وPC لأنهما يسمحان بقراءة العلامات قبل كتابتها في معالج واحد.
في المثال (ب)، لا يمكن تحقيق النتيجة إلا باستخدام PC، حيث يسمح ذلك لـ P2 بإرجاع قيمة الكتابة حتى قبل أن تكون مرئية لـ P3. ولن يكون ذلك ممكناً في النموذجين الآخرين.
لضمان الاتساق التسلسلي في النماذج المذكورة أعلاه، تُستخدم آليات حماية أو حواجز لفرض القيد يدويًا. يحتوي نموذج IBM370 على بعض تعليمات التسلسل المتخصصة التي تُوضع يدويًا بين العمليات. قد تتضمن هذه التعليمات تعليمات ذاكرة أو تعليمات غير متعلقة بالذاكرة، مثل التفرعات. من ناحية أخرى، لا يوفر نموذجا TSO وPC آليات حماية، ولكن لا يزال بإمكان المبرمجين استخدام عمليات القراءة والتعديل والكتابة لإظهار أن ترتيب البرنامج لا يزال محفوظًا بين عملية كتابة وقراءة لاحقة. في حالة TSO، يبدو أن ترتيب البرنامج محفوظ إذا تم استبدال القراءة أو الكتابة، التي هي بالفعل جزء من عملية قراءة-تعديل-كتابة، بعملية قراءة-تعديل-كتابة أخرى، وهذا يتطلب أن تكون الكتابة في عملية القراءة-التعديل-الكتابة "وهمية" تُعيد قيمة القراءة. وبالمثل بالنسبة لـ PC، يبدو أن ترتيب البرنامج محفوظ إذا تم استبدال القراءة بالكتابة أو إذا كانت بالفعل جزءًا من عملية قراءة-تعديل-كتابة.
مع ذلك، لا يمكن إجراء تحسينات المُصرّف بعد تطبيق هذا التخفيف وحده. تتطلب تحسينات المُصرّف مرونة كاملة لإعادة ترتيب أي عمليتين في أمر الشراء، لذا فإن القدرة على إعادة ترتيب عملية الكتابة بالنسبة لعملية القراءة ليست مفيدة بما يكفي في هذه الحالة.
| الصفحة 1 | الصفحة 2 |
|---|---|
| أ = العلم1 = العلم2 = 0 | |
| flag1 = 1 | flag2 = 1 |
| أ = 1 | أ = 2 |
| reg1 = A | reg3 = A |
| reg2 = flag2 | reg4 = flag1 |
| reg1 = 1; reg3 = 2, reg2 = reg4 = 0 | |
| الصفحة 1 | الصفحة 2 | الصفحة 3 |
|---|---|---|
| أ = ب = ٠ | ||
| أ = 1 | ||
| إذا كان (A == 1) | ||
| ب = 1 | إذا كان (ب == 1) | |
| reg1 = A | ||
| B = 1، reg1 = 0 | ||
الكتابة المريحة للقراءة والكتابة للكتابة
تُخفف بعض النماذج من قيود ترتيب البرنامج، حتى بين عمليات الكتابة إلى مواقع مختلفة. يُعد نموذج ترتيب التخزين الجزئي (PSO) في معالج SPARC V8 المثال الوحيد على هذا النوع من النماذج. وتُعتبر القدرة على تنفيذ عمليات الكتابة المتداخلة والمتتابعة إلى مواقع مختلفة من المعالج نفسه الميزة الرئيسية لتحسين أداء الأجهزة التي يوفرها نموذج PSO. يُشابه نموذج PSO نموذج TSO من حيث متطلبات الذرية، حيث يسمح للمعالج بقراءة قيمة كتابته الخاصة، ويمنع المعالجات الأخرى من قراءة كتابة معالج آخر قبل أن تصبح الكتابة مرئية لجميع المعالجات الأخرى. يحافظ نموذج PSO على ترتيب البرنامج بين عمليتي كتابة باستخدام تعليمة STBAR صريحة. تُدرج تعليمة STBAR في مخزن مؤقت للكتابة في التطبيقات التي تستخدم مخازن مؤقتة للكتابة من نوع FIFO. يُستخدم عداد لتحديد اكتمال جميع عمليات الكتابة السابقة لتعليمة STBAR، مما يُحفز عملية كتابة إلى نظام الذاكرة لزيادة العداد. يُؤدي تأكيد الكتابة إلى إنقاص العداد، وعندما يُصبح العداد صفرًا، فهذا يُشير إلى اكتمال جميع عمليات الكتابة السابقة.
في المثالين أ و ب، يسمح PSO بكلا النتيجتين غير المتوافقتين تسلسليًا. وتشبه آلية الأمان التي يوفرها PSO آلية TSO، حيث يفرض ترتيب البرنامج من الكتابة إلى القراءة، ويضمن ذرية الكتابة.
على غرار النماذج السابقة، فإن التسهيلات التي يسمح بها PSO ليست مرنة بما يكفي لتكون مفيدة لتحسين المترجم، الأمر الذي يتطلب تحسينًا أكثر مرونة.
أوامر برامج القراءة والكتابة المريحة: ألفا، RMO، وباور بي سي
في بعض النماذج، يتم تخفيف جميع العمليات التي تُجرى على مواقع مختلفة. قد يُعاد ترتيب عملية قراءة أو كتابة بالنسبة لعملية قراءة أو كتابة أخرى في موقع مختلف. يُصنف الترتيب الضعيف ضمن هذه الفئة، كما يندرج تحتها نوعان من نماذج اتساق الإصدار (RCsc وRCpc). وتُقترح ثلاثة بنى معمارية تجارية ضمن هذه الفئة من التخفيف: Digital Alpha، وSPARC V9 (ترتيب الذاكرة المُخفف)، ونماذج IBM PowerPC .
تُظهر هذه البنى التجارية الثلاث تعليمات حاجز صريحة كآلية أمان. يوفر نموذج ألفا نوعين من تعليمات الحاجز: حاجز الذاكرة (MB) وحاجز كتابة الذاكرة (WMB). يمكن استخدام عملية حاجز الذاكرة للحفاظ على ترتيب البرنامج لأي عملية ذاكرة تسبق الحاجز مع عملية ذاكرة تلي الحاجز. وبالمثل، يحافظ حاجز كتابة الذاكرة على ترتيب البرنامج بين عمليات الكتابة فقط. يوفر نموذج SPARC V9 RMO تعليمة MEMBAR التي يمكن تخصيصها لترتيب عمليات القراءة والكتابة السابقة بالنسبة لعمليات القراءة والكتابة اللاحقة. لا حاجة لاستخدام تعليمات القراءة-التعديل-الكتابة لتحقيق هذا الترتيب لأن تعليمة MEMBAR يمكن استخدامها لترتيب عملية كتابة بالنسبة لعملية قراءة لاحقة. يستخدم نموذج PowerPC تعليمة حاجز واحدة تسمى تعليمة SYNC. وهي مشابهة لتعليمة حاجز الذاكرة، ولكن مع استثناء بسيط يتمثل في إمكانية حدوث عمليات القراءة خارج ترتيب البرنامج حتى لو تم وضع تعليمة SYNC بين عمليتي قراءة لنفس الموقع. يختلف هذا النموذج أيضًا عن نموذجي ألفا وRMO من حيث الذرية، حيث يسمح برؤية عملية الكتابة قبل اكتمال عملية القراءة. قد يكون من الضروري استخدام مجموعة من عمليات القراءة والتعديل والكتابة لخلق وهم ذرية الكتابة.
تسمح نماذج RMO وPowerPC بإعادة ترتيب عمليات القراءة إلى نفس الموقع. وتخالف هذه النماذج الترتيب التسلسلي في المثالين (أ) و(ب). ومن التسهيلات الإضافية المسموح بها في هذه النماذج إمكانية تداخل عمليات الذاكرة التي تلي عملية القراءة وإعادة ترتيبها بالنسبة لعملية القراءة. كما تسمح نماذج Alpha وRMO لعملية القراءة بإرجاع قيمة كتابة سابقة لمعالج آخر. ومن وجهة نظر المبرمج، يجب أن تحافظ هذه النماذج على وهم ذرية الكتابة، على الرغم من أنها تسمح للمعالج بقراءة كتابته الخاصة مبكرًا.
نماذج الذاكرة التفاعلية
نموذج الذاكرة المعاملاتية [ 7 ] هو نموذج اتصال لأنظمة الذاكرة المشتركة المدعومة برمجياً أو عتادياً، يجمع بين تماسك ذاكرة التخزين المؤقت وتناسق الذاكرة. يوفر هذا النموذج تناسق الذاكرة وتماسك ذاكرة التخزين المؤقت معاً. المعاملة هي سلسلة من العمليات التي ينفذها معالج لتحويل البيانات من حالة متناسقة إلى أخرى. تُنفذ المعاملة إما بالتثبيت عند عدم وجود تعارض، أو بالإلغاء. في حالة التثبيت، تصبح جميع التغييرات مرئية لجميع المعالجات الأخرى عند اكتمال المعاملة، بينما في حالة الإلغاء، تُفقد جميع التغييرات. بالمقارنة مع نماذج التناسق غير المقيد، يُعد نموذج الذاكرة المعاملاتية أسهل استخداماً، ويمكنه توفير أداء أعلى من نموذج التناسق التسلسلي.
نماذج اتساق أخرى
بعض نماذج الاتساق الأخرى هي كما يلي:
- الاتساق السببي [ 21 ] [ 22 ]
- الرتابة بين العملاء [ 23 ]
- اتساق دلتا
- قوام الشوكة
- إمكانية التسلسل بنسخة واحدة
- قابلية التسلسل
- اتساق حقل المتجهات
- اتساق ضعيف
- اتساق قوي
تم ابتكار العديد من نماذج الاتساق الأخرى للتعبير عن القيود المتعلقة بترتيب العمليات أو وضوحها، أو للتعامل مع افتراضات محددة للأخطاء. [ 24 ]
الاتساق والتكرار
يُعرّف تانينباوم وآخرون (2007) [ 4 ] سببين رئيسيين للنسخ المتماثل: الموثوقية والأداء. يُمكن تحقيق الموثوقية في نظام الملفات المنسوخ عن طريق التبديل إلى نسخة متماثلة أخرى في حالة تعطل النسخة الحالية. كما يحمي النسخ المتماثل البيانات من التلف بتوفير نسخ متعددة منها على نسخ متماثلة مختلفة. ويُحسّن الأداء أيضًا بتقسيم العمل. مع أن النسخ المتماثل يُحسّن الأداء والموثوقية، إلا أنه قد يُسبب مشاكل في اتساق البيانات بين النسخ المتعددة. وتكون النسخ المتعددة متسقة إذا أعادت عملية القراءة القيمة نفسها من جميع النسخ، وإذا قامت عملية الكتابة، كعملية ذرية واحدة (معاملة)، بتحديث جميع النسخ قبل أي عملية أخرى. يُشير تانينباوم وأندرو ومارتن فان ستين (2007) [ 4 ] إلى هذا النوع من الاتساق بالاتساق المُحكم الذي يُوفره النسخ المتماثل المتزامن. مع ذلك، يُعدّ تطبيق التزامن الشامل للحفاظ على اتساق جميع النسخ مكلفًا. ومن طرق تقليل تكلفة التزامن الشامل وتحسين الأداء تخفيف قيود الاتساق.
نماذج الاتساق التي تركز على البيانات
عرّف تانينباوم وآخرون، 2007 [ 4 ] نموذج الاتساق بأنه عقد بين البرمجيات (العمليات) وتنفيذ الذاكرة (مخزن البيانات). يضمن هذا النموذج أن تعمل الذاكرة بشكل صحيح إذا اتبعت البرمجيات قواعد محددة. ونظرًا لصعوبة تحديد آخر عملية كتابة في نظام لا يحتوي على ساعة مركزية، يمكن فرض بعض القيود على القيم التي يمكن إرجاعها من عملية القراءة. يهدف نموذج الاتساق المتمحور حول البيانات إلى توفير رؤية متسقة لمخزن البيانات حيث يمكن للعمليات إجراء تحديثات متزامنة.
ترتيب العمليات بشكل متسق
تتعامل بعض نماذج الاتساق، مثل نماذج الاتساق التسلسلي والسببي، مع ترتيب العمليات على البيانات المنسوخة المشتركة لضمان الاتساق. في هذه النماذج، يجب أن تتفق جميع النسخ المتماثلة على ترتيب عالمي متسق للتحديثات.
عمليات التجميع
في عملية التجميع، تكون عمليات الوصول إلى متغيرات التزامن متسقة تسلسليًا. يُسمح للعملية بالوصول إلى متغير تزامن بعد اكتمال جميع عمليات الكتابة السابقة عليه. بعبارة أخرى، لا يُسمح بالوصول إلى متغيرات التزامن إلا بعد إتمام جميع العمليات عليها بالكامل. [ 4 ]
نماذج الاتساق التي تركز على العميل
في الأنظمة الموزعة، يُعد الحفاظ على الاتساق التسلسلي للتحكم في العمليات المتزامنة أمرًا بالغ الأهمية. في بعض مخازن البيانات الخاصة التي لا تُحدَّث بشكل متزامن، يمكن لنماذج الاتساق التي تركز على العميل معالجة حالات عدم الاتساق بطريقة أقل تكلفة. فيما يلي بعض نماذج الاتساق التي تركز على العميل: [ 4 ]
بروتوكولات الاتساق
يتم تحديد تطبيق نموذج الاتساق بواسطة بروتوكول الاتساق. يوضح تانينباوم وآخرون، 2007 [ 4 ] بعض بروتوكولات الاتساق للنماذج التي تركز على البيانات.
الاتساق المستمر
طُرح مفهوم الاتساق المستمر من قِبل يو وفهدات (2000). [ 25 ] في هذا النموذج، تُوصف دلالات الاتساق للتطبيق باستخدام وحدات الاتساق (conits) داخل التطبيق. ونظرًا لاختلاف متطلبات الاتساق باختلاف دلالات التطبيق، يرى يو وفهدات (2000) [ 25 ] أن نموذج الاتساق الموحد المُحدد مسبقًا قد لا يكون مناسبًا. ينبغي على التطبيق تحديد متطلبات الاتساق التي تُلبي دلالاته. في هذا النموذج، يُحدد التطبيق كل متطلب اتساق كوحدة اتساق (conit). يمكن أن تكون وحدة الاتساق اتساقًا ماديًا أو منطقيًا، وتُستخدم لقياس الاتساق. وقد شرح تانينباوم وآخرون (2007) [ 4 ] مفهوم وحدة الاتساق من خلال مثال توضيحي.
هناك ثلاثة تناقضات يمكن للتطبيقات التسامح معها.
- الانحراف في القيم العددية
- [ 25 ] يُحدد الانحراف العددي الفرق بين قيمة conit والقيمة النسبية لآخر تحديث. ويمكن إسناد وزن لعمليات الكتابة، مما يُحدد أهميتها في تطبيق معين. ويمكن تعريف إجمالي أوزان عمليات الكتابة غير المرئية لـ conit على أنه انحراف عددي في التطبيق. وهناك نوعان من الانحراف العددي: الانحراف العددي المطلق والانحراف العددي النسبي.
- انحراف في الترتيب
- [ 25 ] انحراف الترتيب هو التناقض بين الترتيب المحلي للكتابات في نسخة طبق الأصل وترتيبها النسبي في الصورة النهائية النهائية.
- الاختلاف في درجة التلف بين النسخ المتماثلة
- [ 25 ] يُحدد انحراف التقادم صلاحية أقدم عملية كتابة من خلال تحديد الفرق بين الوقت الحالي ووقت أقدم عملية كتابة على وحدة غير مرئية محليًا. يمتلك كل خادم قائمة انتظار محلية لعمليات الكتابة غير المؤكدة، والتي تتطلب ترتيبًا فعليًا لتحديدها وتطبيقها على وحدة. يُمثل الحد الأقصى لطول قائمة انتظار عمليات الكتابة غير المؤكدة حد انحراف الترتيب. عندما يتجاوز عدد عمليات الكتابة الحد المسموح به، فبدلاً من قبول عمليات كتابة جديدة مُقدمة، سيحاول الخادم تنفيذ عمليات الكتابة غير المؤكدة من خلال التواصل مع الخوادم الأخرى بناءً على ترتيب تنفيذ عمليات الكتابة.
إذا تم ضبط جميع حدود الانحراف الثلاثة على الصفر، فإن نموذج الاتساق المستمر هو نموذج الاتساق القوي.
البروتوكولات القائمة على الخلايا الأولية


يمكن اعتبار البروتوكولات القائمة على البيانات الأساسية [ 4 ] فئةً من بروتوكولات الاتساق التي تتميز بسهولة تطبيقها. على سبيل المثال، يُعد الترتيب التسلسلي نموذج اتساق شائعًا عند النظر في ترتيب العمليات بشكل متسق. ويمكن تحديد الترتيب التسلسلي كبروتوكول قائم على البيانات الأساسية. في هذه البروتوكولات، توجد بيانات أساسية مرتبطة بكل عنصر بيانات في مخزن البيانات لتنسيق عمليات الكتابة على ذلك العنصر.
بروتوكولات الكتابة عن بعد
في أبسط بروتوكول قائم على الخادم الأساسي يدعم النسخ المتماثل، والمعروف أيضًا باسم بروتوكول النسخ الاحتياطي الأساسي، يتم توجيه عمليات الكتابة إلى خادم واحد ويمكن تنفيذ عمليات القراءة محليًا.
- مثال: يقدم تانينباوم وآخرون، 2007 [ 4 ] مثالاً على بروتوكول النسخ الاحتياطي الأساسي. يوضح مخطط هذا البروتوكول مثالاً عليه. عندما يطلب عميل كتابة بيانات، يُحال الطلب إلى الخادم الأساسي. يرسل الخادم الأساسي طلبات إلى خوادم النسخ الاحتياطي لتنفيذ التحديث. ثم يستقبل الخادم إشعار التحديث من جميع خوادم النسخ الاحتياطي ويرسل إشعار اكتمال الكتابة إلى العميل. يمكن لأي عميل قراءة آخر تحديث متاح محليًا. يتمثل عيب هذا البروتوكول في أن العميل الذي يرسل طلب التحديث قد يضطر إلى الانتظار لفترة طويلة للحصول على الإشعار قبل المتابعة. يمكن حل هذه المشكلة بتنفيذ التحديثات محليًا، ثم طلب التحديثات من خوادم النسخ الاحتياطي الأخرى. لا يضمن بروتوكول النسخ الاحتياطي الأساسي غير المحظور اتساق التحديث على جميع خوادم النسخ الاحتياطي، ولكنه يُحسّن الأداء. في هذا البروتوكول، ستتلقى جميع العمليات نفس ترتيب عمليات الكتابة، حيث يُرتب هذا البروتوكول جميع عمليات الكتابة الواردة بناءً على وقت فريد عالميًا. تضمن بروتوكولات الحظر أن ترى العمليات نتيجة عملية الكتابة الأخيرة.
بروتوكولات الكتابة المحلية
في بروتوكولات الكتابة المحلية القائمة على الخادم الأساسي، [ 4 ] تنتقل النسخة الأساسية بين العمليات الراغبة في إجراء تحديث. لتحديث عنصر بيانات، تقوم العملية أولاً بنقله إلى موقعه. ونتيجة لذلك، في هذا النهج، يمكن تنفيذ عمليات الكتابة المتتالية محليًا بينما تستطيع كل عملية قراءة نسختها المحلية من عناصر البيانات. بعد أن يُنهي الخادم الأساسي تحديثه، يُعاد توجيه التحديث إلى النسخ الأخرى، وتقوم جميعها بتنفيذ التحديث محليًا. يمكن أن يؤدي هذا النهج غير المتزامن إلى تحسين الأداء. يوضح مخطط بروتوكول الكتابة المحلية نهج الكتابة المحلية في البروتوكولات القائمة على الخادم الأساسي. تطلب عملية ما عملية كتابة في عنصر بيانات x. يُعتبر الخادم الحالي هو الخادم الأساسي الجديد لعنصر البيانات x. تُنفذ عملية الكتابة، وعند انتهاء الطلب، يُرسل الخادم الأساسي طلب تحديث إلى خوادم النسخ الاحتياطي الأخرى. يُرسل كل خادم احتياطي إشعارًا إلى الخادم الأساسي بعد الانتهاء من عملية التحديث.
بروتوكولات الكتابة المتكررة
في بروتوكولات الكتابة المتكررة، [ 4 ] على عكس البروتوكول القائم على الأساسي، يتم تنفيذ جميع التحديثات على جميع النسخ المتماثلة.
النسخ النشط
في النسخ النشط، [ 4 ] توجد عملية مرتبطة بكل نسخة لتنفيذ عملية الكتابة. بعبارة أخرى، تُرسل التحديثات إلى كل نسخة على شكل عملية ليتم تنفيذها. يجب تنفيذ جميع التحديثات بنفس الترتيب في جميع النسخ. ونتيجة لذلك، يلزم وجود آلية بث متعدد مرتبة بالكامل. توجد مشكلة في قابلية التوسع عند تطبيق آلية البث المتعدد هذه في الأنظمة الموزعة الكبيرة. هناك نهج آخر يتم فيه إرسال كل عملية إلى منسق مركزي (مُسلسل). يقوم المنسق أولاً بتعيين رقم تسلسلي لكل عملية ثم يُعيد توجيهها إلى جميع النسخ. لا يستطيع النهج الثاني أيضًا حل مشكلة قابلية التوسع.
بروتوكولات قائمة على النصاب
يُعدّ التصويت أسلوبًا آخر في بروتوكولات الكتابة المتكررة. في هذا الأسلوب، يطلب العميل إذنًا من عدة خوادم ويحصل عليه لقراءة البيانات المتكررة وكتابتها. على سبيل المثال، لنفترض في نظام ملفات موزّع أن ملفًا ما مُكرّر على N خادمًا. لتحديث ملف، يجب على العميل إرسال طلب إلى N/2 + 1 خادمًا على الأقل للحصول على موافقتهم على إجراء التحديث. بعد الموافقة، تُطبّق التغييرات على الملف ويُخصّص له رقم إصدار جديد. وبالمثل، لقراءة ملف مُكرّر، يرسل العميل طلبًا إلى N/2 + 1 خادمًا للحصول على رقم الإصدار المُناسب من تلك الخوادم. تُعتبر عملية القراءة مُكتملة إذا كانت جميع أرقام الإصدارات المُستلمة هي أحدث إصدار. [ 4 ]
بروتوكولات تماسك الذاكرة المؤقتة
في نظام الملفات المُكرَّر، يُوفِّر بروتوكول اتساق ذاكرة التخزين المؤقت [ 4 ] اتساق البيانات في ذاكرة التخزين المؤقت، والتي عادةً ما يتحكَّم بها العملاء. في العديد من المناهج، يُوفَّر اتساق البيانات في ذاكرة التخزين المؤقت بواسطة المكونات المادية الأساسية. بينما تُطبِّق بعض المناهج الأخرى في الأنظمة الموزعة القائمة على البرمجيات الوسيطة حلولًا برمجية لتوفير اتساق البيانات في ذاكرة التخزين المؤقت.
تختلف نماذج اتساق الذاكرة المؤقتة في استراتيجيات كشف التناسق التي تحدد متى تحدث حالات عدم الاتساق. هناك منهجان لكشف عدم الاتساق: الحلول الثابتة والحلول الديناميكية. في الحل الثابت، يحدد المترجم المتغيرات التي قد تُسبب عدم اتساق الذاكرة المؤقتة، وبالتالي يُنفذ تعليمات لتجنب هذه المشكلة. أما في الحل الديناميكي، فيتحقق الخادم من وجود حالات عدم اتساق أثناء التشغيل للتحكم في اتساق البيانات المخزنة مؤقتًا والتي طرأ عليها تغيير بعد تخزينها.
تُعدّ استراتيجية فرض التناسق بروتوكولًا آخر لتناسق ذاكرة التخزين المؤقت. وهي تُحدّد كيفية ضمان اتساق البيانات في ذاكرة التخزين المؤقت باستخدام النسخ الموجودة على الخادم. إحدى طرق الحفاظ على اتساق البيانات هي عدم تخزين البيانات المشتركة مؤقتًا. يمكن للخادم الاحتفاظ بالبيانات وتطبيق بروتوكول تناسق، مثل البروتوكولات القائمة على البيانات الأساسية، لضمان اتساق البيانات المشتركة. في هذا الحل، لا يُسمح للعملاء بتخزين سوى البيانات الخاصة مؤقتًا. في حال تخزين البيانات المشتركة مؤقتًا، توجد طريقتان لفرض تناسق ذاكرة التخزين المؤقت.
في الطريقة الأولى، عند تحديث بيانات مشتركة، يُرسل الخادم إشعارًا بالإبطال إلى جميع ذاكرات التخزين المؤقت. أما في الطريقة الثانية، فيتم نشر التحديث. وتُطبّق معظم أنظمة التخزين المؤقت هاتين الطريقتين أو تختار بينهما ديناميكيًا.
انظر أيضاً
- تماسك الذاكرة المؤقتة – تكافؤ جميع النسخ المخزنة مؤقتًا لموقع في الذاكرة
- الذاكرة المشتركة الموزعة – بنية ذاكرة الحاسوب
- الوصول غير الموحد للذاكرة – تصميم ذاكرة الحاسوب المستخدم في المعالجة المتعددة
مراجع
- ↑ مارك د. هيل (أغسطس 1998). "يجب أن تدعم المعالجات المتعددة نماذج اتساق الذاكرة البسيطة" . مجلة IEEE Computer . 31 (8): 28-34 . Bibcode : 1998Compr..31h..28H . doi : 10.1109/2.707614 .
- 1 2 تود ليبكون (25-10-2014). "أنماط التصميم لقواعد البيانات الموزعة غير العلائقية" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 03-11-2014 . تم الاطلاع عليه بتاريخ 24-03-2011 .
يحدد نموذج الاتساق قواعد الرؤية والترتيب الظاهر للتحديثات. مثال: * يتم نسخ الصف X على العقدتين M وN * يكتب العميل A الصف X إلى العقدة N * تمر فترة زمنية t. * يقرأ العميل B الصف X من العقدة M * هل يرى العميل B عملية الكتابة من العميل A؟ الاتساق هو سلسلة متصلة ذات مفاضلات
- 1 2 لامبورت، ليزلي (سبتمبر 1979). "كيفية صنع حاسوب متعدد المعالجات يُنفذ برامج متعددة العمليات بشكل صحيح". معاملات IEEE في مجال الحواسيب . C-28 (9): 690-691 . Bibcode : 1979ITCmp.100..690L . doi : 10.1109/TC.1979.1675439 . S2CID 5679366 . [متاح للجميع عبر موقع لامبورت الإلكتروني]
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 تانينباوم ، أندرو ؛ مارتن فان ستين ( 2007 ) . "الأنظمة الموزعة". بيرسون برنتيس هول .
- ↑ هيرليهي، موريس ب.؛ جانيت م. وينغ (يوليو 1990). ""الخطية: شرط صحة للكائنات المتزامنة." معاملات ACM في لغات البرمجة والأنظمة . 12 ( 3): 463-492 . CiteSeerX 10.1.1.142.5315 . doi : 10.1145/78969.78972 . S2CID 228785 .
- 1 2 3 مانكين، جيني (2007)، CSG280: نماذج اتساق ذاكرة الحوسبة المتوازية: دراسة استقصائية في البحوث السابقة والحالية
- ↑ شاز قدير (أغسطس 2003). "التحقق من الاتساق التسلسلي على المعالجات المتعددة ذات الذاكرة المشتركة عن طريق التحقق من النموذج". معاملات IEEE للأنظمة المتوازية والموزعة . 14 (8): 730-741 . arXiv : cs/0108016 . Bibcode : 2003ITPDS..14..730Q . doi : 10.1109/TPDS.2003.1225053 . S2CID 1641693 .
- 1 2 هوتو، فيليب دبليو؛ مصطفى أحمد (1990). "الذاكرة البطيئة: إضعاف الاتساق لتعزيز التزامن في الذواكر المشتركة الموزعة". وقائع المؤتمر الدولي العاشر لأنظمة الحوسبة الموزعة . معهد مهندسي الكهرباء والإلكترونيات. الصفحات 302-309 . doi : 10.1109/ICDCS.1990.89297 . ISBN 978-0-8186-2048-5. S2CID 798676 .
- 1 2 "نماذج اتساق الذاكرة" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 2016-03-03 . تم الاطلاع عليه بتاريخ 2016-11-17 .
- 1 2 غودمان، جيمس ر (1991). "اتساق الذاكرة المؤقتة والاتساق التسلسلي". مجموعة عمل واجهة التماسك القابلة للتوسع (SCI) التابعة لمعهد مهندسي الكهرباء والإلكترونيات .
- 1 2 سينفتلبن، ماكسيميليان (2013). التوصيف التشغيلي لنماذج اتساق الذاكرة الضعيفة (ملف PDF) (رسالة ماجستير). جامعة كايزرسلاوترن.
- ↑ ليبتون، آر جيه؛ جيه إس ساندبرغ. (1988). PRAM: ذاكرة مشتركة قابلة للتوسع (تقرير فني). جامعة برينستون. CS-TR-180-88.
- 1 2 3 4 ستينكي، روبرت سي؛ غاري جيه. نوت (2004). "نظرية موحدة لتناسق الذاكرة المشتركة". مجلة ACM . 51 (5): 800-849 . arXiv : cs/0208027 . doi : 10.1145/1017460.1017464 . S2CID 3206071 .
- ↑ تيري، دوغلاس ب.؛ ديمرز، آلان ج.؛ بيترسن، كارين؛ سبريتزر، مايك ج.؛ ثايمر، مارفن م.؛ ويلش، برنت ب. (1 أكتوبر 1994). "ضمانات الجلسة للبيانات المنسوخة المتسقة بشكل ضعيف" . وقائع المؤتمر الدولي الثالث حول أنظمة المعلومات المتوازية والموزعة . مطبعة جمعية مهندسي الكهرباء والإلكترونيات. الصفحات 140-150 . doi : 10.1109/PDIS.1994.331722 . ISBN 0-8186-6400-2. S2CID 2807044 .
- ↑ "نماذج اتساق الذاكرة المشتركة : دليل تعليمي" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 7 سبتمبر 2008. تم الاطلاع عليه بتاريخ 28 مايو 2008 .
- ↑ سينغال، موكيش؛ نيرانجان ج. شيفاراتري (1994). "مفاهيم متقدمة في أنظمة التشغيل" . ماكجرو هيل، إنك .
- ↑ كولين كوس. "SALT: نموذج وصفي لتقنية البلوك تشين" مؤرشف بتاريخ 2020-08-03 في أرشيف الإنترنت . 2018.
- ↑ ستيفان تاي، جاكوب إيبرهاردت، وماركوس كليمز. "ليس حمضًا، وليس قاعدة، بل ملح: منظور معالجة المعاملات في تقنية البلوك تشين" . 2017.
- ↑ تشاو شيه، تشونزي سو، مانوس كابرتسوس، يانغ وانغ، نافيد يغمازاديه، لورنزو ألفيسي، الأمير ماهاجان. "الملح: الجمع بين ACID وBASE في قاعدة بيانات موزعة" .
- ↑ لويد، وايت؛ فريدمان، مايكل؛ كامينسكي، مايكل؛ أندرسن، ديفيد. "لا ترضَ بالحلول النهائية: اتساق سببي قابل للتوسع لتخزين البيانات على نطاق واسع باستخدام COPS" (ملف PDF) . وقائع الندوة الثالثة والعشرين لجمعية ACM حول مبادئ أنظمة التشغيل (SOSP'11) .
- ^ ألميدا، سيرجيو. ليتاو، جواو؛ رودريغز، لويس (2013). “ChainReaction: مخزن بيانات سببي + متسق يعتمد على النسخ المتماثل المتسلسل”. وقائع المؤتمر الأوروبي الثامن ACM لأنظمة الكمبيوتر . ص 85 – 98. دوى : 10.1145 / 2465351.2465361 . رقم ISBN 9781450319942. S2CID 651196 .
- ↑ غانيسان، أيشواريا؛ ألاغابان، رامناثان؛ أرباتشي-دوسو، أندريا؛ أرباتشي-دوسو، رمزي (2020). "اتساق قوي وفعال مع متانة واعية بالاتساق" (ملف PDF) . المؤتمر الثامن عشر لـ USENIX حول تقنيات الملفات والتخزين (FAST 20) .
- ↑ باولو فيوتي؛ ماركو فوكوليتش (2016). "الاتساق في أنظمة التخزين الموزعة غير المعاملاتية". مجلة ACM Computing Surveys . 49 (1): 19:1–19:34. arXiv : 1512.00168 . doi : 10.1145/2926965 . S2CID 118557 .
- 1 2 3 4 5 يو، هايفنغ؛ أمين وحدات (2000). "تصميم وتقييم نموذج اتساق مستمر للخدمات المتكررة". وقائع المؤتمر الرابع حول تصميم وتنفيذ أنظمة التشغيل . 4 : 21.
للمزيد من القراءة
- باولو فيوتي؛ ماركو فوكوليتش (2016). "الاتساق في أنظمة التخزين الموزعة غير المعاملاتية". مجلة ACM Computing Surveys . 49 (1): 19:1–19:34. arXiv : 1512.00168 . doi : 10.1145/2926965 . S2CID 118557 .
- سيزجين، علي (أغسطس 2004). صياغة وتوثيق الذاكرة المشتركة (ملف PDF) (أطروحة دكتوراه). جامعة يوتا . تاريخ الاسترجاع: 27 يونيو 2024 .(يحتوي على العديد من المراجع القيّمة)
- يليك، كاثرين؛ بوناتشيا، دان؛ والاس، تشارلز (2004)، اقتراح لنموذج اتساق ذاكرة UPC، الإصدار 1.0 (ملف PDF) ، تقرير تقني من مختبر لورانس بيركلي الوطني، doi : 10.2172/823757 ، OSTI 823757 ، LBNL-54983، مؤرشف من النسخة الأصلية (ملف PDF) في 20 مايو 2005
- موسبرغر، ديفيد (1993). "نماذج اتساق الذاكرة" . مراجعة أنظمة التشغيل . 27 (1): 18-26 . CiteSeerX 10.1.1.331.2924 . doi : 10.1145/160551.160553 . S2CID 16123648 .
- ساريتا ف. أدفي؛ كورش غاراشورلو (ديسمبر 1996). "نماذج اتساق الذاكرة المشتركة: دليل تعليمي" (ملف PDF) . مجلة IEEE Computer . 29 (12): 66-76 . Bibcode : 1996Compr..29l..66A . CiteSeerX 10.1.1.36.8566 . doi : 10.1109/2.546611 . مؤرشف من النسخة الأصلية (PDF) بتاريخ 7 سبتمبر 2008. تاريخ الاسترجاع: 28 مايو 2008 .
- ستينكي، روبرت سي؛ غاري جيه. نوت (2004). "نظرية موحدة لتناسق الذاكرة المشتركة". مجلة ACM . 51 (5): 800-849 . arXiv : cs.DC/0208027 . doi : 10.1145/1017460.1017464 . S2CID 3206071 .
- تيري، دوغ. "شرح اتساق البيانات المكررة من خلال لعبة البيسبول." مجلة اتصالات جمعية آلات الحوسبة 56.12 (2013): 82-89. https://www.microsoft.com/en-us/research/wp-content/uploads/2011/10/ConsistencyAndBaseballReport.pdf
روابط خارجية
- شرائح عرض IETF
- ترتيب الذاكرة في المعالجات الدقيقة الحديثة، الجزء الأول والثاني ، بقلم بول إي. ماكيني (2005). مجلة لينكس
- نماذج الاتساق
- معالجة المعاملات
