موتيكس مقابل Semaphore - الفرق بينهما
الفرق الرئيسي بين Mutex و Semaphore
- Mutex هي آلية قفل، في حين أن Semaphore هي آلية الإشارة
- Mutex هو مجرد كائن، بينما Semaphore هو عدد صحيح
- ليس لدى Mutex أي نوع فرعي، في حين أن الإشارة لها نوعان: الإشارة العدية والإشارة الثنائية.
- Semaphore يدعم تعديل عمليات الانتظار والإشارة، بينما يتم تعديل Mutex فقط بواسطة العملية التي قد تطلب أو تحرر موردًا.
- Semaphore يتم تعديل القيمة باستخدام عمليات wait() و signal()، من ناحية أخرى، يتم قفل أو إلغاء قفل عمليات Mutex.
لقد قمت هنا بتحليل الفرق بين Mutex و Semaphore وسيتم تقييم إيجابياتها وسلبياتها بشكل شامل.
حقائق مشتركة حول Mutex و Semaphore
استنادًا إلى ممارستي، إليك بعض الحقائق الشائعة حول Mutex vs. Semaphore:
- يمكن لمهمة واحدة فقط الحصول على كائن المزامنة (mutex). وبالتالي، يمتلك كائن المزامنة (mutex) ملكية، ولا يمكن إلا للمالك تحريره.
- تختلف أسباب استخدام كائن المزامنة والإشارة، ربما بسبب التشابه في تنفيذهما، ويُشار إلى كائن المزامنة باسم الإشارة الثنائية.
- أحد المفاهيم الخاطئة المعروفة هو أن Mutexes و Semaphores هي نفسها تقريبًا، مع الاختلاف الوحيد هو أن Mutex قادر على العد إلى 1، بينما Semaphoreقادرة على العد من 0 إلى N.
- هناك دائمًا عدم يقين بين الإشارة الثنائية وmutex. قد تسمع أن كائن المزامنة (mutex) عبارة عن إشارة ثنائية، وهذا غير صحيح.
ما هو Semaphore?
إشارة هو ببساطة متغير غير سلبي ومشترك بين الخيوط. إشارة المرور هي آلية إشارات، ويمكن لخيط ينتظر إشارة مرور أن يتم إرسال إشارة له بواسطة خيط آخر. يستخدم عمليتين ذريتين، 1) الانتظار و2) الإشارة للخيط. مزامنة العملية.
A الملوحة جهاز إما السماح أو عدم السماح بالوصول إلى المورد، الأمر الذي يعتمد على كيفية إعداده.
استخدام Semaphore
في حالة وجود مخزن مؤقت واحد، يمكننا فصل المخزن المؤقت الذي يبلغ حجمه 4 كيلوبايت إلى أربعة مخازن مؤقتة بحجم 1 كيلوبايت. Semaphore يمكن ربط هذه المخازن المؤقتة الأربعة. وهذا يسمح للمستخدمين والمنتجين بالعمل على مخازن مؤقتة مختلفة في نفس الوقت.
مزايا Semaphore
في ممارستي، إليك الإيجابيات الرئيسية لاستخدام الإشارة:
- يسمح لأكثر من موضوع بالوصول إلى القسم الحرج
- Semaphoreإنها مستقلة عن الآلة.
- Semaphoreيتم تنفيذ s في الكود المستقل عن الآلة للنوية الدقيقة.
- أنها لا تسمح لعمليات متعددة بالدخول إلى القسم الحرج.
- ونظرًا لوجود جدول انتظار مزدحم في الإشارة، فلا يوجد أبدًا أي إهدار لوقت العملية ومواردها.
- وهي مستقلة عن الآلة، ويجب تشغيلها في التعليمات البرمجية المستقلة عن الآلة للنوية الدقيقة.
- أنها تسمح بإدارة مرنة للموارد.
عيوب Semaphores
فيما يلي عيوب الإشارة التي واجهتها.
- أحد أكبر قيود الإشارة هو انعكاس الأولوية.
- يجب على نظام التشغيل أن يحتفظ track من جميع المكالمات للانتظار والإشارة باستخدام الإشارات الضوئية.
- ولا يتم فرض استخدامها أبدًا، ولكن يتم ذلك بموجب الاتفاقية فقط.
- من أجل تجنب الجمود في الإشارة الضوئية، يجب عليك الانتظار و Signal يجب تنفيذ العمليات بالترتيب الصحيح.
- Semaphore البرمجة هي طريقة معقدة، لذلك هناك احتمالات لعدم تحقيق الاستبعاد المتبادل.
- كما أنها ليست طريقة عملية للاستخدام على نطاق واسع لأن استخدامها يؤدي إلى فقدان النمطية.
- Semaphore أكثر عرضة للخطأ المبرمج.
- قد يسبب ذلك مأزق أو انتهاك الاستبعاد المتبادل بسبب خطأ مبرمج.
ما هو موتكس؟
الشكل الكامل لـ Mutex هو كائن الاستبعاد المتبادل. إنه نوع خاص من الإشارة الثنائية يستخدم للتحكم في الوصول إلى المورد المشترك. يتضمن آلية وراثة الأولوية لتجنب مشاكل انعكاس الأولوية الموسعة. فهو يسمح بإبقاء المهام ذات الأولوية الأعلى الحالية في الحالة المحظورة لأقصر وقت ممكن. ومع ذلك، فإن وراثة الأولوية لا تصحح انعكاس الأولوية ولكنها تقلل فقط من تأثيرها.
استخدام موتيكس
يوفر القفل المتبادل استبعادًا متبادلًا، حيث يمكن أن يكون المنتج أو المستهلك قادرًا على الحصول على المفتاح (القفل المتبادل) والاستمرار في عمله. طالما أن المنتج يملأ المخزن المؤقت، يحتاج المستخدم إلى الانتظار، والعكس صحيح. في قفل القفل المتبادل، في كل الأوقات، يمكن لخيط واحد فقط العمل مع المخزن المؤقت بالكامل.
مزايا موتكس
مما لاحظته، إليك الفوائد الرئيسية لـ Mutex:
- كائنات المزامنة هي مجرد أقفال بسيطة يتم الحصول عليها قبل الدخول إلى قسمها الحرج ثم تحريرها.
- نظرًا لوجود مؤشر ترابط واحد فقط في القسم الحرج الخاص به في أي وقت محدد، فلا توجد حالات سباق، وتظل البيانات متسقة دائمًا.
عيوب موتيكس
في ممارستي، حددت العديد من سلبيات Mutex.
- إذا حصل الخيط على قفل وانتقل إلى وضع السكون أو تم استباقه، فقد لا يتمكن الخيط الآخر من المضي قدمًا. وهذا قد يؤدي إلى المجاعة.
- لا يمكن قفله أو فتحه من سياق مختلف عن الذي حصل عليه.
- يجب السماح بموضوع واحد فقط في القسم الحرج في كل مرة.
- قد يؤدي التنفيذ العادي إلى حالة انتظار مزدحمة، مما يؤدي إلى إهدار وقت وحدة المعالجة المركزية.
الفرق بين Semaphore و موتيكس
بناءً على ما تعلمته من العمل معهم، إليك كيفية استخدام Mutexes و Semaphoreتختلف:
| المعاملات | Semaphore | مزامنة |
|---|---|---|
| تقنية | إنه نوع من آلية الإشارة. | إنها آلية قفل. |
| نوع البيانات | Semaphore هو متغير عدد صحيح. | Mutex هو مجرد كائن. |
| تعديل | يمكن لعمليات الانتظار والإشارة تعديل إشارة المرور. | يتم تعديله فقط من خلال العملية التي قد تطلب موردًا أو تحرره. |
| إدارة الموارد | إذا لم يكن هناك مورد متاح، فإن العملية تتطلب موردًا يجب أن ينفذ عملية الانتظار. يجب أن ينتظر حتى يصبح عدد الإشارات أكبر من 0. | إذا تم قفله، يجب أن تنتظر العملية. يجب أن تبقى العملية في قائمة الانتظار. يجب الوصول إلى هذا فقط عند إلغاء قفل كائن المزامنة (mutex). |
| خيط | يمكن أن يكون لديك عدة سلاسل برامج. | يمكنك الحصول على خيوط برنامج متعددة في mutex ولكن ليس في نفس الوقت. |
| امتلاك | يمكن تغيير القيمة من خلال أي عملية لتحرير المورد أو الحصول عليه. | يتم تحرير قفل الكائن فقط من خلال العملية التي حصلت على القفل عليه. |
| الأنواع | انواع من Semaphore يتم حساب الإشارات الضوئية والإشارات الضوئية الثنائية. | Mutex ليس لديه أنواع فرعية. |
| تشغيل | Semaphore يتم تعديل القيمة باستخدام عمليتي wait() و signal(). | كائن Mutex مقفل أو غير مقفل. |
| إشغال الموارد | يتم شغلها إذا تم استخدام جميع الموارد وتقوم العملية التي تطلب المورد بإجراء عملية wait () وتمنع نفسها حتى يصبح عدد الإشارات الضوئية >1. | في حالة ما إذا كان الكائن مقفلاً بالفعل، تنتظر العملية التي تطلب الموارد ويتم وضعها في قائمة الانتظار من قبل النظام قبل تحرير القفل. |
خاتمة
في تجربتي، فإن مفتاح الاختيار بين أجهزة المزامنة المتبادلة وأجهزة الإشارات المرورية هو التعرف على الفروق الدقيقة التشغيلية الخاصة بها. Semaphoreتعتبر s مثالية للمزامنات المعقدة، في حين أن عمليات المزامنة المتبادلة مناسبة للاستبعاد المتبادل المباشر، مما يضمن سلامة الموارد في السياقات الأكثر بساطة.
