sigreturn(2)

الاسم
sigreturn, rt_sigreturn - العودة من معالج الإشارة وتنظيف إطار المكدس

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
int sigreturn(...);

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

ترتب النواة أيضًا أنه أثناء الانتقال إلى وضع المستخدم، يُستدعى معالج الإشارة، وعند العودة من المعالج، ينتقل التحكم إلى قطعة من كود مساحة المستخدم تُسمى عادةً "الترامبولين الإشاري". كود الترامبولين الإشاري بدوره يستدعي sigreturn().

استدعاء sigreturn() هذا يلغي كل ما تم فعله—تغيير قناع الإشارة للعملية، تبديل مكدسات الإشارة (انظر sigaltstack(2))—من أجل استدعاء معالج الإشارة. باستخدام المعلومات التي حُفظت سابقًا على مكدس مساحة المستخدم، يستعيد sigreturn() قناع الإشارة للعملية، ويبدل المكدسات، ويستعيد سياق العملية (أعلام المعالج والسجلات، بما في ذلك مؤشر المكدس ومؤشر التعليمات)، بحيث تستأنف العملية التنفيذ من النقطة التي قُطعت فيها بواسطة الإشارة.

قيمة الإرجاع
sigreturn() لا يعود أبدًا.

الإصدارات
العديد من أنظمة نوع يونكس لديها استدعاء نظام sigreturn() أو ما يعادله تقريبًا. ومع ذلك، هذا الاستدعاء غير محدد في POSIX، وتفاصيل سلوكه تختلف عبر الأنظمة.

المعايير
لا شيء.

ملاحظات
sigreturn() موجود فقط للسماح بتنفيذ معالجات الإشارة. يجب أبدًا استدعاؤه مباشرة. (في الواقع، غلاف بسيط لـ sigreturn() في مكتبة جنو سي يعيد ببساطة -1، مع تعيين errno إلى ENOSYS.) تفاصيل الوسائط (إن وجدت) الممررة إلى sigreturn() تختلف حسب البنية. (على بعض البنى، مثل x86-64، sigreturn() لا يأخذ وسائط، لأن جميع المعلومات التي يحتاجها متوفرة في إطار المكدس الذي أنشأته النواة سابقًا على مكدس مساحة المستخدم.)

في وقت مضى، وضعت أنظمة يونكس كود الترامبولين الإشاري على مكدس المستخدم. في الوقت الحالي، صفحات مكدس المستخدم محمية بحيث تمنع تنفيذ الكود. لذلك، على أنظمة لينكس المعاصرة، اعتمادًا على البنية، يعيش كود الترامبولين الإشاري إما في vdso(7) أو في مكتبة سي. في الحالة الأخيرة، وظيفة الغلاف sigaction(2) لمكتبة سي تُعلم النواة بموقع كود الترامبولين بوضع عنوانه في حقل sa_restorer من بنية sigaction، وتضبط العلم SA_RESTORER في حقل sa_flags.

معلومات سياق العملية المحفوظة توضع في بنية ucontext_t (انظر <sys/ucontext.h>). تلك البنية مرئية داخل معالج الإشارة كالوسيطة الثالثة لمعالج تم إنشاؤه عبر sigaction(2) مع العلم SA_SIGINFO.

على بعض أنظمة يونكس الأخرى، تشغيل الترامبولين الإشاري يختلف قليلاً. على وجه الخصوص، على بعض الأنظمة، عند الانتقال إلى وضع المستخدم، تمرر النواة التحكم إلى الترامبولين (بدلاً من معالج الإشارة)، وكود الترامبولين يستدعي معالج الإشارة (ثم يستدعي sigreturn() بمجرد عودة المعالج).

  الاختلافات بين مكتبة C والنواة
استدعاء النظام الأصلي في لينكس كان يُسمى sigreturn(). ومع ذلك، مع إضافة الإشارات الزمنية الحقيقية في لينكس 2.2، أُضيف استدعاء نظام جديد، rt_sigreturn()، لدعم نوع sigset_t الموسع. مكتبة جنو سي تخفي هذه التفاصيل عنا، مستخدمة بشفافية rt_sigreturn() عندما توفره النواة.

انظر أيضًا
kill(2), restart_syscall(2), sigaltstack(2), signal(2), getcontext(3), signal(7), vdso(7)

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

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

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