Linux中的进程调度机制

时间:2012-04-25 16:06:00

标签: linux-kernel

我正在尝试为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);
        }   

    }
}

由于

1 个答案:

答案 0 :(得分:1)

我建议你在虚拟机中执行此操作,并使用gdb over serial进行远程调试。它将帮助您更快地处理hw中的后续错误 - 您将能够设置代码所在的断点,并逐步查看内核死亡的具体原因。

例如,如果您使用的是VirtualBox,则可以按照here

的说明进行操作

你的内核中还需要enable kgdb