0

ラウンド ロビンと fcfs を使用して、C でスケジューリング アルゴリズムのシミュレータを作成しようとしています。

私はそれを調べてカーネルコマンドを読み取ろうとしたので、いくつか質問がありますが、まだ混乱しています:(このプログラムは、実行またはCPU時間を消費します。

  1. プロセスが CPU 時間を消費するようにするにはどうすればよいでしょうか? sys() 関数を呼び出しますか (どれかわかりません)、それとも、プログラムでテキストファイルからプロセスを読み取るときにプロセスを malloc するつもりですか? ばかげているように聞こえるかもしれませんが、説明してください。

  2. ex(0,2,70,8)のプロセス(作成時間、プロセスID、メモリサイズ、ジョブ時間)の保存に使用するのに最適なデータ構造は何ですか?

  3. プロセスがジョブ時間内に終了した場合、プロセスを終了して CPU から解放し、CPU を使用できるようになった後のクロック時間に他のプロセスを確保するにはどうすればよいでしょうか?

  4. クロック時間をどのように実装しますか、組み込み関数はありますか、それとも for ループを使用するだけですか。

これらがあまり多くの質問をしていないことを願っていますが、私に返信できる人は誰でも本当に感謝しています.

よろしく

4

1 に答える 1

2

シミュレーターを構築している場合、実際にその時間を待つべきではありません。カウンターを更新し、プロセス p1 がこれまでに合計 750 ミリ秒実行され、250 ミリ秒、250 ミリ秒、250 ミリ秒などで 3 回スケジュールされていることを示すことにより、「スケジュール」する必要があります。 .. ユーザー空間でリアルタイムでスケジューリング シミュレーションを実行しようとすると、プロセス自体もスケジュールする必要があるため、奇妙な結果が生じることになります。

たとえば、FCFS をシミュレートしたい場合は、単純な「プロセス」キューを実装し、それぞれにタイム スライスを与えます (デフォルトのカーネル タイムスライスを使用することも、独自のタイムスライスを使用することもできますが、実際には関係ありません)。完了するまでの合計実行時間と、これに基づいて計算を行うことができます。たとえば、P1 はプロセスであり、完了するまでに 3.12 秒の CPU 時間を必要とします (メモリ シミュレーションは必要ないと思います。スケジューリングを行っており、キャッシングなどを考慮していないためです)。通常と同じようにアルゴリズムを実行しますが、数値を追加するだけなので、P1 を「実行」し、カウンターに時間を追加して、完了したかどうかを確認します。それが違いなどをチェックしている場合は、グローバル時間を維持して、壁時計時間で実行された時間を追跡できます。

ここで、まったく異なるスケジューリング パフォーマンスを測定する場合、これには通常、ワークロード ベンチマークを実行してシステム上で多くのプロセスを実行し、それぞれの全体的なパフォーマンス メトリックを確認する必要があります。

于 2012-04-05T00:49:13.403 に答える