Конечно, поэтому изначально любой процесс имеет отрицательное значение приоритета. Неважно, что это, только то, что оно отрицательно и основано на текущем времени, как бы то ни было. Для простоты предположим, что это просто целочисленное значение.
Процесс A начинается с приоритетом 0 (предположим, что мы находимся в момент времени t = 0). Он выполняется, скажем, 10 единиц времени, но не завершен, поэтому его необходимо поставить в очередь, чтобы продолжить обработку в будущем. Так что приоритет будет, исходя из формулы
priority = priority + 100*(endtime - starttime)
priorityA = 0 + 100*(10-0)
priorityA = 1000
Первоначальный приоритет процесса B инициализируется при t = 5, поэтому он равен -5. У него самый низкий из двух приоритетов в очереди, поэтому у него тоже будет время. Предположим, что он также работает в течение 10 единиц времени. После этого B будет иметь приоритет:
priorityB = -5 + 100*(20-10)
priorityB = 995
и он снова встанет в очередь. И давайте предположим, что он снова работает на 10 единиц. По его расписанию новый приоритет будет:
priorityB = 995 + 100*(30-20)
priorityB = 1995
Так что это переместит B после A в приоритетной очереди. Затем запускается, но на этот раз работает только 5 единиц времени. Это новый приоритет:
priorityA = 1000 + 100*(35-30)
priorityA = 1500
И процесс А снова будет наверху очереди и привлечет внимание. Предположим, он снова работает в течение 5 единиц времени, его новый приоритет:
priorityA = 1500 + 100(40-35)
priorityA = 2000
, который будет позиционировать его после процесса B, и поэтому B получит некоторое время процессора. Давайте предположим, что на этот раз он использует 5 единиц времени.
priorityB = 1995 + 100(45-40)
priorityB = 2495
Теперь настала очередь А. Посмотрите, как эти два процесса эффективно получают 50% внимания процессора каждый? Если мы добавим в процесс третий длительный процесс («длительный», как A и B, «длительный» в том смысле, что они не работают в течение 10 блоков, а затем завершат, а скорее поставили в очередь), эти процессы каждый из них, вероятно, получит примерно 33% времени процессора, поскольку каждый раз, когда он запускается и не завершается, его приоритет корректируется в зависимости от того, сколько времени он провел. Новые процессы всегда запускаются первыми в этом сценарии, потому что они имеют отрицательное значение приоритета и на самом деле получат более высокий (более низкое числовое значение) приоритет
какое-то время. Однако это не будет длиться вечно - новые процессы начнут получать все большее и большее значение приоритета.
Но так как мы получили, основываясь на допущениях, сделанных для примера книги, около 100 процессов одновременно, ожидающих некоторого времени обработки, а также предположения о том, что не слишком много краткосрочных процессов, будет как правило, около 100 процессов требуют внимания процессоров, поэтому каждый из них будет получать примерно одинаковое количество времени, и вскоре их относительные числовые значения приоритетов будут сгруппированы вокруг друг друга (то есть числовая разница не отличается от той, что имеет наивысший приоритет и один с наименьшим приоритетом), и поэтому после запуска «верхнего» процесса к его приоритету будет добавлено достаточно, чтобы подтолкнуть его вниз (или около дна). Промыть и повторить, и вы, по сути, получите круговой механизм, предполагая, что все они используют примерно одинаковое количество времени каждый обход. В каждый момент времени их около 100, поэтому, опять-таки, если предположить, что существует несколько краткосрочных процессов, каждый из них получает 1/100 внимания процессора.