2011-04-24 5 views
3

tout le monde, je trouve cela à l'intérieur static int setscheduler(pid_t pid, int policy, struct sched_param *param):setscheduler() dans le noyau Linux

p->policy = policy; 

if (policy != SCHED_OTHER) p->prio = MAX_USER_RT_PRIO-1 - p->rt_priority; 

p est un pointeur vers le descripteur de tâche avec pid actuelle (paramètre ci-dessus) donc si elle est politique n'est pas SCHED_OHTER (cela signifie SCHED_FIFO ou SCHED_RR) mais pourquoi changeons-nous p-> prio de cette façon? qu'est-ce que cela signifie exactement rt_priority? merci à l'avance

Répondre

2

réponse courte: rt_priority signifie la priorité en temps réel et pour SCHED_RR et SCHED_FIFO il décide combien de temps le processus obtenir.

Réponse longue

tout d'abord Linux implémente quelque chose appelé Realtime Process Scheduling (SCHED_RR et SCHED_FIFO). Les processus opérant sous ces politiques ont toujours priorité sur les autres processus. Linux fournit 99 niveaux de priorité en temps réel, numérotés de 1 (le plus bas) à 99 (le plus haut).

Dans le noyau, si je me souviens bien "des nombres plus petits signifient une meilleure préférence" - plus petit p->prio signifie une meilleure priorité.

Ici nous ce que sched_setscheduler ressemble:

int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param); 

Et sched_param

struct sched_param { 
    int sched_priority;  /* Scheduling priority */ 
}; 

L'entier sched_priority, pour une politique de SCHED_RR ou SCHED_FIFO signifie "priorité en temps réel" que je suppose est rt_priority. Ainsi, le noyau fait la bonne chose

  • Prenez la priorité maximmum
  • Soustraire la priorité en temps réel de cette valeur. Plus la priorité est grande (plus elle est soustraite), meilleur est le traitement par l'ordonnanceur.