-
ラウンドロビンスケジューリングの基本アイデア ラウンドロビンスケジューリングでは、各タスクに一定の時間スライス(クオンタム)を割り当てます。各タスクは順番に実行され、指定された時間が経過すると次のタスクに切り替わります。このプロセスを繰り返すことで、公平なタスクの実行が実現されます。
-
ラウンドロビンスケジューリングの実装例 以下に、C言語でラウンドロビンスケジューリングを実現するための基本的なコード例を示します。
#include <stdio.h>
#define MAX_TASKS 5
#define TIME_SLICE 10
typedef struct {
int task_id;
int remaining_time;
} Task;
void run_round_robin(Task tasks[], int num_tasks) {
int current_task = 0;
while (1) {
if (tasks[current_task].remaining_time > 0) {
printf("Running Task %d\n", tasks[current_task].task_id);
tasks[current_task].remaining_time -= TIME_SLICE;
}
current_task = (current_task + 1) % num_tasks;
// 全てのタスクが完了したら終了
int all_tasks_completed = 1;
for (int i = 0; i < num_tasks; i++) {
if (tasks[i].remaining_time > 0) {
all_tasks_completed = 0;
break;
}
}
if (all_tasks_completed) {
break;
}
}
}
int main() {
// タスクの初期化
Task tasks[MAX_TASKS] = {
{1, 30},
{2, 20},
{3, 40},
{4, 10},
{5, 15}
};
// ラウンドロビンスケジューリングの実行
run_round_robin(tasks, MAX_TASKS);
return 0;
}
上記の例では、Task
という構造体を定義し、各タスクのIDと残りの実行時間を保持しています。run_round_robin
関数では、各タスクの実行時間を減らしながら順番に実行し、全てのタスクが完了するまで繰り返します。
このようにして、C言語で簡単なラウンドロビンスケジューリングを実装することができます。必要に応じて、タスクの追加や時間スライスの変更などを行い、自分のニーズに合わせたスケジューリングロジックを作成することができます。