2012-04-25 46 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在內核。