ما هي تفاصيل Semaphore؟ العد، الأنواع الثنائية مع المثال

ما هي تفاصيل Semaphore?

Semaphore هو ببساطة متغير غير سلبي ومشترك بين الخيوط. إشارة المرور هي آلية إشارات، ويمكن لخيط ينتظر إشارة مرور أن يتم إرسال إشارة له بواسطة خيط آخر. يستخدم عمليتين ذريتين، 1) الانتظار، و2) Signal لمزامنة العملية.

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

سمة من سمات Semaphore

وهنا خصائص الإشارة:

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

انواع من Semaphores

النوعان الشائعان من الإشارات هما

  • عد الإشارات
  • الإشارات الثنائية.

عد Semaphores

هذا النوع من Semaphore يستخدم عددًا يساعد في الحصول على المهمة أو إصدارها عدة مرات. إذا كان العدد الأولي = 0، فيجب إنشاء إشارة العد في حالة عدم التوفر.

عد Semaphores
عد Semaphores

ومع ذلك، إذا كان العدد > 0، فسيتم إنشاء الإشارة في الحالة المتاحة، ويكون عدد الرموز المميزة بها مساويًا لعددها.

ثنائي Semaphores

تعتبر إشارات المرور الثنائية مشابهة إلى حد كبير لعد إشارات المرور، ولكن قيمتها تقتصر على 0 و1. في هذا النوع من إشارات المرور، تعمل عملية الانتظار فقط إذا كانت إشارة المرور = 1، وتنجح عملية الإشارة عندما تكون إشارة المرور = 0. وهي أسهل في التنفيذ من عد إشارات المرور.

ثنائي Semaphores

ثنائي Semaphores

مثال Semaphore

البرنامج الموضح أدناه هو تنفيذ خطوة بخطوة، والذي يتضمن استخدام وإعلان الإشارة.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

انتظر و Signal Operaفي Semaphores

يتم استخدام كلتا العمليتين للتنفيذ مزامنة العمليةالهدف من عملية الإشارة هذه هو الحصول على الاستبعاد المتبادل.

أنتظر لأجل Operaالإنتاج

يساعدك هذا النوع من عمليات السيمافور على التحكم في إدخال مهمة إلى القسم الحرج. ومع ذلك، إذا كانت قيمة wait موجبة، فإن قيمة وسيطة wait X ستنخفض. وفي حالة القيمة السالبة أو الصفرية، لا يتم تنفيذ أي عملية. وتسمى أيضًا عملية P(S).

بعد أن تنخفض قيمة الإشارة، والتي تصبح سالبة، يتم تعليق الأمر حتى يتم استيفاء الشروط المطلوبة.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Signal عملية

هذا النوع من Semaphore تُستخدم العملية للتحكم في خروج المهمة من قسم حرج. وهي تساعد في زيادة قيمة الوسيطة بمقدار 1، والتي يشار إليها بـ V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

عد Semaphore مقابل ثنائي Semaphore

فيما يلي بعض الاختلافات الرئيسية بين العد والإشارة الثنائية:

عد Semaphore ثنائي Semaphore
لا استبعاد متبادل استبعاد متبادل
أي قيمة عدد صحيح القيمة فقط 0 و 1
أكثر من فتحة فتحة واحدة فقط
قدم مجموعة من العمليات لديها آلية استبعاد متبادل.

الفرق بين Semaphore مقابل Mutex

المعلمات Semaphore مزامنة
تقنية إنه نوع من آلية الإشارة. إنها آلية قفل.
نوع البيانات Semaphore هو متغير عدد صحيح. Mutex هو مجرد كائن.
تعديل يمكن لعمليات الانتظار والإشارة تعديل إشارة المرور. يتم تعديله فقط من خلال العملية التي قد تطلب موردًا أو تحرره.
إدارة الموارد إذا لم يكن هناك مورد متاح، فإن العملية تتطلب موردًا يجب أن ينفذ عملية الانتظار. يجب أن ينتظر حتى يصبح عدد الإشارات أكبر من 0. إذا تم قفله، يجب أن تنتظر العملية. يجب أن تبقى العملية في قائمة الانتظار. يجب الوصول إلى هذا فقط عند إلغاء قفل كائن المزامنة (mutex).
خيط يمكن أن يكون لديك عدة سلاسل برامج. يمكنك الحصول على خيوط برنامج متعددة في mutex ولكن ليس في نفس الوقت.
امتلاك يمكن تغيير القيمة من خلال أي عملية لتحرير المورد أو الحصول عليه. يتم تحرير قفل الكائن فقط من خلال العملية التي حصلت على القفل عليه.
الأنواع انواع من Semaphore هل يتم حساب الإشارات الضوئية والإشارات الضوئية الثنائية؟ Mutex ليس لديه أنواع فرعية.
Operaالإنتاج Semaphore يتم تعديل القيمة باستخدام عمليتي wait() و signal(). كائن Mutex مقفل أو غير مقفل.
إشغال الموارد يتم شغلها إذا تم استخدام جميع الموارد وتقوم العملية التي تطلب المورد بإجراء عملية wait () وتمنع نفسها حتى يصبح عدد الإشارات الضوئية >1. في حالة ما إذا كان الكائن مقفلاً بالفعل، تنتظر العملية التي تطلب الموارد ويتم وضعها في قائمة الانتظار من قبل النظام قبل تحرير القفل.

مزايا Semaphores

هنا، إيجابيات/فوائد الاستخدام Semaphore:

  • يسمح لأكثر من موضوع بالوصول إلى القسم الحرج
  • Semaphoreإنها مستقلة عن الآلة.
  • Semaphoreيتم تنفيذ s في الكود المستقل عن الآلة للنوية الدقيقة.
  • أنها لا تسمح لعمليات متعددة بالدخول إلى القسم الحرج.
  • ونظرًا لأن هناك انشغالًا في الانتظار في الإشارة، فلا يوجد أي إهدار لوقت العملية والموارد.
  • وهي مستقلة عن الآلة، ويجب تشغيلها في التعليمات البرمجية المستقلة عن الآلة للنوية الدقيقة.
  • أنها تسمح بإدارة مرنة للموارد.

مساوئ الإشارات

هنا، سلبيات/عيب الإشارة

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

الملخص

  • Semaphore يتم تعريفه على أنه متغير غير سلبي ومشترك بين سلاسل الرسائل.
  • إنها آلية يمكن استخدامها لتوفير المزامنة للمهام.
  • يستخدم حساب الإشارة عددًا يساعد على الحصول على المهمة أو تحريرها عدة مرات.
  • الإشارات الثنائية تشبه إلى حد كبير حساب الإشارات، ولكن قيمتها تقتصر على 0 و 1.
  • تساعدك عملية الانتظار على التحكم في إدخال المهمة إلى القسم الحرج
  • Signal يتم استخدام عملية الإشارة الضوئية للتحكم في خروج المهمة من قسم حرج
  • عد Semaphore لا يوجد لديه استبعاد متبادل في حين أن Binary Semaphore لديه الاستبعاد المتبادل
  • Semaphore تعني آلية الإشارة بينما Mutex هي آلية القفل
  • Semaphore يسمح لأكثر من موضوع بالوصول إلى القسم الحرج
  • أحد أكبر قيود الإشارة هو انعكاس الأولوية.