2014-07-21 69 views
1

我想開發一個基本的Job Scheduler,當他們進入隊列並安排他們並重新安排工作以滿足他們的需求時,他們會接受新的工作。如何實現/模擬作業調度程序?

我試圖實現調度器爲對象的隊列,其中對象的形式爲

class queueItem{ 
    job j; 
    long start,end,duration; 
    Boolean isStart,isEnd; 
} 

所以這是一個體面的方式來模擬作業調度或是否有更好的執行調度作業列表給出他們的開始,結束,持續時間,比如使用Pre-Emptive算法之一。 對於這個問題,這可能是任何語言。只有一些關於如何接近它的提示會很棒。 在此先感謝:)

+0

您不會安排到隊列中;這是先到先得。 – ChiefTwoPencils

+0

您在您的問題中混淆了算法,數據結構和實現。如果您不指定約束和要求,那麼沒有好的調度算法。 @ChiefTwoPencils一個簡單的隊列是FIFO。 – UmNyobe

+0

什麼是先來(先)先服務(出)?那裏沒有「調度」。 op表示他們希望以持續時間爲基礎。 @UmNyobe – ChiefTwoPencils

回答

1

調度程序的意義太太板了。 - 正在安排的工作的性質是什麼? - 調度的要求和策略是什麼?

一般情況下,調度由幾個邏輯其它的組件的

  1. 工作選擇器,挑接下來的工作邏輯。
  2. 上下文切換器,執行實際的作業切換(保存/恢復上下文信息,停止/啓動作業)
  3. 觸發器,這通常是計時器,但其他事件也是有用的。
  4. 可選會計,這可能反過來提供統計信息給求職者。

對於支持搶佔式調度的系統,作業必須是可中斷的。

對於一個體面的調度程序,IMO應該支持優先級,暫停和阻塞事件(時間和其他事件)。

這可具有以下數據佈局:

  • LIST活性[...]; //作業列表數組,每個優先級列表一個列表
  • 列表睡眠; //暫停工作
  • LIST zombie; //完成作業,等待清理
  • JOB * current_job;
  • 經過的時間; //工作開關後經過的時間
  • 時間量; //當前工作的預算直到下次切換

N.B.這可能過於簡單。