Какую роль играет приоритет в циклическом планировании?

Я пытаюсь решить следующую домашнюю задачу для класса операционных систем:


Следующие процессы планируются с использованием упреждающего алгоритма циклического планирования. Каждому процессу назначается числовой приоритет, причем большее число указывает на более высокий относительный приоритет.

В дополнение к процессам, перечисленным ниже, в системе также есть бездействующая задача (которая не потребляет ресурсы ЦП и определяется как Pidle ). Эта задача имеет приоритет 0 и запланирована всякий раз, когда в системе нет других доступных процессов для запуска.

Длина кванта времени равна 10 единицам.

Если процесс вытеснен процессом с более высоким приоритетом, вытесненный процесс помещается в конец очереди.

+--+--------+----------+-------+---------+
|  | Thread | Priority | Burst | Arrival |
+--+--------+----------+-------+---------+
|  | P1     |       40 |    15 |       0 |
|  | P2     |       30 |    25 |      25 |
|  | P3     |       30 |    20 |      30 |
|  | P4     |       35 |    15 |      50 |
|  | P5     |        5 |    15 |     100 |
|  | P6     |       10 |    10 |     105 |
+--+--------+----------+-------+---------+

а. Покажите порядок планирования процессов с помощью диаграммы Ганта.
б. Каково время выполнения каждого процесса?
c. Каково время ожидания для каждого процесса?
d. Какова степень использования процессора?


Мой вопрос: какую роль играет приоритет, когда мы рассматриваем использование алгоритма циклического перебора? Я много думал об этом, и пришел к выводу, что это имеет смысл только в том случае, если приоритет важен во время его прибытия, чтобы решить, должен ли он вытеснять другой процесс или нет. Причина, по которой я пришел к такому выводу, заключается в том, что если бы он проверялся каждый раз, когда происходило переключение контекста, то процесс с наивысшим приоритетом всегда выполнялся бы бесконечно, а другие процессы голодали бы. Это противоречит идее циклического перебора, гарантирующего, что ни один процесс не выполняется дольше, чем один квант времени, и идее о том, что после выполнения процесса он переходит в конец очереди.

Используя эту логику, я решил проблему как таковую:

введите здесь описание изображения

Не могли бы вы сообщить мне, правильно ли я нахожусь в отношении приоритета роли в этой ситуации и правильно ли я подхожу к этому?


person giraffesyo    schedule 25.02.2019    source источник


Ответы (1)


Я думаю, ты на ложном пути. Циклический алгоритм управляет порядком выполнения в пределах приоритета. Это как если бы у каждого приоритета была своя очередь и соответствующий планировщик циклического перебора. Когда очередь с заданным приоритетом пуста, рассматриваются последующие очереди с более низким приоритетом. В конце концов, он будет простаивать.

Если бы вы не обрабатывали это таким образом, как бы вы предотвратили в конечном итоге планирование простоя, несмотря на то, что фактическая работа уже готова к работе?

Большинство процессов с высоким приоритетом являются реактивными, то есть они выполняются в течение короткого периода времени в ответ на событие, поэтому по большей части не находятся в очереди выполнения/готовности.

В коде:

void Next() {
   for (int i = PRIO_HI; i >= PRIO_LO; i--) {
        Proc *p;
        if ((p = prioq[i].head) != NULL) {
           Resume(p);
           /*NOTREACHED*/
        }
   }
   panic(“Idle not on runq!”);
}

void Stop() {
      unlink(prioq + curp->prio, curp);
      Next();
}
void Start(Proc *p) {
      p->countdown = p->reload;
      append(prioq + p->prio, p);
      Next();
}
void Tick() {
        if (--(curp->countdown) == 0) {
           unlink(prioq + curp->prio, curp);
           Start(curp);
        }
}
person mevets    schedule 25.02.2019
comment
В этом есть большой смысл, я ценю ваше время, когда вы мне это объясняете. - person giraffesyo; 25.02.2019