Logo ar.removalsclassifieds.com

الفرق بين موتكس وسيمافور (مع الجدول)

جدول المحتويات:

Anonim

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

موتكس مقابل سيمافور

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

Mutex لتقف على كائن الاستبعاد المتبادل. إنه نوع من الإشارات الثنائية المستخدمة لتقييد الوصول إلى مورد مشترك. لمنع مخاوف الانقلاب ذات الأولوية المطولة ، فهي تتميز بآلية وراثة ذات أولوية. يسمح بحظر الوظائف الحالية ذات الأولوية الأعلى لأقل قدر ممكن من الوقت. من ناحية أخرى ، فإن الميراث ذي الأولوية لا يصلح انعكاس الأولوية ؛ بدلا من ذلك ، فإنه يقلل من تأثيرها.

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

جدول المقارنة بين Mutex و Semaphore

معلمات المقارنة

موتكس

سيمافور

آلية

إنه نظام قفل. إنه نظام إشارات من نوع ما.
هدف

يتم تمثيل الخيط بواسطة كائن المزامنة (mutex). يتم تمثيل العمليات بواسطة إشارة.
طبيعة سجية

عادة ما يكون Mutex ذريًا ومفردًا. سيمافور ذري بطبيعته ، لكنه ليس مفردًا.
نوع البيانات

إن برنامج Mutex ليس أكثر من قطعة برمجية. السيمافور هو متغير ذو قيمة عددية.
أنواع

لا يحتوي Mutex على أي أنواع فرعية. العد والإشارات الثنائية نوعان من الإشارات.
تعديل

يمكن فقط للعملية التي يمكنها طلب أو تحرير مورد تعديله. يمكن تعديل الإشارة باستخدام وظيفتي الانتظار والإشارة.

ما هو موتكس؟

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

عندما يطلب أحد البرامج من النظام موردًا ، يقوم النظام بإنشاء كائن كائن مزوَّد بهوية أو معرّف فريد. نتيجة لذلك ، في أي وقت يرغب فيه البرنامج في استخدام هذا المورد ، فإنه يأخذ قفلًا على الكائن. ثم يستخدم البرنامج المورد قبل تحرير كائن كائن المزامنة (mutex). يمكن بعد ذلك إنشاء كائن كائن المزامنة (mutex) واستخدامه بواسطة برامج أخرى بنفس الطريقة.

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

يسمح كائن المزامنة (mutex) بالاستبعاد المتبادل ؛ يمكن أن يكون لدى المنتج أو المستهلك المفتاح (كائن المزامنة) ومواصلة العمل. يجب على المستهلك الانتظار طالما تم ملء المخزن المؤقت للمنتج ، والعكس صحيح.

ما هو سيمافور؟

Semaphore هو متغير عدد صحيح S يستخدم لمزامنة العملية ويتم تهيئته مع عدد الموارد في النظام. لتعديل قيمة S ، فإنه يستخدم وظيفتين رئيسيتين: الانتظار () والإشارة (). تُستخدم هاتان الوظيفتان لتغيير قيمة السيمافور ، لكنهما تتيحان لبرنامج واحد فقط القيام بذلك في كل مرة ، وبالتالي لا يمكن لطريقتين تغيير قيمة السيمافور في نفس الوقت. عد الدلالات والإشارات الثنائية هما نوعان من الإشارات.

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

في Binary Semaphores ، تكون قيمة متغير السيمافور إما 0 أو 1. عندما ترغب إحدى العمليات في استخدام مورد ، يتم استدعاء طريقة الانتظار () ، ويتم تعديل قيمة الإشارة إلى 0 من 1. ثم تجعل العملية استخدام المورد ، وبعد أن يتم ذلك ، يتم استدعاء طريقة الإشارة () ، ويتم تعيين قيمة متغير السيمافور على 1. إذا كانت قيمة متغير السيمافور هي 0 في نقطة زمنية معينة ، ويريد برنامج آخر للوصول إلى نفس المورد ، يجب أن ينتظر البرنامج السابق لتحرير الموارد. يمكن إجراء مزامنة العملية بهذه الطريقة. إنه قابل للمقارنة مع كائن المزامنة (mutex) ، لكنه لا يقفل أي شيء.

الاختلافات الرئيسية بين Mutex و Semaphore

استنتاج

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

مراجع

الفرق بين موتكس وسيمافور (مع الجدول)