sem_overview(7)

الاسم
sem_overview - نظرة عامة على الإشارات (semaphores) في POSIX

الوصف
تسمح إشارات POSIX للعمليات والمسارات (threads) بمزامنة إجراءاتها.

الإشارة (semaphore) هي عدد صحيح لا يُسمح أبدًا لقيمته بالانخفاض تحت الصفر. يمكن تنفيذ عمليتين على الإشارات: زيادة قيمة الإشارة بمقدار واحد (sem_post(3))؛ وتقليل قيمة الإشارة بمقدار واحد (sem_wait(3)). إذا كانت قيمة الإشارة حاليًا صفرًا، فإن عملية sem_wait(3) ستحظر (block) حتى تصبح القيمة أكبر من الصفر.

تأتي إشارات POSIX بشكلين: إشارات مسماة (named semaphores) وإشارات غير مسماة (unnamed semaphores).

الإشارات المسماة
    يتم تعريف الإشارة المسماة باسم من النموذج /somename؛ أي سلسلة منتهية بقيمة خالية (null-terminated) يصل طولها إلى NAME_MAX-4 (أي 251) حرفًا تتكون من شرطة مائلة أولية، متبوعة بحرف واحد أو أكثر، لا يحتوي أي منها على شرطات مائلة. يمكن لعمليتين (processes) العمل على نفس الإشارة المسماة عن طريق تمرير نفس الاسم إلى sem_open(3).

    تنشئ دالة sem_open(3) إشارة مسماة جديدة أو تفتح إشارة مسماة موجودة. بعد فتح الإشارة، يمكن العمل عليها باستخدام sem_post(3) وsem_wait(3). عندما تنتهي عملية من استخدام الإشارة، يمكنها استخدام sem_close(3) لإغلاق الإشارة. عندما تنتهي جميع العمليات من استخدام الإشارة، يمكن إزالتها من النظام باستخدام sem_unlink(3).

الإشارات غير المسماة (إشارات قائمة على الذاكرة)
    الإشارة غير المسماة ليس لها اسم. بدلاً من ذلك، توضع الإشارة في منطقة ذاكرة مشتركة بين مسارات متعددة (إشارة مشتركة بين المسارات thread-shared semaphore) أو عمليات (إشارة مشتركة بين العمليات process-shared semaphore). توضع الإشارة المشتركة بين المسارات في منطقة ذاكرة مشتركة بين مسارات عملية، على سبيل المثال، متغير عام. يجب وضع الإشارة المشتركة بين العمليات في منطقة ذاكرة مشتركة (مثل، قطعة ذاكرة مشتركة من System V تم إنشاؤها باستخدام shmget(2)، أو كائن ذاكرة مشتركة من POSIX تم بناؤه باستخدام shm_open(3)).

    قبل الاستخدام، يجب تهيئة الإشارة غير المسماة باستخدام sem_init(3). يمكن بعد ذلك العمل عليها باستخدام sem_post(3) وsem_wait(3). عندما لا تكون الإشارة مطلوبة بعد الآن، وقبل إلغاء تخصيص الذاكرة التي توجد فيها، يجب تدمير الإشارة باستخدام sem_destroy(3).

يصف باقي هذا القسم بعض التفاصيل المحددة لتنفيذ Linux لإشارات POSIX.

  الإصدارات
قبل Linux 2.6، كان Linux يدعم فقط الإشارات غير المسماة والمشتركة بين المسارات. على نظام يعمل بنواة Linux 2.6 ومكتبة glibc التي توفر تنفيذ NPTL للمسارات، يتم توفير تنفيذ كامل لإشارات POSIX.

  الاستمرارية
تمتلك إشارات POSIX المسماة استمرارية في النواة (kernel persistence): إذا لم تتم إزالتها بواسطة sem_unlink(3)، فستظل الإشارة موجودة حتى يتم إيقاف تشغيل النظام.

  الربط (Linking)
يجب ترجمة البرامج التي تستخدم واجهة برمجة تطبيقات إشارات POSIX باستخدام cc -pthread للربط مع مكتبة الوقت الفعلي (real-time library)، librt.

  الوصول إلى الإشارات المسماة عبر نظام الملفات
في Linux، يتم إنشاء الإشارات المسماة في نظام ملفات افتراضي، يُوصل عادةً تحت /dev/shm، بأسماء من النموذج sem.somename. (هذا هو السبب في أن أسماء الإشارات محدودة بـ NAME_MAX-4 بدلاً من NAME_MAX حرفًا.)

منذ Linux 2.6.19، يمكن وضع قوائم التحكم في الوصول (ACLs) على الملفات تحت هذا الدليل، للتحكم في أذونات الكائنات على أساس كل مستخدم وكل مجموعة.

ملاحظات
إشارات System V (semget(2)، semop(2)، إلخ) هي واجهة برمجة تطبيقات إشارات أقدم. توفر إشارات POSIX واجهة أبسط وأفضل تصميمًا من إشارات System V؛ من ناحية أخرى، فإن إشارات POSIX أقل توفرًا على نطاق واسع (خاصة على الأنظمة الأقدم) من إشارات System V.

أمثلة
يظهر مثال لاستخدام دوال إشارات POSIX المختلفة في sem_wait(3).

انظر أيضًا
sem_close(3)، sem_destroy(3)، sem_getvalue(3)، sem_init(3)، sem_open(3)، sem_post(3)، sem_unlink(3)، sem_wait(3)، pthreads(7)، shm_overview(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.