Provided by:
manpages-es_1.55-10_all 
NOMBRE
sched_setscheduler, sched_getscheduler - establecen y obtienen los
algoritmos/parametros de planificacion
SINOPSIS
#include <sched.h>
int sched_setscheduler(pid_t pid, int policy, const struct sched_param
*p);
int sched_getscheduler(pid_t pid);
struct sched_param {
...
int sched_priority;
...
};
DESCRIPCI'ON
sched_setscheduler establece tanto la politica de planificacion como
los parametros asociados para el proceso identificado por pid. Si pid
es igual a cero, se establece el planificador del proceso que hace la
llamada. La interpretacion del parametro p depende de la politica
seleccionada. Actualmente se admiten en Linux las tres siguientes
politicas: SCHED_FIFO, SCHED_RR, y SCHED_OTHER; sus respectivas
semanticas se describen abajo.
sched_getscheduler pregunta por la politica de planificacion aplicada
actualmente al proceso identificado por pid. Si pid es igual a cero, se
obtiene la politica del proceso que hace la llamada.
Pol'iticas de Planificaci'on
El planificador es la parte del nucleo que decide que proceso
ejecutable sera ejecutado por la CPU a continuacion. El planificador de
Linux ofrece tres politicas de planificacion diferentes, una para los
procesos normales y dos para aplicaciones en tiempo real. Se asigna a
cada proceso un valor de prioridad estatica sched_priority y este valor
solo puede cambiarse a traves de llamadas al sistema. Conceptualmente,
el planificador mantiene una lista de procesos ejecutables para cada
posible valor sched_priority, y sched_priority puede tener un valor en
el rango de 0 a 99. Para poder determinar que proceso se debe ejecutar
a continuacion, el planificador de Linux busca en la lista no vacia con
la prioridad estatica mas alta y toma el proceso a la cabeza de dicha
lista. La politica de planificacion determina para cada proceso, donde
se insertara en la lista de procesos con igual prioridad estatica y
como se movera dentro de esta lista.
SCHED_OTHER es el planificador de tiempo compartido universal
predeterminado empleado por la mayoria de los procesos; SCHED_FIFO y
SCHED_RR han sido pensados para aplicaciones especiales donde el tiempo
es critico y necesitan un control preciso sobre la forma en la que se
seleccionan para ejecucion los procesos ejecutables. A los procesos
planificados con SCHED_OTHER se les debe asignar la prioridad estatica
0; los procesos planificados bajo SCHED_FIFO o SCHED_RR pueden tener
una prioridad estatica en el rango de 1 a 99. Solamente los procesos
con privilegio de super-usuario pueden obtener una prioridad estatica
mayor que 0 y por tanto pueden ser planificados bajo SCHED_FIFO o
SCHED_RR. Las llamadas al sistema sched_get_priority_min y
sched_get_priority_max pueden emplearse para encontrar el rango valido
de prioridad para una politica de planificacion de una manera
transportable en todos los sistemas que cumplan POSIX.1b.
Toda la planificacion es apropiativa: si un proceso con una prioridad
estatica mas alta esta listo para ejecutarse, el proceso actual sera
apropiado y devuelto a su lista de espera. La politica de planificacion
solamente determina la clasificacion en la lista de procesos
ejecutables con igual prioridad estatica.
SCHED_FIFO: Planificaci'on FIFO (1_o en entrar, 1_o en salir).
SCHED_FIFO solo puede emplearse con prioridades estaticas mayores que
0, lo que significa que cuando un proceso SCHED_FIFO se convierte en
ejecutable, siempre prevalecera inmediatamente sobre cualquier otro
proceso normal SCHED_OTHER ejecutandose. SCHED_FIFO es un simple
algoritmo de planificacion sin rodajas de tiempo. Para procesos
planificados bajo la politica SCHED_FIFO, se aplican las siguientes
reglas: Un proceso SCHED_FIFO que ha sido apropiado por otro proceso de
mayor prioridad permanecera en la cabeza de la lista para su prioridad
y reanudara su ejecucion tan pronto como todos los procesos de
prioridad mas alta se bloqueen de nuevo. Cuando un proceso SCHED_FIFO
llegue a ser ejecutable, se insertara al final de la lista para su
prioridad. Una llamada a sched_setscheduler o a sched_setparam pondra
el proceso SCHED_FIFO (o SCHED_RR) identificado por pid 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 deberia ir al final de la lista.) Un
proceso que llame a sched_yield sera colocado al final de la lista.
Ningun otro suceso movera un proceso planificado bajo la politica
SCHED_FIFO en la lista de espera de procesos ejecutables con igual
prioridad estatica. Un proceso SCHED_FIFO se ejecuta hasta que es
bloqueado por una peticion de E/S, hasta que sea apropiado por un
proceso de mas alta prioridad, o hasta que llame a sched_yield.
SCHED_RR: Planificaci'on circular (Round Robin).
SCHED_RR es una mejora simple de SCHED_FIFO. Todo lo descrito arriba
para SCHED_FIFO se aplica tambien a SCHED_RR, excepto que a cada
proceso solo se le permite ejecutarse durante un cuanto de tiempo
maximo. Si un proceso SCHED_RR ha estado ejecutandose durante un
periodo de tiempo igual o mayor que el cuanto de tiempo, sera puesto al
final de la lista para su prioridad. Un proceso SCHED_RR que ha sido
apropiado por un proceso de mas alta prioridad y subsecuentemente
reanuda su ejecucion como un proceso en ejecucion, completara la
porcion no expirada de su cuanto de tiempo de asignacion en rueda. La
cantidad del cuanto de tiempo puede ser obtenida con
sched_rr_get_interval.
SCHED_OTHER: Planificaci'on predeterminada de Linux en t.c.
SCHED_OTHER solamente puede emplearse con la prioridad estatica 0.
SCHED_OTHER es el planificador estandar de Linux en tiempo compartido,
pensado para todos los procesos que no requieren mecanismos especiales
de prioridad estatica en tiempo real. El proceso a ejecutarse se
escoge de la lista de prioridad estatica 0 basado en una prioridad
dinamica que se determina solamente dentro de esta lista. La prioridad
dinamica se basa en el nivel de `nice' (puesto por la llamada nice o
setpriority) e incrementado para cada cuanto de tiempo para el que el
proceso esta listo para la ejecucion, pero denegado para ella por el
planificador. Esto asegura un buen progreso entre todos los procesos
SCHED_OTHER.
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 interrupcion de "interrupcion
lenta".
Miscel'anea
Los procesos hijos heredan el algoritmo y parametros de planificacion a
traves de un fork.
Usualmente se necesita un bloqueo de memoria para que los procesos en
tiempo real puedan evitar demoras en la paginacion; esto puede hacerse
con mlock o mlockall.
Como un bucle infinito no bloqueante en un proceso planificado bajo
SCHED_FIFO o SCHED_RR, bloqueara para siempre todos los procesos con
baja prioridad, un desarrollador de software deberia siempre mantener
disponible en la consola un shell planificado bajo una prioridad
estatica mayor que la de la aplicacion en pruebas. Esto permitira un
`kill' de emergencia en aplicaciones de tiempo real en pruebas que no
bloqueen o terminen como se espere. Como los procesos SCHED_FIFO y
SCHED_RR pueden apropiar otros procesos para siempre, solo los procesos
de root tienen permiso para activar estas politicas bajo Linux.
Los sistemas POSIX en los cuales se dispone de sched_setscheduler y
sched_getscheduler definen _POSIX_PRIORITY_SCHEDULING en <unistd.h>.
VALOR DEVUELTO
En caso de exito, sched_setscheduler devuelve cero. En caso de exito,
sched_getscheduler devuelve la politica para el proceso (un entero no
negativo). En caso de error, se devuelve -1 y se pone en errno un
valor apropiado.
ERRORES
ESRCH No se ha podido encontrar el proceso cuya ID es pid.
EPERM El proceso que hace la llamada no tiene los privilegios
apropiados. Solamente los procesos de root tienen permiso para
activar las politicas SCHED_FIFO y SCHED_RR. El proceso que
llame a sched_setscheduler necesita un UID efectivo igual al
EUID o al UID del proceso identificado por pid, o debe ser un
proceso del super-usuario.
EINVAL La politica de planificacion no es una de las politicas
reconocidas, o el parametro p no tiene sentido para la politica.
CONFORME A
POSIX.1b (antiguamente POSIX.4)
FALLOS
En Linux-1.3.81, SCHED_RR no habia sido aun probada cuidadosamente y
pudiera ser que no se comportara exactamente como se describe o
requiere por POSIX.1b.
NOTA
El Linux estandar es un sistema operativo de proposito general que
puede manejar procesos en segundo plano, aplicaciones interactivas y
aplicaciones flexibles de tiempo real (aplicaciones que necesitan de
forma usual cumplir limites temporales). Esta pagina de manual esta
dirigida a esos tipos de aplicaciones.
El Linux estandar no esta disenado para soportar aplicaciones estrictas
de tiempo real, es decir, aplicaciones en las se deben garantizar los
plazos (a menudo mucho mas breves que un segundo) o el sistema
fracasara catastroficamente. Como todos los sistemas operativos de
proposito general, Linux esta disenado 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 mas
pobre que su caso medio, sus distintos cerrojos del nucleo (como los de
SMP) producen tiempos de espera de maxima duraccion y muchas de sus
tecnicas para mejorar el rendimiento decrementan el tiempo medio
incrementando el tiempo del peor caso. Para la mayoria de situaciones,
eso es lo que usted quiere, pero si realmente esta desarrollando una
aplicacion 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 disenado
especificamente para aplicaciones estrictas de tiempo real.
V'EASE TAMBI'EN
sched_setaffinity(2), sched_getaffinity(2), sched_setparam(2),
sched_getparam(2), sched_yield(2), sched_get_priority_max(2),
sched_get_priority_min(2), sched_rr_get_interval(2), nice(2),
setpriority(2), getpriority(2), mlockall(2), munlockall(2), mlock(2),
munlock(2)
Programming for the real world - POSIX.4 por Bill O. Gallmeister,
O'Reilly & Associates, Inc., ISBN 1-56592-074-0
IEEE Std 1003.1b-1993 (estandar POSIX.1b)
ISO/IEC 9945-1:1996 - Esta es la nueva revision de 1996 de POSIX.1, que
contiene en un solo estandar POSIX.1(1990), POSIX.1b(1993),
POSIX.1c(1995), y POSIX.1i(1995).