2012-04-25 9 views
2

私は、HW割り当ての一部としてLinux 2.4.18の新しいスケジューリングメカニズムを実装しようとしています。 私は次の問題があります: 新しいメカニズムでは、アクティブなキューが空でないときにエポックを変更する必要があります。アクティブなキューからすべてのプロセスを期限切れにしてから期限切れのアクティブです。 アクティブなキュー内のすべてのプロセスを期限切れに転送するには、どうすればよいですか?Linuxでのプロセススケジューリングのメカニズム

私は値1を持つすべての140ビットマップを調べ、それぞれのユーザーのfor_each_taskを削除し、アクティブから削除して有効期限切れに挿入しました。

しかし、(システムコールを使用して)新しいメカニズムに変更する何らかの理由で、システムが自動的にリセットされます。

私は、システムがスケジュール機能中に非常に多くのプロセスを通過するのは難しいかもしれないと考えましたか?

アイデア?

これは、私は私はあなたが仮想マシンでこれを行う提案、およびシリアルオーバーgdbでのリモートデバッグうスケジュール機能で

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); 
     } 

    } 
} 

おかげ

答えて

1

を書いたコードです。それはあなたのhwの後続のバグをはるかに速く処理するのに役立ちます。コードがあるところでブレークポイントを設定し、カーネルがなぜ死ぬのかを正確に見ることができます。例えば

あなたはVirtualBoxのを使用している場合、あなたはまた、あなたのカーネルにenable kgdbに必要な指示here

に従うことができます。

関連する問題