File: sched_setscheduler.2

package info (click to toggle)
manpages-es 1.55-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 7,472 kB
  • ctags: 6
  • sloc: sh: 1,349; makefile: 63
file content (309 lines) | stat: -rw-r--r-- 13,562 bytes parent folder | download | duplicates (4)
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
300
301
302
303
304
305
306
307
308
309
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (C) Tom Bjorkholm, Markus Kuhn & David A. Wheeler 1996-1999
.\"
.\" 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
.\"
.\" Translated into Spanish Mon Feb 2 1998 by Gerardo Aburruzaga
.\" García <gerardo.aburruzaga@uca.es>
.\" Translation revised Mon Jan 17 2000 by Juan Piernas <piernas@ditec.um.es>
.\" Revisado por Miguel Pérez Ibars <mpi79470@alu.um.es> el 29-septiembre-2004
.\"
.TH SETSCHEDULER 2 "25 junio 2002" "Linux 2.4.18" "Manual del Programador de Linux"
.SH NOMBRE
sched_setscheduler, sched_getscheduler \-
establecen y obtienen los algoritmos/parámetros de planificación
.SH SINOPSIS
.B #include <sched.h>
.sp
.BI "int sched_setscheduler(pid_t " pid ", int " policy ,
.BI "const struct sched_param *" p );
.sp
.BI "int sched_getscheduler(pid_t " pid );
.sp
.nf
.ta 4n
\fBstruct sched_param {
	...
	int \fIsched_priority\fB;
	...
};
.ta
.fi
.SH DESCRIPCIÓN
.B sched_setscheduler
establece tanto la política de planificación como los parámetros
asociados para el proceso identificado por \fIpid\fP. Si \fIpid\fP es
igual a cero, se establece el planificador del proceso que hace la
llamada. La interpretación del parámetro \fIp\fP depende de la
política seleccionada. Actualmente se admiten en Linux las tres
siguientes políticas:
.IR SCHED_FIFO , 
.IR SCHED_RR ,
y
.IR SCHED_OTHER ;
sus respectivas semánticas se describen abajo.

.B sched_getscheduler
pregunta por la política de planificación aplicada actualmente al
proceso identificado por \fIpid\fP. Si \fIpid\fP es igual a cero, se
obtiene la política del proceso que hace la llamada.


.SS Políticas de Planificación
El planificador es la parte del núcleo que decide qué proceso
ejecutable será ejecutado por la CPU a continuación. El planificador
de Linux ofrece tres políticas de planificación diferentes, una para
los procesos normales y dos para aplicaciones en tiempo real. Se
asigna a cada proceso un valor de prioridad estática
\fIsched_priority\fP y este valor sólo puede cambiarse a través de
llamadas al sistema. Conceptualmente, el planificador mantiene una
lista de procesos ejecutables para cada posible valor
\fIsched_priority\fP, y
\fIsched_priority\fP puede tener un valor en el rango de 0 a 99. Para poder
determinar qué proceso se debe ejecutar a continuación, el
planificador de Linux busca en la lista no vacía con la prioridad
estática más alta y toma el proceso a la cabeza de dicha lista. La
política de planificación determina para cada proceso, dónde se
insertará en la lista de procesos con igual prioridad estática y cómo
se moverá dentro de esta lista.

\fISCHED_OTHER\fP es el planificador de tiempo compartido universal
predeterminado empleado por la mayoría de los procesos;
\fISCHED_FIFO\fP y \fISCHED_RR\fP han sido pensados para aplicaciones
especiales donde el tiempo es crítico y necesitan un control preciso
sobre la forma en la que se seleccionan para ejecución los procesos
ejecutables. A los procesos planificados con \fISCHED_OTHER\fP se les
debe asignar la prioridad estática 0; los procesos planificados bajo
\fISCHED_FIFO\fP o \fISCHED_RR\fP pueden tener una prioridad estática
en el rango de 1 a 99. Solamente los procesos con privilegio de
súper-usuario pueden obtener una prioridad estática mayor que 0 y por
tanto pueden ser planificados bajo \fISCHED_FIFO\fP o
\fISCHED_RR\fP. Las llamadas al sistema \fBsched_get_priority_min\fP y
\fBsched_get_priority_max\fP pueden emplearse para encontrar el rango
válido de prioridad para una política de planificación de una manera
transportable en todos los sistemas que cumplan POSIX.1b.

Toda la planificación es apropiativa: si un proceso con una prioridad
estática más alta está listo para ejecutarse, el proceso actual será
apropiado y devuelto a su lista de espera. La política de
planificación solamente determina la clasificación en la lista de
procesos ejecutables con igual prioridad estática.

.SS SCHED_FIFO: Planificación FIFO (1º en entrar, 1º en salir).
\fISCHED_FIFO\fP sólo puede emplearse con prioridades estáticas
mayores que 0, lo que significa que cuando un proceso \fISCHED_FIFO\fP
se convierte en ejecutable, siempre prevalecerá inmediatamente sobre
cualquier otro proceso normal \fISCHED_OTHER\fP ejecutándose.
\fISCHED_FIFO\fP es un simple algoritmo de planificación sin rodajas
de tiempo. Para procesos planificados bajo la política
\fISCHED_FIFO\fP, se aplican las siguientes reglas:
Un proceso \fISCHED_FIFO\fP que ha sido apropiado por otro proceso de
mayor prioridad permanecerá en la cabeza de la lista para su prioridad
y reanudará su ejecución tan pronto como todos los procesos de
prioridad más alta se bloqueen de nuevo. Cuando un proceso
\fISCHED_FIFO\fP llegue a ser ejecutable, se insertará al final de la
lista para su prioridad. Una llamada a
\fBsched_setscheduler\fP o a \fBsched_setparam\fP pondrá el proceso
\fISCHED_FIFO\fP (o \fISCHED_RR\fP) identificado por \fIpid\fP al comienzo
de la lista si era ejecutable. 
Como consecuencia, puede apropiarse del proceso actualmente en curso si
tiene la misma prioridad.
(POSIX 1003.1 especifica que el proceso debería ir al final 
de la lista.)
.\" In 2.2.x and 2.4.x, the process is placed at the front of the queue
.\" In 2.0.x, the Right Thing happened: the process went to the back -- MTK
Un proceso que llame a \fBsched_yield\fP será colocado
al final de la lista. Ningún otro suceso moverá un proceso planificado
bajo la política \fISCHED_FIFO\fP en la lista de espera de procesos
ejecutables con igual prioridad estática. Un proceso \fISCHED_FIFO\fP
se ejecuta hasta que es bloqueado por una petición de E/S, hasta que sea
apropiado por un proceso de más alta prioridad, o hasta que llame a
\fBsched_yield\fP.

.SS SCHED_RR: Planificación circular (Round Robin).
\fISCHED_RR\fP es una mejora simple de \fISCHED_FIFO\fP. Todo lo
descrito arriba para \fISCHED_FIFO\fP se aplica también a
\fISCHED_RR\fP, excepto que a cada proceso sólo se le permite
ejecutarse durante un cuanto de tiempo máximo.
Si un proceso \fISCHED_RR\fP ha estado ejecutándose durante un periodo
de tiempo igual o mayor que el cuanto de tiempo, será puesto al final
de la lista para su prioridad. Un proceso \fISCHED_RR\fP que ha sido
apropiado por un proceso de más alta prioridad y subsecuentemente reanuda
su ejecución como un proceso en ejecución, completará la porción no
expirada de su cuanto de tiempo de asignación en rueda. La cantidad
del cuanto de tiempo puede ser obtenida con \fBsched_rr_get_interval\fP.
.\" On Linux 2.4, the length of the RR interval is influenced
.\" by the process nice value -- MTK

.SS SCHED_OTHER: Planificación predeterminada de Linux en t.c.
\fISCHED_OTHER\fP solamente puede emplearse con la prioridad estática 0.
\fISCHED_OTHER\fP es el planificador estándar de Linux en tiempo
compartido, pensado para todos los procesos que no requieren
mecanismos especiales de prioridad estática en tiempo real. 
El proceso a ejecutarse se escoge de la lista de prioridad estática 0
basado en una prioridad dinámica que se determina solamente dentro de
esta lista. La prioridad dinámica se basa en el nivel de `nice'
(puesto por la llamada \fBnice\fP o \fBsetpriority\fP) e incrementado 
para cada cuanto de tiempo para el que el proceso está listo para la ejecución,
pero denegado para ella por el planificador. Esto asegura un buen
progreso entre todos los procesos \fISCHED_OTHER\fP.

.SS Tiempo de respuesta

Un proceso de alta prioridad bloqueado esperando E/S tiene un cierto
tiempo de respuesta antes de que sea planificado otra vez. El escritor
del controlador del dispositivo puede reducir grandemente este tiempo
de respuesta empleando un manejador de interrupción de "interrupción
lenta".
.\"  como se describe en
.\" .BR request_irq (9).

.SS Miscelánea
Los procesos hijos heredan el algoritmo y parámetros de planificación
a través de un
.BR fork .

Usualmente se necesita un bloqueo de memoria para que los procesos en
tiempo real puedan evitar demoras en la paginación; esto puede hacerse
con
.B mlock 
o 
.BR mlockall .

Como un bucle infinito no bloqueante en un proceso planificado bajo
\fISCHED_FIFO\fP o \fISCHED_RR\fP, bloqueará para siempre todos los procesos con
baja prioridad, un desarrollador de software debería siempre mantener
disponible en la consola un shell planificado bajo una prioridad
estática mayor que la de la aplicación en pruebas. Esto permitirá un
`kill' de emergencia en aplicaciones de tiempo real en pruebas que no
bloqueen o terminen como se espere. Como los procesos 
\fISCHED_FIFO\fP y \fISCHED_RR\fP pueden apropiar otros procesos para
siempre, sólo los procesos de root tienen permiso para activar estas
políticas bajo Linux.

Los sistemas POSIX en los cuales se dispone de
.B sched_setscheduler
y
.B sched_getscheduler
definen 
.I _POSIX_PRIORITY_SCHEDULING
en <unistd.h>.

.SH VALOR DEVUELTO
En caso de éxito,
.BR sched_setscheduler
devuelve cero.  
En caso de éxito,
.BR sched_getscheduler
devuelve la política para el proceso (un entero no negativo).
En caso de error, se devuelve \-1 y se pone en
.I errno
un valor apropiado.
.SH ERRORES
.TP
.B ESRCH
No se ha podido encontrar el proceso cuya ID es \fIpid\fP.
.TP
.B EPERM
El proceso que hace la llamada no tiene los privilegios
apropiados. Solamente los procesos de root tienen permiso para activar
las políticas \fISCHED_FIFO\fP y \fISCHED_RR\fP. El proceso que llame a
.BR sched_setscheduler
necesita un UID efectivo igual al EUID o al UID del proceso
identificado por
.IR pid ,
o debe ser un proceso del súper-usuario.
.TP
.B EINVAL
La \fIpolitica\fP de planificación no es una de las políticas
reconocidas, o el parámetro \fIp\fP no tiene sentido para la
\fIpolitica\fP. 
.SH "CONFORME A"
POSIX.1b (antiguamente POSIX.4)
.SH FALLOS
En Linux-1.3.81, \fISCHED_RR\fP no había sido aún probada
cuidadosamente y pudiera ser que no se comportara exactamente como se
describe o requiere por POSIX.1b.
.SH NOTA
El Linux estándar es un sistema operativo de propósito general que puede
manejar procesos en segundo plano, aplicaciones interactivas y aplicaciones
flexibles de tiempo real (aplicaciones que necesitan de forma usual cumplir
límites temporales). Esta página de manual está dirigida a esos tipos de
aplicaciones.
.PP
El Linux estándar
.I no
está diseñado para soportar aplicaciones estrictas de tiempo real, es decir,
aplicaciones en las se deben garantizar los plazos (a menudo mucho más breves
que un segundo) o el sistema fracasará catastróficamente.
Como todos los sistemas operativos de propósito general, Linux está diseñado
para maximizar el rendimiento del caso medio en lugar del rendimiento del
peor caso.
El rendimiento del peor caso de Linux para el manejo de interrupciones es
mucho más pobre que su caso medio, sus distintos cerrojos del núcleo (como
los de SMP) producen tiempos de espera de máxima duracción y muchas de sus
técnicas para mejorar el rendimiento decrementan el tiempo medio
incrementando el tiempo del peor caso.
Para la mayoría de situaciones, eso es lo que usted quiere, pero si
realmente está desarrollando una aplicación estricta de tiempo real
considere el usar extensiones estrictas de tiempo real para Linux como
RTLinux (http://www.rtlinux.org) o use un sistema operativo diferentes
diseñado específicamente para aplicaciones estrictas de tiempo real.
.SH "VÉASE TAMBIÉN"
.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
por Bill O. Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0
.br
.I IEEE Std 1003.1b-1993
(estándar POSIX.1b)
.br
.I ISO/IEC 9945-1:1996
\- Ésta es la nueva revisión de 1996 de POSIX.1, que contiene en un
solo estándar POSIX.1(1990), POSIX.1b(1993), POSIX.1c(1995), y
POSIX.1i(1995).

\"  LocalWords:  POSIX apropiativa