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

⚡ ملخص ذكي

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

  • 🔢 فريف: الإشارة هي متغير عدد صحيح غير سالب يشير إلى ما إذا كان مورد مشترك متاحًا للخيوط المتنافسة.
  • ⚙️ أنظمة Operaنشوئها: تطلب عملية الانتظار (P) موردًا وتقلل العدد، بينما تقوم عملية الإشارة (V) بتحريره وزيادة العدد.
  • 🔁 نوع العد: تتيح إشارة العد لعدد محدد من الخيوط استخدام موارد متطابقة في نفس الوقت.
  • 🔒 النوع الثنائي: يقتصر السيمفور الثنائي على القيمتين 0 و 1، لذا فهو يتصرف مثل قفل بسيط للاستبعاد المتبادل.
  • ⚠️ المفاضلات: Semaphoreإنها مستقلة عن الآلة ومرنة، ومع ذلك فإنها تخاطر بانعكاس الأولوية والتعطل عند استخدامها بشكل غير صحيح.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن لبرامج التعلم الآلي ومساعدي البرمجة بالذكاء الاصطناعي نمذجة التزامن وإنشاء تسلسلات الانتظار والإشارات الصحيحة.

Semaphore in Operaنظام تينج

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

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

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

خصائص Semaphore

فيما يلي خصائص إشارة المرور:

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

انواع من Semaphores

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

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

عد Semaphores

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

عد Semaphores

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

ثنائي Semaphores

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

ثنائي 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).

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

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 أكثر عرضة للخطأ المبرمج.
  • قد يسبب ذلك مأزق أو انتهاك الاستبعاد المتبادل بسبب خطأ مبرمج.

الأسئلة الشائعة

قدم إدسكار ديجكسترا الإشارات الضوئية في عام 1965. وتسمى عمليات الانتظار والإشارة أيضًا P و V، من الكلمات الهولندية proberen (اختبار) و verhogen (زيادة).

يظل مؤشر العد البسيط غير سالب، لكن العديد من التطبيقات تسمح بأن تصبح قيمته سالبة. عندئذٍ، يساوي مقداره عدد العمليات المنتظرة في قائمة انتظار المؤشر.

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

يمتلك القفل المتبادل (mutex) ملكية، لذا لا يمكن فك قفله إلا من قِبل الخيط الذي قام بالقفل. أما الإشارة الثنائية (binary semaphore) فلا تمتلك ملكية، لذا يمكن لأي خيط إرسال إشارة إليها. فهما ليسا متطابقين.

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

تُرفق معظم المنصات الحديثة إشارات التزامن: POSIX sem_t في لغة C، Semaphore الطبقة في Java، والخيوط.Semaphore in Pythonنادراً ما يقوم المطورون ببناء واحد من الصفر.

يمكن للتعلم الآلي تحليل التنفيذ tracتُستخدم هذه الأدوات للتنبؤ بالتنازع، وضبط عدد التصاريح التي يحتفظ بها مؤشر العد، والإشارة إلى حالات الجمود المحتملة، والمساعدة في حل المشكلات.ping يصمم المهندسون أنظمة تزامن أكثر أمانًا.

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

تلخيص هذه التدوينة بـ: