Как реализовать алгоритм циклического перебора?

Я смотрю много уроков на YouTube по планированию RR, и у меня был этот вопрос на экзамене, но я не знаю, что я сделал неправильно, решение профессора отличалось от моего решения, и я теперь запутался.

Job       |    Arrival       |      Burst
P1        |       0          |        4
P2        |       2          |        5
P3        |       3          |        3
P4        |       8          |        4

QT = 1 

Ее ответ был: P1,P1,P2,P3,P1,P2,P3,P1,P4,P2,P3,P4,P2,P4,P2,P4

Мой ответ был: P1,P1,P2,P1,P3,P2,P1,P3,P2,P4,P3,P2,P4,P2,P4,P4

Так какой из них правильный ответ, и если это была она, то почему?

4 ответа

Решение

Оба верны!!!

Я скажу, что ваше решение выглядит правильно (но вы не рассматриваете приоритетную очередь планирования). Но это зависит от того, как подойдет твой профессор. Ниже приведены подходы:

Ваш подход:

Вы выполняете обычные операции с очередями. Только enque() и deque(). Таким образом, используя эти 2, ваш подход правильный!

Подход вашего профессора:

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

Так что лучше, если вы обсудите это со своим профессором. Я бы сказал, что вы не ошиблись!!!

Наивысший приоритет отдается новому прибытию, а второй приоритет рассматривается через FIFO в очереди ожидания.

Queue 
front    P1     P2     P3      P4
-----------------------------------
0  P1 | [3]    
1  P1 | [2] >>
2  P2 |  2     [4] >>             <- P2 arrives
3  P3 |  2      4     [2]         <- P3 arrives
4  P1 | [1] >>  4      2 
5  P2 |  1     [3] >>  2 
6  P3 |  1      3     [1]
7  P1 | [0] >>  3      1  
8  P4 |         3      1     [3]  <- P4 arrives. FIFO disrupted.
9  P2 |        [2] >>  1      3   <- FIFO regained.
10 P3 |         2     [0] >>  3 
11 P4 |         2            [2]
12 P2 |        [1] >>         2 
13 P4 |         1            [1]
14 P2 |        [0] >>         1 
15 P4 |                      [0]

Ее ответ был правильным.

Вы можете подойти к проблеме следующим образом:

  1. Откройте новую страницу блокнота
  2. Пронумеруйте каждую строку 0-15 (всего 16 строк; столбец SUM(Burst))
  3. Начните с записи задания в строку, в которую оно поступило (P1 в строке с номером 0, P2 в строке с номером 2, P3 в строке с номером 3, P4 в строке с номером 8)
  4. Теперь вы знаете, что каждая работа может выполняться только после этой строки.
  5. Затем начните заполнять оставшиеся строки в последовательном порядке, когда в строках не заданы задания и где задания оказались меньше количества пакетов, определенных для этого задания.

Надеюсь это поможет!

У вашего учителя другой подход. Всякий раз, когда в систему поступает новый процесс, он имеет более высокий приоритет, чем процессы, завершившие пакетную обработку.

Другие вопросы по тегам