در علوم کامپیوتر، حافظهٔ مشترک توزیع شده (DSM) یک شکل از معماری حافظه است که در آن حافظه‌هایی که به صورت فیزیکی از یکدیگر جدا هستند، این قابلیت را دارند که به عنوان یک فضای آدرس که از نظر منطقی مشترک است، بیان شوند. اینجا، عبارت «مشترک» بدان معنی نیست که یک حافظهٔ متمرکز تنها وجود دارد بلکه یعنی فضای آدرس «مشترک» است (آدرس فیزیکی یکسان روی دو پردازنده به یک مکان در حافظه اشاره دارد). فضای آدرس کلی توزیع شده (DGAS) یک عبارت مشابه برای دست‌های گسترده از پیاده‌سازیهای نرم‌افزاری و سخت‌افزاری است که در آنها هر گره از دسته علاوه بر حافظهٔ اختصاصی هر گره غیرمشترک، به حافظهٔ مشترک نیز دسترسی دارد.

یک سیستم حافظهٔ توزیع شده که اغلب یک مالتی کامپیوتر نامیده می‌شود، متشکل از چندین گره پردازندهٔ مستقل با ماژول‌های محلی حافظه است که توسط یک شبکهٔ کلی با اتصال درونی، ارتباط یافته‌اند. سیستم‌های نرم‌افزاری DSM در یک سیستم عامل یا به عنوان یک کتابخانهٔ برنامه‌نویسی قابل پیاده‌سازی هستند و به عنوان تعمیم‌های معماری حافظهٔ مجازی اساسی قابل تصور هستند. هنگامی که در سیستم عامل پیاده‌سازی شوند، چنین سیستمهایی برای توسعه دهنده شفاف هستند؛ که بدان معنی است که حافظهٔ توزیع شدهٔ اساسی کاملاً از کاربران مخفی است. در مقابل، سیستمهای نرم افزاری DSM پیاده‌سازی شده در سطح کتابخانه یا زبان برنامه‌نویسی شفاف نیستند و توسعه دهندگان معمولاً مجبور هستند تا آنها را به طور مختلف برنامه‌نویسی کنند. با این حال، این سیستمها یک روش قابل حمل تر برای پیاده‌سازی‌های سیستم DSM پیشنهاد می‌کنند. یک سیستم حافظهٔ مشترک توزیع شده، مدل حافظهٔ مشترک را روی یک سیستم حافظهٔ مشترک توزیع شدهی فیزیکی پیاده‌سازی می‌کند.

روش‌های دستیابی به DSM
----------------------

معمولاً دو روش برای دستیابی به یک حافظهٔ مشترک توزیع شده وجود دارد:

* سخت‌افزار، مانند مدارهای همبستگی نهان و رابطه‌ای شبکه.
* نرم‌افزار

### پیاده‌سازی DSM نرم‌افزاری

سه روش برای پیاده‌سازی یک حافظهٔ مشترک توزیع شدهٔ نرم‌افزاری وجود دارد:

* روش مبتنی بر صفحه با استفاده از حافظهٔ مجازی سیستم؛
* روش متغیر مشترک با استفاده از برخی کارهای مرسوم برای دسترسی به متغیرهای مشترک؛
* روش مبتنی بر شیء که به طور ایده‌آل از طریق اصول شیءگرایی به داده‌های مشترک دسترسی پیدا می‌کند.

انتقال پیام در مقابل DSM
------------------------

| عبور پیام | حافظهٔ مشترک توزیع شده |
| --- | --- |
| متغیرها باید مرتب شوند | متغیرها مستقیماً به اشتراک گذاشته می‌شوند |
| هزینهٔ ارتباط قابل توجه است | هزینهٔ ارتباط غیرمشهود است |
| فرایندها با داشتن فضای آدرس اختصاصی محافظت شده‌اند | با عوض کردن داده‌ها ممکن است فرایندها دچار خطا شوند |
| فرایندها باید در زمان یکسان انجام شوند | انجام دادن فرایندها ممکن است با طول عمرهای غیرهمپوشان رخ دهد |

سیستم‌های DSM نرم‌افزاری همچنین انعطاف‌پذیری لازم برای سازماندهی ناحیهٔ حافظهٔ مشترک را به روش‌های مختلف دارند. روش مبتنی بر صفحه، حافظهٔ مشترک را در صفحاتی با اندازهٔ ثابت سازماندهی می‌کند. در مقابل، روش مبتنی بر شیء، ناحیهٔ حافظهٔ مشترک را به صورت یک فضای انتزاعی برای ذخیره کردن اشیاء قابل اشتراک گذرای با اندازه‌های متغیر سازماندهی می‌کند. یک پیاده‌سازی مرسوم دیگر از فضای چندتایی استفاده می‌کند که در آن واحد اشتراک گذاری، یک چندتایی است.

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

DSM از منظر انتزاعی
-------------------

DSM شکلDSM شکل

مزایای استفاده از DSM
---------------------

* با تعداد وسیعی از گره‌ها به خوبی مقیاس می‌پذیرد
* عبور پیام، مخفی است
* می‌تواند پایگاه داده‌های بزرگ و پیچیده را بدون تکرار یا ارسال داده‌ها به فرایندها، مدیریت کند
* به طور کلی نسبت به استفاده از یک سیستم چندپردازنده ارزانتر است
* فضای حافظهٔ مجازی بزرگی را فراهم می‌کند برنامه‌ها به سبب رابطه‌ای برنامه‌نویسی رایج، قابل حمل تر هستند
* برنامه نویسان را از ارسال یا دریافت مطالب ابتدایی حفاظت می‌کند

معایب DSM
---------

* به طور کلی در دسترسی، کندتر از حافظهٔ مشترک توزیع نشده است
* باید حفاظت اضافی در برابر دسترسی‌های همزمان به داده‌های به اشتراک گذاشته شده فراهم کند

همبستگی حافظهٔ دایرکتوری
------------------------

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

### وضعیت‌ها

یک DSM پایه‌ای، حداقل سه وضعیت در بین گره‌ها را برای هر بلوک داده شده در دایرکتوری ردیابی خواهد کرد. برخی وضعیت‌ها که بلوک را مجبور به عنوان نهان نشده (U) می‌کنند، یک وضعیت یک بلوک را مجبور به عنوان متعلق انحصاری یا متعلق اصلاح شده (EM) می‌کند و یک وضعیت، یک بلوک را مجبور به عنوان به اشتراک گذاشته شده (S) می‌کند وجود خواهند داشت.

وقتی بلوک‌ها وارد سازماندهی دایرکتوری می‌شوند، آنها در گره اولیه از U به EM (وضعیت تعلق) منتقل می‌شوند، سپس هنگامی که سایر گره‌ها بلوک را خواندند وضعیت می‌تواند به S انتقال یابد.

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

نمودار وصعیت یک بلوک از حافظه در DSM. یک بلوک «متعلق به» اگر یکی از گره‌های دارای بلوک در وضعیت EM.
### درخواست و پاسخ خانه محور

در یک سیستم خانه محور، DSM با دادن اجازهٔ رخدادن تنها یک تراکنش در یک زمان از مجبوربودن به کنترل رقابت‌های درخواست و پاسخ بین گره‌ها جلوگیری خواهد کرد، تا زمانی که گره خانه تصمیم بگیرد که تراکنش پایان یافته است که معمولاً زمانی است که خانه تمام پاسخ‌های پردازنده‌های پاسخ به درخواست را دریافت کرده باشد. یک مثال از این، حالت خانه-منبع QPI اینتل است.

#### مزایا

* رقابت داده‌ها غیرممکن است
* پیاده‌سازی ساده دارد

#### معایب

* کند، استراتژی درخواست – پاسخ بافرشده، محدودشده توسط گره خانه

### درخواست و پاسخ درخواست کننده محور

در یک سیستم درخواست کننده محور، DSM به گره‌ها این امکان را می‌دهد تا از طریق خانه با یکدیگر صحبت کنند. این بدان معنی است که چندین گره می‌توانند شروع به تراکنش کنند ولی این نیازمند ملاحظات اضافی است تا همبستگی تضمین شود. به عنوان مثال، هنگامی که یک گره در حال پردازش یک بلوک است، اگر یک درخواست برای آن بلوک از گرهی دیگر دریافت کند، یک NAck (تأیید منفی) ارسال خواهد کرد تا به ارسال کننده بگوید که گره پردازنده نمی‌تواند آن درخواست را در آن لحظه انجام دهد. یک مثال از این، حالت جستجوگر-منبع QPI اینتل است.

#### مزایا

* سریع

#### معایب

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

مدل‌های ثبات
------------

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

فرض کنید n فرایند و M\_i عملیات حافظه برای هر پردازش i داریم و فرض کنید تمام عملیات‌ها به ترتیب انجام می‌شوند. می‌توانیم نتیجه بگیریم که (M\_1+M\_2+⋯+M\_n)!/((M\_1 !M\_2 !…M\_n !)) عملیات بین عملیات‌ها ممکن است. این مسئله با این نتیجه‌گیری درستی این عملیات‌های بینابینی را تعیین می‌کند. همبستگی حافظه برای DSM تعیین می‌کند که کدام عملیات‌های بینابینی مجاز هستند.

ترتیبی کند و پاسخ در DSMترتیبی کند و پاسخ در DSM

تکرار در DSM
------------

به طور کلی تکرار داده‌های اشتراکی قصد دارد تا:

* ترافیک شبکه را کاهش دهد
* موازیبودن افزایشیافته را رایج کند
* منتج به خطاهای صفحهی کمتری شود

با این حال، جلوگیری از همبستگی و ثبات ممکن است چالش برانگیزتر شود.

ثبات انتشار و ورود
------------------

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

منابع
-----

1. 1 2  Sorin, Daniel J.; Hill, Mark D.; Wood, David A. (2011). *A Primer on Memory Consistency and Cache Coherence*. Morgan & Claypool. p. 174. ISBN 978-1-60845-564-5.