sched_setscheduler(2) | System Calls Manual | 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-2008 (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 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.
2 mai 2024 | Pagini de manual de Linux 6.9.1 |