OSDev
http://osdev.su/

перепрограммирование системного таймера
http://osdev.su/viewtopic.php?f=7&t=833
Страница 1 из 2

Автор:  Мотороллер [ 01 дек 2013, 22:19 ]
Заголовок сообщения:  перепрограммирование системного таймера

как перепрограммировать системный таймер чтобы он чаще генерировал сигналы? 1000 краз в секунду, к примеру.

Автор:  Nable [ 01 дек 2013, 22:57 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

"Have a question - search it first".
Собственно: http://wiki.osdev.org/Programmable_Inte ... y_Dividers
tl;dr: для начала, есть чип 8254 (точнее, уже давно нет, но зачастую материнки создают видимость что он есть), это простой системный таймер, частота задаётся делителем, его нужно рассчитать и записать в правильные порты.

И да, ИМХО, куча прерываний в единицу времени - зло и признак плохого дизайна. Но для начала очень удобно.

Автор:  Мотороллер [ 01 дек 2013, 23:14 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

Nable писал(а):
И да, ИМХО, куча прерываний в единицу времени - зло и признак плохого дизайна. Но для начала очень удобно.

а переключение задач 18.2 раза в секунду делать? :)

Автор:  Nable [ 02 дек 2013, 01:10 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

Ну почему 18.2, мне вполне так нравится вариант 100. Конечно, для десктопа предлагают 1000 для отзывчивости, но при характерном нынче количестве процессорных ядер - я бы разделял обработку UI, I/O и прочего (а не так что либо всех дёргаем постоянно, либо не дёргаем, но и UI подлагивает).
Ну да ладно, это теоретизирование, совершенно без практики (или хотя бы глубокого знания матчасти, коего у меня нет) не интересное.

По ссылке удалось разобраться, надеюсь?

Автор:  Himik [ 02 дек 2013, 02:23 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

Чем меньше частота прерываний, тем меньше потребление электроэнергии - для ноутбуков это важно. 18,2Гц вполне достаточно. Удобнее использовать таймер CMOS или Local APIC, там частоты кратные 2 и 10, рассчитывать периоды получается удобнее и точнее. Я слышал, что в Линуксе частота таймера меняется динамически в зависимости от задач.

Автор:  sh2ezo [ 02 дек 2013, 10:11 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

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

Автор:  pavia [ 02 дек 2013, 18:14 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

Himik писал(а):
Чем меньше частота прерываний, тем меньше потребление электроэнергии - для ноутбуков это важно. 18,2Гц вполне достаточно. Удобнее использовать таймер CMOS или Local APIC, там частоты кратные 2 и 10, рассчитывать периоды получается удобнее и точнее. Я слышал, что в Линуксе частота таймера меняется динамически в зависимости от задач.
:lol:
Основное энергопотребление приходиться на дисплей. А потом уже на процессор. Что касается процессора, то тут основное потребление вызывает кэш.
И прерывания тут не причём. Вернее они косвенно влияют.
Кэш у нас обновляться только при переключении задач. Когда идёт сохранения регистров и загрузка других страниц. Также побочный эффекты будут в случае кочевания задачи с ядра на ядро.
А известные мне ОС не спешат переключать задачи. Основная задача переключается раз в 250 мс. Что экономит очень много времени.

Автор:  Nable [ 03 дек 2013, 00:23 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

Himik писал(а):
Чем меньше частота прерываний, тем меньше потребление электроэнергии - для ноутбуков это важно. 18,2Гц вполне достаточно. Удобнее использовать таймер CMOS или Local APIC, там частоты кратные 2 и 10, рассчитывать периоды получается удобнее и точнее. Я слышал, что в Линуксе частота таймера меняется динамически в зависимости от задач.

Не столько в частоте прерываний дело, сколько в частоте процессора. А именно, когда процессор страдает фигнёй и не сильно занят, то можно его частоту снижать, а то и в разной мере неглубокий сон отправлять. Меньше энергопотребление, а соотв. и нагрев. Это не только к ноутам относится не везде электричество настолько дёшево, как в России, но и стационарникам, на кластерах так вообще заметно (не всегда загружен на 100%, а электричества жрёт огого, при этом совсем выключать узлы нельзя - сдохнут от частых включений/выключений, да и суспендить тоже не айс, долго поднимается). Так вот, даже если страдаем фигнёй и отправляем проц в неглубокий сон, таймер будет постоянно пробуждать его. Фигово. В общем, придумали dynticks (что забавно, хоть в винде это появилось только в 8й, но из-за кривых линуховых дров, не умеющих переключать режимы, обычно под линухом ноут греется сильнее и работает гораздо меньше от батареи, хотя очень сильно от драйверов зависит, бывают обратные примеры), потом ещё и примерно со второй попытки сделали более-менее нормально (вплоть до работы большую часть времени в tickless режиме, при этом при необходимости пользуясь one-shot таймерами).

А про экран часто слышал, но уж больно часто на своём реальном железе вижу как в разы может меняться время жизни от зарядки, при том что экран светит 100% времени, например. Хотя от экрана тоже есть немалая зависимость: во-первых, уменьшение яркости подсветки немного позволяет протянуть дольше, во-вторых, есть некоторая косвенная зависимость: для большего по разрешению экрана нужно больше вычислительных мощностей. Вот этот фактор (хотя нечасто удаётся сравнить два примерно одинаковых девайса, отличающихся почти только экраном) позволяет говорить про зависимость от экрана. Собственно, утверждения что экран жрёт больше всего тогда примерно и получили распространение, когда пошли устройства с огромным (по моим меркам, не признающим "мыло" - размытую графику) разрешением.

Автор:  Мотороллер [ 03 дек 2013, 11:05 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

извините за долгое отсутствие, кодил прерывание от клавы - сделал (работает и инглишь и русишь)!!! я так понял, что частота генерации прерываний задается числом 1193180/С, где С- это некое число. соответственно чтобы на выходе было 100 прерываний в секунду, а должен в порт 40h заслать число 11931, что примерно выдаст 100. верно?

Автор:  sh2ezo [ 03 дек 2013, 11:31 ]
Заголовок сообщения:  Re: перепрограммирование системного таймера

ага

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/