الذاكرة المشتركة

رسم توضيحي لنظام ذاكرة مشتركة لثلاثة معالجات

في علم الحاسوب ، تُعرف الذاكرة المشتركة بأنها ذاكرة يمكن الوصول إليها في وقت واحد من قِبل برامج متعددة بهدف توفير التواصل فيما بينها أو تجنب النسخ المتكررة. تُعد الذاكرة المشتركة وسيلة فعالة لنقل البيانات بين البرامج. وبحسب السياق، قد تعمل البرامج على معالج واحد أو على عدة معالجات منفصلة.

يُشار أيضًا إلى استخدام الذاكرة للاتصال داخل برنامج واحد، على سبيل المثال بين خيوطه المتعددة، باسم الذاكرة المشتركة.

في مجال الأجهزة

تحدد HSA حالة خاصة من مشاركة الذاكرة، حيث يكون لـ MMU الخاص بوحدة المعالجة المركزية و IOMMU الخاص بوحدة معالجة الرسومات مساحة عنوان افتراضية قابلة للتقسيم متطابقة.

في مجال أجهزة الكمبيوتر، تشير الذاكرة المشتركة إلى كتلة (كبيرة عادةً) من ذاكرة الوصول العشوائي (RAM) التي يمكن الوصول إليها بواسطة العديد من وحدات المعالجة المركزية المختلفة (CPUs) في نظام كمبيوتر متعدد المعالجات .

قد تستخدم أنظمة الذاكرة المشتركة ما يلي: [ 1 ]

يُعد نظام الذاكرة المشتركة سهل البرمجة نسبيًا، إذ تتشارك جميع المعالجات في رؤية واحدة للبيانات، ويمكن أن تكون سرعة الاتصال بينها مماثلة لسرعة الوصول إلى نفس الموقع في الذاكرة. لكن تكمن مشكلة أنظمة الذاكرة المشتركة في أن العديد من وحدات المعالجة المركزية تحتاج إلى وصول سريع إلى الذاكرة، ومن المرجح أن تقوم بتخزينها مؤقتًا ، مما يُسبب تعقيدين:

  • تدهور زمن الوصول: عندما تحاول عدة معالجات الوصول إلى نفس موقع الذاكرة، يحدث تنازع . وقد تؤدي محاولة الوصول إلى مواقع ذاكرة متجاورة إلى مشاركة خاطئة . لا يمكن لأجهزة الكمبيوتر ذات الذاكرة المشتركة أن تتوسع بشكل جيد. معظمها يحتوي على عشرة معالجات أو أقل؛
  • عدم اتساق البيانات: عند تحديث ذاكرة تخزين مؤقتة بمعلومات قد تستخدمها معالجات أخرى، يجب أن ينعكس هذا التغيير على المعالجات الأخرى، وإلا ستعمل المعالجات المختلفة ببيانات غير متسقة. يمكن لبروتوكولات اتساق ذاكرة التخزين المؤقتة هذه ، عند عملها بكفاءة، أن توفر وصولاً عالي الأداء للغاية إلى المعلومات المشتركة بين معالجات متعددة. من ناحية أخرى، قد تتعرض هذه البروتوكولات أحيانًا لحمل زائد وتصبح عائقًا أمام الأداء.

يمكن استخدام تقنيات مثل مفاتيح التبديل المتقاطعة ، وشبكات أوميغا ، وهايبر ترانسبورت ، أو ناقل الجانب الأمامي للتخفيف من تأثيرات الاختناق.

في حالة بنية النظام غير المتجانسة (بنية المعالج التي تدمج أنواعًا مختلفة من المعالجات، مثل وحدات المعالجة المركزية ووحدات معالجة الرسومات ، مع ذاكرة مشتركة)، يجب أن تشترك وحدة إدارة الذاكرة (MMU) الخاصة بوحدة المعالجة المركزية ووحدة إدارة ذاكرة الإدخال والإخراج (IOMMU) الخاصة بوحدة معالجة الرسومات في خصائص معينة، مثل مساحة عنوان مشتركة.

البدائل للذاكرة المشتركة هي الذاكرة الموزعة والذاكرة المشتركة الموزعة ، ولكل منهما مجموعة مماثلة من المشكلات.

في البرمجيات

في برامج الحاسوب، الذاكرة المشتركة إما

بما أن كلا العمليتين تستطيعان الوصول إلى منطقة الذاكرة المشتركة كما لو كانتا ذاكرة عمل عادية، فإن هذه طريقة اتصال سريعة للغاية (مقارنةً بآليات الاتصال بين العمليات الأخرى مثل الأنابيب المسماة ، أو مقابس نطاق يونكس، أو CORBA ). من ناحية أخرى، فهي أقل قابلية للتوسع، إذ يجب أن تعمل العمليات المتصلة على نفس الجهاز (من بين طرق الاتصال بين العمليات الأخرى، لا يمكن استخدام شبكة الحاسوب إلا عبر مقابس نطاق الإنترنت - وليس مقابس نطاق يونكس )، ويجب توخي الحذر لتجنب المشاكل إذا كانت العمليات التي تتشارك الذاكرة تعمل على وحدات معالجة مركزية منفصلة، ​​ولم تكن البنية الأساسية متماسكة من حيث ذاكرة التخزين المؤقت .

يتم استخدام IPC عن طريق الذاكرة المشتركة على سبيل المثال لنقل الصور بين التطبيق وخادم X على أنظمة Unix، أو داخل كائن IStream الذي تم إرجاعه بواسطة CoMarshalInterThreadInterfaceInStream في مكتبات COM ضمن Windows .

يتم الاحتفاظ بالمكتبات الديناميكية بشكل عام في الذاكرة مرة واحدة ويتم تعيينها لعمليات متعددة، ويتم تكرار الصفحات التي كان لا بد من تخصيصها للعملية الفردية فقط (لأن الرمز يتم حله بشكل مختلف هناك)، وعادة ما يتم ذلك باستخدام آلية تُعرف باسم النسخ عند الكتابة والتي تنسخ الصفحة بشفافية عند محاولة الكتابة، ثم تسمح للكتابة بالنجاح على النسخة الخاصة.

بالمقارنة مع أنظمة التشغيل متعددة مساحات العناوين، فإن مشاركة الذاكرة - وخاصة مشاركة الإجراءات أو الهياكل القائمة على المؤشرات - تكون أبسط في أنظمة التشغيل ذات مساحة العنوان الواحدة . [ 2 ]

دعم أنظمة التشغيل الشبيهة بنظام يونكس

يوفر نظام POSIX واجهة برمجة تطبيقات موحدة لاستخدام الذاكرة المشتركة، تُعرف باسم POSIX Shared Memory. وتستخدم هذه الواجهة الدالة الموجودة في الملف sys/mman.h. [3] يتضمن اتصال العمليات بين العمليات في POSIX (جزء من امتداد POSIX:XSI) دوال الذاكرة المشتركة. [ 4 ] shm_open[ 5 ] يوفر نظام shmatUnix shmctlSystem V واجهة برمجة تطبيقات للذاكرة المشتركة أيضًا، وتستخدم الدالة shmget من الملف sys/shm.h. توفر أنظمة BSD "ذاكرة مُخصصة مجهولة المصدر" يمكن استخدامها من قِبل عدة عمليات.shmdtshmget

الذاكرة المشتركة التي يتم إنشاؤها بواسطة shm_openهذه العملية دائمة. فهي تبقى في النظام حتى تتم إزالتها صراحةً بواسطة عملية ما. وهذا له عيب يتمثل في أنه إذا تعطلت العملية وفشلت في تنظيف الذاكرة المشتركة، فستبقى حتى إيقاف تشغيل النظام؛ هذا القيد غير موجود في تطبيق خاص بنظام أندرويد يُطلق عليه اسم [ 6 ]ashmem .

يوفر نظام POSIX أيضًا mmapواجهة برمجة التطبيقات لربط الملفات بالذاكرة؛ ويمكن مشاركة عملية الربط، مما يسمح باستخدام محتويات الملف كذاكرة مشتركة.

توفر توزيعات لينكس المبنية على نواة 2.6 والإصدارات الأحدث /dev/shm كذاكرة مشتركة على شكل قرص RAM ، وتحديدًا كدليل قابل للكتابة من قبل جميع المستخدمين (دليل يمكن لأي مستخدم في النظام إنشاء ملفات فيه) مُخزّن في الذاكرة. وتتضمن كل من توزيعات Red Hat و Debian هذه الميزة افتراضيًا. ويُعد دعم هذا النوع من أقراص RAM اختياريًا تمامًا ضمن ملف تكوين النواة . [ 7 ]

الدعم على نظام التشغيل ويندوز

في نظام التشغيل ويندوز، يمكن استخدام CreateFileMappingوظائف MapViewOfFileلربط منطقة من ملف بالذاكرة في عمليات متعددة. [ 8 ]

دعم متعدد المنصات

توفر بعض مكتبات لغة C++ وصولاً محمولاً وموجهاً للكائنات إلى وظائف الذاكرة المشتركة. على سبيل المثال، تحتوي مكتبة Boost على مكتبة Boost.Interprocess C++ [ 9 ] ، وتوفر مكتبة Qt فئة QSharedMemory. [ 10 ]

دعم لغات البرمجة

بالنسبة للغات البرمجة التي تستخدم روابط POSIX (مثل C/C++)، يمكن إنشاء مناطق الذاكرة المشتركة والوصول إليها عن طريق استدعاء الدوال التي يوفرها نظام التشغيل. قد تمتلك لغات البرمجة الأخرى طرقها الخاصة لاستخدام هذه الإمكانيات التشغيلية لتحقيق تأثير مماثل. على سبيل المثال، توفر لغة PHP واجهة برمجة تطبيقات (API) لإنشاء ذاكرة مشتركة، على غرار دوال POSIX . [ 11 ]

انظر أيضاً

مراجع

  1. الرويني، هشام؛ عبد البر، مصطفى (2005). هندسة الحاسوب المتقدمة والمعالجة المتوازية . وايلي-إنترساينس. ص 77-80 . ISBN  978-0-471-46740-3.
  2. جيفري إس. تشيس؛ هنري إم. ليفي؛ مايكل جيه. فيلي؛ وإدوارد دي. لازوسكا. "المشاركة والحماية في نظام تشغيل ذي مساحة عنوان واحدة" . doi : 10.1145/195792.195795، 1993، ص 3
  3. توثيق shm_open من مواصفات يونكس الفردية
  4. ↑ روبنز ، كاي أ.؛ روبنز، ستيفن (2003). برمجة أنظمة يونكس: الاتصال، والتزامن، والخيوط ( الطبعة الثانية). برنتيس هول بي تي آر. ص 512. ISBN   978-0-13-042411-2تم الاطلاع عليه بتاريخ 13-05-2011 . يُعد اتصال العمليات بين العمليات (IPC) في نظام POSIX جزءًا من امتداد POSIX:XSI، ويعود أصله إلى اتصال العمليات بين العمليات في نظام Unix System V.
  5. مرفق الذاكرة المشتركة من مواصفات يونكس الفردية.
  6. "ميزات نواة نظام أندرويد" . elinux.org . تم الاطلاع عليه بتاريخ 12 ديسمبر 2022 .
  7. كريستوف رولاند؛ هيو ديكنز؛ كوساكي موتو هيرو. "tmpfs.txt" . kernel.org . تم الاسترجاع في 16 مارس 2010 .
  8. إنشاء ذاكرة مشتركة مسماة من MSDN.
  9. مكتبة Boost.Interprocess C++
  10. "مرجع فئة QSharedMemory" .
  11. وظائف الذاكرة المشتركة في PHP-API