OSDev

для всех
Текущее время: 29 мар 2024, 00:57

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 01 дек 2013, 22:19 

Зарегистрирован: 17 окт 2013, 18:45
Сообщения: 23
как перепрограммировать системный таймер чтобы он чаще генерировал сигналы? 1000 краз в секунду, к примеру.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 дек 2013, 22:57 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 дек 2013, 23:14 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2013, 01:10 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2013, 02:23 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Чем меньше частота прерываний, тем меньше потребление электроэнергии - для ноутбуков это важно. 18,2Гц вполне достаточно. Удобнее использовать таймер CMOS или Local APIC, там частоты кратные 2 и 10, рассчитывать периоды получается удобнее и точнее. Я слышал, что в Линуксе частота таймера меняется динамически в зависимости от задач.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2013, 10:11 

Зарегистрирован: 31 июл 2013, 09:40
Сообщения: 28
динамическая частота - это хорошо. но как определить, что приложение вошло в аццкий цикл или начало производить аццкие расчеты? думал над этим, но что-то не придумал ничего. если приложение будет юзать системные вызовы, то требуемое процессорное время легко можно определить по частоте вызовов, но вот как быть, если вызовов не происходит? конечно, об этом где-то должно быть написано, но я, признаюсь, даже не пробовал искать)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2013, 18:14 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 дек 2013, 00:23 

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 дек 2013, 11:05 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 дек 2013, 11:31 

Зарегистрирован: 31 июл 2013, 09:40
Сообщения: 28
ага


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB