2011-11-08 6 views
0

Je crée un module noyau pour linux. Je me demandais, comment puis-je empêcher un processus d'être programmé pour une durée déterminée? Y at-il une fonction dans le sched.c qui peut le faire? Est-il possible d'ajouter un task_struct spécifique à une file d'attente pendant une certaine période définie ou d'utiliser quelque chose comme schedule_timeout pour un processus spécifique?empêcher la planification du processus

Merci

+0

Voulez-vous que la tâche en cours dorme? Ou voulez-vous qu'une tâche force une autre tâche à dormir? – Karmastan

+0

Je pense que la réponse est la même que cette question: http://stackoverflow.com/questions/7695124/is-it-possible-to-block-a-task-from-kernel-space/9073821# 9073821 –

+0

Oui, c'est possible. Voyez comment le code de verrouillage mutex du noyau Linux le fait. http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/kernel/mutex.c#L142 –

Répondre

0

processus de planification Retarder pendant un certain temps équivaut à le laisser dormir. Dans les conducteurs, cela se fait souvent avec msleep() (commun dans les tâches de travail), ou pour les processus, en plaçant le processus en mode veille interruptible avec

set_current_state(TASK_INTERRUPTABLE); 
schedule_timeout(x*HZ); 

Le noyau ne sera pas programmer à nouveau la tâche jusqu'à ce que le délai d'attente a expiré ou un signal est reçu.

Questions connexes