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

ما هي تفاصيل Semaphore?
Semaphore هو ببساطة متغير غير سلبي ومشترك بين الخيوط. إشارة المرور هي آلية إشارات، ويمكن لخيط ينتظر إشارة مرور أن يتم إرسال إشارة له بواسطة خيط آخر. يستخدم عمليتين ذريتين، 1) الانتظار، و2) Signal لمزامنة العملية.
تسمح الإشارة أو لا تسمح بالوصول إلى المورد، الأمر الذي يعتمد على كيفية إعداده.
خصائص Semaphore
فيما يلي خصائص إشارة المرور:
- إنها آلية يمكن استخدامها لتوفير المزامنة للمهام.
- إنها آلية مزامنة منخفضة المستوى.
- Semaphore سيحتوي دائمًا على قيمة عددية غير سالبة.
- Semaphore يمكن تنفيذها باستخدام عمليات الاختبار والمقاطعات، والتي يجب تنفيذها باستخدام أوصاف الملفات.
انواع من Semaphores
النوعان الشائعان من إشارات المرور هما:
- عد الإشارات
- الإشارات الثنائية
عد Semaphores
هذا النوع من Semaphore يستخدم هذا النظام عدادًا يساعد على الحصول على مهمة أو تحريرها عدة مرات. إذا كان العداد الأولي يساوي صفرًا، فيجب إنشاء إشارة العد في حالة غير متاحة.
ومع ذلك، إذا كان العدد > 0، فسيتم إنشاء الإشارة في الحالة المتاحة، ويكون عدد الرموز المميزة بها مساويًا لعددها.
ثنائي Semaphores
تتشابه الإشارات الثنائية إلى حد كبير مع إشارات العد، لكن قيمتها محصورة بين 0 و1. في هذا النوع من الإشارات، تعمل عملية الانتظار فقط إذا كانت قيمة الإشارة تساوي 1، وتنجح عملية الإشارة عندما تكون قيمة الإشارة تساوي 0. وهي أسهل في التنفيذ من إشارات العد.
مثال 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).
بعد أن تنخفض قيمة الإشارة، والتي تصبح سالبة، يتم تعليق الأمر حتى يتم استيفاء الشروط المطلوبة.
P(S)
{
while (S<=0);
S--;
}
Signal عملية
هذا النوع من Semaphore تُستخدم العملية للتحكم في خروج المهمة من قسم حرج. وهي تساعد في زيادة قيمة الوسيطة بمقدار 1، والتي يشار إليها بـ V(S).
P(S)
{
while (S>=0);
S++;
}
عد Semaphore مقابل ثنائي Semaphore
فيما يلي بعض الاختلافات الرئيسية بين العد والإشارة الثنائية:
| عد Semaphore | ثنائي Semaphore |
| لا استبعاد متبادل | استبعاد متبادل |
| أي قيمة عدد صحيح | القيمة فقط 0 و 1 |
| أكثر من فتحة | فتحة واحدة فقط |
| قدم مجموعة من العمليات | لديها آلية استبعاد متبادل. |
الفرق بين Semaphore مقابل Mutex
يقارن الجدول أدناه بين إشارة ثنائية مع قفل تبادلي عبر عدة معايير:
| المعاملات | Semaphore | مزامنة |
| تقنية | إنه نوع من آلية الإشارة. | إنها آلية قفل. |
| نوع البيانات | Semaphore هو متغير عدد صحيح. | Mutex هو مجرد كائن. |
| تعديل | يمكن لعمليات الانتظار والإشارة تعديل إشارة المرور. | يتم تعديله فقط من خلال العملية التي قد تطلب موردًا أو تحرره. |
| إدارة الموارد | إذا لم يكن هناك مورد متاح، فإن العملية تتطلب موردًا يجب أن ينفذ عملية الانتظار. يجب أن ينتظر حتى يصبح عدد الإشارات أكبر من 0. | إذا تم قفله، يجب أن تنتظر العملية. يجب أن تبقى العملية في قائمة الانتظار. يجب الوصول إلى هذا فقط عند إلغاء قفل كائن المزامنة (mutex). |
| خيط | يمكن أن يكون لديك عدة سلاسل برامج. | يمكنك الحصول على خيوط برنامج متعددة في mutex ولكن ليس في نفس الوقت. |
| امتلاك | يمكن تغيير القيمة من خلال أي عملية لتحرير المورد أو الحصول عليه. | يتم تحرير قفل الكائن فقط من خلال العملية التي حصلت على القفل عليه. |
| الأنواع | انواع من Semaphore يتم حساب الإشارات الضوئية والإشارات الضوئية الثنائية. | Mutex ليس لديه أنواع فرعية. |
| تشغيل | Semaphore يتم تعديل القيمة باستخدام عمليتي wait() و signal(). | كائن Mutex مقفل أو غير مقفل. |
| إشغال الموارد | يتم شغلها إذا تم استخدام جميع الموارد وتقوم العملية التي تطلب المورد بإجراء عملية wait () وتمنع نفسها حتى يصبح عدد الإشارات الضوئية >1. | في حالة ما إذا كان الكائن مقفلاً بالفعل، تنتظر العملية التي تطلب الموارد ويتم وضعها في قائمة الانتظار من قبل النظام قبل تحرير القفل. |
مزايا Semaphores
هنا، إيجابيات/فوائد الاستخدام Semaphore:
- يسمح ذلك لأكثر من خيط واحد بالوصول إلى القسم الحرج.
- Semaphoreإنها مستقلة عن الآلة.
- Semaphoreيتم تنفيذ s في الكود المستقل عن الآلة للنوية الدقيقة.
- أنها لا تسمح لعمليات متعددة بالدخول إلى القسم الحرج.
- ونظرًا لأن هناك انشغالًا في الانتظار في الإشارة، فلا يوجد أي إهدار لوقت العملية والموارد.
- وهي مستقلة عن الآلة، ويجب تشغيلها في التعليمات البرمجية المستقلة عن الآلة للنوية الدقيقة.
- أنها تسمح بإدارة مرنة للموارد.
عيوب Semaphores
فيما يلي سلبيات/عيوب استخدام الإشارات الضوئية:
- أحد أكبر قيود الإشارة هو انعكاس الأولوية.
- يجب على نظام التشغيل أن يحتفظ track من جميع المكالمات للانتظار والإشارة باستخدام الإشارات الضوئية.
- ولا يتم فرض استخدامها أبدًا، ولكن يتم ذلك بموجب الاتفاقية فقط.
- من أجل تجنب الجمود في الإشارة الضوئية، يجب عليك الانتظار و Signal يجب تنفيذ العمليات بالترتيب الصحيح.
- Semaphore البرمجة معقدة، لذا هناك احتمالات لعدم تحقيق الاستبعاد المتبادل.
- كما أنها ليست طريقة عملية للاستخدام على نطاق واسع لأن استخدامها يؤدي إلى فقدان النمطية.
- Semaphore أكثر عرضة للخطأ المبرمج.
- قد يسبب ذلك مأزق أو انتهاك الاستبعاد المتبادل بسبب خطأ مبرمج.


