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

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

درسخت افزار
-----------

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

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

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

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

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

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

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

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

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

در نرم افزار
------------

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

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

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

### پشتیبانی از سیستم‌های شبه یونیکس

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

### در ویندوز

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

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

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

منابع
-----

1. ↑  *El-Rewini, Hesham; Abd-El-Barr, Mostafa (2005). Advanced Computer Architecture and Parallel Processing. Wiley-Interscience* (به english).نگهداری یادکرد:زبان ناشناخته (رده)
2. ↑  "Christoph Rohland; Hugh Dickins; KOSAKI Motohiro" (به انگلیسی).
3. ↑  *Jeffrey S. Chase; Henry M. Levy; Michael J. Feeley; and Edward D. Lazowska* (PDF).
4. ↑  «رم کامپیوتر». *Arax*. بایگانی‌شده از اصلی در ۳۰ ژوئیه ۲۰۲۲. دریافت‌شده در ۲۰۲۲-۰۷-۳۰.
5. ↑  «shm\_open». *pubs.opengroup.org*. دریافت‌شده در ۲۰۲۲-۰۷-۳۰.
6. ↑  «Shared memory facility». *pubs.opengroup.org*. دریافت‌شده در ۲۰۲۲-۰۷-۳۰.
7. ↑  alvinashcraft. «Creating Named Shared Memory - Win32 apps». *docs.microsoft.com* (به انگلیسی). دریافت‌شده در ۲۰۲۲-۰۷-۳۰.

* مشارکت‌کنندگان ویکی‌پدیا. «Shared memory». در *دانشنامهٔ ویکی‌پدیای انگلیسی*.

| * ن
* ب
* و
رایانش موازی |
| --- |
| عمومی | 
* رایانش ابری
* ابررایانه
* خوشه کامپیوتری
* رایانش توزیع‌شده
* رایانش مشبک

 |  |
| سطوح | 
* بیت
* دستوری
* داده
* وظیفه

 |
| ریسه‌ها | 
* Superthreading
* فراریسمانی

 |
| نظریه | 
* قانون امدال
* قانون گوستافسون
* کارایی هزینه
* استاندارد کرپ-فلت
* کاهش‌سرعت
* افزایش‌سرعت

 |
| عناصر | 
* فرآیند
* ریسه
* فیبر
* PRAM
* Instruction window

 |
| هماهنگی | 
* چندپردازشی
* چندریسمانی
* Memory coherency
* انسجام حافظه نهان
* Cache invalidation
* Barrier
* همزمانی
* حالت‌برداری برنامه‌ای

 |
| برنامه‌نویسی | 
* مدل‌ها
	+ موازی‌سازی تلویحی
	+ موازی‌سازی آشکار
	+ هم‌روندی
* طبقه‌بندی فلین
	+ اس‌آی‌اس‌دی
	+ اس‌آی‌ام‌دی
	+ ام‌آی‌اس‌دی
	+ ام‌آی‌ام‌دی
		- اس‌پی‌ام‌دی
* الگوریتم‌های چندریسمانی
* الگوریتم‌های غیرمسدودکننده

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

 |
| رابط‌های برنامه‌نویسی | 
* Ateji PX
* ریسه‌های پازیکس
* OpenMP
* OpenHMPP
* OpenACC
* PVM
* MPI
* UPC
* Intel Threading Building Blocks
* بوست (کتابخانه‌های سی++)
* Global Arrays
* Charm++
* Cilk
* Co-array Fortran
* اپن‌سی‌ال
* کودا
* Dryad

 |
| مشکلات | 
* Embarrassingly parallel
* Software lockout
* مقیاس‌پذیری
* وضعیت رقابتی
* بن‌بست (علوم رایانه)
* بن‌بست
* الگوریتم قطعی
* Parallel slowdown

 |
| 
* **رده**
* **داده**

 |

|  |  |
| --- | --- |
| آیکون خرد | این یک مقالهٔ خرد علوم رایانه است. می‌توانید با گسترش آن به ویکی‌پدیا کمک کنید. |