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
|
.\" 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 paramtres.
.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 la fois la politique d'ordonnancement et ses paramtres pour
le processus identifi par \fIpid\fR.
Si \fIpid\fR vaut zro, la politique du processus en cours sera
fixe.
L'interprtation du paramtre \fIp\fR dpend de la politique
employe. Actuellement il y a trois politiques proposes par Linux :
.IR SCHED_FIFO ,
.IR SCHED_RR ,
et
.IR SCHED_OTHER.
Leurs smantiques respectives sont dcrites ci-dessous.
.B sched_getscheduler
lit la politique d'ordonnancement et ses paramtres pour
le processus identifi par \fIpid\fR.
Si \fIpid\fR vaut zro, la politique du processus en cours sera
rcupre.
.SS Politiques d'ordonnancement
L'ordonnanceur est la partie du noyau qui dcide quel processus
prt va tre excut ensuite. L'ordonnanceur de Linux propose
trois politiques diffrentes, une pour les processus classiques,
et deux pour les applications vocation temps-rel.
Une valeur de priorit statique \fIsched_priority\fR est
assigne chaque processus, et ne peut tre modifie que par
l'intermdiaire d'appels systmes.
Conceptuellement, l'ordonnanceur dispose d'une liste de tous
les processus prts pour chaque valeur possible de \fIsched_priority\fR
(\fIsched_priority\fR est dans l'intervalle 0 99).
Afin de dterminer quel processus doit s'excuter ensuite,
l'ordonnanceur de Linux recherche la liste non-vide de plus haute
priorit statique et prend le processus en tte de cette liste.
La politique d'ordonnancement dtermine pour chaque processus
l'emplacement o il sera insr dans la liste contenant les
processus de mme priorite statique, et comment il se dplacera
dans cette liste.
\fISCHED_OTHER\fR est l'ordonnancement universel temps-partag
par dfaut, utilis par la plupart des processus.
\fISCHED_FIFO\fR et \fISCHED_RR\fR sont prvus pour des
applications temps\-rel qui ncessitent un contrle prcis de
la slection des processus prts.
Les processus ordonnancs avec \fISCHED_OTHER\fR doivent avoir
une priorit statique de 0, ceux ordonnancs par \fISCHED_FIFO\fR ou
\fISCHED_RR\fR peuvent avoir une priorit statique dans l'intervalle
1 99.
Seuls les processus disposant de privilges Super\-User peuvent
obtenir une priorit statique suprieure a 0 afin d'tre
ordonnanc par \fISCHED_FIFO\fR ou \fISCHED_RR\fR.
Les appels systmes \fBsched_get_priority_min\fR et
\fBsched_get_priority_max\fR permettent de dterminer l'intervalle
de priorits valides de manire portable sur les systmes conformes
la norme POSIX.1b.
Tout ordonnancement est premptif : Si un processus avec une priorit
statique plus leve devient prt, le processus en cours est
interrompu et retourne dans sa liste d'attente. La politique
d'ordonnancement dtermine simplement l'ordre utilis dans une
liste de processus prts avec des priorits statiques gales.
.SS SCHED_FIFO: Ordonnancement First In-First out (premier arriv, premier servi)
\fISCHED_FIFO\fR ne peut tre utilis qu'avec des priorits statiques
suprieures 0, ce qui signifie que ds qu'un processus \fISCHED_FIFO\fR
devient prt, un processus normal \fISCHED_OTHER\fR en cours
d'excution sera interrompu.
\fISCHED_FIFO\fR est un ordonnancement simple base de tranches
de temps. Pour les processus ordonnancs par \fISCHED_FIFO\fR
les rgles suivantes sont appliques :
Un processus \fISCHED_FIFO\fR qui a t prempt par un autre
processus de priorit suprieure restera en tte de sa liste
et reprendra son excution ds que tous les processus de
priorits suprieures sont nouveau bloqus.
Quand un processus \fISCHED_FIFO\fR devient prt, il est
insr la fin de sa liste.
Un appel systme
\fBsched_setscheduler\fR ou \fBsched_setparam\fR placera le
processus \fISCHED_FIFO\fR identifi par \fIpid\fR la fin de
sa liste s'il est prt.
Un processus appelant \fBsched_yield\fR sera plac la fin de sa liste.
Aucun autre vnement ne modifiera l'ordre des listes de priorits
statiques gales avec \fISCHED_FIFO\fR.
Un processus \fISCHED_FIFO\fR s'excute jusqu' ce qu'il soit bloqu
par une opration d'entre/sortie, qu'il soit prempt par un processus
de priorit suprieure, ou qu'il appelle \fBsched_yield\fR.
.SS SCHED_RR: Ordonnancement Round Robin
\fISCHED_RR\fR est une amlioration simple de la politique \fISCHED_FIFO\fR.
Tout ce qui est dcrit pour \fISCHED_FIFO\fR s'applique aussi \fISCHED_RR\fR,
sauf que chaque processus ne dispose que d'une tranche temporelle
limite pour son excution.
Si un processus sous politique \fISCHED_RR\fR s'est excut depuis
une dure suprieure ou gale la tranche temporelle (time quantum),
il sera plac la fin de la liste de sa priorit.
Un processus sous \fISCHED_RR\fR qui a t prempt par un
processus de priorit suprieure terminera sa tranche de temps
lorsqu'il reprendra son excution.
la longueur du time quantum peut tre lue avec \fBsched_rr_get_interval\fR.
.SS SCHED_OTHER: Ordonnancement temps-partag par dfaut
La politique \fISCHED_OTHER\fR ne peut tre utilise qu'avec des
priorits statiques 0. C'est la politique standard de l'ordonnanceur
temps partag de Linux, et est conue pour tous les processus ne
rclamant pas de fonctionnalites temps\-rel.
Le processus excuter est choisi dans la liste des processus de
priorits statiques nulles, en utilisant une priorit dynamique
qui ne s'applique que dans cette liste.
La priorite dynamique est base sur la valeur de "gentillesse" du
processus (fixe avec les appels systmes \fBnice\fR ou
\fBsetpriority\fR) et est incrmente chaque time quantum
o le processus est prt mais non slectionn par l'ordonnanceur.
Ceci garantit une progression quitable de tous les processus
\fISCHED_OTHER\fR.
.SS Temps de rponse
Un processus de haute priorit bloqu en attente d'entres/sorties
est affect d'un certain temps de rponse avant d'tre slectionn
nouveau. Le concepteur d'un gestionnaire de priphrique
peut rduire grandement ce temps de rponse en utilisant
un gestionnaire d'interruptions lentes comme dcrit dans
.BR request_irq (9).
.SS Divers
Les processus fils hritent de la politique d'ordonnancement et
des paramtres associs lors d'un
.BR fork .
Le verrouillage de pages en mmoire est gnralement ncessaire
pour les processus temps rel afin d'viter les dlais de
pagination. Ceci peut tre effectu avec
.BR mlock (2)
ou
.BR mlockall (2).
Comme une boucle sans fin non bloquante dans un processus ordonnanc
sous une politique \fISCHED_FIFO\fR ou \fISCHED_RR\fR bloquera
indfiniment tous les processus avec une priorit plus faible,
le dveloppeur d'applications temps\-rel devrait toujours
conserver sur une console un schell ordonnanc avec une priorit
suprieure celle de l'application teste.
Ceci permettra un
.BR kill ((1)
d'urgence des applications testes qui ne se bloquent pas ou
qui ne se terminent pas comme prvu.
Comme les processus sous \fISCHED_FIFO\fR et \fISCHED_RR\fR
peuvent prempter les autres processus normaux pour toujours,
seuls les processus Super\-User ont le droit d'activer ces politiques
sous Linux.
Les systmes POSIX sur lesquels
.B sched_setscheduler
et
.B sched_getscheduler
sont disponibles dfinissent
.I _POSIX_PRIORITY_SCHEDULING
dans <unistd.h>.
.SH "VALEUR RENVOYE"
.BR sched_setscheduler
renvoie 0 s'il russit
.BR sched_getscheduler
renvoie la politique pour le processus s'il russit.
En cas d'chec, \-1 est renvoy et
.I errno
contient le code d'erreur.
.SH ERREURS
.TP 0.8i
.B ESRCH
Le processus numro \fIpid\fR n'existe pas.
.TP
.B EPERM
Le processus appelant n'a pas les privilges ncessaires. 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 gal celui du processus
.IR pid ,
ou tre Super\-User.
.TP
.B EINVAL
La valeur de politique d'ordonnancement \fIpolicy\fR n'existe pas,
ou le paramtre \fIp\fR n'a pas de signification pour
la politique \fIpolicy\fR.
.SH CONFORMIT
POSIX.1b (POSIX.4)
.SH BUGS
Sous Linux 1.3.81,\fISCHED_RR\fR n'a pas ete test totalement, et ne
se comporte peut tre pas exactement comme dcrit 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 rvision 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).
.SH TRADUCTION
Christophe Blaess, 1997.
|