- Pythonによるラウンドロビンスケジューリングの実装例:
def round_robin(tasks, quantum):
n = len(tasks)
remaining_time = list(tasks)
waiting_time = [0] * n
turnaround_time = [0] * n
current_time = 0
i = 0
while True:
if remaining_time[i] > quantum:
remaining_time[i] -= quantum
current_time += quantum
else:
current_time += remaining_time[i]
turnaround_time[i] = current_time
remaining_time[i] = 0
for j in range(n):
if j != i and remaining_time[j] > 0:
waiting_time[j] += current_time - turnaround_time[j]
if sum(remaining_time) == 0:
break
i = (i + 1) % n
average_waiting_time = sum(waiting_time) / n
average_turnaround_time = sum(turnaround_time) / n
return average_waiting_time, average_turnaround_time
上記のコードは、与えられたタスクとクオンタム(1つのタスクを処理する時間単位)に基づいて、ラウンドロビンスケジューリングの待ち時間とターンアラウンド時間の平均値を計算します。タスクはリストとして渡され、各タスクの実行時間が保持されます。
- C言語によるラウンドロビンスケジューリングの実装例:
#include <stdio.h>
void round_robin(int tasks[], int n, int quantum) {
int remaining_time[n];
int waiting_time[n];
int turnaround_time[n];
int current_time = 0;
int i = 0;
for (int j = 0; j < n; j++) {
remaining_time[j] = tasks[j];
waiting_time[j] = 0;
turnaround_time[j] = 0;
}
while (1) {
if (remaining_time[i] > quantum) {
remaining_time[i] -= quantum;
current_time += quantum;
} else {
current_time += remaining_time[i];
turnaround_time[i] = current_time;
remaining_time[i] = 0;
}
for (int j = 0; j < n; j++) {
if (j != i && remaining_time[j] > 0) {
waiting_time[j] += current_time - turnaround_time[j];
}
}
int all_finished = 1;
for (int j = 0; j < n; j++) {
if (remaining_time[j] > 0) {
all_finished = 0;
break;
}
}
if (all_finished) {
break;
}
i = (i + 1) % n;
}
float average_waiting_time = 0;
float average_turnaround_time = 0;
for (int j = 0; j < n; j++) {
average_waiting_time += waiting_time[j];
average_turnaround_time += turnaround_time[j];
}
average_waiting_time /= n;
average_turnaround_time /= n;
printf("Average Waiting Time: %.2f\n", average_waiting_time);
printf("Average Turnaround Time: %.2f\n", average_turnaround_time);
}
int main() {
int tasks[] = {10, 5, 8, 12};
int n = sizeof(tasks) / sizeof(tasks[0]);
int quantum = 3;
round_robin(tasks, n, quantum);
return 0;
}
上記のC言語のコードは、与えられたタスクとクオンタムに基づいてラウンドロビンスケジューリングを実行し、待ち時間とターンアラウンド時間の平均値を計算します。タスクは配列として渡され、各タスクの実行時間が保持されます。
これらのコード例を使用して、ラウンドロビンスケジューリングの短縮コードを分析し、詳細な説明を提供することができます。また、他のプログラミング言語や環境でも同様のアルゴリズムを実装することができます。