Provided by: manpages-pl-dev_20060617-3_all bug

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.