sched_setscheduler | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
#include <sched.h> int sched_setscheduler(pid_t pid, int policy,
const struct sched_param *param); int sched_getscheduler(pid_t pid); struct sched_param { ... int sched_priority; ... };
DESCRIPTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
sched_getscheduler() lit la politique d'ordonnancement et ses paramètres pour le processus identifié par pid. Si pid vaut zéro, la politique du processus appelant sera récupérée.
Politiques d'ordonnancement | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Une valeur de priorité statique sched_priority est assignée à chaque processus, et ne peut être modifiée que par l'intermédiaire d'appels système. Conceptuellement, l'ordonnanceur dispose d'une liste de tous les processus prêts pour chaque valeur possible de sched_priority (sched_priority est dans l'intervalle 0 à 99).
Afin de déterminer quel processus doit s'exécuter ensuite, l'ordonnanceur de Linux recherche la liste non-vide de plus haute priorité statique et prend le processus en tête de cette liste. La politique d'ordonnancement détermine pour chaque processus l'emplacement où il sera inséré dans la liste contenant les processus de même priorité statique, et comment il se déplacera dans cette liste.
SCHED_OTHER est l'ordonnancement universel temps-partagé par défaut, utilisé par la plupart des processus. SCHED_BATCH est conçue pour les exécutions de type « batch » des processus. SCHED_IDLE est conçue pour les exécutions de très basse priorité de tâches en arrière-plan. SCHED_FIFO et SCHED_RR sont prévus pour des applications temps réel qui nécessitent un contrôle précis de la sélection des processus prêts.
Les processus ordonnancés avec SCHED_OTHER, SCHED_BATCH ou SCHED_IDLE doivent avoir une priorité statique de 0, ceux ordonnancés par SCHED_FIFO ou SCHED_RR peuvent avoir une priorité statique dans l'intervalle 1 à 99. Les appels système sched_get_priority_min(2) et sched_get_priority_max(2) permettent de déterminer l'intervalle de priorités valides de manière portable sur les systèmes conformes à la norme POSIX.1-2001.
Tout ordonnancement est préemptif : si un processus avec une priorité statique plus élevée devient prêt, le processus appelant est interrompu et retourne dans sa liste d'attente. La politique d'ordonnancement détermine simplement l'ordre utilisé dans une liste de processus prêts avec des priorités statiques égales.
SCHED_FIFO : Ordonnancement First In-First out (premier arrivé, premier servi) | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SCHED_RR: Ordonnancement Round Robin | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SCHED_OTHER :: Ordonnancement temps-partagé par défaut | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SCHED_BATCH : Ordonnancement par lot de processus | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SCHED_IDLE: Scheduling very low priority jobs | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SCHED_IDLE : Ordonnancement de tâches de très faible priorité | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Privilèges et limites de ressources | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Depuis Linux 2.6.12, la limite de ressources RLIMIT_RTPRIO définit un plafond sur la priorité d'un processus non privilégié pour les politiques SCHED_RR et SCHED_FIFO. Si un processus non privilégié a une limite logicielle RLIMIT_RTPRIO non nulle, il peut modifier ses politique et priorité d'ordonnancement, avec la restriction que la priorité ne peut pas être configurée avec une valeur plus grande que la limite logicielle RLIMIT_RTPRIO. Si la limite logicielle RLIMIT_RTPRIO est 0, la seule modification permise est de diminuer la priorité. Soumis aux mêmes règles, un autre processus non privilégié peut également faire ces modifications à partir du moment où l'UID effectif du processus effectuant la modification correspond à l'UID réel ou effectif du processus cible. Voir getrlimit(2) Pour plus d'informations sur RLIMIT_RTPRIO. Les processus privilégiés (CAP_SYS_NICE) ignorent cette limite ; comme avec de vieux noyaux, ils peuvent modifier, de manière arbitraire, la politique et la priorité d'ordonnancement.
Temps de réponse | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Divers | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Le verrouillage de pages en mémoire est généralement nécessaire pour les processus temps réel afin d'éviter les délais de pagination. Ceci peut être effectué avec mlock(2) ou mlockall(2).
Comme une boucle sans fin non bloquante dans un processus ordonnancé sous une politique SCHED_FIFO ou SCHED_RR bloquera indéfiniment tous les processus avec une priorité plus faible, le développeur d'applications temps-réel devrait toujours conserver sur une console un shell ordonnancé avec une priorité supérieure à celle de l'application testée. Ceci permettra un kill((1) d'urgence des applications testées qui ne se bloquent pas ou qui ne se terminent pas comme prévu.
Les systèmes POSIX sur lesquels sched_setscheduler() et sched_getscheduler() sont disponibles définissent _POSIX_PRIORITY_SCHEDULING dans <unistd.h>.
VALEUR RENVOYÉE | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
En cas d'échec, -1 est renvoyé et errno contient le code d'erreur.
ERREURS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
CONFORMITÉ | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
À l'origine, le noyau Linux standard est un système d'exploitation à vocation généraliste, et peut gérer des processus en arrière-plan, des applications interactives, et des applications en temps réel souple (qui ont besoin de répondre à des critères temporels moyens). Bien que le noyau Linux 2.6 permettait la préemption du noyau et que le nouvellement introduit ordonnanceur 0(1) assure que le temps nécessaire pour planifier soit fixe et déterministe quel que soit le nombre de tâches, la vraie gestion temps réel n'était pas possible jusqu'au noyau 2.6.17.
Fonctionalités temps réel dans le noyau Linux principal | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
patch-version-noyau-rtversion-patchet peuvent être téléchargés à partir de http://people.redhat.com/mingo/realtime-preempt/.
Sans les ajouts et avant leur complète inclusion dans le noyau principal, la configuration du noyau n'offre que trois classes de préemption CONFIG_PREEMPT_NONE, CONFIG_PREEMPT_VOLUNTARY et CONFIG_PREEMPT_DESKTOP qui fournissement respectivement « aucune », « quelque » et une « considérable » latence d'ordonnancement de pire cas.
Avec les ajouts appliqués ou après leur pleine inclusion dans le noyau principal, la configuration supplémentaire CONFIG_PREEMPT_RT supplémentaire devient disponible. Si elle est choisie, Linux est transformé en un système d'exploitation temps réel ordinaire. Les politiques d'ordonnancement FIFO et RR qui peuvent être définies avec sched_setscheduler() sont alors utilisées pour lancer un processus avec une vraie priorité temps réel et une latence minimum d'ordonnancement de pire cas.
BOGUES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Programming for the real world - POSIX.4 by Bill O. Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 14 octobre 1996 et révisée le 6 juin 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 sched_setscheduler ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |