По этой книге был большой архив примеров кода, на сайте издательства, но я не могу URL найти (да и в книге он с ошибкой написан). Так что я архив примеров сюда в тему приложу.Olej писал(а):Ещё можете посмотреть (не эту статью, но другие вещи, ... проливающие свет на ту же темуOlej писал(а): 2. Все мои статьи того времени были включены в книгу "Практика работы с QNX") вот здесь: QNX/UNIX: анатомия параллелизма.
Вот здесь можете эту книжку свободно скачать.
QNX Neutrino
Модераторы: Olej, bellic, adminn, vikos
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: QNX Neutrino
- Вложения
-
anatomy_QNX_orig.tgz
- (107.41 КБ) 762 скачивания
-
- Писатель
- Сообщения: 69
- Зарегистрирован: 02 авг 2012, 14:22
- Откуда: Москва
- Контактная информация:
Re: QNX Neutrino
Спасибо Olej ещё раз! Прекрасная статья, особенно по функционалу службы времени!(с поправкой на время написания)Olej писал(а): А если вам только эту статью, то вот вам ссылка, где она ещё сохранилась для чтения: QNX: служба времени.
Разрешите задать по ней один вопрос
![Подмигивает ;-)](./images/smilies/icon_e_wink.gif)
Уже не в первый раз в коде попадаются мне константа СLOCKS_PER_SEC и функция clock(), с какими же единицами измерения они работают? Судя по СLOCKS_PER_SEC, которое на всех компах, независимо от процессора, непонятный миллион
![Озадачен :-?](./images/smilies/icon_e_confused.gif)
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: QNX Neutrino
Там же по тексту есть цитата из документации:SimpleUser писал(а): Уже не в первый раз в коде попадаются мне константа СLOCKS_PER_SEC и функция clock(), с какими же единицами измерения они работают? Судя по СLOCKS_PER_SEC, которое на всех компах, независимо от процессора, непонятный миллион, это микросекунда. Но определение функции clock() говорит, что она возвращает истекшее количество тиков часов, а я не могу себе представить в системе часов, работающих с периодом ровно 1мкс. Значит сlock() просто возвращает время в микросекундах, несмотря на определение?
CLOCK_PER_SEC - число тиков в секунду.Дословно из HELP: "The clock() function returns the number of clock ticks of processor time used by the programm since it started executing. You can convert number of tics in seconds by dividing by the value CLOCK_PER_SEC.". Это - чистое процессорное время, диспетчированное потоку:
...
посмотреть значение константы CLOCK_PER_SEC, установленное в системе:
CLOCK_PER_SEC = 1000000
В QNX может динамически произвольно переустанавливаться вызовом:
Это (возможность переустановить тик) отличает QNX от других OS (в Linux это можно сделать только пересборкой ядра, в Windows - никак).Код: Выделить всё
_clockperiod clcold; ClockPeriod( CLOCK_REALTIME, NULL, &clcold, 0 ); ... Структура _clockperiod имеет вид: struct _clockperiod { uint64_t nsec, // наносекунды fract // фемтосекунды, рассчитано на будущие развития // и должно быть равным 0! };
По умолчанию CLOCK_PER_SEC = 1000000, т.е. системный тик = 1мсек.
Может быть уменьшен до 10мксек. (!)
Вызов clock() (как сказано в цитате) - число системных тиков от загрузки системы. Это вызов POSIX, ищите там.
Вызов ClockCycles() - это совсем другое: число тактов (периодов частоты) процессора от загрузки системы (счётчик RDTSC x86). Это величина наносекундного диапазона, если у вас процессор 1Ghz, то будет прибывать на 10**9 каждую секунду.
Ещё:
Код: Выделить всё
uint64_t cps = SYSPAGE_ENTRY( qtime )->cycles_per_sec;
Всё это есть в интерактивном HELP установленной системы QNX.
-
- Писатель
- Сообщения: 69
- Зарегистрирован: 02 авг 2012, 14:22
- Откуда: Москва
- Контактная информация:
Re: QNX Neutrino
Естественно я первым делом залез в HELP, только ответа там к сожалению не нашёл.Olej писал(а): Всё это есть в интерактивном HELP установленной системы QNX.
Наверное я что-то не понимаю, но я считал что в 1 секунде 1000 миллисекунд, и при системном тике 1мс CLOCKS_PER_SEC должно равняться 1000... поэтому так и не могу понять почему там 1000000 вне зависимости от величины системного тика или частоты процессора -- значит ни к тому, ни к другому CLOCKS_PER_SEC отношения не имеет?Olej писал(а): По умолчанию CLOCK_PER_SEC = 1000000, т.е. системный тик = 1мсек.
Может быть уменьшен до 10мксек. (!)
Вызов clock() (как сказано в цитате) - число системных тиков от загрузки системы. Это вызов POSIX, ищите там.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: QNX Neutrino
Я не помню деталей... Но:SimpleUser писал(а):Наверное я что-то не понимаю, но я считал что в 1 секунде 1000 миллисекунд, и при системном тике 1мс CLOCKS_PER_SEC должно равняться 1000... поэтому так и не могу понять почему там 1000000 вне зависимости от величины системного тика или частоты процессора -- значит ни к тому, ни к другому CLOCKS_PER_SEC отношения не имеет?
- Всё, что относится к clock() и CLOCKS_PER_SEC - это не из области QNX, это из области определения POSIX, общих для всех UNIX систем...
- можете детальнее посмотреть описания в Linux:
Код: Выделить всё
bash-4.2$ man 3 clock
...
DESCRIPTION
The clock() function returns an approximation of processor time used by the program.
RETURN VALUE
The value returned is the CPU time used so far as a clock_t; to get the number of seconds used, divide by CLOCKS_PER_SEC. If
the processor time used is not available or its value cannot be represented, the function returns the value (clock_t) -1.
CONFORMING TO
C89, C99, POSIX.1-2001. POSIX requires that CLOCKS_PER_SEC equals 1000000 independent of the actual resolution.
...
- как я полагаю, результат возвращается в микросекундах, независимо от системного тика, используемого в той или иной ОС.
В любом случае, man говорит
![Подмигивает ;-)](./images/smilies/icon_e_wink.gif)
- Виктория
- Писатель
- Сообщения: 113
- Зарегистрирован: 28 дек 2012, 14:05
- Откуда: Самара
- Контактная информация:
Re: QNX Neutrino
Поправьте меня, если я не в той теме задаю свой вопрос.
Объект измерения требует три таймера, независимых в вероятностном смысле. Предположим, процессорные средства это позволяют реализовать. А есть ли в QNX программная поддержка со стороны микроядра и/или QNet для обработки прерываний от этих таймеров-генераторов? Период между прерываниями 1-10 мкс, хотя бы так для начала.
Объект измерения требует три таймера, независимых в вероятностном смысле. Предположим, процессорные средства это позволяют реализовать. А есть ли в QNX программная поддержка со стороны микроядра и/или QNet для обработки прерываний от этих таймеров-генераторов? Период между прерываниями 1-10 мкс, хотя бы так для начала.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: QNX Neutrino
Я не понял вопроса...Виктория писал(а):Объект измерения требует три таймера, независимых в вероятностном смысле. Предположим, процессорные средства это позволяют реализовать. А есть ли в QNX программная поддержка со стороны микроядра и/или QNet для обработки прерываний от этих таймеров-генераторов? Период между прерываниями 1-10 мкс, хотя бы так для начала.
Что значит "в вероятностном смысле"?Виктория писал(а):Объект измерения требует три таймера, независимых в вероятностном смысле.
Таймеры периодические?
Если вы имеете в виду некоторые аппаратные таймеры...? то обработка прерываний от них может быть реализована, средствами native API QNX для обработки прерываний.Виктория писал(а):Предположим, процессорные средства это позволяют реализовать. А есть ли в QNX программная поддержка со стороны микроядра и/или QNet для обработки прерываний от этих таймеров-генераторов? Период между прерываниями 1-10 мкс, хотя бы так для начала.
А при чём здесь QNET или как может быть использована? QNET это чисто сетевая протокольная часть для передачи тех же сообщений микроядра, но между разными хостами.
По поводу 1-10 мкс...
Это какой-то совершенно мизерный интервал (период), чтобы он осознанно распознавался QNX. Самый минимальный размер системного тика, который может быть принудительно установлен в QNX - 10мкс. Любые события, следующие чаще системного тика - неразличимы системой.
P.S. Если это обсуждения некоторых гипотетических возможностей, то их обсуждение лучше перенести а). на примеры Linux, и б). где-то в отдельную новую тему.
Почему лучше Linux?
Потому что QNX закрытая система, в общем, всё, что выходит за рамки их техдокументации - можно только гадать.
В Linux можно попытаться разобраться с тем, что не освещено документацией. Кроме того в Linux начиная с ядер (очень примерно!) 2.6.18 и далее, есть такая вещь, как поддержка таймеров высокого разрешения, реализованная на таймерах APIC.
-
- Писатель
- Сообщения: 69
- Зарегистрирован: 02 авг 2012, 14:22
- Откуда: Москва
- Контактная информация:
Re: QNX Neutrino
Здравствуйте Olej! Хотел поинтересоваться, как прошла у вас установка Моментикса на Федору? Я вот на свою FC17_64 пытаюсь поставить версию для 6.3.2 -- заканчивается на точках.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: QNX Neutrino
В виртуальной машине VirtualBox?SimpleUser писал(а):Хотел поинтересоваться, как прошла у вас установка Моментикса на Федору?
Замечательно!
![Подмигивает ;-)](./images/smilies/icon_e_wink.gif)
Можно даже QNET поднять сеть, думаю, если организовывать QNET over IP (т.е. не над MAC уровнем).
Это может быть связано с типом процессора, на котором у вас работает FC17_64 - нужно чтобы процессор поддерживал аппаратную виртуализацию (расширение архитектуры):SimpleUser писал(а):Я вот на свою FC17_64 пытаюсь поставить версию для 6.3.2 -- заканчивается на точках.
- QNX поддерживается, где-то я читал, только если есть поддержка аппаратной виртуализации.
- поддержка 64-бит виртуальных машин на 32-бит VirtualBox обеспечивается только при поддержке аппаратной виртуализации (это из документации VirtualBox), думаю, что наоборот: 32-бит VM в 64-бит VirtualBox - то же самое.
P.S. SimpleUser, а на кой хрен вам понадобилось устанавливать FC17 на 64 бит?
У вас что? а). особо нагруженный сервер массового коллективного доступа? б). RAM в размере 50Gb и вам её некуда девать?
![Подмигивает ;-)](./images/smilies/icon_e_wink.gif)
-
- Писатель
- Сообщения: 69
- Зарегистрирован: 02 авг 2012, 14:22
- Откуда: Москва
- Контактная информация:
Re: QNX Neutrino
Я имел ввиду среду разработки QNX Momentics Development Suite 6.3.2, не саму RTOS. На работе срочно понадобился драйвер для ПЛИСовского контроллера PCIe под QNX, для начала надо бы среду разработки установить.
Обычный 2-ядерный i3, 2Gb RAM. Хотел продвинутую версию попробовать, Винда-то вся что, Pro -- 64. Опять же, скорость.Olej писал(а): P.S. SimpleUser, а на кой хрен вам понадобилось устанавливать FC17 на 64 бит?
У вас что? а). особо нагруженный сервер массового коллективного доступа? б). RAM в размере 50Gb и вам её некуда девать?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей