Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       sched_setscheduler, sched_getscheduler - ustawia i pobiera algorytm/parametry szeregowania
       zadań

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <sched.h>

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

OPIS

       Wywołanie  systemowe  sched_getscheduler  ustawia  zarówno  politykę   jak   i   parametry
       szeregowania  zadań  wątku, którego identyfikator podano w pid. Jeśli pid jest równe zeru,
       to ustawiana jest polityka i parametry szeregowania zadań wątku wywołującego.

       Parametry szeregowania zadań są określane w argumencie param, który  jest  wskaźnikiem  do
       struktury w następującej postaci:

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

       W   bieżącej   implementacji,   struktura   zawiera   tylko  jedno  pole:  sched_priority.
       Interpretacja param zależy od wybranej polityki.

       Obecnie, Linux obsługuje następujące  „zwykłe”  (tj.  nie  czasu  rzeczywistego)  polityki
       przydzielania zadań, które można podać jako wartości policy:

       SCHED_OTHER   standardowa polityka dzielenia czasu za pomocą planowania rotacyjnego

       SCHED_BATCH   do wykonywania procesów w stylu „wsadowym” oraz

       SCHED_IDLE    do uruchamiania zadań tła, o bardzo niskim priorytecie.

       Dla każdej z powyższych polityk, param->sched_priority musi wynosić 0.

       Obsługiwane  są  również różne polityki „czasu rzeczywistego”, nadające się do specjalnych
       aplikacji, gdzie krytyczna jest precyzyjna kontrola nad sposobem, w jaki działające  wątki
       są wybierane do wykonania. Aby dowiedzieć się więcej o zasadach regulujących okoliczności,
       w jakich wątki procesu mogą używać tych  polityk,  należy  zapoznać  się  z  podręcznikiem
       sched(7). Polityki czasu rzeczywistego, jakie można określić w policy to:

       SCHED_FIFO    polityka: pierwszy na wejściu, pierwszy na wyjściu oraz

       SCHED_RR      polityka planowania rotacyjnego.

       Dla  każdej  z  powyższych  polityk,  param->sched_priority określa priorytet szeregowania
       zadań   dla   wątku.   Jest   to   liczba   w   zakresie   zwracanym    przez    wywołanie
       sched_get_priority_min(2)  i  sched_get_priority_max(2)  z  podaną  policy.  W Linuksie te
       wywołania systemowe zwracają, odpowiednio: 1 i 99.

       Od Linuksa 2.6.32, znacznik  SCHED_RESET_ON_FORK  może  być  zsumowany  logicznie  (OR)  w
       policy,  przy  wywoływaniu sched_setscheduler(). Dzięki podaniu tego znacznika, potomkowie
       utworzeni przez fork(2)  nie  dziedziczą  uprzywilejowanych  polityk  szeregowania  zadań.
       Więcej informacji w podręczniku sched(7).

       sched_getscheduler()  zwraca  bieżącą  politykę  szeregowania  zadań,  która dotyczy wątku
       określonego przez pid. Jeśli pid jest równe zeru, to  pobierana  jest  polityka  dotycząca
       wątku wywołującego.

WARTOŚĆ ZWRACANA

       Po  pomyślnym  zakończeniu,  sched_setscheduler()  zwraca  zero. Po pomyślnym zakończeniu,
       sched_getscheduler zwraca politykę dla wątku (nieujemna liczba całkowita). Po błędzie, oba
       wywołania zwracają -1 i ustawiają errno wskazując błąd.

BŁĘDY

       EINVAL Nieprawidłowe argumenty: pid jest ujemne lub param wynosi NULL.

       EINVAL (sched_setscheduler())  policy nie jest jedną ze znanych polityk.

       EINVAL (sched_setscheduler())  param nie ma sensu w podanej policy.

       EPERM  Wątek wywołujący nie ma odpowiednich przywilejów.

       ESRCH  Nie znaleziono wątku o identyfikatorze równym pid.

WERSJE

       POSIX.1  nie  określa  szczegółowo,  jakich  uprawnień wymaga wątek nieuprzywilejowany, do
       wywołania sched_setscheduler(), a detale te  różnią  się  między  systemami.  Przykładowo,
       strona podręcznika systemu Solaris 7 informuje, że rzeczywisty lub efektywny identyfikator
       użytkownika wywołującego musi odpowiadać rzeczywistemu  identyfikatorowi  użytkownika  lub
       zapisanemu set-user-ID celu.

       Polityka  i  parametry  szeregowania  zadań  są  w  Linuksie  w  rzeczywistości atrybutami
       przypisanymi wątkowi.  Wartość  zwracaną  przez  wywołanie  gettid(2)  można  przekazać  w
       argumencie  pid.  Podanie  pid  równego  0  będzie oznaczało działanie na atrybutach wątku
       wywołującego, a przekazanie wartości zwróconej przez wywołanie getpid(2), będzie oznaczało
       działanie  na  atrybutach  głównego  wątku w grupie wątku (jeśli korzysta się z interfejsu
       programistycznego   wątków   POSIX,   należy   korzystać    z    pthread_setschedparam(3),
       pthread_getschedparam(3)   i   pthread_setschedprio(3),   zamiast  z  wywołań  systemowych
       sched_*(2)).

STANDARDY

       POSIX.1-2008 (lecz zob. USTERKI poniżej).

       SCHED_BATCH() i SCHED_IDLE() są typowo linuksowe.

HISTORIA

       POSIX.1-2001.

UWAGI

       Dalsze szczegóły odnośnie  semantyki  wszystkich  powyższych  polityk  szeregowania  zadań
       „zwykłych”  i „czasu rzeczywistego” opisano w podręczniku systemowym sched(7). Zawarto tam
       także opis dodatkowej polityki, SCHED_DEADLINE, którą  można  ustawić  jedynie  za  pomocą
       sched_setattr(2).

       Systemy  POSIX-owe,  na  których  dostępne są sched_setscheduler() i sched_getscheduler(),
       definiują w <unistd.h> _POSIX_PRIORITY_SCHEDULING.

USTERKI

       POSIX.1 wskazuje, że przy  powodzeniu,  sched_setscheduler()  powinno  zwrócić  poprzednią
       politykę  szeregowania  zadań.  sched_setscheduler()  w  Linuksie  nie  jest  zgodne z tym
       wymaganiem, ponieważ w przypadku powodzenia zawsze zwraca 0.

ZOBACZ TAKŻE

       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)

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony  podręcznika  są:  Przemek  Borys
       <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i  Michał  Kułach
       <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją. Bliższe informacje o warunkach licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   lub   nowszej.   Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.