Я пытаюсь написать диспетчер процессов, который планирует различные процессы с использованием политики планирования SCHED_FIFO в режиме реального времени. Я хочу установить приоритеты процессов и выполнить их в соответствии с приоритетом.Планировщик процессов Linux
У меня есть тестовые процессы, которые приостановлены и ждут, чтобы они были возобновлены диспетчером процессов, чтобы они выполняли свои задачи.
Вот часть кода для процесса тестирования:
while(1) {
kill(myPid, SIGTSTP); // pause process until resumed by scheduler
printf("Process %s with PID %d and priority %d\n",
argv[0], myPid, param.sched_priority);
printf("Process %s processing...\n", argv[0]);
k = 0;
for (i = 0; i < 10000; i++) // do random task
{
for (j = 0; j < 10000; j++)
{
k++;
}
}
printf("Process %s done. Going to sleep.\n", argv[0]);
sched_yield(); // yield the processor
}
Ниже приведен пример кода для менеджера процесса:
pid_t child[3]; // holds child processes
while(1)
{
for (i = 0; i < num_child; i++)
{
kill(child[i], SIGCONT); // resume process
child_param.sched_priority = BASE_CHILD_PRIORITY + i * 10; // set priority
sched_setscheduler(child[i], SCHED_FIFO, &child_param); // set policy
}
}
Хотя я могу получить самый высокий приоритет во-первых, процессы не полностью выполняют свою задачу до выхода процессора. Результат моей проблемы можно увидеть ниже.
Process 1 with PID 5975 and priority 79
Process 1 processing...
Process 2 with PID 5974 and priority 69
Process 3 with PID 5973 and priority 59
Process 2 processing...
Process 3 processing...
Process 1 done. Going to sleep.
Process 2 done. Going to sleep.
Process 3 done. Going to sleep.
Почему процессы с политикой SCHED_FIFO не выполняют свою полную задачу перед запуском следующего процесса?
Есть ли вероятность, что это работает на многоядерном процессоре? ... – TheCodeArtist
Он работает на одном основном компьютере – Olivier
Выход 'sysctl -a | grep sched_rt_'? – ninjalj