Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Службы ядра Процедуры вычисления приоритета потока

Процедуры вычисления приоритета потока

Вычисления приоритета, использованные в алгоритме кратковременного планирования, разбросаны в различных частях системы. Периодически запускаются две процедуры, schedcpu() и roundrobin(). Schedcpu() пересчитывает приоритеты потоков раз в секунду, используя формулу 4.2, и обновляет значение kgslptime для потоков, заблокированных вызовом sleep(). Процедура roundrobin() запускается 10 раз в секунду и заставляет систему перепланировать потоки в (непустой) очереди с самым высоким приоритетом в режиме карусели, что дает каждому потоку квант времени в 100 миллисекунд.

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

Интерфейс процедур для вычислений приоритета


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 70 гостей онлайн

Реклама на сайте:

Швеллер алюминиевый нужное на странице profilua.com.ua.