File: sched_setscheduler.2

package info (click to toggle)
manpages-fr 0.5-3
  • links: PTS
  • area: main
  • in suites: slink
  • size: 4,236 kB
  • ctags: 4
  • sloc: makefile: 55
file content (292 lines) | stat: -rw-r--r-- 10,602 bytes parent folder | download | duplicates (2)
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
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" 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., 675 Mass Ave, Cambridge, MA 02139,
.\" USA.
.\"
.\" 1996-04-01 Tom Bjorkholm <tomb@mydata.se>
.\"            First version written
.\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
.\"            revision
.\"
.\" Traduction 14/10/1996 par Christophe Blaess (ccb@club-internet.fr)
.\" Mise a Jour 8/04/97
.TH SETSCHEDULER 2 "8 Avril 1997" Linux "Manuel du programmeur Linux"
.SH NOM
sched_setscheduler, sched_getscheduler \- Lire / fixer la politique d'ordonnancement et ses parametres.

.SH SYNOPSIS
.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 DESCRIPTION
.B sched_setscheduler
fixe a la fois la politique d'ordonnancement et ses parametres pour 
le processus identifie par \fIpid\fR. 
Si \fIpid\fR vaut zero, la politique du processus en cours sera
fixee.
L'interpretation du parametre \fIp\fR depend de la politique 
employee. Actuellement il y a trois politiques proposees par Linux :
.IR SCHED_FIFO , 
.IR SCHED_RR ,
et
.IR SCHED_OTHER.
Leurs semantiques respectives sont decrites ci-dessous.

.B sched_getscheduler
lit la politique  d'ordonnancement et ses parametres pour 
le processus identifie par \fIpid\fR. 
Si \fIpid\fR vaut zero, la politique du processus en cours sera
recuperee.


.SS Politiques d'ordonnancement

L'ordonnanceur est la partie du noyau qui decide quel processus
pret va etre execute ensuite. L'ordonnanceur de Linux propose
trois politiques differentes, une pour les processus classiques,
et deux pour les applications a vocation temps-reel.

Une valeur de priorite statique \fIsched_priority\fR est
assignee a chaque processus, et ne peut etre modifiee que par
l'intermediaire d'appels systemes.
Conceptuellement, l'ordonnanceur dispose d'une liste de tous
les processus prets pour chaque valeur possible de \fIsched_priority\fR
(\fIsched_priority\fR est dans l'intervalle 0 a 99).

Afin de determiner quel processus doit s'executer ensuite, 
l'ordonnanceur de Linux recherche la liste non-vide de plus haute
priorite statique et prend le processus en tete de cette liste.
La politique d'ordonnancement determine pour chaque processus
l'emplacement ou il sera insere dans la liste contenant les
processus de meme priorite statique, et comment il se deplacera
dans cette liste.


\fISCHED_OTHER\fR est l'ordonnancement universel temps-partage
par defaut, utilise par la plupart des processus.
\fISCHED_FIFO\fR et \fISCHED_RR\fR sont prevus pour des 
applications temps\-reel qui necessitent un controle precis de
la selection des processus prets.

Les processus ordonnances avec \fISCHED_OTHER\fR doivent avoir
une priorite statique de 0, ceux ordonnances par \fISCHED_FIFO\fR ou
\fISCHED_RR\fR peuvent avoir une priorite statique dans l'intervalle
1 a 99.
Seuls les processus disposant de privileges Super\-User peuvent
obtenir une priorite statique superieure a 0 afin d'etre
ordonnance par \fISCHED_FIFO\fR ou \fISCHED_RR\fR. 

les appels systemes \fBsched_get_priority_min\fR et
\fBsched_get_priority_max\fR permettent de determiner l'intervalle
de priorites valides de maniere portable sur les systemes conformes
a la norme POSIX.1b.

Tout ordonnancement est preemptif : Si un processus avec une priorite
statique plus elevee devient pret, le processus en cours est
interrompu et retourne dans sa liste d'attente. La politique 
d'ordonnancement determine simplement l'ordre utilise dans une
liste de processus prets avec des priorites statiques egales.

.SS SCHED_FIFO: Ordonnancement First In-First out (premier arrive, premier servi)

\fISCHED_FIFO\fR ne peut etre utilise qu'avec des priorites statiques 
superieures a 0, ce qui signifie que des qu'un processus \fISCHED_FIFO\fR
devient pret, un processus normal \fISCHED_OTHER\fR en cours
d'execution sera interrompu.
\fISCHED_FIFO\fR est un ordonnancement simple a base de tranches
de temps. Pour les processus ordonnances par \fISCHED_FIFO\fR 
les regles suivantes sont appliquees :

Un processus \fISCHED_FIFO\fR qui a ete preempte par un autre
processus de priorite superieure restera en tete de sa liste
et reprendra son execution des que tous les processus de
priorites superieures sont a nouveau bloques.

Quand un processus \fISCHED_FIFO\fR devient pret, il est
insere a la fin de sa liste. 

Un appel systeme
\fBsched_setscheduler\fR ou \fBsched_setparam\fR placera le
processus \fISCHED_FIFO\fR identifie par \fIpid\fR a la fin de
sa liste s'il est pret.

Un processus appelant \fBsched_yield\fR sera place a la fin de sa liste.

Aucun autre evenement ne modifiera l'ordre des listes de priorites
statiques egales avec \fISCHED_FIFO\fR.

Un processus \fISCHED_FIFO\fR s'execute jusqu'a ce qu'il soit bloque
par une operation d'entree/sortie, qu'il soit preempte par un processus
de priorite superieure, ou qu'il appelle \fBsched_yield\fR.


.SS SCHED_RR: Ordonnancement Round Robin 

\fISCHED_RR\fR est une amelioration simple de la politique \fISCHED_FIFO\fR. 
Tout ce qui est decrit pour \fISCHED_FIFO\fR s'applique aussi a \fISCHED_RR\fR,
sauf que chaque processus ne dispose que d'une tranche temporelle
limitee pour son execution.
Si un processus sous politique \fISCHED_RR\fR s'est execute depuis
une duree superieure ou egale a la tranche temporelle (time quantum),
il sera place a la fin de la liste de sa priorite.

Un processus sous \fISCHED_RR\fR qui a ete preempte par un
processus de priorite superieure terminera sa tranche de temps
lorsqu'il reprendra son execution.
la longueur du time quantum peut etre lue avec \fBsched_rr_get_interval\fR.

.SS SCHED_OTHER: Ordonnancement temps-partage par defaut

La politique \fISCHED_OTHER\fR ne peut etre utilisee qu'avec des
priorites statiques a 0. C'est la politique standard de l'ordonnanceur
temps partage de Linux, et est concue pour tous les processus ne
reclamant pas de fonctionnalites temps\-reel.

Le processus a executer est choisi dans la liste des processus de
priorites statiques nulles, en utilisant une priorite dynamique
qui ne s'applique que dans cette liste.

La priorite dynamique est basee sur la valeur de "gentillesse" du
processus (fixee avec les appels systemes \fBnice\fR ou 
\fBsetpriority\fR) et est incrementee a chaque time quantum 
ou le processus est pret mais non selectionne par l'ordonnanceur.
Ceci garantit une progression equitable de tous les processus
\fISCHED_OTHER\fR.


.SS Temps de reponse

Un processus de haute priorite bloque en attente d'entrees/sorties
est affecte d'un certain temps de reponse avant d'etre selectionne
a nouveau. Le concepteur d'un gestionnaire de peripherique
peut reduire grandement ce temps de reponse en utilisant
un gestionnaire d'interruptions lentes comme decrit dans
.BR request_irq (9).

.SS Divers

Les processus fils heritent de la politique d'ordonnancement et
des parametres associes lors d'un
.BR fork .

Le verrouillage de pages en memoire est generalement necessaire
pour les processus temps reel afin d'eviter les delais de
pagination. Ceci peut etre effectue avec
.BR mlock (2)
ou
.BR mlockall (2).


Comme une boucle sans fin non bloquante dans un processus ordonnance
sous une politique \fISCHED_FIFO\fR ou \fISCHED_RR\fR bloquera
indefiniment tous les processus avec une priorite plus faible,
le developpeur d'applications temps\-reel devrait toujours 
conserver sur une console un schell ordonnance avec une priorite 
superieure a celle de l'application testee.

Ceci permettra un 
.BR kill ((1)
d'urgence des applications testees qui ne se bloquent pas ou
qui ne se terminent pas comme prevu.
Comme les processus sous \fISCHED_FIFO\fR et \fISCHED_RR\fR 
peuvent preempter les autres processus normaux pour toujours,
seuls les processus Super\-User ont le droit d'activer ces politiques
sous Linux.

Les systemes POSIX sur lesquels
.B sched_setscheduler
et
.B sched_getscheduler
sont disponibles definissent
.I _POSIX_PRIORITY_SCHEDULING
dans <unistd.h>.

.SH "VALEUR RENVOYEE"
.BR sched_setscheduler
renvoie 0 s'il reussi
.BR sched_getscheduler
renvoie la politique pour le processus s'il reussit.

En cas d'echec, \-1 est renvoye et
.I errno
contient le code d'erreur.
.SH ERREURS
.TP 0.8i
.B ESRCH
Le processus numero \fIpid\fR n'existe pas.
.TP
.B EPERM
Le processus appelant n'a pas les privileges necessaires. Seul
les processus Super\-User peuvent activer les politiques 
\fISCHED_FIFO\fR et \fISCHED_RR\fR.
Le processus appelant
.BR sched_setscheduler
doit avoir un UID effectif egal a celui du processus
.IR pid ,
ou etre Super\-User.
.TP
.B EINVAL
La valeur de politique d'ordonnancement \fIpolicy\fR n'existe pas,
ou le parametre \fIp\fR n'a pas de signification pour
la politique \fIpolicy\fR.
.SH CONFORMITE
POSIX.1b (POSIX.4)
.SH BUGS
Sous Linux 1.3.81,\fISCHED_RR\fR n'a pas ete teste totalement, et ne
se comporte peut etre pas exactement comme decrit ci\-dessus.
.SH "VOIR AUSSI"
.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 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
by Bill O. Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0
.br
.I IEEE Std 1003.1b-1993
(POSIX.1b standard)
.br
.I ISO/IEC 9945-1:1996
- C'est une nouvelle revision 1996 de POSIX.1 qui regroupe en
un seul standard les normes POSIX.1(1990), POSIX.1b(1993), POSIX.1c(1995), et
POSIX.1i(1995).