سؤال

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

أعلم أن الإشارة المرورية تعمل عن طريق حظر سلاسل الرسائل التي تنتظرها عند الاتصال بـ sem_wait() وقد تم قفلها حاليًا بواسطة مؤشر ترابط آخر.يتم بعد ذلك حظر الخيط ثم وضعه في قائمة الانتظار لتلك الإشارة.

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

شكرًا!

هل كانت مفيدة؟

المحلول

الإشارات لها عمليتان:

  1. P() للحصول على الإشارة (يبدو أنك تسمي هذا sem_wait)
  2. V() لتحرير الإشارة (يبدو أنك تسمي هذا sem_post)

تحتوي الإشارات أيضًا على عدد صحيح مرتبط بها، وهو عدد الخيوط المتزامنة المسموح لها بتمرير P() دون حظر.سيتم حظر المكالمات الأخرى إلى P() حتى يتم استدعاء V() لتحرير الأماكن.

هذا هو التعريف الكلاسيكي للإشارة.

يحرر: الإشارات لا تقدم أي ضمان للنظام.ليس عليهم استخدام قائمة انتظار أو بنية FIFO أخرى فعليًا.عندما يُسمح بمؤشر ترابط واحد فقط في المرة الواحدة، عند استدعاء V()، سيعود مؤشر ترابط آخر (ربما عشوائي) من استدعاء P() الخاص به ويستمر.

نصائح أخرى

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

وعلى الأرجح، موضوع الحالي (الذي يسمى sem_post()) ستواصل تشغيل لفترة من الوقت، حتى أنه إما يبدأ انتظار إدخال المستخدم، الكتل على إشارة أخرى، أو نفاد الوقت شريحة المخصصة لها نظام التشغيل. ثم، فإن OS التبديل في بعض عملية لا تمت بصلة للترشح لجزء من الثانية (وربما فايرفوكس أو شيء)، ثم تنفجر والتعامل مع بعض حركة مرور الشبكة، والحصول على نفسها كوب من الشاي، وأخيرا، عندما يحصل حول إلى ذلك، واختيار أيهما الخاص المواضيع الأخرى بدا الامر وكأننا، استنادا إلى شيء من هذا القبيل ما إذا كان يشعر على أساس التاريخ الماضي أن موضوع معين هو أكثر CPU أو I / O محددة.

في العديد من أنظمة تشغيل، تعطى الأولوية لI / O عمليات متجهة الى أن لم تكن موجودة لفترة طويلة جدا. هذه النظرية هو أن العمليات الجديدة قد تكون قصيرة الأجل (إذا انها كانت موجودة لمدة خمس ساعات بالفعل، الاحتمالات هي أنه لن يتم الانتهاء حتى في 1MS القادمة) ولذا فإننا قد كذلك الحصول لهم على مدى مع. من المرجح أن تظل I / O محددة، وهو ما يعني أن هناك احتمالات أنهم ذاهبون إلى إيقاف تشغيل وحدة المعالجة المركزية بينما قريبا انتظار موارد أخرى I / O-ملزمة العمليات. في الأساس، وOS يريد للعثور على العملية التي أريد لها أن تكون قادرة على القيام به مع اسرع وقت ممكن، لذلك يمكن أن نعود إلى يحتسي الشاي وتشغيل البرامج الضارة الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top