Page 1 of 2

Scheduler

Posted: Wed Oct 26, 2005 8:43 pm
by Иван Поддубный
Интересный факт, связанный с диспетчером задач: два равноправных теоретически процесса получают разные доли процессорного времени.

Попробуйте проделать такой эксперимент: запустите в последнем дистрибутиве Колибри два раза TRANTEST. Результат удивительный, в одном окне количество нарисованных треугольников в 2 раза больше, чем в другом!

Причем несправедливость эта присутствует в системе очень давно.

Posted: Wed Oct 26, 2005 10:45 pm
by camper
А можно ли это как-то использовать? Например некоторым задачам, на свое усмотрение, давать приоритет процессорного времени? Есть задачи по управлению оборудованием, там бы это пригодилось.

Posted: Thu Oct 27, 2005 9:58 am
by NoName
будем делать

Posted: Sat Oct 29, 2005 11:08 pm
by Mario79
Иван Поддубный
Я повел эксперимент еще дальше. :-)
Запустил 3, 4 и 5 приложение.
Получается, на первый запущенный процесс выделяется времени как на 2 обычных процесса. На все последующие процессы время делится поровну.
Это хорошо заметно и на приложении FIRE2.

Posted: Wed Nov 02, 2005 7:34 pm
by Wildwest
>Получается, на первый запущенный процесс выделяется времени как на 2 обычных процесса.

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

Posted: Wed Nov 02, 2005 10:01 pm
by halyavin
Как мне объяснил Поддубный, дело в предыдущем процессе - если процесс идет после icon, то он получает почти удвоенный квант времени (icon обычно быстро отказывается от своей доли), а если после процесса, использующего время по полной, то он получит лишь свой гарантированный квант времени.

Posted: Wed Nov 02, 2005 10:19 pm
by Иван Поддубный
Да, и на месте ICON может быть любой процесс, ожидающий события.
Соответственно исправить это положение можно, не выделяя кванта времени таким процессам. Тогда проверка на события должна осуществляться в шедулере (планировщике задач).

Posted: Mon Nov 07, 2005 12:53 pm
by NoName
да совершенно логично. Так сделано даже в винде.

Posted: Thu Nov 10, 2005 6:55 pm
by Иван Поддубный
Даже если не активировать ожидающие события процессы, распределение процессорного времени несправедливо.
Например, работающий @RB получает событие от каждого движения мыши. Обработка события занимает много меньше 10мс.
Таким образом, процесс, стоящий в очереди сразу после @RB, получит почти удвоенный квант времени.

Чтобы промежутки времени распределялись справедливо, нужно вводить приоритеты процессов.

Posted: Thu Nov 10, 2005 9:27 pm
by Wildwest
>Чтобы промежутки времени распределялись справедливо, нужно вводить приоритеты процессов.

ИМХО, приоритеты существуют для того, чтобы время распределялось неравномерно :)

Posted: Fri Nov 11, 2005 12:23 pm
by NoName
Приоритеты создают для того чтобы отдать эти самые "лишние" куски квантов процессам\потокам которые в этом реально нуждаются.
Появляется конуренция за процессорное время.

Posted: Fri Nov 11, 2005 5:59 pm
by Иван Поддубный
Wildwest
Справедливо - не обязательно равномерно!
Однако с использованием динамически изменяемых приоритетов можно добиться более равномерного распределения процессора внутри одного класса задач.

Вопрос в том, какой выбать (придумать?) алгоритм для шедулера... сколько приоритетов, каковы правила их изменения?

Posted: Sat Nov 12, 2005 7:49 pm
by camper
http://www.mycomp.com.ua/text/7227;jses ... D6E4E74F35
Может тип проца причем? Тестилось ли на разных процах?

Posted: Sat Nov 12, 2005 8:24 pm
by Иван Поддубный
Дело не в процессоре, а в алгоритмах планирования, диспетчеризации задач, которые используются в ядре ОС.

Posted: Mon Nov 14, 2005 12:30 pm
by NoName
Предлагаю выделить структуру где будет описано по 4 бита для приоритета, т.е. 16 комбинаций. Меньше только 4, чего явно мало.