پیش‌نویس:Consistency model

این مقاله در حال ترجمه از ویکی انگلیسی است, لطفا حذف نشود.

 مقدمه 
‘’‘مدل سازگاری’’’ (به انگلیسی: Consistency model) در علوم رایانه قراردادی میان برنامه‌نویس و یک سامانه محاسباتی تعریف می‌کند که مشخص می‌سازد عملیات انجام‌شده روی حافظه چگونه مشاهده خواهند شد. بر اساس این قرارداد، سامانه تضمین می‌کند که اگر برنامه‌نویس قواعد تعیین‌شده برای دسترسی به حافظه را رعایت کند، رفتار حافظه سازگار و نتایج عملیات خواندن، نوشتن و به‌روزرسانی داده‌ها قابل پیش‌بینی خواهد بود.

مدل‌های سازگاری به‌طور گسترده در سامانه‌های توزیع‌شده مانند حافظه اشتراکی توزیع‌شده و مخازن داده توزیع‌شده مورد استفاده قرار می‌گیرند. این مخازن شامل سامانه‌های پرونده، پایگاه‌های داده، سامانه‌های تکثیر داده و سامانه‌های ذخیره‌سازی وب هستند.

مفهوم سازگاری با مفهوم همدوسی (Coherence) تفاوت دارد. همدوسی به سازگاری داده‌های ذخیره‌شده در یک مکان حافظه میان پردازنده‌های مختلف مربوط می‌شود، در حالی که سازگاری ترتیب مشاهده عملیات انجام‌شده بر روی چندین مکان حافظه را برای تمامی پردازنده‌ها مشخص می‌کند.

زبان‌های برنامه‌نویسی سطح بالا مانند ++C و Java نیز با تبدیل عملیات حافظه به دستورات سطح پایین‌تر و اعمال قواعد همگام‌سازی، قرارداد سازگاری را حفظ می‌کنند.

 مثال 
فرض کنید وضعیت زیر رخ دهد:

 ردیف X بر روی گره‌های M و N تکثیر شده است.
 کاربر A ردیف X را در گره M می‌نویسد.
 پس از گذشت مدت زمانی t، کاربر B ردیف X را از گره N می‌خواند.

مدل سازگاری تعیین می‌کند که آیا کاربر B قطعاً نوشتن انجام‌شده توسط کاربر A را مشاهده خواهد کرد، قطعاً آن را مشاهده نخواهد کرد، یا اینکه مشاهده شدن آن قابل تضمین نیست و به شرایط سامانه بستگی دارد.

 انواع 
مدل‌های سازگاری قواعد مربوط به ترتیب ظاهری و میزان قابل مشاهده بودن به‌روزرسانی‌ها را تعریف می‌کنند. این مدل‌ها دارای مصالحه‌هایی میان کارایی و میزان تضمین سازگاری هستند. به‌طور کلی دو روش برای تعریف و دسته‌بندی مدل‌های سازگاری وجود دارد: روش «صدور» (Issue) و روش «نما» (View).

 روش صدور 
روش صدور محدودیت‌هایی را توصیف می‌کند که مشخص می‌کنند یک فرایند چگونه می‌تواند عملیات خود را صادر کند.

 روش نما 
روش نما ترتیب عملیاتی را تعریف می‌کند که برای فرایندها قابل مشاهده است.

برای مثال، یک مدل سازگاری می‌تواند مشخص کند که یک فرایند تا زمانی که تمام عملیات قبلی آن کامل نشده‌اند، اجازه صدور عملیات جدید را ندارد. مدل‌های مختلف سازگاری شرایط متفاوتی را اعمال می‌کنند. یک مدل زمانی قوی‌تر از مدل دیگر محسوب می‌شود که تمام شرایط آن مدل و محدودیت‌های بیشتری را نیز در بر گیرد. در مقابل، مدلی که محدودیت‌های کمتری داشته باشد، یک مدل سازگاری ضعیف‌تر به شمار می‌آید.

این مدل‌ها تعیین می‌کنند که سخت‌افزار چگونه باید طراحی شود و در سطح بالاتر، برنامه‌نویس چگونه باید کدنویسی کند. مدل انتخاب‌شده همچنین بر نحوه بازآرایی دستورالعمل‌ها توسط کامپایلر تأثیر می‌گذارد. به‌طور کلی، اگر وابستگی‌های کنترلی میان دستورالعمل‌ها حفظ شوند و نوشتن‌ها بر روی یک مکان حافظه مرتب باشند، کامپایلر می‌تواند برخی دستورالعمل‌ها را جابه‌جا کند. 

 مدل‌های سازگاری قوی 

 سازگاری سخت‌گیرانه 
سازگاری سخت‌گیرانه (Strict Consistency) قوی‌ترین مدل سازگاری محسوب می‌شود. در این مدل، هرگاه یک پردازنده مقداری را در یک متغیر بنویسد، تمامی پردازنده‌های دیگر باید آن تغییر را به‌صورت آنی مشاهده کنند.

در این مدل فرض می‌شود که یک ساعت سراسری وجود دارد و تمامی عملیات نوشتن تا پایان همان لحظه زمانی برای همه پردازنده‌ها قابل مشاهده می‌شوند. بنابراین هر عملیات خواندن که پس از آن انجام شود، جدیدترین مقدار نوشته‌شده را مشاهده خواهد کرد.

برای مثال، اگر پردازنده P1 مقدار متغیر X را برابر 1 قرار دهد، هر پردازنده دیگری که بلافاصله پس از آن X را بخواند، باید مقدار 1 را دریافت کند. مشاهده مقدار قدیمی‌تر مجاز نیست.

این مدل کاملاً قطعی است و نتیجه‌ای را که برنامه‌نویس انتظار دارد، در هر بار اجرا فراهم می‌کند. با این حال، پیاده‌سازی عملی آن بسیار دشوار است؛ زیرا در سامانه‌های واقعی انتقال آنی پیام‌ها و به‌روزرسانی هم‌زمان تمامی حافظه‌ها امکان‌پذیر نیست.

به همین دلیل، سازگاری سخت‌گیرانه بیشتر به عنوان یک مدل نظری و ابزاری برای تحلیل سامانه‌های حافظه مورد استفاده قرار می‌گیرد و در سامانه‌های واقعی به ندرت به شکل کامل پیاده‌سازی می‌شود.

 سازگاری ترتیبی 
سازگاری ترتیبی (Sequential Consistency) توسط لزلی لمپورت در سال ۱۹۷۹ معرفی شد. این مدل نسبت به سازگاری سخت‌گیرانه ضعیف‌تر است.

در این مدل لازم نیست عملیات نوشتن به صورت آنی برای همه پردازنده‌ها قابل مشاهده باشد، اما همه پردازنده‌ها باید عملیات نوشتن را در یک ترتیب یکسان مشاهده کنند.

بر اساس تعریف لمپورت، نتیجه اجرای برنامه باید به گونه‌ای باشد که انگار تمامی عملیات خواندن و نوشتن همه فرایندها در یک ترتیب ترتیبی واحد اجرا شده‌اند و عملیات هر فرایند نیز در همان ترتیبی که در برنامه نوشته شده‌اند ظاهر شوند.

برای پیاده‌سازی سازگاری ترتیبی دو شرط اصلی وجود دارد:

 حفظ ترتیب برنامه (Program Order): هر فرایند باید درخواست‌های حافظه را مطابق ترتیب تعیین‌شده در برنامه صادر کند.
 اتمی بودن نوشتن (Write Atomicity): تمامی پردازنده‌ها باید عملیات نوشتن را در یک ترتیب یکسان مشاهده کنند.

در سازگاری ترتیبی مفهوم زمان مطلق وجود ندارد و الزاماً جدیدترین نوشتن فوراً دیده نمی‌شود.

 منابع 

 https://en.wikipedia.org/wiki/Consistency_model