ハードウェア割り当ての一部として、Linux 2.4.18 用の新しいスケジューリング メカニズムを実装しようとしています。次の問題があります:新しいメカニズムでは、アクティブキューが空でないときにエポックを変更する必要があります。そのためには、すべてのプロセスをアクティブキューから期限切れに転送し、期限切れとアクティブを切り替える必要があります. それらを有効期限切れに転送するために、アクティブなキュー内のすべてのプロセスを調べるにはどうすればよいですか?
値が 1 の 140 個のビットマップすべてを調べてみました。それぞれのビットマップで for_each_task を使用し、アクティブから削除して期限切れに挿入しました。
しかし、何らかの理由で (システム コールを使用して) 新しいメカニズムに変更すると、システムがリセットされます。
スケジュール機能中にシステムが多くのプロセスを実行するのは難しすぎるのではないかと思いましたか?
何か案は?
これは私がスケジュール機能で書いたコードです
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);
}
}
}
ありがとう