2012-04-25 3 views
2

Я пытаюсь реализовать новый механизм планирования для Linux 2.4.18 как часть назначения HW. У меня есть следующая проблема: В новом механизме мне нужно изменить эпоху, когда активная очередь не пуста, для этого мне нужно передать весь процесс из активной очереди на истекший период, а затем переключиться между истекшим и активный. Как я могу пройти весь процесс в активной очереди, чтобы перенести их на истекший период?Механизм планирования процесса в Linux

Я пробовал просматривать все 140 растровых изображений, которые имеют значение 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 через последовательный порт. Это поможет вам быстрее работать с последующими ошибками в вашем hw - вы сможете установить точку останова, где находится ваш код, и пройдите, чтобы точно увидеть, почему ядро ​​умирает.

Например, если вы используете VirtualBox, вы можете следовать инструкциям here

Вы также должны enable kgdb в ядре.

Смежные вопросы