سؤال

وبعد أن تعلمت شيئا عن هذا الموضوع، يمكن لأحد أن يقول، ما هو الفرق الحقيقي بين POSIX الذاكرة المشتركة (shm_open) وPOSIX ملفات معين (mmap)؟

وكلاهما يبدو أن استخدام / ديف / tmpfs الفرعي، ثم بدلا القديمة آلية IPC.

وحتى لا يكون هناك أي ميزة استخدام ملف mmap على الذاكرة المشتركة؟

وشكرا.

هل كانت مفيدة؟

المحلول

والتمييز ليست دائما واضحة. الذاكرة المشتركة يمكن تنفيذها من خلال ملفات الذاكرة المعينة. إن الكتابة ممتازة على هذا يمكن العثور عليها هنا (كما تطبق على C / C ++ البرمجة).

نصائح أخرى

وما أفهمه هو أن تلك الذاكرة المشتركة هو مبني على رأس الملفات معين، ولكن <لأ href = "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/apis/mmap.htm" يختلط = "noreferrer نوفولو"> هذه الصفحة يبدو أنها تشير إلى أن القدرة على استخدام الذاكرة الملفات المعينة كما الذاكرة المشتركة مشروطة.

<اقتباس فقرة>   

ويقتصر استخدام وظيفة mmap () من قيمة النظام QSHRMEMCTL. عندما يكون هذا قيمة النظام هو 0، وظيفة mmap () لا يجوز أن إنشاء الخرائط المشتركة تواجهها مع القدرة PROT_WRITE. أساسا، وهذا يمنع إنشاء خريطة الذاكرة التي يمكن تغيير محتويات الملف تيار يجري تعيينها. إذا أعلام المعلمة أشار MAP_SHARED، المعلمة البروتوكول الاضافي يحدد PROT_WRITE وقيمة النظام QSHRMEMCTL 0، ثم mmap () ستفشل الوظائف ورقم خطأ من النتائج EACCES.

والذاكرة المشتركة في الأساس هو شكل من أشكال تقاسم IPC.The يتم إنشاء المنطقة / ديف / SHM الذي يتم إنشاؤه في الذاكرة فقط (RAM) وأنه لا يتطلب أي عمليات القرص، وبالتالي فإنه هو أسرع طريقة IPC.Although IPC يمكن يتم ذلك باستخدام ملف القرص ثم استخدام mmap جدا، ولكن سيكون من comparetively slow.Alternatively يمكنك دائما استخدام MAP_ANONYMOUS مع mmap التي لم يتم إجراء نسخ احتياطي مع أي ملف على القرص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top