Minix でプロセスの優先度を変更しようとしています。schedule_process
今のところ、メソッドを変更することを考えていますminix/servers/sched/schedule.c
元のコードは次のようになります。
static int schedule_process(struct schedproc * rmp, unsigned flags){
int err;
int new_prio, new_quantum, new_cpu;
pick_cpu(rmp);
if (flags & SCHEDULE_CHANGE_PRIO)
new_prio = rmp->priority;
else
new_prio = -1;
if (flags & SCHEDULE_CHANGE_QUANTUM)
new_quantum = rmp->time_slice;
else
new_quantum = -1;
if (flags & SCHEDULE_CHANGE_CPU)
new_cpu = rmp->cpu;
else
new_cpu = -1;
if ((err = sys_schedule(rmp->endpoint, new_prio,
new_quantum, new_cpu)) != OK) {
printf("PM: An error occurred when trying to schedule %d: %d\n",
rmp->endpoint, err);
}
return err;
}
new_prio
、new_quantum
およびnew_cpu
値を割り当てる場所に介入することを検討しています。これは良い考えでしょうか?つまり、次のような行を追加するだけnew_prio=4;
で十分でしょうか? また、プロセスがカーネル プロセスであるかどうかを確認する方法はありますか? 優先度 0 がカーネル プロセスに似ていることはわかっていますが、すべてのカーネル プロセスの優先度の値は 0 ですか? プロセスの優先度が 0 より大きい場合にのみ、そのプロセスに新しい優先度を与えるとしたら、それはカーネル プロセスに介入しないということでしょうか?
質問が多すぎてすみません。前もって感謝します。