2012-04-25 47 views
2

我试图为Linux 2.4.18实现一个新的调度机制作为HW分配的一部分。 我有以下问题: 在新机制中,我需要在活动队列不为空时更改历元,以便我需要将所有进程从活动队列转移到过期,然后在过期和积极的。 如何检查活动队列中的所有进程以将其转移到已过期?Linux中的进程调度机制

我试着通过所有值为1的位图,并在每个我用户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); 
     } 

    } 
} 

感谢

回答

1

的代码,我会建议你在虚拟机中做到这一点,并用gdb通过串口远程调试。它可以帮助你更快地处理硬件中的后续错误 - 你可以在代码的哪个位置设置断点,然后逐步查看内核死亡的原因。

例如,如果你正在使用VirtualBox的,你可以按照说明here

您还需要enable kgdb在内核。