table of contents
sched_setscheduler(2) | System Calls Manual | sched_setscheduler(2) |
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 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.
2 maja 2024 r. | Linux man-pages (niewydane) |