我正在尝试为Linux 2.4.18实现一种新的调度机制,作为硬件分配的一部分 . 我有以下问题:在新机制中,我需要在活动队列不为空时更改纪元,为此我需要将所有进程从活动队列转移到已过期,然后在已过期和活动之间切换 . 如何查看活动队列中的所有进程以将其转移到已过期?
我尝试遍历所有值为1的140位图,并在每个用户for_each_task中删除并从活动中删除并插入到期 .
但由于某种原因,当我更改为新机制(使用系统调用)时,系统会自行重置 .
我认为,在计划功能期间,系统可能难以超过这么多流程?
有任何想法吗?
这是我在schedule函数中编写的代码
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 回答
我建议你在虚拟机中执行此操作,并使用gdb over serial进行远程调试 . 它将帮助您更快地处理hw中的后续错误 - 您将能够设置代码所在的断点,并逐步查看内核为何崩溃 .
例如,如果您使用的是VirtualBox,则可以按照说明操作here
您还需要在内核中使用enable kgdb .