Provided by: manpages-pl-dev_4.23.1-1_all
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⟩.