sched_setscheduler(2)

الاسم
sched_setscheduler, sched_getscheduler - ضبط وجلب سياسة/معاملات الجدولة

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

موجز
#include <sched.h>

int sched_setscheduler(pid_t pid, int policy,
                       const struct sched_param *param);
int sched_getscheduler(pid_t pid);

الوصف
استدعاء النظام sched_setscheduler() يضبط كلاً من سياسة الجدولة ومعاملاتها للخيط الذي يُحدد معرفه في pid. إذا كان pid يساوي صفرًا، تُضبط سياسة الجدولة ومعاملات الخيط المستدعي.

تُحدد معاملات الجدولة في وسيط param، وهو مؤشر لبنية بالشكل التالي:

    struct sched_param {
        ...
        int sched_priority;
        ...
    };

في التنفيذ الحالي، تحتوي البنية على حقل واحد فقط، sched_priority. يعتمد تفسير param على السياسة المختارة.

حاليًا، يدعم لينكس سياسات الجدولة "العادية" (أي غير الحقيقية) التالية كقيم يمكن تحديدها في policy:

SCHED_OTHER
    سياسة تقاسم الوقت القياسية (round-robin)؛

SCHED_BATCH
    لتنفيذ العمليات بأسلوب "الدفعة"؛ و

SCHED_IDLE
    لتشغيل وظائف خلفية ذات أولوية منخفضة جدًا.

لكل من السياسات أعلاه، يجب أن يكون param->sched_priority مساويًا لـ 0.

تُدعم أيضًا سياسات "وقت حقيقي" متنوعة، للتطبيقات الخاصة ذات الوقت الحرج التي تحتاج إلى تحكم دقيق في الطريقة التي تُختار بها الخيوط القابلة للتشغيل للتنفيذ. للقواعد التي تحكم متى يمكن لعملية استخدام هذه السياسات، انظر sched(7). سياسات الوقت الحقيقي التي يمكن تحديدها في policy هي:

SCHED_FIFO
    سياسة الوارد أولاً، يخرج أولاً؛ و

SCHED_RR
    سياسة الدوري (round-robin).

لكل من السياسات أعلاه، يُحدد param->sched_priority أولوية جدولة للخيط. هذا رقم في النطاق الذي يُرجعه استدعاء sched_get_priority_min(2) و sched_get_priority_max(2) مع policy المحددة. في لينكس، يُرجع هذان الاستدعاءان النظاميان 1 و 99 على التوالي.

منذ لينكس 2.6.32، يمكن إجراء عملية OR للعلامة SCHED_RESET_ON_FORK في policy عند استدعاء sched_setscheduler(). نتيجة لتضمين هذه العلامة، لا ترث العمليات الفرعية المنشأة بواسطة fork(2) سياسات الجدولة المميزة. انظر sched(7) للتفاصيل.

يُرجع sched_getscheduler() سياسة الجدولة الحالية للخيط المُعرّف بواسطة pid. إذا كان pid يساوي صفرًا، يُسترد سياسة الخيط المستدعي.

قيمة الإرجاع
عند النجاح، يُرجع sched_setscheduler() صفرًا. عند النجاح، يُرجع sched_getscheduler() السياسة للخيط (عدد صحيح غير سالب). عند الخطأ، يُرجع كلا الاستدعاءين -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EINVAL
    وسائط غير صالحة: pid سالب أو param هو NULL.

EINVAL
    (sched_setscheduler()) policy ليست إحدى السياسات المعروفة.

EINVAL
    (sched_setscheduler()) param غير منطقي بالنسبة لـ policy المحددة.

EPERM
    لا يمتلك الخيط المستدعي الامتيازات المناسبة.

ESRCH
    تعذر العثور على الخيط (thread) الذي معرفه pid.

الإصدارات
لا يفصل POSIX.1 الأذونات التي يتطلبها خيط غير مميز لاستدعاء sched_setscheduler()، وتختلف التفاصيل عبر الأنظمة. على سبيل المثال، تقول صفحة الدليل Solaris 7 أن معرف المستخدم الحقيقي أو الفعلي للمستدعي يجب أن يطابق معرف المستخدم الحقيقي أو معرف المستخدم المحفوظ للمجموعة المستهدفة.

سياسة الجدولة والمعاملات هي في الواقع سمات لكل خيط على حدة في لينكس. يمكن تمرير القيمة المُرجعة من استدعاء gettid(2) في الوسيط pid. تحديد pid كـ 0 سيعمل على سمات الخيط المستدعي، وتمرير القيمة المُرجعة من استدعاء getpid(2) سيعمل على سمات الخيط الرئيسي لمجموعة الخيوط. (إذا كنت تستخدم واجهة برمجة تطبيقات خيوط POSIX، فاستخدم pthread_setschedparam(3) و pthread_getschedparam(3) و pthread_setschedprio(3) بدلاً من استدعاءات النظام sched_*(2).)

المعايير
POSIX.1-2024 (لكن انظر الأخطاء أدناه).

SCHED_BATCH و SCHED_IDLE خاصتان بلينكس.

التاريخ
POSIX.1-2001.

ملاحظات
يمكن العثور على تفاصيل إضافية حول دلالات جميع سياسات الجدولة "العادية" و "الوقت الحقيقي" أعلاه في صفحة الدليل sched(7). تصف تلك الصفحة أيضًا سياسة إضافية، SCHED_DEADLINE، والتي يمكن ضبطها فقط عبر sched_setattr(2).

الأنظمة المتوافقة مع POSIX التي تتوفر فيها sched_setscheduler() و sched_getscheduler() تُعرف _POSIX_PRIORITY_SCHEDULING في <unistd.h>.

العلل
ينص POSIX.1 على أنه عند النجاح، يجب أن يُرجع sched_setscheduler() سياسة الجدولة السابقة. لا يتوافق sched_setscheduler() في لينكس مع هذا المطلب، لأنه يُرجع دائمًا 0 عند النجاح.

انظر أيضًا
chrt(1), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getaffinity(2), sched_getattr(2), sched_getparam(2), sched_rr_get_interval(2), sched_setaffinity(2), sched_setattr(2), sched_setparam(2), sched_yield(2), setpriority(2), capabilities(7), cpuset(7), sched(7)

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

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

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