2012-04-05 14 views
0

私はラウンドロビンとfcfsを使用してCでschedullingアルゴリズムのシミュレータを作ろうとしています。スケジューリングアルゴリズムのCPU時間

私はそれを見て、カーネルコマンドを読んだが、まだ混乱しています。(このプログラムはパテ(Linux)で実行されています。クロック実行するか、CPU時間を取る。

  1. を、我々はプロセスがCPU時間を取る作る方法を教えてください。私たちは(どちらを知らない)、SYS()関数を呼び出していますか私たちはときに、プロセスををmallocするためのものであること私はテキストファイルから自分のプログラムでそれを読んでいるのですか?私は馬鹿に聞こえるかもしれませんが、説明してください。

  2. f ex(0,2,70,8)のプロセス(作成された時間、プロセスID、メモリサイズ、ジョブ時間)の格納?

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

  4. どのようにクロック時間を実装するか、inbuilt関数があるか、forループを使用するだけですか?

これらはあまりにも多くの質問をしないことを望むが、誰でも私に戻って私は本当にそれを感謝します。 3回を予定し

よろしく

+0

イエスの答えが何だったのかの線に沿って明確にしてください... –

答えて

2

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

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

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

関連する問題