2012-04-25 4 views
2

J'essaie d'implémenter un nouveau mécanisme de planification pour Linux 2.4.18 dans le cadre d'une affectation matérielle. J'ai le problème suivant: Dans le nouveau mécanisme, j'ai besoin de changer l'époque lorsque la file d'attente active n'est pas vide, pour ce l'actif. Comment puis-je parcourir tout le processus dans la file d'attente active pour les transférer à l'expiré?Mécanisme de planification de processus sous Linux

J'ai essayé de passer en revue toutes les 140 bitmaps qui ont la valeur 1 et dans chacun je l'utilisateur for_each_task et retiré de l'actif et inséré à l'expiré.

Mais pour une raison quelconque, lorsque je passe au nouveau mécanisme (à l'aide d'un appel système), le système se réinitialise lui-même.

J'ai pensé que c'est peut-être trop difficile pour le système de passer en revue autant de processus pendant la fonction de planification?

Des idées?

Voici le code que j'ai écrit dans la fonction horaire

for(int i=0;i<140;i++) 
{ 

    if(this_rq()->active->bitmap[i]) 
    { 
     list_t* iterator; 
     list_t* queue=this_rq()->active->queue; 
     list_for_each(iterator, queue + i) 
     { 
      task_t* p = list_entry(iterator,task_t,run_list); 
      dequeue_task(p,this_rq()->active); 
      enqueue_task(p,this_rq()->expired); 
     } 

    } 
} 

Merci

Répondre

1

Je vous suggère de faire cela dans une machine virtuelle, et débogage à distance avec gdb sur série. Il vous aidera à résoudre plus rapidement les bugs suivants: vous pourrez définir un point d'arrêt où se trouve votre code et voir exactement pourquoi le noyau meurt.

Par exemple, si vous utilisez VirtualBox, vous pouvez suivre les instructions here

Vous devez également enable kgdb dans votre noyau.

Questions connexes