SJFの実装にはいくつかの方法がありますが、ここでは基本的な方法を紹介します。まず、ジョブのリストと各ジョブの到着時間を取得します。それぞれのジョブに対して、実行時間を入力するようユーザーから要求します。
次に、到着時間が早い順にジョブを並び替えます。これには、リストのソートや優先度キュー(プライオリティキュー)の使用などが考えられます。
並び替えたジョブを順番に実行していきます。実行時間が最も短いジョブを選択し、それを実行します。実行が終了したら、次に実行するジョブを選択します。このプロセスを繰り返し、全てのジョブが実行されるまで続けます。
以下は、PythonでSJFアルゴリズムを実装する例です。
def sjf_scheduling(jobs):
n = len(jobs)
jobs.sort(key=lambda x: x['arrival_time']) # 到着時間でジョブをソート
current_time = 0
total_waiting_time = 0
for i in range(n):
job = jobs[i]
execution_time = job['execution_time']
if current_time < job['arrival_time']:
current_time = job['arrival_time']
start_time = current_time
end_time = current_time + execution_time
waiting_time = start_time - job['arrival_time']
total_waiting_time += waiting_time
print(f"Job {job['id']}: Execution time = {execution_time}, Start time = {start_time}, End time = {end_time}, Waiting time = {waiting_time}")
current_time = end_time
average_waiting_time = total_waiting_time / n
print(f"Average waiting time = {average_waiting_time}")
# ジョブのリスト(各ジョブは辞書として表現)
jobs = [
{'id': 1, 'arrival_time': 0, 'execution_time': 6},
{'id': 2, 'arrival_time': 2, 'execution_time': 8},
{'id': 3, 'arrival_time': 4, 'execution_time': 7},
{'id': 4, 'arrival_time': 6, 'execution_time': 3},
{'id': 5, 'arrival_time': 8, 'execution_time': 4}
]
sjf_scheduling(jobs)
このコードでは、ジョブのリストを定義し、それぞれのジョブにはID、到着時間、実行時間が含まれています。sjf_scheduling
関数を呼び出すことで、ジョブのスケジュールと待ち時間の詳細が表示されます。最後に、平均待ち時間も計算されて表示されます。
このようにして、SJFスケジューリングアルゴリズムの実装とコード例を提供しました。これを参考にして、異なるジョブや要件に合わせてカスタマイズすることができます。