Какую роль играет приоритет в круговом планировании? - PullRequest
0 голосов
/ 25 февраля 2019

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


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

В дополнение к процессам, перечисленным ниже, система также имеет задачу ожидания (которая не потребляет ресурсов ЦП и обозначается как P). холостой ход ).Эта задача имеет приоритет 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 |
+--+--------+----------+-------+---------+

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


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

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

enter image description here

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

1 Ответ

0 голосов
/ 25 февраля 2019

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

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

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

В коде:

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);
        }
}
...