تسمح آلية الإشارات في Linux kernel بتشغيل التطبيقات لإخطار النظام بشكل غير متزامن عند حدوث حدث جديد. نظرًا لطبيعتها ، تُعرف آلية الإشارة هذه عمومًا باسم مقاطعات البرامج. تمامًا مثل مقاطعات الأجهزة ، تعمل الإشارات على مقاطعة التدفق الطبيعي للتطبيق ، ولا يمكن التنبؤ بوقت استقبال التطبيق للإشارة.
دعنا نتعمق في آلية الإشارات في Linux ونفهم ما يجري وراء الكواليس.
مفاهيم الإشارة الأساسية في Linux
في نظام Linux ، تولد العمليات إشارات في ثلاث مواقف أساسية:
- عندما تحدث حالة استثنائية من جانب الجهاز. على سبيل المثال ، يمكنك التفكير في أحداث مثل محاولة التطبيق الوصول إلى منطقة خارج مساحة العنوان المسموح بها (خطأ تجزئة) أو إنشاء رمز آلة يتضمن قسمة على صفر عملية.
- حالات مثل استخدام مجموعات المفاتيح مثل Ctrl + C أو السيطرة + Z على وحدة التحكم من قبل المستخدم ، أو تغيير حجم شاشة وحدة التحكم ، أو إرسال إشارة قتل.
- تنتهي صلاحية المؤقت الذي تم تعيينه في التطبيق ، ويكون حد وحدة المعالجة المركزية المعطى للتطبيق مرتفعًا ، وتأتي البيانات إلى واصف ملف مفتوح ، وما إلى ذلك.
كان مفهوم الإشارات موجودًا منذ الإصدارات الأولى من نظام التشغيل Unix. في السابق ، كان هناك العديد من الاختلافات بين إصدارات Unix فيما يتعلق بمعالجة الإشارات. في وقت لاحق ، مع
توحيد POSIX المصمم لإدارة الإشارات ، بدأ Linux ومشتقات Unix الأخرى في اتباع هذه المعايير. لهذا السبب ، تشير مفاهيم إشارات Unix وإشارات POSIX ، التي قد تواجهها في بعض المستندات ، إلى الاختلافات.أرقام الإشارة
للإشارات قيم عددية مختلفة ، تبدأ بواحد. على سبيل المثال ، الإشارة 1 هي أ HUP الإشارة في كل نظام تقريبًا ، أو الإشارة 9 هي أ قتل الإشارة.
ومع ذلك ، لا يُنصح بشدة باستخدام هذه الأرقام عند استخدام الإشارات في تطبيقاتك. بالنسبة لإشارات POSIX ، إشارة يجب أن يكون الملف في التطبيق ويجب على المطور استخدام التعريفات الثابتة للأرقام ذات الصلة مثل تنفس الصعداء حتى, سيكيل، إلخ. في حين أن.
إذا قمت بفحص /usr/include/signal.h ملف على نظامك ، يمكنك رؤية العمليات الإضافية والملفات المضمنة الأخرى من خلال النظر في تعريفات القيم مثل __USE_POSIX, __USE_XOPEN, __USE_POSIX199309، إلخ. في الملف. يمكنك العثور على أرقام الإشارات المتاحة على أنظمة Linux في ملف /usr/include/asm-generic/signal.h الذي لا تحتاج إلى تضمينه مباشرة في رمز التطبيق الخاص بك.
توليد الإشارات وإرسالها
يحدث توليد الإشارة بسبب حدث. ومع ذلك ، فإن إرسال (توصيل) الإشارة إلى التطبيق ذي الصلة لا يتم في وقت واحد مع توليد الإشارة.
لإرسال الإشارة إلى التطبيق ، يجب أن يكون التطبيق قيد التشغيل حاليًا ولديه موارد وحدة المعالجة المركزية. لذلك ، يحدث إرسال إشارة إلى تطبيق معين عندما يبدأ التطبيق المعني في العمل مرة أخرى بعد تبديل السياق.
مفهوم الإشارة المعلقة
خلال الفترة من توليد الإشارة إلى إرسالها ، تكون الإشارات في حالة الاستعداد. يمكنك الوصول إلى عدد الإشارات المعلقة وعدد الإشارات المعلقة المسموح بها لعملية من /proc/PID/status ملف.
# لعملية مع PID: 2299
cat / proc / 2299 / status
# انتاج
...
SigQ: 2/31630
...
أقنعة الإشارة والحجب
غالبًا ما يتعذر على التطبيق التنبؤ بالوقت المحدد لوصول الإشارات. لذلك ، قد تحدث بعض الانقطاعات الحرجة أثناء أي عملية. يمكن أن يسبب هذا مشاكل كبيرة لتطبيق واسع النطاق.
لمنع بعض المواقف غير المرغوب فيها مثل هذه ، من الضروري استخدام أقنعة الإشارة. وبالتالي فمن الممكن منع بعض الإشارات قبل إجراء عملية حرجة. في هذه المرحلة ، من المهم إكمال الجزء الحرج وإزالة الكتل المحددة. هذه العملية شيء يجب على مطور التطبيق الانتباه إليه.
عندما يقوم التطبيق بحظر إشارة ، فإن الإشارات الأخرى من نفس النوع المتولدة ستكون في حالة انتظار حتى يتم إلغاء حظرها. في التطبيق ، يتم أيضًا توفير إرسال الإشارات المعلقة بمجرد إزالة الحظر.
بهذه الطريقة ، يتم إرسال نفس أنواع الإشارات التي تم وضعها في الانتظار وقت الحظر إلى التطبيق مرة واحدة فقط بعد إزالة الكتلة في الاستخدام العادي. يختلف الوضع بالنسبة لإشارات الوقت الفعلي.
أنواع إشارات Linux
قد تختلف الإجراءات الافتراضية وفقًا لأنواع الإشارات. إذا كان التطبيق الذي يستقبل الإشارة المقابلة لا يحتوي على وظيفة معالج الإشارة ، فسيتم تنفيذ الإجراء الافتراضي. يعني هذا أحيانًا إنهاء التطبيق وتجاهل الإشارة أحيانًا.
لا يمكن التقاط بعض الإشارات في طبقة التطبيق ، فهذه الإشارات تؤدي دائمًا الإجراء الافتراضي (مثل إشارة KILL).
بالإضافة إلى بعض الإجراءات التي تؤدي إلى إنهاء التطبيق ، يتم أيضًا إنشاء ملف تفريغ أساسي. تساعد ملفات التفريغ الأساسية ، التي تم إنشاؤها عن طريق كتابة جدول الذاكرة الظاهرية للعملية ذات الصلة على القرص ، ملف لفحص معلومات الحالة قبل انتهاء العملية بأدوات تصحيح الأخطاء في المراحل التالية.
تستند القيم التالية إلى ملف هندسة MIPS النموذجية:
الإشارة | رقم | حدث اساسي | هل يمكن القبض عليه؟ |
---|---|---|---|
تنفس الصعداء حتى | 1 | إنهاء التطبيق | نعم |
توقع | 2 | إنهاء التطبيق | نعم |
سيجكويت | 3 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
سيجيل | 4 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
سيغراب | 5 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
سيجبرت | 6 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
سيجفي | 8 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
سيكيل | 9 | إنهاء التطبيق | رقم |
سيجبوس | 10 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
SIGSEGV | 11 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
سيجسيس | 12 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
سيجبيب | 13 | إنهاء التطبيق | نعم |
سيغالرم | 14 | إنهاء التطبيق | نعم |
سيغرم | 15 | إنهاء التطبيق | نعم |
سيجسر 1 | 16 | إنهاء التطبيق | نعم |
سيجسر 2 | 17 | إنهاء التطبيق | نعم |
SIGCHLD | 18 | يتجاهل | نعم |
SIGTSTP | 20 | قف | نعم |
سيجورج | 21 | يتجاهل | نعم |
SIGPOLL | 22 | إنهاء التطبيق | نعم |
سيجستوب | 23 | قف | رقم |
سيجكون | 25 | تواصل إذا توقفت | نعم |
تسجيل الدخول | 26 | قف | نعم |
سيجتو | 27 | قف | نعم |
SIGVTALRM | 28 | إنهاء التطبيق | نعم |
SIGPROF | 29 | إنهاء التطبيق | نعم |
SIGXCPU | 30 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
SIGXFSZ | 31 | إنهاء التطبيق (تفريغ الأساسية) | نعم |
دورة حياة الإشارات في Linux
تمر الإشارات من خلال ثلاث مراحل. يتم إنتاجها بشكل أساسي في مرحلة الإنتاج ، بواسطة النواة أو أي عملية ، ويتم تمثيلها برقم. إنهم يعملون بخفة وسرعة ، حيث لا يوجد أي عبء إضافي عليهم. ولكن إذا نظرت إلى جانب POSIX ، فسترى أن إشارات الوقت الفعلي يمكنها نقل بيانات إضافية.
تأتي مرحلة تسليم الإشارات بعد مرحلة الإنتاج. عادة ، تصل الإشارات إلى التطبيق من النواة بأسرع ما يمكن. ومع ذلك ، في بعض الأحيان يمكن للتطبيقات حظر الإشارات أثناء القيام بعمليات حرجة. في مثل هذه الحالات ، تظل الإشارة معلقة حتى تتم المعاملة.
مثل الإشارات ، تعتبر العمليات أيضًا جزءًا لا يتجزأ من نظام Linux البيئي. يعد فهم ماهية العمليات وكيفية عملها أمرًا بالغ الأهمية إذا كنت تخطط لتصبح مسؤول نظام Linux.
ما هي العملية في لينكس؟
اقرأ التالي
مواضيع ذات صلة
- لينكس
- نواة لينكس
- إدارة النظام
عن المؤلف

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