File: sched_setscheduler.2

package info (click to toggle)
manpages-pl 1%3A0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 20,896 kB
  • ctags: 7
  • sloc: sh: 112; makefile: 59; perl: 32
file content (299 lines) | stat: -rw-r--r-- 14,278 bytes parent folder | download | duplicates (3)
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/.