2012-03-12 23 views
0

我需要一些幫助來找出一種方法來存儲我的數據是有效的。我正在編寫一個使用優先級隊列的調度算法,其中包括尚未提交,就緒,正在運行,已被阻止和已完成的優先級隊列。所有進程都以尚未提交的狀態開始。我的信息來自標準輸入。調度算法存儲

每一行解釋如下(分別):在該系統(1〜4)

第一行=的CPU,的方法(1〜25)的數量,並且所述量子尺寸(1或更大)。 第二/第三=進程ID(1至999),該處理優先級(1〜10), 提交(非負)的時間,需要(1至1000)的總的CPU時間, 計算時間之前需要輸入/輸出(1到100), 以及每個計算I/O週期(1到1000)的輸入/輸出時間。

Sample Input 
1 2 10 
1 1 0 10 5 10 
2 2 3 10 5 10 

第二行和第三行是分開的進程,最多可以有25個進程。最初我以爲只是將每個進程存儲到它自己的數組中,這樣我就可以輕鬆地將該數組從隊列移動到隊列,但創建25個不同的數組,然後可能不使用它們是非常低效的。有沒有更簡單的方法來存儲我的「進程」,以便我可以在狀態之間移動它們(由隊列表示)?

回答

1

我會做一個Process類,它包含上面第二行/第三行表示的狀態。例如:

class Process { 
    private int pid; 
    private int priority; 
    private int submissionTime; 
    private int totalCpuTime; 
} 

並將類的實例存儲在隊列中。沒有理由不爲排隊等待進程。然後根據需要將實例移動到其他隊列。

1

的最簡單的方法是創建4個任務(每個CPU一個),其反覆..

  • 確定下一個要執行的任務。
  • 執行該任務
  • 重複。

你可以用一個固定大小的ExecutorService做到這一點。

如果你有一個IO密集型進程,而不是一個CPU綁定的過程,你可以嘗試在事先確定採用,並在此留下多個線程的最佳數量。

1

如果這是家庭作業,並且您在OO課程中,我建議您將建模過程視爲您定義類型的實例。

對於您的問題的另一方面,您正在討論預先分配大小爲25的數組,因爲您不知道有多少個進程。

看看Java的集合類型。它有像ArrayLists一樣的構造,它提供了對象查找的快速索引,並且不會強制您預先分配空間。