.\" -*- coding: UTF-8 -*-
.\" Copyright 2014, Michael Kerrisk <mtk.manpages@gmail.com>
.\" Copyright 2014, Peter Zijlstra <peterz@infradead.org>
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH sched_setattr 2 "8 lutego 2026 r." "Linux man\-pages 6.17" 
.SH NAZWA
sched_setattr, sched_getattr \- ustawia i pobiera algorytm i parametry
szeregowania
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP,\ \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sched.h>\fP            /* Definicja stałych \fBSCHED_*\fP */
\fB#include <sys/syscall.h>\fP      /* Definicja stałych \fBSYS_*\fP */
\fB#include <unistd.h>\fP
.P
\fBint syscall(SYS_sched_setattr, pid_t \fP\fIpid\fP\fB, struct sched_attr *\fP\fIattr\fP\fB,\fP
\fB            unsigned int \fP\fIflags\fP\fB);\fP
\fBint syscall(SYS_sched_getattr, pid_t \fP\fIpid\fP\fB, struct sched_attr *\fP\fIattr\fP\fB,\fP
\fB            unsigned int \fP\fIsize\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP
.fi
.\" FIXME . Add feature test macro requirements
.P
\fIUwaga\fP: glibc nie udostępnia opakowania dla tych wywołań systemowych, co
wymusza użycie \fBsyscall\fP(2).
.SH OPIS
.SS sched_setattr()
Wywołanie systemowe \fBsched_setattr\fP() ustawia algorytm szeregowania i
powiązane atrybuty wątku, którego identyfikator podano w \fIpid\fP. Jeśli
\fIpid\fP równa się zero, ustawi algorytm i parametry szeregowania wątku
wywołującego.
.P
Obecnie, Linux obsługuje następujące \[Bq]zwykłe\[rq] (tj. nie czasu
rzeczywistego) algorytmy szeregowania zadań, które można podać jako wartości
\fIpolicy\fP:
.TP  14
\fBSCHED_OTHER\fP
.\" In the 2.6 kernel sources, SCHED_OTHER is actually called
.\" SCHED_NORMAL.
standardowy algorytm dzielenia czasu za pomocą szeregowania rotacyjnego;
.TP 
\fBSCHED_BATCH\fP
do wykonywania procesów w stylu \[Bq]wsadowym\[rq] oraz
.TP 
\fBSCHED_IDLE\fP
do uruchamiania zadań tła, o \fIbardzo\fP niskim priorytecie.
.P
Obsługiwane są również różne algorytmy \[Bq]czasu rzeczywistego\[rq],
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 algorytmów, należy zapoznać się z
podręcznikiem \fBsched\fP(7). Algorytmy czasu rzeczywistego, jakie można
określić w \fIpolicy\fP to:
.TP  14
\fBSCHED_FIFO\fP
algorytm: pierwszy na wejściu, pierwszy na wyjściu oraz
.TP 
\fBSCHED_RR\fP
szeregowanie rotacyjne (karuzelowe).
.P
Linux zapewnia również poniższy algorytm:
.TP  14
\fBSCHED_DEADLINE\fP
szeregowanie sporadyczne z budżetem czasu; więcej szczegółów w podręczniku
\fBsched\fP(7).
.P
Argument \fIattr\fP jest wskaźnikiem do struktury definiującej nowy algorytm
szeregowania, wraz z atrybutami, danego wątku. Struktura ma postać:
.P
.in +4n
.EX
struct sched_attr {
    u32 size;              /* Rozmiar tej struktury */
    u32 sched_policy;      /* Algorytm (SCHED_*) */
    u64 sched_flags;       /* Znaczniki */
    s32 sched_nice;        /* Wartość nice (SCHED_OTHER,
                              SCHED_BATCH) */
    u32 sched_priority;    /* Priorytet statyczny (SCHED_FIFO,
                              SCHED_RR) */
    /* W SCHED_DEADLINE */
    u64 sched_runtime;
    u64 sched_deadline;
    u64 sched_period;
\&
    /* Wskazówki dot. użycia */
    u32 sched_util_min;
    u32 sched_util_max;
.EE
.in
.P
Polami struktury \fIsched_attr\fP są:
.TP 
\fBsize\fP
Pole powinno być ustawione na rozmiar struktury w bajtach, jak w
\fIsizeof(struct sched_attr)\fP. Jeśli zapewniona struktura jest mniejsza niż
struktura jądra, dodatkowe pola są przyjmowane jako '0'. Jeśli zapewniona
struktura jest większa niż struktura jądra, jądro weryfikuje, czy wszystkie
dodatkowe pola wynoszą 0; jeśli tak nie jest, \fBsched_setattr\fP() zawodzi z
błędem \fBE2BIG\fP i aktualizuje \fIsize\fP tak, aby zawierało rozmiar struktury
jądra.
.IP
Powyższe zachowanie dotyczące przypadku, gdy rozmiar struktury \fIsched_attr\fP
z przestrzeni użytkownika nie pasuje do rozmiaru struktury jądra, pozwala na
rozszerzenie interfejsu w przyszłości. Nieprawidłowe aplikacje przekazujące
nadmiarowe struktury będą wciąż działać w przyszłości, jeśli rozmiar
struktury \fIsched_attr\fP jądra ulegnie zwiększeniu. W przyszłości, może
również pozwolić aplikacjom, które wiedzą o większej strukturze
\fIsched_attr\fP w przestrzeni użytkownika na określenie, czy działają na
starszym jądrze, nieobsługującym większej struktury.
.TP 
\fIsched_policy\fP
Pole określa algorytm szeregowania, będący jedną z wartości \fBSCHED_*\fP
podanych wyżej.
.TP 
\fIsched_flags\fP
Pole zawiera jeden lub więcej zsumowanych (OR) poniższych znaczników,
służących do kontroli zachowania szeregowania zadań:
.RS
.TP 
\fBSCHED_FLAG_RESET_ON_FORK\fP
Potomkowie utworzeni przez \fBfork\fP(2) nie odziedziczą uprzywilejowanych
algorytmów szeregowania. Więcej szczegółów w podręczniku \fBsched\fP(7).
.TP 
\fBSCHED_FLAG_RECLAIM\fP (od Linuksa 4.13)
.\" 2d4283e9d583a3ee8cfb1cbb9c1270614df4c29d
.\" Bandwidth reclaim is done via the GRUB algorithm; see
.\" Documentation/scheduler/sched-deadline.rst
Znacznik pozwala wątkowi \fBSCHED_DEADLINE\fP na odzyskanie przepustowości
nieużywanej przez inne wątki czasu rzeczywistego.
.TP 
\fBSCHED_FLAG_DL_OVERRUN\fP (od Linuksa 4.16)
.\" commit 34be39305a77b8b1ec9f279163c7cdb6cc719b91
Znacznik pozwala na informowanie aplikacji o przekroczeniu czasu działania w
wątkach \fBSCHED_DEADLINE\fP. Może być ono spowodowane (na przykład) przez zbyt
zgrubne liczenie czasu lub nieprawidłowe przypisanie
parametrów. Informowanie zachodzi za pośrednictwem sygnału \fBSIGXCPU\fP,
wysyłanego przy każdym przekroczeniu czasu działania.
.IP
Sygnał \fBSIGXCPU\fP jest sygnałem \fIskierowanych do procesu\fP
(zob. \fBsignal\fP(7)), a nie skierowanym do wątku. Należy to prawdopodobnie
traktować jako usterkę. Z jednej strony, \fBsched_setattr\fP() jest używane do
ustawienia atrybutu przynależnemu wątkowi. Z drugiej strony, jeśli sygnał
skierowany do procesu jest dostarczony do wątku wewnątrz procesu, innego niż
ten, który przekroczył czas działania, aplikacja nie ma sposobu, aby
zidentyfikować wątek winowajcę.
.TP 
\fBSCHED_FLAG_UTIL_CLAMP_MIN\fP
.TQ
\fBSCHED_FLAG_UTIL_CLAMP_MAX\fP (oba od Linuksa 5.3)
Znaczniki wskazują, że obecne jest, odpowiednio, pole \fIsched_util_min\fP lub
\fIsched_util_max\fP, reprezentując oczekiwane minimalne i maksymalne użycie
przez wątek.
.IP
Atrybuty użycia zakreślają dyspozytorowi granice, pomiędzy którymi powinien
szeregować wątek, potencjalnie pomagając podejmować decyzje dotyczące
umieszczenia zadania i częstotliwości jego wyboru.
.RE
.TP 
\fIsched_nice\fP
Pole określa wartość nice do ustawienia przy przekazywaniu algorytmu
szeregowania \fIsched_policy\fP \fBSCHED_OTHER\fP lub \fBSCHED_BATCH\fP. Wartość nice
jest liczbą z przedziału od \-20 (wysoki priorytet) do +19 (niski priorytet);
zob. \fBsched\fP(7).
.TP 
\fIsched_priority\fP
Pole określa statyczny priorytet do ustawienia przy przekazywaniu algorytmu
szeregowania \fIsched_policy\fP \fBSCHED_FIFO\fP lub \fBSCHED_RR\fP. Dozwolony
przedział priorytetów w tych algorytmach można sprawdzić za pomocą
\fBsched_get_priority_min\fP(2) i \fBsched_get_priority_max\fP(2). Przy innych
algorytmach, to pole musi być ustawione na 0.
.TP 
\fIsched_runtime\fP
Pole określa parametr \[Bq]Czas Działania\[rq] przy szeregowaniu z budżetem
czasu. Wartość jest wyrażana w nanosekundach. Pole to, razem z kolejnymi
dwoma, jest używane tylko przy algorytmie \fBSCHED_DEADLINE\fP; szerszy opis w
podręczniku \fBsched\fP(7).
.TP 
\fIsched_deadline\fP
Pole określa parametr \[Bq]Limit\[rq] przy szeregowaniu z budżetem
czasu. Wartość jest wyrażana w nanosekundach.
.TP 
\fIsched_period\fP
Pole określa parametr \[Bq]Okres\[rq] przy szeregowaniu z budżetem
czasu. Wartość jest wyrażana w nanosekundach.
.TP 
\fIsched_util_min\fP
.TQ
\fIsched_util_max\fP (oba od Linuksa 5.3)
Pola określają, odpowiednio, minimalne i maksymalne oczekiwane użycie. Są
ignorowane, chyba że w \fIsched_flags\fP ustawiono, odpowiednio,
\fBSCHED_FLAG_UTIL_CLAMP_MIN\fP lub \fBSCHED_FLAG_UTIL_CLAMP_MAX\fP .
.IP
Użycie jest wartością z przedziału [0, 1024], reprezentującą procentowy czas
procesora używany przez zadania działające przy maksymalnej częstotliwości
na najmocniejszym procesorze w systemie. Jest to reprezentacja
stałopozycyjna, gdzie 1024 odpowiada 100%, a 0 odpowiada 0%. Na przykład
zadanie z 20% użyciem jest zadaniem działającym przez 2ms co każde 10ms przy
maksymalnej częstotliwości i jest reprezentowane przez wartość użycia równą
\fI0.2\ *\ 1024\ =\ 205\fP.
.IP
Zadanie o minimalnej wartości użycia większej od 0 ma większe
prawdopodobieństwo uzyskania dostępu do procesora, którego możliwości są
wystarczające do pomieszczenia podanej wartości. Zadanie o maksymalnej
wartości użycia mniejszej od 1024 ma większe prawdopodobieństwo uzyskania
dostępu do procesora, którego możliwości są nie większe niż podana wartość.
.IP
Granice użycia zadania można zresetować ustawiając dane pole na
\fBUINT32_MAX\fP (od Linuksa 5.11).
.P
.\"
.\"
Argument \fIflags\fP pozwala na przyszłe rozszerzenia interfejsu; w bieżącej
implementacji musi być określony jako 0.
.SS sched_getattr()
Wywołanie systemowe \fBsched_getattr\fP() pobiera algorytm szeregowania, wraz z
powiązanymi atrybutami, dla wątku, którego identyfikator podano w
\fIpid\fP. Jeśli \fIpid\fP jest równe zero, pobiera algorytm szeregowania, wraz z
powiązanymi atrybutami, wątku wywołującego.
.P
Argument \fIsize\fP należy ustawić na rozmiar struktury \fIsched_attr\fP znany
przestrzeni użytkownika. Wartość musi być co najmniej tak duża, jak rozmiar
pierwotnie ogłoszonej struktury \fIsched_attr\fP (por. opis E2BIG w rozdziale
BŁĘDY \- przyp. tłum.), w innym przypadku wywołanie zawiedzie z błędem
\fBEINVAL\fP.
.P
Pobrane atrybuty szeregowania są umieszczane w polach struktury
\fIsched_attr\fP, na którą wskazuje \fIattr\fP. Jądro ustawi \fIattr.size\fP na
rozmiar jego struktury \fIsched_attr\fP.
.P
Jeśli bufor \fIattr\fP zapewniony przez wywołującego jest większy niż struktura
jądra \fIsched_attr\fP, dodatkowe bajty w strukturze w przestrzeni użytkownika
nie są modyfikowane. Jeśli struktura zapewniona przez wywołującego jest
mniejsza od struktury jądra \fIsched_attr\fP, jądro po cichu niż zwróci
wartości, które znalazłyby się poza zapewnioną przestrzenią. Podobnie jak
przy \fBsched_setattr\fP(), takie zachowanie pozwala na przyszłe rozszerzanie
interfejsu.
.P
Argument \fIflags\fP pozwala na przyszłe rozszerzenia interfejsu; w bieżącej
implementacji musi być określony jako 0.
.SH "WARTOŚĆ ZWRACANA"
W przypadku powodzenia, \fBsched_setattr\fP() i \fBsched_getattr\fP() zwracają
0. W razie wystąpienia błędu zwracają \-1 i ustawiają \fIerrno\fP wskazując
błąd.
.SH BŁĘDY
\fBsched_getattr\fP() oraz \fBsched_setattr\fP() mogą zawieść z następujących
powodów:
.TP 
\fBEINVAL\fP
\fIattr\fP wynosi NULL; albo \fIpid\fP jest ujemne; albo \fIflags\fP nie jest zerem.
.TP 
\fBESRCH\fP
Nie znaleziono wątku o identyfikatorze równym \fIpid\fP.
.P
Dodatkowo, \fBsched_getattr\fP() może zawieść z następujących powodów:
.TP 
\fBE2BIG\fP
Bufor określony przez \fIsize\fP i \fIattr\fP jest zbyt mały.
.TP 
\fBEINVAL\fP
\fIsize\fP jest nieprawidłowy; tj. jest mniejszy niż pierwotna wersja struktury
\fIsched_attr\fP (48 bajtów) lub jest większy od systemowego rozmiaru strony.
.P
Dodatkowo, \fBsched_setattr\fP() może zawieść z następujących powodów:
.TP 
\fBE2BIG\fP
Bufor określony przez \fIsize\fP i \fIattr\fP jest większy niż struktura jądra, a
jeden lub więcej nadmiarowych bajtów jest niezerowy.
.TP 
\fBEBUSY\fP
Błąd testu przyjęcia \fBSCHED_DEADLINE\fP, zob. \fBsched\fP(7).
.TP 
\fBEINVAL\fP
\fIattr.sched_policy\fP nie jest jednym z rozpoznawanych algorytmów
szeregowania.
.TP 
\fBEINVAL\fP
\fIattr.sched_flags\fP zawiera znacznik inny niż \fBSCHED_FLAG_RESET_ON_FORK\fP.
.TP 
\fBEINVAL\fP
\fIattr.sched_priority\fP jest nieprawidłowy.
.TP 
\fBEINVAL\fP
\fIattr.sched_policy\fP wynosi \fBSCHED_DEADLINE\fP, a parametry szeregowania z
budżetem czasu w \fIattr\fP są nieprawidłowe.
.TP 
\fBEINVAL\fP
\fIattr.sched_flags\fP zawiera \fBSCHED_FLAG_UTIL_CLAMP_MIN\fP lub
\fBSCHED_FLAG_UTIL_CLAMP_MAX\fP, a \fIattr.sched_util_min\fP lub
\fIattr.sched_util_max\fP są spoza zakresu.
.TP 
\fBEOPNOTSUPP\fP
Podano \fBSCHED_FLAG_UTIL_CLAMP\fP, lecz jądro zbudowano bez obsługi
\fBCONFIG_UCLAMP_TASK\fP.
.TP 
\fBEPERM\fP
Wywołujący nie ma odpowiednich przywilejów.
.TP 
\fBEPERM\fP
Maska koligacji procesora dla wątku określonego przez \fIpid\fP nie obejmuje
wszystkich procesorów w systemie (zob. \fBsched_setaffinity\fP(2)).
.SH STANDARDY
Linux.
.SH HISTORIA
.\" FIXME . Add glibc version
Linux 3.14.
.SH UWAGI
glibc nie zapewnia opakowań tych wywołań systemowych; należy je wywołać za
pomocą \fBsyscall\fP(2).
.P
\fBsched_setattr\fP() zapewnia nadzbiór funkcjonalności
\fBsched_setscheduler\fP(2), \fBsched_setparam\fP(2), \fBnice\fP(2) i (poza
możliwością ustawienia priorytetu wszystkich procesów należących do podanego
użytkownika i wszystkich procesów w podanej grupie)
\fBsetpriority\fP(2). Analogicznie, \fBsched_getattr\fP() zapewnia nadzbiór
funkcjonalności \fBsched_getscheduler\fP(2), \fBsched_getparam\fP(2) i (częściowo)
\fBgetpriority\fP(2).
.SH USTERKI
.\" FIXME . patch sent to Peter Zijlstra
W wersjach Linuksa do 3.15, \fBsched_setattr\fP() zawodził z błędem \fBEFAULT\fP
zamiast \fBE2BIG\fP, w przypadku opisanym w rozdziale BŁĘDY.
.P
.\" In Linux versions up to up 3.15,
.\" FIXME . patch from Peter Zijlstra pending
.\" .BR sched_setattr ()
.\" allowed a negative
.\" .I attr.sched_policy
.\" value.
Do Linuksa 5.3, \fBsched_getattr\fP() zawodził z błędem \fBEFBIG\fP, jeśli
struktura jądra \fIsched_attr\fP była większa od rozmiaru \fIsize\fP przekazanego
z przestrzeni użytkownika.
.SH "ZOBACZ TAKŻE"
.ad l
.nh
\fBchrt\fP(1), \fBnice\fP(2), \fBsched_get_priority_max\fP(2),
\fBsched_get_priority_min\fP(2), \fBsched_getaffinity\fP(2), \fBsched_getparam\fP(2),
\fBsched_getscheduler\fP(2), \fBsched_rr_get_interval\fP(2),
\fBsched_setaffinity\fP(2), \fBsched_setparam\fP(2), \fBsched_setscheduler\fP(2),
\fBsched_yield\fP(2), \fBsetpriority\fP(2), \fBpthread_getschedparam\fP(3),
\fBpthread_setschedparam\fP(3), \fBpthread_setschedprio\fP(3), \fBcapabilities\fP(7),
\fBcpuset\fP(7), \fBsched\fP(7)
.ad
.PP
.SH TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika:
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
