sched_setscheduler(2)

NUME
sched_setscheduler, sched_getscheduler - stabilește și obține politica/parametrii de planificare

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <sched.h>

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

DESCRIERE
Apelul de sistem sched_setscheduler() stabilește atât politica de planificare, cât și parametrii pentru firul al cărui ID este specificat în pid. Dacă pid este egal cu zero, se vor stabili politica de planificare și parametrii firului apelant.

Parametrii de planificare sunt specificați în argumentul param, care este un indicator către o structură de forma următoare:

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

În implementarea actuală, structura conține un singur câmp, sched_priority. Interpretarea lui param depinde de politica selectată.

În prezent, Linux acceptă următoarele politici de planificare „normale” (adică, fără timp real) ca valori care pot fi specificate în policy:

SCHED_OTHER
    politica standard de repartizare a timpului „round-robin”;

SCHED_BATCH
    pentru executarea proceselor în stil „lot”; și

SCHED_IDLE
    pentru rularea sarcinilor de fundal cu prioritate foarte mică.

Pentru fiecare dintre politicile de mai sus, param->sched_priority trebuie să fie 0.

Sunt acceptate, de asemenea, diferite politici „în timp real”, pentru aplicații speciale cu timp critic care necesită un control precis asupra modului în care sunt selectate pentru execuție firele de execuție. Pentru normele care reglementează situațiile în care un proces poate utiliza aceste politici, a se vedea sched(7). Politicile în timp real care pot fi specificate în policy sunt:

SCHED_FIFO
    o politică „primul intrat, primul ieșit”; și

SCHED_RR
    o politică „round-robin”.

Pentru fiecare dintre politicile de mai sus, param->sched_priority specifică o prioritate de planificare pentru fir. Acesta este un număr din intervalul returnat prin apelarea sched_get_priority_min(2) și sched_get_priority_max(2) cu policy specificat. În Linux, aceste apeluri de sistem returnează, respectiv, 1 și 99.

Începând cu Linux 2.6.32, flagul SCHED_RESET_ON_FORK poate fi SAU condițional(ORed) în policy atunci când se apelează sched_setscheduler(). Ca urmare a includerii acestui indicator, copiii creați de fork(2) nu moștenesc politici de planificare privilegiate. Consultați sched(7) pentru detalii.

sched_getscheduler() returnează politica curentă de planificare a firului identificat prin pid. Dacă pid este egal cu zero, se va prelua politica firului apelant.

VALOAREA RETURNATĂ
În caz de succes, sched_setscheduler() returnează zero. La succes, sched_getscheduler() returnează politica pentru firul de execuție (un număr întreg nenulegativ). În caz de eroare, ambele apeluri returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EINVAL
    Argumente nevalide: pid este negativ sau param este NULL.

EINVAL
    (sched_setscheduler()) Politica definită de policy nu este una dintre politicile recunoscute.

EINVAL
    (sched_setscheduler()) Parametrul param nu are sens pentru policy specificată.

EPERM
    Firul apelant nu are privilegiile adecvate.

ESRCH
    Firul de execuție al cărui identificator este pid nu a putut fi găsit.

VERSIUNI
POSIX.1 nu detaliază permisiunile de care are nevoie un fir neprivilegiat pentru a apela sched_setscheduler(), iar detaliile variază de la un sistem la altul. De exemplu, pagina de manual Solaris 7 precizează că ID-ul de utilizator real sau efectiv al apelantului trebuie să coincidă cu ID-ul de utilizator real sau cu set-user-ID-ul de salvare al țintei.

Politica de planificare și parametrii sunt de fapt atribute per-fir de execuție în Linux. Valoarea returnată în urma unui apel la gettid(2) poate fi trecută în argumentul pid. Specificarea pid ca 0 va opera asupra atributelor firului apelant, iar trecerea valorii returnate în urma unui apel la getpid(2) va opera asupra atributelor firului principal al grupului de fire; (dacă utilizați API-ul de fire POSIX, atunci utilizați pthread_setschedparam(3), pthread_getschedparam(3) și pthread_setschedprio(3), în locul apelurilor de sistem sched_*(2)).

STANDARDE
POSIX.1-2024 (dar vedeți secțiunea ERORI de mai jos).

SCHED_BATCH și SCHED_IDLE sunt specifice Linux.

ISTORIC
POSIX.1-2001.

NOTE
Detalii suplimentare privind semantica tuturor politicilor de planificare „normală” și „în timp real” de mai sus pot fi găsite în pagina de manual sched(7). Pagina respectivă descrie, de asemenea, o politică suplimentară, SCHED_DEADLINE, care poate fi definită numai prin intermediul sched_setattr(2).

Sistemele POSIX pe care sunt disponibile sched_setscheduler() și sched_getscheduler() definesc _POSIX_PRIORITY_SCHEDULING în <unistd.h>.

ERORI
POSIX.1 spune că, în caz de succes, sched_setscheduler() ar trebui să returneze politica de planificare anterioară. Linux sched_setscheduler() nu este conform cu această cerință, deoarece returnează întotdeauna 0 în caz de succes.

CONSULTAȚI ȘI
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)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.