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/.

Linux 2.4.18                                       2002-06-25                                    SETSCHEDULER(2)