Имеет ли сценарий sh более низкий приоритет, чем процессы реального времени, которые создаются сценарием в linux? - PullRequest
3 голосов
/ 08 октября 2019

У меня есть сценарий 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 на другом терминале, я обнаружил, что система создает процессы один за другим, а не создает два процесса одновременно. Так почему же это случилось? Я был бы очень признателен, если бы вы ответили на этот вопрос для меня.

1 Ответ

2 голосов
/ 08 октября 2019

Имеет ли сценарий sh более низкий приоритет, чем процессы реального времени, созданные сценарием в linux?

Сценарий оболочки не имеет собственного приоритета -исполняющий процесс - это оболочка с классом планирования, обычно не являющимся «в реальном времени». В любом случае, приоритет оболочки не зависит от изменения приоритетов дочерних процессов - это не «хвост, виляющий собакой».

...