1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
|
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" 1999 PTM Przemek Borys
.\" Last update: A. Krzysztofowicz <ankry@mif.pg.gda.pl>, Apr 2003,
.\" manpages 1.54
.\"
.\" Copyright (C) Tom Bjorkholm & Markus Kuhn, 1996
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
.\" USA.
.\"
.\" 1996-04-01 Tom Bjorkholm <tomb@mydata.se>
.\" First version written
.\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
.\" revision
.\" 1999-08-18 David A. Wheeler <dwheeler@ida.org> added Note.
.\" Modified, 25 Jun 2002, Michael Kerrisk <mtk16.ext.canterbury.ac.nz>
.\" Corrected description of queue placement by sched_setparam() and
.\" sched_setscheduler()
.\" A couple of grammar clean-ups
.\"
.TH SETSCHEDULER 2 2002-06-25 "Linux 2.4.18" "Podręcznik programisty Linuksa"
.SH NAZWA
sched_setscheduler, sched_getscheduler \-
ustawienie i pobranie algorytmu/parametrów szeregowania zadań
.SH SKŁADNIA
.B #include <sched.h>
.sp
\fBint sched_setscheduler(pid_t \fIpid\fB, int \fIpolicy\fB,
const struct sched_param *\fIp\fB);
.sp
\fBint sched_getscheduler(pid_t \fIpid\fB);
.sp
.nf
.ta 4n
\fBstruct sched_param {
...
int \fIsched_priority\fB;
...
};
.ta
.fi
.SH OPIS
\fI Uwaga! To tłumaczenie może być nieaktualne!\fP
.PP
.B sched_setscheduler
ustawia dla procesu identyfikowanego przez \fIpid\fP politykę szeregowania
zadań oraz związane z nią parametry. Jeśli \fIpid\fP jest równe zeru, to
skonfigurowane zostanie szeregowanie dla procesu wołającego tę funkcję.
Interpretacja parametru \fIp\fP zależy od wybranej polityki. Obecnie, pod
Linuksem obsługiwane są następujące trzy polityki:
.IR SCHED_FIFO ,
.I SCHED_RR
i
.IR SCHED_OTHER ;
ich semantyki są opisane poniżej.
.B sched_getscheduler
zapytuje o bieżącą politykę szeregowania zadań, która dotyczy procesu
określonego przez \fIpid\fP. Jeśli \fIpid\fP jest równe zeru, to pobierana
jest polityką dotycząca procesu wywołującego tę funkcję.
.SS 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, \fIsched_priority\fP, 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 \fIsched_priority\fP, 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ł.
\fISCHED_OTHER\fP jest domyślną, uniwersalną polityką dzielenia czasu,
używaną przez większość procesów. \fISCHED_FIFO\fP i \fISCHED_RR\fP 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 \fISCHED_OTHER\fP muszą mieć przypisany priorytet statyczny równy
0, a procesy korzystające z \fISCHED_FIFO\fP lub \fISCHED_RR\fP 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 \fISCHED_FIFO\fP
i \fISCHED_RR\fP. Wywołania systemowe \fBsched_get_priority_min\fP
i \fBsched_get_priority_max\fP 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.
.SS SCHED_FIFO: Szeregowanie typu "pierwszy na wejściu-pierwszy na wyjściu"
(First In-First Out), \fISCHED_FIFO\fP, może być używane tylko ze statycznymi
priorytetami wyższymi niż 0 oznaczającymi, że gdy proces \fISCHED_FIFO\fP
stanie się gotowy do działania, to zawsze i natychmiast wywłaszczy wszystkie
aktualnie działające procesy \fISCHED_OTHER\fP. \fISCHED_FIFO\fP jest prostym
algorytmem szeregowania bez kwantowania czasu. Procesów szeregowanych według
polityki \fISCHED_FIFO\fP dotyczą następujące reguły:
Proces \fISCHED_FIFO\fP, 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 \fISCHED_FIFO\fP staje się gotowy do
działania, jest on wstawiany na koniec listy dla swojego priorytetu. Wywołanie
\fBsched_setscheduler\fP lub \fBsched_setparam\fP wstawia proces
\fISCHED_FIFO\fP (lub \fISCHED_RR\fP), określony przez \fIpid\fP 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.)
.\" W 2.2.x i 2.4.x proces jest umieszczany na czele kolejki
.\" W 2.0.x, dzieją się Właściwe Rzeczy: proces idzie na jej koniec -- MTK
Proces wywołujący \fBsched_yield\fP zostanie wstawiony na
koniec listy. Żadne inne zdarzenia nie mogą przesunąć procesu, szeregowanego
wedłu polityki \fISCHED_FIFO\fP, a znajdującego się na liście procesów
oczekujących o jednakowych statycznych priorytetach. Proces \fISCHED_FIFO\fP
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
\fBsched_yield\fP.
.SS SCHED_RR: Szeregowanie typu cyklicznego (Round Robin),
\fISCHED_RR\fP, jest prostym rozszerzeniem \fISCHED_FIFO\fP. Wszystko, co
powiedziano o \fISCHED_FIFO\fP, dotyczy także \fISCHED_RR\fP, 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 \fISCHED_RR\fP działa przez czas dłuższy lub
równy temu okresowi, zostanie on wstawiony na koniec listy dla swojego
priorytetu. Proces \fISCHED_RR\fP, 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 \fBsched_rr_get_interval\fP.
.\" W Linuksie 2.4 na długość of the przedziału RR ma wpływ wartość nice
.\" procesu -- MTK
.SS SCHED_OTHER: Domyślne szeregowanie linuksowe,
\fISCHED_OTHER\fP, może być używane tylko ze statycznym priorytetem równym 0.
\fISCHED_OTHER\fP 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 \fBnice\fP i \fBsetpriority\fP) 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 \fISCHED_OTHER\fP.
.SS 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".
.\" , opisanej w
.\" .BR request_irq (9).
.SS Różne
Procesy potomne dziedziczą poprzez
.BR 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ą
.BR mlock (2)
lub
.BR mlockall (2).
Ponieważ nieblokująca nieskończona pętla w procesie, szeregowanym wegług
polityki \fISCHED_FIFO\fP lub \fISCHED_RR\fP 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 \fISCHED_FIFO\fP i \fISCHED_RR\fP 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ą
.B sched_setscheduler
i
.BR sched_getscheduler ,
definiują w <unistd.h>
.IR _POSIX_PRIORITY_SCHEDULING .
.SH "WARTOŚĆ ZWRACANA"
Po pomyślnym zakończeniu,
.BR sched_setscheduler
zwraca zero.
Po pomyślnym zakończeniu,
.BR sched_getscheduler
zwraca politykę dla procesu (nieujemna liczba całkowita).
Po błędzie, zwracane jest \-1 i odpowiednio ustawiane
.IR errno .
.SH BŁĘDY
.TP
.B ESRCH
Proces o identyfikatorze \fIpid\fP nie został znaleziony.
.TP
.B EPERM
Proces wołający nie ma odpowiednich uprawnień. Tylko procesy roota mogą
włączać polityki \fISCHED_FIFO\fP oraz \fISCHED_RR\fP. Proces wołający
.BR sched_setscheduler
musi mieć efektywny uid równy euid lub uid procesu identyfikowanego przez
.I pid
lub musi być procesem superużytkownika.
.TP
.B EINVAL
Polityka szeregowania zadań \fIpolicy\fP nie jest żadną ze znanych polityk
lub parametr \fIp\fP nie ma sensu dla danej polityki.
.SH "ZGODNE Z"
POSIX.1b (wcześniej POSIX.4)
.SH USTERKI
W systemie linux-1.3.81 polityka \fISCHED_RR\fP nie została jeszcze dokładnie
przetestowana i może nie zachowywać się dokładnie tak, jak opisano w POSIX.1b.
.SH 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.
.PP
Standardowy Linux
.I 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.
.SH "ZOBACZ TAKŻE"
.BR sched_setaffinity (2),
.BR sched_getaffinity (2),
.BR sched_setparam (2),
.BR sched_getparam (2),
.BR sched_yield (2),
.BR sched_get_priority_max (2),
.BR sched_get_priority_min (2),
.BR sched_rr_get_interval (2),
.BR nice (2),
.BR setpriority (2),
.BR getpriority (2),
.BR mlockall (2),
.BR munlockall (2),
.BR mlock (2),
.BR munlock (2)
.PP
.I Programming for the real world \- POSIX.4
Billa O. Gallmeistera, O'Reilly & Associates, Inc., ISBN 1-56592-074-0
.br
.I IEEE Std 1003.1b-1993
(standard POSIX.1b)
.br
.I 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).
.SH "INFORMACJE O TŁUMACZENIU"
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i
\fImoże nie być aktualne\fR. 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:
.IP
man \-\-locale=C 2 sched_setscheduler
.PP
Prosimy o pomoc w aktualizacji stron man \- więcej informacji można znaleźć pod
adresem http://sourceforge.net/projects/manpages\-pl/.
|