Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Sep 19, 2019 7:39 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 67 posts ]  Go to page Previous 1 2 3 4 5 Next
Author Message
PostPosted: Fri Sep 02, 2011 3:46 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1342
CleverMouse,
Огромная просьба (пока еще не поздно) определять интервал в миллисекундах, а не в сотых долях секунды.

Code:
void* TimerHS(unsigned int deltaStart, unsigned int interval,
              void* timerFunc, void* userData);
; Registers a timer which is activated in (deltaStart == 0 ? deltaStart :
; interval) 1/100ths


SII wrote:
Пользователю обычно удобней иметь единообразные имена независимо от реального типа устройства

Еще пара шагов в этом направлении - и придем к UNIXовской максиме "все устройства суть файлы, а стало быть все драйверы - часть файловой системы".
Пользователю не надо потакать, он должен иметь хотя бы минимальное представление о структуре и составных частях собственной системы. Иначе ядро превратится в KOLIBRIX.


Last edited by art_zh on Fri Sep 02, 2011 3:58 pm, edited 1 time in total.

Top
   
PostPosted: Fri Sep 02, 2011 3:53 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
art_zh wrote:
Огромная просьба (пока еще не поздно) определять интервал в миллисекундах, а не в сотых долях секунды.


Учитывая производительность процессоров ПК, может, ещё меньше единицы? Задавать, например, в микросекундах, ну а уж с какой точностью реально поддерживается -- пускай определяется реализацией. В конце концов, на ПК, даже промышленных, не решают задачи, где нужно действительно "с точностью до такта" времена выдерживать, поскольку там это попросту невозможно (это не AVRка какая-нибудь), а поэтому, ИМХО, достаточно, чтобы при установке таймера до его срабатывания проходило времени не меньше, чем задано.


Top
   
PostPosted: Fri Sep 02, 2011 4:33 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1620
art_zh, если это пожелание к реализации, то высокоточные таймеры в принципе должны быть отдельным API с другим принципом работы. Например, Delay имеет миллисекундную точность. Если реализация устраивает, но самые исходные данные в миллисекундах, то кто-то должен перегонять их в тики таймера, и неясно, почему этим должно заниматься ядро, а не вызывающий код.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Sep 02, 2011 4:38 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
CleverMouse wrote:
Если реализация устраивает, но самые исходные данные в миллисекундах, то кто-то должен перегонять их в тики таймера, и неясно, почему этим должно заниматься ядро, а не вызывающий код.


Ядро знает, чему равны тики таймера (оно ж настраивает железо), а вот вызывающий код прикладного уровня (и даже драйверы) этого может и не знать (да и не должен знать то, что прямо к нему не относится). В противном случае при внесении изменений в ядро, связанные с увеличением точности таймера, придётся ещё и прикладной код весь переделывать...


Top
   
PostPosted: Fri Sep 02, 2011 4:42 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1620
Насчёт длительности тиков таймера можно не волноваться - она из стольких мест торчит, что её всё равно невозможно изменить. Если не считать трюка "повышаем точность до 1мс, но всю старую обработку вызываем не всегда, а каждый 10-й раз", который фактически сохраняет старую частоту для основной части кода.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Sep 02, 2011 5:02 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1342
CleverMouse
В таком случае это не timer, а counter.
И интервал тогда надо жестко привязывать не к секундам, а к квантам системного таймера. Однажды их длительность таки-может измениться.


Top
   
PostPosted: Fri Sep 02, 2011 5:09 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1620
...в результате чего начнут глючить все программы, использующие любую из сисфункций 5, 23, 26.9, то есть практически все хоть сколько-нибудь существенные. Ну ладно SII, но ты-то должен быть знаком со списком сисфункций?
Короче, функции TimerHS и CancelTimerHS изменению не подлежат. Не нравятся - не используйте, пишите свои. Тема посвящена дисковым устройствам.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Sep 02, 2011 5:32 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
SII прекрасно указал проблемы с именованием устройств из драйвера.
По таймерам. Драйверу достаточно одного ядерного таймера. Дополнительные таймеры реализуются силами самого драйвера. То есть драйвер поддерживает свой упорядоченный список таймеров, и устанавливает таймер ядра на минимальный интервал.
Предложение отсчитывать время таймеров и миллисекундах тоже считаю правильным.


Top
   
PostPosted: Fri Sep 02, 2011 5:37 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Частоту системного таймера давно пора поднять до 250-500 Гц. И счетчик тиков делать дополнительный на 64 бита. Переключать потоки на каждом тике тоже не айс. Нужны кванты 20-50 миллисекунд.


Top
   
PostPosted: Fri Sep 02, 2011 5:40 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
Serge wrote:
Драйверу достаточно одного ядерного таймера. Дополнительные таймеры реализуются силами самого драйвера. То есть драйвер поддерживает свой упорядоченный список таймеров, и устанавливает таймер ядра на минимальный интервал.


А зачем сваливать на потенциально каждый драйвер несвойственные для него функции, которые элементарно поддаются обобщению и централизованной реализации? Зачем дублировать, по сути, один и тот же код в куче драйверов, если можно реализовать его один раз?

Quote:
Предложение отсчитывать время таймеров и миллисекундах тоже считаю правильным.


А лучше всё ж в микросекундах -- чтоб запас на будущее был...


Top
   
PostPosted: Fri Sep 02, 2011 5:41 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
Serge wrote:
Частоту системного таймера давно пора поднять до 250-500 Гц. И счетчик тиков делать дополнительный на 64 бита. Переключать потоки на каждом тике тоже не айс. Нужны кванты 20-50 миллисекунд.


Причём размер кванта потенциально должен устанавливаться для каждого потока индивидуально (на основе приоритетов или ещё чего -- это уж неважно в данном случае).


Top
   
PostPosted: Fri Sep 02, 2011 5:47 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
SII

Код может быть и в ядре. По такому принципу работают таймеры в Minix.


Top
   
PostPosted: Fri Sep 02, 2011 5:47 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1342
CleverMouse

[corrected] прошу забыть этот пост. Тут я был сильно неправ.


Top
   
PostPosted: Fri Sep 02, 2011 7:22 pm 
Offline

Joined: Tue Jul 26, 2011 11:03 pm
Posts: 62
Однако как хорошо когда все начинают думать вслух наконец.
А знаете у всех современых устройств есть прерывания, таймауты ваще не должны использоватся

Quote:
одному драйверу может оказаться полезным устанавливать несколько таймеров - например, к компьютеру запросто могут быть подключены две USB-клавиатуры, для каждой из которых нужен отдельный таймер автоповтора.
2 клавы - 2 драйвера клавы


Top
   
PostPosted: Fri Sep 02, 2011 7:27 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
ilya wrote:
А знаете у всех современых устройств есть прерывания, таймауты ваще не должны использоватся


Как ни странно, не все устройства являются современными. И даже не всё зависит от их современности.

ilya wrote:
2 клавы - 2 драйвера клавы


Ага, и дважды в памяти дублировать один и тот же код, а не только данные, связанные с управлением конкретным экземпляром устройства.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 67 posts ]  Go to page Previous 1 2 3 4 5 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited