Linux.pl
Opcje wyszukiwania podręcznika man:
Lista stron man zaczynających się od znaku:
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   ALPHA   NUM   OTHER   ALL
SETSCHEDULER(2)         Podręcznik programisty Linuksa         SETSCHEDULER(2)

NAZWA
       sched_setscheduler,  sched_getscheduler  -  ustawienie i pobranie algo-
       rytmu/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
       sched_setscheduler ustawia dla procesu identyfikowanego przez pid poli-
       tykę 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 poli-
       tyki: 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_pri-
       ority, która może być zmieniana tylko poprzez wywołania systemowe. Kon-
       cepcyjnie, 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 priory-
       tecie statycznym staje się gotowy do działania, proces bieżący zostanie
       wywłaszczony i wróci do swojej kolejki oczekiwania. Polityka szeregowa-
       nia 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 szere-
       gowanych 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 prio-
       rytecie 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 jed-
       nakowych 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 pro-
       cesó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 swo-
       jego priorytetu. Proces SCHED_RR, który został wywłaszczony przez  pro-
       ces 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  wyma-
       gających  wykorzystania  mechanizmu  priorytetów  statycznych.  Proces,
       który ma być uruchomiony, jest wybierany z listy dla priorytetu  staty-
       cznego  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 prio-
       rytetem statycznym niż testowana aplikacja. Umożliwi ona awaryjne  ubi-
       cie  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  ustaw-
       iane 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 przy-
       padkó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 maksy-
       malne  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), setprior-
       ity(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  zaw-
       iera  jako  jednolity  tekst  standardy  POSIX.1(1990), POSIX.1b(1993),
       POSIX.1c(1995) i POSIX.1i(1995).

Linux 2.4.18                      2002-06-25                   SETSCHEDULER(2)

Time taken: 0.00011 seconds


Created with the man page lookup class by Andrew Collington, php@amnuts.com