حافظه مشترک

[چپ|300px|بندانگشتی|نمایشی از یک سیستم حافظه مشترک بین سه [رایانه]]
در رایانش، **حافظه مشترک** یا **حافظه اشتراکی** حافظه‌ای است که می‌تواند به طور هم‌زمان توسط چندین برنامه مورد دستیابی قرار گیرد. این کار به منظور برقراری ارتباط بین برنامه‌ها و همچنین پرهیز از قرار دادن کپی‌های زائد اطلاعات در حافظه انجام می‌شود. حافظه اشتراکی راهی مؤثر برای رد و بدل کردن داده‌ها مابین برنامه‌ها می‌باشد. بسته به زمینه، برنامه‌ها می‌توانند بر روی یک پردازنده واحد یا بر روی چندین پردازنده مستقل اجرا شوند.

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

## درسخت افزار
در سخت افزار کامپیوتر، حافظه مشترک به یک بلوک یا خانه از حافظه رم به صورت تصادفی دسترسی دارد که می تواند توسط چندین واحد پردازش مختلف (CPU) در یک سیستم کامپیوتری چند پردازنده ای قابل دسترس باشد.

سیستم های حافظه مشترک ممکن است از موارد زیر استفاده کنند

دسترسی به حافظه یکنواخت (UMA): همه پردازنده ها حافظه فیزیکی را به یک شکل به اشتراک می گذارند.

دسترسی غیر یکنواخت به حافظه (NUMA): زمان دسترسی به حافظه به مکان حافظه به پردازنده بستگی دارد.

معماری حافظه فقط کش (COMA): حافظه های موقت برای پردازنده های هر گره به جای حافظه اصلی واقعی به عنوان کش استفاده می شود.

برنامه ریزی یک سیستم حافظه مشترک نسبتاً آسان است زیرا همه پردازنده ها یک واحد از داده ها را به اشتراک می گذارند و ارتباط بین پردازنده ها می تواند به همان سرعتی باشد که به یک خانه از حافظه دسترسی دارد. مشکل سیستم های حافظه مشترک این است که بسیاری از پردازنده‌ها به دسترسی سریع به حافظه نیاز دارند و احتمالاً حافظه پنهان را ذخیره می کنند که دو عارضه دارد:

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

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

در مورد معماری سیستم ناهمگن (معماری پردازنده که انواع مختلف پردازنده‌ها مانند واحد پردازش گرافیک را با حافظه مشترک ادغام می‌کند)، واحد مدیریت حافظه پردازنده و واحد مدیریت حافظه ورودی-خروجی گرافیک باید ویژگی های خاصی مانند فضای آدرس مشترک را به اشتراک بگذارد.

## در نرم افزار
در نرم افزارهای کامپیوتری حافظه اشتراکی یا مشترک است.

روشی برای ارتباط بین فرآیندی (IPC)، یعنی روشی برای تبادل داده بین برنامه هایی که همزمان اجرا می شوند. یک فرآیند یک ناحیه در RAM ایجاد می کند که سایر فرآیندها می توانند به آن دسترسی داشته باشند.

روشی برای حفظ فضای حافظه با هدایت دسترسی ها به آنچه که معمولاً کپی یک قطعه داده به یک نمونه واحد است، با استفاده از نگاشت حافظه مجازی یا با پشتیبانی صریح از برنامه مورد نظر. این اغلب برای کتابخانه های مشترک و برای اجرای در محل (XIP) استفاده می شود.

### پشتیبانی از سیستم‌های شبه یونیکس
POSIX یک کلید دسترسی برای استفاده از حافظه مشترک، POSIX Shared Memory ارائه می‌کند. این از تابع shm_opensys/mman.h استفاده می کند. ارتباطات بین پردازشی POSIX شامل توابع حافظه مشترک shmat، shmctl Unix System V یک کلید دسترسی برای حافظه مشترک فراهم می کند.

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

## جستارهای وابسته

* حافظه توزیع شده

## منابع

* 

رده:ارتباطات بین پردازشی
رده:رایانش موازی
رده:رایانش همروند
رده:مدیریت حافظه
رده:معماری رایانش توزیع‌شده