Вычисления приоритета, использованные в алгоритме кратковременного планирования, разбросаны в различных частях системы. Периодически запускаются две процедуры, schedcpu() и roundrobin(). Schedcpu() пересчитывает приоритеты потоков раз в секунду, используя формулу 4.2, и обновляет значение kgslptime для потоков, заблокированных вызовом sleep(). Процедура roundrobin() запускается 10 раз в секунду и заставляет систему перепланировать потоки в (непустой) очереди с самым высоким приоритетом в режиме карусели, что дает каждому потоку квант времени в 100 миллисекунд.
Оценки использования процессора обновляются в системном модуле обработки времени, hardclock() который выполняется 100 раз в секунду. Каждый раз, когда процесс набирает четыре тика в своей оценке использования процессора, kgestcpu, система пересчитывает приоритет потока. Этот пересчет использует формулу 4.1 и осуществляется процедурой resetpriority(). Решение о пересчете после четырех тиков связано с управлением очередями выполнения. Кроме вызова из hardclock(), каждый раз, когда setrunnable() помещает поток в очередь выполнения, она также вызывает resetpriority() для пересчета приоритета планирования потока. Этот вызов из wakeup() функции setrunnable() действует с потоком, не являющимся текущим. Поэтому setrunnable() до вызова resetpriority() вызывает updatepri() для пересчета оценки использования времени процессора в соответствии с формулой. Взаимоотношения этих функций показаны на рис..

Интерфейс процедур для вычислений приоритета
- 17/10/2010 12:22 - Сеансы
- 14/10/2010 16:15 - Группы процессов и сеансы
- 12/10/2010 02:42 - Доставка сигнала
- 11/10/2010 07:30 - Отправка сигнала
- 10/10/2010 22:11 - История сигналов
- 09/10/2010 12:36 - Сигналы
- 09/10/2010 10:28 - Завершение процесса
- 05/10/2010 23:55 - Планирование потоков с разделением времени
- 03/10/2010 00:33 - Создание процесса
- 01/10/2010 01:49 - Планировщик 4.4BSD