У меня есть сценарий sh:
#!/bin/sh
taskset -c 1 ./RR_FIFO_sched 2 90 &
taskset -c 1 ./RR_FIFO_sched 2 90 &
sleep 5s
taskset -c 1 ./RR_FIFO_sched 2 95 &
exit
И код в исходном файле с именем RR_FIFO_sched.c:
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
long i, j, temp;
char cmd_str[100];
int rc, current_scheduler_policy;
struct sched_param my_params;
if (argc != 3) {
printf("Usage:RR-FIFO-sched sched_class priority \nsched_class: 0 for CFS; 1 for FIFO; 2 for RR\n");
exit(1);
}
my_params.sched_priority = atoi(argv[2]);
rc = sched_setscheduler(0, atoi(argv[1]), &my_params);
if (rc < 0) {
perror("sched_setscheduler error\n");
exit(0);
}
current_scheduler_policy = sched_getscheduler(0);
printf("the PID:%d current scheduler = %d \n", getpid(), current_scheduler_policy);
for (i = 0; i < 1024 * 1024 * 1024; i++)
for (j = 0; j < 10; j++)
temp++;
sprintf(cmd_str, "cat /proc/%d/sched > ./sched-%d ; date >> ./sched-%d",
getpid(), getpid(), getpid());
system(cmd_str);
return 0;
}
Я собирался создать два процесса RR с приоритетомиз 90 в то же время, и пусть они делают простые вычисления и конкурировать за CPU # 1. Через пять секунд я бы создал процесс FIFO с приоритетом 95. В моем воображении процесс FIFO прерывает первые два процесса и монополизирует ЦП # 1. После завершения процесса FIFO два процесса RR возвращают ЦП. Затем, запустив скрипт на терминале и наблюдая за командой top на другом терминале, я обнаружил, что система создает процессы один за другим, а не создает два процесса одновременно. Так почему же это случилось? Я был бы очень признателен, если бы вы ответили на этот вопрос для меня.