حافظه مشترک توزیع شده
در علوم کامپیوتر، حافظهٔ مشترک توزیع شده (DSM) یک شکل از معماری حافظه است که در آن حافظه‌هایی که به صورت فیزیکی از یکدیگر جدا هستند، این قابلیت را دارند که به عنوان یک فضای آدرس که از نظر منطقی مشترک است، بیان شوند. اینجا، عبارت «مشترک» بدان معنی نیست که یک حافظهٔ متمرکز تنها وجود دارد بلکه یعنی فضای آدرس «مشترک» است (آدرس فیزیکی یکسان روی دو پردازنده به یک مکان در حافظه اشاره دارد). فضای آدرس کلی توزیع شده (DGAS) یک عبارت مشابه برای دست‌های گسترده از پیاده‌سازیهای نرم‌افزاری و سخت‌افزاری است که در آنها هر گره از دسته علاوه بر حافظهٔ اختصاصی هر گره غیرمشترک، به حافظهٔ مشترک نیز دسترسی دارد.
یک سیستم حافظهٔ توزیع شده که اغلب یک مالتی کامپیوتر نامیده می‌شود، متشکل از چندین گره پردازندهٔ مستقل با ماژول‌های محلی حافظه است که توسط یک شبکهٔ کلی با اتصال درونی، ارتباط یافته‌اند. سیستم‌های نرم‌افزاری DSM در یک سیستم عامل یا به عنوان یک کتابخانهٔ برنامه‌نویسی قابل پیاده‌سازی هستند و به عنوان تعمیم‌های معماری حافظهٔ مجازی اساسی قابل تصور هستند. هنگامی که در سیستم عامل پیاده‌سازی شوند، چنین سیستمهایی برای توسعه دهنده شفاف هستند؛ که بدان معنی است که حافظهٔ توزیع شدهٔ اساسی کاملاً از کاربران مخفی است. در مقابل، سیستمهای نرم افزاری DSM پیاده‌سازی شده در سطح کتابخانه یا زبان برنامه‌نویسی شفاف نیستند و توسعه دهندگان معمولاً مجبور هستند تا آنها را به طور مختلف برنامه‌نویسی کنند. با این حال، این سیستمها یک روش قابل حمل تر برای پیاده‌سازی‌های سیستم DSM پیشنهاد می‌کنند. یک سیستم حافظهٔ مشترک توزیع شده، مدل حافظهٔ مشترک را روی یک سیستم حافظهٔ مشترک توزیع شدهی فیزیکی پیاده‌سازی می‌کند.
معمولاً دو روش برای دستیابی به یک حافظهٔ مشترک توزیع شده وجود دارد:
سه روش برای پیاده‌سازی یک حافظهٔ مشترک توزیع شدهٔ نرم‌افزاری وجود دارد:
سیستم‌های DSM نرم‌افزاری همچنین انعطاف‌پذیری لازم برای سازماندهی ناحیهٔ حافظهٔ مشترک را به روش‌های مختلف دارند. روش مبتنی بر صفحه، حافظهٔ مشترک را در صفحاتی با اندازهٔ ثابت سازماندهی می‌کند. در مقابل، روش مبتنی بر شیء، ناحیهٔ حافظهٔ مشترک را به صورت یک فضای انتزاعی برای ذخیره کردن اشیاء قابل اشتراک گذرای با اندازه‌های متغیر سازماندهی می‌کند. یک پیاده‌سازی مرسوم دیگر از فضای چندتایی استفاده می‌کند که در آن واحد اشتراک گذاری، یک چندتایی است.
معماری حافظهٔ مشترک ممکن است شامل جداسازی حافظه به بخش‌های مشترک توزیع شده بین گره‌ها و حافظهٔ اصلی شود؛ یا تمام حافظه را بین گره‌ها توزیع کند. یک پروتکل هم بسته که مطابق با یک مدل ثبات انتخاب شده است، همبستگی حافظه را حفظ می‌کند. همبستگی حافظه ضروری است به نحوی که سیستمی که DSM را سازماندهی می‌کند، قادر است وضعیت بلوک‌های داده در گره‌های میان حافظه‌های تشکیل دهندهٔ سیستم را حفظ و ردیابی کند.
یک DSM پایه‌ای، حداقل سه وضعیت در بین گره‌ها را برای هر بلوک داده شده در دایرکتوری ردیابی خواهد کرد. برخی وضعیت‌ها که بلوک را مجبور به عنوان نهان نشده (U) می‌کنند، یک وضعیت یک بلوک را مجبور به عنوان متعلق انحصاری یا متعلق اصلاح شده (EM) می‌کند و یک وضعیت، یک بلوک را مجبور به عنوان به اشتراک گذاشته شده (S) می‌کند وجود خواهند داشت.
وقتی بلوک‌ها وارد سازماندهی دایرکتوری می‌شوند، آنها در گره اولیه از U به EM (وضعیت تعلق) منتقل می‌شوند، سپس هنگامی که سایر گره‌ها بلوک را خواندند وضعیت می‌تواند به S انتقال یابد.
دو روش اصلی برای اجازه به سیستم برای ردیابی اینکه بلوک‌ها کجا و در چه شرایطی در هر گره نهان می‌شوند وجود دارد. درخواست-پاسخ خانه محور از خانه استفاده می‌کند تا به درخواست‌ها سرویس دهد و وضعیت‌ها را کنترل کند، درحالی که درخواست کننده محور به هر گره این امکان را می‌دهد تا درخواست‌های خود را از طریق خانه کنترل و مدیریت کند. در یک سیستم خانه محور، DSM با دادن اجازهٔ رخدادن تنها یک تراکنش در یک زمان از مجبوربودن به کنترل رقابت‌های درخواست و پاسخ بین گره‌ها جلوگیری خواهد کرد، تا زمانی که گره خانه تصمیم بگیرد که تراکنش پایان یافته است که معمولاً زمانی است که خانه تمام پاسخ‌های پردازنده‌های پاسخ به درخواست را دریافت کرده باشد. یک مثال از این، حالت خانه-منبع QPI اینتل است. در یک سیستم درخواست کننده محور، DSM به گره‌ها این امکان را می‌دهد تا از طریق خانه با یکدیگر صحبت کنند. این بدان معنی است که چندین گره می‌توانند شروع به تراکنش کنند ولی این نیازمند ملاحظات اضافی است تا همبستگی تضمین شود. به عنوان مثال، هنگامی که یک گره در حال پردازش یک بلوک است، اگر یک درخواست برای آن بلوک از گرهی دیگر دریافت کند، یک NAck (تأیید منفی) ارسال خواهد کرد تا به ارسال کننده بگوید که گره پردازنده نمی‌تواند آن درخواست را در آن لحظه انجام دهد. یک مثال از این، حالت جستجوگر-منبع QPI اینتل است. DSM باید از قوانین خاصی تبعیت کند تا ثبات را پیرامون اینکه چگونه ترتیب اینکه گره‌ها خوانده و نوشته شوند را حفظ کند که مدل ثبات سیستم نامیده می‌شود.
فرض کنید n فرایند و M_i عملیات حافظه برای هر پردازش i داریم و فرض کنید تمام عملیات‌ها به ترتیب انجام می‌شوند. می‌توانیم نتیجه بگیریم که (M_1+M_2+⋯+M_n)!/((M_1 !M_2 !…M_n !)) عملیات بین عملیات‌ها ممکن است. این مسئله با این نتیجه‌گیری درستی این عملیات‌های بینابینی را تعیین می‌کند. همبستگی حافظه برای DSM تعیین می‌کند که کدام عملیات‌های بینابینی مجاز هستند. به طور کلی تکرار داده‌های اشتراکی قصد دارد تا: با این حال، جلوگیری از همبستگی و ثبات ممکن است چالش برانگیزتر شود.