Provided by:
manpages-pl-dev_20060617-3_all 
NAZWA
sched_setscheduler, sched_getscheduler - ustawienie i pobranie
algorytmu/parametrow szeregowania zada
SK/LADNIA
#include <sched.h>
int sched_setscheduler(pid_t pid, int policy, const struct sched_param
*p);
int sched_getscheduler(pid_t pid);
struct sched_param {
...
int sched_priority;
...
};
OPIS
sched_setscheduler ustawia dla procesu identyfikowanego przez pid
polityk szeregowania zada oraz zwizane z ni parametry. Jeli pid jest
rowne zeru, to skonfigurowane zostanie szeregowanie dla procesu
wolajcego t funkcj. Interpretacja parametru p zaley od wybranej
polityki. Obecnie, pod Linuksem obslugiwane s nastpujce trzy polityki:
SCHED_FIFO, SCHED_RR i SCHED_OTHER; ich semantyki s opisane poniej.
sched_getscheduler zapytuje o biec polityk szeregowania zada, ktora
dotyczy procesu okrelonego przez pid. Jeli pid jest rowne zeru, to
pobierana jest polityk dotyczca procesu wywolujcego t funkcj.
Polityki szeregowania zada
Procedura szeregujca jest czci jdra, ktora decyduje o kolejnoci
wykonywania dzialajcych procesow przez procesor. Linuksowa procedura
szeregujca oferuje trzy rone polityki szeregowania zada: jedn dla
zwyklych procesow oraz dwie dla aplikacji czasu rzeczywistego. Kademu
procesowi przypisywana jest warto priorytetu statycznego,
sched_priority, ktora moe by zmieniana tylko poprzez wywolania
systemowe. Koncepcyjnie, procedura szeregujca zarzdza listami
dzialajcych procesow przypisanymi kadej z moliweych wartoci
sched_priority, ktora to warto musi mieci si w zakresie od 0 do 99. Aby
zdecydowa, ktory proces naley uruchomi jako nastpny, procedura
szeregujca poszukuje niepustej listy o najwyszym priorytecie statycznym
i bierze proces z pocztku tej listy. Polityka szeregowania zada okrela
dla kadego z procesow o danyej wartoci priorytetu statycznego, gdzie
zostanie on wstawiony na list i jak bdzie si w jej obrbie
przemieszczal.
SCHED_OTHER jest domyln, uniwersaln polityk dzielenia czasu, uywan
przez wikszo procesow. SCHED_FIFO i SCHED_RR s przeznaczone dla
specjalnych aplikacji, dla ktorych czas jest spraw krytyczn i ktore
musz mie dokladn kontrol nad sposobem, w jaki podejmowane s decyzje o
wykonywaniu dzialajcych procesow. Procesy korzystajce z polityki
szeregowania SCHED_OTHER musz mie przypisany priorytet statyczny rowny
0, a procesy korzystajce z SCHED_FIFO lub SCHED_RR mog mie warto tego
priorytetu z zakresu od 1 do 99. Priorytet statyczny wyszy ni 0 mog
uzyskiwa tylko procesy dzialajce z uprawnieniami superuytkownika i
wobec tego tylko one mog korzystajce z polityk szeregowania SCHED_FIFO
i SCHED_RR. Wywolania systemowe sched_get_priority_min i
sched_get_priority_max slu do okrelania zakresow priorytetow
odpowiadajcych okrelonym politykom w sposob przenony, wlaciwy dla
systemow zgodnych z POSIX.1b.
Szeregowanie zada jest wywlaszczajce: jeli proces o wyszym priorytecie
statycznym staje si gotowy do dzialania, proces biecy zostanie
wywlaszczony i wroci do swojej kolejki oczekiwania. Polityka
szeregowania zada okrela tylko kolejno na licie dzialajcych procesow o
tym samym priorytecie statycznym.
SCHED_FIFO: Szeregowanie typu pierwszy na wejciu-pierwszy na wyjciu
(First In-First Out), SCHED_FIFO, moe by uywane tylko ze statycznymi
priorytetami wyszymi ni 0 oznaczajcymi, e gdy proces SCHED_FIFO stanie
si gotowy do dzialania, to zawsze i natychmiast wywlaszczy wszystkie
aktualnie dzialajce procesy SCHED_OTHER. SCHED_FIFO jest prostym
algorytmem szeregowania bez kwantowania czasu. Procesow szeregowanych
wedlug polityki SCHED_FIFO dotycz nastpujce reguly: Proces SCHED_FIFO,
ktory zostal wywlaszczony przez inny proces o wyszym priorytecie
pozostanie na pocztku listy dla swojego priorytetu i jego wykonywanie
zostanie wznowione, gdy tylko procesy o wyszym priorytecie zostan znow
zablokowane. Gdy proces SCHED_FIFO staje si gotowy do dzialania, jest
on wstawiany na koniec listy dla swojego priorytetu. Wywolanie
sched_setscheduler lub sched_setparam wstawia proces SCHED_FIFO (lub
SCHED_RR), okrelony przez pid na pocztek listy (o ile byl on
uruchamialny). W wyniku tego, moe on wywlaszczy aktualnie dzialajcy
proces, jeli oba maj ten sam priorytet. (POSIX 1003.1 okrela, e proces
powinien trafia na koniec listy.) Proces wywolujcy sched_yield
zostanie wstawiony na koniec listy. adne inne zdarzenia nie mog przesun
procesu, szeregowanego wedlu polityki SCHED_FIFO, a znajdujcego si na
licie procesow oczekujcych o jednakowych statycznych priorytetach.
Proces SCHED_FIFO dziala dopoki nie zostanie zablokowany przez danie
we/wy, wywlaszczenie przez proces o wyszym priorytecie, lub przez
wywolanie (samodzielne) funkcji sched_yield.
SCHED_RR: Szeregowanie typu cyklicznego (Round Robin),
SCHED_RR, jest prostym rozszerzeniem SCHED_FIFO. Wszystko, co
powiedziano o SCHED_FIFO, dotyczy take SCHED_RR, z tym e kady z
procesow moe dziala tylko przez okrelony okres (kwant) czasu. Jeli
proces dzialajcy wedlug polityki SCHED_RR dziala przez czas dluszy lub
rowny temu okresowi, zostanie on wstawiony na koniec listy dla swojego
priorytetu. Proces SCHED_RR, ktory zostal wywlaszczony przez proces o
wyszym priorytecie i wznowil dzialanie, dokoczy niewykorzystan cz
cyklicznego kwantu czasu. Dlugo kwantu czasu mona odczyta za pomoc
funkcji sched_rr_get_interval.
SCHED_OTHER: Domylne szeregowanie linuksowe,
SCHED_OTHER, moe by uywane tylko ze statycznym priorytetem rownym 0.
SCHED_OTHER jest standardow linuksow procedur szeregowania zada poprzez
przydzielanie czasu, przeznaczon dla wszystkich procesow, ktore nie maj
specjalnych wymaga odnonie czasu rzeczywistego wymagajcych
wykorzystania mechanizmu priorytetow statycznych. Proces, ktory ma by
uruchomiony, jest wybierany z listy dla priorytetu statycznego 0 w
oparciu o okrelany jedynie wewntrz tej listy priorytet dynamiczny.
Wspomniany priorytet dynamiczny jest oparty na wartoci "nice"
(ustawianej za pomoc funkcji systemowych nice i setpriority) i
zwikszany w kadym kwancie czasu, w ktorym proces jest gotow do
dzialania, lecz procedura szeregujca mu tego zabrania. Zapewnia to
uczciwy postp wszystkim procesom polityki SCHED_OTHER.
Czas odpowiedzi
Zablokowany proces o wysokim priorytecie, oczekujcy na we/wy ma
okrelony czas odpowiedzi przed ponownym jego szeregowaniem. Autor
sterownika urzdzenia moe znacznie zmniejszy czas odpowiedzi, uywajc
procedury obslugi przerwa typu "slow interrupt".
R'one
Procesy potomne dziedzicz poprzez fork(2) algorytm szeregowania i
parametry.
Procesom czasu rzeczywistego do unikania oponie stronicowania zazwyczaj
potrzebne jest blokowanie pamici. Moe ono by wykonane za pomoc mlock(2)
lub mlockall(2).
Poniewa nieblokujca nieskoczona ptla w procesie, szeregowanym weglug
polityki SCHED_FIFO lub SCHED_RR bdzie (wiecznie) blokowa wszystkie
procesy o niszym priorytecie, tworca oprogramowania powinien na konsoli
zawsze trzyma dostpn powlok, szeregowan z wyszym priorytetem statycznym
ni testowana aplikacja. Umoliwi ona awaryjne ubicie testowanych
aplikacji czasu rzeczywistego, ktore nie blokuj, lub nie kocz si
zgodnie z oczekiwaniami. Jako e procesy SCHED_FIFO i SCHED_RR mog
wywlaszcza inne procesy na zawsze, tylko procesy roota mog wlcza te
polityki szeregowania zada.
Systemy POSIX-owe, na ktorych dostpne s sched_setscheduler i
sched_getscheduler, definiuj w <unistd.h> _POSIX_PRIORITY_SCHEDULING.
WARTO ZWRACANA
Po pomylnym zakoczeniu, sched_setscheduler zwraca zero. Po pomylnym
zakoczeniu, sched_getscheduler zwraca polityk dla procesu (nieujemna
liczba calkowita). Po bldzie, zwracane jest -1 i odpowiednio ustawiane
errno.
B/LDY
ESRCH Proces o identyfikatorze pid nie zostal znaleziony.
EPERM Proces wolajcy nie ma odpowiednich uprawnie. Tylko procesy roota
mog wlcza polityki SCHED_FIFO oraz SCHED_RR. Proces wolajcy
sched_setscheduler musi mie efektywny uid rowny euid lub uid
procesu identyfikowanego przez pid lub musi by procesem
superuytkownika.
EINVAL Polityka szeregowania zada policy nie jest adn ze znanych
polityk lub parametr p nie ma sensu dla danej polityki.
ZGODNE Z
POSIX.1b (wczeniej POSIX.4)
USTERKI
W systemie linux-1.3.81 polityka SCHED_RR nie zostala jeszcze dokladnie
przetestowana i moe nie zachowywa si dokladnie tak, jak opisano w
POSIX.1b.
UWAGA
Standardowy Linux jest systemem operacyjnym do ogolnych zastosowa i
wspiera: procesy drugoplanowe, aplikacje interakcyjne i aplikacje
mikkiego czasu rzeczywisyego (aplikacje, ktore zazwyczaj napotykaj na
nieprzekraczalne terminy w przebiegach czasowych). Niniejsza strona
podrcznika jest zorientowana na te rodzaje aplikacji.
Standardowy Linux nie jest zaprojektowany do obslugi aplikacji twardego
czasu rzeczywistego, to znaczy aplikacji, w ktorych nieprzekraczalne
terminy (czsto znacznie krotsze ni sekunda) musz by zagwarantowane lub
system zawiedzie katastroficznie. Podobnie, jak wszystkie systemy do
ogolnych zastosowa, Linux zostal zaprojektowany aby zmaksymalizowa
wydajno dla przypadkow przecitnych, zamiast wydajnoci dla przypadkow
najgorszych. Wydajno Linuksa w obsludze przerwa jest dla przypadkow
najgorszych znacznie gorsza ni dla przypadkow przecitnych. Jego liczne
blokady kernela (takie, jak dla SMP) powoduj dlugie maksymalne czasy
oczekiwania, a wiele z zastosowanych w nim technik zwikszajcych
wydajno, zmniejsza redni czas poprzez zwikszenie czasu dla przypadkow
najgorszych. W wikszoci sytuacji jest to to, czego si oczekuje, lecz
gdy rzeczywicie rozwijana jest aplikacja twardego czasu rzeczywistego,
naley rozway zastosowanie rozszerze twardego czasu rzeczywistego dla
Linuksa, takich jak RTLinux (http://www.rtlinux.org) lub skorzysta z
innego systemu operacyjnego, zaprojektowanego specjalnie dla aplikacji
twardego czasu rzeczywistego.
ZOBACZ TAKE
sched_setaffinity(2), sched_getaffinity(2), sched_setparam(2),
sched_getparam(2), sched_yield(2), sched_get_priority_max(2),
sched_get_priority_min(2), sched_rr_get_interval(2), nice(2),
setpriority(2), getpriority(2), mlockall(2), munlockall(2), mlock(2),
munlock(2)
Programming for the real world - POSIX.4 Billa O. Gallmeistera,
O'Reilly & Associates, Inc., ISBN 1-56592-074-0
IEEE Std 1003.1b-1993 (standard POSIX.1b)
ISO/IEC 9945-1:1996 - jest to nowa rewizja (1996) POSIX.1, ktora
zawiera jako jednolity tekst standardy POSIX.1(1990), POSIX.1b(1993),
POSIX.1c(1995) i POSIX.1i(1995).
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.