Kernel architecture questions
-
-
- Posts 1465
- Joined: Fri Aug 14, 2009 1:46 am
CleverMouse,
Огромная просьба (пока еще не поздно) определять интервал в миллисекундах, а не в сотых долях секунды.
Code: Select all
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.
-
- Posts 214
- Joined: Wed Dec 26, 2007 5:09 am
art_zh wrote:Огромная просьба (пока еще не поздно) определять интервал в миллисекундах, а не в сотых долях секунды.
Учитывая производительность процессоров ПК, может, ещё меньше единицы? Задавать, например, в микросекундах, ну а уж с какой точностью реально поддерживается -- пускай определяется реализацией. В конце концов, на ПК, даже промышленных, не решают задачи, где нужно действительно "с точностью до такта" времена выдерживать, поскольку там это попросту невозможно (это не AVRка какая-нибудь), а поэтому, ИМХО, достаточно, чтобы при установке таймера до его срабатывания проходило времени не меньше, чем задано.
-
- Posts 1625
- Joined: Thu Sep 03, 2009 1:52 pm
art_zh, если это пожелание к реализации, то высокоточные таймеры в принципе должны быть отдельным API с другим принципом работы. Например, Delay имеет миллисекундную точность. Если реализация устраивает, но самые исходные данные в миллисекундах, то кто-то должен перегонять их в тики таймера, и неясно, почему этим должно заниматься ядро, а не вызывающий код.
-
- Posts 214
- Joined: Wed Dec 26, 2007 5:09 am
CleverMouse wrote:Если реализация устраивает, но самые исходные данные в миллисекундах, то кто-то должен перегонять их в тики таймера, и неясно, почему этим должно заниматься ядро, а не вызывающий код.
Ядро знает, чему равны тики таймера (оно ж настраивает железо), а вот вызывающий код прикладного уровня (и даже драйверы) этого может и не знать (да и не должен знать то, что прямо к нему не относится). В противном случае при внесении изменений в ядро, связанные с увеличением точности таймера, придётся ещё и прикладной код весь переделывать...
-
- Posts 1625
- Joined: Thu Sep 03, 2009 1:52 pm
Насчёт длительности тиков таймера можно не волноваться - она из стольких мест торчит, что её всё равно невозможно изменить. Если не считать трюка "повышаем точность до 1мс, но всю старую обработку вызываем не всегда, а каждый 10-й раз", который фактически сохраняет старую частоту для основной части кода.
-
- Posts 1465
- Joined: Fri Aug 14, 2009 1:46 am
CleverMouse
В таком случае это не timer, а counter.
И интервал тогда надо жестко привязывать не к секундам, а к квантам системного таймера. Однажды их длительность таки-может измениться.
-
- Posts 1625
- Joined: Thu Sep 03, 2009 1:52 pm
...в результате чего начнут глючить все программы, использующие любую из сисфункций 5, 23, 26.9, то есть практически все хоть сколько-нибудь существенные. Ну ладно SII, но ты-то должен быть знаком со списком сисфункций?
Короче, функции TimerHS и CancelTimerHS изменению не подлежат. Не нравятся - не используйте, пишите свои. Тема посвящена дисковым устройствам.
-
- Posts 3952
- Joined: Wed Mar 08, 2006 6:25 pm
SII прекрасно указал проблемы с именованием устройств из драйвера.
По таймерам. Драйверу достаточно одного ядерного таймера. Дополнительные таймеры реализуются силами самого драйвера. То есть драйвер поддерживает свой упорядоченный список таймеров, и устанавливает таймер ядра на минимальный интервал.
Предложение отсчитывать время таймеров и миллисекундах тоже считаю правильным.
-
- Posts 3952
- Joined: Wed Mar 08, 2006 6:25 pm
Частоту системного таймера давно пора поднять до 250-500 Гц. И счетчик тиков делать дополнительный на 64 бита. Переключать потоки на каждом тике тоже не айс. Нужны кванты 20-50 миллисекунд.
-
- Posts 214
- Joined: Wed Dec 26, 2007 5:09 am
Serge wrote:Драйверу достаточно одного ядерного таймера. Дополнительные таймеры реализуются силами самого драйвера. То есть драйвер поддерживает свой упорядоченный список таймеров, и устанавливает таймер ядра на минимальный интервал.
А зачем сваливать на потенциально
каждый драйвер несвойственные для него функции, которые элементарно поддаются обобщению и централизованной реализации? Зачем дублировать, по сути, один и тот же код в куче драйверов, если можно реализовать его один раз?
Предложение отсчитывать время таймеров и миллисекундах тоже считаю правильным.
А лучше всё ж в микросекундах -- чтоб запас на будущее был...
-
- Posts 214
- Joined: Wed Dec 26, 2007 5:09 am
Serge wrote:Частоту системного таймера давно пора поднять до 250-500 Гц. И счетчик тиков делать дополнительный на 64 бита. Переключать потоки на каждом тике тоже не айс. Нужны кванты 20-50 миллисекунд.
Причём размер кванта потенциально должен устанавливаться для каждого потока индивидуально (на основе приоритетов или ещё чего -- это уж неважно в данном случае).
-
- Posts 3952
- Joined: Wed Mar 08, 2006 6:25 pm
SII
Код может быть и в ядре. По такому принципу работают таймеры в Minix.
-
- Posts 1465
- Joined: Fri Aug 14, 2009 1:46 am
CleverMouse
[corrected] прошу забыть этот пост. Тут я был сильно неправ.
-
- Posts 62
- Joined: Tue Jul 26, 2011 11:03 pm
Однако как хорошо когда все начинают думать вслух наконец.
А знаете у всех современых устройств есть прерывания, таймауты ваще не должны использоватся
одному драйверу может оказаться полезным устанавливать несколько таймеров - например, к компьютеру запросто могут быть подключены две USB-клавиатуры, для каждой из которых нужен отдельный таймер автоповтора.
2 клавы - 2 драйвера клавы
-
- Posts 214
- Joined: Wed Dec 26, 2007 5:09 am
ilya wrote:А знаете у всех современых устройств есть прерывания, таймауты ваще не должны использоватся
Как ни странно, не все устройства являются современными. И даже не всё зависит от их современности.
ilya wrote:2 клавы - 2 драйвера клавы
Ага, и дважды в памяти дублировать один и тот же код, а не только данные, связанные с управлением конкретным экземпляром устройства.
Users browsing this forum: No registered users and 6 guests