2012-03-12 8 views
0

効率的なデータを格納する方法を理解する上で助けが必要です。私は、未送信、準備完了、実行中、ブロック済み、完了済みの優先度キューを使用してスケジューリングアルゴリズムを作成しています。すべてのプロセスは、未送信状態で開始されます。私の情報は標準入力から来ます。スケジューリングアルゴリズムのストレージ

以下の各行は、(それぞれ)説明:

最初の行=システム(1〜4)のCPU、プロセスの数(1〜25)、および量子サイズ(1以上)。 秒/秒=プロセスID(1〜999)、プロセス優先度(1〜10)、提出時刻(非負)、合計CPU時間(1〜1000)、 前の計算時間入出力(1〜100)、 、および各計算I/Oサイクル(1〜1000)の入出力時間が必要です。

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

2行目と3行目はプロセスを分けており、最大25個のプロセスがあります。当初は各プロセスを独自の配列に格納することを考えていたので、配列をQueueからQueueに簡単に移動することはできましたが、25の異なる配列を作成し、それらを使用しない可能性は非常に低いです。私の "プロセス"を保存するより簡単な方法があるので、それらを状態(キューによって表される)の間で移動させることができますか?

答えて

1

上記の2行目/ 3行目の状態を含む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のコレクションタイプを見てください。オブジェクト参照の高速インデックスを提供するArrayListのような構造を持ち、スペースをあらかじめ割り当てる必要はありません。

関連する問題