Provided by: manpages-pl-dev_0.7-2_all bug

NAZWA

       sched_setscheduler,   sched_getscheduler  -  ustawienie  i  pobranie  algorytmu/parametrów
       szeregowania zadań

SKŁADNIA

       #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

        Uwaga! To tłumaczenie może być nieaktualne!

       sched_setscheduler ustawia dla procesu identyfikowanego przez  pid  politykę  szeregowania
       zadań oraz związane z nią parametry. Jeśli pid jest równe zeru, to skonfigurowane zostanie
       szeregowanie dla procesu wołającego tę  funkcję.   Interpretacja  parametru  p  zależy  od
       wybranej  polityki.  Obecnie,  pod  Linuksem  obsługiwane  są  następujące  trzy polityki:
       SCHED_FIFO, SCHED_RR i SCHED_OTHER; ich semantyki są opisane poniżej.

       sched_getscheduler zapytuje o bieżącą politykę szeregowania zadań, która  dotyczy  procesu
       określonego  przez  pid.  Jeśli  pid jest równe zeru, to pobierana jest polityką dotycząca
       procesu wywołującego tę funkcję.

   Polityki szeregowania zadań
       Procedura  szeregująca  jest  częścią  jądra,  która  decyduje  o  kolejności  wykonywania
       działających  procesów  przez procesor. Linuksowa procedura szeregująca oferuje trzy różne
       polityki szeregowania zadań: jedną dla zwykłych procesów oraz  dwie  dla  aplikacji  czasu
       rzeczywistego.   Każdemu  procesowi  przypisywana  jest  wartość  priorytetu  statycznego,
       sched_priority, która może być zmieniana tylko poprzez wywołania systemowe.  Koncepcyjnie,
       procedura  szeregująca  zarządza  listami  działających  procesów  przypisanymi  każdej  z
       możliweych wartości sched_priority, która to wartość musi mieścić się w zakresie od  0  do
       99.  Aby  zdecydować,  który  proces należy uruchomić jako następny, procedura szeregująca
       poszukuje niepustej listy o najwyższym priorytecie statycznym i bierze proces  z  początku
       tej  listy.  Polityka  szeregowania zadań określa dla każdego z procesów o danyej wartości
       priorytetu statycznego, gdzie zostanie on wstawiony na  listę  i  jak  będzie  się  w  jej
       obrębie przemieszczał.

       SCHED_OTHER  jest  domyślną, uniwersalną polityką dzielenia czasu, używaną przez większość
       procesów. SCHED_FIFO i SCHED_RR są przeznaczone dla  specjalnych  aplikacji,  dla  których
       czas  jest  sprawą  krytyczną  i  które  muszą mieć dokładną kontrolę nad sposobem, w jaki
       podejmowane są  decyzje  o  wykonywaniu  działających  procesów.  Procesy  korzystające  z
       polityki  szeregowania  SCHED_OTHER  muszą  mieć przypisany priorytet statyczny równy 0, a
       procesy korzystające z SCHED_FIFO lub SCHED_RR mogą mieć wartość tego priorytetu z zakresu
       od  1  do  99.  Priorytet statyczny wyższy niż 0 mogą uzyskiwać tylko procesy działające z
       uprawnieniami superużytkownika  i  wobec  tego  tylko  one  mogą  korzystające  z  polityk
       szeregowania   SCHED_FIFO   i   SCHED_RR.  Wywołania  systemowe  sched_get_priority_min  i
       sched_get_priority_max służą do określania zakresów priorytetów odpowiadających określonym
       politykom w sposób przenośny, właściwy dla systemów zgodnych z POSIX.1b.

       Szeregowanie  zadań  jest  wywłaszczające:  jeśli  proces o wyższym priorytecie statycznym
       staje się gotowy do działania, proces bieżący zostanie  wywłaszczony  i  wróci  do  swojej
       kolejki  oczekiwania.  Polityka  szeregowania  zadań  określa  tylko  kolejność  na liście
       działających procesów o tym samym priorytecie statycznym.

   SCHED_FIFO: Szeregowanie typu pierwszy na wejściu-pierwszy na wyjściu
       (First In-First Out), SCHED_FIFO, może  być  używane  tylko  ze  statycznymi  priorytetami
       wyższymi  niż 0 oznaczającymi, że gdy proces SCHED_FIFO stanie się gotowy do działania, to
       zawsze i  natychmiast  wywłaszczy  wszystkie  aktualnie  działające  procesy  SCHED_OTHER.
       SCHED_FIFO   jest   prostym   algorytmem  szeregowania  bez  kwantowania  czasu.  Procesów
       szeregowanych według polityki SCHED_FIFO dotyczą następujące  reguły:  Proces  SCHED_FIFO,
       który  został  wywłaszczony przez inny proces o wyższym priorytecie pozostanie na początku
       listy dla swojego priorytetu i jego wykonywanie zostanie wznowione, gdy  tylko  procesy  o
       wyższym  priorytecie  zostaną  znów zablokowane. Gdy proces SCHED_FIFO staje się gotowy do
       działania,  jest  on  wstawiany  na  koniec  listy  dla  swojego   priorytetu.   Wywołanie
       sched_setscheduler  lub sched_setparam wstawia proces SCHED_FIFO (lub SCHED_RR), określony
       przez pid na początek  listy  (o  ile  był  on  uruchamialny).  W  wyniku  tego,  może  on
       wywłaszczyć  aktualnie  działający proces, jeśli oba mają ten sam priorytet. (POSIX 1003.1
       określa, że proces powinien trafiać  na  koniec  listy.)   Proces  wywołujący  sched_yield
       zostanie  wstawiony  na  koniec  listy.  Żadne  inne zdarzenia nie mogą przesunąć procesu,
       szeregowanego  wedłu  polityki  SCHED_FIFO,  a  znajdującego  się   na   liście   procesów
       oczekujących  o  jednakowych statycznych priorytetach. Proces SCHED_FIFO działa dopóki nie
       zostanie  zablokowany  przez  żądanie  we/wy,  wywłaszczenie  przez   proces   o   wyższym
       priorytecie, lub przez wywołanie (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 także SCHED_RR, z tym że każdy z procesów może działać tylko przez określony okres
       (kwant)  czasu. Jeśli proces działający według polityki SCHED_RR działa przez czas dłuższy
       lub równy temu okresowi, zostanie on wstawiony na koniec  listy  dla  swojego  priorytetu.
       Proces  SCHED_RR,  który  został wywłaszczony przez proces o wyższym priorytecie i wznowił
       działanie, dokończy niewykorzystaną część cyklicznego kwantu czasu. Długość  kwantu  czasu
       można odczytać za pomocą funkcji sched_rr_get_interval.

   SCHED_OTHER: Domyślne szeregowanie linuksowe,
       SCHED_OTHER,  może być używane tylko ze statycznym priorytetem równym 0.  SCHED_OTHER jest
       standardową  linuksową  procedurą  szeregowania   zadań   poprzez   przydzielanie   czasu,
       przeznaczoną  dla  wszystkich  procesów, które nie mają specjalnych wymagań odnośnie czasu
       rzeczywistego wymagających wykorzystania mechanizmu priorytetów statycznych. Proces, który
       ma  być  uruchomiony,  jest  wybierany  z  listy  dla priorytetu statycznego 0 w oparciu o
       określany jedynie wewnątrz tej listy priorytet dynamiczny. Wspomniany priorytet dynamiczny
       jest  oparty  na  wartości  "nice"  (ustawianej  za  pomocą  funkcji  systemowych  nice  i
       setpriority) i zwiększany w każdym kwancie czasu, w którym proces jest gotów do działania,
       lecz procedura szeregująca mu tego zabrania. Zapewnia to uczciwy postęp wszystkim procesom
       polityki SCHED_OTHER.

   Czas odpowiedzi
       Zablokowany proces o wysokim priorytecie, oczekujący na we/wy ma określony czas odpowiedzi
       przed  ponownym  jego  szeregowaniem. Autor sterownika urządzenia może znacznie zmniejszyć
       czas odpowiedzi, używając procedury obsługi przerwań typu "slow interrupt".

   Różne
       Procesy potomne dziedziczą poprzez fork(2) algorytm szeregowania i parametry.

       Procesom czasu rzeczywistego do unikania opóźnień stronicowania zazwyczaj  potrzebne  jest
       blokowanie pamięci. Może ono być wykonane za pomocą mlock(2) lub mlockall(2).

       Ponieważ   nieblokująca  nieskończona  pętla  w  procesie,  szeregowanym  wegług  polityki
       SCHED_FIFO  lub  SCHED_RR  będzie  (wiecznie)  blokować  wszystkie   procesy   o   niższym
       priorytecie,  twórca  oprogramowania  powinien na konsoli zawsze trzymać dostępną powłokę,
       szeregowaną z  wyższym  priorytetem  statycznym  niż  testowana  aplikacja.  Umożliwi  ona
       awaryjne  ubicie  testowanych  aplikacji  czasu  rzeczywistego, które nie blokują, lub nie
       kończą się zgodnie z oczekiwaniami. Jako że procesy SCHED_FIFO i SCHED_RR mogą wywłaszczać
       inne procesy na zawsze, tylko procesy roota mogą włączać te polityki szeregowania zadań.

       Systemy  POSIX-owe,  na  których  dostępne  są  sched_setscheduler  i  sched_getscheduler,
       definiują w <unistd.h> _POSIX_PRIORITY_SCHEDULING.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu,  sched_setscheduler  zwraca  zero.   Po  pomyślnym  zakończeniu,
       sched_getscheduler  zwraca politykę dla procesu (nieujemna liczba całkowita).  Po błędzie,
       zwracane jest -1 i odpowiednio ustawiane errno.

BŁĘDY

       ESRCH  Proces o identyfikatorze pid nie został znaleziony.

       EPERM  Proces wołający nie ma odpowiednich uprawnień. Tylko  procesy  roota  mogą  włączać
              polityki  SCHED_FIFO  oraz  SCHED_RR.  Proces wołający sched_setscheduler musi mieć
              efektywny uid równy euid lub uid procesu identyfikowanego przez pid  lub  musi  być
              procesem superużytkownika.

       EINVAL Polityka szeregowania zadań policy nie jest żadną ze znanych polityk lub parametr p
              nie ma sensu dla danej polityki.

ZGODNE Z

       POSIX.1b (wcześniej POSIX.4)

USTERKI

       W systemie linux-1.3.81 polityka SCHED_RR nie została jeszcze  dokładnie  przetestowana  i
       może nie zachowywać się dokładnie tak, jak opisano w POSIX.1b.

UWAGA

       Standardowy  Linux  jest  systemem  operacyjnym  do ogólnych zastosowań i wspiera: procesy
       drugoplanowe, aplikacje interakcyjne i aplikacje miękkiego czasu rzeczywisyego (aplikacje,
       które zazwyczaj napotykają na nieprzekraczalne terminy w przebiegach czasowych). Niniejsza
       strona podręcznika jest zorientowana na te rodzaje aplikacji.

       Standardowy  Linux  nie  jest  zaprojektowany  do   obsługi   aplikacji   twardego   czasu
       rzeczywistego,  to  znaczy  aplikacji, w których nieprzekraczalne terminy (często znacznie
       krótsze niż sekunda)  muszą  być  zagwarantowane  lub  system  zawiedzie  katastroficznie.
       Podobnie,  jak  wszystkie  systemy do ogólnych zastosowań, Linux został zaprojektowany aby
       zmaksymalizować wydajność dla przypadków przeciętnych, zamiast wydajności  dla  przypadków
       najgorszych.  Wydajność  Linuksa  w  obsłudze  przerwań  jest  dla  przypadków najgorszych
       znacznie gorsza niż dla przypadków przeciętnych. Jego liczne blokady kernela  (takie,  jak
       dla  SMP)  powodują  długie  maksymalne  czasy  oczekiwania, a wiele z zastosowanych w nim
       technik zwiększających wydajność, zmniejsza średni  czas  poprzez  zwiększenie  czasu  dla
       przypadków  najgorszych.   W  większości sytuacji jest to to, czego się oczekuje, lecz gdy
       rzeczywiście rozwijana  jest  aplikacja  twardego  czasu  rzeczywistego,  należy  rozważyć
       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 TAKŻE

       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, która zawiera jako jednolity
       tekst standardy POSIX.1(1990), POSIX.1b(1993), POSIX.1c(1995) i POSIX.1i(1995).

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia  Manuali  i  może
       nie  być  aktualne.  W  razie  zauważenia  różnic  między  powyższym opisem a rzeczywistym
       zachowaniem opisywanego programu lub  funkcji,  prosimy  o  zapoznanie  się  z  oryginalną
       (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 2 sched_setscheduler

       Prosimy  o  pomoc  w  aktualizacji stron man - więcej informacji można znaleźć pod adresem
       http://sourceforge.net/projects/manpages-pl/.